| trigger ConsumableOrderDetail2Trigger on Consumable_order_details2__c (after insert, after update, after delete) { | 
|     Set<String> orderSet = new Set<String>(); | 
|      | 
|     if (StaticParameter.EscapeOrderDetail2Trigger) { | 
|         return ; | 
|     } | 
|     if (trigger.isInsert){ | 
|         for (Consumable_order_details2__c local : Trigger.New) {          | 
|             if (local.Consumable_order_minor__c!=null &&  | 
|                 local.Dealer_Returned__c == false) | 
|             orderSet.add(local.Consumable_order_minor__c); | 
|         } | 
|     } | 
|   | 
|     if (trigger.isUpdate){ | 
|         for (Consumable_order_details2__c local : Trigger.New) {          | 
|             //if (local.Consumable_order_minor__c!=null && | 
|             //    local.Dealer_Arrive__c != Trigger.oldMap.get(local.Id).get('Dealer_Arrive__c')) | 
|             if (local.Consumable_order_minor__c!=null) orderSet.add(local.Consumable_order_minor__c); | 
|         } | 
|     } | 
|   | 
|     if (trigger.isDelete){ | 
|         for (Consumable_order_details2__c local : Trigger.old) { | 
|             if (local.Consumable_order_minor__c!=null) orderSet.add(local.Consumable_order_minor__c); | 
|         } | 
|     } | 
|   | 
|          | 
|     if (orderSet.size()>0){ | 
|         // 2018年8月9日 HWAG-B3D9UV  替换 SQL start by 张玉山 | 
|         list<Consumable_order_details2__c> allresults =  | 
|         [SELECT Consumable_order_minor__c, Deliver_date__c,  | 
|             Dealer_Returned__c, Dealer_Arrive__c, RemoveBox_No__c,Cancellation_Date__c | 
|             FROM Consumable_order_details2__c | 
|              WHERE Consumable_order_minor__c in :orderSet ]; | 
|         // 2018年8月9日 HWAG-B3D9UV  end by 张玉山 | 
|          | 
|         // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值 start by 张玉山 | 
|         map<string,Integer> orderSetResults =  new map<string,Integer>(); | 
|         for(Consumable_order_details2__c results1 : allresults){ | 
|             if(results1.Dealer_Arrive__c == false || results1.Dealer_Returned__c== true | 
|                 || (results1.RemoveBox_No__c !=null &&  results1.RemoveBox_No__c !=1)){ | 
|                 continue; | 
|             } | 
|             string Consumable_order_minor_str = String.valueOf(results1.Consumable_order_minor__c); | 
|   | 
|             if(orderSetResults.containsKey(Consumable_order_minor_str)){ | 
|                 orderSetResults.put(Consumable_order_minor_str, | 
|                     orderSetResults.get(Consumable_order_minor_str)+1); | 
|             }else{ | 
|                 orderSetResults.put(Consumable_order_minor_str,1); | 
|             } | 
|         } | 
|   | 
|         List<Consumable_Order__c> consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for (String strOrder:orderSet){ | 
|             Integer cnt =0; | 
|             for (string key : orderSetResults.keySet()) { | 
|                 if(key.equals(strOrder)){ | 
|                     cnt = orderSetResults.get(key); | 
|                     break; | 
|                 } | 
|             } | 
|   | 
|             Consumable_Order__c consumableOrder = new Consumable_Order__c(); | 
|             consumableOrder.Id = strOrder; | 
|             consumableOrder.OrderNumber_arrived__c = cnt; | 
|             consumableOrderlist.add(consumableOrder); | 
|         } | 
|         // 2018年8月9日 HWAG-B3D9UV 替换下面原有SQL 使用 map 完成赋值 end end by 张玉山 | 
|          | 
|         /* 2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 start by 张玉山 | 
|         AggregateResult[] results = [SELECT Consumable_order_minor__c,count(Id) cnt  | 
|                                      FROM Consumable_order_details2__c  | 
|                                      WHERE Consumable_order_minor__c in :orderSet  | 
|                                      AND Dealer_Arrive__c = true  | 
|                                      AND Dealer_Returned__c= false  | 
|                                      AND (RemoveBox_No__c=null or RemoveBox_No__c=1) | 
|                                      group by Consumable_order_minor__c]; | 
|   | 
|         List<Consumable_Order__c> consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for (String strOrder:orderSet){ | 
|             Integer cnt =0; | 
|             for(AggregateResult ar: results){ | 
|                  if(String.valueOf(ar.get('Consumable_order_minor__c')) == strOrder){ | 
|                     cnt = Integer.valueOf(ar.get('cnt')); | 
|                     break; | 
|                  } | 
|             } | 
|             Consumable_Order__c consumableOrder = new Consumable_Order__c(); | 
|             consumableOrder.Id = strOrder; | 
|             consumableOrder.OrderNumber_arrived__c = cnt; | 
|             consumableOrderlist.add(consumableOrder); | 
|         } | 
|         2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 end by 张玉山 | 
|         */ | 
|         if (consumableOrderlist.size() > 0){ | 
|            update consumableOrderlist; | 
|         } | 
|   | 
|         //更新消耗品订单的发货日期 | 
|         // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值  start by 张玉山 | 
|         Set<string> resultsKeySet =  new Set<String>(); | 
|         map<string,Date> DeliverdateResults =  new map<string,Date>();//最新发货时间 | 
|         map<string,Date> DeliverdateminResults =  new map<string,Date>();//最早发货时间 | 
|         for(Consumable_order_details2__c results1 : allresults){ | 
|             if(results1.Dealer_Arrive__c == true || results1.Dealer_Returned__c== true){ | 
|                 continue; | 
|             } | 
|             string Consumable_order_minor_str = String.valueOf(results1.Consumable_order_minor__c); | 
|             if(DeliverdateResults.containsKey(Consumable_order_minor_str)){ | 
|                 if(DeliverdateResults.get(Consumable_order_minor_str) | 
|                     < results1.Deliver_date__c | 
|                     ){ | 
|                     DeliverdateResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|                     resultsKeySet.add(Consumable_order_minor_str); | 
|                 } | 
|             }else{ | 
|                 DeliverdateResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|                 resultsKeySet.add(Consumable_order_minor_str); | 
|             } | 
|             //获取最早发货时间 pk part1 start | 
|             if(DeliverdateminResults.containsKey(Consumable_order_minor_str)){ | 
|                 if(DeliverdateminResults.get(Consumable_order_minor_str) | 
|                     > results1.Deliver_date__c | 
|                     ){ | 
|                     DeliverdateminResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|                     resultsKeySet.add(Consumable_order_minor_str); | 
|                 } | 
|             }else{ | 
|                 DeliverdateminResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|                 resultsKeySet.add(Consumable_order_minor_str); | 
|             } | 
|             //获取最早发货时间 pk part1 end | 
|         } | 
|          | 
|         //两个DeliverdateResults.keySet(),DeliverdateminResults.keySet() 合并作为一个List ,遍历List | 
|         //获取最早发货时间 pk part2 start | 
|         consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for(string temp : resultsKeySet){ | 
|             Consumable_Order__c consumableOrder1 = new Consumable_Order__c(); | 
|             consumableOrder1.Id = temp; | 
|             if(DeliverdateResults.get(temp)!=null){ | 
|                 consumableOrder1.Shipment_Date__c = DeliverdateResults.get(temp); | 
|             } | 
|             if(DeliverdateminResults.get(temp)!=null){ | 
|                 consumableOrder1.First_Delivery__c = DeliverdateResults.get(temp); | 
|             } | 
|             consumableOrderlist.add(consumableOrder1); | 
|         } | 
|          | 
|         //获取最早发货时间 pk part2 end | 
|         // List<Consumable_Order__c> consumableOrderminlist = new List<Consumable_Order__c>();//最早发货时间 | 
|         // for (string key : DeliverdateminResults.keySet()) { | 
|         //    if(DeliverdateminResults.get(key)!=null){ | 
|         //         Consumable_Order__c consumableOrder1 = new Consumable_Order__c(); | 
|         //         consumableOrder1.Id = key; | 
|         //         consumableOrder1.First_Delivery__c = DeliverdateResults.get(key); | 
|         //         consumableOrderminlist.add(consumableOrder1); | 
|         //     } | 
|         // } | 
|          | 
|         // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值  end by 张玉山 | 
|          | 
|         //获取早发货日期 start | 
|         // system.debug('DeliverdateResults==============' + DeliverdateResults); | 
|         // system.debug('走到最早发货日期'); | 
|         // map<string,Date> DeliverdateminResults =  new map<string,Date>(); | 
|         // for(Consumable_order_details2__c results1 : allresults){ | 
|         //     if(results1.Dealer_Arrive__c == true || results1.Dealer_Returned__c== true){ | 
|         //         continue; | 
|         //     } | 
|         //     string Consumable_order_minor_str = String.valueOf(results1.Consumable_order_minor__c); | 
|         //     if(DeliverdateminResults.containsKey(Consumable_order_minor_str)){ | 
|         //         if(DeliverdateminResults.get(Consumable_order_minor_str) | 
|         //             > results1.Deliver_date__c | 
|         //             ){ | 
|         //                 DeliverdateminResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|         //         } | 
|   | 
|         //     }else{ | 
|         //         DeliverdateminResults.put(Consumable_order_minor_str,results1.Deliver_date__c); | 
|         //     } | 
|         // } | 
|         // List<Consumable_Order__c> consumableOrderminlist = new List<Consumable_Order__c>(); | 
|         // for (string key : DeliverdateminResults.keySet()) { | 
|         //    if(DeliverdateminResults.get(key)!=null){ | 
|         //         Consumable_Order__c consumableOrder1 = new Consumable_Order__c(); | 
|         //         consumableOrder1.Id = key; | 
|         //         consumableOrder1.First_Delivery__c = DeliverdateResults.get(key); | 
|         //         consumableOrderminlist.add(consumableOrder1); | 
|         //     } | 
|         // } | 
|   | 
|         // if(consumableOrderminlist.size() > 0){ | 
|         //     update consumableOrderminlist;  | 
|         // } | 
|         // system.debug('DeliverdateResults==============' + DeliverdateResults); | 
|         // //获取最早发货日期 end | 
|   | 
|         /* 2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 start by 张玉山 | 
|         AggregateResult[] results1 = [SELECT Consumable_order_minor__c,max(Deliver_date__c) Deliver_date__c | 
|                                       FROM Consumable_order_details2__c  | 
|                                       WHERE Consumable_order_minor__c in :orderSet  | 
|                                       AND Dealer_Arrive__c = false  | 
|                                       AND Dealer_Returned__c= false  | 
|                                       group by Consumable_order_minor__c]; | 
|   | 
|         consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for(AggregateResult ar: results1){ | 
|             if (ar.get('Deliver_date__c')!=null){ | 
|                 Consumable_Order__c consumableOrder1 = new Consumable_Order__c(); | 
|                 consumableOrder1.Id =String.valueOf(ar.get('Consumable_order_minor__c')); | 
|                 consumableOrder1.Shipment_Date__c = Date.valueOf(ar.get('Deliver_date__c')); | 
|                 consumableOrderlist.add(consumableOrder1); | 
|             } | 
|         } | 
|         2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 end by 张玉山 */ | 
|         if (consumableOrderlist.size() > 0){ | 
|            update consumableOrderlist; | 
|         } | 
|          | 
|         //更新待确认收货数量 | 
|         // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值  start by 张玉山 | 
|         map<string,Integer> resultsMap2 =  new map<string,Integer>(); | 
|         for(Consumable_order_details2__c results1 : allresults){ | 
|             if(results1.Dealer_Arrive__c == true || results1.Dealer_Returned__c== true || | 
|                 results1.Cancellation_Date__c!=null){ | 
|                 continue; | 
|             } | 
|             string Consumable_order_minor_str = String.valueOf(results1.Consumable_order_minor__c); | 
|             if(resultsMap2.containsKey(Consumable_order_minor_str)){ | 
|                     resultsMap2.put(Consumable_order_minor_str, | 
|                         resultsMap2.get(Consumable_order_minor_str)+1); | 
|             }else{ | 
|                 resultsMap2.put(Consumable_order_minor_str,1); | 
|             } | 
|         } | 
|         consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for (String strOrder:orderSet){ | 
|             Integer cnt =0; | 
|             for (string key : resultsMap2.keySet()) { | 
|                 if(key.equals(strOrder)){ | 
|                     cnt = resultsMap2.get(key); | 
|                     break; | 
|                 } | 
|             } | 
|   | 
|             Consumable_Order__c consumableOrder2 = new Consumable_Order__c(); | 
|             consumableOrder2.Id = strOrder; | 
|             consumableOrder2.Delivery_detail_count__c = cnt; | 
|             consumableOrderlist.add(consumableOrder2); | 
|         } | 
|   | 
|         // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值  end by 张玉山 | 
|      | 
|         /* 2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 start by 张玉山 | 
|         AggregateResult[] results2 = [SELECT Consumable_order_minor__c,count(Id) cnt  | 
|                                       FROM Consumable_order_details2__c  | 
|                                       WHERE Consumable_order_minor__c in :orderSet  | 
|                                       AND Dealer_Arrive__c = false | 
|                                       AND Dealer_Returned__c= false | 
|                                       AND Cancellation_Date__c = null   | 
|                                       group by Consumable_order_minor__c]; | 
|   | 
|         consumableOrderlist = new List<Consumable_Order__c>(); | 
|         for (String strOrder:orderSet){ | 
|             Integer cnt =0; | 
|             for(AggregateResult ar: results2){ | 
|                  if(String.valueOf(ar.get('Consumable_order_minor__c')) == strOrder){ | 
|                     cnt = Integer.valueOf(ar.get('cnt')); | 
|                     break; | 
|                  } | 
|             } | 
|             Consumable_Order__c consumableOrder2 = new Consumable_Order__c(); | 
|             consumableOrder2.Id = strOrder; | 
|             consumableOrder2.Delivery_detail_count__c = cnt; | 
|             consumableOrderlist.add(consumableOrder2); | 
|         } | 
|         2018年8月9日 HWAG-B3D9UV  原有SQL 与赋值 end by 张玉山 */ | 
|         if (consumableOrderlist.size() > 0){ | 
|            update consumableOrderlist; | 
|         } | 
|     } | 
|   | 
|     // 2018年8月9日 HWAG-B3D9UV  获取所有的record ID start by 张玉山 | 
|     List<RecordType> allrtList = [select Id,DeveloperName from RecordType where SobjectType = 'Consumable_orderdetails__c']; | 
|     // 2018年8月9日 HWAG-B3D9UV  获取所有的record ID end by 张玉山 | 
|     //到货和返品时,生成或修改消费品订货明细 | 
|     Set<String> arrivedSet = new Set<String>(); | 
|     Set<String> returnSet = new Set<String>(); | 
|     if (trigger.isUpdate || trigger.isInsert || trigger.isDelete){ | 
|         if (trigger.isUpdate || trigger.isInsert){ | 
|             for (Consumable_order_details2__c detail2 : Trigger.New) { | 
|                 Consumable_order_details2__c oldDetail2 = null; | 
|                 if (Trigger.isUpdate) oldDetail2 = Trigger.oldMap.get(detail2.Id); | 
|                 if (detail2.Consumable_Arrived_order__c != null) { | 
|                     arrivedSet.add(detail2.Consumable_Arrived_order__c); | 
|                 } | 
|   | 
|                 if ((oldDetail2 == null || oldDetail2.Consumable_Return_order__c == null) && detail2.Consumable_Return_order__c != null) { | 
|                     returnSet.add(detail2.Consumable_Return_order__c); | 
|                 } | 
|             } | 
|         } | 
|         if (trigger.isDelete){ | 
|             for (Consumable_order_details2__c det2 : Trigger.old) {                             | 
|                 if (det2.Consumable_Arrived_order__c != null) { | 
|                     arrivedSet.add(det2.Consumable_Arrived_order__c); | 
|                 } | 
|   | 
|                 if (det2.Consumable_Return_order__c != null) { | 
|                     returnSet.add(det2.Consumable_Return_order__c); | 
|                 } | 
|             } | 
|         } | 
|         System.debug('arrivedSet +++++' + arrivedSet); | 
|     // 2018年8月14日 HWAG-B3D9UV 在进行NFM110处理时 跳过arrivedset  start by 张玉山 | 
|         if (StaticParameter.EscapeConsumableOrderDetail2Trigger) { | 
|         return ; | 
|         } | 
|     // 2018年8月14日 HWAG-B3D9UV 在进行NFM110处理时 跳过arrivedset  start by 张玉山 | 
|         if (arrivedSet.size() > 0) { | 
|             Map<Id, Consumable_order__c> arrivedMap = new Map<Id, Consumable_order__c>([select Id, RecordType.DeveloperName, Name from Consumable_order__c where Id in :arrivedSet]); | 
|             List<Consumable_orderdetails__c> detail1List = [select Id, Name, Asset_Model_No__c, Consumable_count__c, Consumable_order__c from Consumable_orderdetails__c where Consumable_order__c in :arrivedSet]; | 
|             Map<String,Consumable_orderdetails__c> detail1Map = new Map<String,Consumable_orderdetails__c>(); | 
|             for (Consumable_orderdetails__c detail1 : detail1List) { | 
|                 String key = '' + detail1.Consumable_order__c + detail1.Asset_Model_No__c; | 
|                 detail1Map.put(key, detail1); | 
|             } | 
|   | 
|             arrivedSet.clear(); | 
|             for (Consumable_order__c arrivedCo : arrivedMap.values()) { | 
|                 if (arrivedCo.RecordType.DeveloperName == 'Arrive') { | 
|                     arrivedSet.add(arrivedCo.Id); | 
|                 } | 
|             } | 
|   | 
|             AggregateResult[] results = [select Consumable_Arrived_order__c, Asset_Model_No__c, count(bar_code__c) recordCount  | 
|                                          from Consumable_order_details2__c  | 
|                                          where Consumable_Arrived_order__c in :arrivedSet  | 
|                                          and Dealer_Arrive__c = true | 
|                                          //and Dealer_Returned__c <> true | 
|                                          AND (RemoveBox_No__c=null or RemoveBox_No__c=1)  | 
|                                          group by Consumable_Arrived_order__c, Asset_Model_No__c]; | 
|             Map<String, Integer> keyCount = new Map<String, Integer>(); | 
|              | 
|             for(AggregateResult ar: results){                | 
|                 String key = '' + ar.get('Consumable_Arrived_order__c') + ar.get('Asset_Model_No__c'); | 
|                 keyCount.put(key, Integer.valueOf(ar.get('recordCount'))); | 
|             } | 
|             // 2018年8月9日 HWAG-B3D9UV  替代下面SQL select start by 张玉山 | 
|             List<RecordType> rtList = new List<RecordType>(); | 
|             for(RecordType rtl : allrtList){ | 
|                 if('Detail1_Arrival'.equals(rtl.DeveloperName)){ | 
|                     rtList.add(rtl); | 
|                 } | 
|             } | 
|             // 2018年8月9日 HWAG-B3D9UV  替代下面SQL select end by 张玉山 | 
|   | 
|             /* 2018年8月9日 HWAG-B3D9UV  原获取 recordtype start by 张玉山 | 
|             List<RecordType> rtList = [select Id from RecordType where DeveloperName = 'Detail1_Arrival' and SobjectType = 'Consumable_orderdetails__c']; | 
|              2018年8月9日 HWAG-B3D9UV  原获取 recordtype end by 张玉山 */ | 
|             Id recordTypeId = null; | 
|             if (rtList.size() > 0) recordTypeId = rtList[0].Id; | 
|   | 
|             results = [select Consumable_order__c, count(Id) noCount  | 
|                        from Consumable_orderdetails__c  | 
|                        where Consumable_order__c in :arrivedSet  | 
|                        group by Consumable_order__c]; | 
|             System.debug('results +++++' + results); | 
|             Map<Id, Integer> noCount = new Map<Id, Integer>(); | 
|             for(AggregateResult ar: results){ | 
|                 noCount.put((Id)ar.get('Consumable_order__c'), Integer.valueOf(ar.get('noCount'))); | 
|             } | 
|             System.debug('noCount +++++' + noCount); | 
|             Map<String, Consumable_orderdetails__c> upsertMap = new Map<String, Consumable_orderdetails__c>(); | 
|             Map<String, Consumable_orderdetails__c> deletetMap = new Map<String, Consumable_orderdetails__c>(); | 
|             Map<String, String> assetModelNoMap = new Map<String, String>(); | 
|             if (trigger.isUpdate || trigger.isInsert){ | 
|                 for (Consumable_order_details2__c detail2 : Trigger.New) {   | 
|                     //Dataloaderで初期在庫登録をしたあと、データ修正が入ったときに明細1が更新されない。 | 
|                     //if (trigger.isUpdate && detail2.ManualRegisteredStock__c == true) continue;                   | 
|                     if (detail2.Consumable_Arrived_order__c == null) continue; | 
|                     String key = '' + detail2.Consumable_Arrived_order__c + detail2.Asset_Model_No__c; | 
|                     //if (upsertMap.get(key) != null) continue; | 
|                     Integer count = keyCount.get(key); | 
|                     Consumable_orderdetails__c detail1 = detail1Map.get(key); | 
|   | 
|                     if (detail1 == null) detail1 = new Consumable_orderdetails__c(); | 
|                     detail1.Consumable_Arrivecount__c = count; | 
|                     if (detail1.Id == null) { | 
|                         Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c); | 
|                         Integer index = noCount.get(co.Id); | 
|                         if (index == null) index = 0; | 
|                         if(assetModelNoMap.containsKey(detail2.Asset_Model_No__c)){ | 
|                             continue; | 
|                         }else{ | 
|                             assetModelNoMap.put(detail2.Asset_Model_No__c, detail2.Asset_Model_No__c); | 
|                             noCount.put(co.Id, index + 1); | 
|                         } | 
|                         noCount.put(co.Id, index + 1); | 
|                         String newName = co.Name+'-'; | 
|                         System.debug('index +++++' + index); | 
|                         if (index < 99) { | 
|                             newName += '0'; | 
|                         } | 
|                         if (index < 9) { | 
|                             newName += '0'; | 
|                         } | 
|                         newName += String.valueOf(index + 1); | 
|                         System.debug('newName +++++' + newName); | 
|                         detail1.Name = newName; | 
|                         //detail1.Asset_Model_No__c = detail2.Asset_Model_No__c; | 
|                         detail1.Consumable_product__c = detail2.Consumable_product__c; | 
|                         detail1.Consumable_order__c = co.Id; | 
|                         detail1.RecordTypeId = recordTypeId; | 
|                         //detail1.Consumable_principal__c = co.Id; | 
|                         detail1.Intra_Trade_List_RMB__c = detail2.Intra_Trade_List_RMB__c; | 
|                          | 
|                     } | 
|                     upsertMap.put(key, detail1); | 
|                 } | 
|             } | 
|   | 
|             if (trigger.isUpdate){                | 
|                 for (Consumable_order_details2__c detail2 : Trigger.old) {  | 
|                     //Dataloaderで初期在庫登録をしたあと、データ修正が入ったときに明細1が更新されない。   | 
|                     //if (detail2.ManualRegisteredStock__c == true) continue;                   | 
|                     if (detail2.Consumable_Arrived_order__c == null) continue; | 
|                     String key = '' + detail2.Consumable_Arrived_order__c + detail2.Asset_Model_No__c;                     | 
|                     //if (upsertMap.get(key) != null) continue; | 
|                     Integer count = keyCount.get(key);                | 
|                     Consumable_orderdetails__c detail1 = detail1Map.get(key); | 
|                     if ((count == null || count ==0) && detail1 !=null){                       | 
|                         //delete detail1; | 
|                         deletetMap.put(key,detail1); | 
|                         continue; | 
|                     } | 
|                     if (detail1 == null) continue; | 
|                     detail1.Consumable_Arrivecount__c = count; | 
|   | 
|                     if (detail1.Id == null) { | 
|                             Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c); | 
|                             Integer index = noCount.get(co.Id); | 
|                             if (index == null) index = 0; | 
|                             System.debug('indexUp +++++' + index); | 
|                             noCount.put(co.Id, index + 1); | 
|                             System.debug('noCountUp +++++' + noCount); | 
|                             String newName = co.Name+'-'; | 
|                             if (index < 99) { | 
|                                 newName += '0'; | 
|                             } | 
|                             if (index < 9) { | 
|                                 newName += '0'; | 
|                             } | 
|                             newName += String.valueOf(index + 1); | 
|                             System.debug('newNameUp +++++' + newName); | 
|                             detail1.Name = newName; | 
|                             //detail1.Asset_Model_No__c = detail2.Asset_Model_No__c; | 
|                             detail1.Consumable_product__c = detail2.Consumable_product__c; | 
|                             detail1.Consumable_order__c = co.Id; | 
|                             detail1.RecordTypeId = recordTypeId; | 
|                             //detail1.Consumable_principal__c = co.Id; | 
|                             detail1.Intra_Trade_List_RMB__c = detail2.Intra_Trade_List_RMB__c; | 
|                          | 
|                          | 
|                     } | 
|                     upsertMap.put(key, detail1); | 
|                 } | 
|             } | 
|   | 
|             if (trigger.isDelete){ | 
|                 for (Consumable_order_details2__c detail2 : Trigger.old) { | 
|                     if (detail2.Consumable_Arrived_order__c == null) continue; | 
|                     String key = '' + detail2.Consumable_Arrived_order__c + detail2.Asset_Model_No__c; | 
|                     //if (upsertMap.get(key) != null) continue; | 
|                     Integer count = keyCount.get(key); | 
|                     Consumable_orderdetails__c detail1 = detail1Map.get(key); | 
|                     if ((count == null || count ==0) && detail1 !=null){                       | 
|                         //delete detail1; | 
|                         deletetMap.put(key,detail1); | 
|                         continue; | 
|                     } | 
|                     if (detail1 == null) detail1 = new Consumable_orderdetails__c(); | 
|                     detail1.Consumable_Arrivecount__c = count; | 
|   | 
|                     if (detail1.Id == null) { | 
|                         Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c); | 
|                         Integer index = noCount.get(co.Id); | 
|                         if (index == null) index = 0; | 
|                         noCount.put(co.Id, index + 1); | 
|                         String newName = co.Name+'-'; | 
|                         if (index < 99) { | 
|                             newName += '0'; | 
|                         } | 
|                         if (index < 9) { | 
|                             newName += '0'; | 
|                         } | 
|                         newName += String.valueOf(index + 1); | 
|                         detail1.Name = newName; | 
|                         //detail1.Asset_Model_No__c = detail2.Asset_Model_No__c; | 
|                         detail1.Consumable_product__c = detail2.Consumable_product__c; | 
|                         detail1.Consumable_order__c = co.Id; | 
|                         detail1.RecordTypeId = recordTypeId; | 
|                         //detail1.Consumable_principal__c = co.Id; | 
|                         detail1.Intra_Trade_List_RMB__c = detail2.Intra_Trade_List_RMB__c; | 
|                          | 
|                     } | 
|                     upsertMap.put(key, detail1); | 
|                 } | 
|             } | 
|   | 
|             Database.upsert(upsertMap.values(), true); | 
|             if(deletetMap.size()>0){ | 
|                 Database.delete(deletetMap.values(),true); | 
|             } | 
|   | 
|         } | 
|     } | 
|         // 2018年8月14日 HWAG-B3D9UV 在进行NFM110处理时 跳过returnSet  start by 张玉山 | 
|   | 
|     if (trigger.isUpdate || trigger.isInsert){ | 
|         if (StaticParameter.EscapeConsumableOrderDetail2Trigger) { | 
|         return ; | 
|     } | 
|     // 2018年8月14日 HWAG-B3D9UV 在进行NFM110处理时 跳过returnSet  start by 张玉山 | 
|         if (returnSet.size() > 0) { | 
|             Map<Id, Consumable_order__c> returnMap = new Map<Id, Consumable_order__c>([select Id, RecordType.DeveloperName, Name from Consumable_order__c where Id in :returnSet]); | 
|             List<Consumable_orderdetails__c> detail1List = [select Id, Name, Asset_Model_No__c, Consumable_count__c, Consumable_order__c from Consumable_orderdetails__c where Consumable_order__c in :returnSet]; | 
|             Map<String,Consumable_orderdetails__c> detail1Map = new Map<String,Consumable_orderdetails__c>(); | 
|              | 
|             for (Consumable_orderdetails__c detail1 : detail1List) { | 
|                 String key = '' + detail1.Consumable_order__c + detail1.Asset_Model_No__c; | 
|                 detail1Map.put(key, detail1); | 
|             } | 
|   | 
|             returnSet.clear(); | 
|             for (Consumable_order__c returnCo : returnMap.values()) { | 
|                 if (returnCo.RecordType.DeveloperName == 'ReturnGoods') { | 
|                     returnSet.add(returnCo.Id); | 
|                 } | 
|             } | 
|   | 
|             AggregateResult[] results = [select Consumable_Return_order__c, Asset_Model_No__c, count(Id) recordCount  | 
|                                          from Consumable_order_details2__c  | 
|                                          where Consumable_Return_order__c in :returnSet  | 
|                                          and Dealer_Returned__c = true  | 
|                                          group by Consumable_Return_order__c, Asset_Model_No__c]; | 
|             Map<String, Integer> keyCount = new Map<String, Integer>(); | 
|             for(AggregateResult ar: results){ | 
|                 String key = '' + ar.get('Consumable_Return_order__c') + ar.get('Asset_Model_No__c'); | 
|                 keyCount.put(key, Integer.valueOf(ar.get('recordCount'))); | 
|             } | 
|   | 
|             // 2018年8月9日 HWAG-B3D9UV  替代下面SQL select start by 张玉山 | 
|             List<RecordType> rtList = new List<RecordType>(); | 
|             for(RecordType rtl : allrtList){ | 
|                 if('Detail1_ReturnGoods'.equals(rtl.DeveloperName)){ | 
|                     rtList.add(rtl); | 
|                 } | 
|             } | 
|             // 2018年8月9日 HWAG-B3D9UV  替代下面SQL select end by 张玉山 | 
|   | 
|             /* 2018年8月9日 HWAG-B3D9UV  原获取 recordtype start by 张玉山 | 
|             List<RecordType> rtList = [select Id from RecordType where DeveloperName = 'Detail1_ReturnGoods' and SobjectType = 'Consumable_orderdetails__c']; | 
|              2018年8月9日 HWAG-B3D9UV  原获取 recordtype end by 张玉山 */ | 
|   | 
|             Id recordTypeId = null; | 
|             if (rtList.size() > 0) recordTypeId = rtList[0].Id; | 
|   | 
|             results = [select Consumable_order__c, count(Id) noCount  | 
|                        from Consumable_orderdetails__c  | 
|                        where Consumable_order__c in :returnSet  | 
|                        group by Consumable_order__c]; | 
|             Map<Id, Integer> noCount = new Map<Id, Integer>(); | 
|             for(AggregateResult ar: results){ | 
|                 noCount.put((Id)ar.get('Consumable_order__c'), Integer.valueOf(ar.get('noCount'))); | 
|             } | 
|   | 
|             Map<String, Consumable_orderdetails__c> upsertMap = new Map<String, Consumable_orderdetails__c>(); | 
|             Map<String, Integer> updatedSaleCount = new Map<String, Integer>(); | 
|             Set<Id> updatedSaleId = new Set<Id>(); | 
|             Map<String, Integer> updatedShipmentCount = new Map<String, Integer>(); | 
|             Set<Id> updatedShipmentId = new Set<Id>(); | 
|             Map<String, Integer> updatedConInvoiceCount = new Map<String, Integer>(); | 
|             Map<String, String> shipmentIdMap = new Map<String, String>(); | 
|             Set<Id> updatedConInvoiceId = new Set<Id>(); | 
|             Integer returnCount = 0; | 
|   | 
|             for (Consumable_order_details2__c detail2 : Trigger.New) { | 
|                 Consumable_order_details2__c oldDetail2 = null; | 
|                 if (detail2.Consumable_Return_order__c == null) continue; | 
|   | 
|                 String key = '' + detail2.Consumable_Return_order__c + detail2.Asset_Model_No__c; | 
|   | 
|                 if(Trigger.isUpdate) oldDetail2 = Trigger.oldMap.get(detail2.Id); | 
|                 if (oldDetail2 != null) { | 
|                     if (keyCount.containsKey(key)) { | 
|                         returnCount += 1; | 
|                         if (oldDetail2.Consumable_Sale_order__c != null) { | 
|                             Integer sCount = updatedSaleCount.containsKey(''+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c) ? updatedSaleCount.get(''+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c) : 0; | 
|                             sCount += 1; | 
|                             updatedSaleCount.put(''+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c, sCount); | 
|                             updatedSaleId.add(oldDetail2.Consumable_Sale_order__c); | 
|                         } | 
|                         if (oldDetail2.Consumable_Shipment_order__c != null) { | 
|                             Integer sCount = updatedShipmentCount.containsKey(''+oldDetail2.Consumable_Shipment_order__c+detail2.Asset_Model_No__c) ? updatedShipmentCount.get(''+oldDetail2.Consumable_Shipment_order__c+detail2.Asset_Model_No__c) : 0; | 
|                             sCount += 1; | 
|                              | 
|                             updatedShipmentCount.put(''+oldDetail2.Consumable_Shipment_order__c+detail2.Asset_Model_No__c, sCount); | 
|                             updatedShipmentId.add(oldDetail2.Consumable_Shipment_order__c); | 
|                         } | 
|                         /*if (oldDetail2.Invoice_No__c != null) { | 
|                             Integer sCount = updatedConInvoiceCount.containsKey(''+oldDetail2.Invoice_No__c+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c) ? updatedConInvoiceCount.get(''+oldDetail2.Invoice_No__c+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c) : 0; | 
|                             sCount += 1; | 
|                             if(oldDetail2.Consumable_Shipment_order__c == null){ | 
|                                 shipmentIdMap.put(''+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c, oldDetail2.Consumable_Sale_order__c); | 
|                                 updatedConInvoiceCount.put(''+oldDetail2.Invoice_No__c+oldDetail2.Consumable_Sale_order__c+detail2.Asset_Model_No__c, sCount); | 
|                             }else{ | 
|                                 shipmentIdMap.put(''+oldDetail2.Consumable_Shipment_order__c+detail2.Asset_Model_No__c, oldDetail2.Consumable_Shipment_order__c); | 
|                                 updatedConInvoiceCount.put(''+oldDetail2.Invoice_No__c+oldDetail2.Consumable_Shipment_order__c+detail2.Asset_Model_No__c, sCount); | 
|                             } | 
|                              | 
|                             updatedConInvoiceId.add(oldDetail2.Invoice_No__c); | 
|                         }*/ | 
|                     } | 
|                 } | 
|                 if (upsertMap.get(key) != null) continue; | 
|                 Integer count = keyCount.get(key); | 
|   | 
|                 Consumable_orderdetails__c detail1 = detail1Map.get(key); | 
|   | 
|                 if (detail1 == null) detail1 = new Consumable_orderdetails__c(); | 
|                 detail1.RrturnPro_count__c = count; | 
|   | 
|                 if (detail1.Id == null) { | 
|                     Consumable_order__c co = returnMap.get(detail2.Consumable_Return_order__c); | 
|                     Integer index = noCount.get(co.Id); | 
|                     if (index == null) index = 0; | 
|                     noCount.put(co.Id, index + 1); | 
|                     String newName = co.Name+'-'; | 
|                     if (index < 99) { | 
|                         newName += '0'; | 
|                     } | 
|                     if (index < 9) { | 
|                         newName += '0'; | 
|                     } | 
|                     newName += String.valueOf(index + 1); | 
|                     detail1.Name = newName; | 
|                     //detail1.Asset_Model_No__c = detail2.Asset_Model_No__c; | 
|                     detail1.Consumable_product__c = detail2.Consumable_product__c; | 
|                     detail1.Consumable_order__c = co.Id; | 
|                     detail1.RecordTypeId = recordTypeId; | 
|                     //detail1.Consumable_principal__c = co.Id; | 
|                     detail1.Intra_Trade_List_RMB__c = detail2.Intra_Trade_List_RMB__c; | 
|                      | 
|                 } | 
|                 upsertMap.put(key, detail1); | 
|             } | 
|   | 
|             Database.upsert(upsertMap.values(), true); | 
|             // 2018年8月8日 HWAG-B3D9UV 减少 select 数量 start by 张玉山 | 
|             List<Consumable_orderdetails__c> Consumable_orderdetailsList = | 
|                         [select Id, Name, Asset_Model_No__c, RrturnPro_count__c,  | 
|             Consumable_order__c,Invoicedet1_OD_link__c  | 
|             from Consumable_orderdetails__c  | 
|             where Consumable_order__c in :updatedSaleId   | 
|                 or Consumable_order__c in :updatedShipmentId  | 
|                 or Consumable_order__c in :updatedConInvoiceId]; | 
|              | 
|             List<Consumable_orderdetails__c> detail1SaleList  | 
|             = new List<Consumable_orderdetails__c>(); | 
|              | 
|             for (Consumable_orderdetails__c orderdetails : Consumable_orderdetailsList){ | 
|                 if(updatedSaleId.contains(orderdetails.id)  | 
|                     && 'Sale'.equals(orderdetails.Consumable_order__r.RecordType.DeveloperName)){ | 
|                     detail1SaleList.add(orderdetails); | 
|                 } | 
|             } | 
|   | 
|             List<Consumable_orderdetails__c> detail1ShipmentList  | 
|             = new List<Consumable_orderdetails__c>(); | 
|   | 
|             for (Consumable_orderdetails__c orderdetails : Consumable_orderdetailsList){ | 
|                 if(updatedShipmentId.contains(orderdetails.id)  | 
|                     && 'Shipment'.equals(orderdetails.Consumable_order__r.RecordType.DeveloperName)){ | 
|                     detail1ShipmentList.add(orderdetails); | 
|                 } | 
|             } | 
|   | 
|             List<Consumable_orderdetails__c> detail1ConInvoiceList  | 
|             = new List<Consumable_orderdetails__c>(); | 
|   | 
|             for (Consumable_orderdetails__c orderdetails : Consumable_orderdetailsList){ | 
|                 if(updatedConInvoiceId.contains(orderdetails.id)  | 
|                     && 'Order_Invoice'.equals(orderdetails.Consumable_order__r.RecordType.DeveloperName)){ | 
|                     detail1ConInvoiceList.add(orderdetails); | 
|                 } | 
|             } | 
|             // 2018年8月8日 HWAG-B3D9UV 减少 select 数量 end by 张玉山 | 
|             /* 2018年8月8日 HWAG-B3D9UV 注释 替换为上面的那个 end by 张玉山 | 
|             List<Consumable_orderdetails__c> detail1SaleList =  | 
|             [select Id, Name, Asset_Model_No__c, RrturnPro_count__c, Consumable_order__c  | 
|             from Consumable_orderdetails__c  | 
|             where Consumable_order__c in :updatedSaleId  | 
|             and Consumable_order__r.RecordType.DeveloperName = 'Sale']; | 
|              | 
|             List<Consumable_orderdetails__c> detail1ShipmentList =  | 
|             [select Id, Name, Asset_Model_No__c, RrturnPro_count__c, Consumable_order__c  | 
|             from Consumable_orderdetails__c  | 
|             where Consumable_order__c in :updatedShipmentId  | 
|             and Consumable_order__r.RecordType.DeveloperName = 'Shipment']; | 
|              | 
|             List<Consumable_orderdetails__c> detail1ConInvoiceList =  | 
|             [select Id, Name, Asset_Model_No__c, RrturnPro_count__c,  | 
|             Consumable_order__c,Invoicedet1_OD_link__c  | 
|             from Consumable_orderdetails__c  | 
|             where Consumable_order__c in :updatedConInvoiceId  | 
|             and Consumable_order__r.RecordType.DeveloperName = 'Order_Invoice']; | 
|             */ | 
|             List<Consumable_orderdetails__c> updateData = new List<Consumable_orderdetails__c>(); | 
|   | 
|             for (Consumable_orderdetails__c detail1Sale : detail1SaleList) { | 
|                 Integer count = updatedSaleCount.get(''+detail1Sale.Consumable_order__c+detail1Sale.Asset_Model_No__c); | 
|                 if (count != null) { | 
|                     detail1Sale.RrturnPro_count__c += count; | 
|                     updateData.add(detail1Sale); | 
|                 } | 
|                  | 
|             } | 
|             for (Consumable_orderdetails__c detail1Shipment : detail1ShipmentList) { | 
|                 Integer count = updatedShipmentCount.get(''+detail1Shipment.Consumable_order__c+detail1Shipment.Asset_Model_No__c); | 
|                 if (count != null) { | 
|                     detail1Shipment.RrturnPro_count__c += count; | 
|                     updateData.add(detail1Shipment); | 
|                 } | 
|             } | 
|             for (Consumable_orderdetails__c detail1ConInvoice : detail1ConInvoiceList) { | 
|                 Integer count = updatedConInvoiceCount.get(''+detail1ConInvoice.Consumable_order__c+detail1ConInvoice.Invoicedet1_OD_link__c+detail1ConInvoice.Asset_Model_No__c); | 
|                 if (count != null && (detail1ConInvoice.Invoicedet1_OD_link__c  == shipmentIdMap.get(''+detail1ConInvoice.Invoicedet1_OD_link__c+detail1ConInvoice.Asset_Model_No__c)) ) { | 
|                     detail1ConInvoice.RrturnPro_count__c += count; | 
|                     //updateData.add(detail1ConInvoice); | 
|                 } | 
|             } | 
|   | 
|             Database.upsert(updateData, true); | 
|         } | 
|   | 
|     } | 
| } |