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

---
 docs/sql/config_export_all_20260928.sql                                                                                 |    4 ++--
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java                   |   10 ++++++++++
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java |    7 +++----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/docs/sql/config_export_all_20260928.sql b/docs/sql/config_export_all_20260928.sql
index 30be983..993a853 100644
--- a/docs/sql/config_export_all_20260928.sql
+++ b/docs/sql/config_export_all_20260928.sql
@@ -2508,8 +2508,8 @@
 CREATE TABLE `crm_invoice` (
   `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
   `no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '寮�绁ㄧ紪鍙�',
-  `customer_id` bigint NOT NULL COMMENT '瀹㈡埛缂栧彿',
-  `contract_id` bigint NOT NULL COMMENT '鍚堝悓缂栧彿',
+  `customer_id` bigint DEFAULT NULL COMMENT '瀹㈡埛缂栧彿',
+  `contract_id` bigint DEFAULT NULL COMMENT '鍚堝悓缂栧彿',
   `owner_user_id` bigint NOT NULL COMMENT '璐熻矗浜虹紪鍙�',
   `invoice_type` int NOT NULL COMMENT '鍙戠エ绫诲瀷锛堝瓧鍏� crm_invoice_type锛�',
   `invoice_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '鍙戠エ鍙风爜',
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java
index 21cf8be..682279c 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java
@@ -19,11 +19,10 @@
     private String no;
 
     @Schema(description = "瀹㈡埛缂栧彿", example = "2")
-    private Long customerId; // 璇ュ瓧娈典笉閫氳繃鍓嶇浼犻�掞紝鑰屾槸 contractId 鏌ヨ鍑烘潵璁剧疆杩涘幓
+    private Long customerId; // 浼犱簡 contractId 鏃朵互鍚堝悓涓婄殑瀹㈡埛涓哄噯锛堢敱 Service 瑕嗙洊锛�
 
-    @Schema(description = "鍚堝悓缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
-    @NotNull(message = "鍚堝悓缂栧彿涓嶈兘涓虹┖")
-    private Long contractId;
+    @Schema(description = "鍚堝悓缂栧彿", example = "1024")
+    private Long contractId; // 闈炲繀濉細鍏佽涓嶅叧鑱斿悎鍚屽紑绁�
 
     @Schema(description = "璐熻矗浜虹紪鍙�", example = "25682")
     private Long ownerUserId;
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 d8df5d2..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;
@@ -84,6 +85,8 @@
 
     @Resource
     private CrmContractService contractService;
+    @Resource
+    private CrmCustomerService customerService;
     @Resource
     private CrmPermissionService permissionService;
 
@@ -347,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());
@@ -376,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