package com.ruoyi.energymeter.job;
|
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
import com.ruoyi.energymeter.service.EnergyMeterDemoService;
|
import com.ruoyi.energymeter.service.EnergyMeterSyncService;
|
import com.ruoyi.energymeter.util.EnergyMeterSupport;
|
import org.quartz.DisallowConcurrentExecution;
|
import org.quartz.Job;
|
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionException;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
/**
|
* 每天 08:00(Asia/Shanghai)自动同步作业。
|
*
|
* <p>禁止并发执行;错过触发时按 FireAndProceed 补触发一次,缺口由进度表逐日补齐。</p>
|
*/
|
@DisallowConcurrentExecution
|
public class EnergyMeterDailySyncJob implements Job {
|
|
private static final Logger log = LoggerFactory.getLogger(EnergyMeterDailySyncJob.class);
|
|
@Override
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
Exception syncError = null;
|
try {
|
EnergyMeterSyncService syncService = SpringUtils.getBean(EnergyMeterSyncService.class);
|
Long runId = syncService.triggerScheduledSync();
|
log.info("水电表 08:00 自动同步完成 runId={}", runId);
|
} catch (Exception e) {
|
syncError = e;
|
log.error("水电表 08:00 自动同步失败", e);
|
}
|
// 气表演示设备与真实同步互不影响:即使第三方同步失败,也照常生成前一天的数据
|
try {
|
EnergyMeterDemoService demoService = SpringUtils.getBean(EnergyMeterDemoService.class);
|
int generated = demoService.generateGasDemo(EnergyMeterSupport.today().minusDays(1));
|
log.info("气表演示数据生成完成 设备数={}", generated);
|
} catch (Exception e) {
|
log.error("气表演示数据生成失败", e);
|
}
|
if (syncError != null) {
|
throw new JobExecutionException(syncError, false);
|
}
|
}
|
}
|