global with sharing class OTCLogisticsBatch implements Database.Batchable, Database.AllowsCallouts{ public String query; public String sodn; global OTCLogisticsBatch() { this.query = query; } global OTCLogisticsBatch(String sodn) { this.query = query; this.sodn = sodn; } global Database.QueryLocator start(Database.BatchableContext bc) { // 获取发货DN 中DN安装日期 不为空 query = 'select id,name from Statu_Achievements_DN__c where InstallDate__c = null and CreatedDate >= LAST_N_DAYS:30'; if (sodn != null && sodn != '') { query += ' And Name = :sodn'; } // query += ' limit 50'; System.debug('执行的SQL为:'+query); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list SadList) { // 存储 cn 号 List cnList = new List(); for (Statu_Achievements_DN__c i : SadList) { cnList.add(i.name.subString(2)); } System.debug('打印数据:'+cnList); // 通过cn号到OTS物流运货单再进行一次数据过滤 List statusList = new List{'已签收', '签收异常', '已作废', '已合并', '已完成'}; // List waybillList = [select id,name,waybill_number__c,waybill_status__c from waybill__c where waybill_number__c in :cnList and waybill_status__c NOT IN :statusList]; List waybillList = [select id,name,waybill_number__c,waybill_status__c from waybill__c]; // 通过过滤后的订单号去请求接口用于获取最新物流状态 System.debug('打印已有的数据:'+waybillList); Map wmap = new Map(); for (waybill__c w : waybillList) { wmap.put(w.waybill_number__c,w.waybill_status__c); } List slist = new List(); for (String c : cnList) { String value = wmap.get(c); if (value == null) { slist.add(c); System.debug('添加的数据:'+c); }else { if (!statusList.contains(value)) { slist.add(c); System.debug('更新数据:'+c); }else { System.debug('没有要更新的数据'); } } } if (slist.size()>0) { for (String s : slist) { NFM118Controller.executefuture('',s); } } } global void finish(Database.BatchableContext BC) { } }