高章伟
2022-03-10 823b027c0decb82043c6e39f2d6ef1bb020220b1
最近一个月修改内容
20个文件已修改
4个文件已添加
1568 ■■■■ 已修改文件
force-app/main/default/classes/CopyOpportunityController.cls 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/CopyOpportunityController.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NEWCreateSWOQuoteController.cls 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityTriggerHandler.cls 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OrderPdf2Controller.cls 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OrderPdfController.cls 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OrderTriggerHandler.cls 285 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OrderTriggerTest.cls 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ProRegisterHandler.cls 191 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ProRegisterHandlerTest.cls 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Product2TriggerHandler.cls 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/Product2TriggerHandlerTest.cls 228 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RadiationUtil.cls 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SBG001TriggerHandler.cls 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StaticParameter.cls 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/CopyOpportunity.page 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/CopyOpportunity.page-meta.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NEWCreateSWOQuote.page 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OrderContract2.page 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OrderPDF.page 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OrderPdf2.page 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OrderPdf3.page 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/staticresources/SWOJS.js 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/OrderTrigger.trigger 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/CopyOpportunityController.cls
New file
@@ -0,0 +1,234 @@
/**
 * 跨区销售切换合作代理商和原代理商
 */
public without sharing class CopyOpportunityController {
    // 链接地址
    public String baseUrl { get; set; }
    public String rtUrl { get; set; }
    public String OppId {get; set;}      // 询价id
    public String QuoteId {get; set;}   // 报价id
    public Opportunity opportunity {get; set;} //原询价
    public Quote quote {get; set;}      //原报价
    /**
     * 无参构造方法
     * @author Dai Y
     * @date   2022-02-28
     * @return null
     */
    public CopyOpportunityController() {
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        String path = URL.getCurrentRequestUrl().getPath();
        if (path.indexOf('/apex') > 0) {
            baseUrl += path.substring(0,path.indexOf('/apex'));
        } else if (path.indexOf('production/') > 0) {
            baseUrl += '/production';
        }
        // 返回地址url
        rtUrl = System.currentPageReference().getParameters().get('retURL');
        if (rtUrl == null || rtUrl == 'null') {
            rtUrl = '';
        }
        OppId = System.currentPageReference().getParameters().get('OppId');
        QuoteId = System.currentPageReference().getParameters().get('QuotesId');
    }
    /**
     * 初始化方法
     * @author Dai Y
     * @date   2022-02-28
     * @return null
     */
    public void  init(){
        opportunity = [select id,ProductSegment__c,Dealer__c,DealerSelectOwner__c,HeadOfCooperationArea__c,CrossCooperativeDealer__c from Opportunity where id =:OppId];
        Opportunity.Dealer__c = null;
        Opportunity.DealerSelectOwner__c = null;
        Opportunity.HeadOfCooperationArea__c = null;
        Opportunity.CrossCooperativeDealer__c = null;
    }
    /**
     * 保存方法
     * @author Dai Y
     * @date   2022-02-28
     */
    public PageReference Save(){
        Opportunity opp = null;
        List<OpportunityLineItem> oliList = null;
        List<OpportunityContactRole> ocrList = null;
        List<OpportunityTeamMember> otmList = null;
        //Schema.DescribeSobjectResult d_opp = Opportunity.sObjectType.getDescribe();
        schema.describeSObjectresult d = schema.Opportunity.sObjectType.getDescribe();
        Map<String, Schema.SObjectField> d_opp_map = d.fields.getMap();
        String soql_opp = 'select ';
        String fields_opp = '';
        for (String field : d_opp_map.keySet()) {
            if (fields_opp.length() > 0) {
                fields_opp += ', ';
            }
            fields_opp += field;
        }
        soql_opp += fields_opp;
        soql_opp += ' from Opportunity where Id = \'' + OppId + '\'';
        //List<Opportunity> oppList = [select Id, SyncedQuoteId from Opportunity where Id = :odr.OpportunityId];
        List<Opportunity> oppList = Database.query(soql_opp);
        if (oppList.size() > 0) {
            opp = oppList[0];
            oliList = [select Id, PricebookEntryId, Product_Search__c, Product_Search__r.Id, Product_Search__r.Product__c from OpportunityLineItem where OpportunityId = :OppId];
            ocrList = [select Id, OpportunityId, ContactId, Role, IsPrimary from OpportunityContactRole where OpportunityId = :OppId];
            otmList = [select id, userId,teamMemberRole,opportunityId,OpportunityAccessLevel from OpportunityTeamMember where OpportunityId = :OppId];
        }
        Map<String, Product_Search__c> psMap = new Map<String, Product_Search__c>();
        if (oliList.size() > 0) {
            for (OpportunityLineItem oli : oliList) {
                psMap.put(oli.PricebookEntryId, oli.Product_Search__r);
            }
        }
        // 取得原报价、报价产品
        Quote quo = null;
        List<QuoteLineItem> qliList = null;
        Map<String, QuoteLineItem> qliMap = new Map<String, QuoteLineItem>();
        Schema.DescribeSobjectResult d_quo = schema.Quote.sObjectType.getDescribe();
        Map<String, Schema.SObjectField> d_quo_map = d_quo.fields.getMap();
        String soql_quo = 'select ';
        String fields_quo = '';
        for (String field : d_quo_map.keySet()) {
            if (fields_quo.length() > 0) {
                fields_quo += ', ';
            }
            fields_quo += field;
        }
        soql_quo += fields_quo;
        soql_quo += ' from Quote where Id = \'' + QuoteId + '\'';
        //List<Quote> quoList = [select Id from Quote where Id = :odr.QuoteId];
        List<Quote> quoList = Database.query(soql_quo);
        if (quoList.size() > 0) {
            quo = quoList[0];
            qliList = [select Id, Set__c, Description, Quantity, Discount, ListPrice, PricebookEntryId, QuoteId, UnitPrice, Custom_Price__c,SetName__c from QuoteLineItem where QuoteId = :QuoteId];
            for (QuoteLineItem qli : qliList) {
                qliMap.put(qli.Id, qli);
            }
        }
        System.debug(opp);
        System.debug(oliList);
        System.debug(ocrList);
        System.debug(quo);
        System.debug(qliList);
        // 跳过询价状态写入限制
        StaticParameter.StageProgressBarUpdate = true;
        Savepoint sp = Database.setSavepoint();
        try {
            Opportunity ins_opp = opp.clone();
            opp.Is_Decided__c = false;
            update opp;
            System.debug('=====update opp');
            ins_opp.Id = null;
            ins_opp.SyncedQuoteId = null;
            ins_opp.Is_Decided__c = false;
            ins_opp.DealerSelectOwner__c = opportunity.DealerSelectOwner__c;
            ins_opp.HeadOfCooperationArea__c = opportunity.HeadOfCooperationArea__c;
            ins_opp.Dealer__c = opportunity.Dealer__c;
            ins_opp.CrossCooperativeDealer__c = opportunity.CrossCooperativeDealer__c;
            ins_opp.the_Upload_of_quotation_number__c = null;
            //ins_opp.org_opportunity__c = opp.Id;
            insert ins_opp;
            // 复制询价联系人
            List<OpportunityContactRole> ins_ocrList = new List<OpportunityContactRole>();
            for (OpportunityContactRole ocr : ocrList) {
                OpportunityContactRole ins_ocr = ocr.clone();
                ins_ocr.Id = null;
                ins_ocr.OpportunityId = ins_opp.Id;
                ins_ocrList.add(ins_ocr);
            }
            if (ins_ocrList.size() > 0) insert ins_ocrList;
            List<OpportunityTeamMember> ins_otmList = new List<OpportunityTeamMember>();
            for (OpportunityTeamMember otm : otmList ) {
                OpportunityTeamMember ins_otm = otm.clone();
                ins_otm.OpportunityId = ins_opp.Id;
                ins_otm.Id = null;
            }
            if (ins_otmList.size() >0 ) {
                insert ins_otmList;
            }
            // 复制报价
            Quote ins_quo = null;
            if (quo != null) {
                ins_quo = quo.clone();
                ins_quo.Id = null;
                ins_quo.OpportunityId = ins_opp.Id;
                ins_quo.Is_Decided__c = false;
                for (Integer i = 1; i < = 30; i++) {
                    Decimal qty = (Decimal) ins_quo.get('SetQty' + i + '__c');
                    if (qty > 1) {
                        ins_quo.put('SetQty' + i + '__c', 1);
                    }
                }
            }
            if (ins_quo != null) insert ins_quo;
            List<QuoteLineItem> ins_qliList = new List<QuoteLineItem>();
            if (ins_quo != null) {
                for (QuoteLineItem qli : qliList) {
                    QuoteLineItem ins_qli = qli.clone();
                    ins_qli.Id = null;
                    ins_qli.QuoteId = ins_quo.Id;
                    ins_qliList.add(ins_qli);
                }
            }
            if (ins_qliList.size() > 0) insert ins_qliList;
            String url = baseUrl;
            url += '\\' + ins_opp.Id;
            return new Pagereference(url);
        }catch (Exception ex) {
            Database.rollback(sp);
            System.debug('=====Exception:' + ex.getMessage() + ' | Line:' + ex.getLineNumber());
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage() + ' | Line:' + ex.getLineNumber()));
            return null;
        }
        return null;
    }
    public PageReference BackBtn() {
        return null;
    }
    /**
     * 数据检查方法
     * @author Dai Y
     * @date   2022-03-01
     * @return 数据合格返回 true
     */
    private boolean DateCheck (){
        Boolean flag = true ; //合格标记,初始为true
        return flag;
    }
}
force-app/main/default/classes/CopyOpportunityController.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>41.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/classes/NEWCreateSWOQuoteController.cls
@@ -362,7 +362,7 @@
        if ('维修报价单'.equals(QuotesPage.QuotesType__c)) {
            QuotesPage.CUSTOMER_MESSAGE__c = '';
            //日期2121年11月15号之后的,用新的免责申明。
           if (aftORbef == true) {
           if (aftORbef == true || aftORbef1 == true) {
                QuotesPage.CUSTOMER_MESSAGE__c += '-维修质保只涵盖于本次维修的配件,维修质保期为仪器发货后三个月加八天。\n';
                Messages01 = '-维修质保只涵盖于本次维修的配件,维修质保期为仪器发货后三个月加八天。';
            }else{
@@ -380,8 +380,13 @@
            Messages05 = '日期:';
        } else if ('零件报价单'.equals(QuotesPage.QuotesType__c)) {
            QuotesPage.CUSTOMER_MESSAGE__c = '';
            QuotesPage.CUSTOMER_MESSAGE__c += '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。\n';
            Messages01 = '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。';
            if ('NDT'.equals(QuotesPage.PRODUCT_SEGMENT__c)) {
                QuotesPage.CUSTOMER_MESSAGE__c += '-仪景通光学科技(上海)有限公司北京分公司售出的维修配件为奥林巴斯原厂配件,仪景通公司对售出的维修配件不提供保修服务,也不提供退、换货服务,敬请您谨慎购买。\n';
                Messages01 = '-仪景通光学科技(上海)有限公司北京分公司售出的维修配件为奥林巴斯原厂配件,仪景通公司对售出的维修配件不提供保修服务,也不提供退、换货服务,敬请您谨慎购买。';
            }else {
                QuotesPage.CUSTOMER_MESSAGE__c += '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。\n';
                Messages01 = '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。';
            }
            QuotesPage.CUSTOMER_MESSAGE__c += '-用户在此确认此次报价,决定购买:\n';
            Messages02 = '-用户在此确认此次报价,决定购买:';
            QuotesPage.CUSTOMER_MESSAGE__c += '客户签字或盖章:\n';
force-app/main/default/classes/OpportunityTriggerHandler.cls
@@ -800,7 +800,7 @@
            opportunityToOwner.put(opp.Id, opp.DealerSelectOwner__c);
        }
        Map<Id, User> copyUserMap = new Map<Id, User>([SELECT Id, Name,BS_AsistGenManger__c,AsistGenManger__c, BusinessDepOwner_Tax__c,BusinessDepOwner_WithoutTax__c,SalesWindow__c,Department__c,SalesManager__c FROM User
        Map<Id, User> copyUserMap = new Map<Id, User>([SELECT Id, Name,BS_AsistGenManger__c, BusinessDepOwner_Tax__c,BusinessDepOwner_WithoutTax__c,SalesWindow__c,Department__c,SalesManager__c FROM User
            WHERE Id IN :ownerIdList ]);
           for (Opportunity opp: newList)
@@ -815,7 +815,6 @@
                    opp.IESalesManage__c = u.SalesManager__c != null ? u.SalesManager__c : u.Id;
                    opp.IESalesManageWindow__c  = u.SalesWindow__c != null ? u.SalesWindow__c : u.Id;
                    opp.DepartmentPrincipal__c = u.Department__c != null ? u.Department__c : u.Id;
                    opp.AsistGenMangerIE__c = u.AsistGenManger__c != null ? u.AsistGenManger__c : u.Id;
                }
                //结束
                //跨区销售添加副部长
force-app/main/default/classes/OrderPdf2Controller.cls
@@ -30,12 +30,12 @@
    private Integer eachCnt = 48;
    private Integer lastMaxCnt = 35;
    private Integer iRfirstCnt = 6;
    private Integer iRfirstCnt = 9;
    private Integer iRfirstMaxCnt = 23;
    private Integer iReachCnt = 48;
    private Integer iRlastMaxCnt = 30;
    private Integer nAfirstCnt = 6;
    private Integer nAfirstCnt = 9;
    private Integer nAfirstMaxCnt = 23;
    private Integer nAeachCnt = 48;
    private Integer nAlastMaxCnt = 30;
@@ -579,11 +579,11 @@
        seller_province1 = '北京';
        seller_phone1 = '010-58199000';
        seller_name2 = '奥林巴斯(北京)销售服务有限公司上海分公司';
        seller_address2 = '上海市徐汇区淮海中路1010号1001-1006、1101、1102、1104-1106、1601室';
        seller_name2 = '仪景通光学科技(上海)有限公司';
        seller_address2 = '中国(上海)自由贸易试验区日樱北路199-9号102及302部位';
        seller_city2 = '上海';
        seller_province2 = '上海';
        seller_phone2 = '021-51582084';
        seller_phone2 = '021-58881300';
        header = new HeaderInfo();
        inputDetails = new List<DetailInfo>();
force-app/main/default/classes/OrderPdfController.cls
@@ -192,31 +192,31 @@
                    od.PDF_Co_SContra_E__c = 'one';
                }
                if ((Opp.ProductSegment__c == 'IE'  || Opp.ProductSegment__c == 'RVI' || Opp.ProductSegment__c == 'BS') && Opp.TradeType__c == 'Tax Exemption') {
                    od.PDF_SELLER__c = '奥林巴斯香港中国有限公司';
                    od.PDF_THE_SELLER__c = 'Olympus Hong Kong and China Limited';
                    od.PDF_S_Adds__c = '香港新界葵涌葵昌路51號九龍貿易中心1座26樓';
                    od.PDF_S_Address__c = 'L26, Tower 1, Kowloon Commerce Centre, 51 Kwai Cheong Road, Kwai Chung, New Territories, Hong Kong.';
                    od.PDF_S_TEL__c = '(852)2170 5678';
                    od.PDF_S_FAX__c = '(852)2170 5679';
                    od.PDF_S_Bank_Name__c = 'MUFG Bank,Ltd';
                    od.PDF_S_Branch__c = 'Kowloon Branch';
                    od.PDF_S_Bank_Address__c = '15/F, Peninsula Office Tower 18 Middle Road, Kowloon, Hong Kong';
                    od.PDF_S_Account_No__c = '047-821-85800023837(USD Saving Account)';
                    od.PDF_S_Swift_Code__c = 'BOTKHKHH';
                    od.PDF_S_Account_Name__c = 'Evident Corporation';
                    od.PDF_SELLER__c = '仪景通光学科技(上海)有限公司';
                    od.PDF_THE_SELLER__c = 'Evident (Shanghai) Co., Ltd';
                    od.PDF_S_Adds__c = '中国(上海)自由贸易试验区日樱北路199-9号102及302部位';
                    od.PDF_S_Address__c = 'PART 302&102,NO.199-9,NORTH RIYING ROAD,CHINA (SHANGHAI) PILOT FREE TRADE ZONE';
                    od.PDF_S_TEL__c = '021-58881300';
                    od.PDF_S_FAX__c = '';
                    od.PDF_S_Bank_Name__c = 'SUMITOMO MITSUI BANKING CORPORATION(CHINA)LIMITED';
                    od.PDF_S_Branch__c = '';
                    od.PDF_S_Bank_Address__c = '11F, SHANGHAI WORLD FINANCIAL CENTER, 100 CENTURY AVENUE, PUDONG NEW AREA ,SHANGHAI 200120, PEOPLE\'S REPUBLIC OF CHINA';
                    od.PDF_S_Account_No__c = '40453301';
                    od.PDF_S_Swift_Code__c = 'SMBCCNSH';
                    od.PDF_S_Account_Name__c = 'Evident(Shanghai)CO.,LTD';
                } else if (( Opp.ProductSegment__c == 'NDT' || Opp.ProductSegment__c == 'ANI') && Opp.TradeType__c == 'Tax Exemption') {
                    od.PDF_SELLER__c = '奥林巴斯香港中国有限公司';
                    od.PDF_THE_SELLER__c = 'Olympus Hong Kong and China Limited';
                    od.PDF_S_Adds__c = '香港新界葵涌葵昌路51號九龍貿易中心1座26樓';
                    od.PDF_S_Address__c = 'L26, Tower 1, Kowloon Commerce Centre, 51 Kwai Cheong Road, Kwai Chung, New Territories, Hong Kong';
                    od.PDF_S_TEL__c = '(852)2170 5678';
                    od.PDF_S_FAX__c = '(852)2170 5679';
                    od.PDF_S_Bank_Name__c = 'The Bank Of Tokyo-Mitsubishi UFJ,Ltd.';
                    od.PDF_S_Branch__c = 'Kowloon Branch ';
                    od.PDF_S_Bank_Address__c = '15/F., Peninsula Office Tower, 18 Middle Road, Kowloon';
                    od.PDF_S_Account_No__c = '047-821-85800023837(USD Saving Account)';
                    od.PDF_S_Swift_Code__c = 'BOTKHKHH';
                    od.PDF_S_Account_Name__c = 'Olympus Hong Kong and China Limited';
                    od.PDF_SELLER__c = '仪景通光学科技(上海)有限公司';
                    od.PDF_THE_SELLER__c = 'Evident (Shanghai) Co., Ltd';
                    od.PDF_S_Adds__c = '中国(上海)自由贸易试验区日樱北路199-9号102及302部位';
                    od.PDF_S_Address__c = 'PART 302&102,NO.199-9,NORTH RIYING ROAD,CHINA (SHANGHAI) PILOT FREE TRADE ZONE';
                    od.PDF_S_TEL__c = '021-58881300';
                    od.PDF_S_FAX__c = '';
                    od.PDF_S_Bank_Name__c = 'SUMITOMO MITSUI BANKING CORPORATION(CHINA)LIMITED';
                    od.PDF_S_Branch__c = '';
                    od.PDF_S_Bank_Address__c = '11F, SHANGHAI WORLD FINANCIAL CENTER, 100 CENTURY AVENUE, PUDONG NEW AREA ,SHANGHAI 200120, PEOPLE\'S REPUBLIC OF CHINA';
                    od.PDF_S_Account_No__c = '40453301';
                    od.PDF_S_Swift_Code__c = 'SMBCCNSH';
                    od.PDF_S_Account_Name__c = 'Evident(Shanghai)CO.,LTD';
                    od.DeliveryTimeTextEn__c = 'Please refer to order confirmation';
                    od.DeliveryTimeText__c = '请参考订单确认';
                    od.PDF_Bi_AllBill__c = '不随货';
force-app/main/default/classes/OrderTriggerHandler.cls
@@ -107,7 +107,7 @@
                    
                    system.debug('2222222'+getModelQuantityMap);
                    String accountDealerErrorMessage = RadiationUtil.updateCertificationDetails(oliList[0].Opportunity.DealerId__c, null, getModelQuantityMap, false);
                    String olympusDealerErrorMessage = RadiationUtil.updateCertificationDetails(olympusAccountId, null, getModelQuantityMap, false) == '' ? '' : '仪景通可销售数量不足';
                    String olympusDealerErrorMessage = RadiationUtil.updateCertificationDetails(olympusAccountId, null, getModelQuantityMap, false) == '' ? '' : '奥林巴斯可销售数量不足';
                    //result = accountDealerErrorMessage + (olympusDealerErrorMessage == '' ? '' : '奥林巴斯可销售数量不足') ;
                    Boolean temp = accountDealerErrorMessage.startsWith('你不能');
                    String strOly = LicenseCheckUtil.LicenseCheckOly();
@@ -170,8 +170,6 @@
            }*/
        }
        List<AggregateResult> orderCnt = [select Count(Id) ocnt, OpportunityId from Order where OpportunityId = :oppIdList and Status__c = 'Active' group by OpportunityId];
        Map<String, Integer> orderCntMap = new Map<String, Integer>();
        for (AggregateResult temp : orderCnt) {
@@ -191,12 +189,14 @@
        }
        //王鹏伟 新建和同时,和询价对比客户、最终用户
        //戴宇,添加合同关联逻辑
        List<Opportunity> oppList = [select id,Association_Opportunity__c,CrossCooperativeProject__c,HeadOfCooperationArea__c,CrossCooperativeDealer__r.ManagementCode_F__c,CrossCooperativeDealer__r.Name,SyncedQuoteId, SyncedQuote.PaymentTerms__c, TradeType__c, Quote_PaymentTerms__c,AccountId,customerType__c,useing__c,compo_opp__c,RecordTypeId from Opportunity where id = :oppidList];
        List<Opportunity> oppList = [select id,Association_Opportunity__c,CrossCooperativeProject__c,HeadOfCooperationArea__c,CrossCooperativeDealer__r.ManagementCode_F__c,CrossCooperativeDealer__r.Name,SyncedQuoteId, SyncedQuote.PaymentTerms__c, TradeType__c, Quote_PaymentTerms__c,AccountId,customerType__c,useing__c,compo_opp__c from Opportunity where id = :oppidList];
        Map<String, String> syncedQuoteIdMap = new Map<String, String>();
        Map<String, String> paymentTermsMap = new Map<String, String>();
        Map<String, String> tradeTypeMap = new Map<String, String>();
        Map<String,String> oppAccountMap = new Map<String,String>();
        Map<String,Opportunity> oppMap = new Map<String,Opportunity>();
        for (Opportunity opp : oppList) {
            syncedQuoteIdMap.put(opp.id, opp.SyncedQuoteId);
@@ -212,9 +212,6 @@
            if(newOrd.ProductSegment__c == 'IE' && newOrd.IE_SP8_D__c != oppMap.get(newOrd.OpportunityId).compo_opp__c){
                newOrd.addError('不能修改特殊条件COMPO');
            }
            /*if(newOrd.ProductSegment__c == 'BS'){
                String temp = oppMap.get(newOrd.OpportunityId).useing__c;
                if(newOrd.SP_61D__c != (temp == ''?false:true)){
@@ -244,7 +241,7 @@
            newOrd.CrossCooperativeDealerCode__c = oppMap.get(newOrd.OpportunityId) == null ? '' :oppMap.get(newOrd.OpportunityId).CrossCooperativeDealer__r.ManagementCode_F__c;
            newOrd.HeadOfCooperationArea__c = oppMap.get(newOrd.OpportunityId) == null ? null :oppMap.get(newOrd.OpportunityId).HeadOfCooperationArea__c;
            newOrd.CrossCooperativeDealerText__c = oppMap.get(newOrd.OpportunityId) == null ? null :oppMap.get(newOrd.OpportunityId).CrossCooperativeDealer__r.Name;
            newOrd.is_Direct__c = oppMap.get(newOrd.OpportunityId) == null ? false : (oppMap.get(newOrd.OpportunityId).RecordTypeId == '0120T0000003Ser' ? true : false);
            //王鹏伟新加,合同中带入 询价 贸易管理客户分类  开始
            newOrd.TradeMagCategory__c = oppMap.get(newOrd.OpportunityId) == null ? '' :oppMap.get(newOrd.OpportunityId).customerType__c;
@@ -269,7 +266,7 @@
                                     newOrd.RecordTypeId == System.Label.RT_Contract_IndividualCase_NDT ||
                                     newOrd.RecordTypeId == System.Label.RT_Contract_IndividualCase_RVI;
            if (UserInfo.getUserType() == 'PowerPartner' || newOrd.RecordTypeId == System.Label.RT_ServiceContract || newOrd.RecordTypeId == '0120T0000003nka'
            if (UserInfo.getUserType() == 'PowerPartner' || newOrd.RecordTypeId == System.Label.RT_ServiceContract
                    || newOrd.RecordTypeId == System.Label.RT_ServiceContractIE || newOrd.RecordTypeId == System.Label.RT_ServiceContractRVI || individualCase) {
                // 外贸送达方默认为外贸公司
                if (tradeTypeMap.get(newOrd.OpportunityId) == System.Label.Trade_Type) {
@@ -428,6 +425,7 @@
    }
    public static void setPriceBook(List<Order> newList, Map<Id, Order> newMap, List<Order> oldList, Map<Id, Order> oldMap) {
        List<String> oppidList = new List<String>();
        for (Order o : newList) {
            oppidList.add(o.OpportunityId);
@@ -444,18 +442,11 @@
    public static void addItem(List<Order> newList, Map<Id, Order> newMap, List<Order> oldList, Map<Id, Order> oldMap) {
        List<String> oppidList = new List<String>();
//        Map<String, String> order2oppMap = new Map<String, String>();
        Boolean  hasBS = false;
        List<OrderShare> salesOwnershareList = new List<OrderShare>();
        for (Order o : newList) {
            oppidList.add(o.OpportunityId);
            // 跨省份合作项目 为真 并且 合同审批人不是空,将合同共享给审批人 Start
            if (o.CrossCooperativeProject__c && String.isNotBlank(o.SalesOwner_BS__c)) {
                salesOwnershareList.add(DataAssembly(o.Id,o.SalesOwner_BS__c));
            }
            // 跨省份合作项目 为真 并且 合同审批人不是空,将合同共享给审批人 End
        }
        if (salesOwnershareList.size() > 0) {
            insert salesOwnershareList;
//            order2oppMap.put(o.Id, o.OpportunityId);
        }
        // XHL20210830
        List<OpportunityTeamMember> oppTM = new List<OpportunityTeamMember>();
@@ -696,12 +687,8 @@
        //新的获取简档ID  calendarUtil.getMemberProfileID  这里用到的人员ID 和获取到的简档ID都是15位的
        //String new_profileId = calendarUtil.getMemberProfileID(UserInfo.getUserId().subString(0,15));
        String new_profileId = calendarUtil.getMemberProfileID(UserInfo.getUserId().subString(0,15));
        for (Order newOrd : newList) {
            Order oldOrd = oldMap.get(newOrd.Id);
            if(newOrd.CrossCooperativeProject__c && CherkCrossComperativeChanged(newOrd,oldOrd)){
                newOrd.addError('创建合同后不能修改A代理商和B代理商');
            }
           /* if(newOrd.SubDealer__c == '无'){
                newOrd.SubDealer__c = '';
            }*/
@@ -1484,12 +1471,12 @@
     */
    public static void setOrderShare (List<Order> newList, Map<Id, Order> newMap, List<Order> oldList, Map<Id, Order> oldMap) {
        List<OrderShare> insertOrderShareList = new List<OrderShare>();
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        /*BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Type__c = 'OrderShare';
        String datetimeStr = String.valueOf(Datetime.now()).replace('-','').replace(' ','').replace(':','');
        iflog.MessageGroupNumber__c = datetimeStr;
        iflog.Log__c = '';
        Boolean errrorFlag = false;
        Boolean errrorFlag = false;*/
        for (Order newOrd : newList) {
            Order oldOrd = oldMap == null ? new Order() : oldMap.get(newOrd.Id);
@@ -1504,7 +1491,7 @@
            if (newOrd.SharedFlag__c != oldOrd.SharedFlag__c && newOrd.SharedFlag__c && newOrd.OwnerId != oldOrd.OwnerId) {
                String userId = oldOrd.OwnerId;
                insertOrderShareList.add(DataAssembly(newOrd.Id,userId));
            } else {
            } /*else {
                if (newOrd.SharedFlag__c != oldOrd.SharedFlag__c && newOrd.SharedFlag__c) {
                    iflog.Log__c += 'Order Id --->'+ newOrd.Id + '\n';
@@ -1512,7 +1499,7 @@
                    iflog.Log__c +=  'oldOrd.OwnerId--->'+oldOrd.OwnerId + '\n';
                    errrorFlag = true;  
                }
            }
            }*/
        }
        if (insertOrderShareList.size() > 0) {
@@ -1520,9 +1507,9 @@
            insert insertOrderShareList;
        }
        if (errrorFlag) {
        /*if (errrorFlag) {
            insert iflog;
        }
        }*/
    }
@@ -1537,18 +1524,8 @@
            // }
            // XHL20210830
            if (newOrd.SharedFlag__c != oldOrd.SharedFlag__c && newOrd.SharedFlag__c && newOrd.OwnerId != newOrd.OpportunityOwnerId__c && newOrd.OpportunityOwnerId__c <> null && newOrd.OpportunityOwnerId__c <> '') {
                newOrd.OwnerId = newOrd.OpportunityOwnerId__c;
                newOrd.OwnerId = newOrd.OpportunityOwnerId__c;
            }
            if (newOrd.SharedFlag__c != oldOrd.SharedFlag__c && newOrd.SharedFlag__c){
                // 跨省份合作项目 为真 并且 合同审批人不是空,将审批人赋值给所有人 Start
                if (newOrd.CrossCooperativeProject__c && String.isNotBlank(newOrd.SalesOwner_BS__c)) {
                    newOrd.OwnerId = newOrd.SalesOwner_BS__c;
                }
                // 跨省份合作项目 为真 并且 合同审批人不是空,将审批人赋值给所有人 End
            }
            //
            if (newOrd.ApproveStatus__c != oldOrd.ApproveStatus__c) {
                if (newOrd.ApproveStatus__c == 'Pass' && newOrd.IsCopy__c == false) {
                    newOrd.IsSpPassed__c = true;    
@@ -1874,12 +1851,7 @@
            if (oldOrder.ApproveStatus__c != newOrder.ApproveStatus__c && (newOrder.ApproveStatus__c == 'Completed' || newOrder.ApproveStatus__c == 'Completed2' || newOrder.ApproveStatus__c == 'CompletedC' || newOrder.ApproveStatus__c == 'CompletedS' )) {
                ownerIdList.add(newOrder.OpportunityOwnerId__c);
                ownerIdList.add(newOrder.SalesOwner_BS__c);
                if(newOrder.CrossCooperativeProject__c){
                    orderToOwner.put(newOrder.Id, newOrder.SalesOwner_BS__c);
                }else{
                    orderToOwner.put(newOrder.Id, newOrder.OpportunityOwnerId__c);
                }
                orderToOwner.put(newOrder.Id, newOrder.OpportunityOwnerId__c);
            }
            if (newOrder.Description != null && newOrder.Description.length() > 0) {
@@ -2019,12 +1991,14 @@
        }
        //显微镜降级
        levelMap = levelCheck(ordIdList);
        if(OrderDivisionController.OrderDivision == false){
            levelMap = levelCheck(ordIdList);
        }
        //for()
        Map<Id, User> copyUserMap = new Map<Id, User>([
                    SELECT Id, Name, SalesAsistManager__c, BusinessDepOwner_Tax__c, BusinessDepOwner_WithoutTax__c, SalesManager__c, AsistGenManger__c, CRM_Owner__c,
                    BS_AsistGenManger__c,BS_AsistBGenManger__c,Department__c,BS_BDepartment__c,BS_GeneralManager__c,BS_INDepartment__c,BS_Department__c,BS_Manager__c
                    BS_AsistGenManger__c,BS_AsistBGenManger__c,BS_BDepartment__c,BS_GeneralManager__c,BS_INDepartment__c,BS_Department__c,BS_Manager__c
                    FROM User WHERE Id IN :ownerIdList
                ]);
        
@@ -2054,11 +2028,8 @@
                User u = copyUserMap.get(orderToOwner.get(newOrder.Id));
                if (u != null && (u.SalesAsistManager__c != null || u.Department__c != null || u.BusinessDepOwner_Tax__c != null || u.BusinessDepOwner_WithoutTax__c != null || u.SalesManager__c != null || u.AsistGenManger__c != null)) {
                    if(newOrder.CrossCooperativeProject__c == false){
                        newOrder.SalesOwner_BS__c = newOrder.OpportunityOwnerId__c;
                    }
                if (u != null && (u.SalesAsistManager__c != null || u.BusinessDepOwner_Tax__c != null || u.BusinessDepOwner_WithoutTax__c != null || u.SalesManager__c != null || u.AsistGenManger__c != null)) {
                    newOrder.SalesOwner_BS__c = newOrder.OpportunityOwnerId__c;
                    newOrder.SalesAsistManager_BS__c = u.SalesAsistManager__c == null ? u.Id : u.SalesAsistManager__c;
                    // 当黄平江的IE完税合同,以下省份业务部审批人为郑轶盈 2018/11/30
                    if (newOrder.ProductSegment__c == 'IE' && u.Id == '00528000000YVFs' && (newOrder.Province__c == '河南' || newOrder.Province__c == '山东'
@@ -2112,12 +2083,13 @@
                newOrder.OrderUpdateUser__c = UserInfo.getUserId();
            }
            //if (newOrder.RecordTypeId == '01228000000NJt8') {
            //gwy 2022-02-18 等级类别字段添加控制,普通合同和变更的合同。
            if ((newOrder.ProductSegment__c == 'BS' && newOrder.Is_TAX__c == true && newOrder.AccoutMatketD__c == 'Clinical') && 
                (newOrder.confirm__c == false || (newOrder.confirm__c && String.isNotBlank(newOrder.original_order__c) && !'OrderPass'.equals(newOrder.ApproveStatus__c)))) {
                //显微镜降级
                newOrder.Level_Category__c = levelMap.get(newOrder.id);
            }
                if(OrderDivisionController.OrderDivision == false){
                    newOrder.Level_Category__c = levelMap.get(newOrder.id);
                }
            }
            //}
        }
    }
@@ -2395,7 +2367,7 @@
                hasBS = true;
            }
        }
        if (updateOrderAccount) {
        if (updateOrderAccount && OrderDivisionController.OrderDivision == false) {
            // WLIG-C3M68P XHL 20210607 Start
            // 新建与变更合同客户、最终用户时,和询价对比客户、最终用户,若不相同直接报错提醒
            CustomerConsistency(oppidList,oppAccountMap,newList);
@@ -2538,15 +2510,10 @@
                    (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_kua ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval_kua ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_kua ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval_kua )) {
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval)) {
                odrIds.add(odr.Id);
            }
        }
        system.debug('111111+' + odrIds.size());
        if (odrIds.size() == 0) return;
        Map<String, boolean> hiddenFlagMap = new Map<String, boolean>();
@@ -2568,9 +2535,6 @@
        system.debug('hiddenFlagMap'+hiddenFlagMap);
        for (Order odr : newList) {
            Order oldOrd = oldMap == null ? new Order() : oldMap.get(odr.Id);
            system.debug(odr.RecordTypeId + '@@@' + oldOrd.RecordTypeId);
            system.debug(odr.CrossCooperativeProject__c + '!!!!!' + hiddenFlagMap.get(odr.Id));
            //如果合同的记录类型是LS相关的记录类型,需要根据隐藏标记确认是否修改为对应的记录类型
            if (odr.RecordTypeId != oldOrd.RecordTypeId &&
                    (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax ||
                     odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval ||
@@ -2578,77 +2542,23 @@
                     odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval)) {
                if (hiddenFlagMap.get(odr.Id) == true) {
                    if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax) {
                        if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_hidden_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_hidden;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_hidden;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval_hidden_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval_hidden;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval_hidden;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden_Approval_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden_Approval;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden_Approval;
                    }
                } else if (hiddenFlagMap.get(odr.Id) == false) {
                    if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_hidden) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_Tax;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval_hidden) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_hidden) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax;
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_hidden_Approval) {
                        if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_Approval_kua;
                        }else{
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden;
                        }
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax) {
                        if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_kua;
                        }
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_Tax_Approval) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_Tax_Approval_kua;
                        }
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_kua;
                        }
                    } else if (odr.RecordTypeId == System.Label.RT_Contract_BS_WithoutTax_Approval) {
                         if(odr.CrossCooperativeProject__c == true){
                            odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_Approval_kua;
                        }
                        odr.RecordTypeId = System.Label.RT_Contract_BS_WithoutTax_hidden;
                    }
                }
            }
@@ -2718,6 +2628,13 @@
                        // 合同-变更申请-原合同无效或者手动修改导致合同无效
                        if (!approveStatus && status) {
                            if(newOrd.oldOrder__c){
                                RadiationUtil.oldOrder = true;
                                if (updateFlag) {
                                    newOrd.oldOrder__c = false;
                                }
                            }
                            RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'无效或变更无效',newOrd.LastModifiedById );
                        }
@@ -2734,6 +2651,12 @@
                            if (RadiationUtil.EscapeOrderTriggerHandler) {
                                RadiationUtil.EscapeOrderTriggerHandler = false;
                                if(newOrd.oldOrder__c){
                                    RadiationUtil.oldOrder = true;
                                    if (updateFlag) {
                                        newOrd.oldOrder__c = false;
                                    }
                                }
                                RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'合同变更草案中',newOrd.LastModifiedById );
                            }
@@ -2747,20 +2670,43 @@
                        Boolean status = newOrd.Status__c != oldOrd.Status__c && newOrd.Status__c == 'Inactive';
                        // 合同提交状态变成无效
                        if ( status ) {
                            if(newOrd.oldOrder__c){
                                RadiationUtil.oldOrder = true;
                                if (updateFlag) {
                                    newOrd.oldOrder__c = false;
                                }
                            }
                            RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'合同提交变无效',newOrd.LastModifiedById );
                        }
                    } else if (newOrd.ApproveStatus__c == 'CancelPass' && newOrd.Status__c == 'Active') {
                        // 合同-合同批准→→→合同取消
                        if ( approveStatus && newOrd.BeforeSubmitStatus__c == 'OrderPass') {
                            if(newOrd.oldOrder__c){
                                RadiationUtil.oldOrder = true;
                                if (updateFlag) {
                                    newOrd.oldOrder__c = false;
                                }
                            }
                            RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'合同取消',newOrd.LastModifiedById );
                        }
                    } else if (oldOrd.ApproveStatus__c == 'OrderSubmit' && newOrd.ApproveStatus__c == 'OrderReject' && newOrd.Status__c == 'Active') {
                        // 合同提交→→→合同驳回
                        if(newOrd.oldOrder__c){
                            RadiationUtil.oldOrder = true;
                            if (updateFlag) {
                                newOrd.oldOrder__c = false;
                            }
                        }
                        RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'合同驳回',newOrd.LastModifiedById );
                    } else if (oldOrd.ApproveStatus__c == 'OrderSubmit' && newOrd.ApproveStatus__c == 'OrderDraft' && newOrd.Status__c == 'Active') {
                        // 合同提交→→→合同调回
                        if(newOrd.oldOrder__c){
                            RadiationUtil.oldOrder = true;
                            if (updateFlag) {
                                newOrd.oldOrder__c = false;
                            }
                        }
                        RadiationUtil.updateRadiationTypeQuantity(newOrd.Id,orderFounder , newOrd.DealerId__c, true,'合同调回',newOrd.LastModifiedById );
                    }
                   
@@ -2883,6 +2829,10 @@
        String errMessage = '客户名或最终用户与询价不一致!';
        for(Order orOne:newList){
            if (oppAccountMap.containsKey(orOne.OpportunityId)) {
                System.debug(oppAccountMap.get(orOne.OpportunityId) != orOne.AccountId);
                System.debug( !roleMap.containsKey(orOne.OpportunityId));
                System.debug(orOne.EndUserD__c + '++'+ roleMap.get(orOne.OpportunityId));
                if(oppAccountMap.get(orOne.OpportunityId) != orOne.AccountId || !roleMap.containsKey(orOne.OpportunityId) || orOne.EndUserD__c != roleMap.get(orOne.OpportunityId)){
                    // 获取用户Id
                    String userId = UserInfo.getUserId().subString(0,15);
@@ -2892,23 +2842,22 @@
                                throw new ControllerUtil.myException('合同Id:'+orOne.Id+'_'+errMessage);    
                            } else {
                                //订单ID没有取到
                                orOne.addError(errMessage);
                                orOne.addError(errMessage+'1'+orOne.Id);
                            }
                        } else {
                            //自定义标签里面没有当前用户的ID
                            orOne.addError(errMessage);
                            orOne.addError(errMessage + '2');
                        }
                    } else {
                        //自定义标签没有内容
                        orOne.addError(errMessage);
                        orOne.addError(errMessage + '3');
                    }
                    
                    
                }
            }
        }
    }
    //检查合同上的等级类别是二类,一类,非监管(等级由高到底),单独一条记录里面的所有产品,放到一个list里面。
@@ -2937,7 +2886,7 @@
            }
        }
        //开始逻辑判断,订单产品对应的产品的等级类别只要有一类,订单上的等级类别赋值一类(一类>二类>非监管,依此类推)
        //开始逻辑判断,订单产品对应的产品的等级类别只要有二类,订单上的等级类别赋值二类(二类>一类>非监管,依此类推)
        for (String oe : newList) {
            if (orditemMap.containsKey(oe)) {
                if (orditemMap.get(oe).contains('二类')) {
@@ -3002,80 +2951,12 @@
        return returnMap;
    }
    */
    /**
     * 检查合同审批人是否填写完整
     * @author Dai Y
     * @date   2022-01-12
     * @param  ordList    待检查合同List
     * @return            填写完整返回true,不完整返回false
     */
    private static Boolean CheckSalesOwner(List<Order> ordList){
        Boolean flag = true;
        for (Order order : ordList) {
            //判断合同审批人是否为空,
            if(String.isBlank(order.SalesOwner_BS__c)){
                //order.SalesOwner_BS__c.addError('请填写审批人');
                flag = false;
            }
        }
        return flag;
    }
    /**
     * 检查跨区销售相关数据是否填写完整
     * @author Dai Y
     * @date   2022-01-12
     * @param  ordList    待检查合同List
     * @return            填写完整返回true,不完整返回false
     */
    private static Boolean CheckCrossComperativeData(List<Order> ordList){
        Boolean flag = true;
        for (Order order : ordList) {
            //判断合作区域代理商,主代理商和合作区域负责人
            if(String.isBlank(order.CrossCooperativeDealerText__c) || String.isBlank(order.HeadOfCooperationArea__c)  || false){
                flag = false;
            }
        }
        return flag;
    }
    /**
     * 判断AB代理商是否修改
     * @author Dai Y
     * @date   2022-01-20
     * @param  newOrd    修改后合同
     * @param  oldOrd     修改前合同
     * @return            如果进行修改返回true,没修过饭后false
     */
    public static Boolean CherkCrossComperativeChanged(Order newOrd ,Order oldOrd){
        Boolean flag = false;
        if(newOrd.Dealer_A__c != oldOrd.Dealer_A__c || newOrd.Dealer_B__c != oldOrd.Dealer_B__c ){
            flag = true;
        }
        return flag;
    }
    /**
     * 必填选项检查
     * @author Dai Y
     * @date   2022-01-13
     * @param  ordList    待检查合同List
     * @return            检查通过返回true,不通过返回false
     */
    private static Boolean Check(List<Order> ordList){
        Boolean flag = true;
        return flag;
    }
    public static void asd() {
        Integer i = 1;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
force-app/main/default/classes/OrderTriggerTest.cls
@@ -101,7 +101,8 @@
            SpecialDeliveryAccount__c = accIE.Id,
            SpecialDeliveryAccount_D__c = accIE.Id,
            SpecialDeliveryContact2_D__c = con.Id,
            EndUser__c = con.Id
            EndUser__c = con.Id,
            EndUserD__c = con.Id
        );
        insert odr;
@@ -226,7 +227,8 @@
            IE_SP8__c = true,
            SpecialDeliveryAccount_D__c = accIE.Id,
            SpecialDeliveryContact2_D__c = con.Id,
            EndUser__c = con.Id
            EndUser__c = con.Id,
            EndUserD__c = con.Id
        );
        insert odr;
        List<Order> orderList = [select id, ApproveStatus__c,ProductSegment__c,Status__c,IE_SP5_D__c,IE_SP6_D__c,IE_SP7_D__c,IE_SP8_D__c from Order where Id = :odr.Id];
@@ -338,7 +340,8 @@
            EffectiveDate = Date.today(),
            SpecialDeliveryAccount_D__c = accIE.Id,
            SpecialDeliveryContact2_D__c = con.Id,
            EndUser__c = con.Id
            EndUser__c = con.Id,
            EndUserD__c = con.Id
        );
        insert odr;
@@ -612,7 +615,8 @@
            SP_61D__c = true,
            SpecialDeliveryAccount_D__c = accBS.Id,
            SpecialDeliveryContact2_D__c = con.Id,
            EndUser__c = con.Id
            EndUser__c = con.Id,
            EndUserD__c = con.Id
        );
        insert odr;
@@ -800,7 +804,8 @@
            EffectiveDate = Date.today(),
            Status = 'Draft',
            Pricebook2Id = pricebook.Id,
            EndUser__c = contact.Id
            EndUser__c = contact.Id,
            EndUserD__c = contact.Id
        );
        insert order;
    }
force-app/main/default/classes/ProRegisterHandler.cls
@@ -113,92 +113,185 @@
        Map<Id,Product2> prt2Map = new Map<Id,Product2>();
        //通过之前存储的Id用于关系表的查询。
        List<Product_Register_Link__c> prlList = new List<Product_Register_Link__c>();
        prlList = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.MedPrdClass__c,Product_Register__r.Stelsedag__c
        prlList = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.MedPrdClass__c,Product_Register__r.Stelsedag__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c
        from Product_Register_Link__c 
        where Product_Register__r.Id in : prcList];
        //查询出产品ID
        List<Id> pro2IdList = new  List<Id>();
        for (Product_Register_Link__c prl1: prlList) {
            pro2IdList.add(prl1.Product2__r.id);
        }
        List<Product_Register_Link__c> prl1List = new List<Product_Register_Link__c>();
        prl1List = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.Stelsedag__c,Product_Register__r.MedPrdClass__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c
        from Product_Register_Link__c
        where Product2__r.Id in : pro2IdList];
        //根据Id存放产品所属的所有注册证下的器械分类。
        Map<Id,List<String>> pro2Map = new Map<Id,List<String>>();
        //存放注册证上最前的维护日
        Map<Id,Date> prSteMap = new Map<Id,Date>();
        if (prlList.size()>0) {
            for (Product_Register_Link__c prl: prlList) {
        if (prl1List.size()>0) {
            for (Product_Register_Link__c prl: prl1List) {
                if (pro2Map.containsKey(prl.Product2__r.Id)) {
                    pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
                }else {
                    pro2Map.put(prl.Product2__r.Id, new List<String>());
                    pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
                }
                if (prSteMap.containsKey(prl.Product2__r.Id)) {
                    if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                        prSteMap.remove(prl.Product2__r.Id);
                if (prl.Product_Register__r.MedPrdClass__c == '1') {
                    if (prSteMap.containsKey(prl.Product2__r.Id)) {
                        if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                            prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                        }
                    }else {
                        prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                    }
                }else {
                    prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                }
            }
            for (Product_Register_Link__c prl: prl1List) {
                if (prSteMap.get(prl.Product2__r.Id) == null) {
                    if (prSteMap.containsKey(prl.Product2__r.Id) && (prl.Product_Register__r.MedPrdClass__c == '2' || prl.Product_Register__r.MedPrdClass__c == '3')) {
                        if (prSteMap.containsKey(prl.Product2__r.Id)) {
                            if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                                prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                            }
                        }else {
                            prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                        }
                    }
                }
            }
        }
        System.debug('pro2Map='+pro2Map);
        System.debug('prSteMap='+prSteMap);
        //产品Id与等级类别
        Map<Id,String> prlMap = new Map<Id,String>();
        List<ID> pr2Idlsit = new List<ID>();
        if (pro2Map.size()>0 && prSteMap.size()>0) {
            for (Product_Register_Link__c pr: prlList) {
        Map<Id,String> prl1Map = new Map<Id,String>();
        Map<Id,String> prl2Map = new Map<Id,String>();
        List<ID> pidList = new List<ID>();
        if (pro2Map.size()>0) {
            for (Product_Register_Link__c pr: prl1List) {
                if (pro2Map.containsKey(pr.Product2__r.Id) && prSteMap.containsKey(pr.Product2__r.Id)) {
                    pr2Idlsit.add(pr.Product2__r.Id);
                    //生产日大于维护日,入库日大于维护日
                    if (pr.Product2__r.demoteer_Sap__c <= prSteMap.get(pr.Product2__r.Id) &&
                        pr.Product2__r.Diedatvanink__c <= prSteMap.get(pr.Product2__r.Id)) {
                        if (pro2Map.get(pr.Product2__r.Id).contains('1') ||
                            pro2Map.get(pr.Product2__r.Id).contains('2') ||
                            pro2Map.get(pr.Product2__r.Id).contains('3')) {
                            prlMap.put(pr.Product2__r.Id, '二类');
                        }else {
                            prlMap.put(pr.Product2__r.Id, '非监管');
                        }
                    }else {
                        //入库日大于维护日
                        if (pr.Product2__r.Diedatvanink__c > prSteMap.get(pr.Product2__r.Id)) {
                            //生产日大于维护日
                            if (pr.Product2__r.demoteer_Sap__c > prSteMap.get(pr.Product2__r.Id)) {
                                prlMap.put(pr.Product2__r.Id, '一类');
                            }else {
                                //生产日小于维护日
                                if (pro2Map.get(pr.Product2__r.Id).contains('1')) {
                                    prlMap.put(pr.Product2__r.Id, '一类');
                                }else if (!pro2Map.get(pr.Product2__r.Id).contains('1') &&
                                          (pro2Map.get(pr.Product2__r.Id).contains('2') ||
                                           pro2Map.get(pr.Product2__r.Id).contains('3'))) {
                                    prlMap.put(pr.Product2__r.Id, '二类');
                                }else {
                                    prlMap.put(pr.Product2__r.Id, '非监管');
                                }
                            }
                        }
                    pidList.add(pr.Product2__r.Id);
                    if (pr.Product2__r.demoteer_Sap__c <> null && pr.Product2__r.Diedatvanink__c <> null) {
                        if (pr.Product_Register__r.Stelsedag__c <> null) {
                            if (pr.Product2__r.Diedatvanink__c <= pr.Product_Register__r.Stelsedag__c) {
                               if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '二类');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '二类';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }
                                else if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && (pr.Product_Register__r.MedPrdClass__c == '1')) {
                                        if (prlMap.get(pr.Product2__r.Id) == null) {
                                            prlMap.put(pr.Product2__r.Id, '一类');
                                        }else {
                                            String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '一类';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                        }
                                }else {
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '非监管');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '非监管';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }
                            }else if (pr.Product2__r.Diedatvanink__c > pr.Product_Register__r.Stelsedag__c) {
                                if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '1') {
                                    if (prl1Map.get(pr.Product2__r.Id) == null) {
                                        prl1Map.put(pr.Product2__r.Id, '一类');
                                    }else {
                                        String Lins = prl1Map.get(pr.Product2__r.Id);
                                        Lins += '一类';
                                        prl1Map.put(pr.Product2__r.Id, Lins);
                                    }
                                }else if (pr.Product2__r.demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && pr.Product2__r.demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
                                    if (prl1Map.get(pr.Product2__r.Id) == null) {
                                        prl1Map.put(pr.Product2__r.Id, '二类');
                                    }else {
                                        String Lins = prl1Map.get(pr.Product2__r.Id);
                                        Lins += '二类';
                                        prl1Map.put(pr.Product2__r.Id, Lins);
                                    }
                                }else {
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '非监管');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '非监管';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }
                            }
                        }else {
                            prl2Map.put(pr.Product2__r.Id, '空');
                        }
                    }
                }
            }
        }
        System.debug('prlMap='+prlMap);
        System.debug('prl1Map='+prl1Map);
        System.debug('prl2Map='+prl2Map);
        List<Product2> por2Lsit = new List<Product2>();
        //查出产品的id和等级类别的字段 
        por2Lsit = [select Id,Level_Category__c from Product2 where Id in : pr2Idlsit];
        por2Lsit = [select Id,Level_Category__c,demoteer_Sap__c,Diedatvanink__c from Product2 where Id in : pidList];
        if (por2Lsit.size() > 0) {
            for (Product2 pr2: por2Lsit) {
                if (prlMap.containsKey(pr2.Id)) {
                    pr2.Level_Category__c = prlMap.get(pr2.Id);
                    prt2Map.put(pr2.Id,pr2);
                }else {
                    pr2.Level_Category__c = null;
                    prt2Map.put(pr2.Id,pr2);
                }
                    if ((prlMap.get(pr2.Id).contains('二类') && prlMap.get(pr2.Id).contains('一类')) ||
                        (!prlMap.get(pr2.Id).contains('一类') && prlMap.get(pr2.Id).contains('二类'))){
                        pr2.Level_Category__c = '二类';
                        prt2Map.put(pr2.Id, pr2);
                    }else if (prlMap.get(pr2.Id).contains('一类') && !prlMap.get(pr2.Id).contains('二类')) {
                        pr2.Level_Category__c = '一类';
                        prt2Map.put(pr2.Id, pr2);
                    }else if (prlMap.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
                        pr2.Level_Category__c = '非监管';
                        prt2Map.put(pr2.Id, pr2);
                    }else {
                        pr2.Level_Category__c = null;
                        prt2Map.put(pr2.Id, pr2);
                    }
                }
                if (prl1Map.containsKey(pr2.Id)) {
                    if (prl1Map.get(pr2.Id).contains('一类')) {
                        pr2.Level_Category__c = '一类';
                        prt2Map.put(pr2.Id, pr2);
                    }else if (prl1Map.get(pr2.Id).contains('二类') && !prl1Map.get(pr2.Id).contains('一类')) {
                        pr2.Level_Category__c = '二类';
                        prt2Map.put(pr2.Id, pr2);
                    }else if (prl1Map.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
                        pr2.Level_Category__c = '非监管';
                        prt2Map.put(pr2.Id, pr2);
                    }else {
                        pr2.Level_Category__c = null;
                        prt2Map.put(pr2.Id, pr2);
                    }
                }
                if (pr2.demoteer_Sap__c == null || pr2.Diedatvanink__c == null) {
                    pr2.Level_Category__c = null;
                    prt2Map.put(pr2.Id, pr2);
                }
            }
        }
        
        if (prlMap.size() > 0) {
        System.debug('prt2Map='+prt2Map);
        if (prt2Map.size() > 0) {
           update prt2Map.values(); 
        } 
    }
force-app/main/default/classes/ProRegisterHandlerTest.cls
@@ -103,24 +103,37 @@
        PRC.MedPrdClass__c         = '1';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c = Date.today().addDays(22);
        PRC.ValidFrom__c = Date.today().addDays(-22);
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '2';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today().addDays(1);
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c = prd.ID;
        prl.Product_Register__c = PRC.ID;
        insert prl;
        PRC.ValidTo__c = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c = prd.ID;
        prl1.Product_Register__c = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe';
        update prd;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
    @isTest static void test_checkProduct2Level1() {
@@ -136,27 +149,40 @@
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '';
        PRC.MedPrdClass__c         = '2';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '1';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        PRC.ValidTo__c   = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe1';
        update prd;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
    @isTest static void test_checkProduct2Level2() {
@@ -166,33 +192,62 @@
        prd.Name                   = 'testSBG004';
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(-4);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '1';
        PRC.MedPrdClass__c         = '';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        insert PRC1;
        Product_Register__c PRC2 = new Product_Register__c();
        PRC2.Name                   = '国械注进20183222249';
        PRC2.MedPrdClass__c         = '';
        PRC2.RegisterNoClass_New__c = '';
        PRC2.RegisterNoClass_Old__c = '6822';
        PRC2.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC2.ClinicalProductCode__c = 'YYYY';
        PRC2.ValidTo__c             = Date.today().addDays(22);
        PRC2.ValidFrom__c           = Date.today().addDays(-22);
        PRC2.Stelsedag__c           = Date.today();
        insert PRC2;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        PRC.ValidTo__c   = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe2';
        update prd;
        Product_Register_Link__c prl2 = new Product_Register_Link__c();
        prl2.Product2__c              = prd.ID;
        prl2.Product_Register__c      = PRC2.ID;
        insert prl2;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
    @isTest static void test_checkProduct2Level3() {
@@ -203,7 +258,7 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
@@ -211,24 +266,37 @@
        PRC.MedPrdClass__c         = '1';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '2';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        PRC.ValidTo__c   = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe2';
        update prd;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
    @isTest static void test_checkProduct2Level4() {
@@ -239,7 +307,7 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
@@ -247,24 +315,37 @@
        PRC.MedPrdClass__c         = '2';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '1';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        PRC.ValidTo__c   = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe2';
        update prd;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
    @isTest static void test_checkProduct2Level5() {
@@ -275,7 +356,7 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
@@ -283,23 +364,52 @@
        PRC.MedPrdClass__c         = '';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        insert PRC1;
        Product_Register__c PRC2 = new Product_Register__c();
        PRC2.Name                   = '国械注进20183222249';
        PRC2.MedPrdClass__c         = '';
        PRC2.RegisterNoClass_New__c = '';
        PRC2.RegisterNoClass_Old__c = '6822';
        PRC2.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC2.ClinicalProductCode__c = 'YYYY';
        PRC2.ValidTo__c             = Date.today().addDays(22);
        PRC2.ValidFrom__c           = Date.today().addDays(-22);
        PRC2.Stelsedag__c           = Date.today();
        insert PRC2;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        PRC.ValidTo__c   = Date.today().addDays(21);
        PRC.ValidFrom__c = Date.today().addDays(-21);
        update PRC;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        prd.Name                   = 'hehe2';
        update prd;
        Product_Register_Link__c prl2 = new Product_Register_Link__c();
        prl2.Product2__c              = prd.ID;
        prl2.Product_Register__c      = PRC2.ID;
        insert prl2;
        PRC1.name = 'v国械注进20183222249';
        update PRC1;
    }
}
force-app/main/default/classes/Product2TriggerHandler.cls
@@ -46,26 +46,22 @@
       }
    }
    //PJ1新显微镜降类
    public static void checkProduct2Level(List<Product2> newList, Map<Id, Product2> newMap, List<Product2> oldList, Map<Id, Product2> oldMap) {
        //获取产品
        List<String> p2ids = new List<String>();
        for(Product2 p2 : newList){
            p2ids.add(p2.Id);
        for(Product2 p2 : newList)
        {
            p2ids.add(p2.id);
        }
        //查注册证的医疗器械分类,产品入库日期,生产日期,系统维护日。
        //存放查找的soql文
        List<Product_Register_Link__c> pro2List = new List<Product_Register_Link__c>();
        if(p2ids.size()>0){
            pro2List = [select Id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.Stelsedag__c,Product_Register__r.MedPrdClass__c
            from Product_Register_Link__c
            where Product2__r.Id in : p2ids];
        }
        //根据Id存放产品所属的所有注册证下的器械分类。
        pro2List = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.Stelsedag__c,Product_Register__r.MedPrdClass__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c
        from Product_Register_Link__c
        where Product2__r.Id in : p2ids];
        System.debug('pro2List='+pro2List);
        //存放产品的id和等级类别字段的值的集合
        Map<Id,List<String>> pro2Map = new Map<Id,List<String>>();
        //存放注册证上最前的维护日
        //存放注册证上最前的维护日,一类证优先,否则二类证。
        Map<Id,Date> prSteMap = new Map<Id,Date>();
        if (pro2List.size()>0) {
            for (Product_Register_Link__c prl: pro2List) {
@@ -75,67 +71,145 @@
                    pro2Map.put(prl.Product2__r.Id, new List<String>());
                    pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
                }
                if (prSteMap.containsKey(prl.Product2__r.Id)) {
                    if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                        prSteMap.remove(prl.Product2__r.Id);
                if (prl.Product_Register__r.MedPrdClass__c == '1') {
                    if (prSteMap.containsKey(prl.Product2__r.Id)) {
                        if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                            prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                        }
                    }else {
                        prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                    }
                }else {
                    prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                }
            }
            for (Product_Register_Link__c prl: pro2List) {
                if (prSteMap.get(prl.Product2__r.Id) == null) {
                    if (prSteMap.containsKey(prl.Product2__r.Id) && (prl.Product_Register__r.MedPrdClass__c == '2' || prl.Product_Register__r.MedPrdClass__c == '3')) {
                        if (prSteMap.containsKey(prl.Product2__r.Id) && prl.Product_Register__r.Stelsedag__c != null) {
                            if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                                prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                            }
                        }else {
                            prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                        }
                    }
                }
            }
        }
        //存放产品id和字符串值
        Map<Id,String> prlMap = new Map<Id,String>();
        Map<Id,String> prl1Map = new Map<Id,String>();
        Map<Id,String> prl2Map = new Map<Id,String>();
        System.debug('pro2Map='+pro2Map);
        System.debug('prSteMap='+prSteMap);
        //产品Id与等级类别
        Map<Id,String> prlMap = new Map<Id,String>();
        if (pro2Map.size()>0 && prSteMap.size()>0) {
        //通过上面的循环,把关系表过获取的数据读出来,传给map
        if (pro2Map.size()>0) {
            for (Product_Register_Link__c pr: pro2List) {
                //大在后小在前
                if (pro2Map.containsKey(pr.Product2__r.Id) && prSteMap.containsKey(pr.Product2__r.Id)) {
                    //生产日小于维护日,入库日小于维护日
                    if (pr.Product2__r.demoteer_Sap__c <= prSteMap.get(pr.Product2__r.Id) &&
                        pr.Product2__r.Diedatvanink__c <= prSteMap.get(pr.Product2__r.Id)) {
                        if (pro2Map.get(pr.Product2__r.Id).contains('1') ||
                            pro2Map.get(pr.Product2__r.Id).contains('2') ||
                            pro2Map.get(pr.Product2__r.Id).contains('3')) {
                            prlMap.put(pr.Product2__r.Id, '二类');
                        }else {
                            prlMap.put(pr.Product2__r.Id, '非监管');
                        }
                    }else {
                        //入库日大于维护日
                        if (pr.Product2__r.Diedatvanink__c > prSteMap.get(pr.Product2__r.Id)) {
                            //生产日大于维护日
                            if (pr.Product2__r.demoteer_Sap__c > prSteMap.get(pr.Product2__r.Id)) {
                                prlMap.put(pr.Product2__r.Id, '一类');
                            }else if (pr.Product2__r.demoteer_Sap__c < prSteMap.get(pr.Product2__r.Id)) {
                                //生产日小于维护日
                                if (pro2Map.get(pr.Product2__r.Id).contains('1')) {
                                    prlMap.put(pr.Product2__r.Id, '一类');
                                }else if (!pro2Map.get(pr.Product2__r.Id).contains('1') &&
                                          (pro2Map.get(pr.Product2__r.Id).contains('2') ||
                                           pro2Map.get(pr.Product2__r.Id).contains('3'))) {
                                    prlMap.put(pr.Product2__r.Id, '二类');
                    if (newMap.get(pr.Product2__r.Id).demoteer_Sap__c <> null && pr.Product2__r.Diedatvanink__c <> null) {
                        if (pr.Product_Register__r.Stelsedag__c <> null) {
                            if (pr.Product2__r.Diedatvanink__c <= pr.Product_Register__r.Stelsedag__c) {
                               if (newMap.get(pr.Product2__r.Id).demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && newMap.get(pr.Product2__r.Id).demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
                                    System.debug('2');
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '二类');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '二类';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }else if (newMap.get(pr.Product2__r.Id).demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && newMap.get(pr.Product2__r.Id).demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && (pr.Product_Register__r.MedPrdClass__c == '1')) {
                                    System.debug('1');
                                        if (prlMap.get(pr.Product2__r.Id) == null) {
                                            prlMap.put(pr.Product2__r.Id, '一类');
                                        }else {
                                            String Lins = prlMap.get(pr.Product2__r.Id);
                                            Lins += '一类';
                                            prlMap.put(pr.Product2__r.Id, Lins);
                                        }
                                }else {
                                    prlMap.put(pr.Product2__r.Id, '非监管');
                                    System.debug('非');
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '非监管');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '非监管';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }
                            }else if (pr.Product2__r.Diedatvanink__c > pr.Product_Register__r.Stelsedag__c) {
                                if (newMap.get(pr.Product2__r.Id).demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && newMap.get(pr.Product2__r.Id).demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '1') {
                                    if (prl1Map.get(pr.Product2__r.Id) == null) {
                                        prl1Map.put(pr.Product2__r.Id, '一类');
                                    }else {
                                        String Lins = prl1Map.get(pr.Product2__r.Id);
                                        Lins += '一类';
                                        prl1Map.put(pr.Product2__r.Id, Lins);
                                    }
                                }else if (newMap.get(pr.Product2__r.Id).demoteer_Sap__c <= pr.Product_Register__r.ValidTo__c && newMap.get(pr.Product2__r.Id).demoteer_Sap__c >= pr.Product_Register__r.ValidFrom__c
                                    && pr.Product_Register__r.MedPrdClass__c == '2' || pr.Product_Register__r.MedPrdClass__c == '3') {
                                    if (prl1Map.get(pr.Product2__r.Id) == null) {
                                        prl1Map.put(pr.Product2__r.Id, '二类');
                                    }else {
                                        String Lins = prl1Map.get(pr.Product2__r.Id);
                                        Lins += '二类';
                                        prl1Map.put(pr.Product2__r.Id, Lins);
                                    }
                                }else {
                                    if (prlMap.get(pr.Product2__r.Id) == null) {
                                        prlMap.put(pr.Product2__r.Id, '非监管');
                                    }else {
                                        String Lins = prlMap.get(pr.Product2__r.Id);
                                        Lins += '非监管';
                                        prlMap.put(pr.Product2__r.Id, Lins);
                                    }
                                }
                            }
                        }else {
                            prl2Map.put(pr.Product2__r.Id, '空');
                        }
                    }
                }
            }
        }
        System.debug('prlMap='+prlMap);
                System.debug('prlMap='+prlMap);
                System.debug('prl1Map='+prl1Map);
        //给产品上的等级类别字段赋值
        for (Product2 pr2: newList) {
            if (prlMap.containsKey(pr2.Id)) {
                pr2.Level_Category__c = prlMap.get(pr2.Id);
            }else {
                if ((prlMap.get(pr2.Id).contains('二类') && prlMap.get(pr2.Id).contains('一类')) ||
                    (!prlMap.get(pr2.Id).contains('一类') && prlMap.get(pr2.Id).contains('二类'))){
                    pr2.Level_Category__c = '二类';
                }else if (prlMap.get(pr2.Id).contains('一类') && !prlMap.get(pr2.Id).contains('二类')) {
                    pr2.Level_Category__c = '一类';
                }else if (prlMap.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
                    pr2.Level_Category__c = '非监管';
                }else {
                    pr2.Level_Category__c = null;
                }
            }
            if (prl1Map.containsKey(pr2.Id)) {
                if (prl1Map.get(pr2.Id).contains('一类')) {
                    pr2.Level_Category__c = '一类';
                }else if (prl1Map.get(pr2.Id).contains('二类') && !prl1Map.get(pr2.Id).contains('一类')) {
                    pr2.Level_Category__c = '二类';
                }else if (prl1Map.get(pr2.Id).contains('非监管') && !prl2Map.containsKey(pr2.Id)) {
                    pr2.Level_Category__c = '非监管';
                }else {
                    pr2.Level_Category__c = null;
                }
            }
            if (pr2.demoteer_Sap__c == null || pr2.Diedatvanink__c == null) {
                pr2.Level_Category__c = null;
            }
        }
            System.debug('pr2.Level_Category__c='+pr2.Level_Category__c);
        }
    }
}
force-app/main/default/classes/Product2TriggerHandlerTest.cls
@@ -42,12 +42,29 @@
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        insert PRC;
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '2';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today().addDays(1);
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c = prd.ID;
        prl.Product_Register__c = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c = prd.ID;
        prl1.Product_Register__c = PRC1.ID;
        insert prl1;
    }
    @isTest static void test_checkProduct2Level1() {
@@ -70,13 +87,30 @@
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '1';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
    }
    @isTest static void test_checkProduct2Level2() {
@@ -95,17 +129,51 @@
        PRC.MedPrdClass__c         = '';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        insert PRC1;
        Product_Register__c PRC2 = new Product_Register__c();
        PRC2.Name                   = '国械注进20183222249';
        PRC2.MedPrdClass__c         = '';
        PRC2.RegisterNoClass_New__c = '';
        PRC2.RegisterNoClass_Old__c = '6822';
        PRC2.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC2.ClinicalProductCode__c = 'YYYY';
        PRC2.ValidTo__c             = Date.today().addDays(22);
        PRC2.ValidFrom__c           = Date.today().addDays(-22);
        PRC2.Stelsedag__c           = Date.today();
        insert PRC2;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        Product_Register_Link__c prl2 = new Product_Register_Link__c();
        prl2.Product2__c              = prd.ID;
        prl2.Product_Register__c      = PRC2.ID;
        insert prl2;
    }
    @isTest static void test_checkProduct2Level3() {
@@ -115,26 +183,45 @@
        prd.Name                   = 'testSBG004';
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '2';
        PRC.MedPrdClass__c         = '1';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '2';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
    }
    @isTest static void test_checkProduct2Level4() {
@@ -145,25 +232,45 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '1';
        PRC.MedPrdClass__c         = '2';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '1';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
    }
    @isTest static void test_checkProduct2Level5() {
@@ -174,25 +281,58 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '2';
        PRC.MedPrdClass__c         = '';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        insert PRC1;
        Product_Register__c PRC2 = new Product_Register__c();
        PRC2.Name                   = '国械注进20183222249';
        PRC2.MedPrdClass__c         = '';
        PRC2.RegisterNoClass_New__c = '';
        PRC2.RegisterNoClass_Old__c = '6822';
        PRC2.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC2.ClinicalProductCode__c = 'YYYY';
        PRC2.ValidTo__c             = Date.today().addDays(22);
        PRC2.ValidFrom__c           = Date.today().addDays(-22);
        PRC2.Stelsedag__c           = Date.today();
        insert PRC2;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
        Product_Register_Link__c prl2 = new Product_Register_Link__c();
        prl2.Product2__c              = prd.ID;
        prl2.Product_Register__c      = PRC2.ID;
        insert prl2;
    }
    @isTest static void test_checkProduct2Level6() {
@@ -203,25 +343,44 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '3';
        PRC.MedPrdClass__c         = '1';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '1';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
    }
    @isTest static void test_checkProduct2Level7() {
@@ -232,25 +391,44 @@
        prd.IsActive               = true;
        prd.Level_Category__c      = '';
        prd.demoteer_Sap__c        = Date.today().addDays(-3);
        prd.Diedatvanink__c        = Date.today().addDays(4);
        prd.Diedatvanink__c        = Date.today().addDays(5);
        insert prd;
        Product_Register__c PRC = new Product_Register__c();
        PRC.Name                   = '国械注进20183222249';
        PRC.MedPrdClass__c         = '';
        PRC.MedPrdClass__c         = '2';
        PRC.RegisterNoClass_New__c = '';
        PRC.RegisterNoClass_Old__c = '6822';
        PRC.PrdCompanyAddr__c      = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC.ClinicalProductCode__c = 'YYYY';
        PRC.ValidTo__c             = Date.today().addDays(22);
        PRC.ValidFrom__c           = Date.today().addDays(-22);
        PRC.Stelsedag__c           = Date.today();
        PRC.Stelsedag__c           = Date.today().addDays(1);
        insert PRC;
        Product_Register__c PRC1 = new Product_Register__c();
        PRC1.Name                   = '国械注进20183222249';
        PRC1.MedPrdClass__c         = '2';
        PRC1.RegisterNoClass_New__c = '';
        PRC1.RegisterNoClass_Old__c = '6822';
        PRC1.PrdCompanyAddr__c = '名称:奥林巴斯医疗株式会社;住所:日本国东京都涩谷区幡之谷二丁目43番地2号;联系方式:0081-426-42-2667';
        PRC1.ClinicalProductCode__c = 'YYYY';
        PRC1.ValidTo__c             = Date.today().addDays(22);
        PRC1.ValidFrom__c           = Date.today().addDays(-22);
        PRC1.Stelsedag__c           = Date.today();
        insert PRC1;
        Product_Register_Link__c prl = new Product_Register_Link__c();
        prl.Product2__c              = prd.ID;
        prl.Product_Register__c      = PRC.ID;
        insert prl;
    }
        Product_Register_Link__c prl1 = new Product_Register_Link__c();
        prl1.Product2__c              = prd.ID;
        prl1.Product_Register__c      = PRC1.ID;
        insert prl1;
    }
}
force-app/main/default/classes/RadiationUtil.cls
@@ -1,5 +1,7 @@
global class RadiationUtil {
    public static Boolean oldOrder = false;
    public static Boolean EscapeOrderTriggerHandler = true;
    /**
     * [updateRadiationTypeQuantity description]更新代理商证照明细,更新奥林巴斯代理商的证照明细
@@ -10,7 +12,8 @@
     */
    public static void updateRadiationTypeQuantity (String Id, String orderFounder, String dealerId, Boolean toloseFlag, String operationType, String operator) {
        String olympusAccountId = System.label.Olympus_Id;
        String olympusAccountId = oldOrder ? System.label.Olympus_Id : System.label.newOlympus_Id;
        String orderId = Id;
        //获取合同的辐射类型和数量
force-app/main/default/classes/SBG001TriggerHandler.cls
@@ -65,6 +65,7 @@
                                || acc.RecordTypeId == '01228000000TdFG'    // NDT
                                || acc.RecordTypeId == '01228000000TdFL'    // ANI
                                || acc.RecordTypeId == '01228000000TdF1'    // BS
                                || acc.RecordTypeId == '0120T0000003Cxt'    // IE直销
                            )
                            && acc.stautesD__c == 'Pass') || acc.RecordTypeId == SBG001TriggerHandler.Account_Agency_Id //办事处
                    ) {
@@ -85,6 +86,7 @@
                                || acc.RecordTypeId == '01228000000TdFG'    // NDT
                                || acc.RecordTypeId == '01228000000TdFL'    // ANI
                                || acc.RecordTypeId == '01228000000TdF1'    // BS 
                                || acc.RecordTypeId == '0120T0000003Cxt'    // IE直销
                            )
                            && acc.stautesD__c == 'Pass'
                            && (acc.ManagementCode_Ext__c       != old.ManagementCode_Ext__c
@@ -159,6 +161,7 @@
                                || con.AccountRecordTypeId__c == '01228000000TdFB'      // RVI
                                || con.AccountRecordTypeId__c == '01228000000TdFG'      // NDT
                                || con.AccountRecordTypeId__c == '01228000000TdF1'      // BS
                                || con.AccountRecordTypeId__c == '0120T0000003Cxt'    // IE直销
                            )
                            && con.StatusD__c == 'Pass') || con.AccountRecordTypeId__c == SBG001TriggerHandler.Account_Agency_Id// 办事处
                    ) {
@@ -184,6 +187,7 @@
                                || con.AccountRecordTypeId__c == '01228000000TdFG'      // NDT
                                || con.AccountRecordTypeId__c == '01228000000TdF1'      // BS
                                || con.AccountRecordTypeId__c == SBG001TriggerHandler.Account_Agency_Id // 办事处
                                || con.AccountRecordTypeId__c == '0120T0000003Cxt'    // IE直销
                            )
                            && con.StatusD__c == 'Pass'
                            && (con.ManagementCode_Ext__c   != old.ManagementCode_Ext__c
@@ -324,7 +328,7 @@
                SSBDCustomerContact.CustomerDescription = acc.FacilityName__c;
                SSBDCustomerContact.CustomerDescription2Description3
                                            = (String.isBlank(acc.DivisionName__c) ? '' : (acc.DivisionName__c=='无' ? '' : acc.DivisionName__c));
                if (acc.RecordTypeId == '01228000000TdF6' || acc.RecordTypeId == '01228000000TdFB' ||  acc.RecordTypeId == '01228000000TdFG' ||  acc.RecordTypeId == '01228000000TdFL') {      // IE or RVI
                if (acc.RecordTypeId == '01228000000TdF6' || acc.RecordTypeId == '01228000000TdFB' ||  acc.RecordTypeId == '01228000000TdFG' ||  acc.RecordTypeId == '01228000000TdFL' || acc.RecordTypeId == '0120T0000003Cxt') {      // IE or RVI
                    SSBDCustomerContact.CustomerDescription2Description3 += ',' + (String.isBlank(acc.EnglishName__c) ? '' : acc.EnglishName__c);
                } else {
                    SSBDCustomerContact.CustomerDescription2Description3 += ',' + (String.isBlank(acc.DepartmentName__c) ? '' : acc.Departmentname__c);
@@ -532,7 +536,7 @@
                SSBDCustomerContact.CustomerDescription = con.Account.FacilityName__c;
                SSBDCustomerContact.CustomerDescription2Description3
                                        = (String.isBlank(con.Account.DivisionName__c) ? '' : (con.Account.DivisionName__c=='无' ? '' : con.Account.DivisionName__c));
                if (con.AccountRecordTypeId__c == '01228000000TdF6' || con.AccountRecordTypeId__c == '01228000000TdFB' || con.AccountRecordTypeId__c == '01228000000TdFG' || con.AccountRecordTypeId__c == '01228000000TdFL') {      // IE or RVI
                if (con.AccountRecordTypeId__c == '01228000000TdF6' || con.AccountRecordTypeId__c == '01228000000TdFB' || con.AccountRecordTypeId__c == '01228000000TdFG' || con.AccountRecordTypeId__c == '01228000000TdFL' || con.AccountRecordTypeId__c == '0120T0000003Cxt') {      // IE or RVI
                    SSBDCustomerContact.CustomerDescription2Description3 += ',' + (String.isBlank(con.Account.EnglishName__c) ? '' : con.Account.EnglishName__c);
                } else {
                    SSBDCustomerContact.CustomerDescription2Description3 += ',' + (String.isBlank(con.Account.DepartmentName__c) ? '' : con.Account.Departmentname__c);
force-app/main/default/classes/StaticParameter.cls
@@ -240,8 +240,9 @@
        '0010K00002VHSaB' => '00G0K000004AW2o',
        '0010K00002UxxT1' => '00G0K000004AW38',
        '0010K00002W6zlh' => '00G0K000004AYjU',//成都盛锴科技有限公司(NDT)
        '0010K00002ZVOwt' => '00G0K000004c0oG'//天津宏基伟业科技发展有限公司(NDT)
        '0010K00002ZVOwt' => '00G0K000004c0oG',//天津宏基伟业科技发展有限公司(NDT)
        '0010K00002b6v6W' => '00G0K000004c4xH',//成都主导科技有限责任公司(NDT)
        '0010T00000LO3ph' => '00G0T0000029vfq'//北京深景量光科技有限公司(BS)
    };
    public static List<String> specialDealerList = new List<String>{
force-app/main/default/pages/CopyOpportunity.page
New file
@@ -0,0 +1,50 @@
<apex:page Controller="CopyOpportunityController" sidebar="false" showHeader="false" action="{!init}" id="Page">
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
    <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
    <apex:includeScript value="{!URLFOR($Resource.apex20)}"/>
    <script type="text/javascript">
        function saveJs() {
            blockme();
            saveBtn();
        }
    </script>
    <apex:form id="mainForm">
        <apex:actionFunction name="saveBtn" action="{!Save}" rerender="allBlock" onComplete="unblockUI();"></apex:actionFunction>
        <apex:pageBlock id="allBlock">
            <apex:pageBlockButtons location="top">
                <apex:commandButton onclick="saveJs();" value="分割保存" rerender="dummy" style="width: 70px;"/>
                <apex:commandButton action="{!backBtn}" value="返回" rerender="dummy" style="width: 70px;"/>
            </apex:pageBlockButtons>
            <apex:pageBlockSection title="代理商和合作伙伴代理商信息" columns="2">
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="审批人" for="opp_DealerSelectOwner"/>
                    <apex:inputField value="{!opportunity.DealerSelectOwner__c}" id="opp_DealerSelectOwner" required="true"/>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="合作区域负责人" for="HeadOfCooperationArea"/>
                    <apex:inputField value="{!opportunity.HeadOfCooperationArea__c}" id="HeadOfCooperationArea" required="true"/>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="代理商" for="Dealer"/>
                    <apex:inputField value="{!opportunity.Dealer__c}" id="Dealer" required="true"/>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="合作区域代理商" for="CrossCooperativeDealer"/>
                    <apex:inputField value="{!opportunity.CrossCooperativeDealer__c}" id="CrossCooperativeDealer" required="true"/>
                </apex:pageBlockSectionItem>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>
force-app/main/default/pages/CopyOpportunity.page-meta.xml
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexPage xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>41.0</apiVersion>
    <availableInTouch>false</availableInTouch>
    <confirmationTokenRequired>false</confirmationTokenRequired>
    <label>CopyOpportunity</label>
</ApexPage>
force-app/main/default/pages/NEWCreateSWOQuote.page
@@ -295,7 +295,7 @@
                                <apex:inputText id="DisplayPROBABILITY" value="{!QuotesPage.PROBABILITY__c}" style="display: none;"/>
                            </td>
                            <td/>
                            <td align="left" ><apex:inputField id="PRODUCT_SEGMENT" value="{!QuotesPage.PRODUCT_SEGMENT__c}" style="width: 95%"/></td>
                            <td align="left" ><apex:inputField id="PRODUCT_SEGMENT" value="{!QuotesPage.PRODUCT_SEGMENT__c}"  onchange="QuotesTypeChangeFunction();" style="width: 95%"/></td>
                        </tr>
                        <tr>
                            <td align="left" >{!$ObjectType.Quotes__c.fields.LOCATION__c.label}<span class="textRed">*</span></td>
@@ -566,19 +566,17 @@
                        </tr>
                        
                                <tr>
                                    <apex:outputPanel layout="none" rendered="{!IF(aftORbef == false && aftORbef1 == false, true, false)}">
                                        <td colspan="9">
                                        <apex:outputText id="message01" value="{!Messages01}" style="resize:vertical;width: 100%"/>
                                        </td>
                                    </apex:outputPanel>
                                    <td colspan="9">
                                    <apex:outputText id="message01" value="{!Messages01}" style="resize:vertical;width: 100%"/>
                                    </td>
                                </tr>
                                <tr>
                                <!-- <tr>
                                    <apex:outputPanel layout="none" rendered="{!IF(aftORbef == true || aftORbef1 == true, true, false)}">
                                        <td colspan="9">
                                        <apex:outputText value="-维修质保只涵盖于本次维修的配件,维修质保期为仪器发货后三个月加八天。" style="resize:vertical;width: 100%"/>
                                        </td>
                                    </apex:outputPanel> 
                                </tr>
                                </tr> -->
                                <tr>
                                    <td colspan="9">
                                     <apex:outputText id="message02" value="{!Messages02}" style="resize:vertical;width: 100%"/>
force-app/main/default/pages/OrderContract2.page
@@ -82,7 +82,7 @@
                        </apex:outputpanel>
                        
                        <apex:outputpanel layout="none" rendered="{!IF(productSegment == 'NDT'|| productSegment == 'ANI', true, false)}">
                            <option value="bj">北京</option>
                            <option value="sh">上海</option>
                        </apex:outputpanel>
                    </select>
                </td>
force-app/main/default/pages/OrderPDF.page
@@ -954,7 +954,7 @@
                </tr>
                <tr>
                    <td style="vertical-align: top;">
                        THE SELLER:&nbsp;&nbsp;Evident Corporation
                        THE SELLER:&nbsp;&nbsp;Evident (Shanghai) Co., Ltd
                    </td>
                    <td style="vertical-align: top;">
                        THE BUYER:&nbsp;&nbsp;{!specialDeliveryAddress.EnglishName__c}
force-app/main/default/pages/OrderPdf2.page
@@ -410,7 +410,7 @@
            <td style="text-align: center;">&nbsp;</td>
        </tr>
        <tr>
            <td style="text-align: right;">OCSM折扣后合计 (OCSM->代理商):</td>
            <td style="text-align: right;">ECN折扣后合计 (ECN->代理商):</td>
            <td style="text-align: right;">{!header.order_totalprice}</td>
            <td style="text-align: center;">&nbsp;</td>
        </tr>
@@ -487,30 +487,30 @@
            <col width="10%"/>
        </colgroup>
        <tr>
            <td style="text-align: left;">单位名称:奥林巴斯(北京)销售服务有限公司上海分公司</td>
            <td style="text-align: left;">单位名称:仪景通光学科技(上海)有限公司</td>
            <td style="text-align: right;">日期:</td>
            <td style="text-align: left;">{!strToday}</td>
            <td style="text-align: left;">&nbsp;</td>
        </tr>
        <tr>
            <td style="text-align: left;">开 户 行:招商银行上海分行淮海支行</td>
            <td style="text-align: left;">开 户 行:招商银行股份有限公司上海外高桥支行</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
        </tr>
        <tr>
        <!-- <tr>
            <td style="text-align: left;">银行账号:121913911110902003(仅限网银客户操作使用)</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
        </tr>
        </tr> -->
        <tr>
            <td style="text-align: left;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;121913911110902  </td>
            <td style="text-align: left;">银行账号:121944940610202  </td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
        </tr>
        <tr>
        <!-- <tr>
            <td style="text-align: left;">(仅限纸质票据客户操作使用,纸质票据包括支票、贷记凭证、</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: center; border-top: thin solid black;">买方盖章</td>
@@ -521,7 +521,7 @@
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
        </tr>
        </tr> -->
    </table>
</body>
</apex:page>
force-app/main/default/pages/OrderPdf3.page
@@ -53,13 +53,7 @@
            <td style="text-align: right;">地址:</td>
            <td style="text-align: left;">{!header.buyer_address}</td>
            <td style="text-align: right;">地址:</td>
            <td style="text-align: left;">上海市徐汇区淮海中路1010号1001-1006、</td>
        </tr>
        <tr>
            <td style="text-align: right;">&nbsp;</td>
            <td style="text-align: left;">&nbsp;</td>
            <td style="text-align: right;">&nbsp;</td>
            <td style="text-align: left;">1101、1102、1104-1106、1601室</td>
            <td style="text-align: left;">中国(上海)自由贸易试验区日樱北路199-9号102及302部位</td>
        </tr>
        
        <tr>
@@ -260,7 +254,7 @@
            <td style="text-align: center;">&nbsp;</td>
        </tr>
        <tr>
            <td style="text-align: right;">OCN折扣后合计 (OCN->代理商):</td>
            <td style="text-align: right;">ECN折扣后合计 (ECN->代理商):</td>
            <td style="text-align: right;">{!header.order_totalprice}</td>
            <td style="text-align: center;">&nbsp;</td>
        </tr>
@@ -302,19 +296,19 @@
     <table border="0" width="100%">
        
        <tr>
            <td style="text-align: left;">公司名称:奥林巴斯(北京)销售服务有限公司</td>
            <td style="text-align: left;">单位名称:仪景通光学科技(上海)有限公司</td>
            
        </tr>
        <tr>
        <!-- <tr>
            <td style="text-align: left;">整机账户(NDT/ANI 内贸业务)</td>
            
        </tr>
        </tr> -->
        <tr>
            <td style="text-align: left;">银行账号:610809142 </td>
            <td style="text-align: left;">开 户 行:招商银行股份有限公司上海外高桥支行 </td>
            
        </tr>
        <tr>
            <td style="text-align: left;">开户行:中国民生银行北京三元支行 </td>
            <td style="text-align: left;">银行账号:121944940610202 </td>
            
        </tr>
    </table>
force-app/main/default/staticresources/SWOJS.js
@@ -1,4 +1,4 @@
function openPDF(){
function openPDF(){
            var baseUrl = j$(escapeVfId("baseUrl")).value();
            var Id = j$(escapeVfId("Id")).value();
            if (Id == '') {
@@ -127,6 +127,7 @@
        function QuotesTypeChangeFunction(){
            var quotesType = j$(escapeVfId('Page:allForm:allBlock:Quotes:unEditable:QuotesType')).value();
            var quotessegment = j$(escapeVfId('Page:allForm:allBlock:Quotes:unEditable:PRODUCT_SEGMENT')).value();
            var message01 = '';
            var message02 = '';
            var message03 = '';
@@ -138,7 +139,7 @@
                // var message01 = 'Test';
                // var message01 = '在维修的过程中,若发现新故障,我们将另外给您报价。';
               
                var message01 = '-维修质保期为仪器发货后三个月加八天。';
                var message01 = '-维修质保只涵盖于本次维修的配件,维修质保期为仪器发货后三个月加八天。';
                var message02 = '-如您确认此报价并同意维修,敬请您在90天之内完成付款。否则您的仪器被将视为放弃维修,我们会以运费到付的方式把仪器给您寄回,并向您收取1000元的检测费用。';
                var message03 = '-用户在此确认同意此次维修报价:';
                var message04 = '客户签字或盖章:';
@@ -147,7 +148,11 @@
                var message07 = '';
                
            } else if ('零件报价单' == quotesType) {
                var message01 = '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。';
                if ('NDT' == quotessegment) {
                    var message01 = '-仪景通光学科技(上海)有限公司北京分公司售出的维修配件为奥林巴斯原厂配件,仪景通公司对售出的维修配件不提供保修服务,也不提供退、换货服务,敬请您谨慎购买。';
                }else {
                    var message01 = '-奥林巴斯服务部售出的维修配件确保为质量符合奥林巴斯参数指标的新品,奥林巴斯对售出的维修配件不提供保修服务,同时也不提供退、换货服务。敬请您谨慎购买。';
                }
                var message02 = '-用户在此确认此次报价,决定购买:';
                var message03 = '客户签字或盖章:';
                var message04 = '日期:';
force-app/main/default/triggers/OrderTrigger.trigger
@@ -2,10 +2,14 @@
    
    if (Trigger.isBefore && Trigger.isInsert) {
        System.debug('@@@@@@@@@@@@@@!!!!!!!!!!!!!!!');
        OrderTriggerHandler.setIsNew(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        OrderTriggerHandler.setPriceBook(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        if(OrderDivisionController.OrderDivision == false){
            OrderTriggerHandler.setPriceBook(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
            OrderTriggerHandler.check(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        }
        OrderTriggerHandler.setTransferValue(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        OrderTriggerHandler.check(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        OrderTriggerHandler.setIsNew(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    }
    if (Trigger.isAfter && Trigger.isInsert) {
        OrderTriggerHandler.addItem(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);