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/wm/transaction/MesWmTransactionMapper.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transaction/MesWmTransactionMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transaction/MesWmTransactionMapper.java
index 8f55684..a30fef0 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transaction/MesWmTransactionMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transaction/MesWmTransactionMapper.java
@@ -3,9 +3,15 @@
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmStockSummaryRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transaction.MesWmTransactionDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.time.LocalDateTime;
/**
* MES 搴撳瓨浜嬪姟娴佹按 Mapper
@@ -29,4 +35,54 @@
.orderByDesc(MesWmTransactionDO::getTransactionTime));
}
+ /**
+ * 鏀跺彂瀛樻眹鎬伙細鎸夋湡鍒濄�佹湰鏈熷叆搴撱�佹湰鏈熷嚭搴撱�佹湡鏈洓涓彛寰勬寜銆岀墿鏂� + 浠撳簱銆嶆眹鎬�
+ */
+ @Select("""
+ <script>
+ SELECT t.item_id AS itemId,
+ t.warehouse_id AS warehouseId,
+ COALESCE(SUM(CASE WHEN t.transaction_time < #{startTime} THEN t.quantity ELSE 0 END), 0) AS openingQuantity,
+ COALESCE(SUM(CASE WHEN t.transaction_time >= #{startTime} AND t.transaction_time <= #{endTime} AND t.quantity > 0 THEN t.quantity ELSE 0 END), 0) AS inQuantity,
+ COALESCE(SUM(CASE WHEN t.transaction_time >= #{startTime} AND t.transaction_time <= #{endTime} AND t.quantity < 0 THEN -t.quantity ELSE 0 END), 0) AS outQuantity,
+ COALESCE(SUM(CASE WHEN t.transaction_time <= #{endTime} THEN t.quantity ELSE 0 END), 0) AS closingQuantity
+ FROM mes_wm_transaction t
+ WHERE t.deleted = 0
+ AND t.transaction_time <= #{endTime}
+ <if test="itemId != null"> AND t.item_id = #{itemId}</if>
+ <if test="warehouseId != null"> AND t.warehouse_id = #{warehouseId}</if>
+ GROUP BY t.item_id, t.warehouse_id
+ ORDER BY t.item_id, t.warehouse_id
+ </script>
+ """)
+ IPage<MesWmStockSummaryRespVO> selectStockSummaryPage(IPage<MesWmStockSummaryRespVO> page,
+ @Param("itemId") Long itemId,
+ @Param("warehouseId") Long warehouseId,
+ @Param("startTime") LocalDateTime startTime,
+ @Param("endTime") LocalDateTime endTime);
+
+ /**
+ * 鏌ユ壘铏氭嫙绾胯竟搴撳簱瀛樿褰曞搴旂殑鍘熷鍑哄簱浠撳簱淇℃伅
+ * <p>
+ * 閫氳繃铏氭嫙绾胯竟搴撶殑 materialStockId锛屾壘鍒伴娆″叆搴撲簨鍔★紙IN锛夛紝
+ * 鍐嶉�氳繃 relatedTransactionId 鎵惧埌鍏宠仈鐨勫嚭搴撲簨鍔★紙OUT锛夛紝
+ * 鑾峰彇鐗╂枡浠庡摢涓疄闄呬粨搴撳嚭搴撹繘鍏ヨ櫄鎷熺嚎杈瑰簱鐨勩��
+ *
+ * @param materialStockId 铏氭嫙绾胯竟搴撳簱瀛樿褰� ID
+ * @return 鍘熷鍑哄簱浜嬪姟锛堝寘鍚� warehouseId/locationId/areaId锛夛紝涓嶅瓨鍦ㄨ繑鍥� null
+ */
+ default MesWmTransactionDO selectOriginalOutTransaction(Long materialStockId) {
+ // 1. 鎵惧埌璇ュ簱瀛樿褰曠殑棣栨鍏ュ簱浜嬪姟
+ MesWmTransactionDO firstInTransaction = selectOne(new LambdaQueryWrapperX<MesWmTransactionDO>()
+ .eq(MesWmTransactionDO::getMaterialStockId, materialStockId)
+ .eq(MesWmTransactionDO::getType, 1) // IN
+ .orderByAsc(MesWmTransactionDO::getId)
+ .last("LIMIT 1"));
+ if (firstInTransaction == null || firstInTransaction.getRelatedTransactionId() == null) {
+ return null;
+ }
+ // 2. 閫氳繃 relatedTransactionId 鎵惧埌鍘熷鍑哄簱浜嬪姟
+ return selectById(firstInTransaction.getRelatedTransactionId());
+ }
+
}
--
Gitblit v1.9.3