diff --git a/src/main/java/com/youlai/system/controller/SysUserController.java b/src/main/java/com/youlai/system/controller/SysUserController.java index 89939320..d484bc70 100644 --- a/src/main/java/com/youlai/system/controller/SysUserController.java +++ b/src/main/java/com/youlai/system/controller/SysUserController.java @@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; +import com.youlai.system.model.form.PasswordChangeForm; +import com.youlai.system.model.form.PasswordResetForm; import com.youlai.system.model.form.UserProfileForm; import com.youlai.system.model.vo.UserProfileVO; +import com.youlai.system.security.util.SecurityUtils; import com.youlai.system.util.ExcelUtils; import com.youlai.system.enums.LogModuleEnum; import com.youlai.system.model.dto.UserImportDTO; @@ -105,17 +108,6 @@ public class SysUserController { return Result.judge(result); } - @Operation(summary = "重置用户密码") - @PatchMapping(value = "/{userId}/password") - @PreAuthorize("@ss.hasPerm('sys:user:password:reset')") - public Result updatePassword( - @Parameter(description = "用户ID") @PathVariable Long userId, - @RequestParam String password - ) { - boolean result = userService.updatePassword(userId, password); - return Result.judge(result); - } - @Operation(summary = "修改用户状态") @PatchMapping(value = "/{userId}/status") public Result updateUserStatus( @@ -165,7 +157,7 @@ public class SysUserController { public void exportUsers(UserPageQuery queryParams, HttpServletResponse response) throws IOException { String fileName = "用户列表.xlsx"; response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8)); List exportUserList = userService.listExportUsers(queryParams); EasyExcel.write(response.getOutputStream(), UserExportDTO.class).sheet("用户列表") @@ -187,9 +179,29 @@ public class SysUserController { @PathVariable Long userId, @RequestBody UserProfileForm formData ) { - System.out.println("test"); boolean result = userService.updateUserProfile(formData); return Result.judge(result); } + @Operation(summary = "重置用户密码") + @PutMapping(value = "/{userId}/password/reset") + @PreAuthorize("@ss.hasPerm('sys:user:password:reset')") + public Result resetPassword( + @Parameter(description = "用户ID") @PathVariable Long userId, + @RequestParam String password + ) { + boolean result = userService.resetPassword(userId, password); + return Result.judge(result); + } + + @Operation(summary = "修改用户密码") + @PutMapping(value = "/password") + public Result changePassword( + @RequestParam PasswordChangeForm data + ) { + Long currUserId = SecurityUtils.getUserId(); + boolean result = userService.changePassword(currUserId, data); + return Result.judge(result); + } + } diff --git a/src/main/java/com/youlai/system/model/form/PasswordChangeForm.java b/src/main/java/com/youlai/system/model/form/PasswordChangeForm.java new file mode 100644 index 00000000..a48f17f4 --- /dev/null +++ b/src/main/java/com/youlai/system/model/form/PasswordChangeForm.java @@ -0,0 +1,22 @@ +package com.youlai.system.model.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 修改密码表单 + * + * @author Ray + * @since 2024/8/13 + */ +@Schema(description = "修改密码表单") +@Data +public class PasswordChangeForm { + + @Schema(description = "原密码") + private String oldPassword; + + @Schema(description = "新密码") + private String newPassword; + +} diff --git a/src/main/java/com/youlai/system/model/form/PasswordResetForm.java b/src/main/java/com/youlai/system/model/form/PasswordResetForm.java new file mode 100644 index 00000000..f61f49ec --- /dev/null +++ b/src/main/java/com/youlai/system/model/form/PasswordResetForm.java @@ -0,0 +1,23 @@ +package com.youlai.system.model.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 重置密码表单 + * + * @author Ray + * @since 2024/8/13 + */ +@Schema(description = "重置密码表单") +@Data +public class PasswordResetForm { + + @Schema(description = "用户ID") + private Long userId; + + @Schema(description = "密码") + private String password; + + +} diff --git a/src/main/java/com/youlai/system/service/SysUserService.java b/src/main/java/com/youlai/system/service/SysUserService.java index 55b9d4dd..8f3d83da 100644 --- a/src/main/java/com/youlai/system/service/SysUserService.java +++ b/src/main/java/com/youlai/system/service/SysUserService.java @@ -4,6 +4,8 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.youlai.system.model.entity.SysUser; +import com.youlai.system.model.form.PasswordChangeForm; +import com.youlai.system.model.form.PasswordResetForm; import com.youlai.system.model.form.UserForm; import com.youlai.system.model.dto.UserAuthInfo; import com.youlai.system.model.form.UserProfileForm; @@ -67,15 +69,6 @@ public interface SysUserService extends IService { boolean deleteUsers(String idsStr); - /** - * 修改用户密码 - * - * @param userId 用户ID - * @param password 用户密码 - * @return - */ - boolean updatePassword(Long userId, String password); - /** * 根据用户名获取认证信息 * @@ -116,4 +109,22 @@ public interface SysUserService extends IService { * @return */ boolean updateUserProfile(UserProfileForm formData); + + /** + * 修改用户密码 + * + * @param userId 用户ID + * @param data 修改密码表单数据 + * @return + */ + boolean changePassword(Long userId, PasswordChangeForm data); + + /** + * 重置用户密码 + * + * @param userId 用户ID + * @param password 重置后的密码 + * @return + */ + boolean resetPassword(Long userId, String password); } diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index 841cc2a6..81810992 100644 --- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.system.common.constant.SystemConstants; import com.youlai.system.converter.UserConverter; +import com.youlai.system.exception.BusinessException; +import com.youlai.system.model.form.PasswordChangeForm; +import com.youlai.system.model.form.PasswordResetForm; import com.youlai.system.model.form.UserProfileForm; import com.youlai.system.model.vo.UserProfileVO; import com.youlai.system.security.util.SecurityUtils; @@ -167,21 +170,6 @@ public class SysUserServiceImpl extends ServiceImpl impl } - /** - * 修改用户密码 - * - * @param userId 用户ID - * @param password 用户密码 - * @return true|false - */ - @Override - public boolean updatePassword(Long userId, String password) { - return this.update(new LambdaUpdateWrapper() - .eq(SysUser::getId, userId) - .set(SysUser::getPassword, passwordEncoder.encode(password)) - ); - } - /** * 根据用户名获取认证信息 * @@ -277,4 +265,47 @@ public class SysUserServiceImpl extends ServiceImpl impl } + /** + * 修改用户密码 + * + * @param userId 用户ID + * @param data 密码修改表单数据 + * @return + */ + @Override + public boolean changePassword(Long userId, PasswordChangeForm data) { + + SysUser user = this.getById(userId); + if (user == null) { + throw new BusinessException("用户不存在"); + } + + String oldPassword = data.getOldPassword(); + + // 校验原密码 + if (!passwordEncoder.matches(oldPassword, user.getPassword())) { + throw new BusinessException("原密码错误"); + } + + String newPassword = data.getNewPassword(); + return this.update(new LambdaUpdateWrapper() + .eq(SysUser::getId, userId) + .set(SysUser::getPassword, passwordEncoder.encode(newPassword)) + ); + } + + /** + * 重置密码 + * + * @param userId 用户ID + * @param password 密码重置表单数据 + * @return + */ + @Override + public boolean resetPassword(Long userId, String password) { + return this.update(new LambdaUpdateWrapper() + .eq(SysUser::getId, userId) + .set(SysUser::getPassword, passwordEncoder.encode(password)) + ); + } }