package com.integrated.zyyt; import cn.hutool.core.convert.Convert; import com.integrated.zyyt.service.ZyytService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.scheduling.annotation.Scheduled; import javax.annotation.Resource; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.Map; /** * @ClassName ZyytQuartz * @Author cy * @Date 2022/11/15 * @Description * @Version 1.0 **/ @Configuration @Slf4j public class ZyytQuartz { @Resource private ZyytService zyytService; @Resource private JdbcTemplate jdbcTemplate; @Scheduled(cron = "0 0/30 * * * ?") private void stationInfoTask() { LocalDate yestDay = LocalDate.now().minus(1, ChronoUnit.DAYS); if (canGetAgain("STATIONINFO", yestDay)) { log.info("执行stationInfoTask--{}", yestDay); zyytService.stationInfoTasks(); } else { log.info("放弃执行stationInfoTask--{}", yestDay); } } @Scheduled(cron = "0 3/30 * * * ?") private void shkdrbTasks() { LocalDate yestDay = LocalDate.now().minus(1, ChronoUnit.DAYS); if (canGetAgain("YYZT_T_SHKDRB", yestDay)) { log.info("执行shkdrbTasks--{}", yestDay); zyytService.shkdrbTasks(yestDay); } else { log.info("放弃执行shkdrbTasks--{}", yestDay); } } @Scheduled(cron = "0 5/30 * * * ?") private void djtjbTasks() { LocalDate yestDay = LocalDate.now().minus(1, ChronoUnit.DAYS); if (!canGetAgain("YYZT_T_DJTJB", yestDay)) { log.info("放弃执行djtjbTasks--{}", yestDay); } log.info("执行djtjbTasks--{}", yestDay); zyytService.djtjbTasks(yestDay); } /** * 判断指定日期是否需要重新执行 * * @param tableName * @param date * @return true 需要执行,false 不需要 */ private boolean canGetAgain(String tableName, LocalDate date) { String sql = "SELECT*FROM (SELECT*FROM ZYYT_RECORD WHERE BATCH_NO='" + ZyytConstant.batchNoPrefix + date + "' AND TABLE_NAME='" + tableName + "' ORDER BY START_TIME DESC) tmp WHERE ROWNUM<=1"; Map map = null; try { map = jdbcTemplate.queryForMap(sql); } catch (Exception e) { log.info("sql=={}没有查询到数据", sql); } if (map != null) { String isFinish = Convert.toStr(map.get("IS_FINISH")); if (!"1".equals(isFinish)) { return false; } //下面 isFinish都是1 String isError = Convert.toStr(map.get("IS_ERROR")); if ("1".equals(isError)) { // 执行有误 return true; } // 成功执行没有错 String countNum = Convert.toStr(map.get("COUNT_NUM")); if ("0".equals(countNum)) { //没有拉取到数据 log.info("stationInfoTask"); return true; } } else { // 该批次未执行 log.info("stationInfoTask"); return true; } return false; } }