From 94cbca91770ed7cd3b0f7e1b2dccf8eb639be868 Mon Sep 17 00:00:00 2001 From: Liyanjun Date: Sun, 25 Jun 2023 09:28:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E5=AF=86=E7=A0=81=E4=BF=AE=E6=94=B9=EF=BC=8C?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E8=BF=81?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PersonalInfoController.java | 70 +++++++++++++++++ .../user/enums/SysUserExceptionEnum.java | 12 ++- .../user/factory/SysUserCreateFactory.java | 47 +++++++++++ .../user/pojo/request/SysUserRequest.java | 31 +++++++- .../modular/user/service/SysUserService.java | 27 +++++++ .../user/service/impl/SysUserServiceImpl.java | 77 +++++++++++++++++++ 6 files changed, 261 insertions(+), 3 deletions(-) create mode 100644 kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/PersonalInfoController.java create mode 100644 kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/SysUserCreateFactory.java diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/PersonalInfoController.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/PersonalInfoController.java new file mode 100644 index 000000000..60c3a60c4 --- /dev/null +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/controller/PersonalInfoController.java @@ -0,0 +1,70 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.controller; + +import cn.stylefeng.roses.kernel.rule.annotation.BusinessLog; +import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest; +import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 个人信息控制器 + * + * @author fengshuonan + * @date 2021/3/17 22:05 + */ +@RestController +@ApiResource(name = "个人信息", resBizType = ResBizTypeEnum.SYSTEM) +public class PersonalInfoController { + + @Resource + private SysUserService sysUserService; + + /** + * 更新用户个人信息 + * + * @author luojie + * @date 2020/11/6 13:50 + */ + @PostResource(name = "个人信息_更新个人信息", path = "/sysUser/updateInfo", requiredPermission = false) + @BusinessLog + public ResponseData updateInfo(@RequestBody @Validated(SysUserRequest.updateInfo.class) SysUserRequest sysUserRequest) { + sysUserService.editInfo(sysUserRequest); + return new SuccessResponseData<>(); + } + + /** + * 修改密码 + * + * @author luojie + * @date 2020/11/6 13:50 + */ + @PostResource(name = "个人信息_修改密码", path = "/sysUser/updatePassword", requiredPermission = false) + @BusinessLog + public ResponseData updatePwd(@RequestBody @Validated(SysUserRequest.updatePwd.class) SysUserRequest sysUserRequest) { + sysUserService.editPassword(sysUserRequest); + return new SuccessResponseData<>(); + } + + /** + * 修改头像 + * + * @author luojie + * @date 2020/11/6 13:48 + */ + @PostResource(name = "个人信息_修改头像", path = "/sysUser/updateAvatar", requiredPermission = false) + @BusinessLog + public ResponseData updateAvatar(@RequestBody @Validated(SysUserRequest.updateAvatar.class) SysUserRequest sysUserRequest) { + sysUserService.editAvatar(sysUserRequest); + return new SuccessResponseData<>(); + } + +} diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java index 0c8d1f6a7..cd76f02a3 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java @@ -28,7 +28,17 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum { *

* 但是提示:用户账号或密码错误,请重新输入 */ - ACCOUNT_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10003", "用户账号或密码错误,请重新输入"); + ACCOUNT_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10003", "用户账号或密码错误,请重新输入"), + + /** + * 原密码错误 + */ + USER_PWD_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10004", "原密码错误,请重新输入"), + + /** + * 新密码与原密码相同 + */ + USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/SysUserCreateFactory.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/SysUserCreateFactory.java new file mode 100644 index 000000000..90046da1c --- /dev/null +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/factory/SysUserCreateFactory.java @@ -0,0 +1,47 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.factory; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; +import cn.stylefeng.roses.kernel.rule.enums.SexEnum; +import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser; +import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest; + +/** + * 用户信息填充,用于创建和修改用户时,添加一些基础信息 + * + * @author fengshuonan + * @date 2020/11/21 12:55 + */ +public class SysUserCreateFactory { + + + /** + * 编辑用户时候的用户信息填充 + * + * @author fengshuonan + * @date 2020/11/21 12:56 + */ + public static void fillUpdateInfo(SysUserRequest sysUserRequest, SysUser sysUser) { + + // 性别(M-男,F-女) + sysUser.setSex(sysUserRequest.getSex()); + + // 邮箱 + sysUser.setEmail(sysUserRequest.getEmail()); + + // 姓名 + sysUser.setRealName(sysUserRequest.getRealName()); + + // 生日 + sysUser.setBirthday(DateUtil.parse(sysUserRequest.getBirthday())); + + // 手机 + sysUser.setPhone(sysUserRequest.getPhone()); + } + + +} diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/pojo/request/SysUserRequest.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/pojo/request/SysUserRequest.java index 559f34932..d5fc6724a 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/pojo/request/SysUserRequest.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/pojo/request/SysUserRequest.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -60,13 +61,21 @@ public class SysUserRequest extends BaseRequest { /** * 密码,加密方式为BCrypt */ - @NotBlank(message = "密码,加密方式为BCrypt不能为空", groups = {add.class}) + @NotBlank(message = "密码,加密方式为BCrypt不能为空", groups = {add.class,updatePwd.class}) @ChineseDescription("密码,加密方式为BCrypt") private String password; + /** + * 新密码 + */ + @NotBlank(message = "新密码不能为空", groups = {updatePwd.class}) + @ChineseDescription("新密码") + private String newPassword; + /** * 头像,存的为文件id */ + @NotNull(message = "头像不能为空", groups = {updateAvatar.class}) @ChineseDescription("头像,存的为文件id") private Long avatar; @@ -79,13 +88,14 @@ public class SysUserRequest extends BaseRequest { /** * 性别:M-男,F-女 */ - @NotBlank(message = "性别:M-男,F-女不能为空", groups = {add.class, edit.class}) + @NotBlank(message = "性别:M-男,F-女不能为空", groups = {add.class, edit.class,updateInfo.class}) @ChineseDescription("性别:M-男,F-女") private String sex; /** * 邮箱 */ + @Email(message = "邮箱格式错误", groups = {updateInfo.class}) @ChineseDescription("邮箱") private String email; @@ -158,4 +168,21 @@ public class SysUserRequest extends BaseRequest { public @interface resetPassword { } + /** + * 参数校验分组:更新信息 + */ + public @interface updateInfo { + } + + /** + * 参数校验分组:修改密码 + */ + public @interface updatePwd { + } + + /** + * 参数校验分组:修改头像 + */ + public @interface updateAvatar { + } } diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java index 4c44b1da1..bf4b7b038 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java @@ -94,5 +94,32 @@ public interface SysUserService extends IService { * @since 2023/6/12 14:55 */ void resetPassword(SysUserRequest sysUserRequest); + + /** + * 更新用户信息(一般用于更新个人信息) + * + * @param sysUserRequest 请求参数封装 + * @author fengshuonan + * @date 2020/11/21 12:32 + */ + void editInfo(SysUserRequest sysUserRequest); + + /** + * 修改密码 + * + * @param sysUserRequest 请求参数封装 + * @author fengshuonan + * @date 2020/11/21 14:26 + */ + void editPassword(SysUserRequest sysUserRequest); + + /** + * 修改头像 + * + * @param sysUserRequest 修改头像参数 + * @author luojie + * @date 2020/11/6 13:47 + */ + void editAvatar(SysUserRequest sysUserRequest); } \ No newline at end of file diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java index 7f3110634..475a44ba1 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java @@ -4,7 +4,9 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; +import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; @@ -18,6 +20,7 @@ import cn.stylefeng.roses.kernel.sys.api.expander.SysConfigExpander; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser; import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.user.factory.SysUserCreateFactory; import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserMapper; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserOrgService; @@ -262,4 +265,78 @@ public class SysUserServiceImpl extends ServiceImpl impl } } + @Override + public void editInfo(SysUserRequest sysUserRequest) { + + // 获取当前登录用户的id + sysUserRequest.setUserId(LoginContext.me().getLoginUser().getUserId()); + SysUser sysUser = this.querySysUser(sysUserRequest); + + // 填充更新用户的信息 + SysUserCreateFactory.fillUpdateInfo(sysUserRequest, sysUser); + + this.updateById(sysUser); + + // 清除缓存中的用户信息 + //sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); + + + } + + @Override + public void editPassword(SysUserRequest sysUserRequest) { + + + // 获取当前用户的userId + LoginUser loginUser = LoginContext.me().getLoginUser(); + sysUserRequest.setUserId(loginUser.getUserId()); + + SysUser sysUser = this.querySysUser(sysUserRequest); + + // 新密码与原密码相同 + if (sysUserRequest.getNewPassword().equals(sysUserRequest.getPassword())) { + throw new ServiceException(SysUserExceptionEnum.USER_PWD_REPEAT); + } + + // 原密码错误 + if (!passwordStoredEncryptApi.checkPassword(sysUserRequest.getPassword(), sysUser.getPassword())) { + throw new ServiceException(SysUserExceptionEnum.USER_PWD_ERROR); + } + + sysUser.setPassword(passwordStoredEncryptApi.encrypt(sysUserRequest.getNewPassword())); + this.updateById(sysUser); + + // 清除缓存中的用户信息 + //sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); + + + } + + @Override + public void editAvatar(SysUserRequest sysUserRequest) { + + + // 新头像文件id + Long fileId = sysUserRequest.getAvatar(); + + // 从当前用户获取用户id + LoginUser loginUser = LoginContext.me().getLoginUser(); + sysUserRequest.setUserId(loginUser.getUserId()); + + // 更新用户头像 + SysUser sysUser = this.querySysUser(sysUserRequest); + sysUser.setAvatar(fileId); + this.updateById(sysUser); + + // 更新当前用户的session信息 + //SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); + //simpleUserInfo.setAvatar(fileId); + //sessionManagerApi.updateSession(LoginContext.me().getToken(), loginUser); + + // 清除缓存中的用户信息 + //sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); + + + } + } \ No newline at end of file