package com.example.web.service; import com.example.web.dto.ManagerAuthInfo; import com.example.web.dto.UserProductCartDTO; import com.example.web.entity.UsersManagements; import com.example.web.mapper.SupplyUsersManagementsMapper; import com.example.web.mapper.SupplyUsersMapper; import com.example.web.mapper.UsersManagementsMapper; import com.example.web.mapper.UsersMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; @Service public class SupplyPoolCustomerService { @Autowired private SupplyUsersMapper supplyusersMapper; @Autowired private SupplyUsersManagementsMapper supplyUsersManagementsMapper; /** * 根据手机号查询微信用户信息(采购端权限:只处理seller和both类型)- 支持一对多 */ public UserProductCartDTO getWechatCustomerByPhone(String phoneNumber) { if (!StringUtils.hasText(phoneNumber)) { throw new IllegalArgumentException("手机号不能为空"); } // 1. 根据手机号查询微信用户基本信息 UserProductCartDTO userInfo = supplyusersMapper.selectByPhone(phoneNumber); if (userInfo == null) { throw new RuntimeException("未找到手机号对应的微信用户:" + phoneNumber); } System.out.println("🔍 获取到用户基础信息,用户ID: " + userInfo.getUserId() + ", 类型: " + userInfo.getType() + ", 公司: " + userInfo.getCompany() + ", 需求: " + userInfo.getDemand() + ", 规格: " + userInfo.getSpec()); // 采购端权限校验:只处理seller和both类型 if (!"seller".equals(userInfo.getType()) && !"both".equals(userInfo.getType())) { System.out.println("❌ 权限校验失败: 采购端只能处理供应端和BOTH类型客户"); throw new IllegalArgumentException("采购端权限只能处理供应端和BOTH类型客户"); } // 2. 获取所有联系人信息(一对多) try { List contacts = supplyusersMapper.getUserAllContacts(userInfo.getUserId()); // 转换为UserProductCartDTO.UsersContacts格式以保持兼容 if (contacts != null && !contacts.isEmpty()) { List userContacts = contacts.stream() .map(contact -> { UserProductCartDTO.UsersContacts userContact = new UserProductCartDTO.UsersContacts( contact.getWechat(), contact.getAccount(), contact.getAccountNumber(), contact.getBank(), contact.getAddress() ); // 设置contactId userContact.setContactId(contact.getContactId()); return userContact; }) .collect(Collectors.toList()); userInfo.setUsersContacts(userContacts); } else { userInfo.setUsersContacts(Collections.emptyList()); } System.out.println("✅ 获取用户所有联系人信息,数量: " + (userInfo.getUsersContacts() != null ? userInfo.getUsersContacts().size() : 0)); } catch (Exception e) { System.err.println("❌ 获取用户联系人信息失败: " + e.getMessage()); userInfo.setUsersContacts(Collections.emptyList()); } // 3. 采购端:获取所有产品项信息(一对多)- 公海需求 if ("seller".equals(userInfo.getType()) || "both".equals(userInfo.getType())) { try { List products = supplyusersMapper.getUserAllProducts(userInfo.getUserId()); // 转换为UserProductCartDTO.ProductInfo格式以保持兼容 if (products != null && !products.isEmpty()) { List userProducts = products.stream() .map(item -> { UserProductCartDTO.ProductInfo product = new UserProductCartDTO.ProductInfo(); product.setProductId(item.getProductId()); product.setProductName(item.getProductName()); product.setVariety(item.getVariety()); product.setSpecification(item.getSpecification()); product.setQuantity(item.getQuantity()); product.setGrossWeight(item.getGrossWeight()); product.setYolk(item.getYolk()); return product; }) .collect(Collectors.toList()); userInfo.setProducts(userProducts); } else { userInfo.setProducts(Collections.emptyList()); } System.out.println("✅ 获取用户所有产品项信息,数量: " + (userInfo.getProducts() != null ? userInfo.getProducts().size() : 0)); } catch (Exception e) { System.err.println("❌ 获取产品信息失败: " + e.getMessage()); userInfo.setProducts(Collections.emptyList()); } userInfo.setCartItems(Collections.emptyList()); // 采购端不使用购物车信息 } return userInfo; } /** * 根据用户ID获取用户信息和相关产品数据(采购端版本) */ public UserProductCartDTO getCustomerInfo(String userId) { if (!StringUtils.hasText(userId)) { throw new IllegalArgumentException("用户ID不能为空"); } // 1. 获取用户基本信息 UserProductCartDTO userInfo = supplyusersMapper.getUserBasicInfo(userId); if (userInfo == null) { throw new RuntimeException("用户不存在: " + userId); } // 采购端权限校验 if (!"seller".equals(userInfo.getType()) && !"both".equals(userInfo.getType())) { throw new IllegalArgumentException("采购端权限只能查看供应端和BOTH类型客户"); } // 2. 采购端:查询产品信息(公海需求) List products = supplyusersMapper.getSellerProducts(userId); userInfo.setProducts(products != null ? products : Collections.emptyList()); userInfo.setCartItems(Collections.emptyList()); // 采购端不使用购物车 // 3. 获取联系人信息 - 安全处理 try { List contacts = supplyusersMapper.getUserContacts(userId); userInfo.setUsersContacts(contacts != null ? contacts : Collections.emptyList()); } catch (Exception e) { System.err.println("❌ 获取用户联系人信息失败: " + e.getMessage()); userInfo.setUsersContacts(Collections.emptyList()); } return userInfo; } /** * 获取所有客户信息 - 使用数据库层面权限过滤(采购端版本)- 优化版(支持分页) */ public List getAllCustomers(ManagerAuthInfo authInfo) { try { System.out.println("===================================================="); System.out.println("🚀 开始获取所有微信用户数据(数据库权限过滤,采购端)..."); System.out.println("🔐 负责人过滤条件: " + "公司=" + authInfo.getManagercompany() + ", 部门=" + authInfo.getManagerdepartment()); // 移除固定的分页限制,获取所有数据 int limit = Integer.MAX_VALUE; // 获取所有数据 int offset = 0; // 从第一条开始 // 1. 获取授权客户总数 System.out.println("📊 查询授权客户总数..."); int totalCount = supplyusersMapper.getAuthorizedCustomersCount(authInfo); System.out.println("✅ 授权客户总数: " + totalCount); // 2. 使用数据库层面权限过滤并分页 System.out.println("📋 查询授权客户基础信息(分页查询)..."); List authorizedUsers = supplyusersMapper.getAuthorizedCustomers(authInfo, limit, offset); System.out.println("✅ 授权客户数据查询完成"); System.out.println("📊 当前页获取到授权客户数据条数: " + (authorizedUsers != null ? authorizedUsers.size() : "null")); // 统计通知状态为banold的授权客户数量 if (authorizedUsers != null) { long banoldCount = authorizedUsers.stream().filter(user -> "banold".equals(user.getNotice())).count(); System.out.println("📊 通知状态为banold的授权客户数量: " + banoldCount); } List result = new ArrayList<>(); if (authorizedUsers != null && !authorizedUsers.isEmpty()) { // 🔥 新增:收集所有用户ID用于批量查询 List userIds = authorizedUsers.stream() .map(UserProductCartDTO::getUserId) .filter(Objects::nonNull) .filter(userId -> !userId.trim().isEmpty()) .distinct() .collect(Collectors.toList()); System.out.println("🔍 需要批量查询的授权用户数量: " + userIds.size()); // 🔥 新增:批量查询所有相关数据 Map managerMap = batchQueryManagers(userIds); Map> contactsMap = batchQueryContacts(userIds); Map> productsMap = batchQueryProducts(userIds); // 2. 为每个授权用户构建完整信息(使用批量数据) System.out.println("🔄 开始处理 " + authorizedUsers.size() + " 条授权用户数据..."); for (int i = 0; i < authorizedUsers.size(); i++) { UserProductCartDTO user = authorizedUsers.get(i); try { // 🎯 关键修改:使用批量查询的数据构建完整用户信息 UserProductCartDTO fullUserInfo = buildSupplyUserInfoFromBatchData(user, managerMap, contactsMap, productsMap); if (fullUserInfo != null) { // 数据库已经过滤了权限,这里直接添加 result.add(fullUserInfo); // 打印前几个客户的详细信息 if (i < 3) { System.out.println("📝 授权客户样例 " + (i + 1) + ": " + "ID=" + fullUserInfo.getUserId() + ", 手机=" + fullUserInfo.getPhoneNumber() + ", 公司=" + fullUserInfo.getCompany() + ", 类型=" + fullUserInfo.getType() + ", 联系人数量=" + (fullUserInfo.getUsersContacts() != null ? fullUserInfo.getUsersContacts().size() : 0) + ", 产品数量=" + (fullUserInfo.getProducts() != null ? fullUserInfo.getProducts().size() : 0) + ", 是否公海池=" + isPublicSeaCustomer(fullUserInfo, authInfo)); } } } catch (Exception e) { System.err.println("❌ 构建用户 " + user.getUserId() + " 的详细信息时出错: " + e.getMessage()); } } } System.out.println("===================================================="); System.out.println("🎉 数据获取完成(数据库权限过滤,采购端)"); System.out.println("📊 返回记录数: " + result.size()); System.out.println("===================================================="); return result; } catch (Exception e) { System.err.println("❌ 获取授权客户信息失败: " + e.getMessage()); e.printStackTrace(); return new ArrayList<>(); } } /** * 检查是否有权限查看客户 */ private boolean hasPermissionToViewCustomer(UserProductCartDTO userInfo, ManagerAuthInfo authInfo) { // 公海池客户使用特殊权限检查 if (isPublicSeaCustomer(userInfo, authInfo)) { return true; } // 非公海池客户需要检查负责人权限 return hasUserManagerPermission(userInfo.getUserId(), authInfo); } /** * 判断是否为公海池客户 - 根据不同类型使用不同逻辑 */ private boolean isPublicSeaCustomer(UserProductCartDTO userInfo, ManagerAuthInfo authInfo) { // 定义公海池等级 Set publicSeaLevels = Set.of("company-sea-pools", "organization-sea-pools", "department-sea-pools", "公海池"); // 检查等级是否为公海池 boolean isPublicSeaLevel = publicSeaLevels.contains(userInfo.getLevel()); System.out.println("🔍 客户等级检查: " + userInfo.getLevel() + " → 是否公海池等级: " + isPublicSeaLevel); if (!isPublicSeaLevel) { return false; } // 根据不同类型的公海池使用不同判断逻辑 String level = userInfo.getLevel(); if ("company-sea-pools".equals(level) || "公海池".equals(level)) { // 公司公海池:必须没有负责人信息 boolean result = !hasManagerAuthInfo(userInfo.getUserId()); System.out.println("🏢 公司公海池检查结果: " + result); return result; } else if ("organization-sea-pools".equals(level)) { // 组织公海池:必须有负责人信息且组织匹配 boolean hasManager = hasManagerAuthInfo(userInfo.getUserId()); if (!hasManager) { System.out.println("🏢 组织公海池:无负责人信息,不允许查看"); return false; } boolean sameOrganization = hasSameOrganization(userInfo.getUserId(), authInfo); System.out.println("🏢 组织公海池检查结果 - 有负责人: " + hasManager + ", 组织匹配: " + sameOrganization + " → 结果: " + sameOrganization); return sameOrganization; } else if ("department-sea-pools".equals(level)) { // 部门公海池:必须有负责人信息且部门匹配 boolean hasManager = hasManagerAuthInfo(userInfo.getUserId()); if (!hasManager) { System.out.println("🏢 部门公海池:无负责人信息,不允许查看"); return false; } boolean sameDepartment = hasSameDepartment(userInfo.getUserId(), authInfo); System.out.println("🏢 部门公海池检查结果 - 有负责人: " + hasManager + ", 部门匹配: " + sameDepartment + " → 结果: " + sameDepartment); return sameDepartment; } return false; } /** * 公共方法:判断是否为公海池客户(供Controller调用) */ public boolean isPublicSeaCustomerPublic(UserProductCartDTO userInfo, ManagerAuthInfo authInfo) { return isPublicSeaCustomer(userInfo, authInfo); } /** * 检查是否有负责人认证信息 */ private boolean hasManagerAuthInfo(String userId) { try { UsersManagements userManager = supplyUsersManagementsMapper.findByUserId(userId); if (userManager == null) { return false; } // 检查认证字段是否为空 - 只要有一个认证字段有值,就有负责人信息 boolean hasAuthInfo = StringUtils.hasText(userManager.getManagerId()) || StringUtils.hasText(userManager.getManagercompany()) || StringUtils.hasText(userManager.getManagerdepartment()) || StringUtils.hasText(userManager.getOrganization()) || StringUtils.hasText(userManager.getRole()) || StringUtils.hasText(userManager.getUserName()) || StringUtils.hasText(userManager.getAssistant()); System.out.println("📋 负责人认证信息检查结果: " + (hasAuthInfo ? "有认证信息" : "无认证信息")); return hasAuthInfo; } catch (Exception e) { System.err.println("❌ 检查负责人认证信息失败: " + e.getMessage()); return false; } } /** * 检查是否同一组织 */ private boolean hasSameOrganization(String userId, ManagerAuthInfo authInfo) { try { UsersManagements userManager = supplyUsersManagementsMapper.findByUserId(userId); if (userManager == null) { return false; } boolean sameOrganization = StringUtils.hasText(userManager.getOrganization()) && userManager.getOrganization().equals(authInfo.getOrganization()); System.out.println("🏢 组织匹配检查: " + userManager.getOrganization() + " vs " + authInfo.getOrganization() + " → " + sameOrganization); return sameOrganization; } catch (Exception e) { System.err.println("❌ 检查组织信息失败: " + e.getMessage()); return false; } } /** * 检查是否同一部门 */ private boolean hasSameDepartment(String userId, ManagerAuthInfo authInfo) { try { UsersManagements userManager = supplyUsersManagementsMapper.findByUserId(userId); if (userManager == null) { return false; } boolean sameDepartment = StringUtils.hasText(userManager.getManagerdepartment()) && userManager.getManagerdepartment().equals(authInfo.getManagerdepartment()); System.out.println("🏢 部门匹配检查: " + userManager.getManagerdepartment() + " vs " + authInfo.getManagerdepartment() + " → " + sameDepartment); return sameDepartment; } catch (Exception e) { System.err.println("❌ 检查部门信息失败: " + e.getMessage()); return false; } } /** * 检查用户负责人权限 - 优化版本,数据库层面直接匹配 */ private boolean hasUserManagerPermission(String userId, ManagerAuthInfo authInfo) { try { System.out.println("🔐 检查用户负责人权限,用户ID: " + userId); // 🔥 优化:直接在数据库层面查询匹配的负责人记录,避免内存比较 UsersManagements userManager = supplyUsersManagementsMapper.findByUserIdAndAuthInfo(userId, authInfo); // 🔥 优化:如果没有找到匹配的负责人记录,检查是否为公海池客户 if (userManager == null) { System.out.println("🔍 未找到匹配的负责人记录,检查客户等级..."); // 获取用户信息检查等级 UserProductCartDTO userInfo = supplyusersMapper.getUserBasicInfo(userId); if (userInfo != null) { // 定义公海池等级 Set publicSeaLevels = Set.of("company-sea-pools", "organization-sea-pools", "department-sea-pools", "公海池"); boolean isPublicSea = publicSeaLevels.contains(userInfo.getLevel()); if (isPublicSea) { System.out.println("✅ 公海池客户,允许查看"); return true; } } System.out.println("❌ 非公海池客户且无匹配负责人,拒绝访问"); return false; } // 🔥 优化:数据库已经完成匹配,直接返回true System.out.println("✅ 找到匹配的负责人记录,允许查看"); System.out.println("📝 负责人信息: " + "公司=" + userManager.getManagercompany() + ", 部门=" + userManager.getManagerdepartment() + ", 组织=" + userManager.getOrganization() + ", 负责人=" + userManager.getUserName()); return true; } catch (Exception e) { System.err.println("❌ 检查用户负责人权限失败: " + e.getMessage()); // 发生异常时,出于安全考虑返回false return false; } } /** * 检查负责人信息是否匹配(UsersManagements) */ private boolean isManagerMatch(UsersManagements userManager, ManagerAuthInfo authInfo) { boolean match = (authInfo.getManagerId() == null || authInfo.getManagerId().equals(userManager.getManagerId())) && (authInfo.getManagercompany() == null || authInfo.getManagercompany().equals(userManager.getManagercompany())) && (authInfo.getManagerdepartment() == null || authInfo.getManagerdepartment().equals(userManager.getManagerdepartment())) && (authInfo.getOrganization() == null || authInfo.getOrganization().equals(userManager.getOrganization())) && (authInfo.getRole() == null || authInfo.getRole().equals(userManager.getRole())) && (authInfo.getUserName() == null || authInfo.getUserName().equals(userManager.getUserName())); System.out.println("🔐 用户负责人权限检查: " + (match ? "✅ 匹配" : "❌ 不匹配")); return match; } /** * 获取公海池客户完整信息 - 支持一对多(采购端版本) */ public UserProductCartDTO getPublicSeaCustomerInfo(String userId) { if (!StringUtils.hasText(userId)) { System.out.println("⚠️ 用户ID为空"); return null; } // 1. 获取用户基本信息 UserProductCartDTO userInfo = supplyusersMapper.getUserBasicInfo(userId); if (userInfo == null) { System.out.println("⚠️ 用户不存在: " + userId); return null; // 返回null而不是抛出异常 } // 采购端权限校验 if (!"seller".equals(userInfo.getType()) && !"both".equals(userInfo.getType())) { System.out.println("🚫 过滤掉非供应端客户: " + userId + " (类型: " + userInfo.getType() + ")"); return null; // 返回null而不是抛出异常 } // 如果通知状态为banold,则更新为old if ("banold".equals(userInfo.getNotice())) { System.out.println("🔄 更新通知状态: " + userId + " 从banold改为old"); supplyusersMapper.updateNotice(userId, "old"); userInfo.setNotice("old"); } // 🔥 新增:查询负责人信息 try { UsersManagements userManager = supplyUsersManagementsMapper.findByUserId(userId); if (userManager != null) { System.out.println("✅ 获取到负责人信息: " + "负责人=" + userManager.getUserName() + ", 组织=" + userManager.getOrganization() + ", 部门=" + userManager.getManagerdepartment()); // 将负责人信息设置到DTO中(需要扩展UserProductCartDTO或使用其他方式) // 这里可以创建一个新的字段来存储负责人信息,或者使用现有的扩展机制 // 暂时记录日志,后续需要DTO支持负责人字段 } else { System.out.println("⚠️ 未找到负责人信息"); } } catch (Exception e) { System.err.println("❌ 获取负责人信息失败: " + e.getMessage()); } // 2. 获取联系人信息 - 一对多 try { List contacts = supplyusersMapper.getUserAllContacts(userId); if (contacts != null && !contacts.isEmpty()) { List userContacts = contacts.stream() .map(contact -> { UserProductCartDTO.UsersContacts userContact = new UserProductCartDTO.UsersContacts( contact.getWechat(), contact.getAccount(), contact.getAccountNumber(), contact.getBank(), contact.getAddress() ); userContact.setContactId(contact.getContactId()); return userContact; }) .collect(Collectors.toList()); userInfo.setUsersContacts(userContacts); } else { userInfo.setUsersContacts(Collections.emptyList()); } } catch (Exception e) { System.err.println("❌ 获取用户联系人信息失败: " + e.getMessage()); userInfo.setUsersContacts(Collections.emptyList()); } // 3. 采购端:获取产品信息(公海需求)- 一对多 try { List products = supplyusersMapper.getUserAllProducts(userId); System.out.println("🔍 查询到的产品数据条数: " + (products != null ? products.size() : 0)); if (products != null && !products.isEmpty()) { List userProducts = products.stream() .map(item -> { UserProductCartDTO.ProductInfo product = new UserProductCartDTO.ProductInfo(); product.setProductId(item.getProductId()); product.setProductName(item.getProductName()); product.setVariety(item.getVariety()); product.setSpecification(item.getSpecification()); product.setQuantity(item.getQuantity()); product.setGrossWeight(item.getGrossWeight()); product.setYolk(item.getYolk()); // 调试日志 System.out.println("📦 转换产品项: " + "ID=" + product.getProductId() + ", 产品=" + product.getProductName() + ", 规格=" + product.getSpecification()); return product; }) .collect(Collectors.toList()); userInfo.setProducts(userProducts); System.out.println("✅ 成功设置产品数据,数量: " + userProducts.size()); } else { userInfo.setProducts(Collections.emptyList()); System.out.println("⚠️ 产品数据为空"); } userInfo.setCartItems(Collections.emptyList()); // 采购端不使用购物车信息 } catch (Exception e) { System.err.println("❌ 获取产品信息失败: " + e.getMessage()); e.printStackTrace(); userInfo.setProducts(Collections.emptyList()); userInfo.setCartItems(Collections.emptyList()); } // 最终调试信息 System.out.println("🎯 最终返回的用户数据: " + "products数量=" + (userInfo.getProducts() != null ? userInfo.getProducts().size() : "null") + ", contacts数量=" + (userInfo.getUsersContacts() != null ? userInfo.getUsersContacts().size() : "null")); return userInfo; } /** * 获取所有客户信息 - 不进行负责人过滤,直接返回所有数据(采购端版本 - 优化版) */ public List getAllCustomersWithoutFilter() { try { System.out.println("===================================================="); System.out.println("🚀 开始获取所有微信用户数据(无过滤,采购端)..."); // 1. 获取所有用户的基本信息(采购端:只获取seller和both类型) System.out.println("📋 查询用户基础信息..."); List allUsers = supplyusersMapper.getAllUserBasicInfo(); System.out.println("✅ 基础用户数据查询完成"); System.out.println("📊 获取到基础用户数据条数: " + (allUsers != null ? allUsers.size() : "null")); // 统计通知状态为banold的用户数量 if (allUsers != null) { long banoldCount = allUsers.stream().filter(user -> "banold".equals(user.getNotice())).count(); System.out.println("📊 通知状态为banold的用户数量: " + banoldCount); } List result = new ArrayList<>(); if (allUsers != null && !allUsers.isEmpty()) { // 🔥 修改:收集所有用户ID用于批量查询 List userIds = allUsers.stream() .map(UserProductCartDTO::getUserId) .filter(Objects::nonNull) .filter(userId -> !userId.trim().isEmpty()) .distinct() .collect(Collectors.toList()); System.out.println("🔍 需要批量查询的用户数量: " + userIds.size()); // 🔥 修改:批量查询所有相关数据(采购端需要产品信息) Map managerMap = batchQueryManagers(userIds); Map> contactsMap = batchQueryContacts(userIds); Map> productsMap = batchQueryProducts(userIds); // 采购端需要产品信息 // 2. 为每个用户构建完整信息 System.out.println("🔄 开始处理 " + allUsers.size() + " 条用户数据..."); for (int i = 0; i < allUsers.size(); i++) { UserProductCartDTO user = allUsers.get(i); try { // 采购端权限:只处理seller和both类型 if (!"seller".equals(user.getType()) && !"both".equals(user.getType())) { System.out.println("🚫 过滤掉非供应端客户: " + user.getUserId() + " (类型: " + user.getType() + ")"); continue; } // 🔥 修改:使用批量查询的数据构建完整用户信息(采购端版本) UserProductCartDTO fullUserInfo = buildSupplyUserInfoFromBatchData(user, managerMap, contactsMap, productsMap); if (fullUserInfo != null) { result.add(fullUserInfo); // 打印前几个客户的详细信息 if (i < 3) { System.out.println("📝 采购端客户样例 " + (i + 1) + ": " + "ID=" + fullUserInfo.getUserId() + ", 手机=" + fullUserInfo.getPhoneNumber() + ", 公司=" + fullUserInfo.getCompany() + ", 类型=" + fullUserInfo.getType() + ", 联系人数量=" + (fullUserInfo.getUsersContacts() != null ? fullUserInfo.getUsersContacts().size() : 0) + ", 产品数量=" + (fullUserInfo.getProducts() != null ? fullUserInfo.getProducts().size() : 0)); } } } catch (Exception e) { System.err.println("❌ 构建用户 " + user.getUserId() + " 的详细信息时出错: " + e.getMessage()); } } } System.out.println("===================================================="); System.out.println("🎉 数据获取完成(无过滤,采购端)"); System.out.println("📊 返回记录数: " + result.size()); System.out.println("===================================================="); return result; } catch (Exception e) { System.err.println("❌ 获取所有客户信息失败: " + e.getMessage()); e.printStackTrace(); return new ArrayList<>(); } } /** * 1.批量查询负责人信息(与销售端复用) */ private Map batchQueryManagers(List userIds) { Map managerMap = new HashMap<>(); if (userIds != null && !userIds.isEmpty()) { try { // 🔥 注意:采购端可能需要使用不同的Mapper List allManagers = supplyUsersManagementsMapper.findByUserIds(userIds); for (UsersManagements manager : allManagers) { if (manager.getUserId() != null) { managerMap.put(manager.getUserId(), manager); } } System.out.println("✅ 采购端批量查询负责人信息完成,共获取 " + allManagers.size() + " 条记录"); } catch (Exception e) { System.err.println("❌ 采购端批量查询负责人信息失败: " + e.getMessage()); } } return managerMap; } /** * 2.批量查询联系人信息(与销售端复用) */ private Map> batchQueryContacts(List userIds) { Map> contactsMap = new HashMap<>(); if (userIds != null && !userIds.isEmpty()) { try { // 🔥 注意:采购端需要使用采购端的Mapper List allContacts = supplyusersMapper.getUserContactsByUserIds(userIds); for (UsersMapper.ContactInfo contact : allContacts) { String userId = contact.getUserId(); if (userId != null) { contactsMap.computeIfAbsent(userId, k -> new ArrayList<>()).add(contact); } } System.out.println("✅ 采购端批量查询联系人信息完成,共获取 " + allContacts.size() + " 条记录"); } catch (Exception e) { System.err.println("❌ 采购端批量查询联系人信息失败: " + e.getMessage()); } } return contactsMap; } /** * 3.批量查询产品信息(采购端专用) */ private Map> batchQueryProducts(List userIds) { Map> productsMap = new HashMap<>(); if (userIds != null && !userIds.isEmpty()) { try { List allProducts = supplyusersMapper.getSellerProductsByUserIds(userIds); for (UserProductCartDTO.ProductInfo product : allProducts) { String userId = product.getSellerId(); if (userId != null) { productsMap.computeIfAbsent(userId, k -> new ArrayList<>()).add(product); } } System.out.println("✅ 批量查询产品信息完成,共获取 " + allProducts.size() + " 条记录"); } catch (Exception e) { System.err.println("❌ 批量查询产品信息失败: " + e.getMessage()); } } return productsMap; } /** * 4.从批量查询的数据构建采购端用户完整信息(采购端专用) */ private UserProductCartDTO buildSupplyUserInfoFromBatchData(UserProductCartDTO basicUserInfo, Map managerMap, Map> contactsMap, Map> productsMap) { String userId = basicUserInfo.getUserId(); // 采购端权限校验 if (!"seller".equals(basicUserInfo.getType()) && !"both".equals(basicUserInfo.getType())) { System.out.println("🚫 过滤掉非供应端客户: " + userId + " (类型: " + basicUserInfo.getType() + ")"); return null; } // 设置负责人信息 try { UsersManagements userManager = managerMap.get(userId); if (userManager != null) { System.out.println("✅ 从批量Map中获取到负责人信息: " + "负责人=" + userManager.getUserName() + ", 组织=" + userManager.getOrganization() + ", 部门=" + userManager.getManagerdepartment()); } } catch (Exception e) { System.err.println("❌ 从Map获取负责人信息失败: " + e.getMessage()); } // 设置联系人信息 try { List contacts = contactsMap.get(userId); if (contacts != null && !contacts.isEmpty()) { List userContacts = contacts.stream() .map(contact -> { UserProductCartDTO.UsersContacts userContact = new UserProductCartDTO.UsersContacts( contact.getWechat(), contact.getAccount(), contact.getAccountNumber(), contact.getBank(), contact.getAddress() ); userContact.setContactId(contact.getContactId()); return userContact; }) .collect(Collectors.toList()); basicUserInfo.setUsersContacts(userContacts); } else { basicUserInfo.setUsersContacts(Collections.emptyList()); } } catch (Exception e) { System.err.println("❌ 设置联系人信息失败: " + e.getMessage()); basicUserInfo.setUsersContacts(Collections.emptyList()); } // 设置产品信息(采购端关键) try { List products = productsMap.get(userId); if (products != null && !products.isEmpty()) { basicUserInfo.setProducts(products); } else { basicUserInfo.setProducts(Collections.emptyList()); } basicUserInfo.setCartItems(Collections.emptyList()); // 采购端不使用购物车信息 } catch (Exception e) { System.err.println("❌ 设置产品信息失败: " + e.getMessage()); basicUserInfo.setProducts(Collections.emptyList()); basicUserInfo.setCartItems(Collections.emptyList()); } return basicUserInfo; } /** * 只检查等级是否为公海池等级(不检查负责人信息) */ private boolean isPublicSeaLevel(String level) { // 定义公海池等级 Set publicSeaLevels = Set.of("company-sea-pools", "organization-sea-pools", "department-sea-pools", "公海池"); boolean isPublicSeaLevel = publicSeaLevels.contains(level); System.out.println("🔍 等级检查: " + level + " → 是否公海池等级: " + isPublicSeaLevel); return isPublicSeaLevel; } /** * 采购端:获取客户的产品信息(公海需求) */ public List getCustomerProducts(String phoneNumber) { try { UserProductCartDTO user = supplyusersMapper.selectByPhone(phoneNumber); if (user != null && ("seller".equals(user.getType()) || "both".equals(user.getType()))) { return supplyusersMapper.getSellerProducts(user.getUserId()); } return new ArrayList<>(); } catch (Exception e) { e.printStackTrace(); return new ArrayList<>(); } } }