You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

805 lines
40 KiB

3 months ago
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.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 PoolCustomerService {
@Autowired
private UsersMapper usersMapper;
@Autowired
private UsersManagementsMapper usersManagementsMapper;
/**
* 公共方法判断是否为公海池客户供Controller调用
*/
public boolean isPublicSeaCustomerPublic(UserProductCartDTO userInfo, ManagerAuthInfo authInfo) {
return isPublicSeaCustomer(userInfo, authInfo);
}
/**
* 根据手机号查询微信用户信息销售端权限只处理buyer和both类型- 支持一对多
*/
public UserProductCartDTO getWechatCustomerByPhone(String phoneNumber) {
if (!StringUtils.hasText(phoneNumber)) {
throw new IllegalArgumentException("手机号不能为空");
}
// 1. 根据手机号查询微信用户基本信息
UserProductCartDTO userInfo = usersMapper.selectByPhone(phoneNumber);
if (userInfo == null) {
throw new RuntimeException("未找到手机号对应的微信用户:" + phoneNumber);
}
System.out.println("获取到用户基础信息,用户ID: " + userInfo.getUserId() +
", 类型: " + userInfo.getType() +
", 公司: " + userInfo.getCompany() +
", 需求: " + userInfo.getDemand() +
", 规格: " + userInfo.getSpec());
// 2. 获取所有联系人信息(一对多)
try {
List<UsersMapper.ContactInfo> contacts = usersMapper.getUserAllContacts(userInfo.getUserId());
// 转换为UserProductCartDTO.UsersContacts格式以保持兼容
if (contacts != null && !contacts.isEmpty()) {
List<UserProductCartDTO.UsersContacts> 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 ("buyer".equals(userInfo.getType()) || "both".equals(userInfo.getType())) {
try {
List<UsersMapper.CartItem> cartItems = usersMapper.getUserAllCartItems(userInfo.getUserId());
// 转换为UserProductCartDTO.CartItem格式以保持兼容
if (cartItems != null && !cartItems.isEmpty()) {
List<UserProductCartDTO.CartItem> userCartItems = cartItems.stream()
.map(item -> {
UserProductCartDTO.CartItem cartItem = new UserProductCartDTO.CartItem();
cartItem.setCartItemId(item.getCartItemId());
cartItem.setProductId(item.getProductId());
cartItem.setProductName(item.getProductName());
cartItem.setSpecification(item.getSpecification());
cartItem.setQuantity(item.getQuantity());
cartItem.setGrossWeight(item.getGrossWeight());
cartItem.setYolk(item.getYolk());
return cartItem;
})
.collect(Collectors.toList());
userInfo.setCartItems(userCartItems);
} else {
userInfo.setCartItems(Collections.emptyList());
}
System.out.println("获取用户所有购物车项信息,数量: " + (userInfo.getCartItems() != null ? userInfo.getCartItems().size() : 0));
} catch (Exception e) {
System.err.println("获取购物车信息失败: " + e.getMessage());
userInfo.setCartItems(Collections.emptyList());
}
userInfo.setProducts(Collections.emptyList());
}
return userInfo;
}
/**
* 根据用户ID获取用户信息和相关产品/购物车数据
*/
public UserProductCartDTO getCustomerInfo(String userId) {
if (!StringUtils.hasText(userId)) {
throw new IllegalArgumentException("用户ID不能为空");
}
// 1. 获取用户基本信息
UserProductCartDTO userInfo = usersMapper.getUserBasicInfo(userId);
if (userInfo == null) {
throw new RuntimeException("用户不存在: " + userId);
}
// 2. 根据用户类型查询不同的数据
if ("seller".equals(userInfo.getType())) {
// 卖家:查询产品信息
List<UserProductCartDTO.ProductInfo> products = usersMapper.getSellerProducts(userId);
userInfo.setProducts(products != null ? products : Collections.emptyList());
userInfo.setCartItems(Collections.emptyList());
} else {
// 买家:查询购物车信息
List<UserProductCartDTO.CartItem> cartItems = usersMapper.getBuyerCartItems(userId);
userInfo.setCartItems(cartItems != null ? cartItems : Collections.emptyList());
userInfo.setProducts(Collections.emptyList());
}
// 3. 获取联系人信息 - 安全处理
try {
List<UserProductCartDTO.UsersContacts> contacts = usersMapper.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<UserProductCartDTO> getAllCustomers(ManagerAuthInfo authInfo) {
try {
System.out.println("====================================================");
System.out.println("🚀 开始获取所有微信用户数据(数据库权限过滤,销售端)...");
// 移除固定的分页限制,获取所有数据
// 注意:这里可以根据实际需要调整,或者改为支持传入分页参数的方法
int limit = Integer.MAX_VALUE; // 获取所有数据
int offset = 0; // 从第一条开始
// 1. 获取授权客户总数
System.out.println("📊 查询授权客户总数...");
int totalCount = usersMapper.getAuthorizedCustomersCount(authInfo);
System.out.println("✅ 授权客户总数: " + totalCount);
// 2. 使用数据库层面权限过滤并分页
System.out.println("📋 查询授权客户基础信息(分页查询)...");
List<UserProductCartDTO> authorizedUsers = usersMapper.getAuthorizedCustomers(authInfo, limit, offset);
System.out.println("✅ 授权客户数据查询完成");
System.out.println("📊 当前页获取到授权客户数据条数: " + (authorizedUsers != null ? authorizedUsers.size() : "null"));
List<UserProductCartDTO> result = new ArrayList<>();
if (authorizedUsers != null && !authorizedUsers.isEmpty()) {
// 🔥 修改:收集所有用户ID用于批量查询
List<String> userIds = authorizedUsers.stream()
.map(UserProductCartDTO::getUserId)
.filter(Objects::nonNull)
.filter(userId -> !userId.trim().isEmpty())
.distinct()
.collect(Collectors.toList());
System.out.println("🔍 需要批量查询的用户数量: " + userIds.size());
// 🔥 修改:批量查询所有相关数据
Map<String, UsersManagements> managerMap = batchQueryManagers(userIds);
Map<String, List<UsersMapper.ContactInfo>> contactsMap = batchQueryContacts(userIds);
Map<String, List<UsersMapper.CartItem>> cartItemsMap = batchQueryCartItems(userIds);
// 2. 为每个授权用户构建完整信息
System.out.println("🔄 开始处理 " + authorizedUsers.size() + " 条授权用户数据...");
for (int i = 0; i < authorizedUsers.size(); i++) {
UserProductCartDTO user = authorizedUsers.get(i);
try {
// 🔥 修改:使用批量查询的数据构建完整用户信息
UserProductCartDTO fullUserInfo = buildUserInfoFromBatchData(user, managerMap, contactsMap, cartItemsMap);
if (fullUserInfo != null) {
result.add(fullUserInfo);
// 打印前几个客户的详细信息
if (i < 3) {
System.out.println("📝 授权客户样例 " + (i + 1) + ": " +
"ID=" + fullUserInfo.getUserId() +
", 手机=" + fullUserInfo.getPhoneNumber() +
", 公司=" + fullUserInfo.getCompany() +
", 联系人数量=" + (fullUserInfo.getUsersContacts() != null ? fullUserInfo.getUsersContacts().size() : 0) +
", 购物车数量=" + (fullUserInfo.getCartItems() != null ? fullUserInfo.getCartItems().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<>();
}
}
/**
* 检查是否有权限查看客户
*/
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<String> publicSeaLevels = Set.of("company-sea-pools", "organization-sea-pools", "department-sea-pools", "公海池");
// 检查等级是否为公海池
boolean isPublicSeaLevel = publicSeaLevels.contains(userInfo.getLevel());
System.out.println("🔍 PoolCustomerService - 客户等级检查: " + 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;
}
/**
* 检查是否有负责人认证信息
*/
private boolean hasManagerAuthInfo(String userId) {
try {
UsersManagements userManager = usersManagementsMapper.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 = usersManagementsMapper.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 = usersManagementsMapper.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 = usersManagementsMapper.findByUserIdAndAuthInfo(userId, authInfo);
// 🔥 优化:如果没有找到匹配的负责人记录,检查是否为公海池客户
if (userManager == null) {
System.out.println("🔍 未找到匹配的负责人记录,检查客户等级...");
// 获取用户信息检查等级
UserProductCartDTO userInfo = usersMapper.getUserBasicInfo(userId);
if (userInfo != null) {
// 定义公海池等级
Set<String> 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.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 = usersMapper.getUserBasicInfo(userId);
if (userInfo == null) {
System.out.println("⚠️ 用户不存在: " + userId);
return null;
}
// 销售端权限校验
if (!"buyer".equals(userInfo.getType()) && !"both".equals(userInfo.getType())) {
System.out.println("🚫 过滤掉非客户端客户: " + userId + " (类型: " + userInfo.getType() + ")");
return null;
}
// 🔥 恢复:原有的单个查询负责人信息逻辑
try {
UsersManagements userManager = usersManagementsMapper.findByUserId(userId);
if (userManager != null) {
System.out.println("✅ 获取到负责人信息: " +
"负责人=" + userManager.getUserName() +
", 组织=" + userManager.getOrganization() +
", 部门=" + userManager.getManagerdepartment());
} else {
System.out.println("⚠️ 未找到负责人信息");
}
} catch (Exception e) {
System.err.println("❌ 获取负责人信息失败: " + e.getMessage());
}
// 2. 获取联系人信息 - 一对多
try {
List<UsersMapper.ContactInfo> contacts = usersMapper.getUserAllContacts(userId);
if (contacts != null && !contacts.isEmpty()) {
List<UserProductCartDTO.UsersContacts> 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<UsersMapper.CartItem> cartItems = usersMapper.getUserAllCartItems(userId);
System.out.println("🔍 查询到的购物车数据条数: " + (cartItems != null ? cartItems.size() : 0));
if (cartItems != null && !cartItems.isEmpty()) {
List<UserProductCartDTO.CartItem> userCartItems = cartItems.stream()
.map(item -> {
UserProductCartDTO.CartItem cartItem = new UserProductCartDTO.CartItem();
cartItem.setCartItemId(item.getCartItemId());
cartItem.setProductId(item.getProductId());
cartItem.setProductName(item.getProductName());
cartItem.setSpecification(item.getSpecification());
cartItem.setQuantity(item.getQuantity());
cartItem.setGrossWeight(item.getGrossWeight());
cartItem.setYolk(item.getYolk());
// 调试日志
System.out.println("📦 转换购物车项: " +
"ID=" + cartItem.getCartItemId() +
", 产品=" + cartItem.getProductName() +
", 规格=" + cartItem.getSpecification());
return cartItem;
})
.collect(Collectors.toList());
userInfo.setCartItems(userCartItems);
System.out.println("✅ 成功设置购物车数据,数量: " + userCartItems.size());
} else {
userInfo.setCartItems(Collections.emptyList());
System.out.println("⚠️ 购物车数据为空");
}
userInfo.setProducts(Collections.emptyList()); // 销售端不使用产品信息
} catch (Exception e) {
System.err.println("❌ 获取购物车信息失败: " + e.getMessage());
e.printStackTrace();
userInfo.setCartItems(Collections.emptyList());
userInfo.setProducts(Collections.emptyList());
}
// 最终调试信息
System.out.println("🎯 最终返回的用户数据: " +
"cartItems数量=" + (userInfo.getCartItems() != null ? userInfo.getCartItems().size() : "null") +
", contacts数量=" + (userInfo.getUsersContacts() != null ? userInfo.getUsersContacts().size() : "null"));
return userInfo;
}
/**
* 获取所有客户信息 - 不进行负责人过滤直接返回所有数据销售端版本
*/
public List<UserProductCartDTO> getAllCustomersWithoutFilter() {
try {
System.out.println("====================================================");
System.out.println("🚀 开始获取所有微信用户数据(无过滤,销售端)...");
// 1. 获取所有用户的基本信息
System.out.println("📋 查询用户基础信息...");
List<UserProductCartDTO> allUsers = usersMapper.getAllUserBasicInfo();
System.out.println("✅ 基础用户数据查询完成");
System.out.println("📊 获取到基础用户数据条数: " + (allUsers != null ? allUsers.size() : "null"));
List<UserProductCartDTO> result = new ArrayList<>();
if (allUsers != null && !allUsers.isEmpty()) {
// 🔥 修改:收集所有用户ID用于批量查询
List<String> userIds = allUsers.stream()
.map(UserProductCartDTO::getUserId)
.filter(Objects::nonNull)
.filter(userId -> !userId.trim().isEmpty())
.distinct()
.collect(Collectors.toList());
System.out.println("🔍 需要批量查询的用户数量: " + userIds.size());
// 🔥 修改:批量查询所有相关数据
Map<String, UsersManagements> managerMap = batchQueryManagers(userIds);
Map<String, List<UsersMapper.ContactInfo>> contactsMap = batchQueryContacts(userIds);
Map<String, List<UsersMapper.CartItem>> cartItemsMap = batchQueryCartItems(userIds);
// 2. 为每个用户构建完整信息
System.out.println("🔄 开始处理 " + allUsers.size() + " 条用户数据...");
for (int i = 0; i < allUsers.size(); i++) {
UserProductCartDTO user = allUsers.get(i);
try {
// 销售端权限:只处理buyer和both类型
if (!"buyer".equals(user.getType()) && !"both".equals(user.getType())) {
System.out.println("🚫 过滤掉非供应端客户: " + user.getUserId() + " (类型: " + user.getType() + ")");
continue;
}
// 🔥 修改:使用批量查询的数据构建完整用户信息
UserProductCartDTO fullUserInfo = buildUserInfoFromBatchData(user, managerMap, contactsMap, cartItemsMap);
if (fullUserInfo != null) {
result.add(fullUserInfo);
// 打印前几个客户的详细信息
if (i < 3) {
System.out.println("📝 客户样例 " + (i + 1) + ": " +
"ID=" + fullUserInfo.getUserId() +
", 手机=" + fullUserInfo.getPhoneNumber() +
", 公司=" + fullUserInfo.getCompany() +
", 联系人数量=" + (fullUserInfo.getUsersContacts() != null ? fullUserInfo.getUsersContacts().size() : 0) +
", 购物车数量=" + (fullUserInfo.getCartItems() != null ? fullUserInfo.getCartItems().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<String, UsersManagements> batchQueryManagers(List<String> userIds) {
Map<String, UsersManagements> managerMap = new HashMap<>();
if (userIds != null && !userIds.isEmpty()) {
try {
List<UsersManagements> allManagers = usersManagementsMapper.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<String, List<UsersMapper.ContactInfo>> batchQueryContacts(List<String> userIds) {
Map<String, List<UsersMapper.ContactInfo>> contactsMap = new HashMap<>();
if (userIds != null && !userIds.isEmpty()) {
try {
List<UsersMapper.ContactInfo> allContacts = usersMapper.getUserContactsByUserIds(userIds);
// 按用户ID分组
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() + " 条记录,涉及 " + contactsMap.size() + " 个用户");
} catch (Exception e) {
System.err.println("❌ 批量查询联系人信息失败: " + e.getMessage());
}
}
return contactsMap;
}
/**
* 3.批量查询购物车信息
*/
private Map<String, List<UsersMapper.CartItem>> batchQueryCartItems(List<String> userIds) {
Map<String, List<UsersMapper.CartItem>> cartItemsMap = new HashMap<>();
if (userIds != null && !userIds.isEmpty()) {
try {
List<UsersMapper.CartItem> allCartItems = usersMapper.getCartItemsByUserIds(userIds);
// 按用户ID分组
for (UsersMapper.CartItem cartItem : allCartItems) {
String userId = cartItem.getUserId();
if (userId != null) {
cartItemsMap.computeIfAbsent(userId, k -> new ArrayList<>()).add(cartItem);
}
}
System.out.println("✅ 批量查询购物车信息完成,共获取 " + allCartItems.size() + " 条记录,涉及 " + cartItemsMap.size() + " 个用户");
} catch (Exception e) {
System.err.println("❌ 批量查询购物车信息失败: " + e.getMessage());
}
}
return cartItemsMap;
}
/**
* 4.从批量查询的数据构建用户完整信息
*/
private UserProductCartDTO buildUserInfoFromBatchData(UserProductCartDTO basicUserInfo,
Map<String, UsersManagements> managerMap,
Map<String, List<UsersMapper.ContactInfo>> contactsMap,
Map<String, List<UsersMapper.CartItem>> cartItemsMap) {
String userId = basicUserInfo.getUserId();
// 销售端权限校验
if (!"buyer".equals(basicUserInfo.getType()) && !"both".equals(basicUserInfo.getType())) {
System.out.println("🚫 过滤掉非客户端客户: " + userId + " (类型: " + basicUserInfo.getType() + ")");
return null;
}
// 🔥 设置负责人信息(记录日志,但不设置到DTO中,因为UserProductCartDTO没有负责人字段)
try {
UsersManagements userManager = managerMap.get(userId);
if (userManager != null) {
System.out.println("✅ 从批量Map中获取到负责人信息: " +
"负责人=" + userManager.getUserName() +
", 组织=" + userManager.getOrganization() +
", 部门=" + userManager.getManagerdepartment());
} else {
System.out.println("⚠️ 未在批量Map中找到负责人信息,用户ID: " + userId);
}
} catch (Exception e) {
System.err.println("❌ 从Map获取负责人信息失败: " + e.getMessage());
}
// 🔥 设置联系人信息 - 从批量查询的Map中获取
try {
List<UsersMapper.ContactInfo> contacts = contactsMap.get(userId);
if (contacts != null && !contacts.isEmpty()) {
List<UserProductCartDTO.UsersContacts> 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);
System.out.println("✅ 成功设置联系人数据,数量: " + userContacts.size() + ",用户ID: " + userId);
} else {
basicUserInfo.setUsersContacts(Collections.emptyList());
System.out.println("⚠️ 未找到联系人信息,用户ID: " + userId);
}
} catch (Exception e) {
System.err.println("❌ 设置联系人信息失败: " + e.getMessage());
basicUserInfo.setUsersContacts(Collections.emptyList());
}
// 🔥 设置购物车信息 - 从批量查询的Map中获取
try {
List<UsersMapper.CartItem> cartItems = cartItemsMap.get(userId);
if (cartItems != null && !cartItems.isEmpty()) {
List<UserProductCartDTO.CartItem> userCartItems = cartItems.stream()
.map(item -> {
UserProductCartDTO.CartItem cartItem = new UserProductCartDTO.CartItem();
cartItem.setCartItemId(item.getCartItemId());
cartItem.setProductId(item.getProductId());
cartItem.setProductName(item.getProductName());
cartItem.setSpecification(item.getSpecification());
cartItem.setQuantity(item.getQuantity());
cartItem.setGrossWeight(item.getGrossWeight());
cartItem.setYolk(item.getYolk());
return cartItem;
})
.collect(Collectors.toList());
basicUserInfo.setCartItems(userCartItems);
System.out.println("✅ 成功设置购物车数据,数量: " + userCartItems.size() + ",用户ID: " + userId);
} else {
basicUserInfo.setCartItems(Collections.emptyList());
System.out.println("⚠️ 购物车数据为空,用户ID: " + userId);
}
basicUserInfo.setProducts(Collections.emptyList()); // 销售端不使用产品信息
} catch (Exception e) {
System.err.println("❌ 设置购物车信息失败: " + e.getMessage());
basicUserInfo.setCartItems(Collections.emptyList());
basicUserInfo.setProducts(Collections.emptyList());
}
return basicUserInfo;
}
/**
* 只检查等级是否为公海池等级不检查负责人信息
*/
private boolean isPublicSeaLevel(String level) {
// 定义公海池等级
Set<String> 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<UserProductCartDTO.ProductInfo> getCustomerProducts(String phoneNumber) {
try {
UserProductCartDTO user = usersMapper.selectByPhone(phoneNumber);
if (user != null && ("buyer".equals(user.getType()) || "both".equals(user.getType()))) {
return usersMapper.getSellerProducts(user.getUserId());
}
return new ArrayList<>();
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}
}