public with sharing class CurrentFYMoneyTmsBatch implements Database.Batchable { String query; String accid; public CurrentFYMoneyTmsBatch() {} public CurrentFYMoneyTmsBatch(String accid) { this.accid = accid; } public Database.QueryLocator start(Database.BatchableContext BC) { query = 'SELECT id,Intra_Trade_List_RMB__c,Consumable_Category3__c,Consumable_Category2__c,Product_Type__c,Deliver_date__c,Used_account__r.Agent_Ref__c,Used_account__c,Used_Account_Type__c ' + 'FROM Consumable_order_details2__c where id !=null and Inventory_Status__c = \'经销商库存\' and Deliver_date__c >=2024-01-01 ' ; if (accid !=null) { query += ' and Used_account__c = :accid'; } return Database.getQueryLocator(query); } public void execute(Database.BatchableContext BC, List DcList) { Map map1= new Map(); List accList = new List(); for (Consumable_order_details2__c dc : DcList) { if (dc.Intra_Trade_List_RMB__c !=0 && dc.Intra_Trade_List_RMB__c !=null) { String key = ''; Integer year = dc.Deliver_date__c.year(); Integer month = dc.Deliver_date__c.month(); if (dc.Used_Account_Type__c == '契約') { key = dc.Used_account__r.Agent_Ref__c+'-'+year+'-'+month; if (!accList.contains(dc.Used_account__r.Agent_Ref__c)) { accList.add(dc.Used_account__r.Agent_Ref__c); } }else if(dc.Used_Account_Type__c == '販売店'){ key = dc.Used_account__c+'-'+year+'-'+month; if (!accList.contains(dc.Used_account__c)) { accList.add(dc.Used_account__c); } } if (!map1.containsKey(key)) { map1.put(key, dc.Intra_Trade_List_RMB__c); }else { Double money = map1.get(key); money += dc.Intra_Trade_List_RMB__c; map1.put(key, money); } } } system.debug('map1='+map1); system.debug('accList='+accList); List dcmList = [select id,FY__c,Dealer_Name__c,FY_I_1__c,FY_I_10__c,FY_I_11__c,FY_I_12__c,FY_I_2__c,FY_I_3__c,FY_I_4__c,FY_I_5__c,FY_I_6__c,FY_I_7__c,FY_I_8__c,FY_I_9__c from Dealer_ConsumableManage__c where Dealer_Name__c in :accList]; List updateList = new List(); for (Dealer_ConsumableManage__c dc : dcmList) { integer startIndex = dc.FY__c.indexOf('FY'); String year = dc.FY__c.substring(startIndex+2, startIndex+6); Dealer_ConsumableManage__c dc1 = new Dealer_ConsumableManage__c(); dc1.id = dc.id; for (Integer i=1;i<=12;i++) { String key = dc.Dealer_Name__c+'-'+year+'-'+i; if (map1.containsKey(key)) { Double money = map1.get(key); if (i==1) { dc1.FY_I_1__c = money; } if (i==11) { dc1.FY_I_11__c = money; } if (i==12) { dc1.FY_I_12__c = money; } if (i==10) { dc1.FY_I_10__c = money; } if (i==2) { dc1.FY_I_2__c = money; } if (i==3) { dc1.FY_I_3__c = money; } if (i==4) { dc1.FY_I_4__c = money; } if (i==5) { dc1.FY_I_5__c = money; } if (i==6) { dc1.FY_I_6__c = money; } if (i==7) { dc1.FY_I_7__c = money; } if (i==8) { dc1.FY_I_8__c = money; } if (i==9) { dc1.FY_I_9__c = money; } } } updateList.add(dc1); } if (updateList.size()>0) { update updateList; } } public void finish(Database.BatchableContext BC) {} }