global without sharing class ConsumAutoSelectBatch implements Database.Batchable<sObject>, Database.Stateful {
|
|
global List<String> emailMessages = new List<String>();
|
global Integer totalCount = 0; // 総処理件数
|
global Integer totalCountDone = 0; // 処理済件数
|
global Integer failedCount = 0; // 処理失敗件数
|
|
Boolean IsNeedExecute = false; // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件
|
|
// 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 start
|
global ConsumAutoSelectBatch( ) {
|
}
|
global ConsumAutoSelectBatch(Boolean NeedExecute) {
|
this.IsNeedExecute = NeedExecute;
|
}
|
// 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 end
|
|
/**
|
* startには、queryを実行、耗材备品申請を検索
|
*/
|
global Database.Querylocator start(Database.BatchableContext bc) {
|
String soql = 'select Id'
|
+ ', Salesdepartment__c'
|
+ ', demo_purpose2__c'
|
+ ' from Consum_Apply__c'
|
+ ' where (Status__c = \'已批准\' OR Status__c = \'已出库指示\')'
|
// + ' and demo_purpose2__c !=\'动物实验\' and demo_purpose2__c !=\'ET展箱\''
|
+ ' and Wei_Shipment_request__c > 0'
|
+ ' and Yi_loaner_arranged__c = 0'
|
+ ' order by Id';
|
return Database.getQueryLocator(soql);
|
}
|
|
global void execute(Database.BatchableContext bc,List<Consum_Apply__c> csmApyList) {
|
totalCount += csmApyList.size();
|
Savepoint sp = Database.setSavepoint();
|
try {
|
List<Consum_Apply_Equipment_Set_Detail__c> selectedData = [SELECT Id
|
, Consum_Apply_Equipment_Set__r.Model_No__c
|
, Consum_Start_Date_After_15_Day__c
|
, Asset__c
|
, Consumable_Guaranteen_end_F__c
|
, Select_Time__c
|
, Consum_Start_Date__c
|
, Shipment_request_time2__c
|
FROM Consum_Apply_Equipment_Set_Detail__c
|
WHERE Consum_Apply__c = :csmApyList
|
AND Cancel_Select__c = false
|
AND Shipment_request_time2__c = null];
|
List<Consum_Apply_Equipment_Set_Detail__c> caesdList = new List<Consum_Apply_Equipment_Set_Detail__c>();
|
|
Boolean haveChangeAss = ConsumDefaultSelectController.reSetAsset(selectedData, caesdList, csmApyList[0], false, true);
|
if (caesdList.size() > 0) {
|
update caesdList;
|
}
|
totalCountDone += csmApyList.size();
|
}
|
catch (Exception e) {
|
emailMessages.add(e.getMessage());
|
failedCount += csmApyList.size();
|
Database.rollback(sp);
|
}
|
}
|
|
global void finish(Database.BatchableContext bc) {
|
String email = UserInfo.getUserEmail();
|
String emailLabel = 'BatchNotify';
|
for (OrgWideEmailAddress tmpEmailObj : [SELECT Id, Address, DisplayName
|
FROM OrgWideEmailAddress
|
WHERE DisplayName like :emailLabel]) {
|
email = tmpEmailObj.Address;
|
}
|
List<String> ccList = new List<String>();
|
String title = '耗材自动分配';
|
for (Consum_Apply_Meta__mdt camd : [SELECT Id
|
, Key__c
|
, ValueLong__c
|
FROM Consum_Apply_Meta__mdt
|
WHERE Package__c = 'ConsumAutoSelectBatch'
|
AND (Key__c = 'ErrorMailAddress'
|
OR Key__c = 'ErrorMailTitle'
|
)
|
ORDER BY Key__c]) {
|
if (camd.Key__c == 'ErrorMailAddress') {
|
if (String.isNotBlank(camd.ValueLong__c)) {
|
ccList.addAll(camd.ValueLong__c.split(','));
|
}
|
}
|
else if (camd.Key__c == 'ErrorMailTitle') {
|
title = camd.ValueLong__c;
|
}
|
}
|
BatchEmailUtil be = new BatchEmailUtil();
|
String[] toList = new String[]{email};
|
if (!(totalCountDone == totalCount && 0 == emailMessages.size())) {
|
be.failedMail(toList, ccList, title,
|
String.join(this.emailMessages, '\n'),
|
totalCount, totalCountDone, failedCount);
|
be.send();
|
}
|
|
//2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 start
|
if(!Test.isRunningTest() &&IsNeedExecute==true){
|
//batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致
|
Id execBTId = Database.executebatch(new SetOlympusCalendarWorkDayBatch(true),200);
|
}
|
//2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 end
|
}
|
|
// 需要 以 申请书单位 调整库存、固定 1
|
public static void run() {
|
Database.executeBatch(new ConsumAutoSelectBatch(), 1);
|
}
|
@TestVisible private static void test() {
|
if (false == Test.isRunningTest()) return;
|
Integer i = 0;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
i++;
|
}
|
}
|