From 55d694aaae4e421b5e55cd941500e08f85cb5d4d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 27 八月 2026 18:21:33 +0800
Subject: [PATCH] feat(sales): 添加框架合同订单功能并优化销售台账管理

---
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java |   66 ++++++++++++++++++++++++--------
 1 files changed, 49 insertions(+), 17 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 5a4d19a..7e307b5 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -3,6 +3,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -130,7 +131,8 @@
     public IPage<CustomerVo> selectCustomerList(Page<CustomerDto> page, CustomerDto customer) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long loginUserId = loginUser.getUserId();
-        IPage<CustomerVo> customerPage = customerMapper.listPage(page, customer, loginUserId);
+        boolean isAdmin = SecurityUtils.hasPermi("customer:viewAll");
+        IPage<CustomerVo> customerPage = customerMapper.listPage(page, customer, loginUserId, isAdmin);
 
         List<CustomerVo> records = customerPage.getRecords();
         if (CollectionUtils.isEmpty(records)) {
@@ -199,7 +201,21 @@
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long tenantId = loginUser.getTenantId();
         customer.setTenantId(tenantId);
-        return customerMapper.insert(customer);
+        int result = customerMapper.insert(customer);
+
+        // 绉佹捣鏂板鏃跺悓姝ヤ竴鏉″埌鍏捣
+        if (customer.getType() != null && customer.getType() == 0) {
+            Customer publicSeaCustomer = new Customer();
+            BeanUtils.copyProperties(customer, publicSeaCustomer);
+            publicSeaCustomer.setId(null);
+            publicSeaCustomer.setType(1);
+            publicSeaCustomer.setIsAssigned(0);
+            publicSeaCustomer.setUsageUser(loginUser.getUserId());
+            publicSeaCustomer.setUsageStatus(1L);
+            customerMapper.insert(publicSeaCustomer);
+        }
+
+        return result;
     }
 
     /**
@@ -281,7 +297,8 @@
     public List<CustomerVo> selectCustomerLists(CustomerDto customer) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long loginUserId = loginUser.getUserId();
-        return customerMapper.list(customer, loginUserId);
+        boolean isAdmin = SecurityUtils.hasPermi("customer:viewAll");
+        return customerMapper.list(customer, loginUserId, isAdmin);
     }
 
     @Override
@@ -312,13 +329,14 @@
     public List<Map<String, Object>> customerList(Customer customer) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long loginUserId = loginUser.getUserId();
+        boolean isAdmin = SecurityUtils.hasPermi("customer:viewAll");
         CustomerDto query = new CustomerDto();
         if (customer != null) {
             BeanUtils.copyProperties(customer, query);
         }
 
         // 澶嶇敤瀹㈡埛鍒楄〃鐨勫彲瑙佹�ц鍒欙紝閬垮厤鎶婂埆浜虹殑绉佹捣瀹㈡埛鏆撮湶缁欏綋鍓嶈处鍙�
-        List<CustomerVo> visibleCustomers = customerMapper.list(query, loginUserId);
+        List<CustomerVo> visibleCustomers = customerMapper.list(query, loginUserId, isAdmin);
         if (CollectionUtils.isEmpty(visibleCustomers)) {
             return Collections.emptyList();
         }
@@ -348,20 +366,34 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     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);
-            customerMapper.updateById(customer);
-
-            // 鍒犻櫎璇ュ鎴风殑鎵�鏈夊叡浜叧绯�
-            customerUserService.remove(
-                new QueryWrapper<CustomerUser>().lambda()
-                    .eq(CustomerUser::getCustomerId, customerDto.getId())
-            );
+        if (customerDto == null || customerDto.getId() == null) {
+            throw new RuntimeException("瀹㈡埛ID涓嶈兘涓虹┖");
         }
+        Customer customer = customerMapper.selectById(customerDto.getId());
+        if (customer == null) {
+            throw new RuntimeException("瀹㈡埛妗f涓嶅瓨鍦�");
+        }
+        boolean assigned = Objects.equals(customer.getIsAssigned(), 1)
+                || Objects.equals(customer.getUsageStatus(), 1L)
+                || (customer.getUsageUser() != null && customer.getUsageUser() > 0);
+        if (!assigned) {
+            throw new RuntimeException("璇ュ鎴峰綋鍓嶆湭澶勪簬棰嗙敤鐘舵�侊紝鏃犳硶鍥炴敹");
+        }
+        validatePublicSeaRecyclePermission(customer.getId());
+        int updated = customerMapper.update(null, new UpdateWrapper<Customer>()
+                .eq("id", customer.getId())
+                .set("is_assigned", 0)
+                .set("usage_status", 0)
+                .set("usage_user", null));
+        if (updated == 0) {
+            throw new RuntimeException("瀹㈡埛鍥炴敹澶辫触锛岃鍒锋柊鍚庨噸璇�");
+        }
+
+        // 鍒犻櫎璇ュ鎴风殑鎵�鏈夊叡浜叧绯�
+        customerUserService.remove(
+            new QueryWrapper<CustomerUser>().lambda()
+                .eq(CustomerUser::getCustomerId, customerDto.getId())
+        );
     }
 
     // 瀹㈡埛鍏变韩

--
Gitblit v1.9.3