1.修改es(返回企业描述、企业联系人list)信息

2.添加pc端投简历接口
3.添加pc端查询简历、编辑简历接口
This commit is contained in:
sh
2025-10-29 19:10:46 +08:00
parent a592435926
commit a63bb88460
18 changed files with 290 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
package com.ruoyi.cms.controller.app; package com.ruoyi.cms.controller.app;
import com.ruoyi.cms.domain.File; import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.cms.service.IFileService; import com.ruoyi.cms.service.IFileService;
import com.ruoyi.common.annotation.BussinessLog; import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;

View File

@@ -2,6 +2,10 @@ package com.ruoyi.cms.controller.cms;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -111,4 +115,30 @@ public class CmsAppUserController extends BaseController
return toAjax(appUserService.deleteAppUserByUserIds(userIds)); return toAjax(appUserService.deleteAppUserByUserIds(userIds));
} }
/**
* 获取APP用户详细信息pc端获取移动端简历信息
*/
@ApiOperation("pc端个人简历信息-获取APP用户详细信息")
@GetMapping(value = "/getUserInfo")
public AjaxResult getUserInfo()
{
if(!SecurityUtils.isLogin()){
return AjaxResult.error("未登录!");
}
return success(appUserService.getUserInfo());
}
/**
* 修改用户简历信息-(技能信息、经历信息)
*/
@ApiOperation("修改用户简历信息")
@PostMapping("/editRegisterUser")
@BussinessLog(title = "保存简历")
public AjaxResult editRegisterUser(@RequestBody RegisterBody registerBody)
{
if (registerBody == null) {
throw new IllegalArgumentException("入参registerBody不能为空");
}
return AjaxResult.success(appUserService.editRegisterUser(registerBody));
}
} }

View File

@@ -159,4 +159,12 @@ public class CmsJobController extends BaseController
List<ESJobDocument> jobList = jobService.sysRecommend(esJobSearch); List<ESJobDocument> jobList = jobService.sysRecommend(esJobSearch);
return success(jobList); return success(jobList);
} }
@ApiOperation("获取所有岗位")
@GetMapping("/selectAllJob")
public AjaxResult selectAllJob()
{
List<Job> jobList = jobService.selectAllJob();
return success(jobList);
}
} }

View File

@@ -12,9 +12,11 @@ import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -65,4 +67,20 @@ public class JobApplyController extends BaseController {
List<CandidateVO> list = iJobApplyService.selectApplyJobUserList(appUser); List<CandidateVO> list = iJobApplyService.selectApplyJobUserList(appUser);
return getDataTable(list); return getDataTable(list);
} }
@GetMapping("/apply/{jobId}")
@ApiOperation("用户申请岗位")
public AjaxResult apply(@ApiParam("岗位id") @PathVariable Long jobId)
{
if(jobId==null){
return AjaxResult.error("岗位id为空");
}
if(!SecurityUtils.isLogin()){
return AjaxResult.error("用户未登录!");
}
JobApply jobApply=new JobApply();
jobApply.setJobId(jobId);
jobApply.setUserId(SecurityUtils.getUserId());
return toAjax(iJobApplyService.applyComJob(jobApply));
}
} }

View File

@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.cms.domain.vo.CompanyVo;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.Company; import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.common.core.domain.entity.File;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@@ -173,4 +175,8 @@ public class Job extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty("附件列表") @ApiModelProperty("附件列表")
private List<File> filesList; private List<File> filesList;
@TableField(exist = false)
@ApiModelProperty("公司信息")
private CompanyVo companyVo;
} }

View File

@@ -0,0 +1,34 @@
package com.ruoyi.cms.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.CompanyContact;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 公司对象 company
* @author lishundong
* @date 2024-09-04
*/
@Data
public class CompanyVo extends BaseEntity
{
@ApiModelProperty("公司id")
private Long companyId;
@Excel(name = "单位名称")
@ApiModelProperty("单位名称")
private String name;
@TableField(exist = false)
@ApiModelProperty("公司描述")
private String companyDescription;
@TableField(exist = false)
@ApiModelProperty("企业联系人列表")
private List<CompanyContact> companyContactList;
}

View File

@@ -1,7 +1,7 @@
package com.ruoyi.cms.mapper; package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.File; import com.ruoyi.common.core.domain.entity.File;
import java.util.List; import java.util.List;

View File

@@ -62,4 +62,8 @@ public interface IAppUserService
public AppUser selectAppuserByIdcard(String idCard); public AppUser selectAppuserByIdcard(String idCard);
public AppUserLky selectAppUserInfo(AppUser appUser); public AppUserLky selectAppUserInfo(AppUser appUser);
public AppUser getUserInfo();
public int editRegisterUser(RegisterBody registerBody);
} }

View File

@@ -1,6 +1,6 @@
package com.ruoyi.cms.service; package com.ruoyi.cms.service;
import com.ruoyi.cms.domain.File; import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;

View File

@@ -65,4 +65,7 @@ public interface IJobApplyService
List<CandidateVO> selectAppUserList(Job job); List<CandidateVO> selectAppUserList(Job job);
List<CandidateVO> selectApplyJobUserList(AppUser appUser); List<CandidateVO> selectApplyJobUserList(AppUser appUser);
public int applyComJob(JobApply jobApply);
} }

View File

@@ -94,4 +94,6 @@ public interface IJobService
List<AppUser> selectApplyJobUserList(Long jobId); List<AppUser> selectApplyJobUserList(Long jobId);
List<ESJobDocument> sysRecommend(ESJobSearch esJobSearch); List<ESJobDocument> sysRecommend(ESJobSearch esJobSearch);
List<Job> selectAllJob();
} }

View File

@@ -1,18 +1,17 @@
package com.ruoyi.cms.service.impl; package com.ruoyi.cms.service.impl;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.cms.domain.vo.AppSkillVo; import com.ruoyi.cms.domain.vo.AppSkillVo;
import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.mapper.*;
import com.ruoyi.cms.util.StringUtil; import com.ruoyi.cms.util.StringUtil;
import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.core.domain.entity.*;
import com.ruoyi.cms.domain.vo.AppUserLky; import com.ruoyi.cms.domain.vo.AppUserLky;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.SiteSecurityUtils; import com.ruoyi.common.utils.SiteSecurityUtils;
@@ -43,6 +42,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
private AppSkillMapper appSkillMapper; private AppSkillMapper appSkillMapper;
@Autowired @Autowired
private CompanyMapper companyMapper; private CompanyMapper companyMapper;
@Autowired
private FileMapper fileMapper;
/** /**
* 查询APP用户 * 查询APP用户
* *
@@ -118,6 +120,12 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
@Override @Override
public int updateAppUser(AppUser appUser) public int updateAppUser(AppUser appUser)
{ {
if(appUser.getExperiencesList()!=null&&appUser.getExperiencesList().size()>0){
userWorkExperiencesMapper.batchInsert(appUser.getExperiencesList());
}
if(appUser.getAppSkillsList()!=null&&appUser.getAppSkillsList().size()>0){
appSkillMapper.batchInsert(appUser.getAppSkillsList());
}
return appUserMapper.updateById(appUser); return appUserMapper.updateById(appUser);
} }
@@ -236,4 +244,78 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
lky.setAppSkillsList(skillList); lky.setAppSkillsList(skillList);
return lky; return lky;
} }
@Override
public AppUser getUserInfo() {
//查询用户信息
LoginUser loginUser=SecurityUtils.getLoginUser();
SysUser sysUser=loginUser.getUser();
AppUser appUser=selectAppuserByIdcard(sysUser.getIdCard());
if(appUser!=null&&appUser.getUserId()!=null){
//查询工作经历信息
UserWorkExperiences parm=new UserWorkExperiences();
parm.setUserId(appUser.getUserId());
List<UserWorkExperiences> experiencesList=userWorkExperiencesMapper.getWorkExperiencesList(parm);
appUser.setExperiencesList(experiencesList);
//查询用户技能
AppSkill parmsk=new AppSkill();
parmsk.setUserId(appUser.getUserId());
List<AppSkill> skillList=appSkillMapper.getList(parmsk);
appUser.setAppSkillsList(skillList);
File fileParm=new File();
fileParm.setBussinessId(appUser.getUserId());
List<File> files=fileMapper.selectFileList(fileParm);
appUser.setFileList(files);
}
return appUser;
}
@Override
public int editRegisterUser(RegisterBody registerBody) {
//保存或修改工作经历
List<UserWorkExperiences> userWorkExperiencesList=registerBody.getExperiencesList();
editUserWorkExperiences(userWorkExperiencesList);
//修改技能
List<AppSkill> skillList=registerBody.getAppSkillsList();
editSkill(skillList);
//修改用户信息
AppUser appUser=registerBody.getAppUser();
if(appUser!=null&&appUser.getUserId()!=null){
appUserMapper.updateById(appUser);
}
return 1;
}
/**
* 修改技能
* @param list
*/
public void editSkill(List<AppSkill> list){
if(list!=null&&list.size()>0){
List<AppSkill> add=new ArrayList<>();
list.forEach(it->{
if(it.getId()!=null){appSkillMapper.updateById(it);}else{add.add(it);}
});
if(add.size()>0){
appSkillMapper.batchInsert(add);
}
}
}
/**
* 修改工作经历
* @param list
*/
public void editUserWorkExperiences(List<UserWorkExperiences> list){
if(list!=null&&list.size()>0){
List<UserWorkExperiences> add=new ArrayList<>();
list.forEach(it->{
if(it.getId()!=null){userWorkExperiencesMapper.updateById(it);}else{add.add(it);}
});
if(add.size()>0){
userWorkExperiencesMapper.batchInsert(add);
}
}
}
} }

View File

@@ -4,16 +4,12 @@ import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Arrays; import java.util.Arrays;
import com.ruoyi.cms.domain.File; import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.cms.mapper.FileMapper; import com.ruoyi.cms.mapper.FileMapper;
import com.ruoyi.cms.service.IFileService; import com.ruoyi.cms.service.IFileService;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SiteSecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.common.utils.uuid.UUID;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 岗位申请Service业务层处理 * 岗位申请Service业务层处理
@@ -133,4 +134,17 @@ public class JobApplyServiceImpl extends ServiceImpl<JobApplyMapper,JobApply> im
public List<CandidateVO> selectApplyJobUserList(AppUser appUser) { public List<CandidateVO> selectApplyJobUserList(AppUser appUser) {
return jobApplyMapper.selectApplyJobUserList(appUser); return jobApplyMapper.selectApplyJobUserList(appUser);
} }
@Override
public int applyComJob(JobApply jobApply) {
//todo 计算匹配度
jobApply.setMatchingDegree(1L);
List<JobApply> jobApplies = jobApplyMapper.selectList(Wrappers.<JobApply>lambdaQuery().eq(JobApply::getJobId, jobApply.getJobId()).eq(JobApply::getUserId, jobApply.getUserId()));
if(jobApplies.size()>0){
List<Long> ids = jobApplies.stream().map(JobApply::getId).collect(Collectors.toList());
jobApplyMapper.deleteBatchIds(ids);
}
jobApplyMapper.insert(jobApply);
return 0;
}
} }

View File

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.cms.domain.*; import com.ruoyi.cms.domain.*;
import com.ruoyi.cms.domain.File; import com.ruoyi.common.core.domain.entity.File;
import com.ruoyi.cms.domain.query.ESJobSearch; import com.ruoyi.cms.domain.query.ESJobSearch;
import com.ruoyi.cms.domain.vo.CandidateVO; import com.ruoyi.cms.domain.vo.CandidateVO;
import com.ruoyi.cms.mapper.*; import com.ruoyi.cms.mapper.*;
@@ -853,4 +853,13 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
List<ESJobDocument> esJobDocuments = sysUserCollection(jobListResult); List<ESJobDocument> esJobDocuments = sysUserCollection(jobListResult);
return esJobDocuments; return esJobDocuments;
} }
public List<Job> selectAllJob(){
int batchSize = 1000; // 每批次处理的数据量
int offset = 0;
Map<String,Object> params=new HashMap<>();
params.put("batchSize", batchSize);
params.put("offset", offset*batchSize);
return jobMapper.selectAllJob(params);
}
} }

View File

@@ -34,6 +34,64 @@
<result property="explainUrl" column="explain_url" /> <result property="explainUrl" column="explain_url" />
<result property="cover" column="cover" /> <result property="cover" column="cover" />
<result property="jobType" column="job_type" /> <result property="jobType" column="job_type" />
</resultMap>
<resultMap type="com.ruoyi.cms.domain.Job" id="JobEsResult">
<result property="jobId" column="job_id" />
<result property="jobTitle" column="job_title" />
<result property="minSalary" column="min_salary" />
<result property="maxSalary" column="max_salary" />
<result property="education" column="education" />
<result property="experience" column="experience" />
<result property="companyName" column="company_name" />
<result property="jobLocation" column="job_location" />
<result property="postingDate" column="posting_date" />
<result property="vacancies" column="vacancies" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="latitude" column="latitude" />
<result property="longitude" column="longitude" />
<result property="view" column="view" />
<result property="companyId" column="company_id" />
<result property="isHot" column="is_hot" />
<result property="applyNum" column="apply_num" />
<result property="dataSource" column="data_source" />
<result property="jobLocationAreaCode" column="job_location_area_code" />
<result property="description" column="description" />
<result property="isPublish" column="is_publish" />
<result property="dataSource" column="data_source" />
<result property="jobUrl" column="job_url" />
<result property="rowId" column="row_id" />
<result property="jobCategory" column="job_category" />
<result property="isExplain" column="is_explain" />
<result property="explainUrl" column="explain_url" />
<result property="cover" column="cover" />
<result property="jobType" column="job_type" />
<result property="type" column="type" />
<result property="industry" column="industry" />
<result property="scale" column="scale" />
<result property="companyNature" column="company_nature" />
<result property="code" column="code" />
<association property="companyVo" resultMap="CompanyResult"/>
</resultMap>
<resultMap type="com.ruoyi.cms.domain.vo.CompanyVo" id="CompanyResult">
<result property="companyId" column="company_id"/>
<result property="name" column="name"/>
<result property="companyDescription" column="company_description"/>
<collection property="companyContactList" ofType="com.ruoyi.common.core.domain.entity.CompanyContact"
resultMap="CompanyContactResult"/>
</resultMap>
<resultMap type="com.ruoyi.common.core.domain.entity.CompanyContact" id="CompanyContactResult">
<result property="contactPerson" column="contact_person"/>
<result property="contactPersonPhone" column="contact_person_phone"/>
</resultMap> </resultMap>
<sql id="selectJobVo"> <sql id="selectJobVo">
@@ -214,9 +272,10 @@
WHERE b.name = company.name WHERE b.name = company.name
) )
</select> </select>
<select id="selectAllJob" resultType="com.ruoyi.cms.domain.Job"> <select id="selectAllJob" resultMap="JobEsResult">
SELECT j.*,c.industry,c.scale,c.nature as company_nature,c.code FROM job as j SELECT j.*,c.industry,c.scale,c.nature as company_nature,c.code,c.description as company_description,c.name,c.company_id,t.contact_person,t.contact_person_phone FROM job as j
left join company as c on c.company_id = j.company_id limit #{offset},#{batchSize} left join company as c on c.company_id = j.company_id and j.del_flag='0' and c.del_flag='0'
left join company_contact as t on t.company_id=j.company_id and t.del_flag='0' where c.company_id='1' limit #{offset},#{batchSize}
</select> </select>
<select id="selectAllInsertRowWork" resultType="com.ruoyi.cms.domain.RowWork"> <select id="selectAllInsertRowWork" resultType="com.ruoyi.cms.domain.RowWork">
select Id, TaskId, TaskName, Std_class, SF, ZCMC, Aca112, Acb22a, Aac011, Acb240, select Id, TaskId, TaskName, Std_class, SF, ZCMC, Aca112, Acb22a, Aac011, Acb240,

View File

@@ -138,4 +138,12 @@ public class AppUser extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty("工作经历列表") @ApiModelProperty("工作经历列表")
private List<UserWorkExperiences> experiencesList; private List<UserWorkExperiences> experiencesList;
@TableField(exist = false)
@ApiModelProperty("技能列表")
private List<AppSkill> appSkillsList;
@TableField(exist = false)
@ApiModelProperty("附件列表")
private List<File> fileList;
} }

View File

@@ -1,4 +1,4 @@
package com.ruoyi.cms.domain; package com.ruoyi.common.core.domain.entity;
import lombok.Data; import lombok.Data;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;