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 |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 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 66354a9..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;
@@ -38,6 +44,10 @@
 
     @Resource
     private MesWmPackageLineService packageLineService;
+    @Resource
+    private MesWmPackageLineMapper packageLineMapper;
+    @Resource
+    private MesProWorkOrderMapper workOrderMapper;
     @Resource
     private MesWmBarcodeService barcodeService;
     @Resource
@@ -100,6 +110,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void finishPackage(Long id) {
         // 鏍¢獙瀛樺湪涓斾负鑽夌
         validatePackageExistsAndDraft(id);
@@ -107,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