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/dal/mysql/pro/workorder/MesProWorkOrderMapper.java |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java
index 5c94ad9..da53dbf 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java
@@ -34,7 +34,10 @@
                 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
                 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
                 .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(MesProWorkOrderDO::getPackingStatus, reqVO.getPackingStatus())
                 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
+                .notIn(CollUtil.isNotEmpty(reqVO.getExcludeStatuses()),
+                        MesProWorkOrderDO::getStatus, reqVO.getExcludeStatuses())
                 .orderByDesc(MesProWorkOrderDO::getId));
     }
 
@@ -50,8 +53,12 @@
                 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
                 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
                 .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(MesProWorkOrderDO::getPackingStatus, reqVO.getPackingStatus())
                 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
                 .orderByDesc(MesProWorkOrderDO::getId);
+        if (CollUtil.isNotEmpty(reqVO.getExcludeStatuses())) {
+            wrapper.notIn(MesProWorkOrderDO::getStatus, reqVO.getExcludeStatuses());
+        }
         if (permittedClientIds != null) {
             if (CollUtil.isEmpty(permittedClientIds)) {
                 return PageResult.empty();
@@ -103,4 +110,24 @@
         return selectCount(MesProWorkOrderDO::getVendorId, vendorId);
     }
 
+    /**
+     * 绱姞宸ュ崟鐨勫凡瑁呯鏁伴噺涓庡凡瑁呯绠辨暟
+     */
+    default void updatePackedQuantity(Long id, BigDecimal incrQuantity, Integer incrBoxCount) {
+        update(null, new LambdaUpdateWrapper<MesProWorkOrderDO>()
+                .eq(MesProWorkOrderDO::getId, id)
+                .setSql("packed_quantity = IFNULL(packed_quantity, 0) + " + incrQuantity.toPlainString())
+                .setSql("packed_box_count = IFNULL(packed_box_count, 0) + " + incrBoxCount));
+    }
+
+    /**
+     * 鏍规嵁宸茶绠辨暟閲忛噸绠楄绠辩姸鎬侊細宸茶 >= 宸ュ崟鏁伴噺涓哄畬鎴�(2)锛岄儴鍒嗕负 1锛屽惁鍒� 0
+     */
+    default void updatePackingStatus(Long id) {
+        update(null, new LambdaUpdateWrapper<MesProWorkOrderDO>()
+                .eq(MesProWorkOrderDO::getId, id)
+                .setSql("packing_status = CASE WHEN IFNULL(packed_quantity, 0) >= IFNULL(quantity, 0) THEN 2 "
+                        + "WHEN IFNULL(packed_quantity, 0) > 0 THEN 1 ELSE 0 END"));
+    }
+
 }

--
Gitblit v1.9.3