From 7280350b0c4801dab15fc7eca372435cd4a44454 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Wed, 10 Dec 2025 16:50:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=B4=E4=BF=AE=E5=B7=A5?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B7=A5=E5=8D=95=E4=B8=8E=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E5=85=B3=E8=81=94=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/campus/water/entity/vo/LoginVO.java | 2 + .../campus/water/service/LoginService.java | 39 +++++++++++++++++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/campus/water/entity/vo/LoginVO.java b/src/main/java/com/campus/water/entity/vo/LoginVO.java index ff2b8e5..782df00 100644 --- a/src/main/java/com/campus/water/entity/vo/LoginVO.java +++ b/src/main/java/com/campus/water/entity/vo/LoginVO.java @@ -9,4 +9,6 @@ public class LoginVO { private String userId; // 用户ID private String username; // 用户名 private String userType; // 用户类型 + private String areaId; // 新增:维修人员所属区域ID + } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/LoginService.java b/src/main/java/com/campus/water/service/LoginService.java index 187585b..91441fe 100644 --- a/src/main/java/com/campus/water/service/LoginService.java +++ b/src/main/java/com/campus/water/service/LoginService.java @@ -2,10 +2,12 @@ package com.campus.water.service; import com.campus.water.entity.Admin; import com.campus.water.entity.RepairerAuth; +import com.campus.water.entity.Repairman; import com.campus.water.entity.User; import com.campus.water.entity.vo.LoginVO; import com.campus.water.mapper.AdminRepository; import com.campus.water.mapper.RepairerAuthRepository; +import com.campus.water.mapper.RepairmanRepository; import com.campus.water.mapper.UserRepository; import com.campus.water.entity.dto.request.LoginRequest; import com.campus.water.security.RoleConstants; @@ -13,6 +15,7 @@ import com.campus.water.security.JwtTokenProvider; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; @Service @RequiredArgsConstructor @@ -21,6 +24,9 @@ public class LoginService { private final AdminRepository adminRepository; private final UserRepository userRepository; private final RepairerAuthRepository repairerAuthRepository; + // 新增:注入RepairmanRepository + @Autowired + private RepairmanRepository repairmanRepository; private final PasswordEncoder passwordEncoder; private final JwtTokenProvider jwtTokenProvider; @@ -60,15 +66,38 @@ public class LoginService { return createLoginVO(user.getStudentId(), username, "user"); } + private LoginVO handleRepairmanLogin(String username, String password) { - RepairerAuth repairer = repairerAuthRepository.findByUsername(username) + // 1. 查询登录信息(RepairmanAuth) + RepairerAuth repairerAuth = repairerAuthRepository.findByUsername(username) .orElseThrow(() -> new RuntimeException("维修人员不存在")); - if (!passwordEncoder.matches(password, repairer.getPassword())) { + // 2. 验证密码 + if (!passwordEncoder.matches(password, repairerAuth.getPassword())) { throw new RuntimeException("密码错误"); } - return createLoginVO(repairer.getRepairmanId(), username, "repairman"); + // 3. 通过repairman_id查询Repairman表获取area_id + String repairmanId = repairerAuth.getRepairmanId(); + Repairman repairman = repairmanRepository.findById(repairmanId) + .orElseThrow(() -> new RuntimeException("维修人员信息不存在")); + String areaId = repairman.getAreaId(); // 假设Repairman类有getAreaId()方法 + + // 4. 返回包含areaId的LoginVO + return createLoginVO(repairmanId, username, "repairman", areaId); + } + + // 新增重载方法,支持传递areaId + private LoginVO createLoginVO(String userId, String username, String userType, String areaId) { + LoginVO vo = new LoginVO(); + vo.setUserId(userId); + vo.setUsername(username); + vo.setUserType(userType); + vo.setAreaId(areaId); // 设置区域ID + // 生成token(保持原有逻辑) + String role = RoleConstants.ROLE_REPAIRMAN; + vo.setToken(jwtTokenProvider.generateToken(username, role)); + return vo; } /** @@ -104,4 +133,8 @@ public class LoginService { vo.setToken(jwtTokenProvider.generateToken(username, role)); return vo; } + + public void setRepairmanRepository(RepairmanRepository repairmanRepository) { + this.repairmanRepository = repairmanRepository; + } } \ No newline at end of file -- 2.34.1