buli
2023-05-23 07390e2fcb4adf27c928335bf27ae7939c5a80ad
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
global without sharing class ConsumAutoSelectBatch implements Database.Batchable<sObject>, Database.Stateful {
 
    global List<String> emailMessages = new List<String>();
    global Integer totalCount = 0; // 総処理件数
    global Integer totalCountDone = 0; // 処理済件数
    global Integer failedCount = 0; // 処理失敗件数
 
    Boolean IsNeedExecute = false; // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  是否符合执行条件
 
    // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  start
    global ConsumAutoSelectBatch( ) {
    }
    // 20220309 ljh  SFDC-CC73U5 132 动物实验&ET展箱 锁定已过期库存 start
    // global ConsumAutoSelectBatch(Boolean NeedExecute) {
    //     this.IsNeedExecute = NeedExecute;
    // }
    // 20220309 ljh  SFDC-CC73U5 132 动物实验&ET展箱 锁定已过期库存 end
    // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  end
 
    /**
    * startには、queryを実行、耗材备品申請を検索
    */
    global Database.Querylocator start(Database.BatchableContext bc) {
        String soql = 'select Id'
                + ', Salesdepartment__c'
                + ', demo_purpose2__c'
            + ' from Consum_Apply__c'
            + ' where (Status__c = \'已批准\' OR Status__c = \'已出库指示\')'
            // + ' and demo_purpose2__c !=\'动物实验\' and demo_purpose2__c !=\'ET展箱\''
            + ' and Wei_Shipment_request__c > 0'
            + ' and Yi_loaner_arranged__c = 0'
            + ' order by Id';
        return Database.getQueryLocator(soql);
    }
 
    global void execute(Database.BatchableContext bc,List<Consum_Apply__c> csmApyList) {
        totalCount += csmApyList.size();
        Savepoint sp = Database.setSavepoint();
        try {
            List<Consum_Apply_Equipment_Set_Detail__c> selectedData = [SELECT Id
                        , Consum_Apply_Equipment_Set__r.Model_No__c
                        , Consum_Start_Date_After_15_Day__c
                        , Asset__c
                        , Consumable_Guaranteen_end_F__c
                        , Select_Time__c
                        , Consum_Start_Date__c
                        , Shipment_request_time2__c
                     FROM Consum_Apply_Equipment_Set_Detail__c
                    WHERE Consum_Apply__c = :csmApyList
                      AND Cancel_Select__c = false
                      AND Shipment_request_time2__c = null];
            List<Consum_Apply_Equipment_Set_Detail__c> caesdList = new List<Consum_Apply_Equipment_Set_Detail__c>();
            
            Boolean haveChangeAss = ConsumDefaultSelectController.reSetAsset(selectedData, caesdList, csmApyList[0], false, true);
            if (caesdList.size() > 0) {
                update caesdList;
            }
            totalCountDone += csmApyList.size();
        }
        catch (Exception e) {
            emailMessages.add(e.getMessage());
            failedCount += csmApyList.size();
            Database.rollback(sp);
        }
    }
 
    global void finish(Database.BatchableContext bc) {
        String email = UserInfo.getUserEmail();
        String emailLabel = 'BatchNotify';
        for (OrgWideEmailAddress tmpEmailObj : [SELECT Id, Address, DisplayName 
                FROM OrgWideEmailAddress
                WHERE DisplayName like :emailLabel]) {
            email = tmpEmailObj.Address;
        }
        List<String> ccList = new List<String>();
        String title = '耗材自动分配';
        for (Consum_Apply_Meta__mdt camd : [SELECT Id
                    , Key__c
                    , ValueLong__c
                 FROM Consum_Apply_Meta__mdt
                WHERE Package__c = 'ConsumAutoSelectBatch'
                  AND (Key__c = 'ErrorMailAddress'
                          OR Key__c = 'ErrorMailTitle'
                      )
                ORDER BY Key__c]) {
            if (camd.Key__c == 'ErrorMailAddress') {
                if (String.isNotBlank(camd.ValueLong__c)) {
                    ccList.addAll(camd.ValueLong__c.split(','));
                }
            }
            else if (camd.Key__c == 'ErrorMailTitle') {
                title = camd.ValueLong__c;
            }
        }
        BatchEmailUtil be = new BatchEmailUtil();
        String[] toList = new String[]{email};
        if (!(totalCountDone == totalCount && 0 == emailMessages.size())) {
            be.failedMail(toList, ccList, title,
                String.join(this.emailMessages, '\n'),
                totalCount, totalCountDone, failedCount);
            be.send();
        }
 
        //2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  start
        // if(!Test.isRunningTest() &&IsNeedExecute==true){
        //     //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致
        //     Id execBTId = Database.executebatch(new SetOlympusCalendarWorkDayBatch(true),200);
        // }
        //2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查 end
    }
 
    // 需要 以 申请书单位 调整库存、固定 1
    public static void run() {
        Database.executeBatch(new ConsumAutoSelectBatch(), 1);
    }
    @TestVisible private static void test() {
        if (false == Test.isRunningTest()) return;
        Integer i = 0;
        
    }
}