diff --git a/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java b/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java index a00571f..2075856 100644 --- a/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java +++ b/vetti-admin/src/main/java/com/vetti/socket/ChatWebSocketHandler.java @@ -171,7 +171,7 @@ public class ChatWebSocketHandler { } Map mapEntity = new HashMap<>(); mapEntity.put("role","system"); - mapEntity.put("content","You are an interviewer. Generate follow-up questions based on Construction Labourer candidate responses."); + mapEntity.put("content","You are an interviewer. Generate follow-up questions based on Construction Labourer candidate responses.Return Only One Question"); List> list = new LinkedList(); list.add(mapEntity); promptJson = JSONUtil.toJsonStr(list); @@ -252,7 +252,7 @@ public class ChatWebSocketHandler { List list = JSONUtil.toList(msgMapData, Map.class); Map mapEntity = new HashMap<>(); mapEntity.put("role","user"); - mapEntity.put("content","问题:"+questionResult+"\\n候选人回答:{}"); + mapEntity.put("content","Question:"+questionResult+"\\nCandidate Answer:{}"); list.add(mapEntity); cacheMsgMapData.put(session.getId(),JSONUtil.toJsonStr(list)); } diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java new file mode 100644 index 0000000..c720f00 --- /dev/null +++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java @@ -0,0 +1,99 @@ +package com.vetti.web.controller.hotake; + +import com.vetti.common.annotation.Log; +import com.vetti.common.core.controller.BaseController; +import com.vetti.common.core.domain.AjaxResult; +import com.vetti.common.core.domain.R; +import com.vetti.common.core.page.TableDataInfo; +import com.vetti.common.enums.BusinessType; +import com.vetti.common.utils.poi.ExcelUtil; +import com.vetti.hotake.domain.HotakeCvInfo; +import com.vetti.hotake.service.IHotakeCvInfoService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 简历信息Controller + * + * @author wangxiangshun + * @date 2025-11-02 + */ +@Api(tags ="简历信息") +@RestController +@RequestMapping("/hotake/cvInfo") +public class HotakeCvInfoController extends BaseController +{ + @Autowired + private IHotakeCvInfoService hotakeCvInfoService; + + /** + * 查询简历信息列表 + */ + @ApiOperation("查询简历信息列表(分页)") + @GetMapping("/getPagelist") + public TableDataInfo list(HotakeCvInfo hotakeCvInfo) + { + startPage(); + List list = hotakeCvInfoService.selectHotakeCvInfoList(hotakeCvInfo); + return getDataTable(list); + } + + /** + * 查询简历信息列表 + */ + @ApiOperation("查询简历信息列表(无分页)") + @GetMapping("/getList") + public R> getList(HotakeCvInfo hotakeCvInfo) + { + List list = hotakeCvInfoService.selectHotakeCvInfoList(hotakeCvInfo); + return R.ok(list); + } + + /** + * 获取简历信息详细信息 + */ + @ApiOperation("获取简历信息详细信息") + @GetMapping(value = "/{id}") + public R getInfo(@PathVariable("id") Long id) + { + return R.ok(hotakeCvInfoService.selectHotakeCvInfoById(id)); + } + + /** + * 新增简历信息 + */ + @ApiOperation("新增简历信息") + @Log(title = "简历信息", businessType = BusinessType.INSERT) + @PostMapping + public R add(@RequestBody HotakeCvInfo hotakeCvInfo) + { + return R.ok(hotakeCvInfoService.insertHotakeCvInfo(hotakeCvInfo)); + } + + /** + * 修改简历信息 + */ + @ApiOperation("修改简历信息") + @Log(title = "简历信息", businessType = BusinessType.UPDATE) + @PutMapping + public R edit(@RequestBody HotakeCvInfo hotakeCvInfo) + { + return R.ok(hotakeCvInfoService.updateHotakeCvInfo(hotakeCvInfo)); + } + + /** + * 删除简历信息 + */ + @ApiOperation("删除简历信息") + @Log(title = "简历信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{id}") + public R remove(@PathVariable Long id) + { + return R.ok(hotakeCvInfoService.deleteHotakeCvInfoById(id)); + } +} 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 b11f11c..5c052f7 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,10 +1,15 @@ package com.vetti.web.controller.system; +import java.util.List; import java.util.Map; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.json.JSONUtil; import com.vetti.common.core.domain.R; import com.vetti.common.enums.UserOperStepsEnum; +import com.vetti.hotake.domain.HotakeCvInfo; +import com.vetti.hotake.service.IHotakeCvInfoService; +import com.vetti.web.entity.dto.SysUserDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -48,19 +53,27 @@ public class SysProfileController extends BaseController @Autowired private TokenService tokenService; + @Autowired + private IHotakeCvInfoService cvInfoService; + /** * 个人信息 */ @ApiOperation("个人信息") @GetMapping("/personalInfo") - public R profile() + public R profile() { + SysUserDto dto =new SysUserDto(); LoginUser loginUser = getLoginUser(); SysUser user = userService.selectUserById(loginUser.getUserId()); - R r = R.ok(user); + BeanUtil.copyProperties(user,dto); + HotakeCvInfo query = new HotakeCvInfo(); + query.setUserId(user.getUserId()); + List cvInfoList = cvInfoService.selectHotakeCvInfoList(query); + dto.setCvInfoList(cvInfoList); // ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); // ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); - return r; + return R.ok(dto); } diff --git a/vetti-admin/src/main/java/com/vetti/web/entity/dto/SysUserDto.java b/vetti-admin/src/main/java/com/vetti/web/entity/dto/SysUserDto.java new file mode 100644 index 0000000..bc592f5 --- /dev/null +++ b/vetti-admin/src/main/java/com/vetti/web/entity/dto/SysUserDto.java @@ -0,0 +1,23 @@ +package com.vetti.web.entity.dto; + +import com.vetti.common.core.domain.entity.SysUser; +import com.vetti.hotake.domain.HotakeCvInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 用户信息对象 + * + * @author wangxiangshun + * @date 2025-11-02 + */ +@Data +@Accessors(chain = true) +public class SysUserDto extends SysUser { + + @ApiModelProperty("简历数据集合") + private List cvInfoList; +} 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 index 0de7d2f..5a939fd 100644 --- 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 @@ -17,4 +17,7 @@ public class UserBestSideDto { @ApiModelProperty("个人展示的链接地址") private String linkAddress; + @ApiModelProperty("链接数据类型") + private String linkDataType; + } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java new file mode 100644 index 0000000..6a684b9 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java @@ -0,0 +1,49 @@ +package com.vetti.hotake.domain; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.annotations.ApiModelProperty; +import com.vetti.common.annotation.Excel; +import com.vetti.common.core.domain.BaseEntity; + +/** + * 简历信息对象 hotake_cv_info + * + * @author wangxiangshun + * @date 2025-11-02 + */ +@Data +@Accessors(chain = true) +public class HotakeCvInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + @ApiModelProperty("主键ID") + private Long id; + + /** 用户ID */ + @ApiModelProperty("用户ID") + @Excel(name = "用户ID") + private Long userId; + + /** 简历名称 */ + @ApiModelProperty("简历名称") + @Excel(name = "简历名称") + private String cvName; + + /** 简历类型(如:image/jpeg, application/pdf等) */ + @ApiModelProperty("简历类型(doc/pdf)") + private String cvFileType; + + /** 简历地址 */ + @ApiModelProperty("简历地址") + @Excel(name = "简历地址") + private String cvUrl; + + /** 状态(0 禁用,1 启用) */ + @ApiModelProperty("状态(0 禁用,1 启用)") + @Excel(name = "状态", readConverterExp = "0=,禁=用,1,启=用") + private String status; + +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCvInfoMapper.java b/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCvInfoMapper.java new file mode 100644 index 0000000..a88fd6c --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/mapper/HotakeCvInfoMapper.java @@ -0,0 +1,69 @@ +package com.vetti.hotake.mapper; + +import java.util.List; +import com.vetti.hotake.domain.HotakeCvInfo; + +/** + * 简历信息Mapper接口 + * + * @author wangxiangshun + * @date 2025-11-02 + */ +public interface HotakeCvInfoMapper +{ + /** + * 查询简历信息 + * + * @param id 简历信息主键 + * @return 简历信息 + */ + public HotakeCvInfo selectHotakeCvInfoById(Long id); + + /** + * 查询简历信息列表 + * + * @param hotakeCvInfo 简历信息 + * @return 简历信息集合 + */ + public List selectHotakeCvInfoList(HotakeCvInfo hotakeCvInfo); + + /** + * 新增简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + public int insertHotakeCvInfo(HotakeCvInfo hotakeCvInfo); + + /** + * 修改简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + public int updateHotakeCvInfo(HotakeCvInfo hotakeCvInfo); + + /** + * 删除简历信息 + * + * @param id 简历信息主键 + * @return 结果 + */ + public int deleteHotakeCvInfoById(Long id); + + /** + * 批量删除简历信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteHotakeCvInfoByIds(Long[] ids); + /** + * 批量新增简历信息 + * + * @param hotakeCvInfoList 简历信息列表 + * @return 结果 + */ + public int batchInsertHotakeCvInfo(List hotakeCvInfoList); + +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java new file mode 100644 index 0000000..928ed73 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java @@ -0,0 +1,70 @@ +package com.vetti.hotake.service; + +import java.util.List; +import com.vetti.hotake.domain.HotakeCvInfo; + +/** + * 简历信息Service接口 + * + * @author wangxiangshun + * @date 2025-11-02 + */ +public interface IHotakeCvInfoService +{ + /** + * 查询简历信息 + * + * @param id 简历信息主键 + * @return 简历信息 + */ + public HotakeCvInfo selectHotakeCvInfoById(Long id); + + /** + * 查询简历信息列表 + * + * @param hotakeCvInfo 简历信息 + * @return 简历信息集合 + */ + public List selectHotakeCvInfoList(HotakeCvInfo hotakeCvInfo); + + /** + * 新增简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + public int insertHotakeCvInfo(HotakeCvInfo hotakeCvInfo); + + /** + * 修改简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + public int updateHotakeCvInfo(HotakeCvInfo hotakeCvInfo); + + /** + * 批量删除简历信息 + * + * @param ids 需要删除的简历信息主键集合 + * @return 结果 + */ + public int deleteHotakeCvInfoByIds(Long[] ids); + + /** + * 删除简历信息信息 + * + * @param id 简历信息主键 + * @return 结果 + */ + public int deleteHotakeCvInfoById(Long id); + + /** + * 批量新增简历信息 + * + * @param hotakeCvInfoList 简历信息列表 + * @return 结果 + */ + public int batchInsertHotakeCvInfo(List hotakeCvInfoList); + +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCvInfoServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCvInfoServiceImpl.java new file mode 100644 index 0000000..b5fa75f --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeCvInfoServiceImpl.java @@ -0,0 +1,118 @@ +package com.vetti.hotake.service.impl; + +import java.util.List; + +import com.vetti.common.core.service.BaseServiceImpl; +import com.vetti.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.vetti.hotake.mapper.HotakeCvInfoMapper; +import com.vetti.hotake.domain.HotakeCvInfo; +import com.vetti.hotake.service.IHotakeCvInfoService; + +/** + * 简历信息Service业务层处理 + * + * @author wangxiangshun + * @date 2025-11-02 + */ +@SuppressWarnings("all") +@Service +public class HotakeCvInfoServiceImpl extends BaseServiceImpl implements IHotakeCvInfoService +{ + @Autowired + private HotakeCvInfoMapper hotakeCvInfoMapper; + + /** + * 查询简历信息 + * + * @param id 简历信息主键 + * @return 简历信息 + */ + @Transactional(readOnly = true) + @Override + public HotakeCvInfo selectHotakeCvInfoById(Long id) + { + return hotakeCvInfoMapper.selectHotakeCvInfoById(id); + } + + /** + * 查询简历信息列表 + * + * @param hotakeCvInfo 简历信息 + * @return 简历信息 + */ + @Transactional(readOnly = true) + @Override + public List selectHotakeCvInfoList(HotakeCvInfo hotakeCvInfo) + { + return hotakeCvInfoMapper.selectHotakeCvInfoList(hotakeCvInfo); + } + + /** + * 新增简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int insertHotakeCvInfo(HotakeCvInfo hotakeCvInfo) + { + hotakeCvInfo.setCreateTime(DateUtils.getNowDate()); + return hotakeCvInfoMapper.insertHotakeCvInfo(hotakeCvInfo); + } + + /** + * 修改简历信息 + * + * @param hotakeCvInfo 简历信息 + * @return 结果 + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int updateHotakeCvInfo(HotakeCvInfo hotakeCvInfo) + { + hotakeCvInfo.setUpdateTime(DateUtils.getNowDate()); + return hotakeCvInfoMapper.updateHotakeCvInfo(hotakeCvInfo); + } + + /** + * 批量删除简历信息 + * + * @param ids 需要删除的简历信息主键 + * @return 结果 + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int deleteHotakeCvInfoByIds(Long[] ids) + { + return hotakeCvInfoMapper.deleteHotakeCvInfoByIds(ids); + } + + /** + * 删除简历信息信息 + * + * @param id 简历信息主键 + * @return 结果 + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int deleteHotakeCvInfoById(Long id) + { + return hotakeCvInfoMapper.deleteHotakeCvInfoById(id); + } + /** + * 批量新增简历信息 + * + * @param hotakeCvInfoList 简历信息列表 + * @return 结果 + */ + @Transactional(rollbackFor=Exception.class) + @Override + public int batchInsertHotakeCvInfo(List hotakeCvInfoList){ + return hotakeCvInfoMapper.batchInsertHotakeCvInfo(hotakeCvInfoList); + } +} diff --git a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml new file mode 100644 index 0000000..23e8e5d --- /dev/null +++ b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeCvInfoMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + select id, user_id, cv_name, cv_file_type, cv_url, status, del_flag, create_by, create_time, update_by, update_time, remark from hotake_cv_info + + + + + + + + insert into hotake_cv_info + + user_id, + cv_name, + cv_file_type, + cv_url, + status, + del_flag, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{userId}, + #{cvName}, + #{cvFileType}, + #{cvUrl}, + #{status}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update hotake_cv_info + + user_id = #{userId}, + cv_name = #{cvName}, + cv_file_type = #{cvFileType}, + cv_url = #{cvUrl}, + status = #{status}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from hotake_cv_info where id = #{id} + + + + delete from hotake_cv_info where id in + + #{id} + + + + + insert into hotake_cv_info( id, user_id, cv_name, cv_file_type, cv_url, status, del_flag, create_by, create_time, update_by, update_time, remark) values + + ( #{item.id}, #{item.userId}, #{item.cvName}, #{item.cvFileType}, #{item.cvUrl}, #{item.status}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}) + + + \ No newline at end of file diff --git a/vetti-system/target/classes/mapper/system/SysUserMapper.xml b/vetti-system/target/classes/mapper/system/SysUserMapper.xml index 4f86fc6..7b9217f 100644 --- a/vetti-system/target/classes/mapper/system/SysUserMapper.xml +++ b/vetti-system/target/classes/mapper/system/SysUserMapper.xml @@ -35,6 +35,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -63,7 +66,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 + ,u.steps,u.job_position,u.experience,u.cv_url,u.location,u.job_type,u.relocate,u.best_side_json,u.address,u.user_flag 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 @@ -72,7 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, - u.create_time,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 + u.create_time,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,u.address,u.user_flag 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 @@ -123,7 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"