From 25a40b9c4e6a1b650610b8b13088d486699532ce Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 20:23:21 +0800
Subject: [PATCH] 采购申请批量提交、订单导入重复校验;修复考勤异常申请字段不匹配

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java
index 9576e9b..9cfb5e0 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java
@@ -59,8 +59,15 @@
         }
         // 鍙潵绁ㄧ櫥璁帮紙鍓╀綑鍙紑绁ㄩ噾棰� > 0锛夛細閲戦宸插紑瀹岀殑璁㈠崟涓嶅睍绀�
         if (Boolean.TRUE.equals(reqVO.getRemainPriceEnable())) {
-            query.apply("t.total_price > (SELECT IFNULL(SUM(i.price), 0) FROM erp_purchase_invoice i "
-                    + "WHERE i.purchase_order_id = t.id AND i.deleted = 0)");
+            // 缂栬緫鏉ョエ鏃讹紙invoiceId 闈炵┖锛夊墧闄ゆ湰寮犳潵绁ㄨ嚜韬殑鍒嗘憡锛岀浉褰撲簬鎶婂畠宸插垎鎽婄殑閲戦閫�鍥炶鍗�
+            String sql = "t.total_price > (SELECT IFNULL(SUM(a.price), 0) FROM erp_purchase_invoice_order a "
+                    + "INNER JOIN erp_purchase_invoice i ON i.id = a.invoice_id AND i.deleted = 0 "
+                    + "WHERE a.purchase_order_id = t.id AND a.deleted = 0";
+            if (reqVO.getInvoiceId() != null) {
+                query.apply(sql + " AND a.invoice_id <> {0})", reqVO.getInvoiceId());
+            } else {
+                query.apply(sql + ")");
+            }
         }
         if (reqVO.getProductId() != null) {
             query.leftJoin(ErpPurchaseOrderItemDO.class, ErpPurchaseOrderItemDO::getOrderId, ErpPurchaseOrderDO::getId)
@@ -79,6 +86,15 @@
         return selectOne(ErpPurchaseOrderDO::getNo, no);
     }
 
+    /**
+     * 鎸夌紪鍙锋煡璇㈠苟鍔犺閿侊紝鐢ㄤ簬閲囪喘鐢宠瀹℃壒閫氳繃鏃跺鐢ㄥ凡鏈夎鍗曪紝閬垮厤骞跺彂閲嶅鍗犵敤
+     */
+    default ErpPurchaseOrderDO selectByIdForUpdate(Long id) {
+        return selectOne(new LambdaQueryWrapperX<ErpPurchaseOrderDO>()
+                .eq(ErpPurchaseOrderDO::getId, id)
+                .last("FOR UPDATE"));
+    }
+
     default ErpPurchaseOrderDO selectByProcessInstanceId(String processInstanceId) {
         return selectOne(ErpPurchaseOrderDO::getProcessInstanceId, processInstanceId);
     }

--
Gitblit v1.9.3