liuyn
2024-03-11 a87f1c3df03078814ee97ad0c8ac200a232419e9
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
/*
 * 为了确保不出现101问题,一次最多只能执行一条数据
 * 这个batch是用作更新历史数据使用
 * 找出来有延期任务的源任务;
 * 把源任务(最开始的这个任务)带到它延期任务廉的任何一个任务去;
 * 查查被动任务,概率很低,但是可能存在超过60天的问题,所以在更新以后需要找一圈任务超过60天的情况;
 */
global class addInitTaskBatch implements Database.Batchable<sObject> {
    public string taskID;
    global addInitTaskBatch(string taskID){
        this.taskID = taskID;
    }
    global addInitTaskBatch(){
    }
    // 检索有延期任务的任务,不包括已经因为离职,所以已经关闭的任务
    global Database.QueryLocator start(Database.BatchableContext BC) {
        String query = 'SELECT Id,Name,delayTaskP__c, Daily_Report__c , Event__c FROM task__c '
            +'where delayTaskP__c != null '
            + ' and taskStatus__c != \'06 关闭\'';
        if(string.isNotBlank(taskID)){
            query += ' and ID = \'' + taskID + '\'';
        }
        System.debug('query:'+query);
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, List<task__c> tasklist) {
        main(tasklist);
    }
    @TestVisible
    private void main(List<task__c> tasklist){
        // 预计要更新的任务List
        list<task__c> updateTaskList = new list<task__c>();
        // 因为每次只有一个初始任务赋值,所以这里取第一个;
        task__c initTask = tasklist[0];
        System.debug('initTask:'+initTask);
        //用作循环递归找所有延期任务,每次都拿最新的延期任务
        //如果这个值是空的那么就可以跳过不执行
        id tempTaskid = initTask.delayTaskP__c;
        while (!string.isblank(tempTaskid)){
            task__c tempTask =
                [select id,delayTaskP__c,Initial_Task__c from task__c
                 where id = : tempTaskid
                ];
            // 赋值初始任务,然后计入要更新的延期任务当中
            System.debug('tempTask:'+tempTask);
            initTask.Initial_Task__c = tempTask.id;
            updateTaskList.clear();
            updateTaskList.add(initTask);
            tempTaskid = tempTask.delayTaskP__c;
 
        }
        System.debug('updateTaskList:'+updateTaskList);
        if(updateTaskList.size()>0){
            update updateTaskList;
        }
    }
    global void finish(Database.BatchableContext BC) {
    }
}