Pārlūkot izejas kodu

feat: 商品进销存

Joburgess 5 gadi atpakaļ
vecāks
revīzija
1bf6da6af5

+ 17 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/GoodsProcurement.java

@@ -10,6 +10,9 @@ public class GoodsProcurement {
 
 	@ApiModelProperty(value = "编号")
 	private Long id;
+
+	@ApiModelProperty(value = "组合商品编号")
+	private Integer parentGoodsId;
 	
 	@ApiModelProperty(value = "商品编号")
 	private Integer goodsId;
@@ -57,6 +60,11 @@ public class GoodsProcurement {
 		this.goodsId = goodsId;
 	}
 
+	public GoodsProcurement(Integer parentGoodsId, Integer goodsId) {
+		this.parentGoodsId = parentGoodsId;
+		this.goodsId = goodsId;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}
@@ -64,7 +72,15 @@ public class GoodsProcurement {
 	public Long getId(){
 		return this.id;
 	}
-			
+
+	public Integer getParentGoodsId() {
+		return parentGoodsId;
+	}
+
+	public void setParentGoodsId(Integer parentGoodsId) {
+		this.parentGoodsId = parentGoodsId;
+	}
+
 	public void setGoodsId(Integer goodsId){
 		this.goodsId = goodsId;
 	}

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/GoodsService.java

@@ -92,9 +92,8 @@ public interface GoodsService extends BaseService<Integer, Goods> {
      * @describe 增加商品库存
      * @author Joburgess
      * @date 2020.10.12
-     * @param goodsBatchNoDtos: 对应批次商品列表
-     * @param goodsIds: 用户购买商品列表
+     * @param sellOrderIds: 对应批次商品列表
      * @return void
      */
-    void increaseStock(List<GoodsBatchNoDto> goodsBatchNoDtos, List<Integer> goodsIds, AccountType accountType);
+    void increaseStock(List<Integer> sellOrderIds, AccountType accountType);
 }

+ 53 - 53
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -314,77 +314,77 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 
 		List<Goods> tempGoodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
 		Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
-		List<Integer> singleGoodsIds = new ArrayList<>();
+		List<GoodsProcurement> goodsBatchNoDtos = new ArrayList<>();
 		for (Integer goodsId : goodsIds) {
 			Goods tempGoods = idTempGoodsMap.get(goodsId);
+			List<Goods> childGoods = new ArrayList<>();
 			if(StringUtils.isBlank(tempGoods.getComplementGoodsIdList())){
-				singleGoodsIds.add(tempGoods.getId());
+				childGoods.add(tempGoods);
 			}else{
 				List<Integer> complementGoodsIds = Arrays.stream(tempGoods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
-				singleGoodsIds.addAll(complementGoodsIds);
+				childGoods = goodsDao.getGoodies(complementGoodsIds);
 			}
 			tempGoods.setSellCount((int) (tempGoods.getSellCount() + goodsSellNumMap.get(tempGoods.getId())));
-//			goodsDao.update(tempGoods);
-		}
-		goodsDao.batchUpdate(tempGoodsList);
-		List<Goods> singleGoodsList = goodsDao.getGoodies(singleGoodsIds);
-		Map<Integer, Goods> idSingleGoodsMap = singleGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
-		List<GoodsProcurement> goodsBatchNoDtos = new ArrayList<>();
-		for (Integer singleGoodsId : singleGoodsIds) {
-			Goods goods = idSingleGoodsMap.get(singleGoodsId);
-			GoodsProcurement goodsProcurement = null;
-			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
-				goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-				goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
-				if(Objects.nonNull(goodsProcurement)){
-					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
-					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
+			for (Goods goods : childGoods) {
+				GoodsProcurement goodsProcurement = null;
+				if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
+					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
+					goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
+					if(Objects.nonNull(goodsProcurement)){
+						goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
+						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
+					}
+				}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
+					goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
+					goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
+					if(Objects.nonNull(goodsProcurement)){
+						goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
+						goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
+					}
 				}
-			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
-				goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
-				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
+
+				goodsDao.update(goods);
 				if(Objects.nonNull(goodsProcurement)){
-					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
-					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
+					goodsProcurementDao.update(goodsProcurement);
+				}else{
+					goodsProcurement = new GoodsProcurement(goods.getId());
+				}
+				if(StringUtils.isNotBlank(tempGoods.getComplementGoodsIdList())){
+					goodsProcurement.setParentGoodsId(tempGoods.getId());
 				}
-			}
 
-			goodsDao.update(goods);
-			if(Objects.nonNull(goodsProcurement)){
 				goodsBatchNoDtos.add(goodsProcurement);
-				goodsProcurementDao.update(goodsProcurement);
-			}else{
-				goodsBatchNoDtos.add(new GoodsProcurement(goods.getId()));
 			}
+//			goodsDao.update(tempGoods);
 		}
-
+		goodsDao.batchUpdate(tempGoodsList);
 		return goodsBatchNoDtos;
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public void increaseStock(List<GoodsBatchNoDto> goodsBatchNoDtos, List<Integer> goodsIdsList, AccountType accountType) {
-		Set<Integer> goodsIds = goodsBatchNoDtos.stream().map(GoodsBatchNoDto::getGoodsId).collect(Collectors.toSet());
-		List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
-		Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
-		for (GoodsBatchNoDto goodsBatchNoDto : goodsBatchNoDtos) {
-			Goods goods = idGoodsMap.get(goodsBatchNoDto.getGoodsId());
-			GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(goods.getId(), goodsBatchNoDto.getBatchNo());
-			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
-				goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
-				if(Objects.nonNull(goodsProcurement)){
-					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).incrementAndGet());
-					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
-				}
-			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
-				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).incrementAndGet());
-				if(Objects.nonNull(goodsProcurement)){
-					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).incrementAndGet());
-					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).decrementAndGet());
-				}
-			}
-			goodsDao.update(goods);
-			goodsProcurementDao.update(goodsProcurement);
-		}
+	public void increaseStock(List<Integer> sellOrderIds, AccountType accountType) {
+//		Set<Integer> goodsIds = goodsBatchNoDtos.stream().map(GoodsBatchNoDto::getGoodsId).collect(Collectors.toSet());
+//		List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
+//		Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
+//		for (GoodsBatchNoDto goodsBatchNoDto : goodsBatchNoDtos) {
+//			Goods goods = idGoodsMap.get(goodsBatchNoDto.getGoodsId());
+//			GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(goods.getId(), goodsBatchNoDto.getBatchNo());
+//			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
+//				goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
+//				if(Objects.nonNull(goodsProcurement)){
+//					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).incrementAndGet());
+//					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
+//				}
+//			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
+//				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).incrementAndGet());
+//				if(Objects.nonNull(goodsProcurement)){
+//					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).incrementAndGet());
+//					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).decrementAndGet());
+//				}
+//			}
+//			goodsDao.update(goods);
+//			goodsProcurementDao.update(goodsProcurement);
+//		}
 	}
 }