global class AccAssumeChangeBatch implements Database.Batchable<sObject> , Database.AllowsCallouts, Database.Stateful {
|
public List<Account> HospitalIdList;//执行失败手动录入医院
|
Boolean a = true;
|
//执行失败手动录入医院
|
global AccAssumeChangeBatch(List<Account> HospitalIdList) {
|
this.HospitalIdList = HospitalIdList;
|
}
|
global AccAssumeChangeBatch( boolean a) {
|
this.a = a;
|
}
|
// 执行靶器
|
global AccAssumeChangeBatch() {
|
|
}
|
|
global Database.QueryLocator start(Database.BatchableContext bc) {
|
// 检索医院(用来对应其关联的招投标)
|
String query = 'Select Id, Assume_Change__c FROM Account ';
|
if (a) {
|
query += 'Where Assume_Change__c = true';
|
}
|
if (HospitalIdList.size() > 0) {
|
query += ' And Id in : HospitalIdList';
|
}
|
return Database.getQueryLocator(query);
|
}
|
|
global void execute(Database.BatchableContext BC, list<Account> HosinfoList) {
|
List<Tender_information__c> TenInfoList = [Select Id, Hospital__c, Hospital1__c, Hospital2__c, Hospital3__c,
|
Hospital4__c from Tender_information__c
|
Where Hospital__c in: HosinfoList or Hospital1__c in: HosinfoList
|
or Hospital2__c in: HosinfoList or Hospital3__c in: HosinfoList
|
or Hospital4__c in: HosinfoList ];
|
|
if (TenInfoList.size() > 0) {
|
// List<Tender_information__c> failedTenderList = new List<Tender_information__c>();
|
Map<String, String> failedAccountMap = new Map<String, String>();//如果招投标更新失败,用来存更新失败的招投标所关联的医院
|
// 空更新招投标
|
Database.SaveResult[] saveTenderResults = Database.update(TenInfoList, false);
|
// 循环更新结果,取出空更新失败的招投标所对应的医院
|
for (Integer i = 0; i < saveTenderResults.size(); i++) {
|
if (!saveTenderResults.get(i).isSuccess() || System.Test.isRunningTest()) {
|
// failedTenderList.add(TenInfoList.get(i));
|
String HospitalId = TenInfoList.get(i).Hospital__c;
|
String Hospital1Id = TenInfoList.get(i).Hospital1__c;
|
String Hospital2Id = TenInfoList.get(i).Hospital2__c;
|
String Hospital3Id = TenInfoList.get(i).Hospital3__c;
|
String Hospital4Id = TenInfoList.get(i).Hospital4__c;
|
failedAccountMap.put(HospitalId, HospitalId);
|
failedAccountMap.put(Hospital1Id, Hospital1Id);
|
failedAccountMap.put(Hospital2Id, Hospital2Id);
|
failedAccountMap.put(Hospital3Id, Hospital3Id);
|
failedAccountMap.put(Hospital4Id, Hospital4Id);
|
}
|
}
|
List<Account> accsList = new List<Account>();// 用来更新客户信息(担当发生变化)
|
for (Account accs : HosinfoList) {
|
if (!failedAccountMap.containsKey(accs.Id) ) {
|
accs.Assume_Change__c = false;
|
accsList.add(accs);
|
}
|
}
|
if (accsList.size() > 0) {
|
update accsList;
|
}
|
}
|
}
|
|
global void finish(Database.BatchableContext BC) {
|
|
}
|
}
|