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 | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 47 insertions(+), 1 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 abeedfd..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
@@ -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>()
@@ -29,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));
}
@@ -45,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();
@@ -57,6 +69,20 @@
}
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);
@@ -84,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