global class SparePartsSequencingBatch implements Database.Batchable { //有参无参构造 start execute finish global Date startDate; //排序开始日期 global Date endDate; //排序结束日期 public String OCSMProvince; // global SparePartsSequencingBatch(){ // } // 带年月的构造参数,用来刷历史数据的 // global SparePartsSequencingBatch(Integer year, Integer month) { // startDate = Date.newInstance(year, month, 1); // endDate = startDate.addMonths(1); // } // // OSCM管理省 // global SparePartsSequencingBatch(String OCSMProvince){ // this.OCSMProvince = OCSMProvince; // } // // 带年月和OSCM管理省的构造函数 // global SparePartsSequencingBatch(Integer year, Integer month, String OCSMProvince) { // startDate = Date.newInstance(year, month, 1); // endDate = startDate.addMonths(1); // this.OCSMProvince = OCSMProvince; // } global SparePartsSequencingBatch(Date startat, Date endat){ startDate = startat; endDate = endat; } global SparePartsSequencingBatch(Date startat, Date endat, String province){ startDate = startat; endDate = endat; OCSMProvince = province; } global Database.QueryLocator start(Database.BatchableContext BC) { String sql = 'select name from OCM_Management_Province__c'; if(String.isNotBlank(OCSMProvince)){ sql += ' Where name =: OCSMProvince'; } return Database.getQueryLocator(sql); } // global void execute(Database.BatchableContext BC, List ompList) { // System.debug('lt123ompList(初始)'+ompList); // List ocsmList = new List(); // for(OCM_Management_Province__c omp : ompList){ // ocsmList.add(omp.name); // } // // Date today = Date.today(); // // Integer year = today.year(); // // Integer month = today.month() - 1; // // 开始 结束日期 // if(startDate == null) { // // 上个月 // Date outdate = Date.today().addMonths(-1); // // 确保开始日期是1号,结束日期是下月1号 // startDate = Date.newInstance(outdate.year(), outdate.month(), 1); // endDate = startDate.addMonths(1); // } // if(ocsmList.size()>0){ // List opdList = [Select Id, OPDPlanOCM_man_province__c, Deliver_Index__c, Bollowdate__c, // Approved_Index__c, SparePartsAppDate__c // From OPDPlan__c // Where OPDPlanOCM_man_province__c in: ocsmList // AND ((Bollowdate__c >=: startDate And Bollowdate__c <: endDate) // OR (SparePartsAppDate__c >=: startDate And SparePartsAppDate__c <: endDate))]; // //Map,按照OCSM管理省分类 // Set outList1 = new Set(); // Set appList1 = new Set(); // Map> outMap = new Map>(); //出库 // Map> appMap = new Map>(); //审批 // for(OPDPlan__c opd : opdList){ // //备品出库优先度 // if(opd.Bollowdate__c != null){ // outList1.add(opd.OPDPlanOCM_man_province__c); // if(outMap.containsKey(opd.OPDPlanOCM_man_province__c)){ // outMap.get(opd.OPDPlanOCM_man_province__c).add(opd); // }else{ // List appList = new List(); //上个月批准日不为空的opd计划 // appList.add(opd); // outMap.put(opd.OPDPlanOCM_man_province__c, appList); // } // // Integer outyear = opd.Bollowdate__c.year(); // // Integer outmonth = opd.Bollowdate__c.month(); // // if(year == outyear && month == outmonth){ // // } // } // System.debug('lt123outMap备品出库>'+outMap); // //备品审批优先度 // System.debug('lt123+opd.SparePartsAppDate__c+test---'+opd.SparePartsAppDate__c); // if(opd.SparePartsAppDate__c != null){ // appList1.add(opd.OPDPlanOCM_man_province__c); // if(appMap.containsKey(opd.OPDPlanOCM_man_province__c)){ // appMap.get(opd.OPDPlanOCM_man_province__c).add(opd); // }else{ // List appList = new List(); //上个月出库日不为空的opd计划 // appList.add(opd); // appMap.put(opd.OPDPlanOCM_man_province__c, appList); // } // // Integer appyear = opd.SparePartsAppDate__c.year(); // // Integer appmonth = opd.SparePartsAppDate__c.month(); // // if(year == appyear && month == appmonth){ // // } // } // System.debug('lt123appMap备品审批>'+appMap); // } // //出库--冒泡排序 // List outList2 = new List(); // for(string out : outList1){ // if(outMap.get(out) != null){ // Integer len = outMap.get(out).size(); // for(Integer i = 0 ; i < len - 1 ; i++){ // for(Integer j = 0 ; j < len - 1 - i ; j++){ // if(outMap.get(out)[j].Bollowdate__c > outMap.get(out)[j + 1].Bollowdate__c){ // OPDPlan__c temp = outMap.get(out)[j + 1]; // outMap.get(out)[j + 1] = outMap.get(out)[j]; // outMap.get(out)[j] = temp; // } // } // } // //赋值 排序 // for(Integer i = 0 ; i < len ; i++){ // outMap.get(out)[i].Deliver_Index__c = i + 1; // } // outList2.addAll(outMap.get(out)); // System.debug('lt123outMap备品出库(排序后)'+outMap.get(out)); // } // } // update outList2; // System.debug('lt123outList2备品出库(更新后)'+outList2); // //审批--冒泡排序 // List appList2 = new List(); // for(string app : appList1){ // if(appMap.get(app) != null){ // Integer len1 = appMap.get(app).size(); // for(Integer i = 0 ; i < len1 - 1 ; i++){ // for(Integer j = 0 ; j < len1 - 1 - i ; j++){ // if(appMap.get(app)[j].SparePartsAppDate__c > appMap.get(app)[j + 1].SparePartsAppDate__c){ // OPDPlan__c temp = appMap.get(app)[j + 1]; // appMap.get(app)[j + 1] = appMap.get(app)[j]; // appMap.get(app)[j] = temp; // } // } // } // //赋值 排序 // for(Integer i = 0 ; i < len1 ; i++){ // appMap.get(app)[i].Approved_Index__c = i + 1; // } // appList2.addAll(appMap.get(app)); // System.debug('lt123appMap备品审批(排序后)'+appMap.get(app)); // } // } // update appList2; // System.debug('lt123appList2备品审批(更新后)'+appList2); // } // } global void execute(Database.BatchableContext BC, List ompList) { System.debug('lt123ompList'+ompList); List ocsmList = new List(); for(OCM_Management_Province__c omp : ompList){ ocsmList.add(omp.name); } // 待更新的OPD计划 Map mapUpdate = new Map(); // 先做发货优先 // 按发货日排序 不用管省份 String sql1 = 'Select Id, OPDPlanOCM_man_province__c, Deliver_Index__c, Bollowdate__c, Approved_Index__c, SparePartsAppDate__c From OPDPlan__c Where Bollowdate__c >= :startDate And Bollowdate__c < :endDate'; if (ocsmList != null && ocsmList.size() > 0) { sql1 += ' And OPDPlanOCM_man_province__c in :ocsmList'; } // if(String.isNotBlank(OCSMProvince)){ // sql1 += ' And OPDPlanOCM_man_province__c =: OCSMProvince Order By Bollowdate__c'; // }else{ // sql1 += ' Order By Bollowdate__c'; // } sql1 += ' Order By Bollowdate__c'; List checkList1 = Database.query(sql1); System.debug('lt123sql1(备品出库sql语句)'+sql1); System.debug('lt123checkList1(备品出库OPD计划)'+checkList1); // List checkList1 = [Select Id, OPDPlanOCM_man_province__c, Deliver_Index__c, Bollowdate__c, // Approved_Index__c, SparePartsAppDate__c // From OPDPlan__c // Where Bollowdate__c >= :startDate And Bollowdate__c < :endDate // Order By Bollowdate__c]; if (checkList1 != null && checkList1.size() > 0) { checkList1 = setSort(checkList1, 1); for (OPDPlan__c opd : checkList1) { mapUpdate.put(opd.Id, opd); } } // 再做审批日排序 不用管省份 String sql2 = 'Select Id, OPDPlanOCM_man_province__c, Deliver_Index__c, Bollowdate__c, Approved_Index__c, SparePartsAppDate__c From OPDPlan__c Where SparePartsAppDate__c >= :startDate And SparePartsAppDate__c < :endDate'; if (ocsmList != null && ocsmList.size() > 0) { sql2 += ' And OPDPlanOCM_man_province__c in :ocsmList'; } // if(String.isNotBlank(OCSMProvince)){ // sql2 += ' And OPDPlanOCM_man_province__c =: OCSMProvince Order By SparePartsAppDate__c'; // }else{ // sql2 += ' Order By SparePartsAppDate__c'; // } sql2 += ' Order By SparePartsAppDate__c'; List checkList2 = Database.query(sql2); System.debug('lt123sql2(备品审批sql语句)'+sql2); System.debug('lt123checkList2(备品审批OPD计划)'+checkList2); // List checkList2 = [Select Id, OPDPlanOCM_man_province__c, Deliver_Index__c, Bollowdate__c, // Approved_Index__c, SparePartsAppDate__c // From OPDPlan__c // Where SparePartsAppDate__c >= :startDate And SparePartsAppDate__c < :endDate // Order By SparePartsAppDate__c]; if (checkList2 != null && checkList2.size() > 0) { checkList2 = setSort(checkList2, 2); for (OPDPlan__c opd : checkList2) { OPDPlan__c opdInMap = mapUpdate.get(opd.Id); if (opdInMap == null) { mapUpdate.put(opd.Id, opd); } else { opdInMap.Approved_Index__c = opd.Approved_Index__c; } } } if (mapUpdate.size() > 0) { update mapUpdate.values(); } } // 写序号操作 private List setSort(List opdList, Integer sortType) { // 初始化参数 // <省份, 当前序号> Map ProvinceSort = new Map(); // 循环写序号 for (OPDPlan__c opd : opdList) { // 取对应省份的当前序号 Integer SortNumber = ProvinceSort.get(opd.OPDPlanOCM_man_province__c); // 判断省份是否已记录 if (SortNumber == null) { SortNumber = 0; } // 序号加算;赋值;存入映射 SortNumber += 1; if (sortType == 1) { opd.Deliver_Index__c = SortNumber; } else { opd.Approved_Index__c = SortNumber; } ProvinceSort.put(opd.OPDPlanOCM_man_province__c, SortNumber); } return opdList; } global void finish(Database.BatchableContext BC) { // 2022/01/04 从OPDPlanMarkBatchSchedule里挪过来的 // 这里以及OPDPlanMarkBatchSchedule的修改先不上线 // 数据确认没有问题之后,从2022/01月底的拍照开始修改 // Id execBTId = Database.executebatch(new OPDPlanSystemDelayBatch(), 100); } }