From e242ff172c6a7a49fd5de508aee8ee74df21c849 Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Tue, 9 Dec 2025 17:01:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/system/service/SysUserService.java | 2 +- .../org/xyzh/api/system/vo/SysUserVO.java | 3 + .../org/xyzh/auth/strategy/LoginStrategy.java | 3 +- .../strategy/impl/EmailLoginStrategy.java | 6 +- .../strategy/impl/PasswordLoginStrategy.java | 7 ++- .../strategy/impl/PhoneLoginStrategy.java | 7 ++- .../strategy/impl/UsernameLoginStrategy.java | 7 ++- .../strategy/impl/WechatLoginStrategy.java | 7 ++- .../xyzh/common/auth/utils/JwtTokenUtil.java | 4 +- .../org/xyzh/common/dto/sys/TbSysUserDTO.java | 2 +- .../system/mapper/user/TbSysUserMapper.java | 2 +- .../service/impl/SysUserServiceImpl.java | 61 ++++++++----------- .../resources/mapper/user/TbSysUserMapper.xml | 8 ++- urbanLifelineWeb/.gitignore | 4 +- 14 files changed, 67 insertions(+), 56 deletions(-) diff --git a/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/service/SysUserService.java b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/service/SysUserService.java index 9a62273d..b787aa4a 100644 --- a/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/service/SysUserService.java +++ b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/service/SysUserService.java @@ -65,7 +65,7 @@ public interface SysUserService { * @author yslg * @since 2025-11-05 */ - ResultDomain getLoginUser(TbSysUserDTO filter); + ResultDomain getLoginUser(SysUserVO filter); /** * @description 根据条件查询用户列表 diff --git a/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/vo/SysUserVO.java b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/vo/SysUserVO.java index 5d7bc473..e851e92f 100644 --- a/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/vo/SysUserVO.java +++ b/urbanLifelineServ/apis/api-system/src/main/java/org/xyzh/api/system/vo/SysUserVO.java @@ -37,6 +37,9 @@ public class SysUserVO extends BaseVO { @Schema(description = "手机") private String phone; + @Schema(description = "手机号哈希码") + private String phoneHash; + @Schema(description = "微信ID") private String wechatId; diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/LoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/LoginStrategy.java index 10a3c162..583150eb 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/LoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/LoginStrategy.java @@ -1,5 +1,6 @@ package org.xyzh.auth.strategy; +import org.xyzh.api.system.vo.SysUserVO; import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.sys.TbSysUserDTO; @@ -36,7 +37,7 @@ public interface LoginStrategy { * @author yslg * @since 2025-12-05 */ - TbSysUserDTO findUser(LoginParam loginParam); + SysUserVO findUser(LoginParam loginParam); /** * @description 验证凭据(密码或验证码) diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java index 260c3383..f1a41d34 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/EmailLoginStrategy.java @@ -42,10 +42,10 @@ public class EmailLoginStrategy implements LoginStrategy { } @Override - public TbSysUserDTO findUser(LoginParam loginParam) { - TbSysUserDTO filter = new TbSysUserDTO(); + public SysUserVO findUser(LoginParam loginParam) { + SysUserVO filter = new SysUserVO(); filter.setEmail(loginParam.getEmail()); - TbSysUserDTO user = userService.getLoginUser(filter).getData(); + SysUserVO user = userService.getLoginUser(filter).getData(); if(user == null) { return null; } diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java index b16d8f9b..8a2588a3 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PasswordLoginStrategy.java @@ -10,6 +10,7 @@ import org.xyzh.common.utils.NonUtils; import org.xyzh.common.utils.validation.method.EmailValidateMethod; import org.xyzh.common.utils.validation.method.PhoneValidateMethod; import org.xyzh.api.system.service.SysUserService; +import org.xyzh.api.system.vo.SysUserVO; import java.util.List; @@ -53,8 +54,8 @@ public class PasswordLoginStrategy implements LoginStrategy { } @Override - public TbSysUserDTO findUser(LoginParam loginParam) { - TbSysUserDTO filter = new TbSysUserDTO(); + public SysUserVO findUser(LoginParam loginParam) { + SysUserVO filter = new SysUserVO(); EmailValidateMethod emailValidateMethod = new EmailValidateMethod(); PhoneValidateMethod phoneValidateMethod = new PhoneValidateMethod(); if(emailValidateMethod.validate(loginParam.getUsername())){ @@ -66,7 +67,7 @@ public class PasswordLoginStrategy implements LoginStrategy { } // 【优化】删除无用的密码编码,SQL查询不使用password字段 // 密码验证在 verifyCredential() 方法中进行 - TbSysUserDTO user = userService.getLoginUser(filter).getData(); + SysUserVO user = userService.getLoginUser(filter).getData(); if(user == null) { return null; } diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java index 775184b4..bd48fbd3 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/PhoneLoginStrategy.java @@ -7,6 +7,7 @@ import org.xyzh.auth.strategy.LoginStrategy; import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.sys.TbSysUserDTO; import org.xyzh.api.system.service.SysUserService; +import org.xyzh.api.system.vo.SysUserVO; import org.xyzh.common.redis.service.RedisService; /** @@ -41,10 +42,10 @@ public class PhoneLoginStrategy implements LoginStrategy { } @Override - public TbSysUserDTO findUser(LoginParam loginParam) { - TbSysUserDTO filter = new TbSysUserDTO(); + public SysUserVO findUser(LoginParam loginParam) { + SysUserVO filter = new SysUserVO(); filter.setPhone(loginParam.getPhone()); - TbSysUserDTO user = userService.getLoginUser(filter).getData(); + SysUserVO user = userService.getLoginUser(filter).getData(); if(user == null) { return null; } diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java index 53ffd7ef..2f2e3dd3 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/UsernameLoginStrategy.java @@ -7,6 +7,7 @@ import org.xyzh.auth.strategy.LoginStrategy; import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.sys.TbSysUserDTO; import org.xyzh.api.system.service.SysUserService; +import org.xyzh.api.system.vo.SysUserVO; /** * @description UsernameLoginStrategy.java文件描述 用户名登录策略 @@ -36,10 +37,10 @@ public class UsernameLoginStrategy implements LoginStrategy { } @Override - public TbSysUserDTO findUser(LoginParam loginParam) { - TbSysUserDTO filter = new TbSysUserDTO(); + public SysUserVO findUser(LoginParam loginParam) { + SysUserVO filter = new SysUserVO(); filter.setUsername(loginParam.getUsername()); - TbSysUserDTO user = userService.getLoginUser(filter).getData(); + SysUserVO user = userService.getLoginUser(filter).getData(); if(user == null) { return null; } diff --git a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java index ad94d223..b99cb780 100644 --- a/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java +++ b/urbanLifelineServ/auth/src/main/java/org/xyzh/auth/strategy/impl/WechatLoginStrategy.java @@ -6,6 +6,7 @@ import org.xyzh.auth.strategy.LoginStrategy; import org.xyzh.common.core.domain.LoginParam; import org.xyzh.common.dto.sys.TbSysUserDTO; import org.xyzh.api.system.service.SysUserService; +import org.xyzh.api.system.vo.SysUserVO; /** * @description WechatLoginStrategy.java文件描述 微信登录策略 @@ -32,10 +33,10 @@ public class WechatLoginStrategy implements LoginStrategy { } @Override - public TbSysUserDTO findUser(LoginParam loginParam) { - TbSysUserDTO filter = new TbSysUserDTO(); + public SysUserVO findUser(LoginParam loginParam) { + SysUserVO filter = new SysUserVO(); filter.setWechatId(loginParam.getWechatId()); - TbSysUserDTO user = userService.getLoginUser(filter).getData(); + SysUserVO user = userService.getLoginUser(filter).getData(); if(user == null) { return null; } diff --git a/urbanLifelineServ/common/common-auth/src/main/java/org/xyzh/common/auth/utils/JwtTokenUtil.java b/urbanLifelineServ/common/common-auth/src/main/java/org/xyzh/common/auth/utils/JwtTokenUtil.java index 59aaa2a6..526fe454 100644 --- a/urbanLifelineServ/common/common-auth/src/main/java/org/xyzh/common/auth/utils/JwtTokenUtil.java +++ b/urbanLifelineServ/common/common-auth/src/main/java/org/xyzh/common/auth/utils/JwtTokenUtil.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.xyzh.common.core.domain.LoginDomain; import org.xyzh.common.dto.sys.TbSysUserDTO; +import org.xyzh.common.dto.sys.TbSysUserInfoDTO; import org.xyzh.common.utils.IDUtils; import javax.crypto.SecretKey; @@ -43,9 +44,10 @@ public class JwtTokenUtil { public String generateToken(LoginDomain loginDomain) { Map claims = new HashMap<>(); TbSysUserDTO user = loginDomain.getUser(); + TbSysUserInfoDTO userInfoDTO = loginDomain.getUserInfo(); claims.put("userId", user.getUserId()); - claims.put("username", user.getUsername()); + claims.put("username", userInfoDTO.getUsername()); claims.put("email", user.getEmail()); claims.put("loginType", loginDomain.getLoginType()); claims.put("ipAddress", loginDomain.getIpAddress()); diff --git a/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysUserDTO.java b/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysUserDTO.java index 726f55c4..1fedef41 100644 --- a/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysUserDTO.java +++ b/urbanLifelineServ/common/common-dto/src/main/java/org/xyzh/common/dto/sys/TbSysUserDTO.java @@ -33,7 +33,7 @@ public class TbSysUserDTO extends BaseDTO { private String phone; @Schema(description = "手机号哈希") - private String phone_hash; + private String phoneHash; @Schema(description = "微信ID") private String wechatId; diff --git a/urbanLifelineServ/system/src/main/java/org/xyzh/system/mapper/user/TbSysUserMapper.java b/urbanLifelineServ/system/src/main/java/org/xyzh/system/mapper/user/TbSysUserMapper.java index cb129f1a..7afa76f6 100644 --- a/urbanLifelineServ/system/src/main/java/org/xyzh/system/mapper/user/TbSysUserMapper.java +++ b/urbanLifelineServ/system/src/main/java/org/xyzh/system/mapper/user/TbSysUserMapper.java @@ -64,7 +64,7 @@ public interface TbSysUserMapper extends BaseMapper { * @author yslg * @since 2025-11-07 */ - List getUserByFilter(@Param("filter") TbSysUserDTO filter); + List getUserByFilter(@Param("filter") SysUserVO filter); /** * @description 根据条件查询系统用户分页列表 diff --git a/urbanLifelineServ/system/src/main/java/org/xyzh/system/service/impl/SysUserServiceImpl.java b/urbanLifelineServ/system/src/main/java/org/xyzh/system/service/impl/SysUserServiceImpl.java index 126a9d6f..612fcdd9 100644 --- a/urbanLifelineServ/system/src/main/java/org/xyzh/system/service/impl/SysUserServiceImpl.java +++ b/urbanLifelineServ/system/src/main/java/org/xyzh/system/service/impl/SysUserServiceImpl.java @@ -68,7 +68,7 @@ public class SysUserServiceImpl implements SysUserService { public ResultDomain registerUser(SysUserVO userVO) { try { logger.info("开始注册用户:{}", userVO.getUsername()); - + userVO.setPhone(aesEncryptUtil.decrypt(userVO.getPhone())); // 检查用户是否已存在 if (checkUserExists(userVO)) { return ResultDomain.failure("用户已存在"); @@ -82,18 +82,20 @@ public class SysUserServiceImpl implements SysUserService { if (StringUtils.isBlank(dto.getUserId())) { dto.setUserId(IDUtils.generateID()); } + dto.setPhone(aesEncryptUtil.encrypt(userVO.getPhone())); + dto.setPhoneHash(AesEncryptUtil.maskPhone(userVO.getPhone())); dto.setCreateTime(now); dto.setDeleted(false); // 加密密码 if (StringUtils.isNotBlank(dto.getPassword())) { - dto.setPassword(passwordEncoder.encode(dto.getPassword())); + dto.setPassword(passwordEncoder.encode(aesEncryptUtil.decrypt(dto.getPassword()))); } // 插入用户主表 int rows = userMapper.insertUser(dto); if (rows <= 0) { - logger.warn("插入用户失败, username={}", dto.getUsername()); + logger.warn("插入用户失败, userVO:", userVO.toString()); return ResultDomain.failure("插入用户失败"); } @@ -111,7 +113,6 @@ public class SysUserServiceImpl implements SysUserService { userRole.setCreateTime(now); userRoleMapper.insertUserRole(userRole); - logger.info("注册用户成功, userId={}, username={}", dto.getUserId(), dto.getUsername()); return ResultDomain.success("注册用户成功", dto); } catch (Exception e) { @@ -126,7 +127,7 @@ public class SysUserServiceImpl implements SysUserService { * @return true-存在,false-不存在 */ private boolean checkUserExists(SysUserVO userVO) { - TbSysUserDTO filter = new TbSysUserDTO(); + SysUserVO filter = new SysUserVO(); // 检查用户名是否存在 if (StringUtils.isNotBlank(userVO.getUsername())) { @@ -140,8 +141,9 @@ public class SysUserServiceImpl implements SysUserService { // 检查手机号是否存在 if (StringUtils.isNotBlank(userVO.getPhone())) { - filter = new TbSysUserDTO(); - filter.setPhone(userVO.getPhone()); + filter = new SysUserVO(); + filter.setPhone(aesEncryptUtil.encrypt(userVO.getPhone())); + filter.setPhoneHash(AesEncryptUtil.maskPhone(userVO.getPhone())); List users = userMapper.getUserByFilter(filter); if (users != null && !users.isEmpty()) { logger.warn("手机号已存在: {}", userVO.getPhone()); @@ -151,7 +153,7 @@ public class SysUserServiceImpl implements SysUserService { // 检查邮箱是否存在 if (StringUtils.isNotBlank(userVO.getEmail())) { - filter = new TbSysUserDTO(); + filter = new SysUserVO(); filter.setEmail(userVO.getEmail()); List users = userMapper.getUserByFilter(filter); if (users != null && !users.isEmpty()) { @@ -168,18 +170,11 @@ public class SysUserServiceImpl implements SysUserService { if (userVO == null) { return ResultDomain.failure(MSG_USER_PARAM_REQUIRED); } - TbSysUserDTO dto = SysUserVO.toDTO(userVO); - if (StringUtils.isBlank(dto.getUserId())) { - dto.setUserId(IDUtils.generateID()); - } - if (dto.getCreateTime() == null) { - dto.setCreateTime(new Date()); - } - if (dto.getDeleted() == null) { - dto.setDeleted(false); - } - int rows = userMapper.insertUser(dto); - if (rows > 0) { + + ResultDomain rows = registerUser(userVO); + TbSysUserDTO dto = rows.getData(); + + if (rows.getSuccess()) { logger.info("新增用户成功, userId={}", dto.getUserId()); return ResultDomain.success("新增用户成功", dto); } @@ -219,11 +214,10 @@ public class SysUserServiceImpl implements SysUserService { @Override public ResultDomain getUser(SysUserVO filter) { - TbSysUserDTO dto = SysUserVO.toFilter(filter); - if (dto == null) { + if (filter == null) { return ResultDomain.failure(MSG_QUERY_PARAM_REQUIRED); } - List list = userMapper.getUserByFilter(dto); + List list = userMapper.getUserByFilter(filter); if (list == null || list.isEmpty()) { return ResultDomain.failure("未找到用户"); } @@ -231,18 +225,19 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public ResultDomain getLoginUser(TbSysUserDTO filter) { + public ResultDomain getLoginUser(SysUserVO filter) { // 登录查询语义与 getUser 相同(可根据用户名/手机号/邮箱查询) if(NonUtils.isNotNull(filter.getPhone())){ - filter.setPhone_hash(aesEncryptUtil.encrypt(filter.getPhone())); + filter.setPhone(aesEncryptUtil.encrypt(filter.getPhone())); + filter.setPhoneHash(AesEncryptUtil.maskPhone(filter.getPhone())); } - return null; + SysUserVO userVO = userMapper.getUserByFilter(filter).get(0); + return ResultDomain.success("查询成功", userVO); } @Override public ResultDomain getUserList(SysUserVO filter) { - TbSysUserDTO dto = SysUserVO.toFilter(filter); - List list = userMapper.getUserByFilter(dto); + List list = userMapper.getUserByFilter(filter); if (list == null) { list = Collections.emptyList(); } @@ -272,9 +267,9 @@ public class SysUserServiceImpl implements SysUserService { if (StringUtils.isBlank(username)) { return ResultDomain.failure("用户名不能为空"); } - TbSysUserDTO filter = new TbSysUserDTO(); - filter.setUsername(username); - List list = userMapper.getUserByFilter(filter); + SysUserVO userVO = new SysUserVO(); + userVO.setUsername(username); + List list = userMapper.getUserByFilter(userVO); if (list == null || list.isEmpty()) { return ResultDomain.failure("未找到用户"); } @@ -370,9 +365,7 @@ public class SysUserServiceImpl implements SysUserService { vo.setUserId(userId); vo.setAvatar(info.getAvatar()); vo.setGender(info.getGender()); - vo.setFamilyName(info.getFamilyName()); - vo.setGivenName(info.getGivenName()); - vo.setFullName(info.getFullName()); + vo.setUsername(info.getUsername()); vo.setLevel(info.getLevel()); vo.setIdCard(info.getIdCard()); vo.setAddress(info.getAddress()); diff --git a/urbanLifelineServ/system/src/main/resources/mapper/user/TbSysUserMapper.xml b/urbanLifelineServ/system/src/main/resources/mapper/user/TbSysUserMapper.xml index 77b6969c..25d4edd3 100644 --- a/urbanLifelineServ/system/src/main/resources/mapper/user/TbSysUserMapper.xml +++ b/urbanLifelineServ/system/src/main/resources/mapper/user/TbSysUserMapper.xml @@ -153,7 +153,7 @@ - SELECT u.user_id, u.username, u.password, u.email, u.phone, u.wechat_id, u.status, u.user_type, u.optsn, u.creator, u.updater, u.dept_path, u.remark, u.create_time, u.update_time, u.delete_time, u.deleted, @@ -170,9 +170,15 @@ AND u.phone = #{filter.phone} + + AND u.phone_hash = #{filter.phoneHash} + AND u.status = #{filter.status} + + AND ui.username = #{filter.username} + AND (u.deleted IS NULL OR u.deleted = false) diff --git a/urbanLifelineWeb/.gitignore b/urbanLifelineWeb/.gitignore index cf4bf4e8..e3bd013f 100644 --- a/urbanLifelineWeb/.gitignore +++ b/urbanLifelineWeb/.gitignore @@ -53,4 +53,6 @@ yarn-error.log* # Misc .DS_Store -Thumbs.db \ No newline at end of file +Thumbs.db + +packages/hello_uni \ No newline at end of file