// create by tcm 20211220 处理失单报告历史数据 // 2022-01-18 修改 从失单报告处理历史数据 global class LostCancelReportOppBatch implements Database.Batchable { public List IdList=new List (); public Date start_date; public Date end_date; public Boolean update_all = true; global LostCancelReportOppBatch() { } // 通过询价Id查找 global LostCancelReportOppBatch(List IdList) { this.IdList = IdList; } // 通过日期查找 global LostCancelReportOppBatch(String str_start, String str_end, Boolean if_upd_all) { this.start_date = String.isNotBlank(str_start) ? Date.parse(str_start) : null; this.end_date = String.isNotBlank(str_end) ? Date.parse(str_end) : null; this.update_all = if_upd_all != null ? if_upd_all : true; } global Database.QueryLocator start(Database.BatchableContext bc) { // string query ='select id from Opportunity '; // if (IdList.size() > 0) { // query += ' where Id in :IdList'; // } // 2022-01-18 修改 从失单报告取值 String query = 'SELECT Id, Opportunity__c FROM Lost_cancel_report__c WHERE Report_Status__c = \'批准\' AND LostType__c in (\'失单\', \'部分失单\') '; //20230215 lt DB202302247719 add , Opportunity__c if (start_date != null) { query += ' AND Submit_Day__c >= :start_date'; } if (end_date != null) { query += ' AND Submit_Day__c >= :start_date'; } if (IdList != null && IdList.size() > 0) { query += ' AND Opportunity__c in :IdList'; } if (!update_all) { query += ' AND Opportunity__r.PCLLostBrands__c != null'; } return Database.getQueryLocator(query); } // global void execute(Database.BatchableContext BC, List scope) { // List oppIdList=new List(); // for (Opportunity opp : scope) { // oppIdList.add(opp.Id); // } // List pclLpList=[select id,Quantity__c, LostProduct__r.Name, LostProductMannual__c, PCLLostBrand__r.Lost_By_Company__c, PCLLostBrand__r.Lost_reason_main__c, PCLLostBrand__r.Lost_Reason_Sub__c, PCLLostBrand__r.Lost_By_Company_Mannual__c, PCLLostBrand__r.Agency__r.Name, PCLLostBrand__r.AgencyMannual__c, PCLLostBrand__r.Lost_cancel_report__r.LostType__c, PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c, PCLLostBrand__r.Lost_cancel_report__r.of_lost_system_processor__c,PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c from PCLLostProduct__c where PCLLostBrand__r.Lost_cancel_report__r.Report_Status__c = '批准' and PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c in : oppIdList and LostProduct__c!=null]; // List oppList=new List(); // for (String oppId : oppIdList) { // Opportunity opp=new Opportunity(); // opp.Id=Id.valueOf(oppId); opp.PCLLostBrands__c=''; opp.Agencies__c=''; opp.Lost_Reason_Sub__c='';opp.of_lost_system_processor__c=0; //Id ,品牌,经销商,原因次 // Integer i=0; // List ppList=new List(); //品牌List // List jxsList=new List(); //经销商List // for (PCLLostProduct__c lp : pclLpList) { // if (oppId==lp.PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c) { // if (i==0) { // opp.LostTypeText__c=lp.PCLLostBrand__r.Lost_cancel_report__r.LostType__c; //失单类型 // opp.LostPrices__c=lp.PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c; //失单金额 // // opp.of_lost_system_processor__c=lp.PCLLostBrand__r.Lost_cancel_report__r.of_lost_system_processor__c; //失单主机台数(总) // opp.Lost_reason_main__c=lp.PCLLostBrand__r.Lost_reason_main__c; //失单理由(主) // } // opp.of_lost_system_processor__c+=lp.Quantity__c; //失单主机台数(累加) // if (lp.PCLLostBrand__r.Lost_Reason_Sub__c!=null) { // opp.Lost_Reason_Sub__c=lp.PCLLostBrand__r.Lost_Reason_Sub__c; //失单理由(次) // } // // 失单产品123 start // if (opp.CompetitorProduct1__c==null) { // opp.CompetitorProduct1__c=lp.LostProduct__r.Name; // }else if (opp.CompetitorProduct2__c==null) { // opp.CompetitorProduct2__c=lp.LostProduct__r.Name; // }else if (opp.CompetitorProduct3__c==null) { // opp.CompetitorProduct3__c=lp.LostProduct__r.Name; // } // // 失单产品123 end // //失单品牌 start // if (!ppList.contains(lp.PCLLostBrand__r.Lost_By_Company__c)) { // ppList.add(lp.PCLLostBrand__r.Lost_By_Company__c); // if (ppList.size()==1) { // if (lp.PCLLostBrand__r.Lost_By_Company__c=='其他') { // opp.PCLLostBrands__c+=lp.PCLLostBrand__r.Lost_By_Company_Mannual__c; // }else { // opp.PCLLostBrands__c+=lp.PCLLostBrand__r.Lost_By_Company__c; // } // }else { // if (lp.PCLLostBrand__r.Lost_By_Company__c=='其他') { // opp.PCLLostBrands__c+=','+lp.PCLLostBrand__r.Lost_By_Company_Mannual__c; // }else { // opp.PCLLostBrands__c+=','+lp.PCLLostBrand__r.Lost_By_Company__c; // } // } // } // //失单品牌 end // //经销商 start // if (!jxsList.contains(lp.PCLLostBrand__r.Agency__r.Name)) { // jxsList.add(lp.PCLLostBrand__r.Agency__r.Name); // if (jxsList.size()==1) { // if (lp.PCLLostBrand__r.AgencyMannual__c==null) { // opp.Agencies__c+=lp.PCLLostBrand__r.Agency__r.Name; // }else { // opp.Agencies__c+=lp.PCLLostBrand__r.AgencyMannual__c; // } // }else { // if (lp.PCLLostBrand__r.AgencyMannual__c==null) { // opp.Agencies__c+=','+lp.PCLLostBrand__r.Agency__r.Name; // }else { // opp.Agencies__c+=','+lp.PCLLostBrand__r.AgencyMannual__c; // } // } // } // //经销商 end // i++; // } // } // oppList.add(opp); // system.debug('opp等于'+opp); // } // system.debug('oppList等于'+oppList); // update oppList; // } // 2022-01-18 修改 从失单报告取值 global void execute(Database.BatchableContext BC, List scope) { // List reportIdList=new List();//20230215 lt DB202302247719 注释 Set reportIdList = new Set();//20230215 lt DB202302247719 for (Lost_cancel_report__c report : scope) { // reportIdList.add(report.Id); //20230215 lt DB202302247719 注释 reportIdList.add(report.Opportunity__c); //20230215 lt DB202302247719 } List pclLpList=[select id, // 失单型号id Quantity__c, // 失单数量 LostProductName__c, // 失单对手型号 LostProductMannual__c, // 失单对手型号(手动) PCLLostBrand__r.Lost_By_Company__c, // 失单品牌 PCLLostBrand__r.Lost_reason_main__c, // 失单原因(主) PCLLostBrand__r.Lost_Reason_Sub__c, // 失单原因(次) PCLLostBrand__r.Lost_By_Company_Mannual__c, // 失单品牌(手动) PCLLostBrand__r.Agency__r.Name, // 中标经销商 PCLLostBrand__r.AgencyMannual__c, // 中标经销商(手动) PCLLostBrand__r.Lost_cancel_report__r.LostType__c, // 失单类型 PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c, // 失单总金额 PCLLostBrand__r.Lost_cancel_report__r.TotalAmountLost__c, // 失单总金额(不含税) //20230215 lt DB202302247719 PCLLostBrand__r.Lost_cancel_report__r.of_lost_system_processor__c, // 失单主机台数 PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c from PCLLostProduct__c where PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c in :reportIdList]; //20230215 lt DB202302247719 PCLLostBrand__r.Lost_cancel_report__c ---update--- PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c // 初始化保存参数 Map opp_map = new Map(); Map prod_map = new Map(); Map agency_map = new Map(); // 循环整理数据 for (PCLLostProduct__c lost : pclLpList) { // 判断是否可用数据 // if (String.isBlank(lost.LostProductName__c) && String.isBlank(lost.LostProductMannual__c)) { // continue; // } // 询价id String opp_id = lost.PCLLostBrand__r.Lost_cancel_report__r.Opportunity__c; // 询价 Opportunity opp = opp_map.get(opp_id); if (opp == null) { opp = new Opportunity(); opp.Id = opp_id; opp.of_lost_system_processor__c = 0; opp_map.put(opp_id, opp); } //20230215 lt DB202302247719 start opp.LostPrices__c += lost.PCLLostBrand__r.Lost_cancel_report__r.TotalAmountLost__c; // 失单金额 //DB202302247719 注释 lt 注释原因:DB202302247719课题刷失单报告数据只刷失单金额 // 赋值 // opp.LostTypeText__c = lost.PCLLostBrand__r.Lost_cancel_report__r.LostType__c; // 失单类型 // //opp.LostPrices__c = lost.PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c; // 失单金额 // opp.Lost_reason_main__c = lost.PCLLostBrand__r.Lost_reason_main__c; // 失单原因(主) // opp.Lost_Reason_Sub__c = lost.PCLLostBrand__r.Lost_Reason_Sub__c; // 失单理由(次) // opp.of_lost_system_processor__c += lost.Quantity__c; // 失单主机台数(累加) // 失单产品123 start // if (opp.CompetitorProduct1__c == null) { // opp.CompetitorProduct1__c = lost_product_name(lost.LostProductName__c, lost.LostProductMannual__c); // }else if (opp.CompetitorProduct2__c == null) { // opp.CompetitorProduct2__c = lost_product_name(lost.LostProductName__c, lost.LostProductMannual__c); // }else if (opp.CompetitorProduct3__c == null) { // opp.CompetitorProduct3__c = lost_product_name(lost.LostProductName__c, lost.LostProductMannual__c); // } // 失单产品123 end // 失单品牌 // opp.PCLLostBrands__c = lost_brand_name(opp.PCLLostBrands__c, lost.PCLLostBrand__r.Lost_By_Company__c, lost.PCLLostBrand__r.Lost_By_Company_Mannual__c); // 中标经销商 // opp.Agencies__c = lost_agency_name(opp.Agencies__c, lost.PCLLostBrand__r.Agency__r.Name, lost.PCLLostBrand__r.AgencyMannual__c); //DB202302247719 注释 lt //20230215 lt DB202302247719 end } System.debug(opp_map); StaticParameter.EscapeOppandStaTrigger = true; //20230215 lt DB202302247719 update opp_map.values(); StaticParameter.EscapeOppandStaTrigger = true; //20230215 lt DB202302247719 } // 失单对手型号 private String lost_product_name(String lost_product, String lost_product_mannual) { if (String.isBlank(lost_product) && String.isNotBlank(lost_product_mannual)) { return lost_product_mannual; } return lost_product; } // 失单品牌 private String lost_brand_name(String lost_brand_in_opp, String lost_brand, String lost_brand_mannual) { // 初始化参数 String plus = ''; // 判断 // SWAG-CCC6F6 2022-04-22 ssm start // 询价上都只显示选项列表的值,不需要手动的值 // if ('其他'.equals(lost_brand) && String.isNotBlank(lost_brand_mannual)) { // plus = lost_brand_mannual; // } else { // plus = lost_brand; // } plus = lost_brand; // SWAG-CCC6F6 2022-04-22 ssm end // 初始化返回值 if (String.isBlank(lost_brand_in_opp)) { lost_brand_in_opp = ''; } // 拼接 if (String.isNotBlank(plus) && !lost_brand_in_opp.contains(plus)) { // 增加分隔标识 if (String.isNotBlank(lost_brand_in_opp)) { lost_brand_in_opp += ','; } lost_brand_in_opp += plus; } return lost_brand_in_opp; } // 中标经销商 private String lost_agency_name(String lost_agency_in_opp, String lost_agency, String lost_agency_mannual) { // 初始化参数 String plus = ''; // 判断 // SWAG-CCC6F6 2022-04-22 ssm start // 询价上都只显示选项列表的值,不需要手动的值 // if ('对手经销商'.equals(lost_agency) && String.isNotBlank(lost_agency_mannual)) { // plus = lost_agency_mannual; // } else { // plus = lost_agency; // } plus = lost_agency; // SWAG-CCC6F6 2022-04-22 ssm end // 初始化返回值 if (String.isBlank(lost_agency_in_opp)) { lost_agency_in_opp = ''; } // 拼接 if (String.isNotBlank(plus) && !lost_agency_in_opp.contains(plus)) { // 增加分隔标识 if (String.isNotBlank(lost_agency_in_opp)) { lost_agency_in_opp += ','; } lost_agency_in_opp += plus; } return lost_agency_in_opp; } global void finish(Database.BatchableContext BC) { } } // List IdList=new List{'0061m000003fUz6'}; // Database.executeBatch(new LostCancelReportOppBatch(IdList)); // Database.executeBatch(new LostCancelReportOppBatch());