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
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
global class OPDPlanWarningBatch implements Database.Batchable<sObject> {
    String opdPlanId;
    Boolean flag = false;
    global OPDPlanWarningBatch() {
 
    }
 
    global OPDPlanWarningBatch(Boolean flag) {
        this.flag = flag;
    }
 
    global OPDPlanWarningBatch(String opdPlanId) {
        this.opdPlanId = opdPlanId;
    }
    global Database.QueryLocator start(Database.BatchableContext BC) {
        String query =
            //原'Select Id, Name,Ownerid,owner.alias,Account_Laboratory__r.Name from OPDPlan__c ';
            //新增StayOrNot__c
            'Select Id, Name,Ownerid,owner.alias,StayOrNot__c ,Account_Laboratory__r.Name from OPDPlan__c ';
        if (flag) {
            //---SWAG-BMS8EJ---20200323---AddStart
            //请设置当担当人用户中的“在职/离职”为离职时,OPD计划为计划中的变为 取消。
            query += '  where StayOrNot__c = \'已离职\' and Status__c = \'计划中\' ';
            //---SWAG-BMS8EJ---20200323---AddEnd
        } else {
            query += '  where ThisMonthPlan__c    = 1 and Status__c = \'计划中\' ';
        }
 
        if (!String.isBlank(opdPlanId)) {
            query += ' and Id =\'' + opdPlanId + '\'';
        }
        return Database.getQueryLocator(query);
    }
 
    global void execute(Database.BatchableContext BC, List<sObject> opdPlanList) {
        if (flag) {
            system.debug('担当人用户中的“在职/离职”为离职时,OPD计划为计划中的变为 取消');
            List<OPDPlan__c> opdPlans = new List<OPDPlan__c>();
            
            if (opdPlanList.size() > 0) {
                opdPlans = opdPlanList;
                for (OPDPlan__c opd :opdPlans) {
                    opd.Status__c = '取消';
                }
 
                update opdPlans;
            }
            
            
        } else {
            sendMailtoNotComplete(opdPlanList);
        }
        
 
    }
    global void finish(Database.BatchableContext BC) {
 
    }
    @TestVisible
    private static boolean sendMailtoNotComplete(list<OPDPlan__c> opdPlanList) {
        boolean rs = true;
        List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
        for (OPDPlan__c OPDPlan : opdPlanList) {
            String title = '';
            String body = '';
            List<String> toMailsList = new List<String>();
            toMailsList.add(OPDPlan.Ownerid);
 
            title =  'OPD计划' + OPDPlan.Name + '更新提醒';
            body +=   OPDPlan.owner.alias + '您好:';
            body += '<br/>';
            body += '<br/>';
            body += '您计划于本月于' + OPDPlan.Account_Laboratory__r.Name + '实行OPD计划' + OPDPlan.Name + ',请您取消或延期该计划。';
            body += '<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + OPDPlan.id + '">'
                    + URL.getSalesforceBaseUrl().toExternalForm() + '/' + OPDPlan.id + '</a><br/>';
            body += '<br/>';
            body += '<br/>';
            body += '谢谢!';
 
            messageNEW = new Messaging.SingleEmailMessage();
            messageNEW.subject = title;
            //messageNEW.plainTextBody = body;
            messageNEW.htmlBody = body;
            messageNEW.setCharset('UTF-8');
            messageNEW.setToAddresses(toMailsList);            
            sendMails.add(messageNEW);
        }
 
        system.debug('sendMailtoNotComplete:' + sendMails);
        if (sendMails.size() > 0) {
            Messaging.SendEmailResult[] results = messaging.sendEmail(sendMails);
            for (Integer i = 0; i < results.size(); i++) {
                if (results[i].success == false) {
                    system.debug('=====send mail error:' + results[i].errors[0].message);
                    rs = false;
                }
            }
        }
        return rs;
    }
}