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-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/invoice/CrmInvoiceMapper.java |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/invoice/CrmInvoiceMapper.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/invoice/CrmInvoiceMapper.java
index 66daa01..b6d1038 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/invoice/CrmInvoiceMapper.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/invoice/CrmInvoiceMapper.java
@@ -34,10 +34,32 @@
         return selectOne(CrmInvoiceDO::getNo, no);
     }
 
+    /**
+     * 娓呯┖鍙戠エ褰曞叆浜恒�佸綍鍏ユ椂闂达紙updateById 榛樿蹇界暐 null 瀛楁锛屾竻绌洪渶鏄惧紡 update锛�
+     */
+    default void clearEntryInfo(Long id) {
+        update(null, new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<CrmInvoiceDO>()
+                .eq(CrmInvoiceDO::getId, id)
+                .set(CrmInvoiceDO::getEntryStatus, 0)
+                .set(CrmInvoiceDO::getEntryUserId, null)
+                .set(CrmInvoiceDO::getEntryTime, null));
+    }
+
+    /**
+     * 鎸夊彂绁ㄥ彿鐮佹煡璇㈡湭琚垹闄ょ殑寮�绁紙鍙戠エ鍙风爜鍏佽鍚屼竴寮犲彂绁ㄥ娆″紑绁ㄦ椂锛岃繑鍥炵涓�鏉★級
+     */
+    default CrmInvoiceDO selectByInvoiceNo(String invoiceNo) {
+        return selectOne(new LambdaQueryWrapperX<CrmInvoiceDO>()
+                .eq(CrmInvoiceDO::getInvoiceNo, invoiceNo)
+                .orderByAsc(CrmInvoiceDO::getId)
+                .last("LIMIT 1"));
+    }
+
     default PageResult<CrmInvoiceDO> selectPageByCustomerId(CrmInvoicePageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CrmInvoiceDO>()
                 .eq(CrmInvoiceDO::getCustomerId, reqVO.getCustomerId()) // 蹇呴』浼犻��
                 .eqIfPresent(CrmInvoiceDO::getNo, reqVO.getNo())
+                .likeIfPresent(CrmInvoiceDO::getInvoiceNo, reqVO.getInvoiceNo())
                 .eqIfPresent(CrmInvoiceDO::getContractId, reqVO.getContractId())
                 .orderByDesc(CrmInvoiceDO::getId));
     }
@@ -50,6 +72,7 @@
         // 鎷兼帴鑷韩鐨勬煡璇㈡潯浠�
         query.selectAll(CrmInvoiceDO.class)
                 .eqIfPresent(CrmInvoiceDO::getNo, pageReqVO.getNo())
+                .likeIfPresent(CrmInvoiceDO::getInvoiceNo, pageReqVO.getInvoiceNo())
                 .eqIfPresent(CrmInvoiceDO::getContractId, pageReqVO.getContractId())
                 .eqIfPresent(CrmInvoiceDO::getAuditStatus, pageReqVO.getAuditStatus())
                 .orderByDesc(CrmInvoiceDO::getId);
@@ -92,6 +115,24 @@
     }
 
     /**
+     * 鏌ヨ鎸囧畾閿�鍞鍗曚笅銆佹寚瀹氬鎵圭姸鎬佺殑寮�绁�
+     */
+    default List<CrmInvoiceDO> selectListBySaleOrderIdAndStatus(Long saleOrderId, Collection<Integer> auditStatuses) {
+        return selectList(new LambdaQueryWrapperX<CrmInvoiceDO>()
+                .eq(CrmInvoiceDO::getSaleOrderId, saleOrderId)
+                .in(CrmInvoiceDO::getAuditStatus, auditStatuses));
+    }
+
+    /**
+     * 鏌ヨ鎸囧畾閿�鍞嚭搴撳崟涓嬨�佹寚瀹氬鎵圭姸鎬佺殑寮�绁�
+     */
+    default List<CrmInvoiceDO> selectListBySaleOutIdAndStatus(Long saleOutId, Collection<Integer> auditStatuses) {
+        return selectList(new LambdaQueryWrapperX<CrmInvoiceDO>()
+                .eq(CrmInvoiceDO::getSaleOutId, saleOutId)
+                .in(CrmInvoiceDO::getAuditStatus, auditStatuses));
+    }
+
+    /**
      * 鏌ヨ鍚堝悓涓嬬殑鍏ㄩ儴寮�绁紙瀵煎叆鍘婚噸鐢級
      */
     default List<CrmInvoiceDO> selectListByContractId(Long contractId) {

--
Gitblit v1.9.3