//耗材销售状态
|
//每月跑
|
global class ConsumableTargetManageBatch1 implements Database.Batchable<sObject> {
|
public Date currentMonth;
|
public Date tcsEndDate;
|
public Date tcsStartDate;
|
public Date endDate;
|
public Date startDate;
|
public String queryStr;
|
public Boolean hisFlag;
|
global ConsumableTargetManageBatch1(Date startDate,Date endDate,Boolean hisFlag) {
|
//当年
|
this.startDate=startDate;
|
this.endDate=endDate;
|
this.hisFlag=hisFlag;
|
this.tcsStartDate=startDate;
|
this.tcsEndDate=endDate;
|
this.currentMonth=startDate;
|
Integer year = startDate.year();
|
Integer FYear = year;
|
if(startDate>=Date.newInstance(year, 4, 1)){
|
FYear = year+1;
|
}
|
queryStr = 'SELECT ';
|
queryStr += ' FY_SaleStatus_Formula_'+FYear+'__c,';
|
queryStr += ' BillLostWarning__c,Thisyear_SaleStatus_formula__c,Consumable_Category1__c,Hospital__c,Consumable_Category2__c,Consumable_Category3__c,SnapshotMonth__c FROM TrackConsumableSalesForecast__c WHERE Consumable_Category3__c!= \'\' AND recordType.Name=\'目标耗材\' And SnapshotMonth__c = :tcsStartDate ';
|
}
|
|
global Database.QueryLocator start(Database.BatchableContext bc) {
|
return Database.getQueryLocator(queryStr);
|
}
|
|
global void execute(Database.BatchableContext BC, list<TrackConsumableSalesForecast__c> scope) {
|
Integer year = startDate.year();
|
Integer FYear = year;
|
if(startDate>=Date.newInstance(year, 5, 1)){
|
FYear = year+1;
|
}
|
String OCSMYear= 'FY'+FYear;
|
|
|
Set<String> ctmKeySet=new Set<String>();
|
Map<String,List<TrackConsumableSalesForecast__c>> tcsMap = new Map<String,List<TrackConsumableSalesForecast__c>>();
|
|
for(TrackConsumableSalesForecast__c tcs:scope){
|
String key = tcs.Consumable_Category2__c+'-'+tcs.Consumable_Category3__c+'-'+tcs.Hospital__c+'-'+tcs.Consumable_Category1__c;
|
ctmKeySet.add(tcs.Hospital__c+'-'+tcs.Consumable_Category2__c+'-'+tcs.Consumable_Category3__c+'-'+OCSMYear);
|
if(tcsMap.containsKey(key)){
|
tcsMap.get(key).add(tcs);
|
}else{
|
List<TrackConsumableSalesForecast__c> tcsList = new List<TrackConsumableSalesForecast__c>();
|
tcsList.add(tcs);
|
tcsMap.put(key,tcsList);
|
}
|
}
|
//List<ConsumableTargetManage__c> ctmList= [SELECT ConsumableTargetManageKey__c,Hospital__r.Name,productType__c,Hospital__c,OCM_Year__c,Category3__c,Category4__c FROM ConsumableTargetManage__c WHERE OCM_Year__c = :OCSMYear AND ConsumableTargetManageKey__c in :ctmKeySet];
|
String sql='SELECT ConsumableTargetManageKey__c,Hospital__r.Name,productType__c,Hospital__c,OCM_Year__c,Category3__c,Category4__c FROM ConsumableTargetManage__c WHERE OCM_Year__c = :OCSMYear AND ConsumableTargetManageKey__c in :ctmKeySet';
|
|
ApexPages.StandardSetController con= new ApexPages.StandardSetController(Database.getQueryLocator(sql));
|
List<ConsumableTargetManage__c> ctmList=(List<ConsumableTargetManage__c>) con.getRecords();
|
for(ConsumableTargetManage__c ctm:ctmList){
|
String key=ctm.Category3__c+'-'+ctm.Category4__c+'-'+ctm.Hospital__c+'-'+ctm.productType__c;
|
if(tcsMap.containsKey(key)){
|
List<TrackConsumableSalesForecast__c> tcsList=tcsMap.get(key);
|
String statu='';
|
Date lastDate=Date.newInstance(FYear-1, 4, 1);
|
for(TrackConsumableSalesForecast__c tcs:tcsList){
|
if(tcs.SnapshotMonth__c>=lastDate){
|
lastDate=tcs.SnapshotMonth__c;
|
ctm.ConsumableSalesState__c=(String)tcs.get('FY_SaleStatus_Formula_'+FYear+'__c');
|
ctm.BillLostWarning__c=(tcs.BillLostWarning__c==1);
|
}
|
}
|
}
|
}
|
|
if(ctmList.size()>0){
|
update ctmList;
|
}
|
|
|
}
|
|
global void finish(Database.BatchableContext BC) {
|
//if(this.hisFlag){
|
// Id batjobId = Database.executeBatch(new TrackConsumableSaleForecastBatch3(currentMonth,endDate,this.hisFlag), 200);
|
//}else{
|
// Id batjobId = Database.executeBatch(new TrackConsumableSaleForecastBatch3(currentMonth,endDate), 200);
|
//}
|
//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);
|
}
|
}
|
}
|
}
|