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.
259 lines
12 KiB
259 lines
12 KiB
|
3 months ago
|
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<String, Object> authenticate(String projectName, String userName, String password) {
|
||
|
|
Map<String, Object> 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<Managers> 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<UsersManagements> 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<String, Object> 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<String, Object> buildUserResponse(UsersManagements userManagement) {
|
||
|
|
Map<String, Object> 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;
|
||
|
|
}
|
||
|
|
}
|