From a1dfce6c7266bf922ab913a922219a554f71ade2 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 12 十月 2026 18:27:00 +0800
Subject: [PATCH] 宁夏万通需求:CRM 开票新增时客户、合同改为非必填

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
index a59c979..0216598 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
@@ -26,6 +26,7 @@
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
+import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
 import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
@@ -85,6 +86,8 @@
     @Resource
     private CrmContractService contractService;
     @Resource
+    private CrmCustomerService customerService;
+    @Resource
     private CrmPermissionService permissionService;
 
     @Resource
@@ -103,8 +106,10 @@
         validateInvoicePriceExceedsLimit(createReqVO);
         // 1.2 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
         validateRelationDataExists(createReqVO);
-        // 1.3 鐢熸垚寮�绁ㄧ紪鍙�
-        String no = noRedisDAO.generate(CrmNoRedisDAO.INVOICE_PREFIX);
+        // 1.3 纭畾寮�绁ㄧ紪鍙凤紙鍓嶇濉啓鍒欑敤鑷畾涔夊崟鍙凤紝鐣欑┖鍒欒嚜鍔ㄧ敓鎴愶級锛屽苟鏍¢獙鍞竴鎬�
+        String customNo = StrUtil.trim(createReqVO.getNo());
+        String no = StrUtil.isNotBlank(customNo) ? customNo
+                : noRedisDAO.generate(CrmNoRedisDAO.INVOICE_PREFIX);
         if (invoiceMapper.selectByNo(no) != null) {
             throw exception(INVOICE_NO_EXISTS);
         }
@@ -345,6 +350,10 @@
     }
 
     private void validateInvoicePriceExceedsLimit(CrmInvoiceSaveReqVO reqVO) {
+        // 鏈叧鑱斿悎鍚岀殑锛堝悎鍚岄潪蹇呭~锛夛紝涓嶅崰鐢ㄤ换浣曞悎鍚岀殑寮�绁ㄩ搴︼紝鏃犻渶鏍¢獙涓婇檺
+        if (reqVO.getContractId() == null) {
+            return;
+        }
         // 1. 璁$畻鍓╀綑鍙紑绁ㄩ噾棰濓紝涓嶅寘鎷� reqVO 鑷韩锛堝鎵逛腑涔熷崰鐢ㄩ搴︼紝闃叉绱寮�绁ㄨ秴杩囧悎鍚岄噾棰濓級
         CrmContractDO contract = contractService.validateContract(reqVO.getContractId());
         BigDecimal notInvoicePrice = getRemainingInvoicePrice(contract, reqVO.getId());
@@ -374,6 +383,9 @@
         if (reqVO.getOwnerUserId() != null) {
             adminUserApi.validateUser(reqVO.getOwnerUserId()); // 鏍¢獙璐熻矗浜哄瓨鍦�
         }
+        if (reqVO.getCustomerId() != null) {
+            customerService.validateCustomer(reqVO.getCustomerId()); // 鏍¢獙瀹㈡埛瀛樺湪
+        }
         if (reqVO.getContractId() != null) {
             CrmContractDO contract = contractService.validateContract(reqVO.getContractId());
             if (ObjectUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.APPROVE.getStatus())) {

--
Gitblit v1.9.3