diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/system/SysProfileController.java b/vetti-admin/src/main/java/com/vetti/web/controller/system/SysProfileController.java index 7aa7c12..b648cd8 100644 --- a/vetti-admin/src/main/java/com/vetti/web/controller/system/SysProfileController.java +++ b/vetti-admin/src/main/java/com/vetti/web/controller/system/SysProfileController.java @@ -1,6 +1,11 @@ package com.vetti.web.controller.system; import java.util.Map; + +import cn.hutool.json.JSONUtil; +import com.vetti.common.enums.UserOperStepsEnum; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -31,6 +36,7 @@ import com.vetti.system.service.ISysUserService; * * @author ruoyi */ +@Api(tags ="个人信息完善") @RestController @RequestMapping("/system/user/profile") public class SysProfileController extends BaseController @@ -44,17 +50,56 @@ public class SysProfileController extends BaseController /** * 个人信息 */ - @GetMapping - public AjaxResult profile() + @ApiOperation("个人信息") + @GetMapping("/personalInfo") + public AjaxResult profile() { LoginUser loginUser = getLoginUser(); - SysUser user = loginUser.getUser(); + SysUser user = userService.selectUserById(loginUser.getUserId()); AjaxResult ajax = AjaxResult.success(user); - ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); - ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); +// ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); +// ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); return ajax; } + + /** + * 修改用户 + */ + @ApiOperation("个人信息完善") + @Log(title = "个人信息完善", businessType = BusinessType.UPDATE) + @PutMapping("/completeInfo") + public AjaxResult personalInfoProfile(@RequestBody SysUser user) + { + LoginUser loginUser = getLoginUser(); + SysUser currentUser = userService.selectUserById(loginUser.getUserId()); + if(UserOperStepsEnum.STEPS_1.getCode().equals(user.getSteps())){ + currentUser.setNickName(user.getNickName()); + currentUser.setEmail(user.getEmail()); + currentUser.setPhonenumber(user.getPhonenumber()); + currentUser.setSex(user.getSex()); + }else if (UserOperStepsEnum.STEPS_2.getCode().equals(user.getSteps())){ + currentUser.setJobPosition(user.getJobPosition()); + currentUser.setExperience(user.getExperience()); + currentUser.setCvUrl(user.getCvUrl()); + }else if (UserOperStepsEnum.STEPS_3.getCode().equals(user.getSteps())){ + currentUser.setLocation(user.getLocation()); + currentUser.setJobType(user.getJobType()); + currentUser.setRelocate(user.getRelocate()); + }else if (UserOperStepsEnum.STEPS_4.getCode().equals(user.getSteps())){ + //个人展示数据存储 + currentUser.setBestSideJson(JSONUtil.toJsonStr(user.getBestSideDtoList())); + } + currentUser.setSteps(user.getSteps()); + if (userService.updateUserProfile(currentUser) > 0) + { + // 更新缓存用户信息 + tokenService.setLoginUser(loginUser); + } + return success(); + } + + /** * 修改用户 */ diff --git a/vetti-common/src/main/java/com/vetti/common/core/domain/dto/UserBestSideDto.java b/vetti-common/src/main/java/com/vetti/common/core/domain/dto/UserBestSideDto.java new file mode 100644 index 0000000..0de7d2f --- /dev/null +++ b/vetti-common/src/main/java/com/vetti/common/core/domain/dto/UserBestSideDto.java @@ -0,0 +1,20 @@ +package com.vetti.common.core.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户个人展示数据结构 + * + * @author wangxiangshun + * @date 2025-10-29 + */ +@Data +@Accessors(chain = true) +public class UserBestSideDto { + + @ApiModelProperty("个人展示的链接地址") + private String linkAddress; + +} diff --git a/vetti-common/src/main/java/com/vetti/common/core/domain/entity/SysUser.java b/vetti-common/src/main/java/com/vetti/common/core/domain/entity/SysUser.java index 68c109d..eedce8e 100644 --- a/vetti-common/src/main/java/com/vetti/common/core/domain/entity/SysUser.java +++ b/vetti-common/src/main/java/com/vetti/common/core/domain/entity/SysUser.java @@ -3,6 +3,9 @@ package com.vetti.common.core.domain.entity; import java.util.Date; import java.util.List; import javax.validation.constraints.*; + +import com.vetti.common.core.domain.dto.UserBestSideDto; +import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.vetti.common.annotation.Excel; @@ -17,49 +20,61 @@ import com.vetti.common.xss.Xss; * * @author ruoyi */ + public class SysUser extends BaseEntity { private static final long serialVersionUID = 1L; /** 用户ID */ + @ApiModelProperty("用户ID") @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号") private Long userId; /** 部门ID */ + @ApiModelProperty("用户ID") @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; /** 用户账号 */ + @ApiModelProperty("用户账号(注册邮箱或者手机号)") @Excel(name = "登录名称") private String userName; /** 用户昵称 */ + @ApiModelProperty("用户名称(姓名)") @Excel(name = "用户名称") private String nickName; /** 用户邮箱 */ + @ApiModelProperty("用户邮箱") @Excel(name = "用户邮箱") private String email; /** 手机号码 */ + @ApiModelProperty("手机号码") @Excel(name = "手机号码", cellType = ColumnType.TEXT) private String phonenumber; /** 用户性别 */ + @ApiModelProperty("用户性别(0=男,1=女,2=未知)") @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") private String sex; /** 用户头像 */ + @ApiModelProperty("用户头像") private String avatar; /** 密码 */ + @ApiModelProperty("密码") private String password; /** 账号状态(0正常 1停用) */ + @ApiModelProperty("账号状态(0正常 1停用)") @Excel(name = "账号状态", readConverterExp = "0=正常,1=停用") private String status; /** 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty("删除标志(0代表存在 2代表删除)") private String delFlag; /** 最后登录IP */ @@ -76,8 +91,36 @@ public class SysUser extends BaseEntity /** * 用户类型(manager:管理员,interviewer:面试官 ,candidate:候选者) */ + @ApiModelProperty("用户类型(manager:管理员,interviewer:面试官 ,candidate:候选者)") private String sysUserType; + @ApiModelProperty("个人信息完善步骤(1、2、3、4)") + private String steps; + + @ApiModelProperty("当前职位") + private String jobPosition; + + @ApiModelProperty("工作年限") + private String experience; + + @ApiModelProperty("简历地址") + private String cvUrl; + + @ApiModelProperty("工作地点") + private String location; + + @ApiModelProperty("工作类型") + private String jobType; + + @ApiModelProperty("是否搬家") + private String relocate; + + @ApiModelProperty("") + private String bestSideJson; + + @ApiModelProperty("个人展示的链接地址") + private List bestSideDtoList; + /** 部门对象 */ @Excels({ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), @@ -324,6 +367,79 @@ public class SysUser extends BaseEntity this.sysUserType = sysUserType; } + + public String getSteps() { + return steps; + } + + public void setSteps(String steps) { + this.steps = steps; + } + + public String getJobPosition() { + return jobPosition; + } + + public void setJobPosition(String jobPosition) { + this.jobPosition = jobPosition; + } + + public String getExperience() { + return experience; + } + + public void setExperience(String experience) { + this.experience = experience; + } + + public String getCvUrl() { + return cvUrl; + } + + public void setCvUrl(String cvUrl) { + this.cvUrl = cvUrl; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public String getRelocate() { + return relocate; + } + + public void setRelocate(String relocate) { + this.relocate = relocate; + } + + public String getBestSideJson() { + return bestSideJson; + } + + public void setBestSideJson(String bestSideJson) { + this.bestSideJson = bestSideJson; + } + + public List getBestSideDtoList() { + return bestSideDtoList; + } + + public void setBestSideDtoList(List bestSideDtoList) { + this.bestSideDtoList = bestSideDtoList; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/vetti-common/src/main/java/com/vetti/common/enums/UserOperStepsEnum.java b/vetti-common/src/main/java/com/vetti/common/enums/UserOperStepsEnum.java new file mode 100644 index 0000000..8ee0889 --- /dev/null +++ b/vetti-common/src/main/java/com/vetti/common/enums/UserOperStepsEnum.java @@ -0,0 +1,34 @@ +package com.vetti.common.enums; + +/** + * 用户操作步骤 + */ +public enum UserOperStepsEnum { + + STEPS_1("1", "基础信息"), + STEPS_2("2", "工作经验"), + STEPS_3("3", "工作地点"), + STEPS_4("4", "个人展示"), + + ; + + private final String code; + private final String info; + + UserOperStepsEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + +} diff --git a/vetti-system/src/main/resources/mapper/system/SysUserMapper.xml b/vetti-system/src/main/resources/mapper/system/SysUserMapper.xml index c353378..d6fb590 100644 --- a/vetti-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/vetti-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -25,6 +25,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + @@ -52,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.sys_user_type + ,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id @@ -59,7 +70,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"