Jelajahi Sumber

店铺各类目数量统计调整

wangyc 7 tahun lalu
induk
melakukan
0ae8afe039

+ 11 - 3
src/main/java/com/uas/platform/b2c/prod/commodity/dao/GoodsDao.java

@@ -428,8 +428,8 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      * @param kindid 类目id
      * @return
      */
-    @Query(value = "select count(1) from Goods g where g.storeid = :uuid and g.kindUuid = :kinid and g.status=601")
-    Integer CountByStoreUuidAndKindid(@Param("uuid") String uuid, @Param("kindid") Long kindid);
+    @Query(value = "select count(1) from trade$goods where go_storeid = :uuid and go_kind_uuid in (:kindids) and go_status=601", nativeQuery = true)
+    Integer CountByStoreUuidAndKindid(@Param("uuid") String uuid, @Param("kindids") List<Long> kindids);
 
     /**
      * 获取店铺的所有类目信息
@@ -651,7 +651,7 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
 	 * @param storeUuid
 	 * @return
 	 */
-	@Query(value = "select count(g) from Goods g where g.storeid = :storeUuid and g.status = 601 and g.kindNameCn is null")
+	@Query(value = "select count(1) from Goods g where g.storeid = :storeUuid and g.status = 601 and g.uuid is null")
 	int findNonstandardGoodsCount(@Param("storeUuid") String storeUuid);
 
 
@@ -786,4 +786,12 @@ public interface GoodsDao extends JpaSpecificationExecutor<Goods>, JpaRepository
      */
     @Query(value = "select distinct g.enUU from Goods g where g.storeid = :storeid")
     Long findenUUByStoreid(@Param("storeid") String storeid);
+
+    /**
+     * 根据店铺id查找店铺所有有效在售批次数量
+     * @param storeid
+     * @return
+     */
+    @Query(value = "select count(1) from Goods g where g.storeid = :storeid and g.status = 601")
+    Integer countByStoreid(@Param("storeid") String storeid);
 }

+ 3 - 0
src/main/java/com/uas/platform/b2c/prod/product/kind/dao/KindInfoDao.java

@@ -64,4 +64,7 @@ public interface KindInfoDao extends JpaSpecificationExecutor<KindInfo>, JpaRepo
 	 * @return
 	 */
 	public KindInfo findByNameCn(String name);
+
+	@Query(value = "select findLeafKind(:parentid)", nativeQuery = true)
+	public String findLeafKind(@Param("parentid") Long parentid);
 }

+ 23 - 5
src/main/java/com/uas/platform/b2c/prod/store/facade/impl/CommodityFacadeImpl.java

@@ -1,11 +1,13 @@
 package com.uas.platform.b2c.prod.store.facade.impl;
 
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.product.kind.service.KindService;
 import com.uas.platform.b2c.prod.store.facade.CommodityFacade;
 import com.uas.platform.b2c.prod.store.service.CommodityService;
+import com.uas.platform.core.model.Constant;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -32,17 +34,21 @@ public class CommodityFacadeImpl implements CommodityFacade {
 
 	private final SysConf sysConf;
 
+	private final GoodsDao goodsDao;
+
 	@Autowired
-	public CommodityFacadeImpl(CommodityService commodityService, KindService kindService, GoodsService goodsService,SysConf sysConf) {
+	public CommodityFacadeImpl(CommodityService commodityService, KindService kindService, GoodsService goodsService,SysConf sysConf, GoodsDao goodsDao) {
 		this.commodityService = commodityService;
 		this.kindService = kindService;
 		this.goodsService = goodsService;
 		this.sysConf = sysConf;
+		this.goodsDao = goodsDao;
 	}
 
 	@Override
 	public List<KindInfo> getAllKindsInfoByStoreUuid(String storeUuid) {
 		final KindInfo allKind = KindInfo.getAllKind(); //外层所有类目包裹
+		allKind.setCount(goodsDao.countByStoreid(storeUuid));
 		Set<KindInfo> children = new LinkedHashSet<>();
 		if (StringUtils.hasText(storeUuid)) {
 			Set<Long> kindUuidSet = commodityService.findAllKindsByStoreUuid(storeUuid);
@@ -51,10 +57,6 @@ public class CommodityFacadeImpl implements CommodityFacade {
 				children.addAll(kindList);
 			}
 		}
-		// 补充该店铺各类目下商品数量
-		for (KindInfo kindInfo : children) {
-			kindInfo.setCount(commodityService.CountCommodityByKindAndStore(kindInfo.getId(), storeUuid));
-		}
 		int count = goodsService.getNonstandardGoodsCount(storeUuid); //有效的在售非标数
 		if (!sysConf.getStoreid().equals(storeUuid)) {
 			Long enUU = goodsService.findenUUByStoreid(storeUuid);
@@ -66,6 +68,22 @@ public class CommodityFacadeImpl implements CommodityFacade {
 				}
 			}
 		}
+
+		// 补充该店铺各类目下商品数量
+		for (KindInfo kindInfo : children) {
+			kindInfo.setCount(commodityService.countCommodityByKindAndStore(kindInfo, storeUuid));
+			if (kindInfo.getIsLeaf().equals(Constant.NO) && !CollectionUtils.isEmpty(kindInfo.getChildren())) {
+				for (KindInfo child : kindInfo.getChildren()) {
+					child.setCount(commodityService.countCommodityByKindAndStore(child, storeUuid));
+					if (child.getIsLeaf().equals(Constant.NO) && !CollectionUtils.isEmpty(kindInfo.getChildren())) {
+						for (KindInfo childKind : child.getChildren()) {
+							childKind.setCount(commodityService.countCommodityByKindAndStore(childKind, storeUuid));
+						}
+					}
+				}
+			}
+		}
+
 		if (count != 0){ //存在非标则添加其他类目
 			KindInfo kindInfo = KindInfo.getOtherKind();
 			kindInfo.setCount(count);

+ 2 - 1
src/main/java/com/uas/platform/b2c/prod/store/service/CommodityService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.store.service;
 
+import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import java.util.Set;
 
 /**
@@ -28,5 +29,5 @@ public interface CommodityService {
 	 * @param storeUuid 店铺uuid
 	 * @return
 	 */
-	Integer CountCommodityByKindAndStore(Long kindid, String storeUuid);
+	Integer countCommodityByKindAndStore(KindInfo kindid, String storeUuid);
 }

+ 30 - 5
src/main/java/com/uas/platform/b2c/prod/store/service/impl/CommodityServiceImpl.java

@@ -1,12 +1,19 @@
 package com.uas.platform.b2c.prod.store.service.impl;
 
+import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
+import com.uas.platform.b2c.prod.product.kind.dao.KindInfoDao;
+import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.store.service.CommodityService;
+import com.uas.platform.core.model.Constant;
+import com.uas.ps.core.util.StringUtils;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Set;
-
 /**
  * 商品业务实现类
  *
@@ -18,9 +25,12 @@ public class CommodityServiceImpl implements CommodityService {
 
 	private final GoodsDao goodsDao;
 
+	private final KindInfoDao kindInfoDao;
+
 	@Autowired
-	public CommodityServiceImpl(GoodsDao goodsDao) {
+	public CommodityServiceImpl(GoodsDao goodsDao, KindInfoDao kindInfoDao) {
 		this.goodsDao = goodsDao;
+		this.kindInfoDao = kindInfoDao;
 	}
 
 	@Override
@@ -34,7 +44,22 @@ public class CommodityServiceImpl implements CommodityService {
 	}
 
 	@Override
-	public Integer CountCommodityByKindAndStore(Long kindid, String storeUuid) {
-		return goodsDao.CountByStoreUuidAndKindid(storeUuid, kindid);
+	public Integer countCommodityByKindAndStore(KindInfo kind, String storeUuid) {
+		List<Long> kinds = new ArrayList<>();
+		if (kind.getIsLeaf().equals(Constant.YES)) {
+			kinds.add(kind.getId());
+		} else {
+			String ids = kindInfoDao.findLeafKind(kind.getId());
+			if (!StringUtils.isEmpty(ids)) {
+				String[] idstr = ids.split(SplitChar.COMMA);
+				for (int i = 0; i < idstr.length; i++) {
+					kinds.add(Long.valueOf(idstr[i]));
+				}
+			}
+		}
+		if (CollectionUtils.isNotEmpty(kinds)) {
+			return goodsDao.CountByStoreUuidAndKindid(storeUuid, kinds);
+		}
+		return 0;
 	}
 }