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/packages/MesWmPackageServiceImpl.java |   33 ++++++++++++++++++++++++++++++---
 1 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
index 001b411..460f645 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageServiceImpl.java
@@ -8,6 +8,9 @@
 import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackagePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.MesWmPackageSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderMapper;
+import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageMapper;
 import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmPackageStatusEnum;
@@ -17,8 +20,11 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@@ -27,7 +33,7 @@
 /**
  * MES 瑁呯鍗� Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service
 @Validated
@@ -38,6 +44,10 @@
 
     @Resource
     private MesWmPackageLineService packageLineService;
+    @Resource
+    private MesWmPackageLineMapper packageLineMapper;
+    @Resource
+    private MesProWorkOrderMapper workOrderMapper;
     @Resource
     private MesWmBarcodeService barcodeService;
     @Resource
@@ -96,11 +106,11 @@
 
     @Override
     public PageResult<MesWmPackageDO> getPackagePage(MesWmPackagePageReqVO pageReqVO) {
-        List<Long> permittedClientIds = customerApi.getPermittedCustomerIds();
-        return packageMapper.selectPage(pageReqVO, permittedClientIds);
+        return packageMapper.selectPage(pageReqVO, (List<Long>) null);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void finishPackage(Long id) {
         // 鏍¢獙瀛樺湪涓斾负鑽夌
         validatePackageExistsAndDraft(id);
@@ -108,6 +118,23 @@
         // 鏇存柊鐘舵�佷负宸插畬鎴�
         packageMapper.updateById(new MesWmPackageDO()
                 .setId(id).setStatus(MesWmPackageStatusEnum.FINISHED.getStatus()));
+
+        // 鎸夌敓浜у伐鍗曟眹鎬绘湰娆¤绠辨暟閲忎笌绠辨暟锛岀疮鍔犲埌宸ュ崟骞堕噸绠楄绠辩姸鎬�
+        Map<Long, List<MesWmPackageLineDO>> linesByWorkOrder = packageLineMapper.selectListByPackageId(id).stream()
+                .filter(line -> line.getWorkOrderId() != null)
+                .collect(Collectors.groupingBy(MesWmPackageLineDO::getWorkOrderId));
+        linesByWorkOrder.forEach((workOrderId, lines) -> {
+            BigDecimal quantity = lines.stream()
+                    .map(MesWmPackageLineDO::getQuantity)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            int boxCount = lines.stream()
+                    .map(MesWmPackageLineDO::getBoxCount)
+                    .filter(Objects::nonNull)
+                    .mapToInt(Integer::intValue).sum();
+            workOrderMapper.updatePackedQuantity(workOrderId, quantity, boxCount);
+            workOrderMapper.updatePackingStatus(workOrderId);
+        });
     }
 
     @Override

--
Gitblit v1.9.3