package com.ruoyi.cms.cron; import com.ruoyi.cms.mapper.JobMapper; import com.ruoyi.cms.service.IBussinessOperLogService; import com.ruoyi.cms.service.ICompanyService; import com.ruoyi.cms.service.IESJobSearchService; import com.ruoyi.cms.service.IJobService; import com.ruoyi.cms.service.IJobTitleSuggestService; import com.ruoyi.cms.externalimport.ExternalJobImportProperties; import com.ruoyi.cms.externalimport.ExternalJobImportResult; import com.ruoyi.cms.externalimport.ExternalJobImportRunLog; import com.ruoyi.cms.externalimport.IExternalJobImportService; import com.ruoyi.common.utils.spring.SpringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JobCron { private static final Logger LOGGER = LoggerFactory.getLogger(JobCron.class); public void isHot(){ SpringUtils.getBean(JobMapper.class).isHot(); } public void resetEs(){ SpringUtils.getBean(IESJobSearchService.class).resetTextCache(); } //查看索引是否存在,如果不存在,就更新 public void checkEsAndFix(){ SpringUtils.getBean(IESJobSearchService.class).checkEsAndFix(); } //更新公司的招聘数量 public void updateJobCountOfCompany(){ SpringUtils.getBean(ICompanyService.class).updateJobCountOfCompany(); } /** * 重建岗位名称联想缓存。 * Quartz 任务调用目标:jobCron.rebuildJobTitleSuggest() */ public void rebuildJobTitleSuggest(){ SpringUtils.getBean(IJobTitleSuggestService.class).rebuildCache(); } /** * 外部 Excel 全量快照同步。 * Quartz 调用目标:com.ruoyi.cms.cron.JobCron.importLatestExternalSnapshot() */ public void importLatestExternalSnapshot(){ ExternalJobImportProperties properties = SpringUtils.getBean(ExternalJobImportProperties.class); ExternalJobImportRunLog runLog = ExternalJobImportRunLog.open(properties.getRunLogDirectory()); LOGGER.info("外部岗位全量同步开始,runId={},独立日志={}", runLog.getRunId(), runLog.getFile()); try { runLog.info("开始执行外部岗位 Excel 全量快照同步"); ExternalJobImportResult result = SpringUtils.getBean(IExternalJobImportService.class).importLatest(); runLog.info("执行完成;status=" + result.getStatus() + ";batchId=" + safe(result.getBatchId()) + ";totalRows=" + result.getTotalRows() + ";validRows=" + result.getValidRows() + ";invalidRows=" + result.getInvalidRows() + ";duplicateRows=" + result.getDuplicateRows() + ";insertCount=" + result.getInsertCount() + ";updateCount=" + result.getUpdateCount() + ";keepCount=" + result.getKeepCount() + ";restoreCount=" + result.getRestoreCount() + ";deleteCount=" + result.getDeleteCount() + ";message=" + safe(result.getMessage())); LOGGER.info("外部岗位全量同步结束,runId={},status={},batchId={}", runLog.getRunId(), result.getStatus(), result.getBatchId()); } catch (RuntimeException ex) { runLog.error("执行失败", ex); LOGGER.error("外部岗位全量同步失败,runId={},独立日志={}", runLog.getRunId(), runLog.getFile(), ex); throw ex; } catch (Error error) { runLog.error("执行发生 JVM 错误", error); LOGGER.error("外部岗位全量同步发生 JVM 错误,runId={},独立日志={}", runLog.getRunId(), runLog.getFile(), error); throw error; } finally { runLog.close(); } } private String safe(String value) { return value == null ? "" : value.replace('\r', ' ').replace('\n', ' '); } }