From 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 03 十一月 2026 13:49:04 +0800
Subject: [PATCH] 修复采购退货页面 ERP 模块已禁用报错

---
 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 &lt; #{startTime} THEN t.quantity ELSE 0 END), 0) AS openingQuantity,
+                   COALESCE(SUM(CASE WHEN t.transaction_time &gt;= #{startTime} AND t.transaction_time &lt;= #{endTime} AND t.quantity &gt; 0 THEN t.quantity ELSE 0 END), 0) AS inQuantity,
+                   COALESCE(SUM(CASE WHEN t.transaction_time &gt;= #{startTime} AND t.transaction_time &lt;= #{endTime} AND t.quantity &lt; 0 THEN -t.quantity ELSE 0 END), 0) AS outQuantity,
+                   COALESCE(SUM(CASE WHEN t.transaction_time &lt;= #{endTime} THEN t.quantity ELSE 0 END), 0) AS closingQuantity
+            FROM mes_wm_transaction t
+            WHERE t.deleted = 0
+              AND t.transaction_time &lt;= #{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