岗位上传做处理

This commit is contained in:
sh
2026-05-20 21:47:27 +08:00
parent 037b44312e
commit cc016a09a7
2 changed files with 25 additions and 6 deletions

View File

@@ -1164,12 +1164,16 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void uploadFileJob(List<JobExcelVo> list) { public void uploadFileJob(List<JobExcelVo> list) {
System.out.println("==================== 导入开始 ====================");
System.out.println("Excel 总条数:" + list.size());
//查询所有企业 //查询所有企业
Map<String, Long> companyNameToIdMap = companyNameToIdMap(list); Map<String, Long> companyNameToIdMap = companyNameToIdMap(list);
//岗位字典转换 //岗位字典转换
List<Job> jobList = buildJobList(list, companyNameToIdMap); List<Job> jobList = buildJobList(list, companyNameToIdMap);
System.out.println("转换为 Job 后的条数:" + jobList.size());
//岗位去重 //岗位去重
List<Job> dedupedJobList = dedupJobList(jobList); List<Job> dedupedJobList = dedupJobList(jobList);
System.out.println("去重后剩余 Job 条数:" + dedupedJobList.size());
//批量保存岗 //批量保存岗
jobMapper.updateFileBatchInsert(dedupedJobList); jobMapper.updateFileBatchInsert(dedupedJobList);
//构建联系人列表(关联去重后的岗位) //构建联系人列表(关联去重后的岗位)
@@ -1211,6 +1215,8 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
* 字典转换 + Job对象构建业务数据转换 * 字典转换 + Job对象构建业务数据转换
*/ */
private List<Job> buildJobList(List<JobExcelVo> allExcelVoList, Map<String, Long> companyNameToIdMap) { private List<Job> buildJobList(List<JobExcelVo> allExcelVoList, Map<String, Long> companyNameToIdMap) {
String postingDate=DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS);
String downTime=DateUtils.getMonthThree(DateUtils.YYYY_MM_DD_HH_MM_SS);
return allExcelVoList.stream().map(it -> { return allExcelVoList.stream().map(it -> {
Job job = new Job(); Job job = new Job();
BeanUtils.copyProperties(it, job); BeanUtils.copyProperties(it, job);
@@ -1233,7 +1239,8 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
job.setJobLocationAreaCode(jobAreaCode); job.setJobLocationAreaCode(jobAreaCode);
job.setIsPublish(1); job.setIsPublish(1);
job.setDataSource("1"); job.setDataSource("1");
job.setPostingDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS)); job.setPostingDate(postingDate);
job.setDownTime(downTime);
job.setView(0L); job.setView(0L);
//填充region_code //填充region_code
job.setRegionCode(StringUtil.getAreaToRegionCode(jobAreaCode)); job.setRegionCode(StringUtil.getAreaToRegionCode(jobAreaCode));
@@ -1251,17 +1258,28 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
*/ */
private List<Job> dedupJobList(List<Job> jobList) { private List<Job> dedupJobList(List<Job> jobList) {
Map<String, Job> dedupMap = new LinkedHashMap<>(); Map<String, Job> dedupMap = new LinkedHashMap<>();
// Map<String, Integer> keyCountMap = new HashMap<>();
for (Job job : jobList) { for (Job job : jobList) {
String dedupKey = String.format( String dedupKey = String.format(
"%s_%s_%s", "%s_%s_%s_%s_%s_%s",
Optional.ofNullable(job.getCompanyId()).orElse(null), Optional.ofNullable(job.getCompanyId()).orElse(0L),
Optional.ofNullable(job.getCode()).map(String::trim).orElse(""),
job.getJobTitle().trim(), job.getJobTitle().trim(),
job.getJobLocation().trim(), job.getJobLocation().trim(),
job.getMinSalary(), job.getMinSalary(),
job.getMaxSalary() job.getMaxSalary()
); );
//计算重复
// keyCountMap.put(dedupKey, keyCountMap.getOrDefault(dedupKey, 0) + 1);
dedupMap.putIfAbsent(dedupKey, job); dedupMap.putIfAbsent(dedupKey, job);
} }
//查看重复key
// System.out.println("========== 重复KEY统计出现次数>1==========");
// keyCountMap.forEach((key, count) -> {
// if (count > 1) {
// System.out.println("重复KEY" + key + " → 出现次数:" + count);
// }
// });
return new ArrayList<>(dedupMap.values()); return new ArrayList<>(dedupMap.values());
} }
@@ -1278,7 +1296,8 @@ public class JobServiceImpl extends ServiceImpl<JobMapper,Job> implements IJobSe
job.getJobTitle().trim(), job.getJobTitle().trim(),
job.getJobLocation().trim() job.getJobLocation().trim()
), ),
job -> job job -> job,
(oldJob, newJob) -> newJob
)); ));
for (JobExcelVo vo : allExcelVoList) { for (JobExcelVo vo : allExcelVoList) {

View File

@@ -379,7 +379,7 @@
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,job_type,type,job_address,region_code, create_by, create_time, row_id, job_category,job_type,type,job_address,region_code,
staff_type,pass,pass_reason,job_status staff_type,pass,pass_reason,job_status,down_time
) VALUES ) VALUES
<foreach collection="list" item="job" separator=","> <foreach collection="list" item="job" separator=",">
( (
@@ -389,7 +389,7 @@
#{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.jobType},#{job.type},#{job.jobAddress}, #{job.rowId}, #{job.jobCategory},#{job.jobType},#{job.type},#{job.jobAddress},
#{job.regionCode},#{job.staffType},#{job.pass},#{job.passReason},'0' #{job.regionCode},#{job.staffType},#{job.pass},#{job.passReason},'0',#{job.downTime}
) )
</foreach> </foreach>
</insert> </insert>