zhangwencui
2026-10-29 b2f8320707dc72b2429bfb4fe0b317c11b1e5b7f
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -33,6 +33,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -70,6 +71,8 @@
    private CustomerReturnVisitService customerReturnVisitService;
    @Autowired
    private CustomerUserService customerUserService;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 查询客户档案
@@ -92,6 +95,13 @@
    public CustomerVo selectCustomerDetailById(Long id) {
        CustomerVo customerVo = new CustomerVo();
        BeanUtils.copyProperties(this.getById(id), customerVo);
        // 回显绑定的登录账号
        CustomerUser binding = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>()
                .eq(CustomerUser::getCustomerId, id).last("limit 1"), false);
        if (binding != null) {
            customerVo.setBindUserId(binding.getUserId());
        }
        // 查询跟进记录
        List<CustomerFollowUp> followUpList = customerFollowUpService.list(
@@ -196,11 +206,14 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertCustomer(Customer customer) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long tenantId = loginUser.getTenantId();
        customer.setTenantId(tenantId);
        return customerMapper.insert(customer);
        int rows = customerMapper.insert(customer);
        saveCustomerBinding(customer.getId(), customer.getBindUserId());
        return rows;
    }
    /**
@@ -210,12 +223,38 @@
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateCustomer(Customer customer) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long tenantId = loginUser.getTenantId();
        validateCustomerEditPermission(customer.getId());
        customer.setTenantId(tenantId);
        return customerMapper.updateById(customer);
        int rows = customerMapper.updateById(customer);
        saveCustomerBinding(customer.getId(), customer.getBindUserId());
        return rows;
    }
    /**
     * 保存客户与登录账号的一对一绑定关系
     */
    private void saveCustomerBinding(Long customerId, Long bindUserId) {
        if (customerId == null) {
            return;
        }
        customerUserService.remove(new LambdaQueryWrapper<CustomerUser>()
                .eq(CustomerUser::getCustomerId, customerId));
        if (bindUserId == null) {
            return;
        }
        // 一个登录账号只能绑定一个客户
        customerUserService.remove(new LambdaQueryWrapper<CustomerUser>()
                .eq(CustomerUser::getUserId, bindUserId));
        CustomerUser binding = new CustomerUser();
        binding.setCustomerId(customerId);
        binding.setUserId(bindUserId);
        customerUserService.save(binding);
        // 绑定账号自动授予“客户”角色,使其登录后只能访问客户门户
        jdbcTemplate.update("INSERT IGNORE INTO sys_user_role (user_id, role_id) "
                + "SELECT ?, role_id FROM sys_role WHERE role_key = 'customer' AND del_flag = '0'", bindUserId);
    }
    /**
@@ -418,22 +457,6 @@
        customer.setType(1);
        customer.setIsAssigned(0);
        return this.updateById(customer);
    }
    private void validateCustomerEditPermission(Long customerId) {
        Customer customer = customerMapper.selectById(customerId);
        if (customer == null) {
            throw new RuntimeException("客户档案不存在");
        }
        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) {