| | |
| | | public without sharing class Product2Handler extends Oly_TriggerHandler { |
| | | private Map<Id, Product2> newMap; |
| | | private Map<Id, Product2> oldMap; |
| | | private List<Product2> newList; |
| | | private List<Product2> oldList; |
| | | private Map<Id, Product2> newMap; |
| | | private Map<Id, Product2> oldMap; |
| | | private List<Product2> newList; |
| | | private List<Product2> oldList; |
| | | |
| | | public Product2Handler() { |
| | | this.newMap = (Map<Id, Product2>) Trigger.newMap; |
| | | this.oldMap = (Map<Id, Product2>) Trigger.oldMap; |
| | | this.newList = (List<Product2>) Trigger.new; |
| | | this.oldList = (List<Product2>) Trigger.old; |
| | | } |
| | | public Product2Handler() { |
| | | this.newMap = (Map<Id, Product2>) Trigger.newMap; |
| | | this.oldMap = (Map<Id, Product2>) Trigger.oldMap; |
| | | this.newList = (List<Product2>) Trigger.new; |
| | | this.oldList = (List<Product2>) Trigger.old; |
| | | } |
| | | |
| | | protected override void beforeInsert() { |
| | | beforeSetValue(); |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start |
| | | SetCompetitorCode(); |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 End |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 Start |
| | | AutomaticallyBringData(); |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 End |
| | | } |
| | | protected override void beforeUpdate() { |
| | | beforeSetValue(); |
| | | //SFDC停止预警 lt 20211015 add start |
| | | // FlgStopManufacure(this.newList, this.oldMap); |
| | | //SFDC停止预警 lt 20211015 add end |
| | | FlgStopManufacure(); |
| | | |
| | | } |
| | | |
| | | //SFDC停止预警 lt 20210922 add start |
| | | protected override void afterUpdate(){ |
| | | Calculate_AverageMonthSales(this.newList, this.oldMap); |
| | | AssignmentUltrasonic(this.newList, this.oldMap); //20230506 lt DB202304618804 包含超声 add |
| | | } |
| | | //SFDC停止预警 lt 20210922 add end |
| | | |
| | | protected override void beforeInsert() { |
| | | beforeSetValue(); |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start |
| | | private void SetCompetitorCode() { |
| | | Boolean SelctFlg = False; |
| | | list<AggregateResult> proList; |
| | | //带量采购修改 start fy |
| | | list<AggregateResult> proListsc; |
| | | //带量采购修改 end fy |
| | | String strPC = ''; |
| | | //带量采购修改 start fy |
| | | String strPCsc = ''; |
| | | //带量采购修改 end fy |
| | | Integer i = 1; |
| | | |
| | | String ProductRecordTypes = System.Label.ProductRecordTypeID; |
| | | String[] RecordTypes = String.isNotBlank(ProductRecordTypes) ? ProductRecordTypes.split(',') : null; |
| | | |
| | | for (Product2 nObj : newList) { |
| | | //带量采购修改 start fy |
| | | String RecordTypeString = ''; |
| | | 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; |
| | | } |
| | | //带量采购修改 end fy |
| | | } |
| | | if (SelctFlg) { |
| | | 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')); |
| | | } |
| | | //带量采购 end fy |
| | | } |
| | | for (Product2 nObj : newList) { |
| | | //带量采购 start fy |
| | | String RecordTypeString = ''; |
| | | 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 ) { |
| | | // Integer num = Integer.valueOf(strPC.SubString(2,strPC.length())) + 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; |
| | | // 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'); |
| | | } |
| | | //带量采购 end fy |
| | | // nObj.ProductCode = 'SD' + String.valueOf(num).leftpad(6,'0'); |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | SetCompetitorCode(); |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 End |
| | | |
| | | |
| | | //WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 Start |
| | | private void AutomaticallyBringData() { |
| | | List<String> noNewList = new List<String>(); |
| | | 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]; |
| | | if (prdList.isEmpty()) { |
| | | return; |
| | | } |
| | | Map<String, Product2> prdMap = new Map<String, Product2>(); |
| | | for (Product2 pro2 : prdList) { |
| | | if (!prdMap.isEmpty() && prdMap.containskey(pro2.Asset_Model_No__c)) { |
| | | } else { |
| | | 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;//市场保修期(年) |
| | | } |
| | | 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.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.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 |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 end |
| | | |
| | | private void beforeSetValue() { |
| | | |
| | | for (Product2 nObj : newList) { |
| | | //CHAN-B8GCBB |
| | | if (nObj.WhiteSpace__c == true) { |
| | | nObj.StorageStatus__c = String.valueOf(nObj.StorageStatusNo__c); |
| | | } else { |
| | | nObj.StorageStatus__c = ''; |
| | | } |
| | | //CHAN-B8GCBB |
| | | |
| | | 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)) { |
| | | 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){ |
| | | |
| | | //符合条件的 旧 产品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<旧Id,预计停止日> |
| | | Map<String,Date> adateMap = new Map<String,Date>(); |
| | | |
| | | //Map<旧Id, x(平均月销量)> |
| | | Map<String,Integer> xMap = new Map<String,Integer>(); |
| | | //Map<旧Id, z(天数)> |
| | | 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); |
| | | conList.add(term.Correspond_Code__c); |
| | | } |
| | | conList.add(term.Id); |
| | | oproList.add(term.Id); |
| | | |
| | | adateMap.put(term.Id, term.M_BC_Stop_manufacure__c); |
| | | } |
| | | } |
| | | |
| | | //做 一对多 的 Map<String,List<月销量>> |
| | | 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]; |
| | | //双层循环 产品==>月销量 |
| | | for(Id pro : conList){ |
| | | for(ProductMonthlySales__c mms : msList){ |
| | | if(pro == mms.ProductM__c){ |
| | | if(msMap.containsKey(pro)){ |
| | | msMap.get(pro).add(mms); |
| | | }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){ |
| | | |
| | | //a旧 月销量和 ; b新 月销量和 ; c商(平均月销量) ; x商四舍五入 ; |
| | | //y 库存/平均月销量天数 ; z 天数 四舍五入 |
| | | Decimal c = 0, y = 0; |
| | | Integer x = 0, z = 0; |
| | | |
| | | if(msMap.get(res) != null){ |
| | | //月销量大于12个月 |
| | | if(msMap.get(res).size() >= 12){ |
| | | Decimal a = 0 , b = 0; |
| | | Integer 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++){ |
| | | b += msMap.get(matMap.get(res))[i].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){ |
| | | x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP)); |
| | | xMap.put(res,x); |
| | | }else if(c > 0){ |
| | | x = 1; |
| | | 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); |
| | | |
| | | } |
| | | //月销量不足12个月 |
| | | 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; |
| | | } |
| | | } |
| | | 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){ |
| | | x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP)); |
| | | xMap.put(res,x); |
| | | }else if(c > 0){ |
| | | x = 1; |
| | | xMap.put(res,x); |
| | | } |
| | | |
| | | System.debug('除法不足12c'+c); |
| | | System.debug('四舍五入x'+x); |
| | | } |
| | | |
| | | if(x != 0){ |
| | | for(ProductMonthlySales__c dat : msMap.get(res)){ |
| | | Decimal m = 0; |
| | | if(dat.ProductM__r.StorageStatusNo__c != null){ |
| | | m = dat.ProductM__r.StorageStatusNo__c; |
| | | } |
| | | y = m / x; |
| | | 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); |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<Product2> finList = new List<Product2>(); |
| | | for(Id fin : oproList){ |
| | | Product2 fip = new Product2(); |
| | | fip.Id = fin; |
| | | fip.CalMonthSalesFLG__c = false; |
| | | |
| | | if(xMap.get(fin) != null){ |
| | | fip.Average_MonthSales__c = xMap.get(fin); |
| | | } |
| | | |
| | | //20211020 |
| | | if(zMap.get(fin) != null){ |
| | | if(zMap.get(fin) != 0){ |
| | | fip.Estimated_ConsumptionDueDate__c = Date.today().addDays(zMap.get(fin)); |
| | | }else{ |
| | | if(adateMap != null){ |
| | | Date adate = adateMap.get(fin); |
| | | fip.Estimated_ConsumptionDueDate__c = adate; |
| | | } |
| | | } |
| | | }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 |
| | | |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 Start |
| | | AutomaticallyBringData(); |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 End |
| | | } |
| | | protected override void beforeUpdate() { |
| | | beforeSetValue(); |
| | | //SFDC停止预警 lt 20211015 add start |
| | | //ProductMonthlySalesFlag__c 12月销量标识 预计停止日期(M_BC_Stop_manufacure__c)变化时 |
| | | // private static void FlgStopManufacure(List<Product2> newList,Map<Id, Product2> oldMap){ |
| | | // if(newList != null){ |
| | | // for(Product2 pts : newList){ |
| | | // if(oldMap != null){ |
| | | // if(pts.M_BC_Stop_manufacure__c != null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c == null){ |
| | | // pts.ProductMonthlySalesFlag__c = true; |
| | | // } |
| | | // if(pts.M_BC_Stop_manufacure__c != null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c != null && pts.M_BC_Stop_manufacure__c != oldMap.get(pts.Id).M_BC_Stop_manufacure__c){ |
| | | // pts.ProductMonthlySalesFlag__c = true; |
| | | // } |
| | | // if(pts.M_BC_Stop_manufacure__c == null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c != null){ |
| | | // pts.ProductMonthlySalesFlag__c = false; |
| | | // pts.Estimated_ConsumptionDueDate__c = null; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | // } |
| | | // FlgStopManufacure(this.newList, this.oldMap); |
| | | //SFDC停止预警 lt 20211015 add end |
| | | private void FlgStopManufacure(){ |
| | | for(Product2 pts : newList){ |
| | | FlgStopManufacure(); |
| | | } |
| | | |
| | | Product2 oldPts = oldMap.get(pts.Id); |
| | | //SFDC停止预警 lt 20210922 add start |
| | | protected override void afterUpdate() { |
| | | Calculate_AverageMonthSales(this.newList, this.oldMap); |
| | | AssignmentUltrasonic(this.newList, this.oldMap); //20230506 lt DB202304618804 包含超声 add |
| | | } |
| | | //SFDC停止预警 lt 20210922 add end |
| | | |
| | | 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; |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start |
| | | private void SetCompetitorCode() { |
| | | Boolean SelctFlg = false; |
| | | list<AggregateResult> proList; |
| | | //带量采购修改 start fy |
| | | list<AggregateResult> proListsc; |
| | | //带量采购修改 end fy |
| | | String strPC = ''; |
| | | //带量采购修改 start fy |
| | | String strPCsc = ''; |
| | | //带量采购修改 end fy |
| | | Integer i = 1; |
| | | |
| | | String ProductRecordTypes = System.Label.ProductRecordTypeID; |
| | | String[] RecordTypes = String.isNotBlank(ProductRecordTypes) |
| | | ? ProductRecordTypes.split(',') |
| | | : null; |
| | | |
| | | for (Product2 nObj : newList) { |
| | | //带量采购修改 start fy |
| | | String RecordTypeString = ''; |
| | | 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; |
| | | } |
| | | //带量采购修改 end fy |
| | | } |
| | | if (SelctFlg) { |
| | | 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')); |
| | | // } |
| | | 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.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 ) { |
| | | // Integer num = Integer.valueOf(strPC.SubString(2,strPC.length())) + 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; |
| | | // 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'); |
| | | } |
| | | //带量采购 end fy |
| | | // nObj.ProductCode = 'SD' + String.valueOf(num).leftpad(6,'0'); |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | // SWAG-BHE9GK LHJ 竞争对手产品自动编码 End |
| | | |
| | | //WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 Start |
| | | private void AutomaticallyBringData() { |
| | | List<String> noNewList = new List<String>(); |
| | | 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 |
| | | ]; |
| | | if (prdList.isEmpty()) { |
| | | return; |
| | | } |
| | | Map<String, Product2> prdMap = new Map<String, Product2>(); |
| | | for (Product2 pro2 : prdList) { |
| | | if (!prdMap.isEmpty() && prdMap.containskey(pro2.Asset_Model_No__c)) { |
| | | } else { |
| | | 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; //市场保修期(年) |
| | | } |
| | | 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.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.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 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // WLIG-CKKA4M xxf 【委托】【产品主数据】注册证更新后部分字段信息未自动代入 end |
| | | |
| | | private void beforeSetValue() { |
| | | for (Product2 nObj : newList) { |
| | | //CHAN-B8GCBB |
| | | if (nObj.WhiteSpace__c == true) { |
| | | nObj.StorageStatus__c = String.valueOf(nObj.StorageStatusNo__c); |
| | | } else { |
| | | nObj.StorageStatus__c = ''; |
| | | } |
| | | //CHAN-B8GCBB |
| | | |
| | | 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) |
| | | ) { |
| | | 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 |
| | | ) { |
| | | //符合条件的 旧 产品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<旧Id,预计停止日> |
| | | Map<String, Date> adateMap = new Map<String, Date>(); |
| | | |
| | | //Map<旧Id, x(平均月销量)> |
| | | Map<String, Integer> xMap = new Map<String, Integer>(); |
| | | //Map<旧Id, z(天数)> |
| | | 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); |
| | | conList.add(term.Correspond_Code__c); |
| | | } |
| | | conList.add(term.Id); |
| | | oproList.add(term.Id); |
| | | |
| | | adateMap.put(term.Id, term.M_BC_Stop_manufacure__c); |
| | | } |
| | | } |
| | | |
| | | //做 一对多 的 Map<String,List<月销量>> |
| | | 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 |
| | | ]; |
| | | //双层循环 产品==>月销量 |
| | | for (Id pro : conList) { |
| | | for (ProductMonthlySales__c mms : msList) { |
| | | if (pro == mms.ProductM__c) { |
| | | if (msMap.containsKey(pro)) { |
| | | msMap.get(pro).add(mms); |
| | | } 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) { |
| | | //a旧 月销量和 ; b新 月销量和 ; c商(平均月销量) ; x商四舍五入 ; |
| | | //y 库存/平均月销量天数 ; z 天数 四舍五入 |
| | | Decimal c = 0, y = 0; |
| | | Integer x = 0, z = 0; |
| | | |
| | | if (msMap.get(res) != null) { |
| | | //月销量大于12个月 |
| | | if (msMap.get(res).size() >= 12) { |
| | | Decimal a = 0, b = 0; |
| | | Integer 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++) { |
| | | b += msMap.get(matMap.get(res))[i].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) { |
| | | x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP)); |
| | | xMap.put(res, x); |
| | | } else if (c > 0) { |
| | | x = 1; |
| | | 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); |
| | | } |
| | | //月销量不足12个月 |
| | | 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; |
| | | } |
| | | } |
| | | 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) { |
| | | x = Integer.valueOf(c.round(System.RoundingMode.HALF_UP)); |
| | | xMap.put(res, x); |
| | | } else if (c > 0) { |
| | | x = 1; |
| | | xMap.put(res, x); |
| | | } |
| | | |
| | | System.debug('除法不足12c' + c); |
| | | System.debug('四舍五入x' + x); |
| | | } |
| | | |
| | | if(pts.SFDA_Status__c == '停止' && oldPts.SFDA_Status__c != '停止'){ |
| | | pts.Estimated_ConsumptionDueDate__c = null; |
| | | if (x != 0) { |
| | | for (ProductMonthlySales__c dat : msMap.get(res)) { |
| | | Decimal m = 0; |
| | | if (dat.ProductM__r.StorageStatusNo__c != null) { |
| | | m = dat.ProductM__r.StorageStatusNo__c; |
| | | } |
| | | y = m / x; |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<Product2> finList = new List<Product2>(); |
| | | for (Id fin : oproList) { |
| | | Product2 fip = new Product2(); |
| | | fip.Id = fin; |
| | | fip.CalMonthSalesFLG__c = false; |
| | | |
| | | if (xMap.get(fin) != null) { |
| | | fip.Average_MonthSales__c = xMap.get(fin); |
| | | } |
| | | |
| | | //20211020 |
| | | if (zMap.get(fin) != null) { |
| | | if (zMap.get(fin) != 0) { |
| | | fip.Estimated_ConsumptionDueDate__c = Date.today() |
| | | .addDays(zMap.get(fin)); |
| | | } else { |
| | | if (adateMap != null) { |
| | | Date adate = adateMap.get(fin); |
| | | fip.Estimated_ConsumptionDueDate__c = adate; |
| | | } |
| | | } |
| | | } 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 |
| | | |
| | | //SFDC停止预警 lt 20211015 add start |
| | | //ProductMonthlySalesFlag__c 12月销量标识 预计停止日期(M_BC_Stop_manufacure__c)变化时 |
| | | // private static void FlgStopManufacure(List<Product2> newList,Map<Id, Product2> oldMap){ |
| | | // if(newList != null){ |
| | | // for(Product2 pts : newList){ |
| | | // if(oldMap != null){ |
| | | // if(pts.M_BC_Stop_manufacure__c != null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c == null){ |
| | | // pts.ProductMonthlySalesFlag__c = true; |
| | | // } |
| | | // if(pts.M_BC_Stop_manufacure__c != null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c != null && pts.M_BC_Stop_manufacure__c != oldMap.get(pts.Id).M_BC_Stop_manufacure__c){ |
| | | // pts.ProductMonthlySalesFlag__c = true; |
| | | // } |
| | | // if(pts.M_BC_Stop_manufacure__c == null && oldMap.get(pts.Id).M_BC_Stop_manufacure__c != null){ |
| | | // pts.ProductMonthlySalesFlag__c = false; |
| | | // pts.Estimated_ConsumptionDueDate__c = null; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | // } |
| | | //SFDC停止预警 lt 20211015 add end |
| | | 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) { |
| | | pts.ProductMonthlySalesFlag__c = true; |
| | | if (pts.M_BC_Stop_manufacure__c == null) { |
| | | pts.ProductMonthlySalesFlag__c = false; |
| | | pts.Estimated_ConsumptionDueDate__c = null; |
| | | } |
| | | } |
| | | |
| | | 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 |
| | | ) { |
| | | 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) |
| | | ) { |
| | | proIdList.add(pro.Id); |
| | | } |
| | | } |
| | | |
| | | //20230506 lt DB202304618804 包含超声 start |
| | | 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)){ |
| | | 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){ |
| | | plp.ProductClass__c = '主机'; |
| | | plp.ProductCategory__c = '超声主机'; |
| | | updateplpList.add(plp); |
| | | } |
| | | } |
| | | |
| | | update updateplpList; |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | //20230506 lt DB202304618804 包含超声 end |
| | | |
| | | } |
| | | update updateplpList; |
| | | } |
| | | //20230506 lt DB202304618804 包含超声 end |
| | | } |