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/resources/mapper/basic/CustomerMapper.xml | 18 ++++++++-
src/main/java/com/ruoyi/basic/vo/CustomerVo.java | 5 ++
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | 40 ++++++++++++++++++++
3 files changed, 61 insertions(+), 2 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);
diff --git a/src/main/java/com/ruoyi/basic/vo/CustomerVo.java b/src/main/java/com/ruoyi/basic/vo/CustomerVo.java
index 3d4c8cb..0f72a2f 100644
--- a/src/main/java/com/ruoyi/basic/vo/CustomerVo.java
+++ b/src/main/java/com/ruoyi/basic/vo/CustomerVo.java
@@ -25,4 +25,9 @@
* 鍏变韩鐢ㄦ埛ID瀛楃涓诧紙SQL鏌ヨ杩斿洖锛岀敤浜庤浆鎹负List锛�
*/
private String userIdsStr;
+
+ /**
+ * 鏄惁琚攢鍞ā鍧楀紩鐢細0-鍚︼紝1-鏄�
+ */
+ private Integer salesReferenceFlag;
}
diff --git a/src/main/resources/mapper/basic/CustomerMapper.xml b/src/main/resources/mapper/basic/CustomerMapper.xml
index 2957c7e..37886d5 100644
--- a/src/main/resources/mapper/basic/CustomerMapper.xml
+++ b/src/main/resources/mapper/basic/CustomerMapper.xml
@@ -22,7 +22,14 @@
from customer_user cu
where cu.customer_id = c.id
and cu.user_id != c.usage_user
- ) as user_ids_str
+ ) as user_ids_str,
+ CASE
+ WHEN EXISTS (SELECT 1 FROM sales_ledger sl WHERE sl.customer_id = c.id)
+ OR EXISTS (SELECT 1 FROM sales_quotation sq WHERE sq.customer_id = c.id)
+ OR EXISTS (SELECT 1 FROM return_management rm WHERE rm.customer_id = c.id)
+ THEN 1
+ ELSE 0
+ END AS sales_reference_flag
from customer c
left join sys_user u on c.usage_user = u.user_id
<where>
@@ -71,7 +78,14 @@
from customer_user cu
where cu.customer_id = c.id
and cu.user_id != c.usage_user
- ) as user_ids_str
+ ) as user_ids_str,
+ CASE
+ WHEN EXISTS (SELECT 1 FROM sales_ledger sl WHERE sl.customer_id = c.id)
+ OR EXISTS (SELECT 1 FROM sales_quotation sq WHERE sq.customer_id = c.id)
+ OR EXISTS (SELECT 1 FROM return_management rm WHERE rm.customer_id = c.id)
+ THEN 1
+ ELSE 0
+ END AS sales_reference_flag
from customer c
left join sys_user u on c.usage_user = u.user_id
<where>
--
Gitblit v1.9.3