diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java index 781c1da..01020f9 100644 --- a/src/main/java/com/bao/dating/controller/UserController.java +++ b/src/main/java/com/bao/dating/controller/UserController.java @@ -4,6 +4,7 @@ import com.bao.dating.anno.Log; import com.bao.dating.common.Result; import com.bao.dating.common.ResultCode; import com.bao.dating.context.UserContext; +import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.vo.UserInfoVO; diff --git a/src/main/java/com/bao/dating/pojo/dto/UserInfoUpdateDTO.java b/src/main/java/com/bao/dating/pojo/dto/UserInfoUpdateDTO.java new file mode 100644 index 0000000..97dd6e9 --- /dev/null +++ b/src/main/java/com/bao/dating/pojo/dto/UserInfoUpdateDTO.java @@ -0,0 +1,25 @@ +package com.bao.dating.pojo.dto; + +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 用户信息更新数据传输对象 + * @author KilLze + */ +@Data +public class UserInfoUpdateDTO { + private Long userId; + private String userName; + private String nickname; + private String avatarUrl; + private String backgroundUrl; + private Integer gender; + private LocalDate birthday; + private List hobbies; + private String signature; + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java index 9881b4c..8e29b05 100644 --- a/src/main/java/com/bao/dating/service/UserService.java +++ b/src/main/java/com/bao/dating/service/UserService.java @@ -1,6 +1,7 @@ package com.bao.dating.service; import com.bao.dating.pojo.dto.UserInfoDTO; +import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.entity.User; import com.bao.dating.pojo.vo.UserInfoVO; diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java index 0c892ce..5437ad3 100644 --- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java @@ -11,6 +11,7 @@ import com.bao.dating.common.result.GreenAuditResult; import com.bao.dating.config.RedisConfig; import com.bao.dating.context.UserContext; import com.bao.dating.mapper.UserMapper; +import com.bao.dating.pojo.dto.UserInfoDTO; import com.bao.dating.pojo.dto.UserInfoUpdateDTO; import com.bao.dating.pojo.dto.UserLoginDTO; import com.bao.dating.pojo.entity.User; @@ -241,6 +242,94 @@ public class UserServiceImpl implements UserService { } } + + /** + * 更新用户信息 + * @param userInfoUpdateDTO + * @return + */ + @Override + public UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO) { + Long userId = userInfoUpdateDTO.getUserId(); + User user = userMapper.selectByUserId(userId); + if (user == null) { + throw new RuntimeException("用户不存在"); + } + + // 将需要审核的内容合并成一个文本,用于减少调用次数 + StringBuilder textBuilder = new StringBuilder(); + + if (userInfoUpdateDTO.getNickname() != null && !userInfoUpdateDTO.getNickname().isEmpty()) { + textBuilder.append(userInfoUpdateDTO.getNickname()).append(" "); + } + if (userInfoUpdateDTO.getHobbies() != null && !userInfoUpdateDTO.getHobbies().isEmpty()) { + // 将爱好列表转换为字符串,用空格分隔 + String hobbiesStr = String.join(" ", userInfoUpdateDTO.getHobbies()); + textBuilder.append(hobbiesStr).append(" "); + } + if (userInfoUpdateDTO.getSignature() != null && !userInfoUpdateDTO.getSignature().isEmpty()) { + textBuilder.append(userInfoUpdateDTO.getSignature()).append(" "); + } + // 文本审核 + if (textBuilder.length() > 0) { + Map textResult; + try { + textResult = greenTextScan.greeTextScan(textBuilder.toString()); + } catch (Exception e) { + throw new RuntimeException("用户信息文本审核失败"); + } + + String suggestion = (String) textResult.get("suggestion"); + + if (GreenAuditResult.BLOCK.equals(suggestion)) { + throw new RuntimeException("用户信息包含违规内容,修改失败"); + } + if (GreenAuditResult.REVIEW.equals(suggestion)) { + throw new RuntimeException("用户信息需要人工审核,暂无法修改"); + } + } + + // 图片审核 + List imageKeys = new ArrayList<>(); + if (userInfoUpdateDTO.getAvatarUrl() != null && !userInfoUpdateDTO.getAvatarUrl().isEmpty()) { + imageKeys.add(userInfoUpdateDTO.getAvatarUrl()); + } + if (userInfoUpdateDTO.getBackgroundUrl() != null && !userInfoUpdateDTO.getBackgroundUrl().isEmpty()) { + imageKeys.add(userInfoUpdateDTO.getBackgroundUrl()); + } + if (!imageKeys.isEmpty()) { + Map imageResult; + try { + imageResult = greenImageScan.imageScan(imageKeys); + } catch (Exception e) { + throw new RuntimeException("用户图片审核失败"); + } + + String suggestion = (String) imageResult.get("suggestion"); + + if (GreenAuditResult.BLOCK.equals(suggestion)) { + throw new RuntimeException("头像或背景图不合规,修改失败"); + } + if (GreenAuditResult.REVIEW.equals(suggestion)) { + throw new RuntimeException("头像或背景图需要人工审核,暂无法修改"); + } + } + // 默认昵称兜底 + if (userInfoUpdateDTO.getNickname() == null || userInfoUpdateDTO.getNickname().trim().isEmpty()) { + userInfoUpdateDTO.setNickname(user.getUserName()); + } + userInfoUpdateDTO.setUpdatedAt(LocalDateTime.now()); + + // 更新数据库 + userMapper.updateUserInfoByUserId(userInfoUpdateDTO); + + // 封装返回结果 + User updatedUser = userMapper.selectByUserId(userInfoUpdateDTO.getUserId()); + UserInfoVO userInfoVO = new UserInfoVO(); + BeanUtils.copyProperties(updatedUser, userInfoVO); + return userInfoVO; + } + /** * 更新用户信息 *