// 20211129 ljh  排队和现有出借数据的对应关系
global class RentalQueueShippmentDateBatch implements Database.Batchable<sObject> {
    public String query;

    global RentalQueueShippmentDateBatch() {
        this.query = query;
    }

    global Database.QueryLocator start(Database.BatchableContext bc) {
        query = 'select id,name,NextShippmentDate__c ';
        // 型号   Fixture_Model_No_F__c  备品存放地(借出时)Internal_asset_location_before__c所在地区(本部) 借出时Salesdepartment_before__c  备品分类(借出时)Equipment_Type_text__c产品分类(GI/SP)(借出时)Product_category_text__c
        query += ' ,Asset_return_Day__c,Lost_item_check_OK__c,Inspection_result_after_OK__c,Fixture_Model_No_F__c,Internal_asset_location_before__c,Salesdepartment_before__c,Equipment_Type_text__c,Product_category_text__c ';
        query += ' from Rental_Apply_Equipment_Set_Detail__c where Is_Body__c = true and DeliverySlip__c != null and Arrival_in_wh__c = false ';
        query += ' and RA_RecordTypeId__c != \''+System.label.RARrecordtype+'\'';
        query += ' and Inspection_result_after_F_New__c != \'NG\'';
        query += ' and NextShippmentDate__c != null';
        query += ' and Rental_Apply_Equipment_Set__r.Received_Confirm__c != \'NG\' and Check_lost_Item_F__c != \'欠品\' and Check_lost_Item_F__c != \'消耗\' ';
        query += ' order by NextShippmentDate__c';
        return Database.getQueryLocator(query);
    }

    global void execute(Database.BatchableContext BC, list<Rental_Apply_Equipment_Set_Detail__c> scope) {
        Map<String,List<Rental_Apply_Equipment_Set_Detail__c>> keyRaedMap = new Map<String,List<Rental_Apply_Equipment_Set_Detail__c>>();
        Map<String,List<Rental_Apply_Sequence__c>> keySequenceMap = new Map<String,List<Rental_Apply_Sequence__c>>();
        List<Rental_Apply_Equipment_Set__c> upRaeList = new List<Rental_Apply_Equipment_Set__c>();
        for(Rental_Apply_Equipment_Set_Detail__c raed:scope){
            String ukey = raed.Fixture_Model_No_F__c+raed.Internal_asset_location_before__c+raed.Salesdepartment_before__c+raed.Equipment_Type_text__c+raed.Product_category_text__c;
            if(!keyRaedMap.containsKey(ukey)){
                keyRaedMap.put(ukey,new List<Rental_Apply_Equipment_Set_Detail__c>());
            }
            keyRaedMap.get(ukey).add(raed); 
        }
        List<Rental_Apply_Sequence__c> applySeriesList = [SELECT Id,ExternalKey__c,Demo_Purpose2__c,
                                                        Apply_Set_Detail__c,Apply_Set_Detail_ExternalKey__c,
                                                        Series_No__c,Salesdepartment__c,Product_category__c,
                                                        Rental_Apply__c,Internal_asset_location__c,
                                                        Apply_Set_Detail__r.Queue_Number__c,
                                                        Apply_Set_Detail__r.Rental_Apply_Equipment_Set__c,
                                                        Series_Unequal_Queue_Flag__c,
                                                        Fixture_Model_No__c,Equipment_Type__c
                                                        FROM Rental_Apply_Sequence__c
                                                        WHERE Invalid_Flag__c = false 
                                                        AND ExternalKey__c IN:keyRaedMap.keySet() 
                                                        AND Apply_Set_Detail__r.Rental_Apply_Equipment_Set__r.QueueShippmentDate__c = null order by ExternalKey__c ASC NULLS LAST , Series_No__c ASC NULLS LAST];
        for(Rental_Apply_Sequence__c ras:applySeriesList){
            String ukey = ras.ExternalKey__c;
            if(!keySequenceMap.containsKey(ukey)){
                keySequenceMap.put(ukey,new List<Rental_Apply_Sequence__c>());
            }
            keySequenceMap.get(ukey).add(ras); 
        }
        Map<String,String> mapDId = new Map<String,String>();// 已经一对一的明细Id
        for(String key:keyRaedMap.keySet()){
            if(keySequenceMap.containsKey(key)){
                List<Rental_Apply_Sequence__c> rasList= keySequenceMap.get(key);// 关键字的list
                List<Rental_Apply_Equipment_Set_Detail__c> raedList = keyRaedMap.get(key);// 有预计的List
                Integer raedSize = raedList.size();
                Integer connectI = 0;
                if(raedSize > 0){
                    for(Rental_Apply_Sequence__c ras:rasList){
                        if(raedSize > connectI){
                            Rental_Apply_Equipment_Set__c temp = new Rental_Apply_Equipment_Set__c();
                            if(mapDId.containsKey(ras.Apply_Set_Detail__c)){
                                continue;
                            }else{
                                // 排队备品预计出库时间  QueueShippmentDate__c
                                // 排队备品回寄日 Asset_return_Day__c
                                // 排队备品欠品OK时间  Lost_item_check_OK__c
                                // 排队备品预计明细    QueueDetail__c
                                // 排队备品检测OK时间   Inspection_result_after_OK__c
                                mapDId.put(ras.Apply_Set_Detail__c,ras.Apply_Set_Detail__c);
                                temp.Id = ras.Apply_Set_Detail__r.Rental_Apply_Equipment_Set__c;
                                temp.QueueShippmentDate__c = raedList[connectI].NextShippmentDate__c;
                                temp.Asset_return_Day__c = raedList[connectI].Asset_return_Day__c;
                                temp.Lost_item_check_OK__c = raedList[connectI].Lost_item_check_OK__c;
                                temp.Inspection_result_after_OK__c = raedList[connectI].Inspection_result_after_OK__c;
                                temp.QueueDetail__c = raedList[connectI].Id;
                                connectI+=1;
                            }
                            upRaeList.add(temp);
                        }else{
                            break;
                        }
                    }
                }
            } 
        }
        if(upRaeList.size() > 0){
            System.debug('zheli~upRaeList:'+upRaeList);
            update upRaeList;
        }
        
    }

    global void finish(Database.BatchableContext BC) {
        if(System.Test.isRunningTest()){
           test(); 
        }
        Database.executeBatch(new RentalQueueShippmentDateSumBatch(),50);
    }
    @TestVisible private static void test() {
        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++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}