| | |
| | | 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; |
| | |
| | | private CustomerReturnVisitService customerReturnVisitService; |
| | | @Autowired |
| | | private CustomerUserService customerUserService; |
| | | @Autowired |
| | | private JdbcTemplate jdbcTemplate; |
| | | |
| | | /** |
| | | * 查询客户档案 |
| | |
| | | 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( |
| | |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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) { |