global class InstallationDateShipmentDate implements Database.Batchable < sObject > { public String query; public List < String > strList; global class InstallationInformationRest { global InstallationInformation InstallationInformation; } global class InstallationInformation { global NFMUtil.Monitoring Monitoring; global InstallationInfo[] InstallationInfo; } global class InstallationInfo { global InstallationInfoH InstallationInfoH; global InstallationInfoI[] InstallationInfoI; } global class InstallationInfoH { global String InquiryNo; // 电子签收单 start global string DeliveryNote; // 电子签收单 end global String InstallationDateH; // 受信しない global String PostingDate; global String CompanyCode; global String DepartmentCode; global String PurposeOfAdvice; global String EntryDate; } global class InstallationInfoI { global String MaterialNo; global Double Quantity; // 受信しない global String SerialNo; global String InstallationDateI; global String ReturnExchangeReplenishMark; // 返品区分、1の場合、レコード削除 global String SLMark; global String GuaranteePeriod; global String GuaranteeType; global String Location; global String PurposeOfAdvice; global String ProvistonPeriod; // 计提年限 } global InstallationDateShipmentDate() { this.query = query; } global InstallationDateShipmentDate(List < String > strList) { this.strList = strList; } global Database.QueryLocator start(Database.BatchableContext bc) { if (strList.size() > 0) { return Database.getQueryLocator([SELECT ID, RowDataFlg__c, Log__c, createdDate__c, Type__c, Log2__c from BatchIF_Log__c where Type__c = 'NFM008' AND RowDataFlg__c = TRUE AND id in : strList ]); } else { return Database.getQueryLocator([SELECT ID, RowDataFlg__c, Log__c, createdDate__c, Type__c, Log2__c from BatchIF_Log__c where Type__c = 'NFM008' AND RowDataFlg__c = TRUE AND createdDate__c >= 2020-12-01 order by createdDate__c ]); } } global void execute(Database.BatchableContext BC, list < BatchIF_Log__c > scope) { List < InstallationInfo > installationInfoList = new List < InstallationInfo > (); Map < String, String > productSerialNumberMap = new Map < String, String > (); for (BatchIF_Log__c rowData: scope) { String rowDataStr = rowData.Log__c; installationInfoList = (List < InstallationInfo > ) JSON.deserialize(rowDataStr, List < InstallationInfo > .class); } for (InstallationInfo Installation: installationInfoList) { if (Installation.InstallationInfoI != null) { for (InstallationInfoI infoI: Installation.InstallationInfoI) { if (String.isNotBlank(infoI.MaterialNo) && String.isNotBlank(infoI.SerialNo) && String.isNotBlank(infoI.InstallationDateI)) { String str = infoI.MaterialNo + ':' + infoI.SerialNo; productSerialNumberMap.put(str, infoI.InstallationDateI); } } } } System.debug('==================productSerialNumberMap ====================='+productSerialNumberMap); List < String > backStrIdList = new List < String > (); Map < String, Statu_Achievements__c > statuAchievementsMap = new Map < String, Statu_Achievements__c > (); List < Asset > assetList = [select Id, InstallDate, Backorder__c, Backorder__r.Actual_Installation_Day__c, Product_Serial_No__c, SerialNumber from Asset where Product_Serial_No__c in : productSerialNumberMap.keySet() ]; Map < String, String > statuAchMap = new Map < String, String > (); for (Asset ass: assetList) { backStrIdList.add(ass.Backorder__c); String strDate = productSerialNumberMap.get(ass.Product_Serial_No__c); statuAchMap.put(ass.Backorder__c, strDate); if (ass.Backorder__r.Actual_Installation_Day__c == null) { Statu_Achievements__c statuAch = new Statu_Achievements__c(); statuAch.id = ass.Backorder__c; statuAch.Actual_Installation_Day__c = NFMUtil.parseStr2Date(strDate, false); statuAchievementsMap.put(statuAch.id, statuAch); } } if (statuAchievementsMap.size() > 0) { update statuAchievementsMap.values(); } List < Statu_Achievements_DN__c > statuSqlList = [ select id, InstallDate__c, Statu_Achievements__c from Statu_Achievements_DN__c where Statu_Achievements__c in : backStrIdList ]; for (Statu_Achievements_DN__c statu: statuSqlList) { statu.InstallDate__c = NFMUtil.parseStr2Date(statuAchMap.get(statu.Statu_Achievements__c), false); } update statuSqlList; } global void finish(Database.BatchableContext BC) {} }