public without sharing class Product2Handler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; public Product2Handler() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void beforeInsert() { beforeSetValue(); // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start SetCompetitorCode(); // SWAG-BHE9GK LHJ 竞争对手产品自动编码 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); } //SFDC停止预警 lt 20210922 add end // SWAG-BHE9GK LHJ 竞争对手产品自动编码 Start private void SetCompetitorCode() { Boolean SelctFlg = False; list proList; String strPC = ''; Integer i = 1; for (Product2 nObj : newList) { if (nObj.Competitor_product_dummy__c) { SelctFlg = True; } } if (SelctFlg) { proList = [Select Max(ProductCode) PC From Product2 Where ProductCode Like 'SD%']; if (proList != null && proList.size() > 0) { strPC = String.valueof(proList[0].get('PC')); } } for (Product2 nObj : newList) { if (nObj.Competitor_product_dummy__c && strPC.length() == 8 && proList != null && proList.size() > 0 ) { Integer num = Integer.valueOf(strPC.SubString(2,strPC.length())) + i; nObj.ProductCode = 'SD' + String.valueOf(num).leftpad(6,'0'); i++; } } } // SWAG-BHE9GK LHJ 竞争对手产品自动编码 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 newList,Map oldMap){ //符合条件的 旧 产品List List oproList = new List(); //符合条件的 新旧 产品Id List 作为条件 List conList = new List(); //Map<旧的,新的>对应 Map matMap = new Map(); //Map<旧Id,预计停止日> Map adateMap = new Map(); //Map<旧Id, x(平均月销量)> Map xMap = new Map(); //Map<旧Id, z(天数)> Map zMap = new Map(); 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> Map> msMap = new Map>(); if(conList.size()>0){ List 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 pmsaleList = new List(); 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 finList = new List(); 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 newList,Map 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; } } } }