高章伟
2022-03-24 0793b78361e77ac25bb3a38da75678ff5d40eaed
PDF空白优化
4个文件已添加
1个文件已修改
368 ■■■■■ 已修改文件
force-app/main/default/classes/QISToETQWebService.cls 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISToETQWebService.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISToETQWebServiceTest.cls 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISToETQWebServiceTest.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RepairSendToETQBatch.cls 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISToETQWebService.cls
New file
@@ -0,0 +1,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);
    }
}
force-app/main/default/classes/QISToETQWebService.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/QISToETQWebServiceTest.cls
New file
@@ -0,0 +1,171 @@
@isTest
public with sharing class QISToETQWebServiceTest {
    @testSetup
    static void makeTestQIS() {
        StaticParameter.EscapeNFM001Trigger = true;
        StaticParameter.EscapeNFM001AgencyContractTrigger = true;
        StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
        StaticParameter.EscapeNFM007Trigger = true;
        StaticParameter.EscapeOpportunityBefUpdTrigger = true;
        StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
        // List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        // if (rectCo.size() == 0) {
        //     throw new ControllerUtil.myException('not found 病院 recodetype');
        // }
        List<RecordType> rectSct = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        if (rectSct.size() == 0) {
            throw new ControllerUtil.myException('not found 戦略科室分類 呼吸科 recodetype');
        }
        // List<RecordType> rectDpt = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = 'Department_GI'];
        // if (rectDpt.size() == 0) {
        //     throw new ControllerUtil.myException('not found 診療科 消化科 recodetype');
        // }
        // テストデータ
        Account company = new Account();
        company.RecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('HP').getRecordTypeId();
        // company.RecordTypeId = rectCo[0].Id;
        company.Name         = 'NFM105TestCompany';
        upsert company;
        Account section = [Select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where ParentId = :company.Id and RecordTypeId = :rectSct[0].Id];
        Account depart = new Account();
        depart.RecordTypeId        = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_GI').getRecordTypeId();
        depart.Name                = '*';
        depart.Department_Name__c  = 'NFM105TestDepart';
        depart.ParentId            = section.Id;
        depart.Department_Class__c = section.Id;
        depart.Hospital__c         = company.Id;
        upsert depart;
        // 再取得
        List<Account> accList = new List<Account>();
        company = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Id = :company.Id];
        accList.add(company);
        accList.add(section);
        depart = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Id = :depart.Id];
        accList.add(depart);
        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c     = 'NFM105Prd1';
        prd1.ProductCode            = 'NFM105Prd1';
        prd1.Repair_Product_Code__c = 'NFM105Prd1_RP';
        prd1.Name                   = 'NFM105Prd1';
        prd1.Manual_Entry__c        = false;
        prdList.add(prd1);
        Product2 prd2 = new Product2();
        prd2.ProductCode_Ext__c     = 'NFM105Prd2';
        prd2.ProductCode            = 'NFM105Prd2';
        prd2.Repair_Product_Code__c = 'NFM105Prd2_RP';
        prd2.Name                   = 'NFM105Prd2';
        prd2.Manual_Entry__c        = false;
        prdList.add(prd2);
        insert prdList;
        Asset ast = new Asset();
        ast.Name                   = 'NFM105Ast1';
        ast.AccountId              = depart.Id;
        ast.Department_Class__c    = section.Id;
        ast.Hospital__c            = company.Id;
        ast.Product2Id             = prd1.Id;
        ast.SerialNumber           = 'NFM105SerialNumber';
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate                      = Date.today();
        insert ast;
        ast = [select Id, Name, Product_Serial_No__c, AccountId, Department_Class__c, Department_Class__r.Management_Code_Auto__c, Hospital__c, Product2Id, Product2.ProductCode, Product2.Repair_Product_Code__c, SerialNumber
               from Asset
               where Id = :ast.Id];
        // User testUser = new User();
        // testUser.Job_Category__c = '销售服务';
        Repair__c rpr = new Repair__c();
        rpr.SAPRepairNo__c   = 'NFM105Rpr1';
        rpr.Account__c             = depart.Id;
        rpr.Department_Class__c    = section.Id;
        rpr.Hospital__c            = company.Id;
        rpr.Delivered_Product__c   = ast.Id;
        rpr.Status__c              = '1.受理完毕';
        rpr.Incharge_Staff__c = Userinfo.getUserId();
        rpr.Repair_Detail__c = 'test';
        // rpr.ProblemDescription__c = '<img alt="用户添加的图片" src="https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0J10000008VbEm&amp;feoid=00N10000008rsVu&amp;refid=0EM1s0000005LCs" style="height: 666px; width: 500px;"></img><img alt="用户添加的图片" src="https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0J10000008VbEm&amp;feoid=00N10000008rsVu&amp;refid=0EM1s0000005LD2" style="height: 666px; width: 500px;"></img><br>2020/06/24';
        rpr.GeneratedPDFField__c = null;
        //update by rentx 2020-10-1
        System.runAs(new User(Id = Userinfo.getUserId())){
            upsert rpr;
        }
        QIS_Report__c qr = new QIS_Report__c(
            RC__c = UserInfo.getUserId(),
            // Photo_1__c = '<img alt="用户添加的图片" src="https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0J10000008VbEm&amp;feoid=00N10000008rsVu&amp;refid=0EM1s0000005LCs" style="height: 666px; width: 500px;"></img>',
            Damage_For_Doc_Or_Pat__c = '有',
            Relation_With_The_Problem__c = '有可能',
            Report_For_Goz__c = '不知道',
            Name = 'QIS012345',
            GeneratedPDFField__c = null,
            QIS_Submit_day__c = Date.Today(),
            problem_detail_photo__c = '1231'
        );
        insert qr;
    }
    // @IsTest
    // static void myTest(){
    //     QIS_Report__c qis =  [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];
    //     Test.startTest();
    //         List<String> ids = new List<String>();
    //         ids.add(qis.Id);
    //         Database.executeBatch(new QISToPDFBatch(ids));
    //     Test.stopTest();
    // }
        @IsTest
    static void myTest1(){
        QIS_Report__c qis =  [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];
        Test.startTest();
            List<String> ids = new List<String>();
            ids.add(qis.Id);
            QISToETQWebService.sendToETQ(null, null,ids,null);
            // Database.executeBatch(new QISToPDFBatch(null,null,ids,null));
        Test.stopTest();
    }
    // 修理
    @isTest
    static void myTest(){
        StaticParameter.EscapeNFM001Trigger = true;
        StaticParameter.EscapeNFM001AgencyContractTrigger = true;
        StaticParameter.EscapeNFM001AgencyContractTrigger2 = true;
        StaticParameter.EscapeNFM007Trigger = true;
        StaticParameter.EscapeOpportunityBefUpdTrigger = true;
        StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
        Repair__c res = [select id,name,GeneratedPDFField__c,ProblemDescription__c from Repair__c];
        List<String> ids = new List<String>();
        ids.add(res.Id);
        Test.startTest();
            QISToETQWebService.sendToETQ(null, null,ids,'');
            // Database.executeBatch(new RepairToPDFBatch(ids));
            // //add by rentx 2020-10-21 start
            // Database.executeBatch(new RepairToPDFBatch(null,null,ids,''));
            // Database.executeBatch(new RepairToPDFBatch());
            //add by rentx 2020-10-21 end
        Test.stopTest();
    }
}
force-app/main/default/classes/QISToETQWebServiceTest.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/RepairSendToETQBatch.cls
@@ -201,14 +201,18 @@
    public void finish(Database.BatchableContext BC) {
        //HHOA-C3LJWQ 先更新修理再发送etq 20210616 start byrentx
        if (this.idss != null && this.idss.size() > 0) {
            NFM401Controller.callout(null,null,this.idss,statu);
        }
        //HHOA-C3LJWQ 先更新修理再发送etq 20210616 end byrentx
        // gzw PDF空白优化 跳过测试程序
        if (!Test.isRunningTest()) {
            //HHOA-C3LJWQ 先更新修理再发送etq 20210616 start byrentx
            if (this.idss != null && this.idss.size() > 0) {
                NFM401Controller.callout(null,null,this.idss,statu);
            }
            //HHOA-C3LJWQ 先更新修理再发送etq 20210616 end byrentx
        Database.executeBatch(new NFM402Batch(),100);
            Database.executeBatch(new NFM402Batch(),100);
        }
        // gzw PDF空白优化 跳过测试程序
    }
}