高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
global class updateQISPDAddFour implements Database.Batchable<sObject>, Database.Stateful  {
    public String query;
    //153p财年的开始日
    Date fromDate = null;
 
    Date addFourDate = null;
    public String id;
    public List<String> ids;
 
    global updateQISPDAddFour() {
        this.query = query;
    }
 
    global updateQISPDAddFour(String id) {
        this.id = id;
    }
 
    global updateQISPDAddFour(List<String> ids) {
        this.ids = ids;
    }
 
    global Database.QueryLocator start(Database.BatchableContext bc) {
        String et = 'ET';
        String eng = 'ENG';
        String  action = '送回';
        //检索市场部判定日不为空的、市场部意见未填写 、   的 QIS
        query = 'select id,SC_Judge_Date__c,SC_JudgeDate_Four__c,SC_Judge_Date_Four__c from QIS_Report__c ';
        query +=' where SC_Judge_Date__c !=null and Market_Opinion__c = null   ';
        //QIS判断分类为ET 或者ENG
        // query += ' and ( QIS_SC_Place__c=\'' + et + '\'  or QIS_SC_Place__c=\'' + eng + '\' )';
        //对应方法为送回
        query += ' and next_action__c =\'' + action + '\' ' ;
        if(!string.isblank(id)){
            query += ' and id = :id';
        }
        if(ids != null){
            query += ' and id in :ids';
        }
        system.debug('sql:'+query);
        return Database.getQueryLocator(query);
    }
 
    global void execute(Database.BatchableContext BC, list<Sobject> scope) {
        List<QIS_Report__c> qisList =new List < QIS_Report__c > ();
        qisList = scope;
 
        //用于存储本财年奥林巴斯日历的工作日
        List < Date > workDayNum = new List < Date > ();
        //LJPH-BQ8DQ4 精琢技术 wql 20200624 start
        Date todate = Date.today();
        //根据传入的财年 去判断上财年的开始日期
        fromDate =Date.newInstance(2020, 4, 1);
 
        //因为市场部判定日是153p时上线的,所以此处获取奥林巴斯日历在153p开始以后的工作日
        List<OlympusCalendar__c> WorkDayList = [select Date__c, IsWorkDay__c from OlympusCalendar__c where  Date__c >= :fromDate  order by Date__c  asc];
        //用于存放最后更新的QIS
        List<QIS_Report__c> qList = new List<QIS_Report__c>();
 
        for(QIS_Report__c qis :qisList){
 
            if(WorkDayList.size() >0){
                //①先确定判断日在数组中的位置
                //②判定日+4个工作日
                for(OlympusCalendar__c oly : WorkDayList){
                        if(oly.Date__c > qis.SC_Judge_Date__c){
                            if (oly.IsWorkDay__c == 1) {
                                workDayNum.add(oly.Date__c);
                            }
                        }
                    }
                }
            //①如果判定日那天工作日,当天默认不算+4个工作日
            //②如果判定日那天是非工作日,取最近的4个工作日
            if(workDayNum.size()>5){
                addFourDate   =workDayNum[4];
            }else{
                 addFourDate  =null;
            }
             System.debug('数组:'+workDayNum);
             System.debug('判定日+4个工作日:'+addFourDate);
             //判断  今天是不是大于判定日+4个工作日
             if(  todate >= addFourDate){
                 QIS_Report__c q = new QIS_Report__c();
                 q.SC_Judge_Date_Four__c = addFourDate;
                 q.Id =qis.Id;
                 q.SC_JudgeDate_Four__c = true;
                 qList.add(q);
            }
 
        }
             
        if(qList.size() > 0){
            update qList;
        }
        
    }
 
    global void finish(Database.BatchableContext BC) {
 
    }
}