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 getAllCustomers() { List allCustomers = new ArrayList<>(); // 获取primary数据源的客户数据 List primaryCustomers = getPrimaryCustomers(); System.out.println("DEBUG: getPrimaryCustomers returned: " + primaryCustomers.size() + " records"); allCustomers.addAll(primaryCustomers); // 获取wechat数据源的客户数据 List 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 getDepartmentSeaPool(String role, Login login) { // 移除重复解码,前端已解码 System.out.println("DEBUG: getDepartmentSeaPool called with role: " + role + ", login: " + login); List departmentSeaPool = new ArrayList<>(); // 获取primary数据源的部门公海池数据 List primaryData = getPrimaryDepartmentSeaPool(role, login); System.out.println("DEBUG: getPrimaryDepartmentSeaPool returned: " + primaryData.size() + " records"); departmentSeaPool.addAll(primaryData); // 获取wechat数据源的部门公海池数据 List 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 getOrganizationSeaPool(String role, Login login) { // 移除重复解码,前端已解码 System.out.println("DEBUG: getOrganizationSeaPool called with role: " + role + ", login: " + login); List organizationSeaPool = new ArrayList<>(); // 获取primary数据源的组织公海池数据 List primaryData = getPrimaryOrganizationSeaPool(role, login); System.out.println("DEBUG: getPrimaryOrganizationSeaPool returned: " + primaryData.size() + " records"); organizationSeaPool.addAll(primaryData); // 获取wechat数据源的组织公海池数据 List 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 getCustomersByRole(String role, Login login) { List 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 primaryData = getPrimaryCustomersByRole(role, login); System.out.println("DEBUG: getPrimaryCustomersByRole returned: " + primaryData.size() + " records"); filteredCustomers.addAll(primaryData); // 获取wechat数据源的角色数据 List 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 getPrimaryCustomersByRole(String role, Login login) { List roleCustomers = new ArrayList<>(); // 直接从数据库获取符合条件的联系人信息 List 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 getWechatCustomersByRole(String role, Login login) { List roleCustomers = new ArrayList<>(); // 直接从数据库获取符合条件的用户信息 List 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 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 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 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 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 getPrimaryCustomers() { List primaryCustomers = new ArrayList<>(); // 获取所有联系人信息 List 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 getWechatCustomers() { List wechatCustomers = new ArrayList<>(); // 获取所有用户信息 List 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 getProductFavorites(String userPhone) { List productFavorites = new ArrayList<>(); // 获取收藏的产品ID列表 List 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 getPrimaryDepartmentSeaPool(String role, Login login) { List departmentSeaPool = new ArrayList<>(); // 获取部门公海池的联系人信息 List 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 getWechatDepartmentSeaPool(String role, Login login) { List 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 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 getPrimaryOrganizationSeaPool(String role, Login login) { List organizationSeaPool = new ArrayList<>(); // 获取组织公海池的联系人信息 List 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 getWechatOrganizationSeaPool(String role, Login login) { List 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 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; } }