You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1746 lines
95 KiB
1746 lines
95 KiB
package com.example.web.service.impl;
|
|
|
|
import com.example.web.entity.Contacts;
|
|
import com.example.web.entity.CustomerData;
|
|
import com.example.web.entity.Enterprise;
|
|
import com.example.web.entity.Favorites;
|
|
import com.example.web.entity.Login;
|
|
import com.example.web.entity.Managers;
|
|
import com.example.web.entity.InformationTra;
|
|
import com.example.web.entity.Products;
|
|
import com.example.web.entity.Users;
|
|
import com.example.web.entity.UsersContacts;
|
|
import com.example.web.entity.UsersManagements;
|
|
import com.example.web.mapper.CustomerMapper;
|
|
import com.example.web.mapper.InformationTraMapper;
|
|
import com.example.web.mapper.WechatCustomerMapper;
|
|
import com.example.web.service.CustomerService;
|
|
import com.example.web.service.NotificationService;
|
|
import com.example.web.utils.CustomerTraceUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.net.URLDecoder;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
/**
|
|
* @Description: 客户数据服务实现类
|
|
*/
|
|
@Service
|
|
public class CustomerServiceImpl implements CustomerService {
|
|
|
|
@Autowired
|
|
private CustomerMapper customerMapper;
|
|
|
|
@Autowired
|
|
private WechatCustomerMapper wechatCustomerMapper;
|
|
|
|
@Autowired
|
|
private InformationTraMapper informationTraMapper;
|
|
|
|
@Autowired
|
|
private CustomerTraceUtil customerTraceUtil;
|
|
|
|
@Autowired
|
|
private NotificationService notificationService;
|
|
|
|
@Override
|
|
public List<CustomerData> getAllCustomers() {
|
|
List<CustomerData> allCustomers = new ArrayList<>();
|
|
|
|
// 获取primary数据源的客户数据
|
|
List<CustomerData> primaryCustomers = getPrimaryCustomers();
|
|
System.out.println("DEBUG: getPrimaryCustomers returned: " + primaryCustomers.size() + " records");
|
|
allCustomers.addAll(primaryCustomers);
|
|
|
|
// 获取wechat数据源的客户数据
|
|
List<CustomerData> wechatCustomers = getWechatCustomers();
|
|
System.out.println("DEBUG: getWechatCustomers returned: " + wechatCustomers.size() + " records");
|
|
allCustomers.addAll(wechatCustomers);
|
|
|
|
System.out.println("DEBUG: getAllCustomers total: " + allCustomers.size() + " records");
|
|
return allCustomers;
|
|
}
|
|
|
|
@Override
|
|
public boolean followupCustomer(String phoneNumber, String followupContent, String dataSource, Login login) {
|
|
try {
|
|
// 获取当前时间
|
|
LocalDateTime now = LocalDateTime.now();
|
|
System.out.println("DEBUG: 开始跟进客户,电话号码: " + phoneNumber + ", 跟进内容: " + followupContent);
|
|
|
|
// 1. 尝试从primary数据源查找客户,添加连接重试机制
|
|
Contacts contacts = null;
|
|
int retryCount = 0;
|
|
int maxRetries = 3;
|
|
long retryDelay = 1000; // 1秒
|
|
|
|
while (retryCount < maxRetries) {
|
|
try {
|
|
contacts = customerMapper.getContactsByPhoneNumber(phoneNumber);
|
|
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数据源中找到客户");
|
|
// 保存原始数据用于操作记录
|
|
String originalData = "{\"followup\": \"" + (contacts.getFollowup() == null ? "" : contacts.getFollowup()) + "\", \"followup_at\": \"" + (contacts.getFollowup_at() == null ? "" : contacts.getFollowup_at().toString()) + "\"}";
|
|
|
|
// 更新跟进信息和时间
|
|
contacts.setFollowup(followupContent);
|
|
contacts.setFollowup_at(now);
|
|
contacts.setUpdated_at(now);
|
|
|
|
int result = customerMapper.updateContacts(contacts);
|
|
System.out.println("DEBUG: 更新primary数据源联系人结果: " + result);
|
|
|
|
// 跟进后将客户状态更新为未分级
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId());
|
|
if (enterprise != null) {
|
|
enterprise.setLevel("unclassified");
|
|
customerMapper.updateEnterprise(enterprise);
|
|
}
|
|
|
|
// 保存操作记录
|
|
if (result > 0) {
|
|
String modifiedData = "{\"followup\": \"" + followupContent + "\", \"followup_at\": \"" + now.toString() + "\"}";
|
|
String changedFields = "[\"followup\", \"followup_at\"]";
|
|
saveOperationRecord(contacts.getId(), login, "跟进客户", originalData, modifiedData, changedFields);
|
|
|
|
// 记录客户跟进操作
|
|
customerTraceUtil.recordCustomerFollowup(contacts.getId(), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData, modifiedData, changedFields);
|
|
}
|
|
return result > 0;
|
|
}
|
|
|
|
System.out.println("DEBUG: 在primary数据源中未找到客户,尝试从wechat数据源查找");
|
|
|
|
// 2. 尝试从wechat数据源查找客户,添加连接重试机制
|
|
Users user = null;
|
|
retryCount = 0;
|
|
retryDelay = 1000; // 1秒
|
|
|
|
while (retryCount < maxRetries) {
|
|
try {
|
|
user = wechatCustomerMapper.getUsersByPhoneNumber(phoneNumber);
|
|
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数据源中找到客户");
|
|
// 保存原始数据用于操作记录
|
|
String originalData = "{\"followup\": \"" + (user.getFollowup() == null ? "" : user.getFollowup()) + "\", \"followup_at\": \"" + (user.getFollowup_at() == null ? "" : user.getFollowup_at().toString()) + "\"}";
|
|
|
|
// 更新跟进信息、时间和状态
|
|
user.setFollowup(followupContent);
|
|
user.setFollowup_at(now);
|
|
user.setUpdated_at(now);
|
|
// 跟进后将客户状态更新为未分级
|
|
user.setLevel("unclassified");
|
|
|
|
int result = wechatCustomerMapper.updateUsers(user);
|
|
System.out.println("DEBUG: 更新wechat数据源用户结果: " + result);
|
|
|
|
// 保存操作记录
|
|
if (result > 0) {
|
|
String modifiedData = "{\"followup\": \"" + followupContent + "\", \"followup_at\": \"" + now.toString() + "\"}";
|
|
String changedFields = "[\"followup\", \"followup_at\"]";
|
|
saveOperationRecord(String.valueOf(user.getUserId()), login, "跟进客户", originalData, modifiedData, changedFields);
|
|
|
|
// 记录客户跟进操作
|
|
customerTraceUtil.recordCustomerFollowup(String.valueOf(user.getUserId()), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData, modifiedData, 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
|
|
public boolean saveOperationRecord(String userId, Login login, String operationEvent, String originalData, String modifiedData, String changedFields) {
|
|
try {
|
|
// 创建信息跟踪记录
|
|
InformationTra informationTra = new InformationTra();
|
|
informationTra.setUserId(userId);
|
|
informationTra.setTracompany(login.getManagercompany());
|
|
informationTra.setTradepartment(login.getManagerdepartment());
|
|
informationTra.setTraorganization(login.getOrganization());
|
|
informationTra.setTrarole(login.getProjectName());
|
|
informationTra.setTrauserName(login.getUserName());
|
|
informationTra.setOperationEvent(operationEvent);
|
|
informationTra.setOperationTime(LocalDateTime.now());
|
|
informationTra.setCreatedAt(LocalDateTime.now());
|
|
informationTra.setUpdatedAt(LocalDateTime.now());
|
|
informationTra.setOriginalData(originalData);
|
|
informationTra.setModifiedData(modifiedData);
|
|
informationTra.setChangedFields(changedFields);
|
|
|
|
// 保存到数据库
|
|
int result = informationTraMapper.insertInformationTra(informationTra);
|
|
System.out.println("DEBUG: 保存操作记录,用户ID: " + userId + ", 操作人: " + login.getUserName() + ", 操作事件: " + operationEvent + ", 结果: " + result);
|
|
return result > 0;
|
|
} catch (Exception e) {
|
|
System.out.println("DEBUG: 保存操作记录失败,异常信息: " + e.getMessage());
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean recordCustomerView(String userId, Login login) {
|
|
try {
|
|
System.out.println("DEBUG: 记录客户查看操作,客户ID: " + userId + ", 操作人: " + login.getUserName());
|
|
|
|
// 保存操作记录
|
|
return saveOperationRecord(userId, login, "查看客户详情", "", "", "");
|
|
} catch (Exception e) {
|
|
System.out.println("DEBUG: 记录客户查看操作失败,异常信息: " + e.getMessage());
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@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);
|
|
|
|
// 发送客户认领通知
|
|
notificationService.sendCustomerUpdateNotification(contacts.getId(), "客户已被认领");
|
|
|
|
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);
|
|
|
|
// 发送客户认领通知
|
|
notificationService.sendCustomerUpdateNotification(String.valueOf(user.getUserId()), "客户已被认领");
|
|
}
|
|
|
|
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
|
|
public List<CustomerData> getDepartmentSeaPool(String role, Login login) {
|
|
// 移除重复解码,前端已解码
|
|
System.out.println("DEBUG: getDepartmentSeaPool called with role: " + role + ", login: " + login);
|
|
List<CustomerData> departmentSeaPool = new ArrayList<>();
|
|
|
|
// 获取primary数据源的部门公海池数据
|
|
List<CustomerData> primaryData = getPrimaryDepartmentSeaPool(role, login);
|
|
System.out.println("DEBUG: getPrimaryDepartmentSeaPool returned: " + primaryData.size() + " records");
|
|
departmentSeaPool.addAll(primaryData);
|
|
|
|
// 获取wechat数据源的部门公海池数据
|
|
List<CustomerData> wechatData = getWechatDepartmentSeaPool(role, login);
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool returned: " + wechatData.size() + " records");
|
|
departmentSeaPool.addAll(wechatData);
|
|
|
|
System.out.println("DEBUG: Total departmentSeaPool returned: " + departmentSeaPool.size() + " records");
|
|
return departmentSeaPool;
|
|
}
|
|
|
|
@Override
|
|
public List<CustomerData> getOrganizationSeaPool(String role, Login login) {
|
|
// 移除重复解码,前端已解码
|
|
System.out.println("DEBUG: getOrganizationSeaPool called with role: " + role + ", login: " + login);
|
|
List<CustomerData> organizationSeaPool = new ArrayList<>();
|
|
|
|
// 获取primary数据源的组织公海池数据
|
|
List<CustomerData> primaryData = getPrimaryOrganizationSeaPool(role, login);
|
|
System.out.println("DEBUG: getPrimaryOrganizationSeaPool returned: " + primaryData.size() + " records");
|
|
organizationSeaPool.addAll(primaryData);
|
|
|
|
// 获取wechat数据源的组织公海池数据
|
|
List<CustomerData> wechatData = getWechatOrganizationSeaPool(role, login);
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool returned: " + wechatData.size() + " records");
|
|
organizationSeaPool.addAll(wechatData);
|
|
|
|
System.out.println("DEBUG: Total organizationSeaPool returned: " + organizationSeaPool.size() + " records");
|
|
return organizationSeaPool;
|
|
}
|
|
|
|
@Override
|
|
public List<CustomerData> getCustomersByRole(String role, Login login) {
|
|
List<CustomerData> filteredCustomers = new ArrayList<>();
|
|
|
|
System.out.println("DEBUG: getCustomersByRole called with role: " + role + ", login: " + login);
|
|
System.out.println("DEBUG: Login info - userName: " + login.getUserName() + ", company: " + login.getManagercompany() + ", department: " + login.getManagerdepartment() + ", organization: " + login.getOrganization());
|
|
|
|
// 获取primary数据源的角色数据
|
|
List<CustomerData> primaryData = getPrimaryCustomersByRole(role, login);
|
|
System.out.println("DEBUG: getPrimaryCustomersByRole returned: " + primaryData.size() + " records");
|
|
filteredCustomers.addAll(primaryData);
|
|
|
|
// 获取wechat数据源的角色数据
|
|
List<CustomerData> wechatData = getWechatCustomersByRole(role, login);
|
|
System.out.println("DEBUG: getWechatCustomersByRole returned: " + wechatData.size() + " records");
|
|
filteredCustomers.addAll(wechatData);
|
|
|
|
System.out.println("DEBUG: Total customers after filtering: " + filteredCustomers.size());
|
|
return filteredCustomers;
|
|
}
|
|
|
|
/**
|
|
* 获取primary数据源的角色数据
|
|
* @param role 角色
|
|
* @param login 登录信息
|
|
* @return primary数据源的角色数据
|
|
*/
|
|
private List<CustomerData> getPrimaryCustomersByRole(String role, Login login) {
|
|
List<CustomerData> roleCustomers = new ArrayList<>();
|
|
|
|
// 直接从数据库获取符合条件的联系人信息
|
|
List<Contacts> contactsList = customerMapper.getCustomersByRole(
|
|
role, login.getUserName(), login.getManagercompany(),
|
|
login.getManagerdepartment(), login.getOrganization());
|
|
|
|
for (Contacts contacts : contactsList) {
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置联系人基本信息
|
|
customerData.setId(contacts.getId());
|
|
customerData.setNickName(contacts.getNickName());
|
|
customerData.setPhoneNumber(contacts.getPhoneNumber());
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
customerData.setFollowup(contacts.getFollowup());
|
|
customerData.setCreated_at(contacts.getCreated_at());
|
|
customerData.setUpdated_at(contacts.getUpdated_at());
|
|
|
|
// 获取并设置企业信息
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId());
|
|
if (enterprise != null) {
|
|
customerData.setCompany(enterprise.getCompany());
|
|
customerData.setRegion(enterprise.getRegion());
|
|
customerData.setLevel(enterprise.getLevel());
|
|
customerData.setType(enterprise.getType());
|
|
customerData.setDemand(enterprise.getDemand());
|
|
customerData.setSpec(enterprise.getSpec());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
Managers managers = customerMapper.getManagerByContactId(contacts.getId());
|
|
if (managers != null) {
|
|
customerData.setManagercompany(managers.getManagercompany());
|
|
customerData.setManagerdepartment(managers.getManagerdepartment());
|
|
customerData.setOrganization(managers.getOrganization());
|
|
customerData.setProjectName(managers.getRole());
|
|
customerData.setRole(managers.getRole());
|
|
customerData.setUserName(managers.getUserName());
|
|
customerData.setAssistant(managers.getAssistant());
|
|
}
|
|
|
|
// 设置收藏产品信息
|
|
customerData.setFavorites(new ArrayList<>());
|
|
|
|
roleCustomers.add(customerData);
|
|
}
|
|
|
|
return roleCustomers;
|
|
}
|
|
|
|
/**
|
|
* 获取wechat数据源的角色数据
|
|
* @param role 角色
|
|
* @param login 登录信息
|
|
* @return wechat数据源的角色数据
|
|
*/
|
|
private List<CustomerData> getWechatCustomersByRole(String role, Login login) {
|
|
List<CustomerData> roleCustomers = new ArrayList<>();
|
|
|
|
// 直接从数据库获取符合条件的用户信息
|
|
List<Users> usersList = wechatCustomerMapper.getCustomersByRole(
|
|
role, login.getUserName(), login.getManagercompany(),
|
|
login.getManagerdepartment(), login.getOrganization());
|
|
|
|
for (Users user : usersList) {
|
|
// 跳过type为manager的用户
|
|
if ("manager".equals(user.getType())) {
|
|
continue;
|
|
}
|
|
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置用户基本信息
|
|
customerData.setId(user.getUserId());
|
|
customerData.setNickName(user.getNickName());
|
|
customerData.setPhoneNumber(user.getPhoneNumber());
|
|
customerData.setType(user.getType());
|
|
customerData.setCompany(user.getCompany());
|
|
customerData.setRegion(user.getRegion());
|
|
customerData.setLevel(user.getLevel());
|
|
customerData.setDemand(user.getDemand());
|
|
customerData.setSpec(user.getSpec());
|
|
customerData.setFollowup(user.getFollowup());
|
|
customerData.setNotice(user.getNotice());
|
|
customerData.setFollowup_at(user.getFollowup_at());
|
|
customerData.setCreated_at(user.getCreated_at());
|
|
customerData.setUpdated_at(user.getUpdated_at());
|
|
|
|
// 获取并设置联系人信息
|
|
UsersContacts contacts = wechatCustomerMapper.getContactsByUserId(user.getUserId());
|
|
if (contacts != null) {
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(user.getUserId());
|
|
if (managements != null) {
|
|
customerData.setManagercompany(managements.getManagercompany());
|
|
customerData.setManagerdepartment(managements.getManagerdepartment());
|
|
customerData.setOrganization(managements.getOrganization());
|
|
customerData.setProjectName(managements.getRole());
|
|
customerData.setRole(managements.getRole());
|
|
customerData.setUserName(managements.getUserName());
|
|
customerData.setAssistant(managements.getAssistant());
|
|
}
|
|
|
|
// 获取并设置收藏产品信息
|
|
customerData.setFavorites(getProductFavorites(user.getPhoneNumber()));
|
|
|
|
roleCustomers.add(customerData);
|
|
}
|
|
|
|
return roleCustomers;
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public boolean addCustomer(Map<String, Object> customerData) {
|
|
try {
|
|
// 获取当前时间
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
// 1. 插入企业信息
|
|
Enterprise enterprise = new Enterprise();
|
|
enterprise.setId((String) customerData.get("id"));
|
|
enterprise.setCompany((String) customerData.get("company"));
|
|
enterprise.setRegion((String) customerData.get("region"));
|
|
enterprise.setLevel((String) customerData.get("level"));
|
|
enterprise.setType((String) customerData.get("type"));
|
|
enterprise.setDemand((String) customerData.get("demand"));
|
|
enterprise.setSpec((String) customerData.get("spec"));
|
|
customerMapper.insertEnterprise(enterprise);
|
|
|
|
// 2. 插入联系人信息
|
|
Contacts contacts = new Contacts();
|
|
contacts.setContact_id((String) customerData.get("contact_id"));
|
|
contacts.setId((String) customerData.get("id"));
|
|
contacts.setNickName((String) customerData.get("nickName"));
|
|
contacts.setPhoneNumber((String) customerData.get("phoneNumber"));
|
|
contacts.setWechat((String) customerData.get("wechat"));
|
|
contacts.setAccount((String) customerData.get("account"));
|
|
contacts.setAccountNumber((String) customerData.get("accountNumber"));
|
|
contacts.setBank((String) customerData.get("bank"));
|
|
contacts.setAddress((String) customerData.get("address"));
|
|
contacts.setFollowup((String) customerData.get("followup"));
|
|
contacts.setCreated_at(now);
|
|
contacts.setUpdated_at(now);
|
|
customerMapper.insertContacts(contacts);
|
|
|
|
// 3. 插入负责人信息
|
|
Managers managers = new Managers();
|
|
// manager_id是自增主键,不需要手动设置,数据库会自动生成
|
|
managers.setId((String) customerData.get("id"));
|
|
managers.setManagerId((String) customerData.get("managerId"));
|
|
managers.setManagercompany((String) customerData.get("managercompany"));
|
|
managers.setManagerdepartment((String) customerData.get("managerdepartment"));
|
|
managers.setOrganization((String) customerData.get("organization"));
|
|
managers.setRole((String) customerData.get("role"));
|
|
managers.setRoot("normal"); // 默认权限
|
|
managers.setCreated_at(now);
|
|
managers.setUpdated_at(now);
|
|
managers.setUserName((String) customerData.get("userName"));
|
|
managers.setAssistant((String) customerData.get("assistant"));
|
|
customerMapper.insertManagers(managers);
|
|
|
|
return true;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
throw new RuntimeException("添加客户失败: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean updateCustomer(Map<String, Object> customerData, Login login) {
|
|
try {
|
|
// 获取当前时间
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
// 获取电话号码作为唯一标识
|
|
String phoneNumber = (String) customerData.get("phoneNumber");
|
|
if (phoneNumber == null || phoneNumber.isEmpty()) {
|
|
System.out.println("DEBUG: 电话号码为空,无法更新客户信息");
|
|
return false;
|
|
}
|
|
|
|
System.out.println("DEBUG: 开始更新客户信息,电话号码: " + phoneNumber);
|
|
System.out.println("DEBUG: 客户数据: " + customerData);
|
|
|
|
// 1. 尝试从primary数据源更新,添加连接重试机制
|
|
Contacts existingContacts = null;
|
|
int retryCount = 0;
|
|
int maxRetries = 3;
|
|
long retryDelay = 1000; // 1秒
|
|
|
|
while (retryCount < maxRetries) {
|
|
try {
|
|
existingContacts = customerMapper.getContactsByPhoneNumber(phoneNumber);
|
|
break; // 获取成功,退出重试循环
|
|
} catch (Exception e) {
|
|
retryCount++;
|
|
System.out.println("DEBUG: 第" + retryCount + "次尝试获取primary数据源连接失败,异常信息: " + e.getMessage());
|
|
if (retryCount >= maxRetries) {
|
|
throw e; // 达到最大重试次数,抛出异常
|
|
}
|
|
// 等待一段时间后重试
|
|
Thread.sleep(retryDelay);
|
|
retryDelay *= 2; // 指数退避
|
|
}
|
|
}
|
|
|
|
if (existingContacts != null) {
|
|
System.out.println("DEBUG: 在primary数据源中找到联系人信息,contactId: " + existingContacts.getContact_id());
|
|
|
|
// 获取企业信息和负责人信息
|
|
Enterprise existingEnterprise = customerMapper.getEnterpriseByContactId(existingContacts.getId());
|
|
Managers existingManagers = customerMapper.getManagerByContactId(existingContacts.getId());
|
|
|
|
// 保存原始数据快照
|
|
// 保存Contacts表原始数据
|
|
String originalContactNickName = existingContacts.getNickName();
|
|
String originalContactWechat = existingContacts.getWechat();
|
|
String originalContactAccount = existingContacts.getAccount();
|
|
String originalContactAccountNumber = existingContacts.getAccountNumber();
|
|
String originalContactBank = existingContacts.getBank();
|
|
String originalContactAddress = existingContacts.getAddress();
|
|
String originalContactFollowup = existingContacts.getFollowup();
|
|
LocalDateTime originalContactFollowupAt = existingContacts.getFollowup_at();
|
|
|
|
// 保存Enterprise表原始数据
|
|
String originalEnterpriseCompany = (existingEnterprise != null ? existingEnterprise.getCompany() : null);
|
|
String originalEnterpriseRegion = (existingEnterprise != null ? existingEnterprise.getRegion() : null);
|
|
String originalEnterpriseLevel = (existingEnterprise != null ? existingEnterprise.getLevel() : null);
|
|
String originalEnterpriseType = (existingEnterprise != null ? existingEnterprise.getType() : null);
|
|
String originalEnterpriseDemand = (existingEnterprise != null ? existingEnterprise.getDemand() : null);
|
|
String originalEnterpriseSpec = (existingEnterprise != null ? existingEnterprise.getSpec() : null);
|
|
|
|
// 1.1 更新primary数据源中的数据
|
|
boolean primaryResult = updatePrimaryCustomer(existingContacts, customerData, now);
|
|
System.out.println("DEBUG: primary数据源更新结果: " + primaryResult);
|
|
|
|
// 获取更新后的企业信息和负责人信息
|
|
Enterprise updatedEnterprise = customerMapper.getEnterpriseByContactId(existingContacts.getId());
|
|
Managers updatedManagers = customerMapper.getManagerByContactId(existingContacts.getId());
|
|
|
|
// 构建完整的原始数据JSON
|
|
StringBuilder originalDataBuilder = new StringBuilder("{");
|
|
originalDataBuilder.append("\"nickName\": \"" + (originalContactNickName == null ? "" : originalContactNickName) + "\",");
|
|
originalDataBuilder.append("\"wechat\": \"" + (originalContactWechat == null ? "" : originalContactWechat) + "\",");
|
|
originalDataBuilder.append("\"account\": \"" + (originalContactAccount == null ? "" : originalContactAccount) + "\",");
|
|
originalDataBuilder.append("\"accountNumber\": \"" + (originalContactAccountNumber == null ? "" : originalContactAccountNumber) + "\",");
|
|
originalDataBuilder.append("\"bank\": \"" + (originalContactBank == null ? "" : originalContactBank) + "\",");
|
|
originalDataBuilder.append("\"address\": \"" + (originalContactAddress == null ? "" : originalContactAddress) + "\",");
|
|
originalDataBuilder.append("\"followup\": \"" + (originalContactFollowup == null ? "" : originalContactFollowup) + "\",");
|
|
originalDataBuilder.append("\"followup_at\": \"" + (originalContactFollowupAt == null ? "" : originalContactFollowupAt.toString()) + "\",");
|
|
originalDataBuilder.append("\"company\": \"" + (originalEnterpriseCompany == null ? "" : originalEnterpriseCompany) + "\",");
|
|
originalDataBuilder.append("\"region\": \"" + (originalEnterpriseRegion == null ? "" : originalEnterpriseRegion) + "\",");
|
|
originalDataBuilder.append("\"level\": \"" + (originalEnterpriseLevel == null ? "" : originalEnterpriseLevel) + "\",");
|
|
originalDataBuilder.append("\"type\": \"" + (originalEnterpriseType == null ? "" : originalEnterpriseType) + "\",");
|
|
originalDataBuilder.append("\"demand\": \"" + (originalEnterpriseDemand == null ? "" : originalEnterpriseDemand) + "\",");
|
|
originalDataBuilder.append("\"spec\": \"" + (originalEnterpriseSpec == null ? "" : originalEnterpriseSpec) + "\"");
|
|
originalDataBuilder.append("}");
|
|
String originalData = originalDataBuilder.toString();
|
|
|
|
// 构建完整的修改后数据JSON
|
|
StringBuilder modifiedDataBuilder = new StringBuilder("{");
|
|
modifiedDataBuilder.append("\"nickName\": \"" + (existingContacts.getNickName() == null ? "" : existingContacts.getNickName()) + "\",");
|
|
modifiedDataBuilder.append("\"wechat\": \"" + (existingContacts.getWechat() == null ? "" : existingContacts.getWechat()) + "\",");
|
|
modifiedDataBuilder.append("\"account\": \"" + (existingContacts.getAccount() == null ? "" : existingContacts.getAccount()) + "\",");
|
|
modifiedDataBuilder.append("\"accountNumber\": \"" + (existingContacts.getAccountNumber() == null ? "" : existingContacts.getAccountNumber()) + "\",");
|
|
modifiedDataBuilder.append("\"bank\": \"" + (existingContacts.getBank() == null ? "" : existingContacts.getBank()) + "\",");
|
|
modifiedDataBuilder.append("\"address\": \"" + (existingContacts.getAddress() == null ? "" : existingContacts.getAddress()) + "\",");
|
|
modifiedDataBuilder.append("\"followup\": \"" + (existingContacts.getFollowup() == null ? "" : existingContacts.getFollowup()) + "\",");
|
|
modifiedDataBuilder.append("\"followup_at\": \"" + (existingContacts.getFollowup_at() == null ? "" : existingContacts.getFollowup_at().toString()) + "\",");
|
|
modifiedDataBuilder.append("\"company\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getCompany() == null ? "" : updatedEnterprise.getCompany()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"region\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getRegion() == null ? "" : updatedEnterprise.getRegion()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"level\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getLevel() == null ? "" : updatedEnterprise.getLevel()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"type\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getType() == null ? "" : updatedEnterprise.getType()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"demand\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getDemand() == null ? "" : updatedEnterprise.getDemand()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"spec\": \"" + (updatedEnterprise != null ? (updatedEnterprise.getSpec() == null ? "" : updatedEnterprise.getSpec()) : "") + "\"");
|
|
modifiedDataBuilder.append("}");
|
|
String modifiedData = modifiedDataBuilder.toString();
|
|
|
|
// 确定实际变更的字段
|
|
StringBuilder changedFieldsBuilder = new StringBuilder("[");
|
|
boolean hasChanged = false;
|
|
|
|
// 比较Contacts表字段
|
|
if (!equals(originalContactNickName, existingContacts.getNickName())) {
|
|
changedFieldsBuilder.append("\"nickName\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactWechat, existingContacts.getWechat())) {
|
|
changedFieldsBuilder.append("\"wechat\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAccount, existingContacts.getAccount())) {
|
|
changedFieldsBuilder.append("\"account\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAccountNumber, existingContacts.getAccountNumber())) {
|
|
changedFieldsBuilder.append("\"accountNumber\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactBank, existingContacts.getBank())) {
|
|
changedFieldsBuilder.append("\"bank\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAddress, existingContacts.getAddress())) {
|
|
changedFieldsBuilder.append("\"address\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactFollowup, existingContacts.getFollowup())) {
|
|
changedFieldsBuilder.append("\"followup\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactFollowupAt, existingContacts.getFollowup_at())) {
|
|
changedFieldsBuilder.append("\"followup_at\", ");
|
|
hasChanged = true;
|
|
}
|
|
|
|
// 比较Enterprise表字段
|
|
if (!equals(originalEnterpriseCompany, (updatedEnterprise != null ? updatedEnterprise.getCompany() : null))) {
|
|
changedFieldsBuilder.append("\"company\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalEnterpriseRegion, (updatedEnterprise != null ? updatedEnterprise.getRegion() : null))) {
|
|
changedFieldsBuilder.append("\"region\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalEnterpriseLevel, (updatedEnterprise != null ? updatedEnterprise.getLevel() : null))) {
|
|
changedFieldsBuilder.append("\"level\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalEnterpriseType, (updatedEnterprise != null ? updatedEnterprise.getType() : null))) {
|
|
changedFieldsBuilder.append("\"type\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalEnterpriseDemand, (updatedEnterprise != null ? updatedEnterprise.getDemand() : null))) {
|
|
changedFieldsBuilder.append("\"demand\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalEnterpriseSpec, (updatedEnterprise != null ? updatedEnterprise.getSpec() : null))) {
|
|
changedFieldsBuilder.append("\"spec\", ");
|
|
hasChanged = true;
|
|
}
|
|
|
|
// 移除末尾的逗号和空格
|
|
String changedFields;
|
|
if (hasChanged) {
|
|
changedFields = changedFieldsBuilder.substring(0, changedFieldsBuilder.length() - 2) + "]";
|
|
} else {
|
|
changedFields = "[]";
|
|
}
|
|
|
|
// 记录客户编辑操作
|
|
customerTraceUtil.recordCustomerEdit(existingContacts.getId(), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData, modifiedData, changedFields);
|
|
|
|
// 发送客户更新通知
|
|
notificationService.sendCustomerUpdateNotification(existingContacts.getId(), "客户信息已更新");
|
|
|
|
return primaryResult;
|
|
}
|
|
|
|
System.out.println("DEBUG: 在primary数据源中未找到联系人信息,尝试从wechat数据源更新");
|
|
|
|
// 2. 尝试从wechat数据源更新,添加异常处理
|
|
try {
|
|
Users existingUser = wechatCustomerMapper.getUsersByPhoneNumber(phoneNumber);
|
|
if (existingUser != null) {
|
|
System.out.println("DEBUG: 在wechat数据源中找到用户信息,userId: " + existingUser.getUserId());
|
|
|
|
// 获取联系人信息和负责人信息
|
|
UsersContacts existingWechatContacts = wechatCustomerMapper.getContactsByUserId(existingUser.getUserId());
|
|
UsersManagements existingManagements = wechatCustomerMapper.getManagementsByUserId(existingUser.getUserId());
|
|
|
|
// 保存原始数据快照
|
|
// 保存Users表原始数据
|
|
String originalUserNickName = existingUser.getNickName();
|
|
String originalUserCompany = existingUser.getCompany();
|
|
String originalUserRegion = existingUser.getRegion();
|
|
String originalUserLevel = existingUser.getLevel();
|
|
String originalUserDemand = existingUser.getDemand();
|
|
String originalUserSpec = existingUser.getSpec();
|
|
String originalUserFollowup = existingUser.getFollowup();
|
|
String originalUserNotice = existingUser.getNotice();
|
|
LocalDateTime originalUserFollowupAt = existingUser.getFollowup_at();
|
|
|
|
// 保存UsersContacts表原始数据
|
|
String originalContactWechat = (existingWechatContacts != null ? existingWechatContacts.getWechat() : null);
|
|
String originalContactAccount = (existingWechatContacts != null ? existingWechatContacts.getAccount() : null);
|
|
String originalContactAccountNumber = (existingWechatContacts != null ? existingWechatContacts.getAccountNumber() : null);
|
|
String originalContactBank = (existingWechatContacts != null ? existingWechatContacts.getBank() : null);
|
|
String originalContactAddress = (existingWechatContacts != null ? existingWechatContacts.getAddress() : null);
|
|
|
|
// 2.1 更新wechat数据源中的数据
|
|
boolean wechatResult = updateWechatCustomer(existingUser, customerData, now);
|
|
System.out.println("DEBUG: wechat数据源更新结果: " + wechatResult);
|
|
|
|
// 获取更新后的联系人信息和负责人信息
|
|
UsersContacts updatedContacts = wechatCustomerMapper.getContactsByUserId(existingUser.getUserId());
|
|
UsersManagements updatedManagements = wechatCustomerMapper.getManagementsByUserId(existingUser.getUserId());
|
|
|
|
// 构建完整的原始数据JSON
|
|
StringBuilder originalDataBuilder = new StringBuilder("{");
|
|
originalDataBuilder.append("\"nickName\": \"" + (originalUserNickName == null ? "" : originalUserNickName) + "\",");
|
|
originalDataBuilder.append("\"company\": \"" + (originalUserCompany == null ? "" : originalUserCompany) + "\",");
|
|
originalDataBuilder.append("\"region\": \"" + (originalUserRegion == null ? "" : originalUserRegion) + "\",");
|
|
originalDataBuilder.append("\"level\": \"" + (originalUserLevel == null ? "" : originalUserLevel) + "\",");
|
|
originalDataBuilder.append("\"demand\": \"" + (originalUserDemand == null ? "" : originalUserDemand) + "\",");
|
|
originalDataBuilder.append("\"spec\": \"" + (originalUserSpec == null ? "" : originalUserSpec) + "\",");
|
|
originalDataBuilder.append("\"followup\": \"" + (originalUserFollowup == null ? "" : originalUserFollowup) + "\",");
|
|
originalDataBuilder.append("\"notice\": \"" + (originalUserNotice == null ? "" : originalUserNotice) + "\",");
|
|
originalDataBuilder.append("\"followup_at\": \"" + (originalUserFollowupAt == null ? "" : originalUserFollowupAt.toString()) + "\",");
|
|
originalDataBuilder.append("\"wechat\": \"" + (originalContactWechat == null ? "" : originalContactWechat) + "\",");
|
|
originalDataBuilder.append("\"account\": \"" + (originalContactAccount == null ? "" : originalContactAccount) + "\",");
|
|
originalDataBuilder.append("\"accountNumber\": \"" + (originalContactAccountNumber == null ? "" : originalContactAccountNumber) + "\",");
|
|
originalDataBuilder.append("\"bank\": \"" + (originalContactBank == null ? "" : originalContactBank) + "\",");
|
|
originalDataBuilder.append("\"address\": \"" + (originalContactAddress == null ? "" : originalContactAddress) + "\"");
|
|
originalDataBuilder.append("}");
|
|
String originalData = originalDataBuilder.toString();
|
|
|
|
// 构建完整的修改后数据JSON
|
|
StringBuilder modifiedDataBuilder = new StringBuilder("{");
|
|
modifiedDataBuilder.append("\"nickName\": \"" + (existingUser.getNickName() == null ? "" : existingUser.getNickName()) + "\",");
|
|
modifiedDataBuilder.append("\"company\": \"" + (existingUser.getCompany() == null ? "" : existingUser.getCompany()) + "\",");
|
|
modifiedDataBuilder.append("\"region\": \"" + (existingUser.getRegion() == null ? "" : existingUser.getRegion()) + "\",");
|
|
modifiedDataBuilder.append("\"level\": \"" + (existingUser.getLevel() == null ? "" : existingUser.getLevel()) + "\",");
|
|
modifiedDataBuilder.append("\"demand\": \"" + (existingUser.getDemand() == null ? "" : existingUser.getDemand()) + "\",");
|
|
modifiedDataBuilder.append("\"spec\": \"" + (existingUser.getSpec() == null ? "" : existingUser.getSpec()) + "\",");
|
|
modifiedDataBuilder.append("\"followup\": \"" + (existingUser.getFollowup() == null ? "" : existingUser.getFollowup()) + "\",");
|
|
modifiedDataBuilder.append("\"notice\": \"" + (existingUser.getNotice() == null ? "" : existingUser.getNotice()) + "\",");
|
|
modifiedDataBuilder.append("\"followup_at\": \"" + (existingUser.getFollowup_at() == null ? "" : existingUser.getFollowup_at().toString()) + "\",");
|
|
modifiedDataBuilder.append("\"wechat\": \"" + (updatedContacts != null ? (updatedContacts.getWechat() == null ? "" : updatedContacts.getWechat()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"account\": \"" + (updatedContacts != null ? (updatedContacts.getAccount() == null ? "" : updatedContacts.getAccount()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"accountNumber\": \"" + (updatedContacts != null ? (updatedContacts.getAccountNumber() == null ? "" : updatedContacts.getAccountNumber()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"bank\": \"" + (updatedContacts != null ? (updatedContacts.getBank() == null ? "" : updatedContacts.getBank()) : "") + "\",");
|
|
modifiedDataBuilder.append("\"address\": \"" + (updatedContacts != null ? (updatedContacts.getAddress() == null ? "" : updatedContacts.getAddress()) : "") + "\"");
|
|
modifiedDataBuilder.append("}");
|
|
String modifiedData = modifiedDataBuilder.toString();
|
|
|
|
// 确定实际变更的字段
|
|
StringBuilder changedFieldsBuilder = new StringBuilder("[");
|
|
boolean hasChanged = false;
|
|
|
|
// 比较Users表字段
|
|
if (!equals(originalUserNickName, existingUser.getNickName())) {
|
|
changedFieldsBuilder.append("\"nickName\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserCompany, existingUser.getCompany())) {
|
|
changedFieldsBuilder.append("\"company\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserRegion, existingUser.getRegion())) {
|
|
changedFieldsBuilder.append("\"region\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserLevel, existingUser.getLevel())) {
|
|
changedFieldsBuilder.append("\"level\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserDemand, existingUser.getDemand())) {
|
|
changedFieldsBuilder.append("\"demand\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserSpec, existingUser.getSpec())) {
|
|
changedFieldsBuilder.append("\"spec\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserFollowup, existingUser.getFollowup())) {
|
|
changedFieldsBuilder.append("\"followup\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserNotice, existingUser.getNotice())) {
|
|
changedFieldsBuilder.append("\"notice\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalUserFollowupAt, existingUser.getFollowup_at())) {
|
|
changedFieldsBuilder.append("\"followup_at\", ");
|
|
hasChanged = true;
|
|
}
|
|
|
|
// 比较UsersContacts表字段
|
|
if (!equals(originalContactWechat, (updatedContacts != null ? updatedContacts.getWechat() : null))) {
|
|
changedFieldsBuilder.append("\"wechat\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAccount, (updatedContacts != null ? updatedContacts.getAccount() : null))) {
|
|
changedFieldsBuilder.append("\"account\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAccountNumber, (updatedContacts != null ? updatedContacts.getAccountNumber() : null))) {
|
|
changedFieldsBuilder.append("\"accountNumber\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactBank, (updatedContacts != null ? updatedContacts.getBank() : null))) {
|
|
changedFieldsBuilder.append("\"bank\", ");
|
|
hasChanged = true;
|
|
}
|
|
if (!equals(originalContactAddress, (updatedContacts != null ? updatedContacts.getAddress() : null))) {
|
|
changedFieldsBuilder.append("\"address\", ");
|
|
hasChanged = true;
|
|
}
|
|
|
|
// 移除末尾的逗号和空格
|
|
String changedFields;
|
|
if (hasChanged) {
|
|
changedFields = changedFieldsBuilder.substring(0, changedFieldsBuilder.length() - 2) + "]";
|
|
} else {
|
|
changedFields = "[]";
|
|
}
|
|
|
|
// 记录客户编辑操作
|
|
customerTraceUtil.recordCustomerEdit(String.valueOf(existingUser.getUserId()), login.getManagercompany(), login.getManagerdepartment(), login.getOrganization(), login.getProjectName(), login.getUserName(), originalData, modifiedData, changedFields);
|
|
|
|
// 发送客户更新通知
|
|
notificationService.sendCustomerUpdateNotification(String.valueOf(existingUser.getUserId()), "客户信息已更新");
|
|
|
|
return wechatResult;
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println("DEBUG: 从wechat数据源查询用户信息失败,异常信息: " + e.getMessage());
|
|
e.printStackTrace();
|
|
// 忽略wechat数据源查询失败的异常,继续执行
|
|
}
|
|
|
|
System.out.println("DEBUG: 在两个数据源中都未找到客户信息,无法更新");
|
|
// 3. 两个数据源中都没有找到,返回false
|
|
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());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 更新primary数据源中的客户信息
|
|
*/
|
|
private boolean updatePrimaryCustomer(Contacts existingContacts, Map<String, Object> customerData, LocalDateTime now) {
|
|
try {
|
|
String contactId = existingContacts.getContact_id();
|
|
String enterpriseId = existingContacts.getId();
|
|
System.out.println("DEBUG: 开始更新primary数据源中的客户信息,contactId: " + contactId + ", enterpriseId: " + enterpriseId);
|
|
|
|
// 只更新customerData中存在的字段,避免将现有字段设为null
|
|
// 更新联系人信息
|
|
if (customerData.containsKey("nickName")) {
|
|
existingContacts.setNickName((String) customerData.get("nickName"));
|
|
}
|
|
if (customerData.containsKey("wechat")) {
|
|
existingContacts.setWechat((String) customerData.get("wechat"));
|
|
}
|
|
if (customerData.containsKey("account")) {
|
|
existingContacts.setAccount((String) customerData.get("account"));
|
|
}
|
|
if (customerData.containsKey("accountNumber")) {
|
|
existingContacts.setAccountNumber((String) customerData.get("accountNumber"));
|
|
}
|
|
if (customerData.containsKey("bank")) {
|
|
existingContacts.setBank((String) customerData.get("bank"));
|
|
}
|
|
if (customerData.containsKey("address")) {
|
|
existingContacts.setAddress((String) customerData.get("address"));
|
|
}
|
|
existingContacts.setUpdated_at(now);
|
|
int contactsUpdateResult = customerMapper.updateContacts(existingContacts);
|
|
System.out.println("DEBUG: 更新联系人信息结果: " + contactsUpdateResult);
|
|
|
|
// 更新企业信息
|
|
Enterprise enterprise = new Enterprise();
|
|
enterprise.setId(enterpriseId);
|
|
if (customerData.containsKey("company")) {
|
|
enterprise.setCompany((String) customerData.get("company"));
|
|
}
|
|
if (customerData.containsKey("region")) {
|
|
enterprise.setRegion((String) customerData.get("region"));
|
|
}
|
|
if (customerData.containsKey("level")) {
|
|
enterprise.setLevel((String) customerData.get("level"));
|
|
}
|
|
if (customerData.containsKey("type")) {
|
|
enterprise.setType((String) customerData.get("type"));
|
|
}
|
|
if (customerData.containsKey("demand")) {
|
|
enterprise.setDemand((String) customerData.get("demand"));
|
|
}
|
|
if (customerData.containsKey("spec")) {
|
|
enterprise.setSpec((String) customerData.get("spec"));
|
|
}
|
|
int enterpriseUpdateResult = customerMapper.updateEnterprise(enterprise);
|
|
System.out.println("DEBUG: 更新企业信息结果: " + enterpriseUpdateResult);
|
|
|
|
// 更新负责人信息
|
|
Managers managers = new Managers();
|
|
managers.setId(enterpriseId);
|
|
if (customerData.containsKey("managercompany")) {
|
|
managers.setManagercompany((String) customerData.get("managercompany"));
|
|
}
|
|
if (customerData.containsKey("managerdepartment")) {
|
|
managers.setManagerdepartment((String) customerData.get("managerdepartment"));
|
|
}
|
|
if (customerData.containsKey("organization")) {
|
|
managers.setOrganization((String) customerData.get("organization"));
|
|
}
|
|
if (customerData.containsKey("projectName")) {
|
|
managers.setRole((String) customerData.get("projectName"));
|
|
}
|
|
if (customerData.containsKey("userName")) {
|
|
managers.setUserName((String) customerData.get("userName"));
|
|
}
|
|
if (customerData.containsKey("assistant")) {
|
|
managers.setAssistant((String) customerData.get("assistant"));
|
|
}
|
|
managers.setUpdated_at(now);
|
|
int managersUpdateResult = customerMapper.updateManagers(managers);
|
|
System.out.println("DEBUG: 更新负责人信息结果: " + managersUpdateResult);
|
|
|
|
System.out.println("DEBUG: 更新primary数据源客户成功");
|
|
return true;
|
|
} catch (Exception e) {
|
|
System.out.println("DEBUG: 更新primary数据源客户失败,异常信息: " + e.getMessage());
|
|
e.printStackTrace();
|
|
throw new RuntimeException("更新primary数据源客户失败: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 更新wechat数据源中的客户信息
|
|
*/
|
|
private boolean updateWechatCustomer(Users existingUser, Map<String, Object> customerData, LocalDateTime now) {
|
|
try {
|
|
String userId = existingUser.getUserId();
|
|
System.out.println("DEBUG: 开始更新wechat数据源中的客户信息,userId: " + userId);
|
|
|
|
// 只更新customerData中存在的字段,避免将现有字段设为null
|
|
if (customerData.containsKey("nickName")) {
|
|
existingUser.setNickName((String) customerData.get("nickName"));
|
|
}
|
|
if (customerData.containsKey("company")) {
|
|
existingUser.setCompany((String) customerData.get("company"));
|
|
}
|
|
if (customerData.containsKey("region")) {
|
|
existingUser.setRegion((String) customerData.get("region"));
|
|
}
|
|
if (customerData.containsKey("level")) {
|
|
existingUser.setLevel((String) customerData.get("level"));
|
|
}
|
|
if (customerData.containsKey("demand")) {
|
|
existingUser.setDemand((String) customerData.get("demand"));
|
|
}
|
|
if (customerData.containsKey("notice")) {
|
|
existingUser.setNotice((String) customerData.get("notice"));
|
|
}
|
|
existingUser.setUpdated_at(now);
|
|
int usersUpdateResult = wechatCustomerMapper.updateUsers(existingUser);
|
|
System.out.println("DEBUG: 更新用户信息结果: " + usersUpdateResult);
|
|
|
|
// 获取或创建联系人信息
|
|
UsersContacts contacts = wechatCustomerMapper.getContactsByUserId(userId);
|
|
System.out.println("DEBUG: 获取联系人信息结果: " + (contacts != null ? "找到" : "未找到"));
|
|
|
|
if (contacts != null) {
|
|
// 只更新customerData中存在的字段,避免将现有字段设为null
|
|
if (customerData.containsKey("wechat")) {
|
|
contacts.setWechat((String) customerData.get("wechat"));
|
|
}
|
|
if (customerData.containsKey("account")) {
|
|
contacts.setAccount((String) customerData.get("account"));
|
|
}
|
|
if (customerData.containsKey("accountNumber")) {
|
|
contacts.setAccountNumber((String) customerData.get("accountNumber"));
|
|
}
|
|
if (customerData.containsKey("bank")) {
|
|
contacts.setBank((String) customerData.get("bank"));
|
|
}
|
|
if (customerData.containsKey("address")) {
|
|
contacts.setAddress((String) customerData.get("address"));
|
|
}
|
|
contacts.setUpdated_at(now);
|
|
int contactsUpdateResult = wechatCustomerMapper.updateUsersContacts(contacts);
|
|
System.out.println("DEBUG: 更新联系人信息结果: " + contactsUpdateResult);
|
|
}
|
|
|
|
// 获取或创建负责人信息
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(userId);
|
|
System.out.println("DEBUG: 获取负责人信息结果: " + (managements != null ? "找到" : "未找到"));
|
|
|
|
if (managements != null) {
|
|
// 只更新customerData中存在的字段,避免将现有字段设为null
|
|
if (customerData.containsKey("managercompany")) {
|
|
managements.setManagercompany((String) customerData.get("managercompany"));
|
|
}
|
|
if (customerData.containsKey("managerdepartment")) {
|
|
managements.setManagerdepartment((String) customerData.get("managerdepartment"));
|
|
}
|
|
if (customerData.containsKey("organization")) {
|
|
managements.setOrganization((String) customerData.get("organization"));
|
|
}
|
|
if (customerData.containsKey("projectName")) {
|
|
managements.setRole((String) customerData.get("projectName"));
|
|
}
|
|
if (customerData.containsKey("userName")) {
|
|
managements.setUserName((String) customerData.get("userName"));
|
|
}
|
|
if (customerData.containsKey("assistant")) {
|
|
managements.setAssistant((String) customerData.get("assistant"));
|
|
}
|
|
managements.setUpdated_at(now);
|
|
int managementsUpdateResult = wechatCustomerMapper.updateUsersManagements(managements);
|
|
System.out.println("DEBUG: 更新负责人信息结果: " + managementsUpdateResult);
|
|
}
|
|
|
|
System.out.println("DEBUG: 更新wechat数据源客户成功");
|
|
return true;
|
|
} catch (Exception e) {
|
|
System.out.println("DEBUG: 更新wechat数据源客户失败,异常信息: " + e.getMessage());
|
|
e.printStackTrace();
|
|
throw new RuntimeException("更新wechat数据源客户失败: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取primary数据源的客户数据
|
|
* @return primary数据源的客户数据列表
|
|
*/
|
|
private List<CustomerData> getPrimaryCustomers() {
|
|
List<CustomerData> primaryCustomers = new ArrayList<>();
|
|
|
|
// 获取所有联系人信息
|
|
List<Contacts> contactsList = customerMapper.getAllContacts();
|
|
|
|
for (Contacts contacts : contactsList) {
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置联系人基本信息
|
|
customerData.setId(contacts.getId()); // 设置客户ID
|
|
customerData.setNickName(contacts.getNickName());
|
|
customerData.setPhoneNumber(contacts.getPhoneNumber());
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
customerData.setFollowup(contacts.getFollowup());
|
|
customerData.setCreated_at(contacts.getCreated_at());
|
|
customerData.setUpdated_at(contacts.getUpdated_at());
|
|
|
|
// 获取并设置企业信息
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId());
|
|
if (enterprise != null) {
|
|
customerData.setCompany(enterprise.getCompany());
|
|
customerData.setRegion(enterprise.getRegion());
|
|
// 明确设置部门公海池的level值,与wechat数据保持一致
|
|
customerData.setLevel("department-sea-pools");
|
|
customerData.setType(enterprise.getType());
|
|
customerData.setDemand(enterprise.getDemand());
|
|
customerData.setSpec(enterprise.getSpec());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
Managers managers = customerMapper.getManagerByContactId(contacts.getId());
|
|
if (managers != null) {
|
|
customerData.setManagercompany(managers.getManagercompany());
|
|
customerData.setManagerdepartment(managers.getManagerdepartment());
|
|
customerData.setOrganization(managers.getOrganization());
|
|
customerData.setProjectName(managers.getRole()); // 使用实际的role字段
|
|
customerData.setRole(managers.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managers.getUserName());
|
|
customerData.setAssistant(managers.getAssistant());
|
|
}
|
|
|
|
// 设置收藏产品信息(primary数据源暂时没有收藏功能)
|
|
customerData.setFavorites(new ArrayList<>());
|
|
|
|
primaryCustomers.add(customerData);
|
|
}
|
|
|
|
return primaryCustomers;
|
|
}
|
|
|
|
/**
|
|
* 获取wechat数据源的客户数据
|
|
* @return wechat数据源的客户数据列表
|
|
*/
|
|
private List<CustomerData> getWechatCustomers() {
|
|
List<CustomerData> wechatCustomers = new ArrayList<>();
|
|
|
|
// 获取所有用户信息
|
|
List<Users> usersList = wechatCustomerMapper.getAllUsers();
|
|
|
|
for (Users user : usersList) {
|
|
// 跳过type为manager的用户
|
|
if ("manager".equals(user.getType())) {
|
|
continue;
|
|
}
|
|
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置用户基本信息
|
|
customerData.setId(user.getUserId()); // 设置客户ID
|
|
customerData.setNickName(user.getNickName());
|
|
customerData.setPhoneNumber(user.getPhoneNumber());
|
|
customerData.setType(user.getType());
|
|
customerData.setCompany(user.getCompany());
|
|
customerData.setRegion(user.getRegion());
|
|
customerData.setLevel(user.getLevel());
|
|
customerData.setDemand(user.getDemand());
|
|
customerData.setSpec(user.getSpec());
|
|
customerData.setFollowup(user.getFollowup());
|
|
customerData.setNotice(user.getNotice());
|
|
customerData.setFollowup_at(user.getFollowup_at());
|
|
customerData.setCreated_at(user.getCreated_at());
|
|
customerData.setUpdated_at(user.getUpdated_at());
|
|
|
|
// 获取并设置联系人信息
|
|
UsersContacts contacts = wechatCustomerMapper.getContactsByUserId(user.getUserId());
|
|
if (contacts != null) {
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(user.getUserId()); // 使用user.getUserId()获取关联字段
|
|
if (managements != null) {
|
|
customerData.setManagercompany(managements.getManagercompany());
|
|
customerData.setManagerdepartment(managements.getManagerdepartment());
|
|
customerData.setOrganization(managements.getOrganization());
|
|
customerData.setProjectName(managements.getRole()); // 使用role字段作为职位信息
|
|
customerData.setRole(managements.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managements.getUserName());
|
|
customerData.setAssistant(managements.getAssistant());
|
|
}
|
|
|
|
// 获取并设置收藏产品信息
|
|
customerData.setFavorites(getProductFavorites(user.getPhoneNumber()));
|
|
|
|
wechatCustomers.add(customerData);
|
|
}
|
|
|
|
return wechatCustomers;
|
|
}
|
|
|
|
/**
|
|
* 比较两个对象是否相等,处理null情况
|
|
* @param obj1 第一个对象
|
|
* @param obj2 第二个对象
|
|
* @return 是否相等
|
|
*/
|
|
private boolean equals(Object obj1, Object obj2) {
|
|
if (obj1 == null && obj2 == null) {
|
|
return true;
|
|
}
|
|
if (obj1 == null || obj2 == null) {
|
|
return false;
|
|
}
|
|
return obj1.equals(obj2);
|
|
}
|
|
|
|
/**
|
|
* URL解码工具方法
|
|
* @param encodedStr URL编码的字符串
|
|
* @return 解码后的字符串
|
|
*/
|
|
private String urlDecode(String encodedStr) {
|
|
if (encodedStr == null) {
|
|
return null;
|
|
}
|
|
try {
|
|
return URLDecoder.decode(encodedStr, StandardCharsets.UTF_8.name());
|
|
} catch (Exception e) {
|
|
// 如果解码失败,返回原始字符串
|
|
return encodedStr;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取用户收藏的产品信息
|
|
* @param userPhone 用户手机号
|
|
* @return 产品收藏列表
|
|
*/
|
|
private List<CustomerData.ProductFavorite> getProductFavorites(String userPhone) {
|
|
List<CustomerData.ProductFavorite> productFavorites = new ArrayList<>();
|
|
|
|
// 获取收藏的产品ID列表
|
|
List<Favorites> favoritesList = wechatCustomerMapper.getFavoritesByUserPhone(userPhone);
|
|
|
|
for (Favorites favorite : favoritesList) {
|
|
// 获取产品信息
|
|
Products product = wechatCustomerMapper.getProductById(favorite.getProductId());
|
|
if (product != null) {
|
|
CustomerData.ProductFavorite productFavorite = new CustomerData.ProductFavorite();
|
|
productFavorite.setProductName(product.getProductName());
|
|
productFavorite.setPrice(product.getPrice());
|
|
productFavorite.setQuantity(String.valueOf(product.getQuantity()));
|
|
productFavorite.setGrossWeight(product.getGrossWeight());
|
|
productFavorite.setYolk(product.getYolk());
|
|
productFavorite.setFavoriteDate(favorite.getDate());
|
|
productFavorites.add(productFavorite);
|
|
}
|
|
}
|
|
|
|
return productFavorites;
|
|
}
|
|
|
|
/**
|
|
* 获取primary数据源的部门公海池数据
|
|
* @param login 用户登录信息
|
|
* @return primary数据源的部门公海池数据
|
|
*/
|
|
private List<CustomerData> getPrimaryDepartmentSeaPool(String role, Login login) {
|
|
List<CustomerData> departmentSeaPool = new ArrayList<>();
|
|
|
|
// 获取部门公海池的联系人信息
|
|
List<Contacts> contactsList = customerMapper.getDepartmentSeaPoolContacts(
|
|
role, login.getManagercompany(), login.getManagerdepartment());
|
|
|
|
for (Contacts contacts : contactsList) {
|
|
CustomerData customerData = new CustomerData();
|
|
// 设置联系人基本信息
|
|
customerData.setId(contacts.getId()); // 设置客户ID
|
|
customerData.setNickName(contacts.getNickName());
|
|
customerData.setPhoneNumber(contacts.getPhoneNumber());
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
customerData.setFollowup(contacts.getFollowup());
|
|
customerData.setCreated_at(contacts.getCreated_at());
|
|
customerData.setUpdated_at(contacts.getUpdated_at());
|
|
|
|
// 获取并设置企业信息
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId());
|
|
if (enterprise != null) {
|
|
customerData.setCompany(enterprise.getCompany());
|
|
customerData.setRegion(enterprise.getRegion());
|
|
// 统一设置部门公海池的level值
|
|
customerData.setLevel("department-sea-pools");
|
|
customerData.setType(enterprise.getType());
|
|
customerData.setDemand(enterprise.getDemand());
|
|
customerData.setSpec(enterprise.getSpec());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
Managers managers = customerMapper.getManagerByContactId(contacts.getId());
|
|
if (managers != null) {
|
|
customerData.setManagercompany(managers.getManagercompany());
|
|
customerData.setManagerdepartment(managers.getManagerdepartment());
|
|
customerData.setOrganization(managers.getOrganization());
|
|
customerData.setProjectName(managers.getRole()); // 使用实际的role字段
|
|
customerData.setRole(managers.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managers.getUserName());
|
|
customerData.setAssistant(managers.getAssistant());
|
|
} else {
|
|
// 如果没有负责人信息,使用登录用户的公司和部门信息
|
|
customerData.setManagercompany(login.getManagercompany());
|
|
customerData.setManagerdepartment(login.getManagerdepartment());
|
|
customerData.setOrganization("无");
|
|
customerData.setProjectName("无");
|
|
customerData.setRole("无");
|
|
customerData.setUserName("无");
|
|
customerData.setAssistant("无");
|
|
}
|
|
|
|
// 设置收藏产品信息
|
|
customerData.setFavorites(new ArrayList<>());
|
|
|
|
departmentSeaPool.add(customerData);
|
|
}
|
|
|
|
return departmentSeaPool;
|
|
}
|
|
|
|
/**
|
|
* 获取wechat数据源的部门公海池数据
|
|
* @param login 用户登录信息
|
|
* @return wechat数据源的部门公海池数据
|
|
*/
|
|
private List<CustomerData> getWechatDepartmentSeaPool(String role, Login login) {
|
|
List<CustomerData> departmentSeaPool = new ArrayList<>();
|
|
|
|
// 添加日志输出
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool - role: " + role);
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool - managercompany: " + login.getManagercompany());
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool - managerdepartment: " + login.getManagerdepartment());
|
|
|
|
// 获取部门公海池的用户信息
|
|
List<Users> usersList = wechatCustomerMapper.getDepartmentSeaPoolUsers(
|
|
role, login.getManagercompany(), login.getManagerdepartment());
|
|
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool - usersList size: " + (usersList != null ? usersList.size() : 0));
|
|
System.out.println("DEBUG: getWechatDepartmentSeaPool - usersList: " + usersList);
|
|
|
|
for (Users user : usersList) {
|
|
// 跳过type为manager的用户
|
|
if ("manager".equals(user.getType())) {
|
|
continue;
|
|
}
|
|
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置用户基本信息
|
|
customerData.setId(user.getUserId()); // 设置客户ID
|
|
customerData.setNickName(user.getNickName());
|
|
customerData.setPhoneNumber(user.getPhoneNumber());
|
|
customerData.setType(user.getType());
|
|
customerData.setCompany(user.getCompany());
|
|
customerData.setRegion(user.getRegion());
|
|
// 明确设置部门公海池的level值
|
|
customerData.setLevel("department-sea-pools");
|
|
customerData.setDemand(user.getDemand());
|
|
customerData.setFollowup(user.getFollowup());
|
|
customerData.setNotice(user.getNotice());
|
|
customerData.setFollowup_at(user.getFollowup_at());
|
|
customerData.setCreated_at(user.getCreated_at());
|
|
customerData.setUpdated_at(user.getUpdated_at());
|
|
|
|
// 获取并设置联系人信息
|
|
UsersContacts contacts = wechatCustomerMapper.getContactsByUserId(user.getUserId());
|
|
if (contacts != null) {
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(user.getUserId()); // 使用user.getUserId()获取关联字段
|
|
if (managements != null) {
|
|
customerData.setManagercompany(managements.getManagercompany());
|
|
customerData.setManagerdepartment(managements.getManagerdepartment());
|
|
customerData.setOrganization(managements.getOrganization());
|
|
customerData.setProjectName(managements.getRole()); // 使用role字段作为职位信息
|
|
customerData.setRole(managements.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managements.getUserName());
|
|
customerData.setAssistant(managements.getAssistant());
|
|
} else {
|
|
// 如果没有负责人信息,使用登录用户的公司和部门信息
|
|
customerData.setManagercompany(login.getManagercompany());
|
|
customerData.setManagerdepartment(login.getManagerdepartment());
|
|
customerData.setOrganization("无");
|
|
customerData.setProjectName("无");
|
|
customerData.setRole("无");
|
|
customerData.setUserName("无");
|
|
customerData.setAssistant("无");
|
|
}
|
|
|
|
// 获取并设置收藏产品信息
|
|
customerData.setFavorites(getProductFavorites(user.getPhoneNumber()));
|
|
|
|
departmentSeaPool.add(customerData);
|
|
}
|
|
|
|
return departmentSeaPool;
|
|
}
|
|
|
|
/**
|
|
* 获取primary数据源的组织公海池数据
|
|
* @param login 用户登录信息
|
|
* @return primary数据源的组织公海池数据
|
|
*/
|
|
private List<CustomerData> getPrimaryOrganizationSeaPool(String role, Login login) {
|
|
List<CustomerData> organizationSeaPool = new ArrayList<>();
|
|
|
|
// 获取组织公海池的联系人信息
|
|
List<Contacts> contactsList = customerMapper.getOrganizationSeaPoolContacts(
|
|
role, login.getManagercompany(), login.getManagerdepartment(), login.getOrganization());
|
|
|
|
for (Contacts contacts : contactsList) {
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置联系人基本信息
|
|
customerData.setId(contacts.getId()); // 设置客户ID
|
|
customerData.setNickName(contacts.getNickName());
|
|
customerData.setPhoneNumber(contacts.getPhoneNumber());
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
customerData.setFollowup(contacts.getFollowup());
|
|
customerData.setCreated_at(contacts.getCreated_at());
|
|
customerData.setUpdated_at(contacts.getUpdated_at());
|
|
|
|
// 获取并设置企业信息
|
|
Enterprise enterprise = customerMapper.getEnterpriseByContactId(contacts.getId());
|
|
if (enterprise != null) {
|
|
customerData.setCompany(enterprise.getCompany());
|
|
customerData.setRegion(enterprise.getRegion());
|
|
// 统一设置组织公海池的level值
|
|
customerData.setLevel("organization-sea-pools");
|
|
customerData.setType(enterprise.getType());
|
|
customerData.setDemand(enterprise.getDemand());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
Managers managers = customerMapper.getManagerByContactId(contacts.getId());
|
|
if (managers != null) {
|
|
customerData.setManagercompany(managers.getManagercompany());
|
|
customerData.setManagerdepartment(managers.getManagerdepartment());
|
|
customerData.setOrganization(managers.getOrganization());
|
|
customerData.setProjectName(managers.getRole()); // 使用实际的role字段
|
|
customerData.setRole(managers.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managers.getUserName());
|
|
customerData.setAssistant(managers.getAssistant());
|
|
} else {
|
|
// 如果没有负责人信息,使用登录用户的公司、部门和组织信息
|
|
customerData.setManagercompany(login.getManagercompany());
|
|
customerData.setManagerdepartment(login.getManagerdepartment());
|
|
customerData.setOrganization(login.getOrganization());
|
|
customerData.setProjectName("无");
|
|
customerData.setRole("无");
|
|
customerData.setUserName("无");
|
|
customerData.setAssistant("无");
|
|
}
|
|
|
|
// 设置收藏产品信息
|
|
customerData.setFavorites(new ArrayList<>());
|
|
|
|
organizationSeaPool.add(customerData);
|
|
}
|
|
|
|
return organizationSeaPool;
|
|
}
|
|
|
|
/**
|
|
* 获取wechat数据源的组织公海池数据
|
|
* @param login 用户登录信息
|
|
* @return wechat数据源的组织公海池数据
|
|
*/
|
|
private List<CustomerData> getWechatOrganizationSeaPool(String role, Login login) {
|
|
List<CustomerData> organizationSeaPool = new ArrayList<>();
|
|
|
|
// 添加日志输出
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - role: " + role);
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - managercompany: " + login.getManagercompany());
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - managerdepartment: " + login.getManagerdepartment());
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - organization: " + login.getOrganization());
|
|
|
|
// 获取组织公海池的用户信息
|
|
List<Users> usersList = wechatCustomerMapper.getOrganizationSeaPoolUsers(
|
|
role, login.getManagercompany(), login.getManagerdepartment(), login.getOrganization());
|
|
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - usersList size: " + (usersList != null ? usersList.size() : 0));
|
|
System.out.println("DEBUG: getWechatOrganizationSeaPool - usersList: " + usersList);
|
|
|
|
for (Users user : usersList) {
|
|
// 跳过type为manager的用户
|
|
if ("manager".equals(user.getType())) {
|
|
continue;
|
|
}
|
|
|
|
CustomerData customerData = new CustomerData();
|
|
|
|
// 设置用户基本信息
|
|
customerData.setId(user.getUserId()); // 设置客户ID
|
|
customerData.setNickName(user.getNickName());
|
|
customerData.setPhoneNumber(user.getPhoneNumber());
|
|
customerData.setType(user.getType());
|
|
customerData.setCompany(user.getCompany());
|
|
customerData.setRegion(user.getRegion());
|
|
// 明确设置组织公海池的level值
|
|
customerData.setLevel("organization-sea-pools");
|
|
customerData.setDemand(user.getDemand());
|
|
customerData.setFollowup(user.getFollowup());
|
|
customerData.setNotice(user.getNotice());
|
|
customerData.setFollowup_at(user.getFollowup_at());
|
|
customerData.setCreated_at(user.getCreated_at());
|
|
customerData.setUpdated_at(user.getUpdated_at());
|
|
|
|
// 获取并设置联系人信息
|
|
UsersContacts contacts = wechatCustomerMapper.getContactsByUserId(user.getUserId());
|
|
if (contacts == null) {
|
|
// 如果通过userId没有找到联系人信息,尝试通过电话号码获取
|
|
contacts = wechatCustomerMapper.getContactsByPhoneNumber(user.getPhoneNumber());
|
|
}
|
|
if (contacts != null) {
|
|
customerData.setWechat(contacts.getWechat());
|
|
customerData.setAccount(contacts.getAccount());
|
|
customerData.setAccountNumber(contacts.getAccountNumber());
|
|
customerData.setBank(contacts.getBank());
|
|
customerData.setAddress(contacts.getAddress());
|
|
}
|
|
|
|
// 获取并设置负责人信息
|
|
UsersManagements managements = wechatCustomerMapper.getManagementsByUserId(user.getUserId());
|
|
if (managements != null) {
|
|
customerData.setManagercompany(managements.getManagercompany());
|
|
customerData.setManagerdepartment(managements.getManagerdepartment());
|
|
customerData.setOrganization(managements.getOrganization());
|
|
customerData.setProjectName(managements.getRole()); // 使用role字段作为职位信息
|
|
customerData.setRole(managements.getRole()); // 同时设置role字段
|
|
customerData.setUserName(managements.getUserName());
|
|
customerData.setAssistant(managements.getAssistant());
|
|
} else {
|
|
// 如果没有负责人信息,使用登录用户的公司、部门和组织信息
|
|
customerData.setManagercompany(login.getManagercompany());
|
|
customerData.setManagerdepartment(login.getManagerdepartment());
|
|
customerData.setOrganization(login.getOrganization());
|
|
customerData.setProjectName("无");
|
|
customerData.setRole("无");
|
|
customerData.setUserName("无");
|
|
customerData.setAssistant("无");
|
|
}
|
|
|
|
// 获取并设置收藏产品信息
|
|
customerData.setFavorites(getProductFavorites(user.getPhoneNumber()));
|
|
|
|
organizationSeaPool.add(customerData);
|
|
}
|
|
|
|
return organizationSeaPool;
|
|
}
|
|
}
|