From cf858f7bf5a56ab2c2012e941b37dcc0aec6ba8b Mon Sep 17 00:00:00 2001 From: chenyanchang <30190327@qq.com> Date: Mon, 8 Jun 2026 23:42:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=B2=97=E4=BD=8D=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=96=B0=E6=8E=A5=E5=8F=A3=E4=BB=A5=E5=8F=8A=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8A=E4=BC=A0=E6=95=B0=E6=8D=AE=E7=AD=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/AppScriptController.java | 25 +++++++++ .../com/ruoyi/cms/domain/query/JobSearch.java | 3 ++ .../java/com/ruoyi/cms/mapper/JobMapper.java | 5 ++ .../cms/service/impl/JobServiceImpl.java | 53 +++++++++++++++++-- .../main/resources/mapper/app/JobMapper.xml | 6 ++- 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppScriptController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppScriptController.java index bdc1461..11eefda 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppScriptController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppScriptController.java @@ -2,14 +2,21 @@ package com.ruoyi.cms.controller.app; import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.cms.service.IJobService; +import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.file.FileUploadUtils; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; /** * 岗位Controller @@ -46,6 +53,24 @@ public class AppScriptController extends BaseController jobService.importRow(path); return success(); } + //导入原始数据 + @GetMapping("/importRow/v2") + public AjaxResult importRowV2(@RequestParam("file") MultipartFile file) + { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = null; + try { + fileName = FileUploadUtils.upload(filePath, file); + } catch (IOException e) { + error("读取文件出错"); + } + String path = filePath + fileName.replace("profile/upload/", ""); + jobService.importRow(path); + return success(); + } + // 导入500强 @GetMapping("/importLabel500") public void importLabel() diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/query/JobSearch.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/query/JobSearch.java index aaa196b..632b1f3 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/query/JobSearch.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/query/JobSearch.java @@ -1,5 +1,6 @@ package com.ruoyi.cms.domain.query; +import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.cms.domain.Job; import lombok.Data; @@ -10,7 +11,9 @@ import lombok.Data; @Data public class JobSearch extends Job { //查询开始时间 + @TableField(exist = false) private String startDate; //查询结束时间 + @TableField(exist = false) private String endDate; } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java index 0ec31d6..0ef0c5f 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/mapper/JobMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.cms.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; import java.util.Map; @@ -64,4 +65,8 @@ public interface JobMapper extends BaseMapper Integer getTotals(Job job); Long updateReviewStatus(@Param("jobId") Long jobId, @Param("reviewStatus") String reviewStatus); + + //删除岗位 + @InterceptorIgnore(blockAttack = "true") + Long delRowWork(); } 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 236d397..cac2f19 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 @@ -3,6 +3,7 @@ package com.ruoyi.cms.service.impl; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -743,6 +744,10 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe public void importRow(String path) { try { logger.info("开始导入Excel数据..."); + + //先清理旧数据 + Long oldDataNum = jobMapper.delRowWork(); + logger.info("删除旧的row-work..." + oldDataNum); // 读取Excel文件中的数据 List rowWorks = ExcelToObject.readExcelToObjects(path, RowWork.class); logger.info("从Excel中读取到 {} 条数据", rowWorks.size()); @@ -753,6 +758,11 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe orgDataMap.put("58同城", new ArrayList<>()); orgDataMap.put("前程无忧", new ArrayList<>()); orgDataMap.put("猎聘网", new ArrayList<>()); + orgDataMap.put("石河子人才网2", new ArrayList<>()); + orgDataMap.put("石河子招聘网", new ArrayList<>()); + orgDataMap.put("天互招聘网", new ArrayList<>()); + orgDataMap.put("乌鲁木齐快聘网", new ArrayList<>()); + orgDataMap.put("新疆人才网", new ArrayList<>()); // 遍历数据,按ORG分类,每类最多取20000条 for (RowWork rowWork : rowWorks) { @@ -769,11 +779,23 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe int zlCount = orgDataMap.get("智联招聘").size(); int tcCount = orgDataMap.get("58同城").size(); int qcCount = orgDataMap.get("前程无忧").size(); - int lpCount = orgDataMap.get("前程无忧").size(); + int lpCount = orgDataMap.get("猎聘网").size(); + int shzrc2Count = orgDataMap.get("石河子人才网2").size(); + int shzzpCount = orgDataMap.get("石河子招聘网").size(); + int thzpCount = orgDataMap.get("天互招聘网").size(); + int wlmqkpCount = orgDataMap.get("乌鲁木齐快聘网").size(); + int xjrcCount = orgDataMap.get("新疆人才网").size(); + + logger.info("智联招聘数据量: {}", zlCount); logger.info("58同城数据量: {}", tcCount); logger.info("前程无忧数据量: {}", qcCount); logger.info("猎聘网数据量: {}", lpCount); + logger.info("石河子人才网2数据量: {}", shzrc2Count); + logger.info("石河子招聘网数据量: {}", shzzpCount); + logger.info("天互招聘网数据量: {}", thzpCount); + logger.info("乌鲁木齐快聘网数据量: {}", wlmqkpCount); + logger.info("新疆人才网数据量: {}", xjrcCount); // 合并所有数据(智联招聘 + 58同城 + 前程无忧) List allData = new ArrayList<>(); @@ -781,6 +803,11 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe allData.addAll(orgDataMap.get("58同城")); allData.addAll(orgDataMap.get("前程无忧")); allData.addAll(orgDataMap.get("猎聘网")); + allData.addAll(orgDataMap.get("石河子人才网2")); + allData.addAll(orgDataMap.get("石河子招聘网")); + allData.addAll(orgDataMap.get("天互招聘网")); + allData.addAll(orgDataMap.get("乌鲁木齐快聘网")); + allData.addAll(orgDataMap.get("新疆人才网")); // 批量插入数据 int batchSize = 50; @@ -873,12 +900,19 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe logger.info("生成唯一标识符: {}", string); LocalDateTime now = LocalDateTime.now(); String formattedDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + Job jobOne = null; for (RowWork rowWork : rowWorks) { try { Job job = new Job(); if(StringUtil.isEmptyOrNull(rowWork.getAca112())){ continue; } + //去重 + jobOne = jobMapper.selectOne(Wrappers.lambdaQuery(Job.class).eq(Job::getJobTitle, rowWork.getAca112()).eq(Job::getMinSalary, Long.valueOf(rowWork.getSalaryLow())).eq(Job::getMaxSalary, rowWork.getSalaryHight()) + .eq(Job::getCompanyName, rowWork.getAAB004()).eq(Job::getJobLocation, rowWork.getAAE006()).orderByDesc(Job::getCreateTime).last("LIMIT 1")); + if (jobOne != null) { + continue; + } job.setJobTitle(rowWork.getAca112()); job.setMinSalary(Long.valueOf(rowWork.getSalaryLow())); job.setMaxSalary(Long.valueOf(rowWork.getSalaryHight())); @@ -896,10 +930,14 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe job.setJobLocation(rowWork.getAAE006()); job.setPostingDate(formattedDate); job.setJobCategory(rowWork.getJobCategory()); - if (rowWork.getAcb240() == null) { + if (org.apache.commons.lang3.StringUtils.isEmpty(rowWork.getAcb240())) { job.setVacancies(-1L); } else { - job.setVacancies(Long.valueOf(rowWork.getAcb240().replace("人", ""))); + String v = rowWork.getAcb240().replace("人", "").replace("以上", ""); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(v) && v.contains("-")) { + v = v.split("-")[1]; + } + job.setVacancies(org.apache.commons.lang3.StringUtils.isNotEmpty(v) ? Long.valueOf(v) : -1L); } if (rowWork.getLatitude() != null && !rowWork.getLatitude().isEmpty()) { job.setLatitude(new BigDecimal(rowWork.getLatitude())); @@ -912,7 +950,8 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe if(Objects.isNull(rowWork.getCounty())){ job.setJobLocationAreaCode(null); }else { - job.setJobLocationAreaCode(Integer.valueOf(Objects.requireNonNull(iBussinessDictDataService.findCode(areaData, rowWork.getCounty())))); + String code = iBussinessDictDataService.findCode(areaData, rowWork.getCounty()); + job.setJobLocationAreaCode(org.apache.commons.lang3.StringUtils.isNotEmpty(code) ? Integer.valueOf(code) : null); } job.setDescription(rowWork.getAcb22a()); job.setIsPublish(1); @@ -946,6 +985,12 @@ public class JobServiceImpl extends ServiceImpl implements IJobSe } logger.info("数据导入完成,总共插入 {} 条公司数据和 {} 条职位数据", totalCompanyInserted, totalJobInserted); + Job job = jobMapper.selectOne(Wrappers.lambdaQuery(Job.class).eq(Job::getCreateTime, formattedDate).last("LIMIT 1")); + if (job != null) { + logger.info("存在新插入的数据,日期为:" + formattedDate); + } else { + logger.info("不存在新插入的数据:"); + } } catch (Exception e) { logger.error("导入数据过程中发生异常: {}", e.getMessage(), e); throw new RuntimeException(e); diff --git a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml index 4c7881c..1fcf3d4 100644 --- a/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml +++ b/ruoyi-bussiness/src/main/resources/mapper/app/JobMapper.xml @@ -129,7 +129,7 @@ job_title, min_salary, max_salary, education, experience, company_name, job_location, 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,jobType,job_address + create_by, create_time, row_id, job_category,job_type,job_address ) VALUES ( @@ -360,4 +360,8 @@ update job set review_status = #{reviewStatus} where job_id = #{jobId} + + + delete from row_work + \ No newline at end of file