feat: 🎸 用户信息接口,改成dto并配置字段含义

This commit is contained in:
GoCo 2025-08-15 18:10:01 +08:00
parent 960aee1b68
commit 595bd526d4
4 changed files with 102 additions and 26 deletions

View File

@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.jeecg.modules.biz.dto.TeacherInfo; import org.jeecg.modules.biz.dto.TeacherInfo;
import org.jeecg.modules.biz.dto.UserInfoResponse;
import org.jeecg.modules.biz.service.UserBizService; import org.jeecg.modules.biz.service.UserBizService;
import org.jeecg.modules.gen.userinfo.entity.UserInfo; import org.jeecg.modules.gen.userinfo.entity.UserInfo;
import org.jeecg.modules.gen.userinfo.mapper.UserInfoMapper; import org.jeecg.modules.gen.userinfo.mapper.UserInfoMapper;
@ -31,6 +32,7 @@ import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.PasswordUtil; import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RedisUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.BeanUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -138,8 +140,8 @@ public class UserBizController {
} }
@GetMapping("/info") @GetMapping("/info")
@Operation(summary = "查询用户信息") @Operation(summary = "查询用户信息", description = "通过JWT token获取当前用户的详细信息包括基本信息、角色和扩展信息")
public Result<JSONObject> queryUserInfo(HttpServletRequest request) { public Result<UserInfoResponse> queryUserInfo(HttpServletRequest request) {
try { try {
// 1. 从JWT中获取用户名 // 1. 从JWT中获取用户名
String username = JwtUtil.getUserNameByToken(request); String username = JwtUtil.getUserNameByToken(request);
@ -163,36 +165,22 @@ public class UserBizController {
); );
// 5. 构建返回结果 // 5. 构建返回结果
JSONObject result = new JSONObject(new LinkedHashMap<>()); UserInfoResponse response = new UserInfoResponse();
// 基本用户信息 // 基本用户信息
JSONObject userBasicInfo = new JSONObject(new LinkedHashMap<>()); UserInfoResponse.BaseInfo baseInfo = new UserInfoResponse.BaseInfo();
userBasicInfo.put("id", sysUser.getId()); BeanUtils.copyProperties(sysUser, baseInfo);
userBasicInfo.put("username", sysUser.getUsername()); response.setBaseInfo(baseInfo);
userBasicInfo.put("realname", sysUser.getRealname()); response.setRoles(roles);
userBasicInfo.put("avatar", sysUser.getAvatar());
userBasicInfo.put("phone", sysUser.getPhone());
userBasicInfo.put("email", sysUser.getEmail());
userBasicInfo.put("sex", sysUser.getSex());
userBasicInfo.put("birthday", sysUser.getBirthday());
userBasicInfo.put("status", sysUser.getStatus());
result.put("baseInfo", userBasicInfo);
result.put("roles", roles);
// 扩展用户信息 // 扩展用户信息
if (userInfo != null) { if (userInfo != null) {
JSONObject extendedInfo = new JSONObject(new LinkedHashMap<>()); UserInfoResponse.ExtendedInfo extendedInfo = new UserInfoResponse.ExtendedInfo();
extendedInfo.put("major", userInfo.getMajor()); BeanUtils.copyProperties(userInfo, extendedInfo);
extendedInfo.put("college", userInfo.getCollege()); response.setExtendedInfo(extendedInfo);
extendedInfo.put("education", userInfo.getEducation());
extendedInfo.put("title", userInfo.getTitle());
extendedInfo.put("tag", userInfo.getTag());
extendedInfo.put("sortOrder", userInfo.getSortOrder());
result.put("extendedInfo", extendedInfo);
} }
return Result.OK(result); return Result.OK(response);
} catch (Exception e) { } catch (Exception e) {
log.error("查询用户信息失败:" + e.getMessage(), e); log.error("查询用户信息失败:" + e.getMessage(), e);
return Result.error(500, "查询用户信息失败:" + e.getMessage()); return Result.error(500, "查询用户信息失败:" + e.getMessage());

View File

@ -1,13 +1,15 @@
package org.jeecg.modules.biz.dto; package org.jeecg.modules.biz.dto;
import org.jeecg.modules.gen.course.entity.Course; import org.jeecg.modules.gen.course.entity.Course;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List; import java.util.List;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Schema(description = "课程信息(包含讲师信息)")
public class CourseWithTeacherInfo extends Course { public class CourseWithTeacherInfo extends Course {
/**讲师信息列表*/ @Schema(description = "授课讲师列表")
private List<TeacherInfo> teacherList; private List<TeacherInfo> teacherList;
} }

View File

@ -1,13 +1,26 @@
package org.jeecg.modules.biz.dto; package org.jeecg.modules.biz.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@Data @Data
@Schema(description = "讲师信息")
public class TeacherInfo { public class TeacherInfo {
@Schema(description = "讲师ID")
private String id; private String id;
@Schema(description = "讲师姓名")
private String name; private String name;
@Schema(description = "讲师头像")
private String avatar; private String avatar;
@Schema(description = "职称")
private String title; private String title;
@Schema(description = "标签")
private String tag; private String tag;
@Schema(description = "显示顺序")
private Integer sortOrder; private Integer sortOrder;
} }

View File

@ -0,0 +1,73 @@
package org.jeecg.modules.biz.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@Schema(description = "用户信息响应对象")
public class UserInfoResponse {
@Schema(description = "用户基本信息")
private BaseInfo baseInfo;
@Schema(description = "用户角色列表")
private List<String> roles;
@Schema(description = "扩展用户信息")
private ExtendedInfo extendedInfo;
@Data
@Schema(description = "用户基本信息")
public static class BaseInfo {
@Schema(description = "用户ID")
private String id;
@Schema(description = "用户名")
private String username;
@Schema(description = "真实姓名")
private String realname;
@Schema(description = "头像")
private String avatar;
@Schema(description = "手机号")
private String phone;
@Schema(description = "邮箱")
private String email;
@Schema(description = "性别(1-男2-女)")
private Integer sex;
@Schema(description = "生日")
private Date birthday;
@Schema(description = "状态(1-正常2-冻结)")
private Integer status;
}
@Data
@Schema(description = "扩展用户信息")
public static class ExtendedInfo {
@Schema(description = "专业")
private String major;
@Schema(description = "学院")
private String college;
@Schema(description = "学历")
private String education;
@Schema(description = "职称")
private String title;
@Schema(description = "标签")
private String tag;
@Schema(description = "显示顺序")
private Integer sortOrder;
}
}