Browse Source

生产终止回滚可用库存

yzc 10 months ago
parent
commit
6b559ea2a5

+ 2 - 1
hx-item/src/main/java/com/fjhx/item/enums/ProductAvailableRecordType.java

@@ -15,7 +15,8 @@ public enum ProductAvailableRecordType {
     HAND_OUT(6, "手动出库"),
     HAND_OUT(6, "手动出库"),
     SALE_CANCEL(7, "销售合同作废"),
     SALE_CANCEL(7, "销售合同作废"),
     SALE_UPDATE(8, "销售合同变更"),
     SALE_UPDATE(8, "销售合同变更"),
-    PURCHASE_BACK(9, "采购退货");
+    PURCHASE_BACK(9, "采购退货"),
+    PROD_CEASE(10, "生产终止");
 
 
     /**
     /**
      * 类型
      * 类型

+ 2 - 1
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -574,7 +574,8 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
             }
             }
             //申购的-采购合同通过    可用库存 = 当前可用库存 + 采购明细数量
             //申购的-采购合同通过    可用库存 = 当前可用库存 + 采购明细数量
             //手动入库             可用库存 = 当前可用库存 + 入库数量
             //手动入库             可用库存 = 当前可用库存 + 入库数量
-            else if (ProductAvailableRecordType.PURCHASE_PASS.equals(businessType) || ProductAvailableRecordType.HAND_IN.equals(businessType)) {
+            //生产终止             可用库存 = 当前可用库存 + 合同未领料数量
+            else if (ProductAvailableRecordType.PURCHASE_PASS.equals(businessType) || ProductAvailableRecordType.HAND_IN.equals(businessType) || ProductAvailableRecordType.PROD_CEASE.equals(businessType)) {
                 availableQuantity = availableQuantity.add(quantity);
                 availableQuantity = availableQuantity.add(quantity);
             }
             }
             //采购变更
             //采购变更

+ 32 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -93,6 +93,7 @@ import com.fjhx.tenant.utils.DictUtils;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
+import com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.annotation.TenantIgnore;
@@ -3432,6 +3433,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @DSTransactional
     @DSTransactional
     @Override
     @Override
     public void productionTermination(ContractDto dto) {
     public void productionTermination(ContractDto dto) {
+        Contract serviceById = contractService.getById(dto.getId());
+
         int TERMINATION = FlowStatusEnum1.TERMINATION.getKey();
         int TERMINATION = FlowStatusEnum1.TERMINATION.getKey();
 
 
         contractService.update(q -> q
         contractService.update(q -> q
@@ -3445,6 +3448,35 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
 
         baseMapper.setProdOrderProdStatusByContractId(dto.getId(), TERMINATION);
         baseMapper.setProdOrderProdStatusByContractId(dto.getId(), TERMINATION);
         baseMapper.setProdTaskProdStatusByContractId(dto.getId(), TERMINATION);
         baseMapper.setProdTaskProdStatusByContractId(dto.getId(), TERMINATION);
+
+        //回滚可用库存
+        //获取订单物料
+        List<ContractProductBomVo> bomListSum = contractProductBomService.getContractProductBomQuantitySum(IWrapper.getWrapper()
+                .eq("cpb.contract_id", dto.getId())
+                .ne("cpb.type", 3)
+        );
+        //获取已经领料
+        List<StockWaitDetailsVo> receiptQuantitySum = stockWaitDetailsService.getReceiptQuantitySum(IWrapper.getWrapper()
+                .eq("sw.business_type  ", 9)
+                .eq("sw.contract_id", dto.getId())
+        );
+        Map<Long, BigDecimal> receiptQuantitySumMap = receiptQuantitySum.stream()
+                .collect(Collectors.toMap(StockWaitDetailsVo::getProductId, StockWaitDetailsVo::getReceiptQuantity));
+
+        List<AvailableStockBo> inOutBoList = new ArrayList<>();
+        for (ContractProductBomVo contractProductBomVo : bomListSum) {
+            Long materialId = contractProductBomVo.getMaterialId();
+            BigDecimal receiptQuantity = receiptQuantitySumMap.getOrDefault(materialId, BigDecimal.ZERO);
+            //总量-已经领料
+            BigDecimal subtract = contractProductBomVo.getQuantity().subtract(receiptQuantity);
+
+            AvailableStockBo inOutBo = new AvailableStockBo();
+            inOutBo.setProductId(materialId);
+            inOutBo.setQuantity(subtract);
+            inOutBoList.add(inOutBo);
+        }
+        productInfoService.editAvailableQuantity(inOutBoList, dto.getId(), ProductAvailableRecordType.PROD_CEASE, serviceById.getOfCompanyId());
+
     }
     }
 
 
     @Override
     @Override

+ 2 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockWaitDetailsMapper.java

@@ -32,4 +32,6 @@ public interface StockWaitDetailsMapper extends BaseMapper<StockWaitDetails> {
 
 
     void updateOrderStatusByContractId(@Param("contractId") Long contractId, @Param("status") Integer status);
     void updateOrderStatusByContractId(@Param("contractId") Long contractId, @Param("status") Integer status);
 
 
+    List<StockWaitDetailsVo> getReceiptQuantitySum(@Param("ew") IWrapper<Object> wrapper);
+
 }
 }

+ 1 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitDetailsService.java

@@ -51,4 +51,5 @@ public interface StockWaitDetailsService extends BaseService<StockWaitDetails> {
      */
      */
     void delete(Long id);
     void delete(Long id);
 
 
+    List<StockWaitDetailsVo> getReceiptQuantitySum(IWrapper wrapper);
 }
 }

+ 5 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java

@@ -190,4 +190,9 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
         this.removeById(id);
         this.removeById(id);
     }
     }
 
 
+    @Override
+    public List<StockWaitDetailsVo> getReceiptQuantitySum(IWrapper wrapper) {
+        return baseMapper.getReceiptQuantitySum(wrapper);
+    }
+
 }
 }

+ 26 - 14
hx-wms/src/main/resources/mapper/stock/StockWaitDetailsMapper.xml

@@ -2,20 +2,19 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockWaitDetailsMapper">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockWaitDetailsMapper">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo">
-        SELECT
-            swd.id,
-            sw.business_code,
-            sw.business_id,
-            sw.business_type,
-            swd.`status`,
-            swd.stock_wait_id,
-            swd.product_id,
-            swd.quantity,
-            swd.receipt_quantity,
-            swd.create_user,
-            swd.create_time,
-            swd.update_user,
-            swd.update_time
+        SELECT swd.id,
+               sw.business_code,
+               sw.business_id,
+               sw.business_type,
+               swd.`status`,
+               swd.stock_wait_id,
+               swd.product_id,
+               swd.quantity,
+               swd.receipt_quantity,
+               swd.create_user,
+               swd.create_time,
+               swd.update_user,
+               swd.update_time
         FROM stock_wait_details swd
         FROM stock_wait_details swd
                  JOIN stock_wait sw ON swd.stock_wait_id = sw.id
                  JOIN stock_wait sw ON swd.stock_wait_id = sw.id
             ${ew.customSqlSegment}
             ${ew.customSqlSegment}
@@ -36,4 +35,17 @@
         WHERE contract_id = ${contractId}
         WHERE contract_id = ${contractId}
     </update>
     </update>
 
 
+    <select id="getReceiptQuantitySum" resultType="com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo">
+        SELECT sw.contract_id,
+               swd.product_id,
+               sum(swd.receipt_quantity) AS receipt_quantity
+        FROM stock_wait_details swd
+                 JOIN stock_wait sw ON swd.stock_wait_id = sw.id ${ew.customSqlSegment}
+--         WHERE
+--             sw.business_type = 9
+--           AND sw.contract_id = 1762320859697074177
+        GROUP BY
+            swd.product_id
+    </select>
+
 </mapper>
 </mapper>