package com.glxp.api.task; import com.glxp.api.constant.BasicExportTypeEnum; import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.entity.system.ScheduledEntity; import com.glxp.api.req.system.ScheduledRequest; import com.glxp.api.res.system.SyncDataSetResponse; import com.glxp.api.service.basic.BasicBackUpdateProductService; import com.glxp.api.service.sync.SpsSyncDownloadService; import com.glxp.api.service.sync.SyncDataSetService; import com.glxp.api.util.RedisUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Arrays; @Component @EnableScheduling public class AsyncHeartTask implements SchedulingConfigurer { final Logger logger = LoggerFactory.getLogger(AsyncHeartTask.class); @Resource protected ScheduledDao scheduledDao; @Resource RedisUtil redisUtil; @Resource private SyncDataSetService syncDataSetService; @Resource SpsSyncDownloadService spsSyncDownloadService; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.addTriggerTask(() -> process(), triggerContext -> { ScheduledRequest scheduledRequest = new ScheduledRequest(); scheduledRequest.setCronName("heartTask"); ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); String cron = scheduledEntity.getCron(); if (cron.isEmpty()) { logger.error("cron is null"); } return new CronTrigger(cron).nextExecutionTime(triggerContext); }); } private void process() { SyncDataSetResponse syncDataSetEntity = syncDataSetService.selectSet(); if (syncDataSetEntity.isDownstreamEnable()) { if (syncDataSetEntity.getSyncTime() != null) { long timeInterval = syncDataSetEntity.getSyncTime() * 60 * 1000; long curTime = System.currentTimeMillis(); Long lastTime = (Long) redisUtil.get("SPS_SYNC_GEN_DATA"); if (lastTime == null) { lastTime = System.currentTimeMillis(); redisUtil.set("SPS_SYNC_GEN_DATA", lastTime); } if (curTime - lastTime > timeInterval) { spsSyncDownloadService.syncDiProductsTask(); // todo 生成任务都写在这 Arrays.stream(BasicExportTypeEnum.values()).forEach(i -> { spsSyncDownloadService.syncData(syncDataSetEntity, i); }); // spsSyncDownloadService.syncBasicData(syncDataSetEntity); // spsSyncDownloadService.syncOtherData(syncDataSetEntity); redisUtil.set("SPS_SYNC_GEN_DATA", curTime); } } //定时同步单据最近更新数据至任务表,等待下载 if (syncDataSetEntity.getOrderSyncTime() != null) { long timeInterval = syncDataSetEntity.getOrderSyncTime() * 60 * 1000; long curTime = System.currentTimeMillis(); Long lastTime = (Long) redisUtil.get("SPS_ORDER_SYNC_GEN_DATA"); if (lastTime == null) { lastTime = System.currentTimeMillis(); redisUtil.set("SPS_ORDER_SYNC_GEN_DATA", lastTime); } if (curTime - lastTime > timeInterval) { spsSyncDownloadService.syncOrderTask(); redisUtil.set("SPS_ORDER_SYNC_GEN_DATA", curTime); } } } } }