From 97f048ce14db07ee41ca05f9c7010dfe132150e4 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 11:06:59 +0800
Subject: [PATCH] feat(mes): 补生产准备检查与仓储收发存汇总接口,附 CFWJ 演示数据种子脚本

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 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 ce532cb..e619d1d 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
@@ -15,10 +15,15 @@
 /**
  * MES 鐢熶骇宸ュ崟 Mapper
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Mapper
 public interface MesProWorkOrderMapper extends BaseMapperX<MesProWorkOrderDO> {
+
+    default List<MesProWorkOrderDO> lockScheduleOrders(List<Long> ids) {
+        return selectList(new LambdaQueryWrapperX<MesProWorkOrderDO>()
+                .in(MesProWorkOrderDO::getId, ids).orderByAsc(MesProWorkOrderDO::getId).last("FOR UPDATE"));
+    }
 
     default PageResult<MesProWorkOrderDO> selectPage(MesProWorkOrderPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<MesProWorkOrderDO>()
@@ -28,6 +33,8 @@
                 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode())
                 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
                 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
+                .eqIfPresent(MesProWorkOrderDO::getFactoryId, reqVO.getFactoryId())
+                .eqIfPresent(MesProWorkOrderDO::getWorkshopId, reqVO.getWorkshopId())
                 .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
                 .orderByDesc(MesProWorkOrderDO::getId));
@@ -44,6 +51,8 @@
                 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode())
                 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
                 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
+                .eqIfPresent(MesProWorkOrderDO::getFactoryId, reqVO.getFactoryId())
+                .eqIfPresent(MesProWorkOrderDO::getWorkshopId, reqVO.getWorkshopId())
                 .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
                 .orderByDesc(MesProWorkOrderDO::getId);
@@ -51,10 +60,26 @@
             if (CollUtil.isEmpty(permittedClientIds)) {
                 return PageResult.empty();
             }
-            wrapper.in(MesProWorkOrderDO::getClientId, permittedClientIds);
+            // 鍏佽 client_id 涓虹┖鐨勮褰曪紙鏃犲鎴峰伐鍗曞鎵�鏈夋湁鏉冮檺鐢ㄦ埛鍙锛�
+            wrapper.and(w -> w.in(MesProWorkOrderDO::getClientId, permittedClientIds)
+                    .or().isNull(MesProWorkOrderDO::getClientId));
         }
         return selectPage(reqVO, wrapper);
     }
+
+    /**
+     * 鍒嗛〉鏌ヨ锛堝甫瀹㈡埛鏉冮檺杩囨护涓旀敮鎸佽皟搴︾姸鎬佹煡璇級
+     */
+    default PageResult<MesProWorkOrderDO> selectSchedulePage(MesProWorkOrderPageReqVO pageReqVO, List<Long> permittedClientIds) {
+        com.baomidou.mybatisplus.core.metadata.IPage<MesProWorkOrderDO> mpPage = cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils.buildPage(pageReqVO);
+        com.baomidou.mybatisplus.core.metadata.IPage<MesProWorkOrderDO> result = selectSchedulePage(mpPage, pageReqVO, permittedClientIds);
+        return new PageResult<>(result.getRecords(), result.getTotal());
+    }
+
+    com.baomidou.mybatisplus.core.metadata.IPage<MesProWorkOrderDO> selectSchedulePage(
+            com.baomidou.mybatisplus.core.metadata.IPage<MesProWorkOrderDO> page,
+            @org.apache.ibatis.annotations.Param("pageReqVO") MesProWorkOrderPageReqVO pageReqVO,
+            @org.apache.ibatis.annotations.Param("permittedClientIds") List<Long> permittedClientIds);
 
     default MesProWorkOrderDO selectByCode(String code) {
         return selectOne(MesProWorkOrderDO::getCode, code);
@@ -66,6 +91,18 @@
                 .setSql("quantity_produced = IFNULL(quantity_produced, 0) + " + incrQuantityProduced));
     }
 
+    /**
+     * 绱姞宸ュ崟鐨勫凡鎺掍骇鏁伴噺
+     *
+     * @param id 宸ュ崟缂栧彿
+     * @param incrQuantityScheduled 鏈鎺掍骇鏁伴噺澧為噺
+     */
+    default void updateScheduledQuantity(Long id, BigDecimal incrQuantityScheduled) {
+        update(null, new LambdaUpdateWrapper<MesProWorkOrderDO>()
+                .eq(MesProWorkOrderDO::getId, id)
+                .setSql("quantity_scheduled = IFNULL(quantity_scheduled, 0) + " + incrQuantityScheduled));
+    }
+
     default Long selectCountByVendorId(Long vendorId) {
         return selectCount(MesProWorkOrderDO::getVendorId, vendorId);
     }

--
Gitblit v1.9.3