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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
/**********************************************************************
 * 
 *
 * @url: /services/apexrest/NFM209/execute
 * 
 * 
*************************************************************************/
@RestResource(urlMapping='/NFM209/*')
global with sharing class NFM209Rest {
    //新增NFM209Rest 合规状态  you start
  
    global class GeDatas {
        public NFMUtil.Monitoring Monitoring;
        public  GeData[] GeData;
    }
 
    global class GeData {
        public String custCode;                    // 客户管理编码
        public String complStatus;                 // 零合规状态
        public String orgSysId;                    // 发起系统
        public String glbBusiNo;                   // 报文流水号
        public String custTp;                      // 对象类型
        public String entityTp;                    // 实体类型
        public String custName;                    // 客户名称
       
    }
 
    @HttpPost
    global static void execute() {
 
        // 取得接口传输内容
        String strData = RestContext.request.requestBody.toString();
        GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
        system.debug('rquest----'+strData);
        if (ges == null ) {
            return;
        }
 
        NFMUtil.Monitoring Monitoring = ges.Monitoring;
        if (Monitoring == null) {
            return;
        }
 
        BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM209', ges.GeData);
        if (String.isBlank(rowData.Log__c) == false) {
            executefuture(rowData.Id);
        }
 
        // JSONを戻す
        RestResponse res = RestContext.response;
        res.addHeader('Content-Type', 'application/json');
        res.statusCode = 200;
        String jsonResponse = '{"Result": {"Result": "00", "Message":""}}';
        res.responseBody = blob.valueOf(jsonResponse);
        return;
    }
 
    @future
    global static void executefuture(String rowData_Id) {
        main(rowData_Id);
    }
 
    global static void main (String rowData_Id) {
        Map<String, String> transferMap = new Map<String, String>();
        List<BatchIF_Transfer__c> transferList = [select Table__c,
                                  Column__c,
                                  External_value__c,
                                  Internal_value__c
                                  from BatchIF_Transfer__c
                                  where Dropped_Flag__c = false
                                          and (Table__c = 'Account')
                                          ];
        for (BatchIF_Transfer__c t : transferList) {
            transferMap.put(t.Column__c + t.External_value__c, t.Internal_value__c);
        }
 
 
        Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
        BatchIF_Log__c rowData = [Select Id, Name, retry_cnt__c, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id];
        String logstr = rowData.MessageGroupNumber__c + ' start\n';
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Type__c = 'NFM209';
        iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
        iflog.Log__c = logstr;
        iflog.ErrorLog__c = '';
        insert iflog;
 
        String rowDataStr = NFMUtil.getRowDataStr(rowData);
        List<GeData> geDataList = (List<GeData>) JSON.deserialize(rowDataStr, List<GeData>.class);
 
        if (geDataList == null || geDataList.size() == 0) {
            return;
        }
 
        Savepoint sp = Database.setSavepoint();
 
        try {
            List<Account> accInsList = new List<Account>();
 
            //将客户管理编码、合规状态存入List
            List<String> custCodeList = new List<String>();
            List<String> complStatusList = new List<String>();
            
            for (GeData geData : geDataList) {
                if (String.isBlank(geData.custCode)) {
                    iflog.ErrorLog__c += '管理编码不能为空。\n';
                    continue;
                } else {
                    custCodeList.add(geData.custCode);
                }
 
                if (String.isBlank(geData.complStatus)) {
                    iflog.ErrorLog__c += geData.custCode+':合规状态为空。\n';
                    continue;
                } 
                
            }
            
            //客户管理编码和合规状态日期存入Map
            Map<String, Account> accInfoMap = new Map<String, Account>();
            if (custCodeList.size() > 0) {
                List<Account> accList = [select ID,Parent_Management_CodeClean__c,TradeComplianceStatus__c  from Account where Parent_Management_CodeClean__c in :custCodeList and (RecordType.DeveloperName = 'HP' or RecordType.DeveloperName = 'Agency')];
                if (accList.size() > 0) {
                    for (Account accInfo : accList) {
                        accInfoMap.put(accInfo.Parent_Management_CodeClean__c, accInfo);
                    }
                }
            }
            
            
            //kk  20231221  贸易合规2  start
            // 涉及更新的listId
            List<String> updateAccountIDList = new List<String>();
            //kk  20231221  贸易合规2  end
 
            // 将XML的合规状态存入客户对象中
            for (GeData geData : geDataList) {
                    
                Account acc = new Account();
                if (!accInfoMap.containsKey(geData.custCode)){
                    iflog.ErrorLog__c += '客户管理编码:' +geData.custCode +':未找到。\n';
                    continue;
                }
                acc.Id = (accInfoMap.get(geData.custCode)).ID;      
                //kk  20231221  贸易合规2  start
                updateAccountIDList.add(acc.Id);
                //kk  20231221  贸易合规2  end      
                acc.TradeComplianceStatus__c = NFMUtil.getMapValue(transferMap, 'TradeComplianceStatus__c', string.valueof(geData.complStatus), iflog);             //合规状态
                
                accInsList.add(acc);
                logstr += '客户管理编码:' +geData.custCode +':获取成功。\n';
 
            }
            //kk  20231221  贸易合规2  start
            // 存放更新前数据的map
            Map<String,String> oldStatus = new Map<String,String>();
            List<Account> oldAccount = [SELECT Id,TradeComplianceStatus__c 
                                            FROM Account 
                                                WHERE Id IN :updateAccountIDList];
            for(Account ac : oldAccount){
                oldStatus.put(ac.Id,ac.TradeComplianceStatus__c);
            }
            System.debug('==oldAccount=='+oldStatus);
            //kk  20231221  贸易合规2  end
 
            if (accInsList.size() > 0) {
                upsert accInsList;
                logstr += '更新成功。\n';
            }
 
            logstr += '\nend';
            rowData.retry_cnt__c = 0;
 
            //kk  20231130  贸易合规2  start
            secondCompliance(accInfoMap,transferMap,geDataList,iflog,oldStatus);
            //kk  20231130  贸易合规2  end
 
        } catch (Exception ex) {
            // エラーが発生した場合
            Database.rollback(sp);
            System.debug(Logginglevel.ERROR, 'NFM209_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
            System.debug(Logginglevel.ERROR, 'NFM209_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
            logstr += '\n' + ex.getMessage();
            iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
            if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0;
            if (rowData.retry_cnt__c < batch_retry_max_cnt) {
                rowData.retry_cnt__c++;
                LogAutoSendSchedule.assignOneMinute();
            }
            if (rowData.retry_cnt__c >= batch_retry_max_cnt) {
                rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数,请手动收信';
            }
        }
 
        update rowData;
        iflog.Log__c = logstr;
        if (iflog.Log__c.length() > 131072) {
            iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...';
        }
        if (iflog.ErrorLog__c.length() > 32768) {
            iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...';
        }
        update iflog;
    }
    //新增NFM209Rest 合规状态 you end
 
    //kk 20231129  合规2期  start
    public static void secondCompliance(Map<String, Account> accInfoMap,Map<String, String> transferMap,List<GeData> geDataList, BatchIF_Log__c iflog,Map<String,String> oldStatus){
        //<客户ids,客户名>
        Map<String,String> data4 = new Map<String,String>();
        //<客户ids,客户合规状态>
        Map<String,String> data1 = new Map<String,String>();
        //<备品申请单id,审批对象>
        //Map<String,ProcessInstanceStep> data2 = new Map<String,ProcessInstanceStep>();
        //<备品申请单明细Id,备品明细对象>
        List<Rental_Apply_Equipment_Set_Detail__c> data3 = new List<Rental_Apply_Equipment_Set_Detail__c>();
         //客户ids
        List<String> accountIdList = new List<String>();
        //用客户id查出所有rentalList
        List<Rental_Apply__c> rentalList = new List<Rental_Apply__c>();
        //用客户id查出所有ProcessInstanceStep
        List<ProcessInstanceStep> steps = new List<ProcessInstanceStep>();
        //
        List<Rental_Apply_Equipment_Set_Detail__c> rentalEqList = new List<Rental_Apply_Equipment_Set_Detail__c>();
        // 发送邮件内容
        List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        for(GeData geData : geDataList){
            String accountId = (accInfoMap.get(geData.custCode)).ID;
            System.debug('accountId'+accountId);
            String complianceStatus = NFMUtil.getMapValue(transferMap, 'TradeComplianceStatus__c', string.valueof(geData.complStatus), iflog);
            if(oldStatus.get(accountId) == complianceStatus){
                return;
            }
            String aName = geData.custName;
            data1.put(accountId, complianceStatus);
            data4.put(accountId,aName);
            accountIdList.add(accountId);
        }
        System.debug('accountIdList'+accountIdList);
        rentalList = [SELECT RA_Status__c, Id,Name,applyUser__r.Email,Loaner_centre_mail_address__c,Hospital__c,Tracking_Delivery_Number__c,Asset_return_Status__c
            FROM Rental_Apply__c
            WHERE Hospital__c IN :accountIdList  And (RA_Status__c!='取消' And RA_Status__c!='完了')];
 
        system.debug('=====rentalList====='+ rentalList);
        List<String> rentalIdList = new List<String>();
        for(Rental_Apply__c rental : rentalList){
            rentalIdList.add(rental.Id);    
        }
        //没有备品申请单直接返回
        if(rentalIdList.size() == 0){
            return;
        }
        system.debug('=====rentalIdList====='+ rentalIdList);
        steps = [
            SELECT Id, StepStatus, ProcessInstance.TargetObjectId, ProcessInstance.SubmittedBy.Email, Actor.Email,CreatedDate
            FROM ProcessInstanceStep
            WHERE ProcessInstance.TargetObjectId IN :rentalIdList
            ORDER BY CreatedDate ASC];
        system.debug('=====steps====='+ steps);
        rentalEqList = [SELECT Asset__r.Product2.CountryOfOrigin__c,Asset__r.Product2.USRatio_US_OUT10__c,Rental_Apply__c,Name,Asset__r.Name,Asset__r.Product2.USRatio_US__c,Asset__r.SerialNumber
                        FROM Rental_Apply_Equipment_Set_Detail__c
                            WHERE Rental_Apply__r.Hospital__c in :accountIdList];
        system.debug('=====rentalEqList====='+ rentalEqList);
        system.debug('=====rentalEqList[0]====='+ rentalEqList[0].Asset__r.Product2.CountryOfOrigin__c);
        
        //if(steps.size()>0){
        //    system.debug('=====steps.size====='+ steps.size());
        //    for( ProcessInstanceStep instans : steps ){
        //        data2.put(instans.ProcessInstance.TargetObjectId, instans);    
        //    }     
        //}
        system.debug('=====111111=====');
        for( Rental_Apply_Equipment_Set_Detail__c esd : rentalEqList){
            data3.add(esd);
        }
        system.debug('=====2222====='+ rentalList);
        //便利备品申请单
        //判断是否发邮件
        String  juageFlag;
        for(Rental_Apply__c rental : rentalList){
            if(data1.containsKey(rental.Hospital__c)){
                system.debug('=====333====='+ data1);
                String rentalTrackingDeliveryNumber = rental.Tracking_Delivery_Number__c;
                String assetReturnStatus = rental.Asset_return_Status__c;
                String tradeComplianceStatus = data1.get(rental.Hospital__c); 
                String accountName = data4.get(rental.Hospital__c);
                system.debug('=====4444====='+ data4.get(rental.Hospital__c));
                String rentalNo = rental.Name;
                String rentalId = rental.Id;
                //String submitPesron;
                //String approvalPerson;
                //去重
                Set<String> submitPesronSet = new Set<String>();
                Set<String> approvalPersonSet = new Set<String>();
                system.debug('=====rental====='+ rental.Asset_return_Status__c);
                if(steps.size() > 0){
                    for(ProcessInstanceStep   instans :steps){
                        if( rental.Id == instans.ProcessInstance.TargetObjectId){
                            submitPesronSet.add(instans.ProcessInstance.SubmittedBy.Email);
                            approvalPersonSet.add(instans.Actor.Email);
                        }
                    }
                }
                //if(data2.size()>0){
                //    if(data2.containskey(rental.Id)){
                //        //当前备品申请单的申请人 的邮件
                //        submitPesron = data2.get(rental.Id).ProcessInstance.SubmittedBy.Email;
                //        //当前备品申请单的批准人 的邮件
                //        approvalPerson = data2.get(rental.Id).Actor.Email;     
                //        system.debug('=====sqr====='+ submitPesron);
                //        system.debug('=====pzr====='+ approvalPerson);
                //    }
                //    else{
                //        submitPesron='';
                //        approvalPerson='';     
                //    }
                //}
                //else{
                //    submitPesron='';
                //    approvalPerson='';    
                //}
                
                //当前备品申请单的操作者(创建人)
                String operatorPerson = rental.applyUser__r.Email;
                system.debug('=====operatorPerson====='+ rental.applyUser__r.Email);
                //备品中心邮箱地址
                String rentalCentetEmailAdress = rental.Loaner_centre_mail_address__c;
                //法务人员 
 
                String raStatus = rental.RA_Status__c;
                system.debug('=====raStatus====='+ rental.RA_Status__c);
                // //冻结、黑名单
                if((tradeComplianceStatus == '冻结,人工审批中'  ||  tradeComplianceStatus == '黑名单') 
                    && (raStatus == '草案中' || raStatus == '申请中' || raStatus == '申请中(OPD未通过)')){      //20231224 sx add  备品智能化添加状态申请中(OPD未通过) 优化
                    //邮件
                    juageFlag = secondSendEmail( tradeComplianceStatus , accountName, rentalId, rentalNo, raStatus, submitPesronSet, approvalPersonSet,
                         operatorPerson ,  rentalCentetEmailAdress , '1', data3,sendMails);
                }
                if((tradeComplianceStatus == '冻结,人工审批中'  ||  tradeComplianceStatus == '黑名单') 
                        &&(raStatus == '已批准' ||  raStatus == '已分配' || raStatus == '已出库指示' || raStatus == '已下架' || raStatus == '出库前已检测')){
                    //邮件
                    juageFlag = secondSendEmail( tradeComplianceStatus , accountName, rentalId, rentalNo, raStatus, submitPesronSet, approvalPersonSet,
                         operatorPerson ,  rentalCentetEmailAdress , '2', data3,sendMails);
                }
                if((tradeComplianceStatus == '冻结,人工审批中' || tradeComplianceStatus == '黑名单') 
                        && (raStatus == '已出库' || raStatus == '申请者已收货' ||  raStatus == '医院已装机确认' ||  raStatus == '已回寄' ||  raStatus == '欠品中')){
                    //!String.isBlank(rentalTrackingDeliveryNumber) && assetReturnStatus != '全部归还'
                    //邮件
                    juageFlag = secondSendEmail( tradeComplianceStatus , accountName, rentalId, rentalNo, raStatus, submitPesronSet, approvalPersonSet,
                         operatorPerson ,  rentalCentetEmailAdress , '3', data3,sendMails);
                }
 
                //警示名单
                if((tradeComplianceStatus == '警示名单') 
                        &&(raStatus == '已批准' || raStatus == '已出库指示' || raStatus == '已分配' || raStatus == '已下架' || raStatus == '出库前已检测')){
                    //判断产品信息是否合规
                    //不合规发邮件  
                    juageFlag = secondSendEmail( tradeComplianceStatus , accountName, rentalId, rentalNo, raStatus, submitPesronSet, approvalPersonSet,
                         operatorPerson ,  rentalCentetEmailAdress , '2', data3,sendMails);
 
                }
                if((tradeComplianceStatus == '警示名单') 
                        && (raStatus == '已出库' || raStatus == '申请者已收货' ||  raStatus == '医院已装机确认' ||  raStatus == '已回寄' ||  raStatus == '欠品中')){
                    //判断产品信息是否合规
                    //不合规发邮件
                    juageFlag = secondSendEmail( tradeComplianceStatus , accountName, rentalId, rentalNo, raStatus, submitPesronSet, approvalPersonSet,
                         operatorPerson ,  rentalCentetEmailAdress , '3', data3,sendMails);
                }
            }
        }
        system.debug('===sendMails==='+sendMails);
        if (sendMails.size() > 0) {
            //Messaging.sendEmail(allMails);
            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);
                }
            }
        }     
 
    }
 
 
    public static String secondSendEmail(String tradeComplianceStatus ,String accountName,String rentalId,String rentalNo,String raStatus,Set<String> submitPesronSet,Set<String> approvalPersonSet
        ,String operatorPerson , String rentalCentetEmailAdress , String  flag,List<Rental_Apply_Equipment_Set_Detail__c> data3,List<Messaging.SingleEmailMessage> sendMails){
        system.debug('=====进入邮件发送=====');
        system.debug('=====申请人====='+submitPesronSet);
        system.debug('=====审批人====='+approvalPersonSet);
        
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();  
        //提醒 
        List<String> toMailsList = new List<String>();
        //抄送
        List<String> ccEmailSet = new List<String>();
        //单独抄送法务
        List<String> ccEmailSet1 = new List<String>();
        //法务cc
        // String ccLawPerson = 'Lina_Yun@olympus.com.cn';
        // 测试用 代表法务
        String ccLawPerson = System.Label.LegalDepartmentEmail;
        //代表 备品中心等
        String  testJzMail  = 'olympus@prec-tech.com' ;
        //不合规的借出备品配套一览明细List
        List<Rental_Apply_Equipment_Set_Detail__c> noRuleRentalEqList = new List<Rental_Apply_Equipment_Set_Detail__c>();
        //不合规的邮件
        if(tradeComplianceStatus =='警示名单'){
            try {
                for(Integer i = 0;i<data3.size();i++){
                system.debug('=====不合规的邮件====='+ data3[i].Rental_Apply__c+'===='+rentalId);
                if(data3[i].Asset__c != null){
                    if(data3[i].Rental_Apply__c == rentalId && (data3[i].Asset__r.Product2.CountryOfOrigin__c == 'US' || data3[i].Asset__r.Product2.USRatio_US_OUT10__c =='1')){
                        noRuleRentalEqList.add(data3[i]);
                    }    
                }
                
            }     
             }
             catch (Exception e) {
                 system.debug('=====Exception====='+ e);
             }
            
        }
 
 
        system.debug('=====noRuleRentalEqList====='+ noRuleRentalEqList+'size'+noRuleRentalEqList.size());
  
        //申请人、审批人、操作者
        if (operatorPerson != null && operatorPerson != '') {
            toMailsList.add(operatorPerson);
            system.debug('=====operatorPerson====='+ operatorPerson);
         }
        if (approvalPersonSet.size() > 0) {
            for(String approvalPerson :approvalPersonSet){
                toMailsList.add(approvalPerson);    
            }
            system.debug('=====approvalPersonSet====='+ approvalPersonSet);
        }
        if (submitPesronSet.size() > 0) {
            for(String submitPesron : submitPesronSet){
                toMailsList.add(submitPesron);    
            }
            system.debug('=====submitPesronSet====='+ submitPesronSet);
        }
        //备品中心 
        system.debug('=====rentalCentetEmailAdress====='+ rentalCentetEmailAdress);
        if (rentalCentetEmailAdress != null && rentalCentetEmailAdress != '') {
             ccEmailSet.add(rentalCentetEmailAdress);
        }
        //两种相反的情况
        if(flag == '1'){
            message.setToAddresses(toMailsList); 
            //法务人永远是cc
            ccEmailSet.add(ccLawPerson);
            //精琢抄送
            ccEmailSet.add(testJzMail);
            message.setCcAddresses(ccEmailSet);
            system.debug('=====法务人永远是cc====='+ ccEmailSet);
        }
        else if(flag == '2'){
            message.setToAddresses(ccEmailSet); 
            //法务人永远是cc
            toMailsList.add(ccLawPerson);
            //精琢抄送
            toMailsList.add(testJzMail);
            message.setCcAddresses(toMailsList);    
        }
        else{
            toMailsList.add(rentalCentetEmailAdress);
            toMailsList.add(testJzMail); 
            ccEmailSet1.add(ccLawPerson);
            message.setToAddresses(toMailsList); 
            message.setCcAddresses(ccEmailSet1);   
        }
        system.debug('=====toMailsList====='+ ccEmailSet);
        system.debug('=====toMailsList====='+ toMailsList);
        String subject = '【贸易合规】合规状态变更提醒--' + accountName;
        String htmlStr = '您好:  ' + '<BR>' +'<BR>';
        htmlStr+= accountName + '的贸易合规状态已变更为' + tradeComplianceStatus +'<BR>';
        htmlStr+= '其申请单号:'+rentalNo + '的备品借出状态为:'+raStatus + ',请确认。     <BR>';
        htmlStr+= '<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + rentalId + '">申请单号链接</a>';
        
 
        //不合规的备品明细记录在邮件内
        if(tradeComplianceStatus =='警示名单' && noRuleRentalEqList.size() > 0){
            //编辑警示邮件
            htmlStr+= '<BR>'+'其申请单号:'+rentalNo + '的明细No.为:';
            for(Integer i = 0; i<noRuleRentalEqList.size() ;i++){
                htmlStr+= '<BR>' +(i+1)+'.' +noRuleRentalEqList[i].Name +' ;保有设备:' +  noRuleRentalEqList[i].Asset__r.Name + ' ;其机身编码:' + noRuleRentalEqList[i].Asset__r.SerialNumber;
                
            }
        }
 
        message.setSubject(subject);
        message.setHtmlBody(htmlStr);
        message.setCharset('UTF-8');
        system.debug('=====message====='+ message);
        if(tradeComplianceStatus =='警示名单' && noRuleRentalEqList.size() <= 0){
            system.debug('=====不发邮件====='+ noRuleRentalEqList.size());
            return 'NoMail';
        }
        sendMails.add(message);
        return '1';
        //合规直接不发邮件
        
 
               
    }
    //kk 20231129  合规2期  end
 
 
 
}