1.职位发布与管理-添加表(job_contact)补充对应后端代码

2.企业联系人管理-添加表(company_contact)补充对应后台代码
3.岗位管理-添加信用代码、薪酬查询条件
4.用户管理-添加身份证显示(脱敏)、是否录用
5.岗位管理-添加字段岗位类型(疆内、疆外)
This commit is contained in:
sh
2025-09-30 18:32:20 +08:00
parent f8a2ab99e3
commit 39a5c380dd
21 changed files with 487 additions and 10 deletions

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.CompanyContact;
import com.ruoyi.cms.service.CompanyContactService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
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;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@RestController
@RequestMapping("/cms/companycontact")
@Api(tags = "后台:公司联系人")
public class CompanyContactController extends BaseController {
@Autowired
private CompanyContactService companyContactService;
/**
* 列表
*/
@ApiOperation("公司联系人列表")
@PreAuthorize("@ss.hasPermi('cms:companycontact:list')")
@RequestMapping("/list")
public TableDataInfo list(CompanyContact companyContact){
List<CompanyContact> list=companyContactService.getSelectList(companyContact);
return getDataTable(list);
}
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.controller.cms;
import com.ruoyi.cms.domain.JobContact;
import com.ruoyi.cms.service.JobContactService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
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;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@RestController
@RequestMapping("/cms/jobcontact")
@Api(tags = "后台:岗位联系人")
public class JobContactController extends BaseController {
@Autowired
private JobContactService jobContactService;
/**
* 列表
*/
@ApiOperation("岗位联系人列表")
@PreAuthorize("@ss.hasPermi('cms:jobcontact:list')")
@RequestMapping("/list")
public TableDataInfo list(JobContact jobContact){
startPage();
List<JobContact> list = jobContactService.getSelectList(jobContact);
return getDataTable(list);
}
}

View File

@@ -100,4 +100,10 @@ public class AppUser extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty("期望岗位列表") @ApiModelProperty("期望岗位列表")
private List<String> jobTitle; private List<String> jobTitle;
@ApiModelProperty("身份证")
private String idCard;
@ApiModelProperty("是否录用 0录用,1未录用")
private String hire;
} }

View File

@@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/** /**
* 公司对象 company * 公司对象 company
* @author lishundong * @author lishundong
@@ -88,7 +91,11 @@ public class Company extends BaseEntity
@ApiModelProperty("审核未通过原因") @ApiModelProperty("审核未通过原因")
private String notPassReason; private String notPassReason;
// @TableField(exist = false)
// @ApiModelProperty("qiye")
// private Integer isCollection;
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty("qiye") @ApiModelProperty("企业联系人列表")
private Integer isCollection; private List<CompanyContact> companyContactList;
} }

View File

@@ -0,0 +1,48 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@Data
@ApiModel("公司联系人")
@TableName("company_contact")
public class CompanyContact extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
/**
* 公司id
*/
@ApiModelProperty("岗位id")
private Long companyId;
/**
* 联系人
*/
@ApiModelProperty("联系人")
private String contactPerson;
/**
* 联系人电话
*/
@ApiModelProperty("联系人电话")
private String contactPersonPhone;
}

View File

@@ -13,6 +13,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* 岗位对象 job * 岗位对象 job
* @author lishundong * @author lishundong
@@ -148,4 +150,19 @@ public class Job extends BaseEntity
@ApiModelProperty("视频封面URL") @ApiModelProperty("视频封面URL")
private String cover; private String cover;
@TableField(exist = false)
@ApiModelProperty("薪酬")
private String compensation;
@TableField(exist = false)
@ApiModelProperty("信用代码")
private String code;
@ApiModelProperty("岗位类型 0疆内 1疆外")
private String jobType;
@TableField(exist = false)
@ApiModelProperty("岗位联系人列表")
private List<JobContact> jobContactList;
} }

View File

@@ -0,0 +1,53 @@
package com.ruoyi.cms.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
@Data
@ApiModel("岗位联系人")
@TableName("job_contact")
public class JobContact extends BaseEntity {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id",type = IdType.AUTO)
@ApiModelProperty("id")
private Long id;
/**
* 岗位id
*/
@ApiModelProperty("岗位id")
private Long jobId;
/**
* 联系人
*/
@ApiModelProperty("联系人")
private String contactPerson;
/**
* 联系人电话
*/
@ApiModelProperty("联系人电话")
private String contactPersonPhone;
/**
* 职务
*/
@ApiModelProperty("职务")
private String position;
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.CompanyContact;
import java.util.List;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
public interface CompanyContactMapper extends BaseMapper<CompanyContact> {
List<CompanyContact> getSelectList(CompanyContact companyContact);
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cms.domain.JobContact;
import java.util.List;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
public interface JobContactMapper extends BaseMapper<JobContact> {
List<JobContact> getSelectList(JobContact jobContact);
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.service;
import com.ruoyi.cms.domain.CompanyContact;
import java.util.List;
/**
* 公司联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
public interface CompanyContactService {
List<CompanyContact> getSelectList(CompanyContact companyContact);
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.cms.service;
import com.ruoyi.cms.domain.JobContact;
import java.util.List;
/**
* 岗位联系人
*
* @author
* @email
* @date 2025-09-30 15:57:06
*/
public interface JobContactService{
List<JobContact> getSelectList(JobContact jobContact);
}

View File

@@ -4,9 +4,8 @@ import java.util.List;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.ruoyi.cms.domain.Job;
import com.ruoyi.cms.mapper.JobMapper;
import com.ruoyi.cms.mapper.JobTitleMapper; import com.ruoyi.cms.mapper.JobTitleMapper;
import com.ruoyi.cms.util.StringUtil;
import com.ruoyi.common.core.domain.entity.JobTitle; import com.ruoyi.common.core.domain.entity.JobTitle;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -57,7 +56,14 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
@Override @Override
public List<AppUser> selectAppUserList(AppUser appUser) public List<AppUser> selectAppUserList(AppUser appUser)
{ {
return appUserMapper.selectAppUserList(appUser); List<AppUser> list=appUserMapper.selectAppUserList(appUser);
if(list!=null){
//身份证脱敏处理
list.forEach(x->{
x.setIdCard(StringUtil.desensitizeIdCard(x.getIdCard()));
});
}
return list;
} }
/** /**

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cms.service.impl;
import com.ruoyi.cms.domain.CompanyContact;
import com.ruoyi.cms.mapper.CompanyContactMapper;
import com.ruoyi.cms.service.CompanyContactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class CompanyContactServiceImpl extends ServiceImpl<CompanyContactMapper, CompanyContact> implements CompanyContactService {
@Autowired
CompanyContactMapper companyContactMapper;
public List<CompanyContact> getSelectList(CompanyContact companyContact){
return companyContactMapper.getSelectList(companyContact);
}
}

View File

@@ -43,6 +43,8 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper,Company> imple
private CompanyCardMapper companyCardMapper; private CompanyCardMapper companyCardMapper;
@Autowired @Autowired
private CompanyLabelMapper companyLabelMapper; private CompanyLabelMapper companyLabelMapper;
@Autowired
private CompanyContactMapper companyContactMapper;
/** /**
* 查询公司 * 查询公司
* *
@@ -87,7 +89,15 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper,Company> imple
if(count>0){ if(count>0){
throw new ServiceException(company.getName()+",该公司已存在"); throw new ServiceException(company.getName()+",该公司已存在");
} }
return companyMapper.insert(company); int insert =companyMapper.insert(company);
if(insert>0){
company.getCompanyContactList().forEach(x->{
CompanyContact companyContact=new CompanyContact();
companyContact.setCompanyId(company.getCompanyId());
companyContactMapper.insert(companyContact);
});
}
return insert;
} }
/** /**

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cms.service.impl;
import com.ruoyi.cms.domain.JobContact;
import com.ruoyi.cms.mapper.JobContactMapper;
import com.ruoyi.cms.service.JobContactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class JobContactServiceImpl extends ServiceImpl<JobContactMapper, JobContact> implements JobContactService {
@Autowired
JobContactMapper jobContactMapper;
public List<JobContact> getSelectList(JobContact jobContact){
return jobContactMapper.getSelectList(jobContact);
}
}

View File

@@ -73,6 +73,8 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
private static final String AMAP_URL = "https://restapi.amap.com/v3/place/text"; private static final String AMAP_URL = "https://restapi.amap.com/v3/place/text";
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
private JobContactMapper jobContactMapper;
/** /**
* 更新工作地址的经纬度信息 * 更新工作地址的经纬度信息
@@ -242,6 +244,13 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
HttpUtil.post("http://39.98.44.136:6004/insert_vector", jsonBody); HttpUtil.post("http://39.98.44.136:6004/insert_vector", jsonBody);
}); });
thread.start(); thread.start();
if(insert>0){
job.getJobContactList().forEach(x->{
JobContact jobContact=new JobContact();
jobContact.setJobId(job.getJobId());
jobContactMapper.insert(jobContact);
});
}
return insert; return insert;
} }

View File

@@ -58,4 +58,16 @@ public class StringUtil {
.map(String::trim) // 去除每个部分的前后空格 .map(String::trim) // 去除每个部分的前后空格
.collect(Collectors.toList()); // 收集为List .collect(Collectors.toList()); // 收集为List
} }
/**
* 脱敏逻辑前4位 + ***+ 后4位
* @param idCard
* @return
*/
public static String desensitizeIdCard(String idCard) {
if (idCard == null || idCard.length() != 18) {
return idCard; // 非标准身份证号不脱敏(或按规则处理)
}
return idCard.substring(0, 4) + "***" + idCard.substring(14);
}
} }

View File

@@ -28,10 +28,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<result property="jobTitleId" column="job_title_id" /> <result property="jobTitleId" column="job_title_id" />
<result property="isRecommend" column="is_recommend" /> <result property="isRecommend" column="is_recommend" />
<result property="idCard" column="id_card" />
<result property="hire" column="hire" />
</resultMap> </resultMap>
<sql id="selectAppUserVo"> <sql id="selectAppUserVo">
select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend from app_user select user_id, name, age, sex, birth_date, education, political_affiliation, phone, avatar, salary_min, salary_max, area, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark,job_title_id,is_recommend,id_card,hire from app_user
</sql> </sql>
<select id="selectAppUserList" parameterType="AppUser" resultMap="AppUserResult"> <select id="selectAppUserList" parameterType="AppUser" resultMap="AppUserResult">
@@ -52,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="loginIp != null and loginIp != ''"> and login_ip = #{loginIp}</if> <if test="loginIp != null and loginIp != ''"> and login_ip = #{loginIp}</if>
<if test="loginDate != null "> and login_date = #{loginDate}</if> <if test="loginDate != null "> and login_date = #{loginDate}</if>
<if test="experience != null "> and experience = #{experience}</if> <if test="experience != null "> and experience = #{experience}</if>
<if test="idCard != null and idCard != ''"> and id_card like concat('%', CAST(#{idCard} AS VARCHAR), '%')</if>
</where> </where>
</select> </select>
<select id="selectByJobId" resultType="com.ruoyi.cms.domain.AppUser" parameterType="java.lang.Long"> <select id="selectByJobId" resultType="com.ruoyi.cms.domain.AppUser" parameterType="java.lang.Long">

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cms.mapper.CompanyContactMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="CompanyContact" id="CompanyContactResult">
<result property="id" column="id"/>
<result property="companyId" column="company_id"/>
<result property="contactPerson" column="contact_person"/>
<result property="contactPersonPhone" column="contact_person_phone"/>
<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"/>
</resultMap>
<sql id="selectCompanyContactVo">
select id, company_id, contact_person, contact_person_phone, del_flag, create_by, create_time, update_by, update_time, remark from company_contact
</sql>
<select id="getSelectList" resultMap="CompanyContactResult" parameterType="CompanyContact">
<include refid="selectCompanyContactVo"/>
<where> del_flag = '0'
<if test="companyId!=null and companyId!='' ">
and company_id=#{companyId}
</if>
<if test="contactPerson!=null and contactPerson!='' ">
and contact_person=#{contactPerson}
</if>
<if test="contactPersonPhone!=null and contactPersonPhone!='' ">
and contact_person_phone=#{contactPersonPhone}
</if>
</where>
</select>
</mapper>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cms.mapper.JobContactMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="JobContact" id="jobContactResult">
<result property="id" column="id"/>
<result property="jobId" column="job_id"/>
<result property="contactPerson" column="contact_person"/>
<result property="contactPersonPhone" column="contact_person_phone"/>
<result property="position" column="position"/>
<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"/>
</resultMap>
<sql id="JobContactVo">
select id, job_id, contact_person, contact_person_phone, position, del_flag, create_by, create_time, update_by, update_time, remark from job_contact
</sql>
<select id="getSelectList" resultMap="jobContactResult" parameterType="JobContact">
<include refid="JobContactVo"/>
<where> del_flag = '0'
<if test="jobId!=null and jobId!='' ">
and job_id=#{jobId}
</if>
<if test="contactPerson!=null and contactPerson!='' ">
and contact_person=#{contactPerson}
</if>
<if test="contactPersonPhone!=null and contactPersonPhone!='' ">
and contact_person_phone=#{contactPersonPhone}
</if>
<if test="position!=null and position!='' ">
and position=#{position}
</if>
</where>
</select>
</mapper>

View File

@@ -33,10 +33,11 @@
<result property="isExplain" column="is_explain" /> <result property="isExplain" column="is_explain" />
<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" />
</resultMap> </resultMap>
<sql id="selectJobVo"> <sql id="selectJobVo">
select job_id, job_title, min_salary, max_salary, education, experience, company_name, job_location, posting_date, vacancies, del_flag, create_by, create_time, update_by, update_time, remark, latitude, longitude, "view", company_id , is_hot ,apply_num,is_publish, description,job_location_area_code,data_source,job_url,job_category,is_explain,explain_url,cover from job select job_id, job_title, min_salary, max_salary, education, experience, company_name, job_location, posting_date, vacancies, del_flag, create_by, create_time, update_by, update_time, remark, latitude, longitude, "view", company_id , is_hot ,apply_num,is_publish, description,job_location_area_code,data_source,job_url,job_category,is_explain,explain_url,cover,job_type from job
</sql> </sql>
<insert id="insertBatchRowWork"> <insert id="insertBatchRowWork">
INSERT INTO row_work ( INSERT INTO row_work (
@@ -66,7 +67,7 @@
job_title, min_salary, max_salary, education, experience, company_name, job_location, job_title, min_salary, max_salary, education, experience, company_name, job_location,
job_location_area_code, posting_date, vacancies, latitude, longitude, "view", company_id, job_location_area_code, posting_date, vacancies, latitude, longitude, "view", company_id,
is_hot, apply_num, description, is_publish, data_source, job_url, remark, del_flag, is_hot, apply_num, description, is_publish, data_source, job_url, remark, del_flag,
create_by, create_time, row_id, job_category create_by, create_time, row_id, job_category,jobType
) VALUES ) VALUES
<foreach collection="list" item="job" separator=","> <foreach collection="list" item="job" separator=",">
( (
@@ -75,7 +76,7 @@
#{job.vacancies}, #{job.latitude}, #{job.longitude}, #{job.view}, #{job.companyId}, #{job.vacancies}, #{job.latitude}, #{job.longitude}, #{job.view}, #{job.companyId},
#{job.isHot}, #{job.applyNum}, #{job.description}, #{job.isPublish}, #{job.dataSource}, #{job.isHot}, #{job.applyNum}, #{job.description}, #{job.isPublish}, #{job.dataSource},
#{job.jobUrl}, #{job.remark}, #{job.delFlag}, #{job.createBy}, #{job.createTime}, #{job.jobUrl}, #{job.remark}, #{job.delFlag}, #{job.createBy}, #{job.createTime},
#{job.rowId}, #{job.jobCategory} #{job.rowId}, #{job.jobCategory},#{job.jobType}
) )
</foreach> </foreach>
</insert> </insert>
@@ -134,6 +135,27 @@
<if test="companyId != null "> and company_id = #{companyId}</if> <if test="companyId != null "> and company_id = #{companyId}</if>
<if test="isHot != null "> and is_hot = #{isHot}</if> <if test="isHot != null "> and is_hot = #{isHot}</if>
<if test="applyNum != null "> and apply_num = #{applyNum}</if> <if test="applyNum != null "> and apply_num = #{applyNum}</if>
<if test="code != null "> and company_id in(select company_id from company where code=#{code})</if>
<if test="compensation!=null ">
<if test="compensation==0 ">
and min_salary &lt; 1750
</if>
<if test="compensation==1 ">
and max_salary &lt; 2000 and min_salary &gt;= 1750
</if>
<if test="compensation==2 ">
and max_salary &lt; 3000 and min_salary &gt;= 2000
</if>
<if test="compensation==3 ">
and max_salary &lt; 4000 and min_salary &gt;= 3000
</if>
<if test="compensation==4 ">
and max_salary &lt; 5000 and min_salary &gt;= 4000
</if>
<if test="compensation==5 ">
and min_salary &gt; 5000
</if>
</if>
</where> </where>
order by is_explain desc order by is_explain desc
</select> </select>