global without sharing class TrackConsumableSaleForecastBatch3 implements Database.Batchable{ public Date currentMonth; public Date endDate; public Date lastMonth; public String queryStr; public String recordIdET; public String recordIdENG; //20240308 lwt 出库价,销售状态修改 start public Boolean hisFlag=false; public Boolean onlyETENG=false; //20240308 lwt 出库价,销售状态修改 end public String recordIdC; global TrackConsumableSaleForecastBatch3(Date currentMonth,Date endDate) { this.currentMonth = currentMonth; this.endDate = endDate; Integer year = currentMonth.year(); Integer month = currentMonth.month(); this.currentMonth = Date.newInstance(year, month, 1); if(month == 1){ lastMonth = Date.newInstance(year-1, 12, 1); }else { lastMonth = Date.newInstance(year, month-1, 1); } //20240131 lwt 耗材销量分析维度修改 start this.hisFlag=false; queryStr = 'SELECT Hospital__c,HospitalName__c,ProductModel__c,ThisMonthDeliveryNumber__c,LastShipmentDate__c,Type__c,Key__c FROM TrackConsumableSalesForecast__c WHERE SnapshotMonth__c = :currentMonth '; //20240131 lwt 耗材销量分析维度修改 end } //20240131 lwt 耗材销量分析维度修改 start global TrackConsumableSaleForecastBatch3(Date currentMonth,Date endDate,Boolean hisFlag) { this.currentMonth = currentMonth; this.endDate = endDate; Integer year = currentMonth.year(); Integer month = currentMonth.month(); this.currentMonth = Date.newInstance(year, month, 1); if(month == 1){ lastMonth = Date.newInstance(year-1, 12, 1); }else { lastMonth = Date.newInstance(year, month-1, 1); } this.hisFlag=hisFlag; queryStr = 'SELECT ThisMonthDelivery_Price_IMS__c,Hospital__c,HospitalName__c,ProductModel__c,ThisMonthDeliveryNumber__c,LastShipmentDate__c,Type__c,Key__c FROM TrackConsumableSalesForecast__c WHERE SnapshotMonth__c = :currentMonth '; if(this.hisFlag){ String recordIdC = Schema.SObjectType.TrackConsumableSalesForecast__c.getRecordTypeInfosByDeveloperName().get('ConsumableCategory3').getRecordTypeId(); this.recordIdC=recordIdC; queryStr+= ' AND RecordTypeId=:recordIdC'; } } //20240131 lwt 耗材销量分析维度修改 end //20240308 lwt 出库价,销售状态修改 start global TrackConsumableSaleForecastBatch3(Date currentMonth,Date endDate,Boolean hisFlag,Boolean onlyETENG) { this.currentMonth = currentMonth; this.endDate = endDate; Integer year = currentMonth.year(); Integer month = currentMonth.month(); this.currentMonth = Date.newInstance(year, month, 1); if(month == 1){ lastMonth = Date.newInstance(year-1, 12, 1); }else { lastMonth = Date.newInstance(year, month-1, 1); } this.hisFlag=hisFlag; this.onlyETENG=onlyETENG; queryStr = 'SELECT ThisMonthDelivery_Price_IMS__c,Hospital__c,HospitalName__c,ProductModel__c,ThisMonthDeliveryNumber__c,LastShipmentDate__c,Type__c,Key__c FROM TrackConsumableSalesForecast__c WHERE SnapshotMonth__c = :currentMonth '; if(this.hisFlag&&this.onlyETENG){ String recordIdC = Schema.SObjectType.TrackConsumableSalesForecast__c.getRecordTypeInfosByDeveloperName().get('ConsumableCategory3').getRecordTypeId(); this.recordIdC=recordIdC; queryStr+= ' AND RecordTypeId!=:recordIdC'; } } //20240308 lwt 出库价,销售状态修改 end global Database.QueryLocator start(Database.BatchableContext BC) { return Database.getQueryLocator(queryStr); } global void execute(Database.BatchableContext BC, List scope){ Map tcsfMap = new Map(); for(TrackConsumableSalesForecast__c tcsf : scope){ tcsf.Status__c = '完成'; tcsfMap.put(tcsf.Key__c,tcsf); } //更新过去6月的平均销量及失单预警 Date sixMonthAgo; Date threeMonthAgo; Integer year = currentMonth.year(); Integer month = currentMonth.month(); if(month <= 2){ threeMonthAgo = Date.newInstance(year-1, 10+month, 1); }else { threeMonthAgo = Date.newInstance(year, month-2, 1); } if(month <= 6){ sixMonthAgo = Date.newInstance(year-1, 6+month, 1); }else { sixMonthAgo = Date.newInstance(year, month-6, 1); } //20240131 lwt 耗材销量分析维度修改 List tcsfSixMonthAgoList = [SELECT ThisMonthDelivery_Price_IMS__c,Hospital__c,HospitalName__c,ProductModel__c,ThisMonthDeliveryNumber__c,LastShipmentDate__c,SnapshotMonth__c,Key__c FROM TrackConsumableSalesForecast__c WHERE SnapshotMonth__c >= :sixMonthAgo AND SnapshotMonth__c < :currentMonth AND Key__c IN :tcsfMap.keySet()]; System.debug('tcsfSixMonthAgoList:'+tcsfSixMonthAgoList); for(String key : tcsfMap.keySet()){ System.debug('key:'+key); Decimal sumThreeMonthSales = 0; Decimal sumSixMonthSales = 0; Decimal sumSixMonthSalesIMS = 0;//20240131 lwt 耗材销量分析维度修改 for(TrackConsumableSalesForecast__c tcsf : tcsfSixMonthAgoList){ if(tcsf.Key__c == key){ if(tcsf.SnapshotMonth__c >= threeMonthAgo){ sumThreeMonthSales += tcsf.ThisMonthDeliveryNumber__c; } sumSixMonthSales += tcsf.ThisMonthDeliveryNumber__c; //20240131 lwt 耗材销量分析维度修改 start if(tcsf.ThisMonthDelivery_Price_IMS__c!=null){ sumSixMonthSalesIMS += tcsf.ThisMonthDelivery_Price_IMS__c; } //20240131 lwt 耗材销量分析维度修改 end } } if(sumThreeMonthSales == 0 && tcsfMap.get(key).ThisMonthDeliveryNumber__c == 0){ tcsfMap.get(key).BillLostWarning__c = 1; } if(sumSixMonthSales != 0){ tcsfMap.get(key).LastSixMonthsAverage__c = sumSixMonthSales/6; }else { tcsfMap.get(key).LastSixMonthsAverage__c = 0; } //20240131 lwt 耗材销量分析维度修改 start if(sumSixMonthSalesIMS != 0){ tcsfMap.get(key).LastSixMonthsAverage_Price_IMS__c = sumSixMonthSalesIMS; }else { tcsfMap.get(key).LastSixMonthsAverage_Price_IMS__c = 0; } //20240131 lwt 耗材销量分析维度修改 start } update tcsfMap.values(); } global void finish(Database.BatchableContext BC) { //20240308 lwt 出库价,销售状态修改 start ////20240131 lwt 耗材销量分析维度修改 start //if(this.hisFlag){ // Database.executeBatch(new TrackConsumableSalesDailyBatch(), 100); // Integer year = currentMonth.year(); // Integer month = currentMonth.month(); // Date nextMonth; // if(month == 12){ // nextMonth = Date.newInstance(year+1, 1, 1); // }else { // nextMonth = Date.newInstance(year, month+1, 1); // } // if(currentMonth < endDate){ // Id batjobId = Database.executeBatch(new TrackConsumableSaleForecastBatch1(nextMonth,endDate,this.hisFlag), 200); // } ////20240131 lwt 耗材销量分析维度修改 end //}else{ // Database.executeBatch(new TrackConsumableSalesDailyBatch(), 100); // Integer year = currentMonth.year(); // Integer month = currentMonth.month(); // Date nextMonth; // if(month == 12){ // nextMonth = Date.newInstance(year+1, 1, 1); // }else { // nextMonth = Date.newInstance(year, month+1, 1); // } // if(currentMonth < endDate){ // Id batjobId = Database.executeBatch(new TrackConsumableSaleForecastBatch1(nextMonth,endDate), 200); // } //} if(this.onlyETENG){ Database.executeBatch(new TrackConsumableSalesDailyBatch(), 100); Integer year = currentMonth.year(); Integer month = currentMonth.month(); Date nextMonth; if(month == 12){ nextMonth = Date.newInstance(year+1, 1, 1); }else { nextMonth = Date.newInstance(year, month+1, 1); } if(currentMonth < endDate){ Id batjobId = Database.executeBatch(new TrackConsumableSaleForecastBatch1(nextMonth,endDate,this.hisFLag,this.onlyETENG), 200); } }else if(this.hisFLag){ Id batjobId = Database.executeBatch(new ConsumableTargetManageBatch1(currentMonth,endDate,this.hisFLag), 200); }else{ Id batjobId = Database.executeBatch(new ConsumableTargetManageBatch1(currentMonth,endDate,false), 200); } //20240308 lwt 出库价,销售状态修改 end } }