diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java index 8962e1e..6c9987b 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobServiceImpl.java @@ -1164,12 +1164,16 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe @Override @Transactional(rollbackFor = Exception.class) public void uploadFileJob(List list) { + System.out.println("==================== 导入开始 ===================="); + System.out.println("Excel 总条数:" + list.size()); //查询所有企业 Map companyNameToIdMap = companyNameToIdMap(list); //岗位字典转换 List jobList = buildJobList(list, companyNameToIdMap); + System.out.println("转换为 Job 后的条数:" + jobList.size()); //岗位去重 List dedupedJobList = dedupJobList(jobList); + System.out.println("去重后剩余 Job 条数:" + dedupedJobList.size()); //批量保存岗 jobMapper.updateFileBatchInsert(dedupedJobList); //构建联系人列表(关联去重后的岗位) @@ -1211,6 +1215,8 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe * 字典转换 + Job对象构建(业务数据转换) */ private List buildJobList(List allExcelVoList, Map 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 -> { Job job = new Job(); BeanUtils.copyProperties(it, job); @@ -1233,7 +1239,8 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe job.setJobLocationAreaCode(jobAreaCode); job.setIsPublish(1); job.setDataSource("1"); - job.setPostingDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS)); + job.setPostingDate(postingDate); + job.setDownTime(downTime); job.setView(0L); //填充region_code job.setRegionCode(StringUtil.getAreaToRegionCode(jobAreaCode)); @@ -1251,17 +1258,28 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe */ private List dedupJobList(List jobList) { Map dedupMap = new LinkedHashMap<>(); +// Map keyCountMap = new HashMap<>(); for (Job job : jobList) { String dedupKey = String.format( - "%s_%s_%s", - Optional.ofNullable(job.getCompanyId()).orElse(null), + "%s_%s_%s_%s_%s_%s", + Optional.ofNullable(job.getCompanyId()).orElse(0L), + Optional.ofNullable(job.getCode()).map(String::trim).orElse(""), job.getJobTitle().trim(), job.getJobLocation().trim(), job.getMinSalary(), job.getMaxSalary() ); + //计算重复 +// keyCountMap.put(dedupKey, keyCountMap.getOrDefault(dedupKey, 0) + 1); 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()); } @@ -1278,7 +1296,8 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe job.getJobTitle().trim(), job.getJobLocation().trim() ), - job -> job + job -> job, + (oldJob, newJob) -> newJob )); for (JobExcelVo vo : allExcelVoList) { diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml index 21333be..9321c1c 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -379,7 +379,7 @@ 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, 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 ( @@ -389,7 +389,7 @@ #{job.isHot}, #{job.applyNum}, #{job.description}, #{job.isPublish}, #{job.dataSource}, #{job.jobUrl}, #{job.remark}, #{job.delFlag}, #{job.createBy}, #{job.createTime}, #{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} )