buli
2023-07-11 80a3f59e2d3df07805bc67e329300b8de90a5b3a
force-app/main/default/classes/Product2Handler.cls
@@ -26,19 +26,18 @@
        // FlgStopManufacure(this.newList, this.oldMap);
        //SFDC停止预警  lt  20211015 add end
        FlgStopManufacure();
    }
    //SFDC停止预警  lt  20210922 add start
    protected override void afterUpdate(){
    protected override void afterUpdate() {
        Calculate_AverageMonthSales(this.newList, this.oldMap);
        AssignmentUltrasonic(this.newList, this.oldMap);  //20230506 lt DB202304618804  包含超声 add
        AssignmentUltrasonic(this.newList, this.oldMap); //20230506 lt DB202304618804  包含超声 add
    }
    //SFDC停止预警  lt  20210922 add end
    // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start
    private void SetCompetitorCode() {
        Boolean SelctFlg = False;
        Boolean SelctFlg = false;
        list<AggregateResult> proList;
        //带量采购修改 start fy
        list<AggregateResult> proListsc;
@@ -55,48 +54,60 @@
        for (Product2 nObj : newList) {
            //带量采购修改 start fy
            String RecordTypeString = '';
            if(nObj.RecordTypeId!=null){
                RecordTypeString=String.valueof(nObj.RecordTypeId).substring(0,15);
            if (nObj.RecordTypeId != null) {
                RecordTypeString = String.valueof(nObj.RecordTypeId).substring(0, 15);
            }
            // nObj.Competitor_product_dummy__c=System.Label.ProductRecordTypeID.contains(RecordTypeString);
            // if (nObj.Competitor_product_dummy__c) {
            if (System.Label.ProductRecordTypeID.contains(RecordTypeString)) {
                SelctFlg = True;
                SelctFlg = true;
            }
            //带量采购修改 end fy
        }
        if (SelctFlg) {
            proList = [Select Max(ProductCode) PC From Product2 Where ProductCode Like 'SD%' and ProductCode!='SD999999'];
            proList = [
                SELECT Max(ProductCode) PC
                FROM Product2
                WHERE ProductCode LIKE 'SD%' AND ProductCode != 'SD999999'
            ];
            if (proList != null && proList.size() > 0) {
                strPC = String.valueof(proList[0].get('PC'));
            }
            //带量采购 start fy
            proListsc = [Select Max(ProductCode) PC From Product2 Where ProductCode Like 'SC%'];
            if (proListsc != null && proListsc.size() > 0) {
                strPCsc = String.valueof(proListsc[0].get('PC'));
            }
            // proListsc = [Select Max(ProductCode) PC From Product2 Where ProductCode Like 'SC%'];
            // if (proListsc != null && proListsc.size() > 0) {
            //     strPCsc = String.valueof(proListsc[0].get('PC'));
            // }
            List<Product2> lastPro = [
                SELECT Id, ProductCode
                FROM Product2
                WHERE ProductCode LIKE 'SC%'
                ORDER BY ProductCode DESC
                LIMIT 1
            ];
            strPCsc = lastPro != null && lastPro.size() > 0 ? lastPro[0].ProductCode : '';
            //带量采购 end fy
        }
        for (Product2 nObj : newList) {
            //带量采购 start fy
            String RecordTypeString = '';
            if(nObj.RecordTypeId!=null){
                RecordTypeString=String.valueof(nObj.RecordTypeId).substring(0,15);
            if (nObj.RecordTypeId != null) {
                RecordTypeString = String.valueof(nObj.RecordTypeId).substring(0, 15);
            }
            // if (nObj.Competitor_product_dummy__c && strPC.length() == 8
            // if (System.Label.ProductRecordTypeID.contains(RecordTypeString) && strPC.length() == 8
            if (System.Label.ProductRecordTypeID.contains(RecordTypeString)) {
            //带量采购 end fy
                    // && proList != null && proList.size() > 0 ) {
                //带量采购 end fy
                // && proList != null && proList.size() > 0 ) {
                // Integer num = Integer.valueOf(strPC.SubString(2,strPC.length())) + i;
                Integer num = String.isNotBlank(strPC) ? Integer.valueOf(strPC.SubString(2,strPC.length())) + i : i;
                Integer num = String.isNotBlank(strPC) ? Integer.valueOf(strPC.SubString(2, strPC.length())) + i : i;
                //带量采购 start fy
                Integer numsc = String.isNotBlank(strPCsc) ? Integer.valueOf(strPCsc.SubString(2,strPCsc.length())) + i : i;
                Integer numsc = String.isNotBlank(strPCsc) ? Integer.valueOf(strPCsc.SubString(2, strPCsc.length())) + i : i;
                // if(RecordTypeString=='0129D000001NacC'){
                if(RecordTypes != null && RecordTypes.size() > 1 && RecordTypeString == RecordTypes[1]){
                    nObj.ProductCode  = 'SC' + String.valueOf(numsc).leftpad(8,'0');
                }else{
                    nObj.ProductCode  = 'SD' + String.valueOf(num).leftpad(6,'0');
                if (RecordTypes != null && RecordTypes.size() > 1 && RecordTypeString == RecordTypes[1]) {
                    nObj.ProductCode = 'SC' + String.valueOf(numsc).leftpad(8, '0');
                } else {
                    nObj.ProductCode = 'SD' + String.valueOf(num).leftpad(6, '0');
                }
                //带量采购 end fy
                // nObj.ProductCode  = 'SD' + String.valueOf(num).leftpad(6,'0');
@@ -106,36 +117,59 @@
    }
    // SWAG-BHE9GK LHJ 竞争对手产品自动编码 End
    //WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 Start
    private void AutomaticallyBringData() {
        List<String> noNewList = new List<String>();
        for(Product2 prd : newList){
        for (Product2 prd : newList) {
            if (prd.Asset_Model_No__c != null) {
                noNewList.add(prd.Asset_Model_No__c);
            }
        }
        if (!noNewList.isEmpty()) {
            List<Product2> prdList = [select Id, Name,Asset_Model_No__c,MDM_Name__c,
                                    Maintenance_Price_Year__c,Extend_new_product_gurantee_MD__c,
                                    Extend_Gurantee_Start_MD__c,Extend_Gurantee_End_MD__c,
                                    Entend_gurantee_period_MD__c,Extend_new_product_gurantee__c,
                                    Extend_Gurantee_Start__c,Extend_Gurantee_End__c,Entend_gurantee_period__c,
                                    CanNotCancelledGurantee__c,Service_Category1__c,
                                    Service_Category2__c,Service_Category3__c,
                                    Service_Category4__c,Service_Category5__c,
                                    Service_Category6__c,Service_Category7__c,
                                    Can_Repair__c,RepairListPriceLevelA__c,
                                    RepairListPriceLevelB__c,RepairListPriceLevelC__c,
                                    PartSupplyFinishDate__c,EndSaleDate__c,ProductClass__c,ProductCategory__c,
                                    Period_Filter_Classify1__c,Period_Filter_Classify2__c,Period_Filter_Classify3__c,
                                    Intra_Trade_Service_RMB_Date1__c,Intra_Trade_Service_RMB_Date2__c,
                                    Intra_Trade_Service_RMB_EndDate1__c,Intra_Trade_Service_RMB_EndDate2__c,
                                    Intra_Trade_Service_RMB_1__c,Intra_Trade_Service_RMB_2__c
                                    from Product2
                                    where Asset_Model_No__c in :noNewList
                                    order by CreatedDate desc];
            List<Product2> prdList = [
                SELECT
                    Id,
                    Name,
                    Asset_Model_No__c,
                    MDM_Name__c,
                    Maintenance_Price_Year__c,
                    Extend_new_product_gurantee_MD__c,
                    Extend_Gurantee_Start_MD__c,
                    Extend_Gurantee_End_MD__c,
                    Entend_gurantee_period_MD__c,
                    Extend_new_product_gurantee__c,
                    Extend_Gurantee_Start__c,
                    Extend_Gurantee_End__c,
                    Entend_gurantee_period__c,
                    CanNotCancelledGurantee__c,
                    Service_Category1__c,
                    Service_Category2__c,
                    Service_Category3__c,
                    Service_Category4__c,
                    Service_Category5__c,
                    Service_Category6__c,
                    Service_Category7__c,
                    Can_Repair__c,
                    RepairListPriceLevelA__c,
                    RepairListPriceLevelB__c,
                    RepairListPriceLevelC__c,
                    PartSupplyFinishDate__c,
                    EndSaleDate__c,
                    ProductClass__c,
                    ProductCategory__c,
                    Period_Filter_Classify1__c,
                    Period_Filter_Classify2__c,
                    Period_Filter_Classify3__c,
                    Intra_Trade_Service_RMB_Date1__c,
                    Intra_Trade_Service_RMB_Date2__c,
                    Intra_Trade_Service_RMB_EndDate1__c,
                    Intra_Trade_Service_RMB_EndDate2__c,
                    Intra_Trade_Service_RMB_1__c,
                    Intra_Trade_Service_RMB_2__c
                FROM Product2
                WHERE Asset_Model_No__c IN :noNewList
                ORDER BY CreatedDate DESC
            ];
            if (prdList.isEmpty()) {
                return;
            }
@@ -146,56 +180,56 @@
                    prdMap.put(pro2.Asset_Model_No__c, pro2);
                }
            }
            for(Product2 prd : newList){
                if (prdMap.containskey(prd.Asset_Model_No__c)){
                    prd.Maintenance_Price_Year__c = prdMap.get(prd.Asset_Model_No__c).Maintenance_Price_Year__c;//维修合同报价
                    prd.CanNotCancelledGurantee__c = prdMap.get(prd.Asset_Model_No__c).CanNotCancelledGurantee__c;//不可取消多年保修
                    prd.ProductClass__c = prdMap.get(prd.Asset_Model_No__c).ProductClass__c;//市场产品类别
                    prd.ProductCategory__c = prdMap.get(prd.Asset_Model_No__c).ProductCategory__c;//市场区分
                    prd.Extend_new_product_gurantee_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee_MD__c;//市场保修对象
                    prd.Extend_new_product_gurantee__c = prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee__c;//服务保修对象
                    if (prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee_MD__c == true) {//市场保修对象
                        prd.Entend_gurantee_period_MD__c = prdMap.get(prd.Asset_Model_No__c).Entend_gurantee_period_MD__c;//市场保修期(年)
            for (Product2 prd : newList) {
                if (prdMap.containskey(prd.Asset_Model_No__c)) {
                    prd.Maintenance_Price_Year__c = prdMap.get(prd.Asset_Model_No__c).Maintenance_Price_Year__c; //维修合同报价
                    prd.CanNotCancelledGurantee__c = prdMap.get(prd.Asset_Model_No__c).CanNotCancelledGurantee__c; //不可取消多年保修
                    prd.ProductClass__c = prdMap.get(prd.Asset_Model_No__c).ProductClass__c; //市场产品类别
                    prd.ProductCategory__c = prdMap.get(prd.Asset_Model_No__c).ProductCategory__c; //市场区分
                    prd.Extend_new_product_gurantee_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee_MD__c; //市场保修对象
                    prd.Extend_new_product_gurantee__c = prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee__c; //服务保修对象
                    if (prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee_MD__c == true) {
                        //市场保修对象
                        prd.Entend_gurantee_period_MD__c = prdMap.get(prd.Asset_Model_No__c).Entend_gurantee_period_MD__c; //市场保修期(年)
                    }
                    if(prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee__c == true){//服务保修对象
                        prd.Entend_gurantee_period__c = prdMap.get(prd.Asset_Model_No__c).Entend_gurantee_period__c;//服务保修期(年)
                    if (prdMap.get(prd.Asset_Model_No__c).Extend_new_product_gurantee__c == true) {
                        //服务保修对象
                        prd.Entend_gurantee_period__c = prdMap.get(prd.Asset_Model_No__c).Entend_gurantee_period__c; //服务保修期(年)
                    }
                    prd.Extend_Gurantee_Start_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_Start_MD__c;//市场保修开始日
                    prd.Extend_Gurantee_End_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_End_MD__c;//市场保修结束日
                    prd.Extend_Gurantee_Start__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_Start__c;//服务保修开始日
                    prd.Extend_Gurantee_End__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_End__c;//服务保修结束日
                    prd.Service_Category1__c = prdMap.get(prd.Asset_Model_No__c).Service_Category1__c;//第1服务分类
                    prd.Extend_Gurantee_Start_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_Start_MD__c; //市场保修开始日
                    prd.Extend_Gurantee_End_MD__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_End_MD__c; //市场保修结束日
                    prd.Extend_Gurantee_Start__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_Start__c; //服务保修开始日
                    prd.Extend_Gurantee_End__c = prdMap.get(prd.Asset_Model_No__c).Extend_Gurantee_End__c; //服务保修结束日
                    prd.Service_Category1__c = prdMap.get(prd.Asset_Model_No__c).Service_Category1__c; //第1服务分类
                    prd.Service_Category2__c = prdMap.get(prd.Asset_Model_No__c).Service_Category2__c;
                    prd.Service_Category3__c = prdMap.get(prd.Asset_Model_No__c).Service_Category3__c;
                    prd.Service_Category4__c = prdMap.get(prd.Asset_Model_No__c).Service_Category4__c;
                    prd.Service_Category5__c = prdMap.get(prd.Asset_Model_No__c).Service_Category5__c;
                    prd.Service_Category6__c = prdMap.get(prd.Asset_Model_No__c).Service_Category6__c;
                    prd.Service_Category7__c = prdMap.get(prd.Asset_Model_No__c).Service_Category7__c;
                    prd.Can_Repair__c = prdMap.get(prd.Asset_Model_No__c).Can_Repair__c;//是否可维修
                    prd.RepairListPriceLevelA__c = prdMap.get(prd.Asset_Model_No__c).RepairListPriceLevelA__c;//A(W)级维修参考价格
                    prd.Can_Repair__c = prdMap.get(prd.Asset_Model_No__c).Can_Repair__c; //是否可维修
                    prd.RepairListPriceLevelA__c = prdMap.get(prd.Asset_Model_No__c).RepairListPriceLevelA__c; //A(W)级维修参考价格
                    prd.RepairListPriceLevelB__c = prdMap.get(prd.Asset_Model_No__c).RepairListPriceLevelB__c;
                    prd.RepairListPriceLevelC__c = prdMap.get(prd.Asset_Model_No__c).RepairListPriceLevelC__c;
                    prd.PartSupplyFinishDate__c = prdMap.get(prd.Asset_Model_No__c).PartSupplyFinishDate__c;//零件停止供应日期
                    prd.EndSaleDate__c = prdMap.get(prd.Asset_Model_No__c).EndSaleDate__c;//停止销售日期
                    prd.Period_Filter_Classify1__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify1__c;//营业统计分类1
                    prd.Period_Filter_Classify2__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify2__c;//营业统计分类2
                    prd.Period_Filter_Classify3__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify3__c;//营业统计分类3
                    prd.Intra_Trade_Service_RMB_Date1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_Date1__c;//多年保价格有效开始日1
                    prd.Intra_Trade_Service_RMB_Date2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_Date2__c;//多年保价格有效开始日2
                    prd.Intra_Trade_Service_RMB_EndDate1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_EndDate1__c;//多年保价格有效结束日1
                    prd.Intra_Trade_Service_RMB_EndDate2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_EndDate2__c;//多年保价格有效结束日2
                    prd.Intra_Trade_Service_RMB_1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_1__c;//多年保价格1
                    prd.Intra_Trade_Service_RMB_2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_2__c;//多年保价格2
                    prd.PartSupplyFinishDate__c = prdMap.get(prd.Asset_Model_No__c).PartSupplyFinishDate__c; //零件停止供应日期
                    prd.EndSaleDate__c = prdMap.get(prd.Asset_Model_No__c).EndSaleDate__c; //停止销售日期
                    prd.Period_Filter_Classify1__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify1__c; //营业统计分类1
                    prd.Period_Filter_Classify2__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify2__c; //营业统计分类2
                    prd.Period_Filter_Classify3__c = prdMap.get(prd.Asset_Model_No__c).Period_Filter_Classify3__c; //营业统计分类3
                    prd.Intra_Trade_Service_RMB_Date1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_Date1__c; //多年保价格有效开始日1
                    prd.Intra_Trade_Service_RMB_Date2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_Date2__c; //多年保价格有效开始日2
                    prd.Intra_Trade_Service_RMB_EndDate1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_EndDate1__c; //多年保价格有效结束日1
                    prd.Intra_Trade_Service_RMB_EndDate2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_EndDate2__c; //多年保价格有效结束日2
                    prd.Intra_Trade_Service_RMB_1__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_1__c; //多年保价格1
                    prd.Intra_Trade_Service_RMB_2__c = prdMap.get(prd.Asset_Model_No__c).Intra_Trade_Service_RMB_2__c; //多年保价格2
                }
            }
        }
    }
    // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 end
    private void beforeSetValue() {
        for (Product2 nObj : newList) {
            //CHAN-B8GCBB
            if (nObj.WhiteSpace__c == true) {
@@ -207,48 +241,50 @@
            nObj.Fixture_Model_No_T__c = nObj.Fixture_Model_No_F__c;
            // CBPR LHJ
            if (Trigger.isInsert ||
                    (Trigger.isUpdate && nObj.SFDA_Status_New__c != oldMap.get(nObj.id).SFDA_Status_New__c)) {
            if (Trigger.isInsert || (Trigger.isUpdate && nObj.SFDA_Status_New__c != oldMap.get(nObj.id).SFDA_Status_New__c)) {
                nObj.SFDA_Status__c = nobj.SFDA_Status_New__c;
                if (nobj.SFDA_Status_New__c == '新製品申請中' || nobj.SFDA_Status_New__c == '準備中') {
                    nObj.SFDA_Status__c = '停止';
                }
            }
            // CBPR LHJ
            // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start
            if (Trigger.isInsert) {
            }
            // SWAG-BHE9GK LHJ 竞争对手产品自动编码 End
        }
    }
    //SFDC停止预警  lt  20210914 add start
    private static void Calculate_AverageMonthSales(List<Product2> newList,Map<Id, Product2> oldMap){
    private static void Calculate_AverageMonthSales(List<Product2> newList, Map<Id, Product2> oldMap) {
        //符合条件的 旧 产品List
        List<Id> oproList = new List<Id>();
        //符合条件的 新旧 产品Id List  作为条件
        List<Id> conList = new List<Id>();
        //Map<旧的,新的>对应
        Map<String,String> matMap = new Map<String,String>();
        Map<String, String> matMap = new Map<String, String>();
        //Map<旧Id,预计停止日>
        Map<String,Date> adateMap = new Map<String,Date>();
        Map<String, Date> adateMap = new Map<String, Date>();
        //Map<旧Id, x(平均月销量)>
        Map<String,Integer> xMap = new Map<String,Integer>();
        Map<String, Integer> xMap = new Map<String, Integer>();
        //Map<旧Id, z(天数)>
        Map<String,Integer> zMap = new Map<String,Integer>();
        Map<String, Integer> zMap = new Map<String, Integer>();
        for(Product2 term : newList){
            System.debug('标识'+term.CalMonthSalesFLG__c);
            System.debug('新库存'+term.StorageStatusNo__c);
            System.debug('旧库存'+oldMap.get(term.Id).StorageStatusNo__c);
            if(term.M_BC_Stop_manufacure__c != null && term.SFDA_Status__c != '停止' && (term.StorageStatusNo__c != oldMap.get(term.Id).StorageStatusNo__c || term.CalMonthSalesFLG__c == true)){
                if(term.Correspond_Code__c != null){
                    matMap.put((String)term.Id,(String)term.Correspond_Code__c);
        for (Product2 term : newList) {
            System.debug('标识' + term.CalMonthSalesFLG__c);
            System.debug('新库存' + term.StorageStatusNo__c);
            System.debug('旧库存' + oldMap.get(term.Id).StorageStatusNo__c);
            if (
                term.M_BC_Stop_manufacure__c != null &&
                term.SFDA_Status__c != '停止' &&
                (term.StorageStatusNo__c != oldMap.get(term.Id).StorageStatusNo__c ||
                term.CalMonthSalesFLG__c == true)
            ) {
                if (term.Correspond_Code__c != null) {
                    matMap.put((String) term.Id, (String) term.Correspond_Code__c);
                    conList.add(term.Correspond_Code__c);
                }
                conList.add(term.Id);
@@ -259,170 +295,171 @@
        }
        //做 一对多 的 Map<String,List<月销量>>
        Map<String,List<ProductMonthlySales__c>> msMap = new Map<String,List<ProductMonthlySales__c>>();
        Map<String, List<ProductMonthlySales__c>> msMap = new Map<String, List<ProductMonthlySales__c>>();
        if(conList.size()>0){
            List<ProductMonthlySales__c> msList = [Select Id, MonthSales__c, CurrentMonth__c, CurrentDate__c,
                                                          CurrentYear__c, ProductM__c, Product2Model__c,
                                                          ProductM__r.StorageStatusNo__c,
                                                          ProductM__r.M_BC_Stop_manufacure__c
                                                   From ProductMonthlySales__c
                                                   Where ProductM__c in: conList
                                                   Order by CurrentDate__c DESC];
        if (conList.size() > 0) {
            List<ProductMonthlySales__c> msList = [
                SELECT
                    Id,
                    MonthSales__c,
                    CurrentMonth__c,
                    CurrentDate__c,
                    CurrentYear__c,
                    ProductM__c,
                    Product2Model__c,
                    ProductM__r.StorageStatusNo__c,
                    ProductM__r.M_BC_Stop_manufacure__c
                FROM ProductMonthlySales__c
                WHERE ProductM__c IN :conList
                ORDER BY CurrentDate__c DESC
            ];
            //双层循环  产品==>月销量
            for(Id pro : conList){
                for(ProductMonthlySales__c mms : msList){
                    if(pro == mms.ProductM__c){
                        if(msMap.containsKey(pro)){
            for (Id pro : conList) {
                for (ProductMonthlySales__c mms : msList) {
                    if (pro == mms.ProductM__c) {
                        if (msMap.containsKey(pro)) {
                            msMap.get(pro).add(mms);
                        }else{
                        } else {
                            List<ProductMonthlySales__c> pmsaleList = new List<ProductMonthlySales__c>();
                            pmsaleList.add(mms);
                            msMap.put(pro, pmsaleList);
                        }
                    }
                }
            }
            System.debug('条件List'+conList);
            System.debug('sql查到的List'+msList);
            System.debug('产品月销量msMap为'+msMap);
            System.debug('旧的产品List'+oproList);
            if(msMap.size() > 0){
                System.debug('产品月销量msMap为'+msMap);
                for(Id res : oproList){
            System.debug('条件List' + conList);
            System.debug('sql查到的List' + msList);
            System.debug('产品月销量msMap为' + msMap);
            System.debug('旧的产品List' + oproList);
            if (msMap.size() > 0) {
                System.debug('产品月销量msMap为' + msMap);
                for (Id res : oproList) {
                    //a旧 月销量和  ; b新 月销量和 ; c商(平均月销量) ; x商四舍五入 ;
                    //y 库存/平均月销量天数 ; z 天数 四舍五入
                    Decimal c = 0, y = 0;
                    Integer x = 0, z = 0;
                    if(msMap.get(res) != null){
                    if (msMap.get(res) != null) {
                        //月销量大于12个月
                        if(msMap.get(res).size() >= 12){
                            Decimal a = 0 , b = 0;
                        if (msMap.get(res).size() >= 12) {
                            Decimal a = 0, b = 0;
                            Integer i;
                            for(i = 0 ; i < 12 ; i++){
                            for (i = 0; i < 12; i++) {
                                a += msMap.get(res)[i].MonthSales__c;
                            }
                            if(matMap.get(res) != null){
                                if(msMap.get(matMap.get(res)) != null){
                                    if(msMap.get(matMap.get(res)).size() >= 12){
                                        for(i = 0 ; i < 12 ; i++){
                            if (matMap.get(res) != null) {
                                if (msMap.get(matMap.get(res)) != null) {
                                    if (msMap.get(matMap.get(res)).size() >= 12) {
                                        for (i = 0; i < 12; i++) {
                                            b += msMap.get(matMap.get(res))[i].MonthSales__c;
                                            System.debug('新的大于十二'+b);
                                            System.debug('新的大于十二' + b);
                                        }
                                    }
                                    else{
                                        for(ProductMonthlySales__c nms : msMap.get(matMap.get(res))){
                                            b+=nms.MonthSales__c;
                                            System.debug('新的小于十二遍历全部'+b);
                                    } else {
                                        for (ProductMonthlySales__c nms : msMap.get(matMap.get(res))) {
                                            b += nms.MonthSales__c;
                                            System.debug('新的小于十二遍历全部' + b);
                                        }
                                    }
                                }
                            }
                            //四舍五入
                            c = (a + b) / 12 ;
                            if(c > 1){
                            //四舍五入
                            c = (a + b) / 12;
                            if (c > 1) {
                                x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP));
                                xMap.put(res,x);
                            }else if(c > 0){
                                xMap.put(res, x);
                            } else if (c > 0) {
                                x = 1;
                                xMap.put(res,x);
                                xMap.put(res, x);
                            }
                            //x = Integer.valueOf(c.round(System.RoundingMode.Up));
                            //x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP));
                            System.debug('新'+b);
                            System.debug('旧'+a);
                            System.debug('除法足c'+c);
                            System.debug('四舍五入x'+x);
                            System.debug('新' + b);
                            System.debug('旧' + a);
                            System.debug('除法足c' + c);
                            System.debug('四舍五入x' + x);
                        }
                        //月销量不足12个月
                        else{
                            Decimal a = 0 , b = 0 ;
                            for(ProductMonthlySales__c oms : msMap.get(res)){
                                a+=oms.MonthSales__c;
                        else {
                            Decimal a = 0, b = 0;
                            for (ProductMonthlySales__c oms : msMap.get(res)) {
                                a += oms.MonthSales__c;
                            }
                            if(msMap.get(matMap.get(res)) != null){
                                for(ProductMonthlySales__c nms : msMap.get(matMap.get(res))){
                                    b+=nms.MonthSales__c;
                            if (msMap.get(matMap.get(res)) != null) {
                                for (ProductMonthlySales__c nms : msMap.get(matMap.get(res))) {
                                    b += nms.MonthSales__c;
                                }
                            }
                            c = (a + b) / msMap.get(res).size();
                            //x = Integer.valueOf(c.round(System.RoundingMode.UP));
                            //x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP));
                            if(c > 1){
                            if (c > 1) {
                                x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP));
                                xMap.put(res,x);
                            }else if(c > 0){
                                xMap.put(res, x);
                            } else if (c > 0) {
                                x = 1;
                                xMap.put(res,x);
                                xMap.put(res, x);
                            }
                            System.debug('除法不足12c'+c);
                            System.debug('四舍五入x'+x);
                            System.debug('除法不足12c' + c);
                            System.debug('四舍五入x' + x);
                        }
                        if(x != 0){
                            for(ProductMonthlySales__c dat : msMap.get(res)){
                        if (x != 0) {
                            for (ProductMonthlySales__c dat : msMap.get(res)) {
                                Decimal m = 0;
                                if(dat.ProductM__r.StorageStatusNo__c != null){
                                if (dat.ProductM__r.StorageStatusNo__c != null) {
                                    m = dat.ProductM__r.StorageStatusNo__c;
                                }
                                }
                                y = m / x;
                                y = y * 30 ;
                                y = y * 30;
                            }
                        }
                        //z = Integer.valueOf(y.round(System.RoundingMode.UP));
                        z = Integer.valueOf(y.round(System.RoundingMode.HALF_UP));
                        zMap.put(res,z);
                        System.debug('天数y'+y);
                        System.debug('四舍五入z'+z);
                        zMap.put(res, z);
                        System.debug('天数y' + y);
                        System.debug('四舍五入z' + z);
                    }
                }
            }
            List<Product2> finList = new List<Product2>();
            for(Id fin : oproList){
            for (Id fin : oproList) {
                Product2 fip = new Product2();
                fip.Id = fin;
                fip.CalMonthSalesFLG__c = false;
                if(xMap.get(fin) != null){
                if (xMap.get(fin) != null) {
                    fip.Average_MonthSales__c = xMap.get(fin);
                }
                //20211020
                if(zMap.get(fin) != null){
                    if(zMap.get(fin) != 0){
                if (zMap.get(fin) != null) {
                    if (zMap.get(fin) != 0) {
                        fip.Estimated_ConsumptionDueDate__c = Date.today().addDays(zMap.get(fin));
                    }else{
                        if(adateMap != null){
                    } else {
                        if (adateMap != null) {
                            Date adate = adateMap.get(fin);
                            fip.Estimated_ConsumptionDueDate__c = adate;
                        }
                    }
                }else{
                    if(adateMap != null){
                } else {
                    if (adateMap != null) {
                        Date adate = adateMap.get(fin);
                        fip.Estimated_ConsumptionDueDate__c = adate;
                    }
                }
                //20211020
                finList.add(fip);
            }
            update finList;
        }
        }
    }
    //SFDC停止预警  lt  20210914 add end
@@ -445,46 +482,49 @@
    //             }
    //         }
    //     }
    // }
    //SFDC停止预警  lt  20211015 add end
    private  void FlgStopManufacure(){
        for(Product2 pts : newList){
    private void FlgStopManufacure() {
        for (Product2 pts : newList) {
            Product2 oldPts = oldMap.get(pts.Id);
            if(pts.M_BC_Stop_manufacure__c  != oldPts.M_BC_Stop_manufacure__c){
            if (pts.M_BC_Stop_manufacure__c != oldPts.M_BC_Stop_manufacure__c) {
                pts.ProductMonthlySalesFlag__c = true;
                if (pts.M_BC_Stop_manufacure__c == null) {
                    pts.ProductMonthlySalesFlag__c = false;
                    pts.Estimated_ConsumptionDueDate__c = null;
                    pts.Estimated_ConsumptionDueDate__c = null;
                }
            }
            if(pts.SFDA_Status__c == '停止' && oldPts.SFDA_Status__c != '停止'){
            if (pts.SFDA_Status__c == '停止' && oldPts.SFDA_Status__c != '停止') {
                pts.Estimated_ConsumptionDueDate__c = null;
            }
        }
    }
    //20230506 lt DB202304618804  包含超声 start
    private static void AssignmentUltrasonic(List<Product2> newList,Map<Id, Product2> oldMap){
    private static void AssignmentUltrasonic(List<Product2> newList, Map<Id, Product2> oldMap) {
        List<String> proIdList = new List<String>();
        List<PCLLostProduct__c> updateplpList = new List<PCLLostProduct__c>();
        for(Product2 pro : newList){
            if(pro.RecordTypeId == System.Label.Pro_RecordType &&
            (pro.Lost_Product_Differ__c != oldMap.get(pro.Id).Lost_Product_Differ__c ||
            pro.Lost_Product_Category__c != oldMap.get(pro.Id).Lost_Product_Category__c)){
        for (Product2 pro : newList) {
            if (
                pro.RecordTypeId == System.Label.Pro_RecordType &&
                (pro.Lost_Product_Differ__c != oldMap.get(pro.Id).Lost_Product_Differ__c ||
                pro.Lost_Product_Category__c != oldMap.get(pro.Id).Lost_Product_Category__c)
            ) {
                proIdList.add(pro.Id);
            }
        }
        List<PCLLostProduct__c> plpList = [Select Id, LostProduct__c, ProductClass__c, ProductCategory__c
                                           From PCLLostProduct__c
                                           Where LostProduct__c in: proIdList ];
        if(plpList.size() > 0 ){
            for(PCLLostProduct__c plp : plpList){
        List<PCLLostProduct__c> plpList = [
            SELECT Id, LostProduct__c, ProductClass__c, ProductCategory__c
            FROM PCLLostProduct__c
            WHERE LostProduct__c IN :proIdList
        ];
        if (plpList.size() > 0) {
            for (PCLLostProduct__c plp : plpList) {
                plp.ProductClass__c = '主机';
                plp.ProductCategory__c = '超声主机';
                updateplpList.add(plp);
@@ -492,8 +532,6 @@
        }
        update updateplpList;
    }
    //20230506 lt DB202304618804  包含超声 end
}
}