高章伟
2022-03-24 0793b78361e77ac25bb3a38da75678ff5d40eaed
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
global without sharing class QISToETQWebService {
    public static List<ImgObj> ImgObjs = new List<ImgObj>();
    webservice static String sendToETQ(String iflog_Id,BatchIF_Log__c rowDataSFDC, List<String> repairIds,String statu){
        List<QIS_Report__c> temp = [select id,name,GeneratedPDFField__c,problem_detail_photo__c,Photo_1__c,Photo_2__c,Photo_3__c,Photo_4__c,
        Photo_OSH_1__c,Photo_OSH_2__c,Photo_OSH_3__c,Photo_OSH_4__c
        from QIS_Report__c where GeneratedPDFField__c = null and id in :repairIds ];
        List<Repair__c> tempRe = [select id,name,GeneratedPDFField__c,ProblemDescription__c,ASReportedCodeAC__c,AE_DetermineResult__c,PAE_Determine__c,PAE_DetermineAC__c from Repair__c where GeneratedPDFField__c = null
         and id in :repairIds ];
        if(temp != null && temp.size() > 0){
            // try {
                // 需要生成pdf的字段
                List<String> apiNames = new List<String>();
                apiNames.add('problem_detail_photo__c');
                apiNames.add('Photo_1__c');
                apiNames.add('Photo_2__c');
                apiNames.add('Photo_3__c');
                apiNames.add('Photo_4__c');
                apiNames.add('Photo_OSH_1__c');
                apiNames.add('Photo_OSH_2__c');
                apiNames.add('Photo_OSH_3__c');
                apiNames.add('Photo_OSH_4__c');
                List<QIS_Report__c> updateQis = new List<QIS_Report__c>();
                List<Attachment> attachments = new List<Attachment>();
                PageReference pdfPage ;
                for(QIS_Report__c qis : temp){
                    for (String apiName : apiNames) {
                        String generatedFields =  qis.GeneratedPDFField__c;
                        if (checkFieldisGeneratedPDF(apiName,qis)) {
                            continue;
                        }
                        if (qis.get(apiName) == null) {
                            continue;
                        }
                        setImgSrcs(qis, apiName);
                        pdfPage = new PageReference('/apex/repairandqistopdf?api=qis&id='+qis.Id+'&field='+apiName);
                        Blob pdfBody;
                        if(Test.isRunningTest()) { 
                            pdfBody = blob.valueOf('Unit.Test');
                        } else {
                            pdfBody = pdfPage.getContentAsPDF();
                        }
                        Attachment attach = new Attachment();
                        attach.Body = pdfBody;
                        if ('problem_detail_photo__c'.equals(apiName)) {
                            attach.Name =  substringApiName(qis.name) + '_Problem_Discription.pdf';
                        }else {
                            attach.Name = substringApiName(qis.name) + '_' + 'Problem_' + apiName.substring(0,apiName.length()-3) + '.pdf';
                        }
                        attach.ParentId = qis.id;
        
                        attachments.add(attach);
                        if (generatedFields == null) {
                            qis.GeneratedPDFField__c = apiName;
                        }else {
                            qis.GeneratedPDFField__c += ',' + apiName;
                        }
                    }
                    updateQis.add(qis);
                }
                insert attachments;
                update updateQis;
                // RepairAndQISToPDFController.generateAttachment(temp);
                NFM401Controller.callout(null, null, repairIds, statu);
            // }
            // catch (Exception e) {
            //     return '更新QIS报错:'+ e.getMessage();
            // }
            // Database.executeBatch(new QISToPDFBatch(iflog_Id, rowDataSFDC,repairIds,statu),50); //生成PDF
        }else{
 
            BatchIF_Log__c iflog = new BatchIF_Log__c();
            iflog.Type__c = 'sendToETQ';
            iflog.ErrorLog__c = '';
            iflog.Log__c = 'NFM401WebService start--';
 
            Repair__c updateRe = new Repair__c();
            updateRe.Id = tempRe[0].id;
            updateRe.INTERFACE_RECORD_ID__c = null; 
            updateRe.ETQ_UPLOAD_STATUS__c = null; 
            updateRe.ETQ_UPLOAD_MESSAGE__c = null; 
            updateRe.OSH_ConfirmationDate__c = Date.today(); 
            updateRe.OSH_Affirmant__c = UserInfo.getUserId(); 
            updateRe.AWS_Interface_Time__c = Datetime.now();
            updateRe.AsyncData__c = true; 
            //update by rentx 2021-03-23 start 需要先更新修理的信息再掉401接口 不然的话可能会出现 调用成功但是部分修理更新失败的情况 将更新修理的步骤提前 则当修理更新失败时 就不会往下执行401的接口了 
            // try{
                update updateRe;
                // Database.executeBatch(new RepairToPDFBatch(iflog_Id, rowDataSFDC,repairIds,statu)); //生成PDF
                // RepairAndQISToPDFController.generateAttachment(reList);
                PageReference pdfPage ;
            
                List<Repair__c> updateRpr = new List<Repair__c>();
                List<Attachment> attachments = new List<Attachment>();
                for(Repair__c re : tempRe){
                    String generatedFields = re.GeneratedPDFField__c;
                    if (checkFieldisGeneratedPDF('ProblemDescription__c',re)) {
                        continue;                
                    }
                    if (re.get('ProblemDescription__c') == null) {
                        continue;
                    }
                    setImgSrcs(re, 'ProblemDescription__c');            
        
                    pdfPage = new PageReference('/apex/repairandqistopdf?api=repair&id='+re.Id);
                    Blob pdfBody;
                    if(Test.isRunningTest()) { 
                        pdfBody = blob.valueOf('Unit.Test');
                    } else {
                        pdfBody = pdfPage.getContentAsPDF();
                    }
                    Attachment attach = new Attachment();
                    attach.Body = pdfBody;
                    attach.Name = re.name + '_' + 'Problem_Discription.pdf';
                    attach.ParentId = re.id;
                    attachments.add(attach);
                    re.GeneratedPDFField__c = 'ProblemDescription__c';
                    updateRpr.add(re);
                }
                insert attachments;
                update updateRpr;
                
                Database.executeBatch(new RepairSendToETQBatch(null, null,repairIds,statu),1);
                
                iflog.Log__c += '\n修理:'+updateRe+' 更新成功';
                iflog.Log__c = '\nNFM401WebService end--';
                insert iflog;
            // }catch(Exception ex){
            //     iflog.ErrorLog__c += '修理:'+updateRe+' 更新失败,因为::'+ex.getMessage();
            //     iflog.Log__c = '\nNFM401WebService end--';
            //     // System.debug('更新修理报错::36'+updateRe);
            //     insert iflog;
            //     return '更新修理报错:'+ ex.getMessage();
            // }
        }
        return '发送成功!';
    }
 
    // 主要用于生成qis中问题描述对应的pdf文件名称(比较特殊)
    public static String substringApiName(String name){
        for(Integer i = 0; i < 2; i++){
            name = name.substring(name.indexOf('-')+1);
        }
        return name;
    }
 
    public static Boolean checkFieldisGeneratedPDF(String apiName,SObject obj){
        String generatedFields = (String) obj.get('GeneratedPDFField__c');
        if (generatedFields != null) {
            List<String> ele = generatedFields.split(',');
            return ele.contains(apiName);
        }
        return false;
    }
    public class ImgObj{
        public String imgSrc {get; set;}
        public String height {get; set;}
    }
    // 设置页面展示的数据
    public static void setImgSrcs(SObject obj,String apiName){
        ImgObjs = new List<ImgObj>();
        String content = (String) obj.get(apiName);
        ImgObj ImgObj = new ImgObj();
        ImgObj.imgSrc = content;
        ImgObj.height = '900px';
        ImgObjs.add(ImgObj);
        System.debug('ImgObjs++'+ImgObjs);
        
    }
}