InitDataSyncJob.java 4.22 KB
package com.idss.vulsync.schedule;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.idss.vulsync.constants.CommonConstant;
import com.idss.vulsync.entity.AssetReportVO;
import com.idss.vulsync.mvc.mapper.ConsultVulmanageSyncEntityMapper;
import com.idss.vulsync.mvc.pojo.db.ConsultVulmanageSyncEntity;
import com.idss.vulsync.mvc.service.CommonService;
import com.idss.vulsync.mvc.service.EsService;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @Author: zc
 * @Date: 2024/8/16 16:58
 * 漏管初始数据同步
 */
@Service
@Slf4j
public class InitDataSyncJob implements Job {
    @Autowired
    ConsultVulmanageSyncEntityMapper consultVulmanageSyncEntityMapper;
    @Autowired
    EsService esService;
    @Autowired(required = false)
    @Qualifier("QuartzScheduler")
    public Scheduler scheduler;
    @Autowired
    CommonService commonService;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        log.info("quartz启动" + this.getClass().getSimpleName());
        this.run(jobExecutionContext);
    }


    public void run(JobExecutionContext jobExecutionContext) {
        Date now = new Date();
        log.info("开始同步初始数据--------");
        ConsultVulmanageSyncEntity syncEntity = consultVulmanageSyncEntityMapper.selectByPrimaryKey(CommonConstant.CONSULT_UNIQUE_ID);
        if (ObjectUtil.isEmpty(syncEntity) || ObjectUtil.isEmpty(syncEntity.getLatestEsId())) {
            log.error("开始同步初始数据失败,未找到初始数据");
        }
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        List<AssetReportVO> list = esService.selectList(syncEntity.getLatestEsId(), boolQueryBuilder);


        commonService.sync(list, syncEntity, now, "INIT");

        try {
            jobExecutionContext.getScheduler().deleteJob(jobExecutionContext.getJobDetail().getKey());
        } catch (SchedulerException e) {
            e.printStackTrace();
        }

        try {
            scheduler.deleteJob(new JobKey(InitDataSyncJob.class.getSimpleName(),InitDataSyncJob.class.getSimpleName()));
        }catch (Exception e){
            e.printStackTrace();
        }

        try {
            JobKey jobKey=new JobKey(UpdateDataSyncJob.class.getSimpleName(), UpdateDataSyncJob.class.getSimpleName());
            scheduler.deleteJob(jobKey);
        }catch (Exception e){
            e.printStackTrace();
        }

        try {
            //新增增量更新同步任务
            String updCycle = syncEntity.getUpdCycle();
            String numStr = updCycle.substring(0, 2);
            String unit = updCycle.substring(2, updCycle.length());
            Integer num = numStr.startsWith("0") ? Integer.parseInt(numStr.substring(1, numStr.length())) : Integer.parseInt(numStr);


            JobDetail jobDetail = JobBuilder.newJob(UpdateDataSyncJob.class).
                    withIdentity(UpdateDataSyncJob.class.getSimpleName(), UpdateDataSyncJob.class.getSimpleName())
                    .build();

            DateTime executionTime = new DateTime();

            if (unit.equals("天")) {
                executionTime = DateUtil.offsetDay(now, num);
            } else if (unit.equals("时")) {
                executionTime = DateUtil.offsetHour(now, num);
            } else {
                executionTime = new DateTime(now);
            }

            Trigger trigger = TriggerBuilder.newTrigger().withIdentity(UpdateDataSyncJob.class.getSimpleName(), UpdateDataSyncJob.class.getSimpleName())
                    .startAt(executionTime).build();
            scheduler.scheduleJob(jobDetail, trigger);
            log.error("新增增量更新同步任务,下次执行时间{}", DateUtil.formatDateTime(executionTime));


        } catch (Exception e) {
            log.error("同步初始数据异常", e);
        }


        log.info("结束同步初始数据--------");
    }

}