|
|
@ -231,6 +231,209 @@ public class CustomerServiceImpl implements CustomerService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public boolean claimCustomer(String customerId, Login login) { |
|
|
|
|
|
try { |
|
|
|
|
|
// 获取当前时间
|
|
|
|
|
|
LocalDateTime now = LocalDateTime.now(); |
|
|
|
|
|
System.out.println("DEBUG: 开始认领客户,客户ID: " + customerId); |
|
|
|
|
|
|
|
|
|
|
|
// 1. 尝试从primary数据源查找客户
|
|
|
|
|
|
Contacts contacts = null; |
|
|
|
|
|
int retryCount = 0; |
|
|
|
|
|
int maxRetries = 3; |
|
|
|
|
|
long retryDelay = 1000; // 1秒
|
|
|
|
|
|
|
|
|
|
|
|
while (retryCount < maxRetries) { |
|
|
|
|
|
try { |
|
|
|
|
|
contacts = customerMapper.getContactsById(customerId); |
|
|
|
|
|
break; // 获取成功,退出重试循环
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
retryCount++; |
|
|
|
|
|
System.out.println("DEBUG: 第" + retryCount + "次尝试获取primary数据源连接失败,异常信息: " + e.getMessage()); |
|
|
|
|
|
if (retryCount >= maxRetries) { |
|
|
|
|
|
throw e; // 达到最大重试次数,抛出异常
|
|
|
|
|
|
} |
|
|
|
|
|
// 等待一段时间后重试
|
|
|
|
|
|
Thread.sleep(retryDelay); |
|
|
|
|
|
retryDelay *= 2; // 指数退避
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (contacts != null) { |
|
|
|
|
|
System.out.println("DEBUG: 在primary数据源中找到客户"); |
|
|
|
|
|
|
|
|
|
|
|
// 获取企业信息和负责人信息
|
|
|
|
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId()); |
|
|
|
|
|
Managers managers = customerMapper.getManagerByContactId(contacts.getId()); |
|
|
|
|
|
|
|
|
|
|
|
// 保存原始数据用于操作记录
|
|
|
|
|
|
StringBuilder originalData = new StringBuilder("{"); |
|
|
|
|
|
if (enterprise != null) { |
|
|
|
|
|
originalData.append("\"level\": \"" + (enterprise.getLevel() == null ? "" : enterprise.getLevel()) + "\","); |
|
|
|
|
|
} |
|
|
|
|
|
if (managers != null) { |
|
|
|
|
|
originalData.append("\"managercompany\": \"" + (managers.getManagercompany() == null ? "" : managers.getManagercompany()) + "\","); |
|
|
|
|
|
originalData.append("\"managerdepartment\": \"" + (managers.getManagerdepartment() == null ? "" : managers.getManagerdepartment()) + "\","); |
|
|
|
|
|
originalData.append("\"organization\": \"" + (managers.getOrganization() == null ? "" : managers.getOrganization()) + "\","); |
|
|
|
|
|
originalData.append("\"userName\": \"" + (managers.getUserName() == null ? "" : managers.getUserName()) + "\","); |
|
|
|
|
|
} |
|
|
|
|
|
// 移除末尾逗号
|
|
|
|
|
|
if (originalData.length() > 1 && originalData.charAt(originalData.length() - 1) == ',') { |
|
|
|
|
|
originalData.setLength(originalData.length() - 1); |
|
|
|
|
|
} |
|
|
|
|
|
originalData.append("}"); |
|
|
|
|
|
|
|
|
|
|
|
// 更新企业等级为未分级
|
|
|
|
|
|
String originalLevel = null; |
|
|
|
|
|
if (enterprise != null) { |
|
|
|
|
|
originalLevel = enterprise.getLevel(); |
|
|
|
|
|
enterprise.setLevel("unclassified"); |
|
|
|
|
|
customerMapper.updateEnterprise(enterprise); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 更新负责人信息
|
|
|
|
|
|
String originalManagerInfo = ""; |
|
|
|
|
|
if (managers != null) { |
|
|
|
|
|
originalManagerInfo = managers.getManagercompany() + "," + managers.getManagerdepartment() + "," + managers.getOrganization() + "," + managers.getUserName(); |
|
|
|
|
|
managers.setManagercompany(login.getManagercompany()); |
|
|
|
|
|
managers.setManagerdepartment(login.getManagerdepartment()); |
|
|
|
|
|
managers.setOrganization(login.getOrganization()); |
|
|
|
|
|
managers.setUserName(login.getUserName()); |
|
|
|
|
|
customerMapper.updateManagers(managers); |
|
|
|
|
|
} else { |
|
|
|
|
|
managers = new Managers(); |
|
|
|
|
|
managers.setId(contacts.getId()); |
|
|
|
|
|
managers.setManagercompany(login.getManagercompany()); |
|
|
|
|
|
managers.setManagerdepartment(login.getManagerdepartment()); |
|
|
|
|
|
managers.setOrganization(login.getOrganization()); |
|
|
|
|
|
managers.setUserName(login.getUserName()); |
|
|
|
|
|
managers.setRole(login.getProjectName()); |
|
|
|
|
|
managers.setCreated_at(now); |
|
|
|
|
|
managers.setUpdated_at(now); |
|
|
|
|
|
customerMapper.insertManagers(managers); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 构建修改后的数据
|
|
|
|
|
|
StringBuilder modifiedData = new StringBuilder("{"); |
|
|
|
|
|
modifiedData.append("\"level\": \"unclassified\","); |
|
|
|
|
|
modifiedData.append("\"managercompany\": \"" + login.getManagercompany() + "\","); |
|
|
|
|
|
modifiedData.append("\"managerdepartment\": \"" + login.getManagerdepartment() + "\","); |
|
|
|
|
|
modifiedData.append("\"organization\": \"" + login.getOrganization() + "\","); |
|
|
|
|
|
modifiedData.append("\"userName\": \"" + login.getUserName() + "\""); |
|
|
|
|
|
modifiedData.append("}"); |
|
|
|
|
|
|
|
|
|
|
|
// 保存操作记录
|
|
|
|
|
|
String changedFields = "[\"level\", \"managercompany\", \"managerdepartment\", \"organization\", \"userName\"]"; |
|
|
|
|
|
saveOperationRecord(contacts.getId(), login, "认领客户", originalData.toString(), modifiedData.toString(), changedFields); |
|
|
|
|
|
|
|
|
|
|
|
// 记录客户认领操作
|
|
|
|
|
|
customerTraceUtil.recordCustomerFollowup(contacts.getId(), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData.toString(), modifiedData.toString(), changedFields); |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
System.out.println("DEBUG: 在primary数据源中未找到客户,尝试从wechat数据源查找"); |
|
|
|
|
|
|
|
|
|
|
|
// 2. 尝试从wechat数据源查找客户
|
|
|
|
|
|
Users user = null; |
|
|
|
|
|
retryCount = 0; |
|
|
|
|
|
retryDelay = 1000; // 1秒
|
|
|
|
|
|
|
|
|
|
|
|
while (retryCount < maxRetries) { |
|
|
|
|
|
try { |
|
|
|
|
|
user = wechatCustomerMapper.getUsersByUserId(customerId); |
|
|
|
|
|
break; // 获取成功,退出重试循环
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
retryCount++; |
|
|
|
|
|
System.out.println("DEBUG: 第" + retryCount + "次尝试获取wechat数据源连接失败,异常信息: " + e.getMessage()); |
|
|
|
|
|
if (retryCount >= maxRetries) { |
|
|
|
|
|
throw e; // 达到最大重试次数,抛出异常
|
|
|
|
|
|
} |
|
|
|
|
|
// 等待一段时间后重试
|
|
|
|
|
|
Thread.sleep(retryDelay); |
|
|
|
|
|
retryDelay *= 2; // 指数退避
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (user != null) { |
|
|
|
|
|
System.out.println("DEBUG: 在wechat数据源中找到客户"); |
|
|
|
|
|
|
|
|
|
|
|
// 获取负责人信息
|
|
|
|
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(user.getUserId()); |
|
|
|
|
|
|
|
|
|
|
|
// 保存原始数据用于操作记录
|
|
|
|
|
|
StringBuilder originalData = new StringBuilder("{"); |
|
|
|
|
|
originalData.append("\"level\": \"" + (user.getLevel() == null ? "" : user.getLevel()) + "\","); |
|
|
|
|
|
if (managements != null) { |
|
|
|
|
|
originalData.append("\"managercompany\": \"" + (managements.getManagercompany() == null ? "" : managements.getManagercompany()) + "\","); |
|
|
|
|
|
originalData.append("\"managerdepartment\": \"" + (managements.getManagerdepartment() == null ? "" : managements.getManagerdepartment()) + "\","); |
|
|
|
|
|
originalData.append("\"organization\": \"" + (managements.getOrganization() == null ? "" : managements.getOrganization()) + "\","); |
|
|
|
|
|
originalData.append("\"userName\": \"" + (managements.getUserName() == null ? "" : managements.getUserName()) + "\","); |
|
|
|
|
|
} |
|
|
|
|
|
// 移除末尾逗号
|
|
|
|
|
|
if (originalData.length() > 1 && originalData.charAt(originalData.length() - 1) == ',') { |
|
|
|
|
|
originalData.setLength(originalData.length() - 1); |
|
|
|
|
|
} |
|
|
|
|
|
originalData.append("}"); |
|
|
|
|
|
|
|
|
|
|
|
// 更新用户等级为未分级
|
|
|
|
|
|
user.setLevel("unclassified"); |
|
|
|
|
|
user.setUpdated_at(now); |
|
|
|
|
|
|
|
|
|
|
|
// 更新负责人信息
|
|
|
|
|
|
if (managements == null) { |
|
|
|
|
|
managements = new UsersManagements(); |
|
|
|
|
|
managements.setUserId(user.getUserId()); |
|
|
|
|
|
} |
|
|
|
|
|
managements.setManagercompany(login.getManagercompany()); |
|
|
|
|
|
managements.setManagerdepartment(login.getManagerdepartment()); |
|
|
|
|
|
managements.setOrganization(login.getOrganization()); |
|
|
|
|
|
managements.setUserName(login.getUserName()); |
|
|
|
|
|
managements.setRole(login.getProjectName()); |
|
|
|
|
|
|
|
|
|
|
|
int result = wechatCustomerMapper.updateUsers(user); |
|
|
|
|
|
|
|
|
|
|
|
// 保存或更新负责人信息
|
|
|
|
|
|
int managerResult = wechatCustomerMapper.getManagementsByUserId(user.getUserId()) == null |
|
|
|
|
|
? wechatCustomerMapper.updateUsersManagements(managements) |
|
|
|
|
|
: wechatCustomerMapper.updateUsersManagements(managements); |
|
|
|
|
|
|
|
|
|
|
|
System.out.println("DEBUG: 更新wechat数据源用户结果: " + result + ", 更新负责人结果: " + managerResult); |
|
|
|
|
|
|
|
|
|
|
|
// 保存操作记录
|
|
|
|
|
|
if (result > 0 || managerResult > 0) { |
|
|
|
|
|
StringBuilder modifiedData = new StringBuilder("{"); |
|
|
|
|
|
modifiedData.append("\"level\": \"unclassified\","); |
|
|
|
|
|
modifiedData.append("\"managercompany\": \"" + login.getManagercompany() + "\","); |
|
|
|
|
|
modifiedData.append("\"managerdepartment\": \"" + login.getManagerdepartment() + "\","); |
|
|
|
|
|
modifiedData.append("\"organization\": \"" + login.getOrganization() + "\","); |
|
|
|
|
|
modifiedData.append("\"userName\": \"" + login.getUserName() + "\""); |
|
|
|
|
|
modifiedData.append("}"); |
|
|
|
|
|
|
|
|
|
|
|
String changedFields = "[\"level\", \"managercompany\", \"managerdepartment\", \"organization\", \"userName\"]"; |
|
|
|
|
|
saveOperationRecord(String.valueOf(user.getUserId()), login, "认领客户", originalData.toString(), modifiedData.toString(), changedFields); |
|
|
|
|
|
|
|
|
|
|
|
// 记录客户认领操作
|
|
|
|
|
|
customerTraceUtil.recordCustomerFollowup(String.valueOf(user.getUserId()), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData.toString(), modifiedData.toString(), changedFields); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return result > 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
System.out.println("DEBUG: 在两个数据源中都未找到客户信息"); |
|
|
|
|
|
return false; |
|
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
|
|
System.out.println("DEBUG: 认领客户过程中线程被中断,异常信息: " + e.getMessage()); |
|
|
|
|
|
Thread.currentThread().interrupt(); |
|
|
|
|
|
throw new RuntimeException("认领客户失败: 线程中断"); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
System.out.println("DEBUG: 认领客户失败,异常信息: " + e.getMessage()); |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
throw new RuntimeException("认领客户失败: " + e.getMessage()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<CustomerData> getDepartmentSeaPool(String role, Login login) { |
|
|
public List<CustomerData> getDepartmentSeaPool(String role, Login login) { |
|
|
// 移除重复解码,前端已解码
|
|
|
// 移除重复解码,前端已解码
|
|
|
|