1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| @Override @Transactional public ResponseResult updateUserProfile(UpdateUserProfileDto updateUserProfileDto) { Long currentUserId = SecurityUtils.getUserId(); if (currentUserId == null) { return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN); }
if (!StringUtils.hasText(updateUserProfileDto.getNickname())) { return ResponseResult.errorResult(AppHttpCodeEnum.NICKNAME_NOT_NULL, "昵称不能为空"); }
String safeNickname = XssUtils.escapeHtml(updateUserProfileDto.getNickname()); updateUserProfileDto.setNickname(safeNickname);
if (sensitiveUtilService.checkSensitiveWordsSimple(updateUserProfileDto.getNickname())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "昵称包含敏感词,请修改后重试"); }
SysUser oldSysUser = getById(currentUserId);
String avatar = updateUserProfileDto.getAvatar(); if (StringUtils.hasText(avatar) && avatar.contains("temp/")) { UploadFileMetaVo uploadFileMetaVo = ossFileService.moveTempToFormal(avatar); avatar = uploadFileMetaVo.getUrl();
if (StringUtils.hasText(avatar)) { LambdaQueryWrapper<SysFile> fileQueryWrapper = new LambdaQueryWrapper<>(); String fileSource = "用户“" + oldSysUser.getUsername() + "”的头像图片"; fileQueryWrapper.eq(SysFile::getCreateBy, currentUserId) .eq(SysFile::getFileSource, fileSource) .last("LIMIT 1"); SysFile avatarFile = sysFileService.getOne(fileQueryWrapper);
if (avatarFile == null) { avatarFile = new SysFile(); avatarFile.setName(uploadFileMetaVo.getName()); avatarFile.setFileSource(fileSource); avatarFile.setFilePath(uploadFileMetaVo.getFilePath()); avatarFile.setUrl(uploadFileMetaVo.getUrl()); avatarFile.setSize(uploadFileMetaVo.getSize()); avatarFile.setMimeType(uploadFileMetaVo.getMimeType()); avatarFile.setCreateBy(currentUserId); sysFileService.save(avatarFile); } else { avatarFile.setName(uploadFileMetaVo.getName()); avatarFile.setFileSource(fileSource); avatarFile.setFilePath(uploadFileMetaVo.getFilePath()); avatarFile.setUrl(uploadFileMetaVo.getUrl()); avatarFile.setSize(uploadFileMetaVo.getSize()); avatarFile.setMimeType(uploadFileMetaVo.getMimeType()); avatarFile.setUpdateBy(currentUserId); sysFileService.updateById(avatarFile); } } }
String oldAvatar = oldSysUser.getAvatar(); if (StringUtils.hasText(avatar) && StringUtils.hasText(oldAvatar) && !avatar.equals(oldAvatar)) { try { ossFileService.deleteFileByUrl(oldAvatar); log.info("从oss中删除旧头像成功: {}", oldAvatar); } catch (Exception e) { log.warn("从oss中删除旧头像失败: {}, 错误: {}", oldAvatar, e.getMessage()); } }
LambdaUpdateWrapper<SysUser> wrapper = new LambdaUpdateWrapper<SysUser>() .eq(SysUser::getId, currentUserId) .set(SysUser::getNickname, updateUserProfileDto.getNickname()) .set(SysUser::getSex, updateUserProfileDto.getSex()) .set(SysUser::getAvatar, avatar);
boolean success = update(null, wrapper); if (!success) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "更新用户信息失败"); }
boolean avatarChanged = !Objects.equals(avatar, oldSysUser.getAvatar()); boolean nicknameChanged = !Objects.equals(updateUserProfileDto.getNickname(), oldSysUser.getNickname());
if (avatarChanged || nicknameChanged) { LambdaUpdateWrapper<Comment> commentWrapper = new LambdaUpdateWrapper<Comment>() .eq(Comment::getUserId, currentUserId);
if (avatarChanged) { commentWrapper.set(Comment::getAvatar, avatar); } if (nicknameChanged) { commentWrapper.set(Comment::getNickname, updateUserProfileDto.getNickname()); }
commentMapper.update(null, commentWrapper); }
return ResponseResult.okResult(); }
|