8 小时以前 55d694aaae4e421b5e55cd941500e08f85cb5d4d
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("客户档案不存在");
        }
        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())
        );
    }
    // 客户共享