19626
2023-10-31 fd9df05c48c09b4d7f39a3b401882bda226dedea
force-app/main/default/classes/RepairAndQISToPDFController.cls
@@ -1,217 +1,271 @@
// public with sharing class RepairAndQISToPDFController {
public without sharing class RepairAndQISToPDFController {
    public without sharing class RepairAndQISToPDFController {
    
    // public PDFToBlobController(){
    //     apiName = ApexPages.currentPage().getParameters().get('api');
    //     fields = ApexPages.currentPage().getParameters().get('fields');
    //     fileName = ApexPages.currentPage().getParameters().get('fileName');
    //     controlLimit = Long.valueOf(ApexPages.currentPage().getParameters().get('controlLimit')) ;
    //     init();
    // }
    // 设置页面展示的数据
    public static void setImgSrcs(SObject obj,String apiName){
        ImgObjs = new List<ImgObj>();
        String content = (String) obj.get(apiName);
        // while(content.indexOf('<img') != -1 && content.indexOf('></img>') != -1){
        //     String imgTag = content.substring(content.indexOf('<img'),content.indexOf('></img>')+7);
        //     System.debug('imgTag'+imgTag);
        //     ImgObj ImgObj = new ImgObj();
        //     // 使用空格分隔
        //     List<String> imgTagSplit =  imgTag.split('\\s');
        //     System.debug('imgTagSplit'+imgTagSplit);
        //     if(imgTag.contains('height')){
        //         for(String str :imgTagSplit){
        //             if(str.startsWith('src=')){
        //                 ImgObj.imgSrc = str.substring(5,str.length()-1);
        //                 break;
        //             }
        //         }
        //         Integer imgheight = Integer.valueOf(imgTagSplit[4].substring(0,imgTagSplit[4].length() - 3));
        //         ImgObj.height =  imgheight >= 900 ? '900px' : imgTagSplit[4];
        //     }else{
        //         for(String str :imgTagSplit){
        //             if(str.startsWith('src=')){
        //                 ImgObj.imgSrc = str.substring(5,str.length()-8);
        //                 break;
        //             }
        //         }
        //         ImgObj.height = '900px';
        //     }
        //     ImgObjs.add(ImgObj);
        //     content = content.substring(content.indexOf('></img>')+7,content.length());
        // public PDFToBlobController(){
        //     apiName = ApexPages.currentPage().getParameters().get('api');
        //     fields = ApexPages.currentPage().getParameters().get('fields');
        //     fileName = ApexPages.currentPage().getParameters().get('fileName');
        //     controlLimit = Long.valueOf(ApexPages.currentPage().getParameters().get('controlLimit')) ;
        //     init();
        // }
        ImgObj ImgObj = new ImgObj();
        ImgObj.imgSrc = content;
        ImgObj.height = '900px';
        ImgObjs.add(ImgObj);
        System.debug('ImgObjs++'+ImgObjs);
    }
    // 生成pdf添加到对应的修理中
    public static PageReference generateAttachment(List<Repair__c> repList){
        PageReference pdfPage ;
        List<Repair__c> updateRpr = new List<Repair__c>();
        List<Attachment> attachments = new List<Attachment>();
        for(Repair__c re : repList){
            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);
        // 设置页面展示的数据
        public static void setImgSrcs(SObject obj,String apiName){
            ImgObjs = new List<ImgObj>();
            String content = (String) obj.get(apiName);
            // while(content.indexOf('<img') != -1 && content.indexOf('></img>') != -1){
            //     String imgTag = content.substring(content.indexOf('<img'),content.indexOf('></img>')+7);
            //     System.debug('imgTag'+imgTag);
            //     ImgObj ImgObj = new ImgObj();
            //     // 使用空格分隔
            //     List<String> imgTagSplit =  imgTag.split('\\s');
            //     System.debug('imgTagSplit'+imgTagSplit);
            //     if(imgTag.contains('height')){
            //         for(String str :imgTagSplit){
            //             if(str.startsWith('src=')){
            //                 ImgObj.imgSrc = str.substring(5,str.length()-1);
            //                 break;
            //             }
            //         }
            //         Integer imgheight = Integer.valueOf(imgTagSplit[4].substring(0,imgTagSplit[4].length() - 3));
            //         ImgObj.height =  imgheight >= 900 ? '900px' : imgTagSplit[4];
            //     }else{
            //         for(String str :imgTagSplit){
            //             if(str.startsWith('src=')){
            //                 ImgObj.imgSrc = str.substring(5,str.length()-8);
            //                 break;
            //             }
            //         }
            //         ImgObj.height = '900px';
            //     }
            //     ImgObjs.add(ImgObj);
            //     content = content.substring(content.indexOf('></img>')+7,content.length());
            // }
            ImgObj ImgObj = new ImgObj();
            ImgObj.imgSrc = content;
            ImgObj.height = '900px';
            ImgObjs.add(ImgObj);
            System.debug('ImgObjs++'+ImgObjs);
        }
        insert attachments;
        update updateRpr;
        return null;
    }
    // 生成pdf添加到对应的qis中
    public static PageReference generateAttachment(List<QIS_Report__c> qisReports){
        System.debug('1111111111111111111111111111111111111111111111111generateAttachment执行了-----------');
        List<QIS_Report__c> updateQis = new List<QIS_Report__c>();
        List<Attachment> attachments = new List<Attachment>();
        PageReference pdfPage ;
        for(QIS_Report__c qis : qisReports){
            // 需要生成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');
            for (String apiName : apiNames) {
                String generatedFields =  qis.GeneratedPDFField__c;
                if (checkFieldisGeneratedPDF(apiName,qis)) {
        // 生成pdf添加到对应的修理中
        public static PageReference generateAttachment(List<Repair__c> repList){
            PageReference pdfPage ;
            List<Repair__c> updateRpr = new List<Repair__c>();
            // List<Attachment> attachments = new List<Attachment>();
            List<ContentVersion> cVersions = new List<ContentVersion>();
            List<ContentDocumentLink> cDocLinks = new List<ContentDocumentLink>();
            Map<String,String> res = new Map<String, String>();
            for(Repair__c re : repList){
                String generatedFields = re.GeneratedPDFField__c;
                if (checkFieldisGeneratedPDF('ProblemDescription__c',re)) {
                    continue;
                }
                if (re.get('ProblemDescription__c') == null) {
                    continue;
                }
                if (qis.get(apiName) == null) {
                    continue;
                }
                setImgSrcs(qis, apiName);
                pdfPage = new PageReference('/apex/repairandqistopdf?api=qis&id='+qis.Id+'&field='+apiName);
                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();
                    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;
                }
                ContentVersion version = new ContentVersion();
                version.VersionData = pdfBody;
                version.Title = re.name + '_' + 'Problem_Discription.pdf';
                version.PathOnClient = re.name + '_' + 'Problem_Discription.pdf'+'.pdf';
                cVersions.add(version);
                res.put(version.Title, re.Id);
                // insert version;
                // 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);
            }
            updateQis.add(qis);
            if (cVersions.size()>0) {
                insert cVersions;
            }
            List<Id> idList = new List<Id>();
            for (ContentVersion newVersion : cVersions) {
                idList.add(newVersion.Id);
            }
            cVersions = [select ContentDocumentId,Title from ContentVersion where Id in: idList];
            for (ContentVersion cv : cVersions) {
                ContentDocumentLink cdl = new ContentDocumentLink();
                cdl.ContentDocumentId = cv.ContentDocumentId;
                cdl.LinkedEntityId = res.get(cv.Title);
                cdl.ShareType = 'I';
                cdl.visibility = 'AllUser';
                cDocLinks.add(cdl);
            }
            insert cDocLinks;
            // insert attachments;
            update updateRpr;
            return null;
        }
        insert attachments;
        update updateQis;
        return null;
    }
    // 主要用于生成qis中问题描述对应的pdf文件名称(比较特殊)
    public static String substringApiName(String name){
        for(Integer i = 0; i < 2; i++){
            name = name.substring(name.indexOf('-')+1);
        // 生成pdf添加到对应的qis中
        public static PageReference generateAttachment(List<QIS_Report__c> qisReports){
            System.debug('1111111111111111111111111111111111111111111111111generateAttachment执行了-----------');
            List<QIS_Report__c> updateQis = new List<QIS_Report__c>();
            // List<Attachment> attachments = new List<Attachment>();
            List<ContentVersion> cVersions = new List<ContentVersion>();
            List<ContentDocumentLink> cDocLinks = new List<ContentDocumentLink>();
            Map<String,String> res = new Map<String, String>();
            PageReference pdfPage ;
            for(QIS_Report__c qis : qisReports){
                // 需要生成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');
                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();
                    }
                    ContentVersion version = new ContentVersion();
                    version.VersionData = pdfBody;
                    // Attachment attach = new Attachment();
                    // attach.Body = pdfBody;
                    if ('problem_detail_photo__c'.equals(apiName)) {
                        // attach.Name =  substringApiName(qis.name) + '_Problem_Discription.pdf';
                        version.Title = substringApiName(qis.name) + '_Problem_Discription.pdf';
                    }else {
                        // attach.Name = substringApiName(qis.name) + '_' + 'Problem_' + apiName.substring(0,apiName.length()-3) + '.pdf';
                        version.Title = substringApiName(qis.name) + '_' + 'Problem_' + apiName.substring(0,apiName.length()-3) + '.pdf';
                    }
                    version.PathOnClient = substringApiName(qis.name) + '_' + 'Problem_' + apiName.substring(0,apiName.length()-3) + '.pdf'+'.pdf';
                    // attach.ParentId = qis.id;
                    // attachments.add(attach);
                    cVersions.add(version);
                    res.put(version.Title, qis.Id);
                    // insert version;
                    if (generatedFields == null) {
                        qis.GeneratedPDFField__c = apiName;
                    }else {
                        qis.GeneratedPDFField__c += ',' + apiName;
                    }
                }
                updateQis.add(qis);
            }
            if (cVersions.size()>0) {
                insert cVersions;
            }
            List<Id> idList = new List<Id>();
            for (ContentVersion newVersion : cVersions) {
                idList.add(newVersion.Id);
            }
            cVersions = [select ContentDocumentId,Title from ContentVersion where Id in: idList];
            for (ContentVersion cv : cVersions) {
                ContentDocumentLink cdl = new ContentDocumentLink();
                cdl.ContentDocumentId = cv.ContentDocumentId;
                cdl.LinkedEntityId = res.get(cv.Title);
                cdl.ShareType = 'I';
                cdl.visibility = 'AllUsers';
                cDocLinks.add(cdl);
            }
            insert cDocLinks;
            // insert attachments;
            update updateQis;
            return null;
        }
        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);
        // 主要用于生成qis中问题描述对应的pdf文件名称(比较特殊)
        public static String substringApiName(String name){
            for(Integer i = 0; i < 2; i++){
                name = name.substring(name.indexOf('-')+1);
            }
            return name;
        }
        return false;
    }
    public QIS_Report__c QIS_Reports {get; set;}
    public Repair__c repairs {get; set;}
    // 是否为修理
    public Boolean isRepair {get; set;}
    // api名称
    public String api {get; set;}
    // id
    public String objId {get; set;}
    // 字段
    public String field {get; set;}
    // 标签
    public String label {get; set;}
    //
    public static List<ImgObj> ImgObjs {get; set;}
    public RepairAndQISToPDFController(){
        String fileName = '';
        String url = '';
        api = ApexPages.currentPage().getParameters().get('api');
        objId = ApexPages.currentPage().getParameters().get('id');
        if ('repair'.equals(api)) {
            isRepair = true;
            repairs = [select id,name,ProblemDescription__c,GeneratedPDFField__c from Repair__c where id = :objId];
            setImgSrcs(repairs, 'ProblemDescription__c');
        }else {
            field = ApexPages.currentPage().getParameters().get('field');
            String sql = 'select id,name,GeneratedPDFField__c,'+ field;
            sql += ' from QIS_Report__c where id = \''+objId+'\'';
            label = Schema.getGlobalDescribe().get('QIS_Report__c').getDescribe().fields.getMap().get(field).getDescribe().getLabel();
            QIS_Reports = Database.query(sql);
            setImgSrcs(QIS_Reports, field);
        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 QIS_Report__c QIS_Reports {get; set;}
        public Repair__c repairs {get; set;}
        // 是否为修理
        public Boolean isRepair {get; set;}
        // api名称
        public String api {get; set;}
        // id
        public String objId {get; set;}
        // 字段
        public String field {get; set;}
        // 标签
        public String label {get; set;}
        //
        public static List<ImgObj> ImgObjs {get; set;}
        public RepairAndQISToPDFController(){
            String fileName = '';
            String url = '';
            api = ApexPages.currentPage().getParameters().get('api');
            objId = ApexPages.currentPage().getParameters().get('id');
            if ('repair'.equals(api)) {
                isRepair = true;
                repairs = [select id,name,ProblemDescription__c,GeneratedPDFField__c from Repair__c where id = :objId];
                setImgSrcs(repairs, 'ProblemDescription__c');
            }else {
                field = ApexPages.currentPage().getParameters().get('field');
                String sql = 'select id,name,GeneratedPDFField__c,'+ field;
                sql += ' from QIS_Report__c where id = \''+objId+'\'';
                label = Schema.getGlobalDescribe().get('QIS_Report__c').getDescribe().fields.getMap().get(field).getDescribe().getLabel();
                QIS_Reports = Database.query(sql);
                setImgSrcs(QIS_Reports, field);
            }
        }
        public class ImgObj{
            public String imgSrc {get; set;}
            public String height {get; set;}
        }
    }