From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 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 1caa99f..02047cb 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
@@ -11,6 +11,8 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.time.LocalDateTime;
+import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 
@@ -27,6 +29,10 @@
                 .likeIfPresent(ErpPurchaseOrderDO::getNo, reqVO.getNo())
                 .eqIfPresent(ErpPurchaseOrderDO::getSupplierId, reqVO.getSupplierId())
                 .betweenIfPresent(ErpPurchaseOrderDO::getOrderTime, reqVO.getOrderTime())
+                .eqIfPresent(ErpPurchaseOrderDO::getPurchaseType, reqVO.getPurchaseType())
+                .likeIfPresent(ErpPurchaseOrderDO::getContractNo, reqVO.getContractNo())
+                .betweenIfPresent(ErpPurchaseOrderDO::getPaymentDate, reqVO.getPaymentDate())
+                .eqIfPresent(ErpPurchaseOrderDO::getPaymentMethod, reqVO.getPaymentMethod())
                 .eqIfPresent(ErpPurchaseOrderDO::getStatus, reqVO.getStatus())
                 .likeIfPresent(ErpPurchaseOrderDO::getRemark, reqVO.getRemark())
                 .eqIfPresent(ErpPurchaseOrderDO::getCreator, reqVO.getCreator())
@@ -56,6 +62,11 @@
         if (Boolean.TRUE.equals(reqVO.getReturnEnable())) {
             query.eq(ErpPurchaseOrderDO::getStatus, ErpAuditStatus.APPROVE.getStatus())
                     .apply("t.return_count < t.in_count");
+        }
+        // 鍙潵绁ㄧ櫥璁帮紙鍓╀綑鍙紑绁ㄩ噾棰� > 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)");
         }
         if (reqVO.getProductId() != null) {
             query.leftJoin(ErpPurchaseOrderItemDO.class, ErpPurchaseOrderItemDO::getOrderId, ErpPurchaseOrderDO::getId)
@@ -94,4 +105,32 @@
                 .eq(ErpPurchaseOrderDO::getSourceId, sourceId));
     }
 
+    /**
+     * 鎸変緵搴斿晢涓庝笅鍗曟椂闂磋寖鍥存煡璇㈤噰璐鍗曪紙渚涘簲鍟嗗線鏉ワ級
+     */
+    default List<ErpPurchaseOrderDO> selectListBySupplierIdAndOrderTimeBetween(Long supplierId,
+                                                                              LocalDateTime beginTime,
+                                                                              LocalDateTime endTime,
+                                                                              Collection<Integer> statuses) {
+        return selectList(new LambdaQueryWrapperX<ErpPurchaseOrderDO>()
+                .eq(ErpPurchaseOrderDO::getSupplierId, supplierId)
+                .geIfPresent(ErpPurchaseOrderDO::getOrderTime, beginTime)
+                .leIfPresent(ErpPurchaseOrderDO::getOrderTime, endTime)
+                .inIfPresent(ErpPurchaseOrderDO::getStatus, statuses)
+                .orderByAsc(ErpPurchaseOrderDO::getOrderTime)
+                .orderByAsc(ErpPurchaseOrderDO::getId));
+    }
+
+    /**
+     * 鎸変笅鍗曟椂闂磋寖鍥存煡璇㈠叏閮ㄤ緵搴斿晢鐨勯噰璐鍗曪紙渚涘簲鍟嗗線鏉ユ眹鎬伙級
+     */
+    default List<ErpPurchaseOrderDO> selectListByOrderTimeBetween(LocalDateTime beginTime,
+                                                                  LocalDateTime endTime,
+                                                                  Collection<Integer> statuses) {
+        return selectList(new LambdaQueryWrapperX<ErpPurchaseOrderDO>()
+                .geIfPresent(ErpPurchaseOrderDO::getOrderTime, beginTime)
+                .leIfPresent(ErpPurchaseOrderDO::getOrderTime, endTime)
+                .inIfPresent(ErpPurchaseOrderDO::getStatus, statuses));
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3