Commit 61c24c0aa7fd1b4640b8f1feeaa1d81d0214fc3a
1 parent
e4bda22b
设置 事务 rollback 属性
增加 个人信息设置 功能 增加 个人信息设置 功能
Showing
14 changed files
with
97 additions
and
110 deletions
src/main/java/cn/iocoder/dashboard/modules/infra/service/job/impl/InfJobServiceImpl.java
| ... | ... | @@ -41,7 +41,7 @@ public class InfJobServiceImpl implements InfJobService { |
| 41 | 41 | private SchedulerManager schedulerManager; |
| 42 | 42 | |
| 43 | 43 | @Override |
| 44 | - @Transactional | |
| 44 | + @Transactional(rollbackFor = Exception.class) | |
| 45 | 45 | public Long createJob(InfJobCreateReqVO createReqVO) throws SchedulerException { |
| 46 | 46 | validateCronExpression(createReqVO.getCronExpression()); |
| 47 | 47 | // 校验唯一性 |
| ... | ... | @@ -66,7 +66,7 @@ public class InfJobServiceImpl implements InfJobService { |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | 68 | @Override |
| 69 | - @Transactional | |
| 69 | + @Transactional(rollbackFor = Exception.class) | |
| 70 | 70 | public void updateJob(InfJobUpdateReqVO updateReqVO) throws SchedulerException { |
| 71 | 71 | validateCronExpression(updateReqVO.getCronExpression()); |
| 72 | 72 | // 校验存在 |
| ... | ... | @@ -86,7 +86,7 @@ public class InfJobServiceImpl implements InfJobService { |
| 86 | 86 | } |
| 87 | 87 | |
| 88 | 88 | @Override |
| 89 | - @Transactional | |
| 89 | + @Transactional(rollbackFor = Exception.class) | |
| 90 | 90 | public void updateJobStatus(Long id, Integer status) throws SchedulerException { |
| 91 | 91 | // 校验 status |
| 92 | 92 | if (!containsAny(status, InfJobStatusEnum.NORMAL.getStatus(), InfJobStatusEnum.STOP.getStatus())) { |
| ... | ... | @@ -120,7 +120,7 @@ public class InfJobServiceImpl implements InfJobService { |
| 120 | 120 | } |
| 121 | 121 | |
| 122 | 122 | @Override |
| 123 | - @Transactional | |
| 123 | + @Transactional(rollbackFor = Exception.class) | |
| 124 | 124 | public void deleteJob(Long id) throws SchedulerException { |
| 125 | 125 | // 校验存在 |
| 126 | 126 | InfJobDO job = this.validateJobExists(id); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/SysUserController.java
| ... | ... | @@ -40,8 +40,8 @@ public class SysUserController { |
| 40 | 40 | @Resource |
| 41 | 41 | private SysDeptService deptService; |
| 42 | 42 | |
| 43 | - @ApiOperation("获得用户分页列表") | |
| 44 | 43 | @GetMapping("/page") |
| 44 | + @ApiOperation("获得用户分页列表") | |
| 45 | 45 | @PreAuthorize("@ss.hasPermission('system:user:list')") |
| 46 | 46 | public CommonResult<PageResult<SysUserPageItemRespVO>> pageUsers(@Validated SysUserPageReqVO reqVO) { |
| 47 | 47 | // 获得用户分页列表 |
| ... | ... | @@ -66,9 +66,9 @@ public class SysUserController { |
| 66 | 66 | /** |
| 67 | 67 | * 根据用户编号获取详细信息 |
| 68 | 68 | */ |
| 69 | + @GetMapping("/get") | |
| 69 | 70 | @ApiOperation("获得用户详情") |
| 70 | 71 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| 71 | - @GetMapping("/get") | |
| 72 | 72 | // @PreAuthorize("@ss.hasPermi('system:user:query')") |
| 73 | 73 | public CommonResult<SysUserRespVO> getInfo(@RequestParam("id") Long id) { |
| 74 | 74 | return success(SysUserConvert.INSTANCE.convert(userService.getUser(id))); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/SysUserProfileController.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.controller.user; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | |
| 3 | 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 4 | -import cn.iocoder.dashboard.framework.security.core.LoginUser; | |
| 5 | 5 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileRespVO; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO; |
| ... | ... | @@ -12,8 +12,10 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 13 | 13 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| 14 | 14 | import cn.iocoder.dashboard.modules.system.service.user.SysUserService; |
| 15 | +import cn.iocoder.dashboard.util.collection.CollectionUtils; | |
| 15 | 16 | import io.swagger.annotations.Api; |
| 16 | 17 | import io.swagger.annotations.ApiOperation; |
| 18 | +import lombok.extern.slf4j.Slf4j; | |
| 17 | 19 | import org.springframework.web.bind.annotation.GetMapping; |
| 18 | 20 | import org.springframework.web.bind.annotation.PostMapping; |
| 19 | 21 | import org.springframework.web.bind.annotation.RequestBody; |
| ... | ... | @@ -24,15 +26,19 @@ import org.springframework.web.multipart.MultipartFile; |
| 24 | 26 | |
| 25 | 27 | import javax.annotation.Resource; |
| 26 | 28 | import javax.servlet.http.HttpServletRequest; |
| 29 | +import java.io.IOException; | |
| 27 | 30 | import java.util.List; |
| 28 | -import java.util.stream.Collectors; | |
| 31 | + | |
| 32 | +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | |
| 33 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.FILE_IS_EMPTY; | |
| 29 | 34 | |
| 30 | 35 | /** |
| 31 | 36 | * @author niudehua |
| 32 | 37 | */ |
| 33 | -@Api(tags = "用户个人中心") | |
| 34 | 38 | @RestController |
| 35 | 39 | @RequestMapping("/system/user/profile") |
| 40 | +@Api(tags = "用户个人中心") | |
| 41 | +@Slf4j | |
| 36 | 42 | public class SysUserProfileController { |
| 37 | 43 | |
| 38 | 44 | @Resource |
| ... | ... | @@ -42,58 +48,33 @@ public class SysUserProfileController { |
| 42 | 48 | @Resource |
| 43 | 49 | private SysRoleService roleService; |
| 44 | 50 | |
| 45 | - /** | |
| 46 | - * 个人信息 | |
| 47 | - * | |
| 48 | - * @return 个人信息详情 | |
| 49 | - */ | |
| 50 | - @ApiOperation("获得登录用户信息") | |
| 51 | 51 | @GetMapping("/get") |
| 52 | + @ApiOperation("获得登录用户信息") | |
| 52 | 53 | public CommonResult<SysUserProfileRespVO> profile() { |
| 53 | - LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); | |
| 54 | 54 | // 获取用户信息 |
| 55 | - assert loginUser != null; | |
| 56 | - Long userId = loginUser.getId(); | |
| 55 | + Long userId = SecurityFrameworkUtils.getLoginUserId(); | |
| 57 | 56 | SysUserDO user = userService.getUser(userId); |
| 58 | 57 | SysUserProfileRespVO userProfileRespVO = SysUserConvert.INSTANCE.convert03(user); |
| 59 | 58 | List<SysRoleDO> userRoles = roleService.listRolesFromCache(permissionService.listUserRoleIs(userId)); |
| 60 | - userProfileRespVO.setRoles(userRoles.stream().map(SysUserConvert.INSTANCE::convert).collect(Collectors.toSet())); | |
| 61 | - return CommonResult.success(userProfileRespVO); | |
| 59 | + userProfileRespVO.setRoles(CollectionUtils.convertSet(userRoles, SysUserConvert.INSTANCE::convert)); | |
| 60 | + return success(userProfileRespVO); | |
| 62 | 61 | } |
| 63 | 62 | |
| 64 | - /** | |
| 65 | - * 修改个人信息 | |
| 66 | - * | |
| 67 | - * @param reqVO 个人信息更新 reqVO | |
| 68 | - * @param request HttpServletRequest | |
| 69 | - * @return 修改结果 | |
| 70 | - */ | |
| 71 | - @ApiOperation("修改用户个人信息") | |
| 72 | 63 | @PostMapping("/update") |
| 64 | + @ApiOperation("修改用户个人信息") | |
| 73 | 65 | public CommonResult<Boolean> updateProfile(@RequestBody SysUserProfileUpdateReqVO reqVO, HttpServletRequest request) { |
| 74 | - if (userService.updateUserProfile(reqVO) > 0) { | |
| 75 | - SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request); | |
| 76 | - return CommonResult.success(true); | |
| 77 | - } | |
| 78 | - return CommonResult.success(false); | |
| 66 | + userService.updateUserProfile(reqVO); | |
| 67 | + SecurityFrameworkUtils.setLoginUser(SysAuthConvert.INSTANCE.convert(reqVO), request); | |
| 68 | + return success(true); | |
| 79 | 69 | } |
| 80 | 70 | |
| 81 | - /** | |
| 82 | - * 上传用户个人头像 | |
| 83 | - * | |
| 84 | - * @param file 头像文件 | |
| 85 | - * @return 上传结果 | |
| 86 | - */ | |
| 71 | + @PostMapping("/upload-avatar") | |
| 87 | 72 | @ApiOperation("上传用户个人头像") |
| 88 | - @PostMapping("/uploadAvatar") | |
| 89 | - public CommonResult<Boolean> uploadAvatar(@RequestParam("avatarFile") MultipartFile file) { | |
| 90 | - if (!file.isEmpty()) { | |
| 91 | - LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); | |
| 92 | - assert loginUser != null; | |
| 93 | - if (userService.updateAvatar(loginUser.getId(), file) > 0) { | |
| 94 | - return CommonResult.success(true); | |
| 95 | - } | |
| 73 | + public CommonResult<Boolean> uploadAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { | |
| 74 | + if (file.isEmpty()) { | |
| 75 | + throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); | |
| 96 | 76 | } |
| 97 | - return CommonResult.success(false); | |
| 77 | + userService.updateAvatar(SecurityFrameworkUtils.getLoginUserId(), file.getInputStream()); | |
| 78 | + return success(true); | |
| 98 | 79 | } |
| 99 | 80 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserProfileRespVO.java
| ... | ... | @@ -17,11 +17,6 @@ import java.util.Set; |
| 17 | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | 18 | public class SysUserProfileRespVO extends SysUserRespVO { |
| 19 | 19 | |
| 20 | - @ApiModelProperty(value = "旧密码", required = true, example = "123456") | |
| 21 | - private String oldPassword; | |
| 22 | - | |
| 23 | - @ApiModelProperty(value = "新密码", required = true, example = "123456") | |
| 24 | - private String newPassword; | |
| 25 | 20 | /** |
| 26 | 21 | * 所属角色 |
| 27 | 22 | */ | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/user/vo/user/SysUserProfileUpdateReqVO.java
| ... | ... | @@ -3,19 +3,38 @@ package cn.iocoder.dashboard.modules.system.controller.user.vo.user; |
| 3 | 3 | import io.swagger.annotations.ApiModel; |
| 4 | 4 | import io.swagger.annotations.ApiModelProperty; |
| 5 | 5 | import lombok.Data; |
| 6 | -import lombok.EqualsAndHashCode; | |
| 7 | 6 | |
| 7 | +import javax.validation.constraints.Email; | |
| 8 | 8 | import javax.validation.constraints.NotNull; |
| 9 | +import javax.validation.constraints.Size; | |
| 9 | 10 | |
| 10 | -@ApiModel("用户更新 Request VO") | |
| 11 | +@ApiModel("用户个人信息更新 Request VO") | |
| 11 | 12 | @Data |
| 12 | -@EqualsAndHashCode(callSuper = true) | |
| 13 | -public class SysUserProfileUpdateReqVO extends SysUserBaseVO { | |
| 13 | +public class SysUserProfileUpdateReqVO { | |
| 14 | 14 | |
| 15 | 15 | @ApiModelProperty(value = "用户编号", required = true, example = "1024") |
| 16 | 16 | @NotNull(message = "用户编号不能为空") |
| 17 | 17 | private Long id; |
| 18 | 18 | |
| 19 | + @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") | |
| 20 | + @Size(max = 30, message = "用户昵称长度不能超过30个字符") | |
| 21 | + private String nickname; | |
| 22 | + | |
| 23 | + @ApiModelProperty(value = "用户邮箱", example = "yudao@iocoder.cn") | |
| 24 | + @Email(message = "邮箱格式不正确") | |
| 25 | + @Size(max = 50, message = "邮箱长度不能超过50个字符") | |
| 26 | + private String email; | |
| 27 | + | |
| 28 | + @ApiModelProperty(value = "手机号码", example = "15601691300") | |
| 29 | + @Size(max = 11, message = "手机号码长度不能超过11个字符") | |
| 30 | + private String mobile; | |
| 31 | + | |
| 32 | + @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类") | |
| 33 | + private Integer sex; | |
| 34 | + | |
| 35 | + @ApiModelProperty(value = "用户头像", example = "http://www.iocoder.cn/xxx.png") | |
| 36 | + private String avatar; | |
| 37 | + | |
| 19 | 38 | @ApiModelProperty(value = "旧密码", required = true, example = "123456") |
| 20 | 39 | private String oldPassword; |
| 21 | 40 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| ... | ... | @@ -76,5 +76,6 @@ public interface SysErrorCodeConstants { |
| 76 | 76 | // ========== 文件 1002009000 ========== |
| 77 | 77 | ErrorCode FILE_PATH_EXISTS = new ErrorCode(1002009001, "文件路径已经存在"); |
| 78 | 78 | ErrorCode FILE_UPLOAD_FAILED = new ErrorCode(1002009002, "文件上传失败"); |
| 79 | + ErrorCode FILE_IS_EMPTY= new ErrorCode(1002009003, "文件为空"); | |
| 79 | 80 | |
| 80 | 81 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
| ... | ... | @@ -206,7 +206,7 @@ public class SysMenuServiceImpl implements SysMenuService { |
| 206 | 206 | * |
| 207 | 207 | * @param menuId 菜单编号 |
| 208 | 208 | */ |
| 209 | - @Transactional | |
| 209 | + @Transactional(rollbackFor = Exception.class) | |
| 210 | 210 | public void deleteMenu(Long menuId) { |
| 211 | 211 | // 校验更新的菜单是否存在 |
| 212 | 212 | if (menuMapper.selectById(menuId) == null) { | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
| ... | ... | @@ -176,7 +176,7 @@ public class SysPermissionServiceImpl implements SysPermissionService { |
| 176 | 176 | } |
| 177 | 177 | |
| 178 | 178 | @Override |
| 179 | - @Transactional | |
| 179 | + @Transactional(rollbackFor = Exception.class) | |
| 180 | 180 | public void assignRoleMenu(Long roleId, Set<Long> menuIds) { |
| 181 | 181 | // 获得角色拥有菜单编号 |
| 182 | 182 | Set<Long> dbMenuIds = CollectionUtils.convertSet(roleMenuMapper.selectListByRoleId(roleId), | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| ... | ... | @@ -174,7 +174,7 @@ public class SysRoleServiceImpl implements SysRoleService { |
| 174 | 174 | } |
| 175 | 175 | |
| 176 | 176 | @Override |
| 177 | - @Transactional | |
| 177 | + @Transactional(rollbackFor = Exception.class) | |
| 178 | 178 | public void deleteRole(Long id) { |
| 179 | 179 | // 校验是否可以更新 |
| 180 | 180 | this.checkUpdateRole(id); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserService.java
| ... | ... | @@ -11,8 +11,8 @@ import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfil |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 13 | 13 | import cn.iocoder.dashboard.util.collection.CollectionUtils; |
| 14 | -import org.springframework.web.multipart.MultipartFile; | |
| 15 | 14 | |
| 15 | +import java.io.InputStream; | |
| 16 | 16 | import java.util.Collection; |
| 17 | 17 | import java.util.HashMap; |
| 18 | 18 | import java.util.List; |
| ... | ... | @@ -115,7 +115,7 @@ public interface SysUserService { |
| 115 | 115 | * @param reqVO 用户个人信息 |
| 116 | 116 | * @return 修改结果 |
| 117 | 117 | */ |
| 118 | - int updateUserProfile(SysUserProfileUpdateReqVO reqVO); | |
| 118 | + void updateUserProfile(SysUserProfileUpdateReqVO reqVO); | |
| 119 | 119 | |
| 120 | 120 | /** |
| 121 | 121 | * 删除用户 |
| ... | ... | @@ -154,9 +154,8 @@ public interface SysUserService { |
| 154 | 154 | * |
| 155 | 155 | * @param id 用户 id |
| 156 | 156 | * @param avatarFile 头像文件 |
| 157 | - * @return 更新结果 | |
| 158 | 157 | */ |
| 159 | - int updateAvatar(Long id, MultipartFile avatarFile); | |
| 158 | + void updateAvatar(Long id, InputStream avatarFile); | |
| 160 | 159 | |
| 161 | 160 | // |
| 162 | 161 | // /** | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
| ... | ... | @@ -2,11 +2,13 @@ package cn.iocoder.dashboard.modules.system.service.user; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.io.IoUtil; |
| 5 | +import cn.hutool.core.util.IdUtil; | |
| 5 | 6 | import cn.hutool.core.util.StrUtil; |
| 6 | 7 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 7 | 8 | import cn.iocoder.dashboard.common.exception.ServiceException; |
| 8 | 9 | import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; |
| 9 | 10 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 11 | +import cn.iocoder.dashboard.modules.infra.service.file.InfFileService; | |
| 10 | 12 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO; |
| 11 | 13 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO; |
| 12 | 14 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO; |
| ... | ... | @@ -19,7 +21,6 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; |
| 19 | 21 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO; |
| 20 | 22 | import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; |
| 21 | 23 | import cn.iocoder.dashboard.modules.system.dal.mysql.user.SysUserMapper; |
| 22 | -import cn.iocoder.dashboard.modules.system.service.common.SysFileService; | |
| 23 | 24 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 24 | 25 | import cn.iocoder.dashboard.modules.system.service.dept.SysPostService; |
| 25 | 26 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| ... | ... | @@ -28,10 +29,9 @@ import lombok.extern.slf4j.Slf4j; |
| 28 | 29 | import org.springframework.security.crypto.password.PasswordEncoder; |
| 29 | 30 | import org.springframework.stereotype.Service; |
| 30 | 31 | import org.springframework.transaction.annotation.Transactional; |
| 31 | -import org.springframework.web.multipart.MultipartFile; | |
| 32 | 32 | |
| 33 | 33 | import javax.annotation.Resource; |
| 34 | -import java.io.IOException; | |
| 34 | +import java.io.InputStream; | |
| 35 | 35 | import java.util.ArrayList; |
| 36 | 36 | import java.util.Collection; |
| 37 | 37 | import java.util.Collections; |
| ... | ... | @@ -66,20 +66,7 @@ public class SysUserServiceImpl implements SysUserService { |
| 66 | 66 | private PasswordEncoder passwordEncoder; |
| 67 | 67 | |
| 68 | 68 | @Resource |
| 69 | - private SysFileService fileService; | |
| 70 | - | |
| 71 | -// /** | |
| 72 | -// * 根据条件分页查询用户列表 | |
| 73 | -// * | |
| 74 | -// * @param user 用户信息 | |
| 75 | -// * @return 用户信息集合信息 | |
| 76 | -// */ | |
| 77 | -// @Override | |
| 78 | -// @DataScope(deptAlias = "d", userAlias = "u") | |
| 79 | -// public List<SysUser> selectUserList(SysUser user) | |
| 80 | -// { | |
| 81 | -// return userMapper.selectUserList(user); | |
| 82 | -// } | |
| 69 | + private InfFileService fileService; | |
| 83 | 70 | |
| 84 | 71 | @Override |
| 85 | 72 | public SysUserDO getUserByUserName(String username) { |
| ... | ... | @@ -156,20 +143,22 @@ public class SysUserServiceImpl implements SysUserService { |
| 156 | 143 | } |
| 157 | 144 | |
| 158 | 145 | @Override |
| 159 | - public int updateUserProfile(SysUserProfileUpdateReqVO reqVO) { | |
| 146 | + public void updateUserProfile(SysUserProfileUpdateReqVO reqVO) { | |
| 160 | 147 | // 校验正确性 |
| 161 | - this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), | |
| 162 | - reqVO.getDeptId(), reqVO.getPostIds()); | |
| 163 | - | |
| 148 | + this.checkUserExists(reqVO.getId()); | |
| 149 | + this.checkEmailUnique(reqVO.getId(), reqVO.getEmail()); | |
| 150 | + this.checkMobileUnique(reqVO.getId(), reqVO.getMobile()); | |
| 151 | + // 校验填写密码 | |
| 152 | + String encode = null; | |
| 153 | + if (this.checkOldPassword(reqVO.getId(), reqVO.getOldPassword(), reqVO.getNewPassword())) { | |
| 154 | + // 更新密码 | |
| 155 | + encode = passwordEncoder.encode(reqVO.getNewPassword()); | |
| 156 | + } | |
| 164 | 157 | SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO); |
| 165 | - // 校验旧密码 | |
| 166 | - if (checkOldPassword(reqVO.getId(), reqVO.getOldPassword(), reqVO.getNewPassword())) { | |
| 167 | - return userMapper.updateById(updateObj); | |
| 158 | + if (StrUtil.isNotBlank(encode)) { | |
| 159 | + updateObj.setPassword(encode); | |
| 168 | 160 | } |
| 169 | - | |
| 170 | - String encode = passwordEncoder.encode(reqVO.getNewPassword()); | |
| 171 | - updateObj.setPassword(encode); | |
| 172 | - return userMapper.updateById(updateObj); | |
| 161 | + userMapper.updateById(updateObj); | |
| 173 | 162 | } |
| 174 | 163 | |
| 175 | 164 | @Override |
| ... | ... | @@ -314,9 +303,17 @@ public class SysUserServiceImpl implements SysUserService { |
| 314 | 303 | }); |
| 315 | 304 | } |
| 316 | 305 | |
| 306 | + /** | |
| 307 | + * 校验旧密码、新密码 | |
| 308 | + * | |
| 309 | + * @param id 用户 id | |
| 310 | + * @param oldPassword 旧密码 | |
| 311 | + * @param newPassword 新密码 | |
| 312 | + * @return 校验结果 | |
| 313 | + */ | |
| 317 | 314 | private boolean checkOldPassword(Long id, String oldPassword, String newPassword) { |
| 318 | 315 | if (id == null || StrUtil.isBlank(oldPassword) || StrUtil.isBlank(newPassword)) { |
| 319 | - return true; | |
| 316 | + return false; | |
| 320 | 317 | } |
| 321 | 318 | SysUserDO user = userMapper.selectById(id); |
| 322 | 319 | if (user == null) { |
| ... | ... | @@ -326,11 +323,11 @@ public class SysUserServiceImpl implements SysUserService { |
| 326 | 323 | if (!passwordEncoder.matches(oldPassword, user.getPassword())) { |
| 327 | 324 | throw ServiceExceptionUtil.exception(USER_PASSWORD_FAILED); |
| 328 | 325 | } |
| 329 | - return false; | |
| 326 | + return true; | |
| 330 | 327 | } |
| 331 | 328 | |
| 332 | 329 | @Override |
| 333 | - @Transactional // 添加事务,异常则回滚所有导入 | |
| 330 | + @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 | |
| 334 | 331 | public SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport) { |
| 335 | 332 | if (CollUtil.isEmpty(importUsers)) { |
| 336 | 333 | throw ServiceExceptionUtil.exception(USER_IMPORT_LIST_IS_EMPTY); |
| ... | ... | @@ -368,20 +365,15 @@ public class SysUserServiceImpl implements SysUserService { |
| 368 | 365 | } |
| 369 | 366 | |
| 370 | 367 | @Override |
| 371 | - public int updateAvatar(Long id, MultipartFile avatarFile) { | |
| 368 | + public void updateAvatar(Long id, InputStream avatarFile) { | |
| 372 | 369 | this.checkUserExists(id); |
| 373 | 370 | // 存储文件 |
| 374 | - String avatar = null; | |
| 375 | - try { | |
| 376 | - avatar = fileService.createFile(avatarFile.getOriginalFilename(), IoUtil.readBytes(avatarFile.getInputStream())); | |
| 377 | - } catch (IOException e) { | |
| 378 | - throw ServiceExceptionUtil.exception(FILE_UPLOAD_FAILED); | |
| 379 | - } | |
| 371 | + String avatar = fileService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); | |
| 380 | 372 | // 更新路径 |
| 381 | 373 | SysUserDO sysUserDO = new SysUserDO(); |
| 382 | 374 | sysUserDO.setId(id); |
| 383 | 375 | sysUserDO.setAvatar(avatar); |
| 384 | - return userMapper.updateById(sysUserDO); | |
| 376 | + userMapper.updateById(sysUserDO); | |
| 385 | 377 | } |
| 386 | 378 | |
| 387 | 379 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
| ... | ... | @@ -109,7 +109,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { |
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | @Override |
| 112 | - @Transactional | |
| 112 | + @Transactional(rollbackFor = Exception.class) | |
| 113 | 113 | public List<Long> createCodegenListFromDB(List<String> tableNames) { |
| 114 | 114 | List<Long> ids = new ArrayList<>(tableNames.size()); |
| 115 | 115 | // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量 |
| ... | ... | @@ -118,7 +118,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { |
| 118 | 118 | } |
| 119 | 119 | |
| 120 | 120 | @Override |
| 121 | - @Transactional | |
| 121 | + @Transactional(rollbackFor = Exception.class) | |
| 122 | 122 | public void updateCodegen(ToolCodegenUpdateReqVO updateReqVO) { |
| 123 | 123 | // 校验是否已经存在 |
| 124 | 124 | if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) { |
| ... | ... | @@ -134,7 +134,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { |
| 134 | 134 | } |
| 135 | 135 | |
| 136 | 136 | @Override |
| 137 | - @Transactional | |
| 137 | + @Transactional(rollbackFor = Exception.class) | |
| 138 | 138 | public void syncCodegenFromDB(Long tableId) { |
| 139 | 139 | // 校验是否已经存在 |
| 140 | 140 | ToolCodegenTableDO table = codegenTableMapper.selectById(tableId); |
| ... | ... | @@ -149,7 +149,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | @Override |
| 152 | - @Transactional | |
| 152 | + @Transactional(rollbackFor = Exception.class) | |
| 153 | 153 | public void syncCodegenFromSQL(Long tableId, String sql) { |
| 154 | 154 | // 校验是否已经存在 |
| 155 | 155 | ToolCodegenTableDO table = codegenTableMapper.selectById(tableId); |
| ... | ... | @@ -201,7 +201,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { |
| 201 | 201 | } |
| 202 | 202 | |
| 203 | 203 | @Override |
| 204 | - @Transactional | |
| 204 | + @Transactional(rollbackFor = Exception.class) | |
| 205 | 205 | public void deleteCodegen(Long tableId) { |
| 206 | 206 | // 校验是否已经存在 |
| 207 | 207 | if (codegenTableMapper.selectById(tableId) == null) { | ... | ... |
src/main/resources/application-dev.yaml
src/main/resources/application-local.yaml