From b3fe06c151dc8455649bf0a46e481ceb83e3ea2a Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 07 十一月 2026 13:37:54 +0800
Subject: [PATCH] feat: 完成好水川 MOM 需求1/2/4/5/8(装箱、BOM成本、销售合同、劳动合同、留样)

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
index 30303e7..e3f90be 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java
@@ -7,11 +7,13 @@
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLinePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
 import cn.iocoder.yudao.module.mes.enums.qc.MesQcCheckResultEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
+import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
 import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
@@ -25,6 +27,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 import java.util.Objects;
 
@@ -50,6 +54,8 @@
     @Resource
     private MesMdmItemService mdmItemService;
     @Resource
+    private MesMdItemService mdItemService;
+    @Resource
     private MesWmBatchService batchService;
     @Resource
     @Lazy
@@ -68,6 +74,7 @@
 
         // 鏂板
         MesWmProductSalesLineDO line = BeanUtils.toBean(createReqVO, MesWmProductSalesLineDO.class);
+        line.setBoxCount(calculateBoxCount(line.getItemId(), line.getQuantity()));
         productSalesLineMapper.insert(line);
         return line.getId();
     }
@@ -82,6 +89,7 @@
 
         // 鏇存柊
         MesWmProductSalesLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmProductSalesLineDO.class);
+        updateObj.setBoxCount(calculateBoxCount(updateObj.getItemId(), updateObj.getQuantity()));
         productSalesLineMapper.updateById(updateObj);
 
         // 妫�鏌ユ槸鍚﹂渶瑕佸垱寤� OQC 妫�楠屽崟锛氫粠涓嶉渶瑕佹楠屽彉涓洪渶瑕佹楠�
@@ -167,6 +175,21 @@
     }
 
     /**
+     * 鎸� 鏁伴噺 / 鐗╂枡姣忕鏁伴噺 鍚戜笂鍙栨暣璁$畻绠辨暟锛涙湭缁存姢姣忕鏁伴噺鏃惰繑鍥� 0
+     */
+    private int calculateBoxCount(Long itemId, BigDecimal quantity) {
+        if (itemId == null || quantity == null) {
+            return 0;
+        }
+        MesMdItemDO item = mdItemService.getItem(itemId);
+        if (item == null || item.getBoxQuantity() == null
+                || item.getBoxQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+            return 0;
+        }
+        return quantity.divide(item.getBoxQuantity(), 0, RoundingMode.CEILING).intValue();
+    }
+
+    /**
      * 鏍规嵁 batchCode 瑙f瀽 batchId
      */
     private void fillBatchId(MesWmProductSalesLineSaveReqVO reqVO) {

--
Gitblit v1.9.3