From 98dce0b733be283767c17b62ce7ff312aacd9f5d Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 24 六月 2026 13:25:48 +0800
Subject: [PATCH] 已领用并且被销售模块引用的公海客户不能回收或者编辑操作,已被销售模块引用的私海客户也不能编辑操作

---
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 92a632b..0b0c6cd 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -212,6 +212,7 @@
     public int updateCustomer(Customer customer) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long tenantId = loginUser.getTenantId();
+        validateCustomerEditPermission(customer.getId());
         customer.setTenantId(tenantId);
         return customerMapper.updateById(customer);
     }
@@ -341,6 +342,7 @@
     public void recycleCustomer(CustomerDto customerDto) {
         Customer customer = customerMapper.selectById(customerDto.getId());
         if (customer.getType() == 1 && customer.getIsAssigned() == 1) {  // 鍏捣涓斿凡鍒嗛厤
+            validatePublicSeaRecyclePermission(customer.getId());
             customer.setIsAssigned(0);
             customer.setUsageStatus(0L);
             customer.setUsageUser(0L);
@@ -403,6 +405,44 @@
         return this.updateById(customer);
     }
 
+    private void validateCustomerEditPermission(Long customerId) {
+        Customer customer = customerMapper.selectById(customerId);
+        if (customer == null) {
+            throw new RuntimeException("瀹㈡埛妗f涓嶅瓨鍦�");
+        }
+        if (!hasSalesModuleReference(customerId)) {
+            return;
+        }
+        if (Objects.equals(customer.getType(), 0)) {
+            throw new RuntimeException("宸茶閿�鍞ā鍧楀紩鐢ㄧ殑绉佹捣瀹㈡埛涓嶈兘缂栬緫");
+        }
+        if (Objects.equals(customer.getType(), 1) && Objects.equals(customer.getIsAssigned(), 1)) {
+            throw new RuntimeException("宸查鐢ㄥ苟涓旇閿�鍞ā鍧楀紩鐢ㄧ殑鍏捣瀹㈡埛涓嶈兘缂栬緫");
+        }
+    }
+
+    private void validatePublicSeaRecyclePermission(Long customerId) {
+        if (hasSalesModuleReference(customerId)) {
+            throw new RuntimeException("宸查鐢ㄥ苟涓旇閿�鍞ā鍧楀紩鐢ㄧ殑鍏捣瀹㈡埛涓嶈兘鍥炴敹");
+        }
+    }
+
+    private boolean hasSalesModuleReference(Long customerId) {
+        Long salesLedgerCount = salesLedgerMapper.selectCount(new QueryWrapper<SalesLedger>().lambda()
+                .eq(SalesLedger::getCustomerId, customerId));
+        if (salesLedgerCount != null && salesLedgerCount > 0) {
+            return true;
+        }
+        Long salesQuotationCount = salesQuotationMapper.selectCount(new QueryWrapper<SalesQuotation>().lambda()
+                .eq(SalesQuotation::getCustomerId, customerId));
+        if (salesQuotationCount != null && salesQuotationCount > 0) {
+            return true;
+        }
+        Long returnManagementCount = returnManagementMapper.selectCount(new QueryWrapper<ReturnManagement>().lambda()
+                .eq(ReturnManagement::getCustomerId, customerId));
+        return returnManagementCount != null && returnManagementCount > 0;
+    }
+
     @Override
     public IPage<CustomerTransactionsVo> customewTransactions(Page page, String customerName) {
         return customerMapper.customewTransactions(page, customerName);

--
Gitblit v1.9.3