From 183ac999cb41d98c60131f864e6941ac9305af88 Mon Sep 17 00:00:00 2001 From: s2042968 Date: Fri, 18 Apr 2025 16:54:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=94=A8=E6=88=B7=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/controller/UserController.java | 2 +- .../software/manage/mapper/RoleMapper.java | 4 +- .../software/manage/mapper/UserMapper.java | 62 ++--- .../software/manage/pojo/models/User.java | 64 ++--- .../software/manage/pojo/models/UserRole.java | 25 +- .../manage/pojo/other/PublishParam.java | 9 - .../manage/pojo/other/SingleUserResponse.java | 43 +--- .../software/manage/service/UserService.java | 4 +- .../serviceimpl/FileRecycleServiceImpl.java | 6 +- .../serviceimpl/UserAccessLogServiceImpl.java | 4 +- .../service/serviceimpl/UserServiceImpl.java | 240 ++++++++++-------- .../main/resources/sqlmapper/UserMapper.xml | 37 ++- 12 files changed, 256 insertions(+), 244 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java index cb52513..c5440fd 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/UserController.java @@ -28,7 +28,7 @@ public class UserController { return userService.login(loginRequest); } - @RequiredRole(AdminTypeEnum.SYSTEM) +// @RequiredRole(AdminTypeEnum.SYSTEM) @PostMapping("/createUser") @UserOperation(value = "新增用户信息", modelName = UserOperationModuleEnum.USER) public ElectromagneticResult createUser(@RequestBody UserRequest userRequest) { diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java index 047b387..898dae2 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/RoleMapper.java @@ -32,7 +32,7 @@ public interface RoleMapper extends BaseMapper { "LEFT JOIN " + " ed_file_info f ON rp.file_id = f.id " + "LEFT JOIN" + - " ed_user_role ur ON r.role_id = ur.role_id " + + " ed_user_role ur ON r.id = ur.role_id " + "LEFT JOIN" + " ed_users u ON ur.user_id = u.user_id " + "WHERE " + @@ -41,7 +41,7 @@ public interface RoleMapper extends BaseMapper { " AND ${ew.sqlSegment} " + "" + "GROUP BY " + - " r.role_id" + + " r.id" + "") Page getPageRoleDTO(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java index 1532b49..3497a0b 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java @@ -12,30 +12,30 @@ import java.util.List; @Mapper public interface UserMapper extends BaseMapper { - /** - * 插入 - * - * @param user - * @return - */ - @Override - int insert(User user); +// /** +// * 插入 +// * +// * @param user +// * @return +// */ +// @Override +// int insert(User user); +// +// /** +// * 编辑 +// * +// * @param user +// * @return +// */ +// int modify(User user); - /** - * 编辑 - * - * @param user - * @return - */ - int modify(User user); - - /** - * 发布 - * - * @param publishParam - * @return - */ - int publish(PublishParam publishParam); +// /** +// * 发布 +// * +// * @param publishParam +// * @return +// */ +// int publish(PublishParam publishParam); /** * 通过工号查询用户 @@ -45,7 +45,7 @@ public interface UserMapper extends BaseMapper { */ User selectUserByWorkNumber(String workNumber); - /** + /* * 通过用户编码查询用户 * * @param userId @@ -69,13 +69,13 @@ public interface UserMapper extends BaseMapper { */ int getTotalCount(SearchKeyWords searchKeywords); - /** - * 通过用户ID删除用户 - * - * @param userDeleteKeyWords - * @return - */ - int deleteUser(UserDeleteKeyWords userDeleteKeyWords); +// /** +// * 通过用户ID删除用户 +// * +// * @param userDeleteKeyWords +// * @return +// */ +// int deleteUser(UserDeleteKeyWords userDeleteKeyWords); /** * 查找用户角色名称 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java index 47fad2f..2eff60a 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/User.java @@ -1,24 +1,25 @@ package com.electromagnetic.industry.software.manage.pojo.models; +import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.annotation.TableName; +import com.electromagnetic.industry.software.common.cons.UserConstants; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; +import com.electromagnetic.industry.software.common.util.IdWorker; +import com.electromagnetic.industry.software.common.util.SignUtils; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import lombok.Data; import java.util.Date; @TableName("ed_users") @Data -public class User { +public class User extends BaseModel{ /** * 主键ID */ - private Long id; - - /** - * 用户编码 - */ - private String userId; - + private String id; + /** * 用户姓名 */ @@ -88,35 +89,20 @@ public class User { * 盐 */ private String salt; - - /** - * 创建人 - */ - private String creator; - - /** - * 创建人姓名 - */ - private String creatorName; - /** - * 创建时间 - */ - private Date gmtCreate; - /** - * 更新人 - */ - private String modifier; - /** - * 更新人姓名 - */ - private String modifierName; - /** - * 更新时间 - */ - private Date gmtModified; - - /** - * 是否有效:0-无效 1-有效 - */ - private Integer effectFlag; + + public void newInit() { + String id = IdWorker.getSnowFlakeIdString(); + String userId = UserThreadLocal.getUserId(); + this.setId(id); + Date now = new Date(); + this.setCreatedTime(now); + this.setUpdatedTime(now); + this.setCreatedBy(userId); + this.setUpdatedBy(userId); + this.setEffectFlag(EffectFlagEnum.EFFECT.code); + this.setSalt(RandomUtil.randomString(16)); + this.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + this.getSalt())); + this.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS); + this.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java index 0ad0944..f390a50 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserRole.java @@ -2,11 +2,22 @@ package com.electromagnetic.industry.software.manage.pojo.models; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; +import com.electromagnetic.industry.software.common.util.IdWorker; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import lombok.Data; +import java.util.Date; + @Data @TableName("ed_user_role") -public class UserRole { +public class UserRole extends BaseModel{ + + /** + * 主键ID + */ + @TableField(value = "id") + private String id; /** * 用户编码 @@ -19,4 +30,16 @@ public class UserRole { */ @TableField(value = "role_id") private String roleId; + + public void newInit() { + String id = IdWorker.getSnowFlakeIdString(); + Date now = new Date(); + String userId = UserThreadLocal.getUserId(); + this.setId(id); + this.setCreatedTime(now); + this.setUpdatedTime(now); + this.setCreatedBy(userId); + this.setUpdatedBy(userId); + this.setEffectFlag(EffectFlagEnum.EFFECT.code); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/PublishParam.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/PublishParam.java index c9488e3..2d839a6 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/PublishParam.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/PublishParam.java @@ -13,13 +13,4 @@ public class PublishParam { */ private List userIds; - /** - * 编辑者 - */ - private String modifier; - - /** - * 编辑者姓名 - */ - private String modifierName; } \ No newline at end of file diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java index c310d70..41aa98d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/other/SingleUserResponse.java @@ -1,6 +1,9 @@ package com.electromagnetic.industry.software.manage.pojo.other; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.Date; @@ -11,14 +14,10 @@ public class SingleUserResponse { private static final long serialVersionUID = -7475233976453471059L; - /** - * 主键ID - */ - private Long id; - /** * 用户编码 */ + @JsonProperty("id") private String userId; /** @@ -51,11 +50,6 @@ public class SingleUserResponse { */ private String userAccount; - /** - * 登录密码 - */ - // private String userPwd; - /** * 角色名称拼接字符串 */ @@ -98,36 +92,23 @@ public class SingleUserResponse { */ private Integer isDefaultPwd; - /** - * 盐 - */ - // private String salt; + + private Date createdTime; /** * 创建人 */ - private String creator; + private String createdBy; /** - * 创建人姓名 + * 最后更新时间 */ - private String creatorName; + private Date updatedTime; + /** - * 创建时间 + * 最后更新人 */ - private Date gmtCreate; - /** - * 更新人 - */ - private String modifier; - /** - * 更新人姓名 - */ - private String modifierName; - /** - * 更新时间 - */ - private Date gmtModified; + private String updatedBy; /** * 是否有效:0-无效 1-有效 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserService.java index bf10a58..89dc58d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserService.java @@ -1,11 +1,13 @@ package com.electromagnetic.industry.software.manage.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.models.User; import com.electromagnetic.industry.software.manage.pojo.req.*; import java.util.List; -public interface UserService { +public interface UserService extends IService { /** * 用户登录 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java index fce2e4b..c9a3d85 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileRecycleServiceImpl.java @@ -190,9 +190,9 @@ public class FileRecycleServiceImpl implements FileRecycleService { } return userMapper.selectList(Wrappers.lambdaQuery() - .select(User::getUserId, User::getUserName) - .in(User::getUserId, userIds)) - .stream().collect(Collectors.toMap(User::getUserId, User::getUserName)); + .select(User::getId, User::getUserName) + .in(User::getId, userIds)) + .stream().collect(Collectors.toMap(User::getId, User::getUserName)); } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java index 3c5dfc0..8bfd0c4 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java @@ -92,8 +92,8 @@ public class UserAccessLogServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(User.class).select(User::getUserId, User::getUserName).in(User::getUserId, userIds); - Map idNameMap = userMapper.selectList(wrapper).stream().collect(Collectors.toMap(User::getUserId, User::getUserName)); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(User.class).select(User::getId, User::getUserName).in(User::getId, userIds); + Map idNameMap = userMapper.selectList(wrapper).stream().collect(Collectors.toMap(User::getId, User::getUserName)); res.forEach(e -> { e.setUserName(idNameMap.get(e.getUserId())); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java index d061230..6cd4b55 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserServiceImpl.java @@ -7,6 +7,9 @@ import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.electromagnetic.industry.software.common.cons.UserConstants; import com.electromagnetic.industry.software.common.enums.ActiveEnum; import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; @@ -16,10 +19,7 @@ import com.electromagnetic.industry.software.common.pojo.UserLoginInfo; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; import com.electromagnetic.industry.software.common.util.*; import com.electromagnetic.industry.software.manage.mapper.*; -import com.electromagnetic.industry.software.manage.pojo.models.Role; -import com.electromagnetic.industry.software.manage.pojo.models.Token; -import com.electromagnetic.industry.software.manage.pojo.models.User; -import com.electromagnetic.industry.software.manage.pojo.models.UserRole; +import com.electromagnetic.industry.software.manage.pojo.models.*; import com.electromagnetic.industry.software.manage.pojo.other.PublishParam; import com.electromagnetic.industry.software.manage.pojo.other.SearchKeyWords; import com.electromagnetic.industry.software.manage.pojo.other.SingleUserResponse; @@ -27,6 +27,7 @@ import com.electromagnetic.industry.software.manage.pojo.other.UserDeleteKeyWord import com.electromagnetic.industry.software.manage.pojo.req.*; import com.electromagnetic.industry.software.manage.pojo.resp.UserLoginResponse; import com.electromagnetic.industry.software.manage.pojo.resp.UserSearchResponse; +import com.electromagnetic.industry.software.manage.service.UserRoleService; import com.electromagnetic.industry.software.manage.service.UserService; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -36,18 +37,19 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; import static cn.hutool.core.date.DateTime.now; @Service -public class UserServiceImpl implements UserService { +public class UserServiceImpl extends ServiceImpl implements UserService { @Resource private UserMapper userMapper; @Resource private TokenMapper tokenMapper; @Resource - private UserRoleMapper userRoleMapper; + private UserRoleService userRoleService; @Resource private RoleMapper roleMapper; @@ -62,7 +64,7 @@ public class UserServiceImpl implements UserService { UserLoginInfo info = UserMappers.INSTANCE.getUserLoginRequestToModel(loginRequest); String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstants.SECRET_KEY); User user = userMapper.selectUserByWorkNumber(info.getWorkNumber()); - info.setUserId(user.getUserId()); + info.setUserId(user.getId()); info.setUsername(user.getUserName()); info.setAdminType(user.getAdminType()); if (checkUserValid(user) && matchPassword(user, decodePwd)) { @@ -70,8 +72,8 @@ public class UserServiceImpl implements UserService { createUserToken(user, tokenStr); UserLoginResponse userLoginResponse = new UserLoginResponse(); userLoginResponse.setToken(tokenStr); - userLoginResponse.setUserId(user.getUserId()); - UserThreadLocal.setSuccessInfo("", user.getUserId(), StrFormatter.format("用户{}登陆", user.getUserName())); + userLoginResponse.setUserId(user.getId()); + UserThreadLocal.setSuccessInfo("", user.getId(), StrFormatter.format("用户{}登陆", user.getUserName())); return ElectromagneticResultUtil.success(userLoginResponse); } return ElectromagneticResultUtil.fail("500", "用户不存在/密码错误"); @@ -79,7 +81,7 @@ public class UserServiceImpl implements UserService { public Boolean createUserToken(User user, String tokenStr) { Token token = new Token(); - token.setUserId(user.getUserId()); + token.setUserId(user.getId()); token.setToken(tokenStr); token.setExpireAt(new DateTime(SystemClock.now() + UserConstants.DEFAULT_EXPIRE_TIME)); return tokenMapper.insert(token) > 0; @@ -124,21 +126,14 @@ public class UserServiceImpl implements UserService { */ @Override public ElectromagneticResult createUser(UserRequest userRequest) { - + Assert.notNull(userRequest, "用户创建请求参数不能为空"); User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest); - user.setSalt(RandomUtil.randomString(16)); - user.setUserId(IdWorker.getSnowFlakeIdString()); - user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt())); - user.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS); - user.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS); - + user.newInit(); // 暂时将账户设置为工号 user.setUserAccount(user.getWorkNumber()); - - user.setCreator(UserThreadLocal.getUserId()); - user.setCreatorName(UserThreadLocal.getUsername()); - UserThreadLocal.setSuccessInfo("", user.getUserId(), StrFormatter.format("新增了用户{}", user.getUserName())); - return ElectromagneticResultUtil.success(userMapper.insert(user) > 0); + boolean success = this.save(user); + UserThreadLocal.setSuccessInfo("", user.getId(), StrFormatter.format("新增了用户 {} ", user.getUserName())); + return ElectromagneticResultUtil.success(success); } /** @@ -149,11 +144,18 @@ public class UserServiceImpl implements UserService { */ @Override public ElectromagneticResult modifyUser(UserModiRequest userModiRequest) { + Assert.notNull(userModiRequest, "用户修改请求参数不能为空"); + String userId = userModiRequest.getUserId(); + Assert.notBlank(userId, "用户ID不能为空"); + + // 校验用户存在性 + User existingUser = this.getById(userId); + Assert.notNull(existingUser, StrFormatter.format("用户ID {} 不存在", userId)); + User user = UserMappers.INSTANCE.getUserModiRequestToModel(userModiRequest); - user.setModifier(UserThreadLocal.getUserId()); - user.setModifierName(UserThreadLocal.getUsername()); - UserThreadLocal.setSuccessInfo("", userModiRequest.getUserId(), StrFormatter.format("更新了用户{}", user.getUserName())); - return ElectromagneticResultUtil.success(userMapper.modify(user) > 0); + boolean success = this.updateById(user); + UserThreadLocal.setSuccessInfo("", userModiRequest.getUserId(), StrFormatter.format("更新了用户 {} ", user.getUserName())); + return ElectromagneticResultUtil.success(success); } /** @@ -164,55 +166,49 @@ public class UserServiceImpl implements UserService { */ @Override public ElectromagneticResult publishUser(UserPublishRequest userPublishRequest) { + Assert.notNull(userPublishRequest, "发布请求参数不能为空"); PublishParam model = UserMappers.INSTANCE.getUserPublishRequestToModel(userPublishRequest); - model.setModifier(UserThreadLocal.getUserId()); - model.setModifierName(UserThreadLocal.getUsername()); - UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("批量发布了用户")); - return ElectromagneticResultUtil.success(userMapper.publish(model) > 0); + Assert.notEmpty(model.getUserIds(), "待发布用户ID列表不能为空"); + boolean updateResult = this.update( + new LambdaUpdateWrapper() + .in(User::getId, model.getUserIds()) + .set(User::getIsPublished, PublishEnum.PUBLISHED.getCode()) + ); + UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("批量发布 {} 个用户", model.getUserIds().size())); + return ElectromagneticResultUtil.success(updateResult); } @Override - public ElectromagneticResult validateWorkNum(UserWorkNumRequest workNumberRequest) { - // 将前端请求对象转换为模型对象,包含userId和userWorkNum - User user = UserMappers.INSTANCE.getUserWorkNumRequestToModel(workNumberRequest); + public ElectromagneticResult validateWorkNum(UserWorkNumRequest request) { - //根据请求对象的userId判断当前处于什么状态 - if (user.getUserId() == null) { - //userId为空,表示是新增用户阶段 - //判断数据库中有无该工号对应的用户 - User existingUser = userMapper.selectUserByWorkNumber(user.getWorkNumber()); - //如果有该用户就返回false,如果没有(==null)就返回true - boolean isWorkNumberUnique = (existingUser == null); - return ElectromagneticResultUtil.success(isWorkNumberUnique); - } else { - //userId不为空,表示是编辑用户阶段 - //请求对象的userWordNum在数据库中对应的user - User existingUser = userMapper.selectUserByWorkNumber(user.getWorkNumber()); - //判断,请求对象的userId对应的user和请求对象的userWordNum在数据库中对应的user是否为用一个 - if (existingUser != null) { - //请求对象的userWordNum在数据库中对应的user与请求对象的userId对应的user是否为同一个 - if (user.getUserId().equals(existingUser.getUserId())) { - // 如果获取到的用户ID与当前编辑的用户ID相同,说明工号未改变,直接返回true - return ElectromagneticResultUtil.success(true); - } else { - // 如果获取到的用户ID与当前编辑的用户ID不同,说明工号已改变,需要判断新工号是否唯一 - // 如果根据新工号获取不到用户,说明新工号唯一 - boolean isWorkNumberUnique = (userMapper.selectUserByWorkNumber(user.getWorkNumber()) == null); - return ElectromagneticResultUtil.success(isWorkNumberUnique); - } - } else { - //请求对象的userWordNum在数据库中不存在对应的user - return ElectromagneticResultUtil.success(true); - } + String workNumber = request.getWorkNumber(); + String currentUserId = request.getUserId(); + boolean exists = lambdaQuery() + .eq(User::getWorkNumber, workNumber) + .exists(); // 判断工号是否存在 + + // 新增 直接返回唯一性结果 + if (StringUtils.isBlank(currentUserId)) { + return ElectromagneticResultUtil.success(!exists); } + + // 编辑 需要排除当前用户 + if (exists) { + User existingUser = lambdaQuery() + .eq(User::getWorkNumber, workNumber) + .one(); + return ElectromagneticResultUtil.success(existingUser.getId().equals(currentUserId)); + } + + return ElectromagneticResultUtil.success(true); } @Override public ElectromagneticResult getSingleUser(GetSingleUserRequest getSingleUserRequest) { User user = userMapper.getSingleUser(getSingleUserRequest.getUserId()); SingleUserResponse singleUserResponse = UserMappers.INSTANCE.getSingleUserToResponse(user); - UserThreadLocal.setSuccessInfo("", getSingleUserRequest.getUserId(), StrFormatter.format("查询了用户{}详情信息", singleUserResponse.getUserName())); + UserThreadLocal.setSuccessInfo("", getSingleUserRequest.getUserId(), StrFormatter.format("查询了用户 {} 详情信息", singleUserResponse.getUserName())); return ElectromagneticResultUtil.success(singleUserResponse); } @@ -228,7 +224,7 @@ public class UserServiceImpl implements UserService { for (User user : userList) { SingleUserResponse singleUserResponse = new SingleUserResponse(); BeanUtils.copyProperties(user, singleUserResponse); - List roleList = userMapper.selectUserRoles(user.getUserId()); + List roleList = userMapper.selectUserRoles(user.getId()); String roles = String.join(",", roleList); singleUserResponse.setRoles(roles); singleUserResponse.setRoleList(roleList); @@ -250,20 +246,22 @@ public class UserServiceImpl implements UserService { } @Override - public ElectromagneticResult deleteUser(UserDeleteRequest userDeleteRequest) { + public ElectromagneticResult deleteUser(UserDeleteRequest request) { + String userId = request.getUserId(); - // 将请求对象转换为模型对象 - UserDeleteKeyWords userDeleteKeyWords = UserMappers.INSTANCE.getUserDeleteRequestToModel(userDeleteRequest); - userDeleteKeyWords.setModifier(UserThreadLocal.getUserId()); - userDeleteKeyWords.setModifierName(UserThreadLocal.getUsername()); + // 校验用户存在性及有效性 + User user = this.getById(userId); + Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId)); + Assert.isTrue(user.getEffectFlag().equals(EffectFlagEnum.EFFECT.code), + StrFormatter.format("用户 {} 已被删除", user.getUserName())); - // 检查用户是否已经被逻辑删除 - User existingUser = userMapper.getSingleUser(userDeleteKeyWords.getUserId()); - Assert.notNull(existingUser, StrFormatter.format("用户ID {} 无效", userDeleteRequest.getUserId())); - Assert.isTrue(EffectFlagEnum.EFFECT.code.equals(existingUser.getEffectFlag()), StrFormatter.format("用户{}已经被逻辑删除", existingUser.getUserName())); + // 构建逻辑删除更新 + boolean success = this.update(new LambdaUpdateWrapper() + .eq(User::getId, userId) + .set(User::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); - UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("删除了用户{}", existingUser.getUserName())); - return ElectromagneticResultUtil.success(userMapper.deleteUser(userDeleteKeyWords)); + UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("删除了用户 {} ", user.getUserName())); + return ElectromagneticResultUtil.success(success); } @Override @@ -298,14 +296,16 @@ public class UserServiceImpl implements UserService { */ @Override public ElectromagneticResult changePassword(String userId, String newPassword) { - User user = userMapper.getSingleUser(userId); + User user = this.getById(userId); Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId)); + String decodeNewPwd = AESUtils.decrypt(newPassword, UserConstants.SECRET_KEY); user.setUserPwd(SignUtils.MD5(decodeNewPwd + user.getSalt())); - user.setModifier(UserThreadLocal.getUserId()); - user.setModifierName(UserThreadLocal.getUsername()); - UserThreadLocal.setSuccessInfo("", UserThreadLocal.getUserId(), StrFormatter.format("修改了用户密码")); - return ElectromagneticResultUtil.success(userMapper.modify(user) > 0); + + boolean success = this.updateById(user); + + UserThreadLocal.setSuccessInfo("", userId, StrFormatter.format("修改了用户密码")); + return ElectromagneticResultUtil.success(success); } /** @@ -316,54 +316,86 @@ public class UserServiceImpl implements UserService { @Override @Transactional public Boolean resetPassword(String userId) { - User user = userMapper.getSingleUser(userId); + User user = this.getById(userId); Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId)); + user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt())); - boolean isModified = userMapper.modify(user) > 0; - if (isModified) { + boolean success = this.updateById(user); + + if (success) { UserThreadLocal.setSuccessInfo("", userId, StrFormatter.format("重置了用户{}的密码", user.getUserName())); } - return isModified; + return success; } private void activeRole(UserBindRoleDTO dto) { - User user = userMapper.getSingleUser(dto.getUserId()); - if (user.getIsActivated().equals(ActiveEnum.UNACTIVATED.getCode())) { + User user = this.getById(dto.getUserId()); + if (user != null && ActiveEnum.UNACTIVATED.getCode().equals(user.getIsActivated())) { user.setIsActivated(ActiveEnum.ACTIVATED.getCode()); - userMapper.modify(user); + this.updateById(user); } } private void bindRole(UserBindRoleDTO dto) { String userId = dto.getUserId(); - List roleNames = dto.getRoleList(); + List roleNames = Optional.ofNullable(dto.getRoleList()).orElse(Collections.emptyList()); // 删除当前用户原绑定角色 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", userId); - userRoleMapper.delete(queryWrapper); + userRoleService.update(new LambdaUpdateWrapper() + .eq(UserRole::getUserId, userId) + .set(UserRole::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); - if (roleNames != null) { - for (String roleName : roleNames) { - LambdaQueryWrapper roleQueryWrapper = new LambdaQueryWrapper<>(); - roleQueryWrapper.select(Role::getRoleId) - .eq(Role::getRoleName, roleName); - String roleId = roleMapper.selectOne(roleQueryWrapper).getRoleId(); + if (!roleNames.isEmpty()) { + // 2. 批量获取有效角色ID + Map roleIdMap = roleMapper.selectList( + new LambdaQueryWrapper() + .in(Role::getRoleName, roleNames) + .select(Role::getId, Role::getRoleName) + ).stream().collect(Collectors.toMap(Role::getRoleName, Role::getId)); - UserRole userRole = new UserRole(); - userRole.setUserId(userId); - userRole.setRoleId(roleId); - userRoleMapper.insert(userRole); + // 3. 处理需要绑定的角色 + List toSaveRoles = new ArrayList<>(); + roleNames.stream() + .filter(roleIdMap::containsKey) + .forEach(roleName -> { + String roleId = roleIdMap.get(roleName); + + // 先尝试恢复已存在的记录 + UserRole existing = userRoleService.getOne(new LambdaQueryWrapper() + .eq(UserRole::getUserId, userId) + .eq(UserRole::getRoleId, roleId) + .last("LIMIT 1")); + + if (existing != null) { + // 恢复原有记录 + userRoleService.update(new LambdaUpdateWrapper() + .eq(UserRole::getId, existing.getId()) + .set(UserRole::getEffectFlag, EffectFlagEnum.EFFECT.code)); + } else { + // 创建新记录 + UserRole newRole = new UserRole(); + newRole.setUserId(userId); + newRole.setRoleId(roleId); + newRole.newInit(); // 调用初始化方法设置主键和审计字段 + toSaveRoles.add(newRole); + } + }); + + if (!toSaveRoles.isEmpty()) { + userRoleService.saveBatch(toSaveRoles); } } } @Override public ElectromagneticResult validateOldPassword(String userId, String oldInputPassword) { - User user = userMapper.getSingleUser(userId); + // 使用Service层方法获取用户信息 + User user = this.getById(userId); Assert.notNull(user, StrFormatter.format("用户不存在,ID为 {}", userId)); + + // 解密并验证密码 String decodeOldPwd = AESUtils.decrypt(oldInputPassword, UserConstants.SECRET_KEY); - Boolean res = matchPassword(user, decodeOldPwd); - UserThreadLocal.setSuccessInfo("", "", "校验原始密码,当前密码与原始密码匹配结果 {}", res); - return ElectromagneticResultUtil.success(res); + Boolean isValid = matchPassword(user, decodeOldPwd); + UserThreadLocal.setSuccessInfo("", "", "校验原始密码,当前密码与原始密码匹配结果 {}", isValid ? "通过" : "不通过"); + return ElectromagneticResultUtil.success(isValid); } } diff --git a/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml b/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml index 0864be4..c480370 100644 --- a/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml +++ b/electrmangnetic/src/main/resources/sqlmapper/UserMapper.xml @@ -2,8 +2,7 @@ - - + @@ -28,7 +27,7 @@ - select user_id, + select id, user_name, work_number, mobile, @@ -43,19 +42,17 @@ user_status, internship_end_date, admin_type, - creator, - creator_name, - gmt_create, - modifier, - modifier_name, - gmt_modified, + created_time, + created_by, + updated_by, + updated_time, effect_flag from ed_users insert into ed_users( - user_id, + id, user_name, work_number, mobile, @@ -74,7 +71,7 @@ gmt_create, effect_flag) values ( - #{userId}, + #{id}, #{userName}, #{workNumber}, #{mobile}, @@ -97,7 +94,7 @@ update ed_users - user_id = #{userId}, + id = #{id}, user_name = #{userName}, work_number = #{workNumber}, mobile = #{mobile}, @@ -113,7 +110,7 @@ modifier_name = #{modifierName}, gmt_modified=now() - where user_id= #{userId} + where id= #{userId} @@ -125,7 +122,7 @@ modifier_name = #{modifierName}, gmt_modified = now() - where user_id IN + where id IN #{userId} @@ -173,7 +170,7 @@ - ORDER BY gmt_create ${gmtCreate} + ORDER BY created_time ${gmtCreate} ORDER BY join_time ${joinTime} @@ -227,7 +224,7 @@ - ORDER BY gmt_create ${gmtCreate} + ORDER BY created_time ${gmtCreate} ORDER BY join_time ${joinTime} @@ -245,7 +242,7 @@ @@ -256,7 +253,7 @@ modifier_name=#{modifierName}, gmt_modified = now() - where user_id = #{userId} + where id = #{userId} \ No newline at end of file