/**************************************************************************************************
|
@Author: 黄千龙
|
@Name: EquipmentCoverageTargetBatch
|
@CreateDate: 22/03/2022
|
@Description: 是否续签率目标(分母)
|
@Version 1.0
|
*****************************************************************************************************/
|
global class EquipmentRenewTargetBatch implements Database.Batchable<sObject>,Database.Stateful {
|
public String query;
|
public Date toDayTime = Date.today();
|
public String OCSM_Period_half;
|
public String OCSM_Period = 'FY'+toDayTime.year();
|
private BatchIF_Log__c iflog;
|
public Date egdTime;
|
public List < String > mcList;
|
global EquipmentRenewTargetBatch() {
|
this.query = query;
|
|
}
|
global EquipmentRenewTargetBatch(List < String > mcList) {
|
this.query = query;
|
this.mcList = mcList;
|
}
|
global Database.QueryLocator start(Database.BatchableContext bc) {
|
iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'PushNotification';
|
iflog.Log__c = 'EquipmentRenewTargetBatch start\n';
|
iflog.ErrorLog__c = '';
|
insert iflog;
|
if (toDayTime.month() >= 4 && toDayTime.month() <= 9) {
|
OCSM_Period_half = '1H';
|
}else{
|
OCSM_Period_half = '2H';
|
}
|
egdTime = Date.newInstance(toDayTime.year()+1,3,1);
|
if (mcList != null && mcList.size() > 0) {
|
// 保有设备不为零件停产
|
query ='select id,Asset__c,Asset__r.Hospital__c,Asset__r.Product2.ServiceCategory__c '
|
+' from Maintenance_Contract_Asset__c where IF_NA_MCA__c = \'1\''
|
+ ' and Asset__r.Product2.ServiceCategory__c != null '
|
+' and Asset__r.IF_StopParts_production__c != \'1\' and Maintenance_Contract__c in :mcList'
|
+' and (Asset__r.Product2.Maintenance_Price_Year__c != 0 and Asset__r.Product2.Maintenance_Price_Year__c != null)';
|
}else{
|
query = 'select id,Asset__c,Asset__r.Hospital__c,Asset__r.Product2.ServiceCategory__c '
|
+' from Maintenance_Contract_Asset__c where IF_NA_MCA__c = \'1\''
|
+ ' and Asset__r.Product2.ServiceCategory__c != null '
|
+'and Asset__r.IF_StopParts_production__c != \'1\''
|
+' and (Asset__r.Product2.Maintenance_Price_Year__c != 0 and Asset__r.Product2.Maintenance_Price_Year__c != null)';
|
}
|
return Database.getQueryLocator(query);
|
}
|
|
global void execute(Database.BatchableContext BC, list<Maintenance_Contract_Asset__c> mcaList) {
|
List<Account_Service_Of_Target__c> asots = new List<Account_Service_Of_Target__c>();
|
List<Id> accIds = new List<Id>();
|
List<Asset> AssetsTarget = new List<Asset>();
|
for (Maintenance_Contract_Asset__c mca : mcaList) {
|
if (!accIds.contains(mca.Asset__r.hospital__c)) {
|
accIds.add(mca.Asset__r.hospital__c);
|
}
|
}
|
|
Map<String,Account_Service_Of_Target__c> targetMap = new Map<String,Account_Service_Of_Target__c>();
|
for(Account_Service_Of_Target__c target:[SELECT Id ,Target_Rigid_Mirror_2__c,Target_Soft_Mirror_2__c,Target_Correlation_Lightsource__c,Account_HP__c,OCSM_Period_half__c
|
FROM Account_Service_Of_Target__c
|
WHERE OCSM_Period_half__c = :OCSM_Period_half
|
AND OCSM_Period__c = :OCSM_Period
|
AND Account_HP__c IN:accIds]){
|
targetMap.put(target.Account_HP__c,target);
|
}
|
|
Set<String> accIdSet = new Set<String>();
|
for (Maintenance_Contract_Asset__c mca : mcaList) {
|
if(!accIdSet.contains(mca.Asset__r.hospital__c)){
|
if(targetMap.containskey(mca.Asset__r.hospital__c)){
|
Account_Service_Of_Target__c asot = targetMap.get(mca.Asset__r.hospital__c);
|
asot.Target_Rigid_Mirror_2__c = 0;
|
asot.Target_Soft_Mirror_2__c = 0;
|
asot.Target_Correlation_Lightsource__c = 0;
|
}else{
|
Account_Service_Of_Target__c asot = new Account_Service_Of_Target__c();
|
asot.Account_HP__c = mca.Asset__r.hospital__c;
|
asot.Coverage_Target_Account__c = true;
|
asot.Target_Rigid_Mirror_2__c = 0;
|
asot.Target_Soft_Mirror_2__c = 0;
|
asot.Target_Correlation_Lightsource__c = 0;
|
asot.OCSM_Period__c = OCSM_Period;
|
asot.OCSM_Period_half__c = OCSM_Period_half;
|
targetMap.put(mca.Asset__r.hospital__c,asot);
|
}
|
accIdSet.add(mca.Asset__r.hospital__c);
|
}
|
mca.Asset__r.IF_Renewalrate_Target_Asset__c = '1';
|
if (!AssetsTarget.contains(mca.Asset__r)) {
|
AssetsTarget.add(mca.Asset__r);
|
}
|
|
|
if (mca.Asset__r.Product2.ServiceCategory__c == '硬性镜') {
|
targetMap.get(mca.Asset__r.hospital__c).Target_Rigid_Mirror_2__c ++;
|
}
|
if(mca.Asset__r.Product2.ServiceCategory__c =='软性镜'){
|
targetMap.get(mca.Asset__r.hospital__c).Target_Soft_Mirror_2__c ++;
|
}
|
if (mca.Asset__r.Product2.ServiceCategory__c == '周边') {
|
targetMap.get(mca.Asset__r.hospital__c).Target_Correlation_Lightsource__c ++;
|
}
|
}
|
|
Oly_TriggerHandler.bypass('AssetTrigger');
|
Oly_TriggerHandler.bypass('AssetHandlerCheck');
|
update AssetsTarget;
|
Oly_TriggerHandler.bypass('NFM701ControllerHandler');
|
Oly_TriggerHandler.bypass('UpdateContractAimAmountHandler');
|
UpSert targetMap.values();
|
}
|
|
global void finish(Database.BatchableContext BC) {
|
iflog.Log__c += '\nEquipmentRenewTargetBatch 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;
|
}
|
}
|