package com.example.web.service; import com.example.web.entity.Login; import com.example.web.entity.Rootdb; import com.example.web.entity.UsersManagements; import com.example.web.entity.Managers; import com.example.web.mapper.LoginMapper; import com.example.web.mapper.RootdbMapper; import com.example.web.mapper.UsersManagementsMapper; import com.example.web.mapper.SupplyUsersManagementsMapper; import com.example.web.mapper.ManagersMapper; import com.example.web.mapper.SupplyManagersMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class LoginService { @Autowired private LoginMapper loginMapper; @Autowired private RootdbMapper rootdbMapper; @Autowired private UsersManagementsMapper usersManagementsMapper; // 销售端 usermanagements @Autowired private SupplyUsersManagementsMapper supplyUsersManagementsMapper; // 采购端 usermanagements @Autowired private ManagersMapper managersMapper; // 销售端 managers @Autowired private SupplyManagersMapper supplyManagersMapper; // 采购端 managers public Map authenticate(String projectName, String userName, String password) { Map result = new HashMap<>(); try { System.out.println("=== 开始认证过程 ==="); System.out.println("工位名: " + projectName + ", 用户名: " + userName); // 1. 验证登录信息 Login loginInfo = loginMapper.findByProjectNameAndUserName(projectName, userName); System.out.println("登录信息查询结果: " + (loginInfo != null ? "成功" : "失败")); if (loginInfo == null) { result.put("success", false); result.put("message", "用户名或工位名不存在"); result.put("errorType", "user"); return result; } // 2. 验证密码 boolean passwordCorrect = loginInfo.getPassword().equals(password); System.out.println("密码验证: " + (passwordCorrect ? "正确" : "错误")); if (!passwordCorrect) { result.put("success", false); result.put("message", "密码错误"); result.put("errorType", "password"); return result; } // 3. 获取权限信息 Rootdb rootInfo = rootdbMapper.findByProjectName(projectName); System.out.println("权限信息查询结果: " + (rootInfo != null ? "成功" : "失败")); System.out.println("权限等级: " + (rootInfo != null ? rootInfo.getRoot() : "无")); if (rootInfo == null) { result.put("success", false); result.put("message", "未找到该职位的权限信息"); return result; } // 4. 🔥 关键修改:使用 loginId 来查询负责人信息 String loginId = String.valueOf(loginInfo.getId()); // 获取 login 表的 id System.out.println("登录ID (loginId): " + loginId); boolean isSupplySide = isSupplySideProject(projectName); System.out.println("🔄 系统识别: " + (isSupplySide ? "采购端" : "销售端")); UsersManagements userManagement = null; boolean fromManagersTable = false; // 4.1 首先尝试从 managers 表查询(使用 loginId 作为 managerId) List managersList; if (isSupplySide) { managersList = supplyManagersMapper.selectByUserNameAndManagerId(userName, loginId); } else { managersList = managersMapper.selectByUserNameAndManagerId(userName, loginId); } if (managersList != null && !managersList.isEmpty()) { // 从 managers 表找到数据 Managers manager = managersList.get(0); if (managersList.size() > 1) { System.out.println("找到多个 managers 记录,数量: " + managersList.size()); // 选择最新的记录 manager = managersList.stream() .sorted((m1, m2) -> { if (m1.getUpdated_at() != null && m2.getUpdated_at() != null) { return m2.getUpdated_at().compareTo(m1.getUpdated_at()); } return 0; }) .findFirst() .orElse(managersList.get(0)); } // 将 Managers 转换为 UsersManagements userManagement = convertManagerToUserManagement(manager); fromManagersTable = true; System.out.println("✅ 从 managers 表获取用户管理信息"); } else { // 4.2 如果 managers 表没有数据,再从 usermanagements 表查询(使用 loginId 作为 managerId) List userManagementsList; if (isSupplySide) { userManagementsList = supplyUsersManagementsMapper.findByUserNameAndManagerId(userName, loginId); } else { userManagementsList = usersManagementsMapper.findByUserNameAndManagerId(userName, loginId); } if (userManagementsList != null && !userManagementsList.isEmpty()) { if (userManagementsList.size() > 1) { System.out.println("找到多个 usermanagements 记录,数量: " + userManagementsList.size()); userManagement = userManagementsList.stream() .sorted((u1, u2) -> { if (u1.getUpdated_at() != null && u2.getUpdated_at() != null) { return u2.getUpdated_at().compareTo(u1.getUpdated_at()); } return 0; }) .findFirst() .orElse(userManagementsList.get(0)); } else { userManagement = userManagementsList.get(0); } System.out.println("✅ 从 usermanagements 表获取用户管理信息"); } } if (userManagement == null) { result.put("success", false); result.put("message", "未找到对应的负责人信息,请检查用户名和密码是否正确!"); return result; } // 打印用户管理信息详情 System.out.println("用户管理信息详情:"); System.out.println(" - 数据来源: " + (fromManagersTable ? "managers表" : "usermanagements表")); System.out.println(" - managerId: " + userManagement.getManagerId()); System.out.println(" - managercompany: " + userManagement.getManagercompany()); System.out.println(" - managerdepartment: " + userManagement.getManagerdepartment()); System.out.println(" - organization: " + userManagement.getOrganization()); System.out.println(" - role: " + userManagement.getRole()); System.out.println(" - userName: " + userManagement.getUserName()); System.out.println(" - assistant: " + userManagement.getAssistant()); // 5. 生成token(包含端信息) String token = generateToken(userName, projectName, isSupplySide); System.out.println("生成的token: " + token); // 6. 构建返回结果 result.put("success", true); result.put("token", token); result.put("root", rootInfo.getRoot()); result.put("user", buildUserResponse(userManagement)); result.put("isSupplySide", isSupplySide); result.put("fromManagersTable", fromManagersTable); // 新增:标识数据来源 result.put("loginId", loginId); // 返回 loginId // 返回完整的认证信息供前端使用 Map authInfo = new HashMap<>(); authInfo.put("managerId", userManagement.getManagerId() != null ? userManagement.getManagerId() : ""); authInfo.put("company", userManagement.getManagercompany() != null ? userManagement.getManagercompany() : ""); authInfo.put("department", userManagement.getManagerdepartment() != null ? userManagement.getManagerdepartment() : ""); authInfo.put("organization", userManagement.getOrganization() != null ? userManagement.getOrganization() : ""); authInfo.put("role", userManagement.getRole() != null ? userManagement.getRole() : ""); authInfo.put("userName", userManagement.getUserName() != null ? userManagement.getUserName() : ""); authInfo.put("assistant", userManagement.getAssistant() != null ? userManagement.getAssistant() : ""); result.put("authInfo", authInfo); System.out.println("✅ 返回完整认证信息: " + authInfo); System.out.println("最终返回结果: " + result); System.out.println("=== 认证过程结束 ==="); } catch (Exception e) { System.err.println("认证过程中发生异常: " + e.getMessage()); e.printStackTrace(); result.put("success", false); result.put("message", "登录过程中发生错误: " + e.getMessage()); } return result; } /** * 将 Managers 实体转换为 UsersManagements 实体 */ private UsersManagements convertManagerToUserManagement(Managers manager) { UsersManagements userManagement = new UsersManagements(); userManagement.setId(manager.getManager_id()); userManagement.setUserId(manager.getId()); // 使用企业id作为userId userManagement.setManagerId(manager.getManagerId()); userManagement.setManagercompany(manager.getManagercompany()); userManagement.setManagerdepartment(manager.getManagerdepartment()); userManagement.setOrganization(manager.getOrganization()); userManagement.setRole(manager.getRole()); userManagement.setRoot(manager.getRoot()); userManagement.setCreated_at(manager.getCreated_at()); userManagement.setUpdated_at(manager.getUpdated_at()); userManagement.setUserName(manager.getUserName()); userManagement.setAssistant(manager.getAssistant()); return userManagement; } /** * 判断是否为采购端工位 */ private boolean isSupplySideProject(String projectName) { if (projectName == null) { return false; } String lowerProjectName = projectName.toLowerCase(); return lowerProjectName.contains("supply") || lowerProjectName.contains("purchase") || lowerProjectName.contains("procurement") || lowerProjectName.contains("采购"); } /** * 生成token,包含端信息 */ private String generateToken(String userName, String projectName, boolean isSupplySide) { String side = isSupplySide ? "supply" : "sales"; return System.currentTimeMillis() + "-" + userName + "-" + projectName + "-" + side; } private Map buildUserResponse(UsersManagements userManagement) { Map user = new HashMap<>(); user.put("managerId", userManagement.getManagerId() != null ? userManagement.getManagerId() : ""); user.put("managercompany", userManagement.getManagercompany() != null ? userManagement.getManagercompany() : ""); user.put("managerdepartment", userManagement.getManagerdepartment() != null ? userManagement.getManagerdepartment() : ""); user.put("organization", userManagement.getOrganization() != null ? userManagement.getOrganization() : ""); user.put("role", userManagement.getRole() != null ? userManagement.getRole() : ""); user.put("userName", userManagement.getUserName() != null ? userManagement.getUserName() : ""); user.put("assistant", userManagement.getAssistant() != null ? userManagement.getAssistant() : ""); System.out.println("构建的用户响应: " + user); return user; } }