feat: Implement external job import logging functionality with independent log files

This commit is contained in:
2026-07-21 16:17:07 +08:00
parent 056ed42e46
commit 11a29662d5
6 changed files with 201 additions and 5 deletions

View File

@@ -6,14 +6,18 @@ 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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
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();
}
@@ -39,9 +43,43 @@ public class JobCron {
/**
* 外部 Excel 全量快照同步。
* Quartz 调用目标:jobCron.importLatestExternalSnapshot()
* Quartz 调用目标:com.ruoyi.cms.cron.JobCron.importLatestExternalSnapshot()
*/
public void importLatestExternalSnapshot(){
SpringUtils.getBean(IExternalJobImportService.class).importLatest();
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', ' ');
}
}