高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
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
/* wql
apex作业总批量为1时,是正常的不会走finish里,不创建计划的作业.
apex作业总批量为0时,说明电子签收Batch停了,需要重新执行Batch创建计划的作业.
1.该batch主要用于监控15分钟的签收单的计划作业的batch
2.未来可增加条件,监控其他对象的计划的作业
 
*/
global class monitorUpdateESignBatch implements Database.Batchable < sObject > , Database.Stateful{
    //参数变量
    public String likeStr;
    public String tempLikeStr;
 
    //执行标识
    public Boolean executeFlag = true;
    //无参构造
    public monitorUpdateESignBatch() {
 
    }
    //未来扩展用 有参构造
    // public monitorUpdateESignBatch(String likeStr) {
    //     this.likeStr = likeStr;
    // }
 
    global Database.QueryLocator start(Database.BatchableContext bc) {
        //查询  所有的计划的作业
        String query = 'SELECT Id, CronJobDetailId, CronExpression, CronJobDetail.Name,NextFireTime  FROM CronTrigger ';
        //未来拓展用 查询作业名为其他的计划的作业
        // if(String.isNotBlank(likeStr)){
        //     tempLikeStr = likeStr;
        // }else{
        //     tempLikeStr = 'updateESignFormSchedule00%';
        // }
        tempLikeStr = 'updateESignFormSchedule00%';
        query += ' WHERE CronJobDetail.Name Like :tempLikeStr';
 
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, List<CronTrigger> ctList) {
        
        if(ctList.size()>0){
            for(CronTrigger c:ctList){
                //list 不为0有计划的作业 没有下次运行的时间 也重新执行
                if(c.NextFireTime !=null){
                    executeFlag = false;
                    break;
                }
            }
        }
    }
    global void finish(Database.BatchableContext BC) {
        //标识为true时,重新执行该计划的作业
        system.debug('executeFlag:'+executeFlag);
        //①list 为0 表示计划的作业上没有签收单的计划作业
        //②list 不为0有计划的作业 没有下次运行的时间 也重新执行
        if(executeFlag){
            Database.executeBatch(new updateESignBatch(), 100);
        }
    }
}