global class EquipmentRenewBatch implements Database.Batchable<sObject>,Database.Stateful {
|
public String query;
|
public Date toDayTime = Date.today();
|
public Date start_date1 ;
|
public Date end_date1 ;
|
public Date start_date2 ;
|
public Date end_date2 ;
|
public Date deadlineTime;
|
private BatchIF_Log__c iflog;
|
|
|
global EquipmentRenewBatch() {
|
this.query = '';
|
iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'PushNotification';
|
iflog.Log__c = 'EquipmentRenewBatch start\n';
|
iflog.ErrorLog__c = '';
|
insert iflog;
|
}
|
|
global Database.QueryLocator start(Database.BatchableContext bc) {
|
if (toDayTime.month() >= 4 && toDayTime.month() <= 9) {
|
this.start_date1 = Date.newInstance(toDayTime.year()-1,4,1);
|
this.end_date1 = Date.newInstance(toDayTime.year()-1,12,31);
|
this.start_date2 = Date.newInstance(toDayTime.year(),1,1);
|
this.end_date2 = Date.newInstance(toDayTime.year(),6,30);
|
this.deadlineTime = Date.newInstance(toDayTime.year(),3,31);
|
}else{
|
this.start_date1 = Date.newInstance(toDayTime.year()-1,10,1);
|
this.end_date1 = Date.newInstance(toDayTime.year(),6,30);
|
this.start_date2 = Date.newInstance(toDayTime.year(),7,1);
|
this.end_date2 = Date.newInstance(toDayTime.year(),12,31);
|
this.deadlineTime = Date.newInstance(toDayTime.year(),9,30);
|
}
|
query+='select Id,(select Id,CurrentContract__c,CurrentContract__r.Contract_End_Date__c,CurrentContract__r.Contract_Start_Date__c,CurrentContract__r.New_Contract_TypeF_Text__c,Product2.ServiceCategory__c,CurrentContract__r.Status__c'
|
+ ' from Asset_Hospital__r where CurrentContract__r.Contract_End_Date__c >= :start_date1 and CurrentContract__r.Contract_End_Date__c <= :end_date2)'
|
+ ' from Account';
|
|
return Database.getQueryLocator(query);
|
}
|
global void execute(Database.BatchableContext BC, list<Account> Accounts) {
|
List<Account_Service_Of_Target__c> asotList = new List<Account_Service_Of_Target__c>();
|
|
|
for (Account acc : Accounts) {
|
Account_Service_Of_Target__c asot = new Account_Service_Of_Target__c();
|
List<Asset> AssetsTarget = new List<Asset>();
|
List<Asset> AssetsReal = new List<Asset>();
|
// 实际续签数:设备数
|
Integer mirror_1 = 0;
|
// 续签目标:设备数
|
Integer mirror_2 = 0;
|
for (Asset ass : acc.Asset_Hospital__r) {
|
// 分子
|
//1. 设备关联的合同类型是“续签合同” 2. 在2023年3月31日前系统生效完毕
|
if (ass.CurrentContract__r.Contract_End_Date__c <= Date.newInstance(toDayTime.year()+1,3,31) && ass.CurrentContract__r.New_Contract_TypeF_Text__c == '续签合同') {
|
// 标记为是否续签实际设备
|
ass.IF_Renewalrate_Real_Asset__c = '1';
|
AssetsReal.add(ass);
|
mirror_1++;
|
}
|
// 分母
|
/*1H考核对象: 1)、2021.4.1-2021.12.31合同结束且截止2022.3.31未续签的设备;
|
2)、2022.1.1-2022.6.30合同结束,不论该设备是否续签
|
2H考核对象: 1)、2021.10.1-2022.6.30合同结束且截止2022.9.30未续签的设备;
|
2)、2022.7.1-2022.12.31 合同结束,不论该设备是否续签
|
*/
|
Boolean result = true;
|
if (ass.Product2.ServiceCategory__c != null) {
|
if (ass.CurrentContract__r.Contract_End_Date__c>=start_date1&&ass.CurrentContract__r.Contract_End_Date__c<=end_date1){
|
if (ass.CurrentContract__c == null || ass.CurrentContract__r.Status__c == '合同结束') {
|
ass.IF_Renewalrate_Target_Asset__c = '1';
|
AssetsTarget.add(ass);
|
result = false;
|
mirror_2++;
|
}
|
if (result) {
|
if (ass.CurrentContract__r.Contract_Start_Date__c <= deadlineTime) {
|
ass.IF_Renewalrate_Target_Asset__c = '1';
|
AssetsTarget.add(ass);
|
mirror_2++;
|
}
|
}
|
}
|
if (ass.CurrentContract__r.Contract_End_Date__c>=start_date2&&ass.CurrentContract__r.Contract_End_Date__c<=end_date2) {
|
ass.IF_Renewalrate_Target_Asset__c = '1';
|
AssetsTarget.add(ass);
|
mirror_2++;
|
}
|
}
|
if (AssetsReal!=null) {
|
try {
|
update AssetsReal;
|
}
|
catch (Exception e) {
|
iflog.ErrorLog__c += 'ERROR'+'['+'update AssetsReal:'+']'+e.getMessage()+'\n';
|
}
|
}
|
if (AssetsTarget!=null) {
|
try {
|
update AssetsTarget;
|
}
|
catch (Exception e) {
|
iflog.ErrorLog__c += 'ERROR'+'['+'update AssetsTarget:'+']'+e.getMessage()+'\n';
|
}
|
}
|
}
|
asot.Account_HP__c = acc.id;
|
// asot.Finish_Asset__c = mirror_1;
|
// asot.AssetContinueTaget__c = mirror_2;
|
// asotList.add(asot);
|
}
|
// if (asotList!=null) {
|
// try {
|
// insert asotList;
|
// }
|
// catch (Exception e) {
|
// iflog.ErrorLog__c += 'ERROR'+'['+'insert asotList:'+']'+e.getMessage()+'\n';
|
// }
|
// }
|
}
|
|
global void finish(Database.BatchableContext BC) {
|
iflog.Log__c += '\nEquipmentRenewBatch end';
|
String tmp = iflog.ErrorLog__c;
|
if (tmp.length() > 65000) {
|
tmp = tmp.substring(0, 65000);
|
tmp += ' ...have more lines...';
|
iflog.ErrorLog__c = tmp;
|
}
|
update iflog;
|
}
|
}
|