ソースを参照

feat: 商品进销存

Joburgess 5 年 前
コミット
44f879e0fb

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

@@ -305,6 +305,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 
 	@Override
 	public List<SellOrder> goodsBatchNoAllot(Goods goods) {
+
 		return null;
 	}
 
@@ -382,30 +383,40 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			}
 		});
 
-		List<Goods> goods = goodsDao.lockGoods(new ArrayList<>(goodsIdList));
-
-
-//		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);
-//		}
+		List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIdList));
+		Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
+
+		for (SellOrder sellOrder : sellOrders) {
+			Goods goods = goodsDao.get(sellOrder.getGoodsId());
+			GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(sellOrder.getGoodsId(), sellOrder.getBatchNo());
+			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
+				goods.setStockCount(new AtomicInteger(goods.getStockCount()).addAndGet(sellOrder.getNum()));
+				if(Objects.nonNull(goodsProcurement)){
+					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).addAndGet(sellOrder.getNum()));
+					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).addAndGet(-sellOrder.getNum()));
+				}
+			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
+				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).addAndGet(sellOrder.getNum()));
+				if(Objects.nonNull(goodsProcurement)){
+					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).addAndGet(sellOrder.getNum()));
+					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).addAndGet(-sellOrder.getNum()));
+				}
+			}
+			if(Objects.isNull(sellOrder.getParentGoodsId())){
+				goods.setSellCount(new AtomicInteger(goods.getSellCount()).addAndGet(-sellOrder.getNum()));
+			}
+			goodsDao.update(goods);
+			goodsProcurementDao.update(goodsProcurement);
+		}
+
+		//处理组合商品
+		Map<Integer, Long> goodsNumMap = sellOrders.stream().filter(so -> Objects.nonNull(so.getParentGoodsId())).collect(Collectors.groupingBy(SellOrder::getId, Collectors.counting()));
+		for (Map.Entry<Integer, Long> goodsIdNumMapEntry : goodsNumMap.entrySet()) {
+			Goods goods = idGoodsMap.get(goodsIdNumMapEntry.getKey());
+			int complementGoodsSize = goods.getComplementGoodsIdList().split(",").length;
+			int sellNum = (int) (goodsIdNumMapEntry.getValue()/complementGoodsSize);
+			goods.setSellCount(new AtomicInteger(goods.getSellCount()).addAndGet(-sellNum));
+			goodsDao.update(goods);
+		}
 	}
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -749,9 +749,9 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         });
         List<GoodsSellDto> goodsSellDtoList = new ArrayList<>();
         //扣减库存
-        List<GoodsProcurement> goodsBatchNoDtos = goodsService.subtractStock(goodsIds, AccountType.EXTERNAL);
+        List<SellOrder> goodsBatchNoDtos = goodsService.subtractStock(goodsIds, AccountType.EXTERNAL);
 
-        Map<String, List<GoodsProcurement>> listMap = goodsBatchNoDtos.stream().collect(Collectors.groupingBy(GoodsProcurement::getBatchNo));
+        Map<String, List<SellOrder>> listMap = goodsBatchNoDtos.stream().collect(Collectors.groupingBy(SellOrder::getBatchNo));
         Set<String> listMapKeys = listMap.keySet();
         listMapKeys.forEach(e->{
             listMap.get(e).forEach(z->{

+ 21 - 8
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -34,6 +34,8 @@
         <result column="complement_goods_id_list_" property="complementGoodsIdList"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="supply_channel_" property="supplyChannel" />
+        <result column="client_show_" property="clientShow" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="stock_warning_" property="stockWarning" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -52,23 +54,24 @@
         INSERT INTO goods
         (goods_category_id_,sn_,name_,brand_,specification_,image_,stock_count_,tax_stock_count_,sell_count_,market_price_,
         discount_price_,group_purchase_price_,brief_,desc_,is_new_,is_top_,status_,memo_,publish_time_,
-        complement_goods_id_list_,update_time_,create_time_,type_,agree_cost_price_)
+        complement_goods_id_list_,update_time_,create_time_,type_,agree_cost_price_,client_show_,stock_warning_)
         VALUES(#{goodsCategoryId},#{sn},#{name},#{brand},#{specification},#{image},#{stockCount},#{taxStockCount},#{sellCount},#{marketPrice},
-        #{discountPrice},#{groupPurchasePrice},#{brief},#{desc},
+        #{discountPrice},#{groupPurchasePrice},#{brief},
         #{isNew,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isTop,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{memo},#{publishTime},#{complementGoodsIdList},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{agreeCostPrice})
+        #{memo},#{publishTime},#{complementGoodsIdList},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{agreeCostPrice},
+        #{clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
     <insert id="batchInsert">
         INSERT INTO goods
         (goods_category_id_,name_,brand_,specification_,image_,market_price_,
         discount_price_,group_purchase_price_,desc_,update_time_,create_time_,type_,agree_cost_price_,sn_,
-        stock_count_,tax_stock_count_)
+        stock_count_,tax_stock_count_,client_show_,stock_warning_)
         VALUES
         <foreach collection="goodsList" separator="," item="goods">
             (#{goods.goodsCategoryId},#{goods.name},#{goods.brand},#{goods.specification},#{goods.image},#{goods.marketPrice},
             #{goods.discountPrice},#{goods.groupPurchasePrice},#{goods.desc},now(),now(),
             #{goods.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{goods.agreeCostPrice},#{goods.sn},
-            #{goods.stockCount},#{goods.taxStockCount},)
+            #{goods.stockCount},#{goods.taxStockCount},#{goods.clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{goods.stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
         </foreach>
     </insert>
     <!-- 根据主键查询一条记录 -->
@@ -120,9 +123,6 @@
             <if test="brief != null">
                 brief_ = #{brief},
             </if>
-            <if test="updateTime != null">
-                update_time_ = NOW(),
-            </if>
             <if test="discountPrice != null">
                 discount_price_ = #{discountPrice},
             </if>
@@ -144,6 +144,13 @@
             <if test="taxStockCount != null">
                 tax_stock_count_ = #{taxStockCount},
             </if>
+            <if test="clientShow != null">
+                client_show_ = #{clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="stockWarning != null">
+                stock_warning_ = #{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+                update_time_ = NOW()
         </set>
         WHERE id_ = #{id}
     </update>
@@ -218,6 +225,12 @@
                 <if test="goods.taxStockCount != null">
                     tax_stock_count_ = #{goods.taxStockCount},
                 </if>
+                <if test="goods.clientShow != null">
+                    client_show_ = #{goods.clientShow,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                <if test="stockWarning != null">
+                    stock_warning_ = #{goods.stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
                     update_time_ = NOW()
             </set>
             WHERE id_ = #{goods.id}