cy
2022-11-18 08013d9f35bdfaa462916716f5c77b438af874fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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<String, Object> 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;
    }
}