buli
2023-07-14 744f42c5496e656a1f9927740a3b37c0b97a6cba
force-app/main/default/triggers/ConsumableOrderDetail2Trigger.trigger
@@ -1,74 +1,53 @@
trigger ConsumableOrderDetail2Trigger on Consumable_order_details2__c(
  after insert,
  after update,
  after delete
) {
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) {
    if (trigger.isInsert){
    for (Consumable_order_details2__c local : Trigger.New) {
      if (
        local.Consumable_order_minor__c != null &&
        local.Dealer_Returned__c == false
      )
            if (local.Consumable_order_minor__c!=null &&
                local.Dealer_Returned__c == false)
        orderSet.add(local.Consumable_order_minor__c);
    }
  }
  if (Trigger.isUpdate) {
    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 (local.Consumable_order_minor__c!=null) orderSet.add(local.Consumable_order_minor__c);
    }
  }
  if (Trigger.isDelete) {
    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 (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
        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
    ];
             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>();
        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)
      ) {
            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
      );
            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
        );
                orderSetResults.put(Consumable_order_minor_str,
                    orderSetResults.get(Consumable_order_minor_str)+1);
      } else {
        orderSetResults.put(Consumable_order_minor_str, 1);
      }
@@ -123,53 +102,34 @@
    //更新消耗品订单的发货日期
    // 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>(); //最早发货时间
        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
      ) {
            if(results1.Dealer_Arrive__c == true || results1.Dealer_Returned__c== true){
        continue;
      }
      string Consumable_order_minor_str = String.valueOf(
        results1.Consumable_order_minor__c
      );
            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
                if(DeliverdateResults.get(Consumable_order_minor_str)
                    < results1.Deliver_date__c
        ) {
          DeliverdateResults.put(
            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
        );
                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
                if(DeliverdateminResults.get(Consumable_order_minor_str)
                    > results1.Deliver_date__c
        ) {
          DeliverdateminResults.put(
            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
        );
                DeliverdateminResults.put(Consumable_order_minor_str,results1.Deliver_date__c);
        resultsKeySet.add(Consumable_order_minor_str);
      }
      //获取最早发货时间 pk part1 end
@@ -263,23 +223,16 @@
    //更新待确认收货数量
    // 2018年8月9日 HWAG-B3D9UV  替换下面原有SQL 使用 map 完成赋值  start by 张玉山
    map<string, Integer> resultsMap2 = new Map<string, Integer>();
        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
      ) {
            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
      );
            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
        );
                    resultsMap2.put(Consumable_order_minor_str,
                        resultsMap2.get(Consumable_order_minor_str)+1);
      } else {
        resultsMap2.put(Consumable_order_minor_str, 1);
      }
@@ -297,9 +250,7 @@
      Consumable_Order__c consumableOrder2 = new Consumable_Order__c();
      consumableOrder2.Id = strOrder;
      consumableOrder2.Delivery_detail_count__c = cnt;
      if (consumableOrder2.Delivery_detail_count__c == 0) {
        consumableOrder2.More_than_seven_days__c = 0;
      }
            if(consumableOrder2.Delivery_detail_count__c == 0){consumableOrder2.More_than_seven_days__c = 0;}
      consumableOrderlist.add(consumableOrder2);
    }
@@ -341,26 +292,21 @@
  //到货和返品时,生成或修改消费品订货明细
  Set<String> arrivedSet = new Set<String>();
  Set<String> returnSet = new Set<String>();
  if (Trigger.isUpdate || Trigger.isInsert || Trigger.isDelete) {
    if (Trigger.isUpdate || Trigger.isInsert) {
    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 (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
        ) {
                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) {
        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);
@@ -378,29 +324,11 @@
    }
    // 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<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;
                String key = '' + detail1.Consumable_order__c + detail1.Asset_Model_No__c;
        detail1Map.put(key, detail1);
      }
@@ -411,27 +339,17 @@
        }
      }
      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
            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
      ];
                                         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');
                String key = '' + ar.get('Consumable_Arrived_order__c') + ar.get('Asset_Model_No__c');
        keyCount.put(key, Integer.valueOf(ar.get('recordCount')));
      }
      //Back up by DTT - Li Jun 2023-06-14 Start
@@ -452,58 +370,40 @@
      // Id recordTypeId = null;
      // if (rtList.size() > 0) recordTypeId = rtList[0].Id;
      //Back up by DTT - Li Jun 2023-06-14 End
      Id recordtypeId = Schema.SObjectType.Consumable_Orderdetails__c.getRecordTypeInfosByDeveloperName()
        .get('Detail1_Arrival')
        .getRecordTypeId();
      results = [
        SELECT Consumable_order__c, count(Id) noCount
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c IN :arrivedSet
        GROUP BY Consumable_order__c
      ];
            Id recordtypeId = Schema.SObjectType.Consumable_Orderdetails__c.getRecordTypeInfosByDeveloperName().get('Detail1_Arrival').getRecordTypeId();
            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'))
        );
                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) {
            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 (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();
                    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
            );
                        Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c);
            Integer index = noCount.get(co.Id);
            if (index == null)
              index = 0;
                        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
              );
                            assetModelNoMap.put(detail2.Asset_Model_No__c, detail2.Asset_Model_No__c);
              noCount.put(co.Id, index + 1);
            }
            noCount.put(co.Id, index + 1);
@@ -524,21 +424,18 @@
            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) {
            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 (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);
@@ -547,17 +444,13 @@
            deletetMap.put(key, detail1);
            continue;
          }
          if (detail1 == null)
            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
            );
                            Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c);
            Integer index = noCount.get(co.Id);
            if (index == null)
              index = 0;
                            if (index == null) index = 0;
            System.debug('indexUp +++++' + index);
            noCount.put(co.Id, index + 1);
            System.debug('noCountUp +++++' + noCount);
@@ -577,19 +470,17 @@
            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) {
            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 (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);
@@ -598,17 +489,13 @@
            deletetMap.put(key, detail1);
            continue;
          }
          if (detail1 == null)
            detail1 = new Consumable_orderdetails__c();
                    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
            );
                        Consumable_order__c co = arrivedMap.get(detail2.Consumable_Arrived_order__c);
            Integer index = noCount.get(co.Id);
            if (index == null)
              index = 0;
                        if (index == null) index = 0;
            noCount.put(co.Id, index + 1);
            String newName = co.Name + '-';
            if (index < 99) {
@@ -625,6 +512,7 @@
            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);
        }
@@ -634,40 +522,23 @@
      if (deletetMap.size() > 0) {
        Database.delete(deletetMap.values(), true);
      }
    }
  }
  // 2018年8月14日 HWAG-B3D9UV 在进行NFM110处理时 跳过returnSet  start by 张玉山
  if (Trigger.isUpdate || Trigger.isInsert) {
    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<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;
                String key = '' + detail1.Consumable_order__c + detail1.Asset_Model_No__c;
        detail1Map.put(key, detail1);
      }
@@ -678,23 +549,14 @@
        }
      }
      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
      ];
            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');
                String key = '' + ar.get('Consumable_Return_order__c') + ar.get('Asset_Model_No__c');
        keyCount.put(key, Integer.valueOf(ar.get('recordCount')));
      }
      //Back up by DTT - Li Jun 2023-06-14 Start for reduce soql times
@@ -711,23 +573,16 @@
            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 = Schema.SObjectType.Consumable_Orderdetails__c.getRecordTypeInfosByDeveloperName()
        .get('Detail1_ReturnGoods')
        .getRecordTypeId();
            Id recordTypeId = Schema.SObjectType.Consumable_Orderdetails__c.getRecordTypeInfosByDeveloperName().get('Detail1_ReturnGoods').getRecordTypeId();
      //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
      ];
            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'))
        );
                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>();
@@ -742,60 +597,25 @@
      for (Consumable_order_details2__c detail2 : Trigger.New) {
        Consumable_order_details2__c oldDetail2 = null;
        if (detail2.Consumable_Return_order__c == null)
          continue;
                if (detail2.Consumable_Return_order__c == null) continue;
        String key =
          '' +
          detail2.Consumable_Return_order__c +
          detail2.Asset_Model_No__c;
                String key = '' + detail2.Consumable_Return_order__c + detail2.Asset_Model_No__c;
        if (Trigger.isUpdate)
          oldDetail2 = Trigger.oldMap.get(detail2.Id);
                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;
                            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
              );
                            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;
                            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
              );
                            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) {
@@ -813,23 +633,18 @@
                        }*/
          }
        }
        if (upsertMap.get(key) != null)
          continue;
                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();
                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
          );
                    Consumable_order__c co = returnMap.get(detail2.Consumable_Return_order__c);
          Integer index = noCount.get(co.Id);
          if (index == null)
            index = 0;
                    if (index == null) index = 0;
          noCount.put(co.Id, index + 1);
          String newName = co.Name + '-';
          if (index < 99) {
@@ -846,65 +661,47 @@
          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> 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>();
            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)
        ) {
            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>();
            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)
        ) {
            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>();
            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)
        ) {
            for (Consumable_orderdetails__c orderdetails : Consumable_orderdetailsList){
                if(updatedConInvoiceId.contains(orderdetails.id)
                    && 'Order_Invoice'.equals(orderdetails.Consumable_order__r.RecordType.DeveloperName)){
          detail1ConInvoiceList.add(orderdetails);
        }
      }
@@ -932,43 +729,23 @@
      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
        );
                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
        );
                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
          ))
        ) {
            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);
        }
@@ -976,5 +753,6 @@
      Database.upsert(updateData, true);
    }
  }
}