public without sharing class ArriveGoodsController {
  public String barcode { get; set; }
  public Consumable_order__c coc { get; set; }
  /*****************画面表示Bean******************/
  public List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
  public List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsUse = new List<ConsumableorderdetailsInfo>();
  public List<ConsumableorderdetailsInfo> consumableInventory { get; set; }
  public List<ConsumableorderdetailsInfo> detailsSummary { get; set; }
  public List<ConsumableorderdetailsInfo> consumableInventoryUse = new List<ConsumableorderdetailsInfo>();
  //更新明细取消时间
  public List<Consumable_order_details2__c> consumableorderdetails2Cancle = new List<Consumable_order_details2__c>();
  // 更新借调信息 add by gzw 2020-0-415 start
  Map<String, Consumable_order_details2__c> orderdetails2trMap = new Map<String, Consumable_order_details2__c>();
  // 更新借调信息 add by gzw 2020-0-415 end
  public List<Consumable_order_details2__c> consumableorderdetails2Insert = new List<Consumable_order_details2__c>();
  public List<Consumable_order_details2__c> consumableorderdetails2Nobox = new List<Consumable_order_details2__c>();
  public List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror {
    get;
    set;
  }
  public transient List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy {
    get;
    set;
  }
  public List<ConsumableorderdetailsInfo> ShowGoodsofReturnList { get; set; }
  public List<ConsumableorderdetailsInfo> ShowGoodsofRemoveBoxReturnList {
    get;
    set;
  }
  //add by rentx 20210602 CHAN-C3K4ZQ
  public List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview {
    get;
    set;
  }
  //add by rentx 20210602 CHAN-C3K4ZQ

  public List<String> GrList = new List<String>();
  //超出定货数量的产品
  public List<String> cancellationProList = new List<String>();
  //错误信息
  public String alertMessage { get; set; }
  public integer getinventorysize() {
    return consumableInventory.size();
  }
  public integer geterrorsize() {
    return ConsumableorderdetailsRecordserror.size();
  }
  Set<String> noboxBarcodeList = new Set<String>();
  public transient Map<String, String> ExistIdMap = new Map<String, String>();
  public transient Map<String, String> ErrorIdMap = new Map<String, String>();
  public transient Map<String, String> AllMap = new Map<String, String>();
  Map<String, String> otherAgencyMap = new Map<String, String>();
  public transient Map<String, String> barMcodeMap = new Map<String, String>();
  Map<String, Integer> BarcodeCntMap = new Map<String, Integer>();
  //qi
  public transient List<String> BarCodeListP = new List<String>();

  // public transient Map<String, String> OrderAllMap = new Map<String, String>();
  Map<String, Decimal> orderProductCunMap = new Map<String, Decimal>();
  Map<String, Decimal> orderProductArrivedCunMap = new Map<String, Decimal>();
  Map<String, Decimal> orderWantArriveCunMap = new Map<String, Decimal>();
  //超出型号和数量
  Map<String, Decimal> overOrderCunMap = new Map<String, Decimal>();
  //超出BARCODE和型号
  Map<String, List<String>> overOrderBARcodeCunMap = new Map<String, List<String>>();
  list<String> overOrderBARcodeTTTTTT = new List<String>();

  //不符合的barcode和型号
  Map<String, List<String>> notEqualBARcodeCunMap = new Map<String, List<String>>();
  list<String> overOrderBARcodeSSSSSS = new List<String>();
  list<String> productList = new List<String>();
  list<String> notInlist = new List<String>();
  //不选择订单时保存订单ID、产品型号用
  //List<String> orderId = new List<String>();
  //List<String> prodName = new List<String>();
  //库存登录使用
  list<String> notInStorelist = new List<String>();
  list<String> exitBarCodeList = new List<String>();

  // Map<String, Consumable_order_details2__c> reallMap = new Map<String, Consumable_order_details2__c>();
  Map<String, String> HosErrorMap = new Map<String, String>();
  List<String> HosErrorList = new List<String>();
  public String baseUrl { get; private set; }
  public String ESetId { get; set; }
  public String arriveId = '';
  private String accountid = null;
  private String accountName = null;
  //public String[] proidList =new String[]{};
  public Decimal orderCountAll = 0;
  public Decimal orderCountNotarrive = 0;
  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
  public id return_Order_id = null;
  public id inventory_Order_id = null;
  public boolean ReturnFLGbln { get; set; }
  public boolean saveFLGbln { get; set; }
  public String ArrType { get; set; }
  // 登录者工作地
  private String userWorkLocation;

  //用户产品区分
  public String userPro_Typestr = null;
  public String userPro_Type = null;
  public String product_Type = null;
  public Boolean EngFlag = false;
  public Boolean ETFlag = false;

  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
  public Boolean isLwc = false;
  public String returnError;
  public List<String> warningList;
  public List<String> errorList;
  public String urlType;

  public ArriveGoodsController() {
    baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
    ESetId = ApexPages.currentPage().getParameters().get('esetId');
    ArrType = ApexPages.currentPage().getParameters().get('ArrType');
    ConsumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    consumableInventory = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordsUse = new List<ConsumableorderdetailsInfo>();
    consumableInventoryUse = new List<ConsumableorderdetailsInfo>();
    consumableorderdetails2Cancle = new List<Consumable_order_details2__c>();
    orderdetails2trMap = new Map<String, Consumable_order_details2__c>();
    detailsSummary = new List<ConsumableorderdetailsInfo>();
    saveFLGbln = false;
    //overOrderBARcodeTTTTTT.add('');
    //add by rentx 20210602 CHAN-C3K4ZQ start
    consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
    //add by rentx 20210602 CHAN-C3K4ZQ end
    // OrderAllMap = new Map<String, String>();
  }

  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
  public ArriveGoodsController(String eSetId, String arrType) {
    this.ESetId = eSetId;
    this.ArrType = arrType;
    ConsumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    consumableInventory = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordsUse = new List<ConsumableorderdetailsInfo>();
    consumableInventoryUse = new List<ConsumableorderdetailsInfo>();
    consumableorderdetails2Cancle = new List<Consumable_order_details2__c>();
    orderdetails2trMap = new Map<String, Consumable_order_details2__c>();
    detailsSummary = new List<ConsumableorderdetailsInfo>();
    saveFLGbln = false;
    consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
    noboxBarcodeList = new Set<String>();
    //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
    warningList = new List<String>();
    errorList = new List<String>();
    returnError = null;
    urlType = null;
  }

  //add by rentx 20210602 CHAN-C3K4ZQ start 出错的原因是页面最多展示1000条数据,但是需要展示的数据超过了1000条,现在把展示上线改为1000 * 1000
  public void makeRecordsView(List<ConsumableorderdetailsInfo> recordsdummy) {
    consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();

    if (recordsdummy.size() > 1000) {
      List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
      List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
      ConsumableorderdetailsInfo c = null;
      ConsumableorderdetailsRecordsbreak.clear();
      ConsumableorderdetailsRecordsbreakover.clear();
      consumableorderdetailsRecordsview.clear();
      //选择产品view
      ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
      ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
      if (recordsdummy.size() > 1000) {
        for (Integer i = 0; i < recordsdummy.size(); i++) {
          if (i < 1000) {
            c = recordsdummy.get(i);
            ConsumableorderdetailsRecordsbreak.add(c);
          } else {
            c = recordsdummy.get(i);
            ConsumableorderdetailsRecordsbreakover.add(c);
          }
        }
        consumableorderdetailsRecordsview.add(
          ConsumableorderdetailsRecordsbreak
        );
        consumableorderdetailsRecordsview.add(
          ConsumableorderdetailsRecordsbreakover
        );
      } else {
        consumableorderdetailsRecordsview.add(recordsdummy);
      }

      // Integer count = recordsdummy.size() / 1000;
      // Integer last = recordsdummy.size() - (1000*count);

      // for(Integer i = 0; i < count ; i++){
      //     List<ConsumableorderdetailsInfo> tempList = new List<ConsumableorderdetailsInfo>();
      //     for(Integer j=0; j < 1000; j++){
      //         tempList.add(recordsdummy.get(i * count + j ));
      //         // itemList.add(resList.get(i*count+j));
      //     }
      //     consumableorderdetailsRecordsview.add(tempList);
      // }
      // if (last > 0) {
      //     List<ConsumableorderdetailsInfo> tempList = new List<ConsumableorderdetailsInfo>();
      //     for(Integer j=0; j < last; j++){
      //         tempList.add(recordsdummy.get(count * 1000 + j ));
      //         // itemList.add(resList.get(i*count+j));
      //     }
      //     consumableorderdetailsRecordsview.add(tempList);
      // }
    } else {
      consumableorderdetailsRecordsview.add(recordsdummy);
    }
  }
  //add by rentx 20210602 CHAN-C3K4ZQ end
  public void init() {
    // String userId = '00510000007cthP';
    String userId = UserInfo.getUserId();
    List<user> Useracc = new List<user>();
    Useracc = [
      SELECT accountid, Work_Location__c, UserPro_Type__c
      FROM user
      WHERE id = :userId
    ];
    accountid = Useracc[0].accountid;
    //--------AddStart-----XHL--------------20181008-------------
    userPro_Type = Useracc[0].UserPro_Type__c;
    if (String.isBlank(userPro_Type)) {
      userPro_Type = 'ET';
    }

    if (userPro_Type == 'ENG') {
      product_Type = 'ET';
      EngFlag = true;
    } else {
      product_Type = 'ENG';
      ETFlag = true;
    }
    userPro_Typestr = '%' + userPro_Type + '%';
    //--------AddEnd-----XHL--------------20181008-------------
    userWorkLocation = Useracc[0].Work_Location__c;
    system.debug('userWorkLocation' + userWorkLocation);
    List<account> accountInfo = [
      SELECT Name
      FROM account
      WHERE id = :accountid
    ];
    accountName = accountInfo[0].Name;
    system.debug('accountName' + accountName);
    coc = new Consumable_order__c();
    if (ArrType == 'ReG') {
      ReturnFLGbln = true;
    } else {
      ReturnFLGbln = false;
    }
    if (ESetId != '' && ESetId != null) {
      List<Consumable_order__c> qs = new List<Consumable_order__c>();
      List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
      List<Consumable_Orderdetails__c> reSet = new List<Consumable_Orderdetails__c>();
      qs = [
        SELECT
          Id,
          Name,
          Order_status__c,
          Dealer_Info__c,
          Deliver_date__c,
          ReturnGs_Upload_Date__c,
          Order_Reason__c,
          Order_date__c,
          Contract_application_decision__c,
          Order_type__c,
          Total_num__c,
          OrderNumber_arrived__c,
          Delivery_detail_count__c,
          OrderNumber_notarrive__c,
          orderPattern__c
        FROM Consumable_order__c
        WHERE
          Id = :ESetId
          AND Order_Owner_WorkLocal__c = :userWorkLocation
          AND Dealer_Info__c = :accountid
      ];
      if (qs.size() > 0) {
        coc = qs[0];
        orderCountAll = coc.Total_num__c;
        orderCountNotarrive = coc.OrderNumber_notarrive__c;
      }
      //产品定货数量
      reSet = [
        SELECT Asset_Model_No__c, Consumable_order__c, Consumable_count__c
        FROM Consumable_Orderdetails__c
        WHERE
          Consumable_order__c = :ESetId
          AND Order_Owner_WorkLocal__c = :userWorkLocation
      ];
      for (Integer i = 0; i < reSet.size(); i++) {
        productList.add(reSet[i].Asset_Model_No__c);
        orderProductCunMap.put(
          reSet[i].Asset_Model_No__c,
          reSet[i].Consumable_count__c
        );
        orderProductArrivedCunMap.put(reSet[i].Asset_Model_No__c, 0);
        orderWantArriveCunMap.put(reSet[i].Asset_Model_No__c, 0);
        overOrderCunMap.put(reSet[i].Asset_Model_No__c, 0);
        overOrderBARcodeCunMap.put(
          reSet[i].Asset_Model_No__c,
          overOrderBARcodeTTTTTT
        );
        //overOrderCunMap.put(reSet[i].Asset_Model_No__c,0);
      }
      //
      reSet1 = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          Box_Piece__c,
          Rrturn_count__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          //add by rentx 2020-10-14 start
          ContractNo_text__c /*,ContractNo__c1*/,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        //add by rentx 2020-10-14 end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Consumable_order_minor__c = :ESetId
          AND Dealer_Arrive__c = TRUE
          AND Box_Piece__c != '个'
      ];
      for (Integer i = 0; i < reSet1.size(); i++) {
        // OrderAllMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
        //init的时候不展示已经入库的明细 by rentx 20210617 CHAN-C3K4ZQ
        // ConsumableorderdetailsRecordsdummy.add(new ConsumableorderdetailsInfo(reSet1[i]));
        //update by rentx 20210617 end CHAN-C3K4ZQ
        if (
          orderProductArrivedCunMap.containsKey(reSet1[i].Asset_Model_No__c)
        ) {
          orderProductArrivedCunMap.put(
            reSet1[i].Asset_Model_No__c,
            orderProductArrivedCunMap.get(reSet1[i].Asset_Model_No__c) + 1
          );
        }
      }
      //add by rentx 20210602 start CHAN-C3K4ZQ
      // makeRecordsView(ConsumableorderdetailsRecordsdummy);
      //add by rentx 20210602 end CHAN-C3K4ZQ
    }
  }
  //========20160311======ADD_Start================================
  // 将页面或取得BarCode去掉重复的，转换成List
  //========20160311======ADD_Start================================
  public List<String> ParseBarCode(String Code) {
    String[] Cache = new List<String>{};
    Cache = Code.split('\n');
    Set<String> Buff = new Set<String>();
    for (String A : Cache) {
      Buff.add(A.toUpperCase());
    }
    List<String> outPut = new List<String>();
    for (String B : Buff) {
      B = B.trim();
      if (B.length() > 8) {
        String tracingCode = B.substring(B.length() - 5, B.length());
        barMcodeMap.put(B, tracingCode);
      }
      outPut.add(B);
    }
    system.debug('barMcodeMap等于' + barMcodeMap);
    return outPut;
  }

  //========20160311======ADD_End==================================
  //获取明细
  public void SearchPro() {
    //从下边移上来 by Link 2023-5-23
    if (barcode == null || barcode.trim() == '') {
      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
      if (isLwc) {
        returnError = '请输入BarCode号';
      } else {
        ApexPages.addmessage(
          new ApexPages.message(ApexPages.severity.INFO, '请输入BarCode号。')
        );
      }
      return;
    }
    notInlist = new List<String>();
    otherAgencyMap = new Map<String, String>();
    barMcodeMap = new Map<String, String>();
    consumableInventory = new List<ConsumableorderdetailsInfo>();
    consumableInventoryUse = new List<ConsumableorderdetailsInfo>();
    consumableorderdetails2Cancle = new List<Consumable_order_details2__c>();
    orderdetails2trMap = new Map<String, Consumable_order_details2__c>();
    //update by Link 20230428
    if (isLwc) {
      noboxBarcodeList = new Set<String>();
    }
    //add by rentx 2021-01-27 start
    HosErrorList = new List<String>();
    HosErrorMap = new Map<String, String>();
    //add by rentx 2021-01-27 end

    noboxBarcodeList.clear();
    //再检索项目清空
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ErrorIdMap = new Map<String, String>();
    ErrorIdMap.clear();
    AllMap = new Map<String, String>();
    AllMap.clear();
    ExistIdMap = new Map<String, String>();
    ExistIdMap.clear();
    consumableorderdetails2Insert = new List<Consumable_order_details2__c>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    /*if(EsetId != null && EsetId != ''){
            List<Consumable_order_details2__c> reSet1 = [SELECT Id,
                            Name,
                            Intra_Trade_List_RMB__c,
                            Asset_Model_No__c,
                            Consumable_Product__c,
                            Consumable_Product__r.Name,
                            Consumable_Product__r.Name__c,
                            Sterilization_limit__c,
                            Deliver_date__c,
                            Bar_Code__c,
                            Arrive_date__c,
                            Send_Date__c,
                            Consumable_order_minor__r.Name,
                            Consumable_order_minor__c,
                            Dealer_Arrive__c,
                            Guarantee_period_for_products__c,
                            CFDA_Status__c,
                            Box_Piece__c,
                            Rrturn_count__c,
                            ProductPacking_list_manual__c,
                            Report_Product_Approbation__c,
                            Report_Product_Expiration__c
                            //add by rentx 2020-10-14 start
                            ,ContractNo_text__c,/*ContractNo__c1*
                            //add by rentx 2020-10-14 end
                            ,hospitalSpecialOffer__c
                        FROM Consumable_order_details2__c
                        WHERE recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                        AND Consumable_order_minor__c = :ESetId
                        AND Arrive_Owner_Work_Location__c =: userWorkLocation
                        AND Dealer_Arrive__c = true ];
            for (Integer i = 0; i < reSet1.size(); i++) {
                // OrderAllMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
                //add by rentx 2021-01-27
                // reallMap.put(reSet1[i].Bar_Code__C, reSet1[i]);
                //add by rentx 2021-01-27

                //不需要展示已到货的明细 update by rentx 20210617 start CHAN-C3K4ZQ
                // ConsumableorderdetailsRecordsdummy.add(new ConsumableorderdetailsInfo(reSet1[i]));
                //不需要展示已到货的明细 update by rentx 20210617 end CHAN-C3K4ZQ

                //if(orderProductArrivedCunMap.containsKey(reSet1[i].Asset_Model_No__c)){
                //   orderProductArrivedCunMap.put(reSet1[i].Asset_Model_No__c,orderProductArrivedCunMap.get(reSet1[i].Asset_Model_No__c)+1);
                //}
            }
        }*/
    ConsumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    BarCodeListP = new List<String>();
    BarCodeListP = ParseBarCode(barcode);
    Consumable_order_details2__c p = new Consumable_order_details2__c();
    List<Consumable_order_details2__c> Ins = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
    //移到最上边 by Link 2023-5-23
    // if(barcode == null || barcode.trim() ==''){
    //     //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
    //     if(isLwc){
    //         returnError = '请输入BarCode号';
    //     }else {
    //         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
    //     }
    //     return;
    // }
    //对比全部库存中是否存在管理编码一样，barcode号不一样的产品
    reSet1 = [
      SELECT Id, Name, TracingCode__c, Bar_Code__c, Report_Product_Expiration__c
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Dealer_Returned__c = FALSE
        AND Cancellation_Flag__c = FALSE
        AND TracingCode__c IN :barMcodeMap.values()
        AND Bar_Code__c NOT IN :barMcodeMap.keySet()
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          for (String str : barMcodeMap.keySet()) {
            if (barMcodeMap.get(str) == reSet1[i].TracingCode__c) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  str +
                  ' 的管理编码已经存在于系统的库存中，请确认输入信息是否有误。'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    str +
                    ' 的管理编码已经存在于系统的库存中，请确认输入信息是否有误。'
                  )
                );
              }
              ErrorIdMap.put(str, str);
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
      }
    }
    //管理编码为空的产品
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Box_Piece__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        TracingCode__c,
        Report_Product_Expiration__c
      FROM Consumable_order_details2__c
      WHERE
        Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        //AND Arrive_Owner_Work_Location__c =: userWorkLocation
        AND (TracingCode__c = NULL
        OR TracingCode__c = '')
      ORDER BY Name
    ];

    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该产品没有管理编码，无法入库';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '管理编码为空的产品 ' + ErrorIdMap));
    //整体到货
    System.debug('EsetId===>' + EsetId);
    System.debug('ArrType===>' + ArrType);
    if (EsetId == null || EsetId == '') {
      if (ArrType != 'ReG') {
        //到货但产品类型与用户的类型不符
        reSet1 = [
          SELECT
            Id,
            Name,
            Intra_Trade_List_RMB__c,
            Asset_Model_No__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__r.Asset_Model_No__c,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            Dealer_Arrive__c,
            Guarantee_period_for_products__c,
            CFDA_Status__c,
            ProductPacking_list_manual__c,
            Report_Product_Approbation__c,
            Report_Product_Expiration__c,
            Box_Piece__c,
            Rrturn_count__c,
            Product_Type__c,
            ContractNo_text__c /*,ContractNo__c1*/,
            // tcm start
            Consumable_order_minor__r.ContractNo__c
          // tcm end
          FROM Consumable_order_details2__c
          WHERE
            Bar_Code__c IN :BarCodeListP
            AND (NOT Product_Type__c LIKE :userPro_Typestr)
            AND Dealer_Info_text__c = :accountName
            AND ((Consumable_order_minor__c != NULL
            AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation)
            OR Consumable_order_minor__c = NULL)
          ORDER BY Name
        ];

        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str =
                '产品类型[' +
                reSet1[i].Product_Type__c +
                ']与用户的类型[' +
                userPro_Type +
                ']不符';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        System.debug('reSet1===>' + reSet1);
        //add by Wang Xueqin
        //到货但产品类型与用户的类型不符
        reSet1 = [
          SELECT
            Id,
            Name,
            Intra_Trade_List_RMB__c,
            Asset_Model_No__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__r.Asset_Model_No__c,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            Dealer_Arrive__c,
            Guarantee_period_for_products__c,
            CFDA_Status__c,
            ProductPacking_list_manual__c,
            Report_Product_Approbation__c,
            Report_Product_Expiration__c,
            Box_Piece__c,
            Rrturn_count__c,
            Product_Type__c,
            ContractNo_text__c,
            Consumable_order_minor__r.ContractNo__c
          FROM Consumable_order_details2__c
          WHERE
            Bar_Code__c IN :BarCodeListP
            AND (NOT Product_Type__c LIKE :userPro_Typestr)
        ];

        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str =
                '产品类型[' +
                reSet1[i].Product_Type__c +
                ']与用户的类型[' +
                userPro_Type +
                ']不符';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        System.debug('reSet1===>1' + reSet1);
        //end

        //销售产品
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            OwnerId,
            Report_Product_Expiration__c
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Saled__c = TRUE
            AND Dealer_Returned__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND Dealer_Info_text__c = :accountName
            AND (Arrive_Owner_Work_Location__c = :userWorkLocation
            OR OwnerId = :System.Label.User_OlympusSystem)
          ORDER BY Name
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str = '';
              if (reSet1[i].OwnerId == System.Label.User_OlympusSystem) {
                str = '该商品是直销产品请先返品';
              } else {
                str = '该商品已经销售';
              }
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        //出库产品
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            Report_Product_Expiration__c
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Shipment__c = TRUE
            AND Dealer_Returned__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND Dealer_Info_text__c = :accountName
            AND Arrive_Owner_Work_Location__c = :userWorkLocation
          ORDER BY Name
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str = '该商品已经出库';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        //已到货产品
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Lose_Flag__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            Report_Product_Expiration__c
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = TRUE
            AND Dealer_Returned__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND Dealer_Info_text__c = :accountName
            AND Arrive_Owner_Work_Location__c = :userWorkLocation
          ORDER BY Name
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str = '该商品已经到货';
              if (reSet1[i].Lose_Flag__c == true) {
                str = '该商品已经丢失';
              }
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }

        //已拆盒产品
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            Report_Product_Expiration__c
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = TRUE
            AND Bar_Code__c IN :BarCodeListP
            AND (Dealer_Info_text__c != :accountName
            OR (Dealer_Info_text__c = :accountName
            AND Arrive_Owner_Work_Location__c != :userWorkLocation))
            AND Box_Piece__c = '个'
          ORDER BY Name
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str = '已拆盒的产品不能入库';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }

        // 经销商之间或者同一经销商不同工作地调货
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Asset_Model_No__c,
            Arrive_Owner_Work_Location__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Box_Piece__c,
            Deliver_date__c,
            Bar_Code__c,
            TracingCode__c,
            Dealer_Info_text__c,
            OwnerId,
            Lose_Flag__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            SerialLotNo__c,
            Dealer_Arrive__c,
            Consumable_Arrived_order__r.Dealer_Info__c,
            Consumable_Arrived_order__r.Dealer_Info__r.Name,
            Intra_Trade_List_RMB__c,
            Dealer_Shipment__c,
            Dealer_Saled__c,
            Consumable_Product__r.Asset_Model_No__c,
            // 更新借调信息 add by gzw 2020-0-415 start
            SummonsForDirction_det__c,
            Transfer_Time__c,
            Frist_Transfer_Agency__c,
            Agency_Transfer__c,
            // 更新借调信息 add by gzw 2020-0-415 start
            // 首次入库经销商信息 add by gzw 2020-04-27 start
            Agencyinfo_fromSAP__c,
            Frist_Storage_Agency__c,
            // 首次入库经销商信息 add by gzw 2020-04-27 end

            //add by rentx 2020-10-13 start 互相调货时,借入方记录SAP合同号
            ContractNo_text__c /*,ContractNo__c */,
            // tcm start
            Consumable_order_minor__r.ContractNo__c,
            // tcm end
            //add by rentx 2020-10-13 end
            //add by rentx 2021-03-22 start
            hospitalSpecialOffer__c,
            exchangeOutPattern__c,
            Report_Product_Expiration__c
          //add by rentx 2021-03-22 end
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = TRUE
            //AND  Dealer_Shipment__c= false
            //AND  Dealer_Saled__c = FALSE
            AND Dealer_Returned__c = FALSE
            AND Cancellation_Flag__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            //AND (Dealer_Shipment__c = FALSE
            //        OR (Dealer_Shipment__c = TRUE
            //            AND Consumable_Shipment_order__r.SummonsForDirction__c != '互相调货'))
            AND (Dealer_Info_text__c != :accountName
            OR (Dealer_Info_text__c = :accountName
            AND Arrive_Owner_Work_Location__c != :userWorkLocation))
          // 更新借调信息 add by gzw 2020-0-415 start
          ORDER BY Bar_Code__c, Transfer_Time__c DESC
          // 更新借调信息 add by gzw 2020-0-415 end
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              if (otherAgencyMap.containsKey(reSet1[i].Bar_Code__c)) {
                continue;
              } else {
                //其他经销商出库产品可以入库
                List<String> barcodedetList = new List<String>();
                barcodedetList.add(reSet1[i].Bar_Code__c);
                barcodedetList.add(
                  String.valueOf(reSet1[i].Sterilization_limit__c)
                );
                barcodedetList.add(reSet1[i].SerialLotNo__c);
                barcodedetList.add(reSet1[i].TracingCode__c);
                if (reSet1[i].Lose_Flag__c == false) {
                  //&& reSet1[i].Dealer_Info_text__c == accountName
                  consumableorderdetails2Cancle.add(reSet1[i]);
                }
                // 更新借调信息 add by gzw 2020-0-415 start
                if (
                  reSet1[i].SummonsForDirction_det__c == '互相调货' &&
                  !orderdetails2trMap.containsKey(reSet1[i].Bar_Code__c)
                ) {
                  orderdetails2trMap.put(reSet1[i].Bar_Code__c, reSet1[i]);
                }
                // 更新借调信息 add by gzw 2020-0-415 end
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(reSet1[i], barcodedetList)
                );
                Consumable_order_details2__c codsIns = new Consumable_order_details2__c();

                codsIns.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                codsIns.Intra_Trade_List_RMB__c = reSet1[i]
                  .Intra_Trade_List_RMB__c;
                //gzw 手动入库 默认产品单价 20230307
                codsIns.Asset_Model_No__c = reSet1[i].Asset_Model_No__c;
                codsIns.Direct_Arrive_Product__c = true;
                codsIns.Sterilization_limit__c = reSet1[i]
                  .Sterilization_limit__c;
                codsIns.Consumable_Product__c = reSet1[i].Consumable_Product__c;
                codsIns.Bar_Code__c = reSet1[i].Bar_Code__c;
                codsIns.SerialLotNo__c = reSet1[i].SerialLotNo__c;
                codsIns.TracingCode__c = reSet1[i].TracingCode__c;
                // 更新借调信息 add by gzw 2020-0-415 start
                codsIns.Transfer_Time__c = reSet1[i].Transfer_Time__c == null
                  ? 1
                  : reSet1[i].Transfer_Time__c;
                codsIns.Frist_Transfer_Agency__c = reSet1[i]
                    .Frist_Transfer_Agency__c == null
                  ? reSet1[i].Dealer_Info_text__c
                  : reSet1[i].Frist_Transfer_Agency__c;
                codsIns.Agency_Transfer__c = true;
                // 更新借调信息 add by gzw 2020-0-415 end

                // 追加首次入库经销商 add by gzw 2020-04-27 start
                codsIns.Agencyinfo_fromSAP__c = reSet1[i].Agencyinfo_fromSAP__c;
                codsIns.Frist_Storage_Agency__c = reSet1[i]
                  .Frist_Storage_Agency__c;
                // 追加首次入库经销商 add by gzw 2020-04-27 end

                //add by rentx 2020-10-13 start 互相调货时,记录SAP合同号
                // update tcm start
                if (
                  String.isBlank(
                    reSet1[i].Consumable_order_minor__r.ContractNo__c
                  )
                ) {
                  codsIns.ContractNo_text__c = reSet1[i].ContractNo_text__c;
                } else {
                  codsIns.ContractNo_text__c = reSet1[i]
                    .Consumable_order_minor__r.ContractNo__c;
                }
                // update tcm end
                //add by rentx 2020-10-13 end

                //add by rentx 2021-03-22 start
                // if (reSet1[i].Lose_Flag__c == true){
                if (
                  reSet1[i].hospitalSpecialOffer__c == true &&
                  reSet1[i].SummonsForDirction_det__c == '互相调货'
                ) {
                  codsIns.exchangeOutPattern__c = true;
                }
                //add by rentx 2021-03-22 end

                consumableorderdetails2Insert.add(codsIns);
                otherAgencyMap.put(
                  reSet1[i].Bar_Code__c,
                  reSet1[i].Bar_Code__c
                );
                //String str = '该商品在其他经销商库存';
                //ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
                //ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
              }
            }
          }
        }

        //发错库 未到货
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Asset_Model_No__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            TracingCode__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            SerialLotNo__c,
            Dealer_Arrive__c,
            Dealer_Shipment__c,
            Dealer_Saled__c,
            Consumable_Product__r.Asset_Model_No__c,
            // 更新借调信息 add by gzw 2020-0-415 start
            SummonsForDirction_det__c,
            Transfer_Time__c,
            Frist_Transfer_Agency__c,
            Agency_Transfer__c,
            Dealer_Info_text__c,
            Intra_Trade_List_RMB__c,
            // 更新借调信息 add by gzw 2020-0-415 start
            // 首次入库经销商信息 add by gzw 2020-04-27 start
            Agencyinfo_fromSAP__c,
            Frist_Storage_Agency__c,
            // 首次入库经销商信息 add by gzw 2020-04-27 end
            //add by rentx 2020-10-13 start 互相调货时,借入方记录SAP合同号
            ContractNo_text__c /*,ContractNo__c*/,
            // tcm start
            Consumable_order_minor__r.ContractNo__c,
            // tcm end
            //add by rentx 2020-10-13 end   互相调货时,借入方记录SAP合同号
            hospitalSpecialOffer__c,
            exchangeOutPattern__c,
            Lose_Flag__c,
            Report_Product_Expiration__c
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = FALSE
            AND Dealer_Shipment__c = FALSE
            AND Dealer_Saled__c = FALSE
            //AND  Cancellation_Flag__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND (Dealer_Info_text__c != :accountName
            OR (Dealer_Info_text__c = :accountName
            AND ((Consumable_order_minor__c != NULL
            AND (Consumable_order_minor__r.Order_Owner_WorkLocal__c != :userWorkLocation
            OR (Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation
            AND Cancellation_Flag__c = TRUE)))
            OR (Consumable_order_minor__c = NULL
            AND Cancellation_Flag__c = TRUE))))
          // 更新借调信息 add by gzw 2020-0-415 start
          ORDER BY Bar_Code__c, Transfer_Time__c DESC
          // 更新借调信息 add by gzw 2020-0-415 end
        ];
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              if (otherAgencyMap.containsKey(reSet1[i].Bar_Code__c)) {
                continue;
              } else {
                //取消明细
                List<String> barcodedetList = new List<String>();
                barcodedetList.add(reSet1[i].Bar_Code__c);
                barcodedetList.add(
                  String.valueOf(reSet1[i].Sterilization_limit__c)
                );
                barcodedetList.add(reSet1[i].SerialLotNo__c);
                barcodedetList.add(reSet1[i].TracingCode__c);
                // 发错库存时，自动取消 update by gzw 2020-04-15 start
                //if (reSet1[i].Consumable_order_minor__c == null) {
                consumableorderdetails2Cancle.add(reSet1[i]);
                //}
                // 发错库存时，自动取消 update by gzw 2020-04-15 start
                // 更新借调信息 add by gzw 2020-0-415 start
                if (
                  reSet1[i].SummonsForDirction_det__c == '互相调货' &&
                  !orderdetails2trMap.containsKey(reSet1[i].Bar_Code__c)
                ) {
                  orderdetails2trMap.put(reSet1[i].Bar_Code__c, reSet1[i]);
                }
                // 更新借调信息 add by gzw 2020-0-415 end
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(reSet1[i], barcodedetList)
                );
                Consumable_order_details2__c codsIns = new Consumable_order_details2__c();

                codsIns.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
                codsIns.Intra_Trade_List_RMB__c = reSet1[i]
                  .Intra_Trade_List_RMB__c;
                //gzw 手动入库 默认产品单价 20230307
                codsIns.Asset_Model_No__c = reSet1[i].Asset_Model_No__c;
                codsIns.Direct_Arrive_Product__c = true;
                codsIns.Sterilization_limit__c = reSet1[i]
                  .Sterilization_limit__c;
                codsIns.Consumable_Product__c = reSet1[i].Consumable_Product__c;
                codsIns.Bar_Code__c = reSet1[i].Bar_Code__c;
                codsIns.SerialLotNo__c = reSet1[i].SerialLotNo__c;
                codsIns.TracingCode__c = reSet1[i].TracingCode__c;
                // 更新借调信息 add by gzw 2020-0-415 start
                // 没有入库时，没有借调信息
                codsIns.Transfer_Time__c = reSet1[i].Transfer_Time__c;
                codsIns.Frist_Transfer_Agency__c = reSet1[i]
                  .Frist_Transfer_Agency__c;
                codsIns.Agency_Transfer__c = reSet1[i].Agency_Transfer__c;
                // 更新借调信息 add by gzw 2020-0-415 end

                // 追加首次入库经销商 add by gzw 2020-04-27 start
                codsIns.Agencyinfo_fromSAP__c = reSet1[i].Agencyinfo_fromSAP__c;
                codsIns.Frist_Storage_Agency__c = reSet1[i]
                  .Frist_Storage_Agency__c;
                // 追加首次入库经销商 add by gzw 2020-04-27 end

                //add by rentx 2020-10-13 start 互相调货时,借入方记录SAP合同号
                // update tcm start
                if (
                  String.isBlank(
                    reSet1[i].Consumable_order_minor__r.ContractNo__c
                  )
                ) {
                  codsIns.ContractNo_text__c = reSet1[i].ContractNo_text__c;
                } else {
                  codsIns.ContractNo_text__c = reSet1[i]
                    .Consumable_order_minor__r.ContractNo__c;
                }
                // update tcm end
                //add by rentx 2020-10-13 end   互相调货时,借入方记录SAP合同号

                //add by rentx 2021-03-22 start
                // if (reSet1[i].Lose_Flag__c == true){
                if (
                  reSet1[i].hospitalSpecialOffer__c == true &&
                  reSet1[i].SummonsForDirction_det__c == '互相调货'
                ) {
                  codsIns.exchangeOutPattern__c = true;
                }
                //add by rentx 2021-03-22 end

                consumableorderdetails2Insert.add(codsIns);
                otherAgencyMap.put(
                  reSet1[i].Bar_Code__c,
                  reSet1[i].Bar_Code__c
                );
              }
            }
          }
        }
      } else {
        //返品检查
        //到货但产品类型与用户的类型不符
        reSet1 = [
          SELECT
            Id,
            Name,
            Intra_Trade_List_RMB__c,
            Asset_Model_No__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__r.Asset_Model_No__c,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            Dealer_Arrive__c,
            Guarantee_period_for_products__c,
            CFDA_Status__c,
            ProductPacking_list_manual__c,
            Report_Product_Approbation__c,
            Report_Product_Expiration__c,
            Box_Piece__c,
            Rrturn_count__c,
            Product_Type__c,
            //add by rentx 2020-10-14 start
            ContractNo_text__c /*,ContractNo__c*/,
            // tcm start
            Consumable_order_minor__r.ContractNo__c
          // tcm end
          //add by rentx 2020-10-14 end
          FROM Consumable_order_details2__c
          WHERE
            Bar_Code__c IN :BarCodeListP
            AND (NOT Product_Type__c LIKE :userPro_Typestr)
            AND Dealer_Info_text__c = :accountName
            AND ((Consumable_order_minor__c != NULL
            AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation)
            OR Consumable_order_minor__c = NULL)
          ORDER BY Name
        ];

        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str =
                '产品类型[' +
                reSet1[i].Product_Type__c +
                ']与用户的类型[' +
                userPro_Type +
                ']不符';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            //add by rentx 2020-10-14 start
            ContractNo_text__c /*,ContractNo__c*/,
            // tcm start
            Consumable_order_minor__r.ContractNo__c,
            // tcm end
            Report_Product_Expiration__c
          //add by rentx 2020-10-14 end
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = FALSE
            AND Dealer_Shipment__c = FALSE
            AND Dealer_Saled__c = FALSE
            // gzw fix 取消产品判断为未入库 20230323
            AND Cancellation_Flag__c = FALSE
            AND Dealer_Returned__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND Dealer_Info_text__c = :accountName
          ORDER BY Name
        ]; //没到货
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              String str = '该商品尚未入库';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(reSet1[i], str)
              );
              ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
            }
          }
        }
        reSet1 = [
          SELECT
            Id,
            Name,
            Consumable_Product__r.Name__c,
            ToDueDateDays__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Sterilization_limit__c,
            Deliver_date__c,
            Bar_Code__c,
            Lose_Flag__c,
            Box_Piece__c,
            Arrive_date__c,
            Send_Date__c,
            Consumable_order_minor__r.Name,
            Consumable_order_minor__c,
            recordtypeid,
            Consumable_order_minor__r.Arrive_Order__c,
            //add by rentx 2020-10-14 start
            ContractNo_text__c /*,ContractNo__c*/,
            // tcm start
            Consumable_order_minor__r.ContractNo__c,
            // tcm end
            Report_Product_Expiration__c
          //add by rentx 2020-10-14 end
          FROM Consumable_order_details2__c
          WHERE
            Dealer_Arrive__c = TRUE
            AND Dealer_Shipment__c = FALSE
            AND Dealer_Saled__c = FALSE
            AND Bar_Code__c IN :BarCodeListP
            AND Dealer_Returned__c = FALSE
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
            //AND  Lose_Flag__c = FALSE
            // AND  Lose_Flag__c = FALSE
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
            AND Dealer_Info_text__c = :accountName
            AND Arrive_Owner_Work_Location__c = :userWorkLocation
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
            // Gzw 20201215修复，拆盒产品不判断
            AND Box_Piece__c = '盒'
          // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
          ORDER BY Name
        ]; //没出库，没销售，就是在库
        if (reSet1.size() > 0) {
          for (Integer i = 0; i < reSet1.size(); i++) {
            if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
              // 跳过已经处理的消耗品明细
              continue;
            } else {
              // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
              // String str = '该商品在库';
              // if (reSet1[i].Lose_Flag__c) {
              //     str = '该商品丢失';
              // }
              String str = '';
              if (reSet1[i].Lose_Flag__c == false) {
                str = '该商品在库'; //没出库 ，没销售，没丢失就是在库。
              }
              if (
                reSet1[i].Lose_Flag__c == true &&
                reSet1[i].ToDueDateDays__c >= 0
              ) {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  warningList.add(
                    '产品' +
                      reSet1[i].Consumable_Product__r.Name +
                      '存在丢失记录'
                  );
                } else {
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.WARNING,
                      '产品' +
                        reSet1[i].Consumable_Product__r.Name +
                        '存在丢失记录'
                    )
                  ); //如果丢失产品就给提示。
                }
              }
              if (
                reSet1[i].Lose_Flag__c == true &&
                reSet1[i].ToDueDateDays__c < 0
              ) {
                str = '过期已销存产品，不允许返品';
              }
              if (str != '') {
                ConsumableorderdetailsRecordserror.add(
                  new ConsumableorderdetailsInfo(reSet1[i], str)
                );
                ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
              }
              // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str));
              // ErrorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c);
              // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
            }
          }
        }
      }

      //到货正确信息
      reSet = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__r.Asset_Model_No__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Box_Piece__c,
          Rrturn_count__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          Consumable_Product__r.Pro2_Dealer_ENG__c,
          Consumable_Product__r.Pro2_Dealer_Object__c,
          TracingCode__c,
          Agencyinfo_fromSAP__c,
          Frist_Storage_Agency__c,
          Dealer_Info_text__c,
          //add by rentx 2020-10-14 start
          ContractNo_text__c /*,ContractNo__c*/,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        //add by rentx 2020-10-14 end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Cancellation_Date__c = NULL
          AND Dealer_Arrive__c = FALSE
          AND Product_Type__c LIKE :userPro_Typestr
          AND Bar_Code__c IN :BarCodeListP
          AND Dealer_Info_text__c = :accountName
          AND ((Consumable_order_minor__c != NULL
          AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation)
          OR Consumable_order_minor__c = NULL)
        ORDER BY Name
      ];

      if (reSet.size() > 0) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ErrorIdMap+++ '+ ErrorIdMap.keyset()));
        Map<String, String> errorMap = new Map<String, String>();
        for (Integer i = 0; i < reSet.size(); i++) {
          if (
            ExistIdMap.containsKey(reSet[i].Bar_Code__c) ||
            ErrorIdMap.containsKey(reSet[i].Bar_Code__c)
          ) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            Matcher n = Pattern.compile('[0-9]')
              .matcher(reSet[i].TracingCode__c);
            if (n.find()) {
              // gzw DB202305352696 入库管理编码验证程序调整 start
              if (reSet[i].TracingCode__c.length() == 5) {
                String tr = reSet[i].TracingCode__c;
                String Ctr = tr.substring(tr.length() - 3, tr.length());
                String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                if (
                  Pattern.compile('[0-9]').matcher(Atr).find() ||
                  Pattern.compile('[0-9]').matcher(Ctr).find()
                ) {
                  String str = '管理编码有误，请检查条形码数据。';
                  ConsumableorderdetailsRecordserror.add(
                    new ConsumableorderdetailsInfo(reSet[i], str)
                  );
                  ErrorIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                  continue;
                }
              }
              // String str = '管理编码中有数字，请与管理员确认是否错误。';
              // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet[i],str));
              // ErrorIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
              // continue;
              // gzw DB202305352696 入库管理编码验证程序调整 end
            }
            if (otherAgencyMap.containsKey(reSet[i].Bar_Code__c)) {
              for (Integer j = 0; j < consumableInventory.size(); j++) {
                ConsumableorderdetailsInfo codInfo = consumableInventory.get(j);
                if (codInfo.barCodeNo == reSet[i].Bar_Code__c) {
                  consumableInventory.remove(j);
                  break;
                }
              }
              for (
                Integer m = 0; m < consumableorderdetails2Insert.size(); m++
              ) {
                Consumable_order_details2__c cod2 = consumableorderdetails2Insert.get(
                  m
                );
                if (cod2.Bar_Code__c == reSet[i].Bar_Code__c) {
                  consumableorderdetails2Insert.remove(m);
                  break;
                }
              }
            }
            //orderId.add(reSet[i].Consumable_order_minor__c);
            //prodName.add(reSet[i].Consumable_Product__r.Name);
            ConsumableorderdetailsRecordsdummy.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ConsumableorderdetailsRecords.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
          }
        }
      }
      //barcode不一致，管理编码一致
      reSet = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__r.Asset_Model_No__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          Box_Piece__c,
          Rrturn_count__c,
          TracingCode__c,
          Agencyinfo_fromSAP__c,
          Frist_Storage_Agency__c,
          //add by rentx 2020-10-14 start
          ContractNo_text__c /*,ContractNo__c */,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        //add by rentx 2020-10-14 end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Dealer_Info_text__c = :accountName
          //update by rentx 2021-01-04 start CHAN-BWX3XW
          // AND Consumable_order_minor__c != null
          // AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation
          AND ((Consumable_order_minor__c != NULL
          AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation)
          OR Consumable_order_minor__c = NULL)
          //update by rentx 2021-01-04 end CHAN-BWX3XW
          AND Dealer_Arrive__c = FALSE
          AND Cancellation_Date__c = NULL
          AND TracingCode__c IN :barMcodeMap.values()
          AND Bar_Code__c NOT IN :barMcodeMap.keySet()
        ORDER BY Name
      ];

      if (reSet.size() > 0) {
        for (Integer i = 0; i < reSet.size(); i++) {
          if (
            ExistIdMap.containsKey(reSet[i].Bar_Code__c) ||
            ErrorIdMap.containsKey(reSet[i].Bar_Code__c)
          ) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            Matcher n = Pattern.compile('[0-9]')
              .matcher(reSet[i].TracingCode__c);
            if (n.find()) {
              // gzw DB202305352696 入库管理编码验证程序调整 start
              if (reSet[i].TracingCode__c.length() == 5) {
                String tr = reSet[i].TracingCode__c;
                String Ctr = tr.substring(tr.length() - 3, tr.length());
                String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                if (
                  Pattern.compile('[0-9]').matcher(Atr).find() ||
                  Pattern.compile('[0-9]').matcher(Ctr).find()
                ) {
                  String str = '管理编码有误，请检查条形码数据。';
                  ConsumableorderdetailsRecordserror.add(
                    new ConsumableorderdetailsInfo(reSet[i], str)
                  );
                  ErrorIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                  continue;
                }
              }
              // String str = '管理编码中有数字，请与管理员确认是否错误。';
              // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet[i],str));
              // ErrorIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
              // continue;
              // gzw DB202305352696 入库管理编码验证程序调整 end
            }
            ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
            for (String str : barMcodeMap.keySet()) {
              // BarCode不一致时的警告信息
              if (
                reSet[i].Bar_Code__c != str &&
                reSet[i].TracingCode__c == barMcodeMap.get(str)
              ) {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  warningList.add(
                    '条形码为(' + str + ')的入库数据与发货数据不一致'
                  );
                } else {
                  // 20220815 ljh SWAG-CH65B7 start
                  // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'此管理编码与实际发货BarCode不一致，请核对管理编码('+ str +')的入库及库存数据。'));
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.WARNING,
                      '条形码为(' + str + ')的入库数据与发货数据不一致'
                    )
                  );
                  // 20220815 ljh SWAG-CH65B7 end
                }
              }
              if (barMcodeMap.get(str) == reSet[i].TracingCode__c) {
                reSet[i].Bar_Code__c = str;
                //=====================================
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'入库BarCode('+ str +')和库存条码不一致。'));
                ExistIdMap.put(str, str);
              }
            }
            ConsumableorderdetailsRecordsdummy.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ConsumableorderdetailsRecords.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
          }
        }
      }

      // CHAN-BD43NK 关闭直接返品功能  追加 barcode不一致判断
      reSet1 = [
        SELECT
          Id,
          Name,
          TracingCode__c,
          Bar_Code__c,
          Sale_orderName__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = TRUE
          AND (Dealer_Shipment__c = TRUE
          OR Dealer_Saled__c = TRUE)
          AND TracingCode__c IN :barMcodeMap.values()
          AND Bar_Code__c NOT IN :barMcodeMap.keySet()
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            for (String str : barMcodeMap.keySet()) {
              if (barMcodeMap.get(str) == reSet1[i].TracingCode__c) {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  errorList.add(
                    'barcode' +
                      str +
                      '与出库单' +
                      reSet1[i].Sale_orderName__c +
                      ' 中的管理编码一致，但Barcode不同，请确认具体数据。'
                  );
                } else {
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.ERROR,
                      'barcode' +
                        str +
                        '与出库单' +
                        reSet1[i].Sale_orderName__c +
                        ' 中的管理编码一致，但Barcode不同，请确认具体数据。'
                    )
                  );
                }
                ErrorIdMap.put(str, str);
                ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
              }
            }
          }
        }
      }
      integer RGcnt = GoodsReturnCheck();
      AllMap.putAll(ErrorIdMap);
      AllMap.putAll(ExistIdMap);
      if (RGcnt > 0) {
        for (String str : GrList) {
          AllMap.put(str, str);
        }
      }
      //得到不存在的BarCode
      //return;
      for (Integer i = 0; i < BarCodeListP.size(); i++) {
        if (AllMap.containsKey(BarCodeListP[i])) {
          continue;
        } else if (otherAgencyMap.containsKey(BarCodeListP[i])) {
          continue;
        }
        //add by rentx 2021-01-27 start
        else if (coc != null && coc.orderPattern__c == 'hospitalorder') {
          HosErrorList.add(BarCodeListP[i]);
          continue;
        }
        //add by rentx 2021-01-27 end
        else {
          notInlist.add(BarCodeListP[i]);
          otherAgencyMap.put(BarCodeListP[i], BarCodeListP[i]);
        }
      }
      //  CHAN-BD43NK 关闭直接返品功能
      if (notInlist.size() > 0) {
        if (ArrType != 'ReG') {
          inventoryEntryNoESetId(notInlist);
          if (notInStorelist.size() > 0) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              returnError = 'BarCode号' + notInStorelist + '不存在';
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  'BarCode号' + notInStorelist + '不存在。'
                )
              );
            }
            return;
          }
        } else {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            returnError =
              'BarCode号' +
              notInlist +
              '不存在，无对应的出库单，请先操作产品入库';
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                'BarCode号' +
                  notInlist +
                  '不存在，无对应的出库单，请先操作产品入库。'
              )
            );
          }
          return;
        }
      }

      //add by rentx 2021-01-27 start
      if (HosErrorList.size() > 0) {
        for (String str : HosErrorList) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add('BarCode号:' + str + HosErrorMap.get(str) + '');
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                'BarCode号:' + str + HosErrorMap.get(str) + ''
              )
            );
          }
        }
      }
      //add by rentx 2021-01-27 end
    } else {
      //已取消产品
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Box_Piece__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          recordtypeid,
          Consumable_order_minor__r.Arrive_Order__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = FALSE
          AND Dealer_Shipment__c = FALSE
          AND Dealer_Saled__c = FALSE
          AND Dealer_Returned__c = FALSE
          AND Cancellation_Date__c != NULL
          AND Bar_Code__c IN :BarCodeListP
          AND Dealer_Info_text__c = :accountName
        ORDER BY Name
      ]; //没到货
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str = '该商品取消';
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }
      //已经销售
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Box_Piece__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          recordtypeid,
          Consumable_order_minor__r.Arrive_Order__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Saled__c = TRUE
          AND Dealer_Returned__c = FALSE
          AND Dealer_Info_text__c = :accountName
          AND Bar_Code__c IN :BarCodeListP
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str = '该商品已经销售';
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }
      //已经出库产品
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Box_Piece__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          recordtypeid,
          Consumable_order_minor__r.Arrive_Order__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Shipment__c = TRUE
          AND Dealer_Returned__c = FALSE
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Bar_Code__c IN :BarCodeListP
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str = '该商品已经出库';
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }
      //已经到货产品
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Lose_Flag__c,
          Box_Piece__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          recordtypeid,
          Consumable_order_minor__r.Arrive_Order__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = TRUE
          AND Dealer_Returned__c = FALSE
          AND Bar_Code__c IN :BarCodeListP
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str = '该商品已经到货';
            if (reSet1[i].Lose_Flag__c == true) {
              str = '该商品已经丢失';
            }
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }
      //不属于本订单
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Box_Piece__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          recordtypeid,
          Consumable_order_minor__r.Arrive_Order__c,
          Report_Product_Expiration__c
        FROM Consumable_order_details2__c
        WHERE
          Consumable_order_minor__c != :ESetId
          AND Bar_Code__c IN :BarCodeListP
        //AND Dealer_Info_text__c = :accountName
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str = '该消耗品不属于本订单';
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }
      //到货但产品类型与用户的类型不符
      reSet1 = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__r.Asset_Model_No__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          Box_Piece__c,
          Rrturn_count__c,
          Product_Type__c,
          ContractNo_text__c /*,ContractNo__c*/,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Dealer_Info_text__c = :accountName
          AND (NOT Product_Type__c LIKE :userPro_Typestr)
          AND Consumable_order_minor__c = :ESetId
          AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation
          AND Dealer_Arrive__c = FALSE
          AND Cancellation_Date__c = NULL
          AND Bar_Code__c IN :BarCodeListP
        ORDER BY Name
      ];
      if (reSet1.size() > 0) {
        for (Integer i = 0; i < reSet1.size(); i++) {
          if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            String str =
              '产品类型[' +
              reSet1[i].Product_Type__c +
              ']与用户的类型[' +
              userPro_Type +
              ']不符';
            ConsumableorderdetailsRecordserror.add(
              new ConsumableorderdetailsInfo(reSet1[i], str)
            );
            ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
          }
        }
      }

      //到货正确信息
      reSet = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__r.Asset_Model_No__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          Box_Piece__c,
          Rrturn_count__c,
          TracingCode__c,
          Agencyinfo_fromSAP__c,
          Frist_Storage_Agency__c,
          Dealer_Info_text__c,
          ContractNo_text__c /*,ContractNo__c*/,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Dealer_Info_text__c = :accountName
          AND Product_Type__c LIKE :userPro_Typestr
          AND Consumable_order_minor__c = :ESetId
          AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation
          AND Dealer_Arrive__c = FALSE
          AND Cancellation_Date__c = NULL
          AND Bar_Code__c IN :BarCodeListP
        ORDER BY Name
      ];
      if (reSet.size() > 0) {
        Map<String, String> errorMap = new Map<String, String>();
        for (Integer i = 0; i < reSet.size(); i++) {
          if (
            ExistIdMap.containsKey(reSet[i].Bar_Code__c) ||
            ErrorIdMap.containsKey(reSet[i].Bar_Code__c)
          ) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            Matcher n = Pattern.compile('[0-9]')
              .matcher(reSet[i].TracingCode__c);
            if (n.find()) {
              // gzw DB202305352696 入库管理编码验证程序调整 start
              if (reSet[i].TracingCode__c.length() == 5) {
                String tr = reSet[i].TracingCode__c;
                String Ctr = tr.substring(tr.length() - 3, tr.length());
                String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                if (
                  Pattern.compile('[0-9]').matcher(Atr).find() ||
                  Pattern.compile('[0-9]').matcher(Ctr).find()
                ) {
                  String str = '管理编码有误，请检查条形码数据。';
                  ConsumableorderdetailsRecordserror.add(
                    new ConsumableorderdetailsInfo(reSet[i], str)
                  );
                  ErrorIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                  continue;
                }
              }
              // String str = '管理编码中有数字，请与管理员确认是否错误。';
              // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet[i],str));
              // ErrorIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
              // continue;
              // gzw DB202305352696 入库管理编码验证程序调整 end
            }
            ConsumableorderdetailsRecordsdummy.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ConsumableorderdetailsRecords.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
          }
        }
      }

      //barcode不一致，管理编码一致
      reSet = [
        SELECT
          Id,
          Name,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          Consumable_Product__c,
          Consumable_Product__r.Name,
          Consumable_Product__r.Name__c,
          Consumable_Product__r.Asset_Model_No__c,
          Sterilization_limit__c,
          Deliver_date__c,
          Bar_Code__c,
          Arrive_date__c,
          Send_Date__c,
          Box_Piece__c,
          Rrturn_count__c,
          Consumable_order_minor__r.Name,
          Consumable_order_minor__c,
          Dealer_Arrive__c,
          Guarantee_period_for_products__c,
          CFDA_Status__c,
          ProductPacking_list_manual__c,
          Report_Product_Approbation__c,
          Report_Product_Expiration__c,
          TracingCode__c,
          Agencyinfo_fromSAP__c,
          Frist_Storage_Agency__c,
          ContractNo_text__c /*,ContractNo__c*/,
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        FROM Consumable_order_details2__c
        WHERE
          recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
          AND Cancellation_Date__c = NULL
          AND Dealer_Arrive__c = FALSE
          AND TracingCode__c IN :barMcodeMap.values()
          AND Bar_Code__c NOT IN :barMcodeMap.keySet()
          AND Dealer_Info_text__c = :accountName
          AND ((Consumable_order_minor__c != NULL
          AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation)
          OR Consumable_order_minor__c = NULL)
        ORDER BY Name
      ];
      if (reSet.size() > 0) {
        for (Integer i = 0; i < reSet.size(); i++) {
          if (
            ExistIdMap.containsKey(reSet[i].Bar_Code__c) ||
            ErrorIdMap.containsKey(reSet[i].Bar_Code__c)
          ) {
            // 跳过已经处理的消耗品明细
            continue;
          } else {
            Matcher n = Pattern.compile('[0-9]')
              .matcher(reSet[i].TracingCode__c);
            if (n.find()) {
              // gzw DB202305352696 入库管理编码验证程序调整 start
              if (reSet[i].TracingCode__c.length() == 5) {
                String tr = reSet[i].TracingCode__c;
                String Ctr = tr.substring(tr.length() - 3, tr.length());
                String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                if (
                  Pattern.compile('[0-9]').matcher(Atr).find() ||
                  Pattern.compile('[0-9]').matcher(Ctr).find()
                ) {
                  String str = '管理编码有误，请检查条形码数据。';
                  ConsumableorderdetailsRecordserror.add(
                    new ConsumableorderdetailsInfo(reSet[i], str)
                  );
                  ErrorIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                  continue;
                }
              }
              // String str = '管理编码中有数字，请与管理员确认是否错误。';
              // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet[i],str));
              // ErrorIdMap.put(reSet[i].Bar_Code__c,reSet[i].Bar_Code__c);
              // continue;
              // gzw DB202305352696 入库管理编码验证程序调整 end
            }
            ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
            for (String str : barMcodeMap.keySet()) {
              if (barMcodeMap.get(str) == reSet[i].TracingCode__c) {
                reSet[i].Bar_Code__c = str;
                ExistIdMap.put(str, str);
              }
            }
            ConsumableorderdetailsRecordsdummy.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
            ConsumableorderdetailsRecords.add(
              new ConsumableorderdetailsInfo(reSet[i])
            );
          }
        }
      }
      AllMap.putAll(ErrorIdMap);
      AllMap.putAll(ExistIdMap);
      //得到不存在的BarCode
      for (Integer i = 0; i < BarCodeListP.size(); i++) {
        if (AllMap.containsKey(BarCodeListP[i])) {
          continue;
        } else if (otherAgencyMap.containsKey(BarCodeListP[i])) {
          continue;
        }
        //add by rentx 2021-01-27 start
        else if (coc != null && coc.orderPattern__c == 'hospitalorder') {
          HosErrorList.add(BarCodeListP[i]);
          continue;
        }
        //add by rentx 2021-01-27 end
        else {
          notInlist.add(BarCodeListP[i]);
          otherAgencyMap.put(BarCodeListP[i], BarCodeListP[i]);
        }
      }
      if (notInlist.size() > 0) {
        inventoryEntry(notInlist);
        if (notInStorelist.size() > 0) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            returnError = 'BarCode号' + notInStorelist + '不存在';
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                'BarCode号' + notInStorelist + '不存在。'
              )
            );
          }
          return;
        }
      }
    }

    //add by rentx 2021-01-27 start 当订单为医院特价类型的订单时,如果找不到barcode,不解析,并且默认该barcode对应的明细2为非医院特价产品,直接报错
    if (HosErrorList.size() > 0) {
      for (String str : HosErrorList) {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          errorList.add('BarCode号:' + str + '是非医院特价产品');
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              'BarCode号:' + str + '是非医院特价产品'
            )
          );
        }
      }
    }
    //add by rentx 2021-01-27 end

    makeArrivedSummary();

    //add by rentx 20210602 start CHAN-C3K4ZQ
    makeRecordsView(ConsumableorderdetailsRecordsdummy);
    //add by rentx 20210602 end CHAN-C3K4ZQ
  }

  public void inventoryEntryNoESetId(List<String> barCodeList) {
    //所有barcode解析到的Jancode
    List<String> alljanCodeList = new List<String>();
    List<String> allotCodeList = new List<String>();
    List<String> barCode01List = new List<String>();
    List<String> barCode241List = new List<String>();
    Map<String, Map<String, String>> barJancodeMap = new Map<String, Map<String, String>>();
    Map<String, Map<String, String>> barOtcodeMap = new Map<String, Map<String, String>>();
    Map<String, List<String>> barcodeinfoMap = new Map<String, List<String>>();
    Map<String, String> barcoderightMap = new Map<String, String>();
    notInStorelist.clear();
    for (Integer i = 0; i < barCodeList.size(); i++) {
      Date expirationDate = null;
      String serialNoorLotNo = '';
      String tracingCode = '';
      String productDateStr = '';
      Date productionDate = null;
      String expirationDateStr = '';
      if (barCodeList[i].length() >= 3) {
        if (barCodeList[i].substring(0, 2) == '01') {
          String janCodeMark = '';
          //生产日期
          List<String> janCode = new List<String>();
          if (barCodeList[i].length() < 16) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' +
                  barCodeList[i] +
                  ')的位数不足16，不符合要求错误！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' +
                    barCodeList[i] +
                    ')的位数不足16，不符合要求错误！'
                )
              );
            }
            continue;
          } else {
            //if(barCodeList[i].substring(0,2) !='01'){
            //    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品BarCode(' + barCodeList[i] + ')没有janCode，不符合要求！'));
            //    return;
            //}
            janCodeMark = barCodeList[i].substring(2, 16);
            try {
              Decimal test = Decimal.valueOf(janCodeMark);
            } catch (Exception e) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  '产品BarCode(' + barCodeList[i] + ')的janCode错误！'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    '产品BarCode(' + barCodeList[i] + ')的janCode错误！'
                  )
                );
              }
              continue;
            }
          }
          if (barCodeList[i].length() >= 22) {
            if (
              barCodeList[i]
                .substring(
                  barCodeList[i].length() - 8,
                  barCodeList[i].length() - 5
                ) != '250'
            ) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
                  )
                );
              }
              continue;
            }
            if (barCodeList[i].substring(16, 18) == '11') {
              try {
                productDateStr =
                  '20' +
                  barCodeList[i].substring(18, 20) +
                  '-' +
                  barCodeList[i].substring(20, 22) +
                  '-01';
                productionDate = Date.valueOf(productDateStr);
              } catch (Exception e) {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  errorList.add(
                    '产品BarCode(' +
                      barCodeList[i] +
                      ')的生产日期' +
                      productDateStr +
                      '错误！'
                  );
                } else {
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.ERROR,
                      '产品BarCode(' +
                        barCodeList[i] +
                        ')的生产日期' +
                        productDateStr +
                        '错误！'
                    )
                  );
                }
                continue;
              }
              if (barCodeList[i].length() >= 32) {
                if (barCodeList[i].substring(24, 26) == '17') {
                  try {
                    if (barCodeList[i].substring(30, 32) == '00') {
                      expirationDateStr =
                        '20' +
                        barCodeList[i].substring(26, 28) +
                        '-' +
                        barCodeList[i].substring(28, 30) +
                        '-' +
                        '01';
                      expirationDate = Date.valueOf(expirationDateStr);
                      expirationDate = expirationDate.addMonths(1)
                        .toStartofMonth()
                        .addDays(-1);
                    } else {
                      expirationDateStr =
                        '20' +
                        barCodeList[i].substring(26, 28) +
                        '-' +
                        barCodeList[i].substring(28, 30) +
                        '-' +
                        barCodeList[i].substring(30, 32);
                      expirationDate = Date.valueOf(expirationDateStr);
                    }
                  } catch (Exception e) {
                    //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                    if (isLwc) {
                      errorList.add(
                        '产品BarCode(' +
                          barCodeList[i] +
                          ')的滅菌有効期限' +
                          expirationDateStr +
                          '错误！'
                      );
                    } else {
                      ApexPages.addmessage(
                        new ApexPages.message(
                          ApexPages.severity.ERROR,
                          '产品BarCode(' +
                            barCodeList[i] +
                            ')的滅菌有効期限' +
                            expirationDateStr +
                            '错误！'
                        )
                      );
                    }
                    continue;
                  }
                  if (barCodeList[i].length() >= 42) {
                    if (
                      barCodeList[i].substring(32, 34) == '10' ||
                      barCodeList[i].substring(32, 34) == '21'
                    ) {
                      serialNoorLotNo = barCodeList[i]
                        .substring(34, barCodeList[i].length() - 8);
                    }
                  }
                } else if (
                  barCodeList[i].substring(24, 26) == '10' ||
                  barCodeList[i].substring(24, 26) == '21'
                ) {
                  serialNoorLotNo = barCodeList[i]
                    .substring(26, barCodeList[i].length() - 8);
                }
              }
            } else if (barCodeList[i].substring(16, 18) == '17') {
              try {
                if (barCodeList[i].substring(22, 24) == '00') {
                  expirationDateStr =
                    '20' +
                    barCodeList[i].substring(18, 20) +
                    '-' +
                    barCodeList[i].substring(20, 22) +
                    '-01';
                  //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品expirationDateStr' + expirationDateStr));
                  expirationDate = Date.valueOf(expirationDateStr);
                  expirationDate = expirationDate.addMonths(1)
                    .toStartofMonth()
                    .addDays(-1);
                } else {
                  expirationDateStr =
                    '20' +
                    barCodeList[i].substring(18, 20) +
                    '-' +
                    barCodeList[i].substring(20, 22) +
                    '-' +
                    barCodeList[i].substring(22, 24);
                  expirationDate = Date.valueOf(expirationDateStr);
                }
              } catch (Exception e) {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  errorList.add(
                    '产品BarCode(' +
                      barCodeList[i] +
                      ')的滅菌有効期限' +
                      expirationDateStr +
                      '错误！'
                  );
                } else {
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.ERROR,
                      '产品BarCode(' +
                        barCodeList[i] +
                        ')的滅菌有効期限' +
                        expirationDateStr +
                        '错误！'
                    )
                  );
                }
                continue;
              }
              if (barCodeList[i].length() >= 34) {
                if (
                  barCodeList[i].substring(24, 26) == '10' ||
                  barCodeList[i].substring(24, 26) == '21'
                ) {
                  serialNoorLotNo = barCodeList[i]
                    .substring(26, barCodeList[i].length() - 8);
                }
              }
            } else if (barCodeList[i].length() >= 26) {
              if (
                barCodeList[i].substring(16, 18) == '10' ||
                barCodeList[i].substring(16, 18) == '21'
              ) {
                serialNoorLotNo = barCodeList[i]
                  .substring(18, barCodeList[i].length() - 8);
              }
            }
          }
          if (
            barCodeList[i].length() >= 24 &&
            barCodeList[i]
              .substring(
                barCodeList[i].length() - 8,
                barCodeList[i].length() - 5
              ) == '250'
          ) {
            if (
              barCodeList[i]
                .substring(
                  barCodeList[i].length() - 8,
                  barCodeList[i].length() - 5
                ) == '250'
            ) {
              tracingCode = barCodeList[i]
                .substring(
                  barCodeList[i].length() - 5,
                  barCodeList[i].length()
                );
              Matcher n = Pattern.compile('[0-9]').matcher(tracingCode);
              if (n.find()) {
                // gzw DB202305352696 入库管理编码验证程序调整 start
                if (tracingCode.length() == 5) {
                  String tr = tracingCode;
                  String Ctr = tr.substring(tr.length() - 3, tr.length());
                  String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                  String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                  if (
                    Pattern.compile('[0-9]').matcher(Atr).find() ||
                    Pattern.compile('[0-9]').matcher(Ctr).find()
                  ) {
                    //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                    String str = '管理编码有误，请检查条形码数据。';
                    if (isLwc) {
                      errorList.add(
                        '产品BarCode(' +
                          barCodeList[i] +
                          ')管理编码有误，请检查条形码数据。'
                      );
                    } else {
                      ApexPages.addmessage(
                        new ApexPages.message(
                          ApexPages.severity.ERROR,
                          '产品BarCode(' +
                            barCodeList[i] +
                            ')管理编码有误，请检查条形码数据。'
                        )
                      );
                    }
                    continue;
                  }
                }
              }
            } else {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  '产品BarCode(' + barCodeList[i] + ')的tracingCode错误！'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    '产品BarCode(' + barCodeList[i] + ')的tracingCode错误！'
                  )
                );
              }
              continue;
            }
          }
          List<String> barcodedetList = new List<String>();
          barcodedetList.add(barCodeList[i]);
          barcodedetList.add(String.valueOf(expirationDate));
          barcodedetList.add(serialNoorLotNo);
          barcodedetList.add(tracingCode);
          Integer jan1 = Integer.valueOf(janCodeMark.substring(0, 1));
          Integer jan2 = Integer.valueOf(janCodeMark.substring(1, 2));
          Integer jan3 = Integer.valueOf(janCodeMark.substring(2, 3));
          Integer jan4 = Integer.valueOf(janCodeMark.substring(3, 4));
          Integer jan5 = Integer.valueOf(janCodeMark.substring(4, 5));
          Integer jan6 = Integer.valueOf(janCodeMark.substring(5, 6));
          Integer jan7 = Integer.valueOf(janCodeMark.substring(6, 7));
          Integer jan8 = Integer.valueOf(janCodeMark.substring(7, 8));
          Integer jan9 = Integer.valueOf(janCodeMark.substring(8, 9));
          Integer jan10 = Integer.valueOf(janCodeMark.substring(9, 10));
          Integer jan11 = Integer.valueOf(janCodeMark.substring(10, 11));
          Integer jan12 = Integer.valueOf(janCodeMark.substring(11, 12));
          Integer jan13 = Integer.valueOf(janCodeMark.substring(12, 13));

          Integer count12 =
            jan2 +
            jan3 * 3 +
            jan4 +
            jan5 * 3 +
            jan6 +
            jan7 * 3 +
            jan8 +
            jan9 * 3 +
            jan10 +
            jan11 * 3 +
            jan12 +
            jan13 * 3;
          Integer count13 =
            jan1 * 3 +
            jan2 +
            jan3 * 3 +
            jan4 +
            jan5 * 3 +
            jan6 +
            jan7 * 3 +
            jan8 +
            jan9 * 3 +
            jan10 +
            jan11 * 3 +
            jan12 +
            jan13 * 3;
          String frost12 = (String.valueOf(count12))
            .substring((String.valueOf(count12)).length() - 1);
          String frost13 = (String.valueOf(count13))
            .substring((String.valueOf(count13)).length() - 1);
          //减去12位个位
          frost12 = (String.valueOf(10 - Integer.valueOf(frost12)))
            .substring(
              (String.valueOf(10 - Integer.valueOf(frost12))).length() - 1
            );
          frost13 = (String.valueOf(10 - Integer.valueOf(frost13)))
            .substring(
              (String.valueOf(10 - Integer.valueOf(frost13))).length() - 1
            );
          janCode.add(janCodeMark.substring(1, 13) + frost12);
          janCode.add(janCodeMark.substring(0, 13) + frost12);
          janCode.add(janCodeMark.substring(1, 13) + frost13);
          janCode.add(janCodeMark.substring(0, 13) + frost13);
          alljanCodeList.addAll(janCode);
          Map<String, String> janCodeMap = new Map<String, String>();
          janCodeMap.put(
            janCodeMark.substring(1, 13) + frost12,
            barCodeList[i]
          );
          janCodeMap.put(
            janCodeMark.substring(0, 13) + frost12,
            barCodeList[i]
          );
          janCodeMap.put(
            janCodeMark.substring(1, 13) + frost13,
            barCodeList[i]
          );
          janCodeMap.put(
            janCodeMark.substring(0, 13) + frost13,
            barCodeList[i]
          );
          barJancodeMap.put(barCodeList[i], janCodeMap);
          barcodeinfoMap.put(barCodeList[i], barcodedetList);
          barCode01List.add(barCodeList[i]);
        } else if (barCodeList[i].substring(0, 3) == '241') {
          if (
            barCodeList[i].length() > 8 &&
            barCodeList[i]
              .substring(
                barCodeList[i].length() - 8,
                barCodeList[i].length() - 5
              ) != '250'
          ) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
                )
              );
            }
            continue;
          }
          List<String> otCodeList = new List<String>();
          Map<String, String> otCodeMap = new Map<String, String>();
          if (barCodeList[i].length() < 7) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' +
                  barCodeList[i] +
                  ')的位数不足16，不符合要求错误！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' +
                    barCodeList[i] +
                    ')的位数不足16，不符合要求错误！'
                )
              );
            }
            continue;
          } else if (barCodeList[i].length() == 11) {
            String otCode4 = barCodeList[i].substring(3, 7);
            String otCode5 = barCodeList[i].substring(3, 8);
            String otCode6 = barCodeList[i].substring(3, 9);
            String otCode7 = barCodeList[i].substring(3, 10);
            String otCode8 = barCodeList[i].substring(3, 11);
            otCodeList.add(otCode4);
            otCodeList.add(otCode5);
            otCodeList.add(otCode6);
            otCodeList.add(otCode7);
            otCodeList.add(otCode8);
            otCodeMap.put(otCode4, barCodeList[i]);
            otCodeMap.put(otCode5, barCodeList[i]);
            otCodeMap.put(otCode6, barCodeList[i]);
            otCodeMap.put(otCode7, barCodeList[i]);
            otCodeMap.put(otCode8, barCodeList[i]);
          } else if (barCodeList[i].length() >= 12) {
            String otCode4 = barCodeList[i].substring(3, 7);
            String otCode5 = barCodeList[i].substring(3, 8);
            String otCode6 = barCodeList[i].substring(3, 9);
            String otCode7 = barCodeList[i].substring(3, 10);
            String otCode8 = barCodeList[i].substring(3, 11);
            String otCode9 = barCodeList[i].substring(3, 12);
            otCodeList.add(otCode4);
            otCodeList.add(otCode5);
            otCodeList.add(otCode6);
            otCodeList.add(otCode7);
            otCodeList.add(otCode8);
            otCodeList.add(otCode9);
            otCodeMap.put(otCode4, barCodeList[i]);
            otCodeMap.put(otCode5, barCodeList[i]);
            otCodeMap.put(otCode6, barCodeList[i]);
            otCodeMap.put(otCode7, barCodeList[i]);
            otCodeMap.put(otCode8, barCodeList[i]);
            otCodeMap.put(otCode9, barCodeList[i]);
          }
          allotCodeList.addAll(otCodeList);
          barOtcodeMap.put(barCodeList[i], otCodeMap);
          barCode241List.add(barCodeList[i]);
        } else {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add('产品BarCode(' + barCodeList[i] + ')不符合要求！');
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                '产品BarCode(' + barCodeList[i] + ')不符合要求！'
              )
            );
          }
          continue;
        }
      } else {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          errorList.add('产品BarCode(' + barCodeList[i] + ')不符合要求！');
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              '产品BarCode(' + barCodeList[i] + ')不符合要求！'
            )
          );
        }
        continue;
      }
    }
    //01通过检索产品是否存在
    //-----------XHL--------------UpdateSTART----------------20181010------
    if (alljanCodeList.size() > 0) {
      List<Product2__c> product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Product2_Jancode__c,
          Pro2_Dealer_ENG__c,
          Pro2_Dealer_Object__c
        FROM Product2__c
        WHERE Product2_Jancode__c IN :alljanCodeList
        ORDER BY SFDA_Expiration_Date__c DESC
      ];
      if (product2InStore.size() > 0) {
        // CHAN-AVSAST
        Map<String, String> rightBar = new Map<String, String>();
        Map<String, String> errorMap = new Map<String, String>();
        for (String bar : barJancodeMap.keySet()) {
          Integer cou = 0;
          for (Product2__c produ : product2InStore) {
            if (
              barJancodeMap.get(bar).containsKey(produ.Product2_Jancode__c) &&
              !rightBar.containsKey(bar)
            ) {
              cou++;
              if (EngFlag == true && produ.Pro2_Dealer_ENG__c == true) {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                consumableInventoryUse.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                rightBar.put(bar, bar);
              } else if (
                ETFlag == true &&
                produ.Pro2_Dealer_Object__c == true
              ) {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                consumableInventoryUse.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                rightBar.put(bar, bar);
              } else {
                errorMap.put(bar, bar);
              }
            }
          }
          if (cou <= 0) {
            notInStorelist.add(bar);
          }
        }
        if (errorMap.size() > 0) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add(
              'BarCode号[' +
                errorMap.values() +
                ']产品类型[' +
                product_Type +
                ']与用户类型[' +
                userPro_Type +
                ']不符'
            );
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                'BarCode号[' +
                  errorMap.values() +
                  ']产品类型[' +
                  product_Type +
                  ']与用户类型[' +
                  userPro_Type +
                  ']不符'
              )
            );
          }
        }
      }
    }

    //241通过检索产品是否存在
    if (allotCodeList.size() > 0) {
      Map<String, String> errorMap = new Map<String, String>();
      Map<String, String> exitBarCodeMap = new Map<String, String>();
      List<Product2__c> product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Product2_Jancode__c,
          Pro2_Dealer_ENG__c,
          Pro2_Dealer_Object__c
        FROM Product2__c
        WHERE
          OT_CODE__c IN :allotCodeList
          AND (NOT Product_Type__c LIKE :userPro_Typestr)
      ];
      if (product2InStore.size() > 0) {
        for (Product2__c produ : product2InStore) {
          for (String bar : barOtcodeMap.keySet()) {
            if (barOtcodeMap.get(bar).containsKey(produ.OT_CODE__c)) {
              exitBarCodeMap.put(bar, bar);
              errorMap.put(bar, bar);
            }
          }
        }
      }
      if (errorMap.size() > 0) {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          errorList.add(
            'BarCode号[' +
              errorMap.values() +
              ']产品类型[' +
              product_Type +
              ']与用户[' +
              userPro_Type +
              ']类型不符'
          );
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              'BarCode号[' +
                errorMap.values() +
                ']产品类型[' +
                product_Type +
                ']与用户[' +
                userPro_Type +
                ']类型不符'
            )
          );
        }
      }
      product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Product2_Jancode__c,
          Pro2_Dealer_ENG__c,
          Pro2_Dealer_Object__c
        FROM Product2__c
        WHERE
          OT_CODE__c IN :allotCodeList
          AND Product_Type__c LIKE :userPro_Typestr
      ];

      if (product2InStore.size() > 0) {
        for (Product2__c produ : product2InStore) {
          for (String bar : barOtcodeMap.keySet()) {
            Date expirationDate = null;
            String serialNoorLotNo = '';
            String tracingCode = '';
            String productDateStr = '';
            Date productionDate = null;
            String expirationDateStr = '';
            if (barOtcodeMap.get(bar).containsKey(produ.OT_CODE__c)) {
              Integer oTcodeLength = produ.OT_CODE__c.length();
              if (bar.length() >= oTcodeLength + 11) {
                if (bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '11') {
                  try {
                    productDateStr =
                      '20' +
                      bar.substring(oTcodeLength + 5, oTcodeLength + 7) +
                      '-' +
                      bar.substring(oTcodeLength + 7, oTcodeLength + 9) +
                      '-01';
                    productionDate = Date.valueOf(productDateStr);
                  } catch (Exception e) {
                    //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                    if (isLwc) {
                      errorList.add(
                        '产品BarCode(' +
                          bar +
                          ')的生产日期' +
                          productDateStr +
                          '错误！'
                      );
                    } else {
                      ApexPages.addmessage(
                        new ApexPages.message(
                          ApexPages.severity.ERROR,
                          '产品BarCode(' +
                            bar +
                            ')的生产日期' +
                            productDateStr +
                            '错误！'
                        )
                      );
                    }
                    continue;
                  }
                  if (bar.length() >= oTcodeLength + 3 + 16) {
                    if (
                      bar.substring(
                        oTcodeLength + 3 + 8,
                        oTcodeLength + 3 + 10
                      ) == '17'
                    ) {
                      try {
                        if (
                          bar.substring(
                            oTcodeLength + 3 + 14,
                            oTcodeLength + 3 + 16
                          ) == '00'
                        ) {
                          expirationDateStr =
                            '20' +
                            bar.substring(
                              oTcodeLength + 3 + 10,
                              oTcodeLength + 3 + 12
                            ) +
                            '-' +
                            bar.substring(
                              oTcodeLength + 3 + 12,
                              oTcodeLength + 3 + 14
                            ) +
                            '-' +
                            '01';
                          expirationDate = Date.valueOf(expirationDateStr);
                          expirationDate = expirationDate.addMonths(1)
                            .toStartofMonth()
                            .addDays(-1);
                        } else {
                          expirationDateStr =
                            '20' +
                            bar.substring(
                              oTcodeLength + 3 + 10,
                              oTcodeLength + 3 + 12
                            ) +
                            '-' +
                            bar.substring(
                              oTcodeLength + 3 + 12,
                              oTcodeLength + 3 + 14
                            ) +
                            '-' +
                            bar.substring(
                              oTcodeLength + 3 + 14,
                              oTcodeLength + 3 + 16
                            );
                          expirationDate = Date.valueOf(expirationDateStr);
                        }
                      } catch (Exception e) {
                        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                        if (isLwc) {
                          errorList.add(
                            '产品BarCode(' +
                              bar +
                              ')的滅菌有効期限' +
                              expirationDateStr +
                              '错误！'
                          );
                        } else {
                          ApexPages.addmessage(
                            new ApexPages.message(
                              ApexPages.severity.ERROR,
                              '产品BarCode(' +
                                bar +
                                ')的滅菌有効期限' +
                                expirationDateStr +
                                '错误！'
                            )
                          );
                        }
                        continue;
                      }
                      if (bar.length() >= oTcodeLength + 3 + 25) {
                        if (
                          bar.substring(
                            oTcodeLength + 3 + 16,
                            oTcodeLength + 3 + 18
                          ) == '10' ||
                          bar.substring(
                            oTcodeLength + 3 + 16,
                            oTcodeLength + 3 + 18
                          ) == '21'
                        ) {
                          serialNoorLotNo = bar.substring(
                            oTcodeLength + 3 + 18,
                            bar.length() - 8
                          );
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,  'serialNoorLotNo' + serialNoorLotNo));
                        }
                      }
                    } else if (
                      bar.substring(
                        oTcodeLength + 3 + 8,
                        oTcodeLength + 3 + 10
                      ) == '10' ||
                      bar.substring(
                        oTcodeLength + 3 + 8,
                        oTcodeLength + 3 + 10
                      ) == '21'
                    ) {
                      serialNoorLotNo = bar.substring(
                        oTcodeLength + 3 + 10,
                        bar.length() - 8
                      );
                      //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,  'serialNoorLotNo' + serialNoorLotNo));
                    }
                  }
                } else if (
                  bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '17'
                ) {
                  try {
                    if (
                      bar.substring(
                        oTcodeLength + 3 + 6,
                        oTcodeLength + 3 + 8
                      ) == '00'
                    ) {
                      expirationDateStr =
                        '20' +
                        bar.substring(
                          oTcodeLength + 3 + 2,
                          oTcodeLength + 3 + 4
                        ) +
                        '-' +
                        bar.substring(
                          oTcodeLength + 3 + 4,
                          oTcodeLength + 3 + 6
                        ) +
                        '-01';
                      expirationDate = Date.valueOf(expirationDateStr);
                      expirationDate = expirationDate.addMonths(1)
                        .toStartofMonth()
                        .addDays(-1);
                    } else {
                      expirationDateStr =
                        '20' +
                        bar.substring(
                          oTcodeLength + 3 + 2,
                          oTcodeLength + 3 + 4
                        ) +
                        '-' +
                        bar.substring(
                          oTcodeLength + 3 + 4,
                          oTcodeLength + 3 + 6
                        ) +
                        '-' +
                        bar.substring(
                          oTcodeLength + 3 + 6,
                          oTcodeLength + 3 + 8
                        );
                      expirationDate = Date.valueOf(expirationDateStr);
                    }
                  } catch (Exception e) {
                    //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                    if (isLwc) {
                      errorList.add(
                        '产品BarCode(' +
                          bar +
                          ')的滅菌有効期限' +
                          expirationDateStr +
                          '错误！'
                      );
                    } else {
                      ApexPages.addmessage(
                        new ApexPages.message(
                          ApexPages.severity.ERROR,
                          '产品BarCode(' +
                            bar +
                            ')的滅菌有効期限' +
                            expirationDateStr +
                            '错误！'
                        )
                      );
                    }
                    continue;
                  }
                  if (bar.length() >= oTcodeLength + 20) {
                    if (
                      bar.substring(
                        oTcodeLength + 3 + 8,
                        oTcodeLength + 3 + 10
                      ) == '10' ||
                      bar.substring(
                        oTcodeLength + 3 + 8,
                        oTcodeLength + 3 + 10
                      ) == '21'
                    ) {
                      serialNoorLotNo = bar.substring(
                        oTcodeLength + 3 + 10,
                        bar.length() - 8
                      );
                    }
                  }
                } else if (bar.length() >= oTcodeLength + 12) {
                  if (
                    bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '10' ||
                    bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '21'
                  ) {
                    serialNoorLotNo = bar.substring(
                      oTcodeLength + 3 + 2,
                      bar.length() - 8
                    );
                  }
                }
              }
              if (
                bar.length() >= oTcodeLength + 3 + 8 &&
                bar.substring(bar.length() - 8, bar.length() - 5) == '250'
              ) {
                if (
                  bar.substring(bar.length() - 8, bar.length() - 5) == '250'
                ) {
                  tracingCode = bar.substring(bar.length() - 5, bar.length());
                  Matcher n = Pattern.compile('[0-9]').matcher(tracingCode);
                  if (n.find()) {
                    // gzw DB202305352696 入库管理编码验证程序调整 start
                    if (tracingCode.length() == 5) {
                      String tr = tracingCode;
                      String Ctr = tr.substring(tr.length() - 3, tr.length());
                      String Btr = tr.substring(
                        tr.length() - 4,
                        tr.length() - 3
                      );
                      String Atr = tr.substring(
                        tr.length() - 5,
                        tr.length() - 4
                      );
                      if (
                        Pattern.compile('[0-9]').matcher(Atr).find() ||
                        Pattern.compile('[0-9]').matcher(Ctr).find()
                      ) {
                        String str = '管理编码不正确，请与管理员确认是否错误。';
                        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                        if (isLwc) {
                          errorList.add(
                            '产品BarCode(' +
                              bar +
                              ')管理编码有误，请检查条形码数据。'
                          );
                        } else {
                          ApexPages.addmessage(
                            new ApexPages.message(
                              ApexPages.severity.ERROR,
                              '产品BarCode(' +
                                bar +
                                ')管理编码有误，请检查条形码数据。'
                            )
                          );
                        }
                        continue;
                      }
                    }
                    // String str = '管理编码不正确，请与管理员确认是否错误。';
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品BarCode(' + bar + ')管理编码中有数字，请与管理员确认是否错误！'));
                    // continue;
                    // gzw DB202305352696 入库管理编码验证程序调整 end
                  }
                } else {
                  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                  if (isLwc) {
                    errorList.add(
                      '产品BarCode(' + bar + ')的tracingCode错误！'
                    );
                  } else {
                    ApexPages.addmessage(
                      new ApexPages.message(
                        ApexPages.severity.ERROR,
                        '产品BarCode(' + bar + ')的tracingCode错误！'
                      )
                    );
                  }
                  continue;
                }
              }
              exitBarCodeMap.put(bar, bar);
              List<String> barcodedetList = new List<String>();
              barcodedetList.add(bar);
              barcodedetList.add(String.valueOf(expirationDate));
              barcodedetList.add(serialNoorLotNo);
              barcodedetList.add(tracingCode);
              consumableInventory.add(
                new ConsumableorderdetailsInfo(produ, barcodedetList)
              );
              consumableInventoryUse.add(
                new ConsumableorderdetailsInfo(produ, barcodedetList)
              );
            }
          }
        }
      }
      for (String bartxt : barCode241List) {
        if (!exitBarCodeMap.containsKey(bartxt)) {
          if (!errorMap.containsKey(bartxt)) {
            notInStorelist.add(bartxt);
          }
        }
      }
    }
  }

  public void inventoryEntry(List<String> barCodeList) {
    //所有barcode解析到的Jancode
    List<String> alljanCodeList = new List<String>();
    List<String> allotCodeList = new List<String>();
    List<String> barCode01List = new List<String>();
    List<String> barCode241List = new List<String>();
    Map<String, Map<String, String>> barJancodeMap = new Map<String, Map<String, String>>();
    Map<String, Map<String, String>> barOtcodeMap = new Map<String, Map<String, String>>();
    Map<String, List<String>> barcodeinfoMap = new Map<String, List<String>>();
    notInStorelist.clear();
    notEqualBARcodeCunMap.clear();
    Map<String, String> orderdetailMap = new Map<String, String>();
    List<Consumable_Orderdetails__c> orderdetail = [
      SELECT
        Id,
        Name,
        Consumable_order__c,
        Consumable_Product__c,
        Asset_Model_No__c
      FROM Consumable_Orderdetails__c
      WHERE
        Consumable_order__r.Dealer_Info__c = :accountid
        AND Consumable_order__c != NULL
        AND Consumable_order__c = :ESetId
        AND Order_Owner_WorkLocal__c = :userWorkLocation
      ORDER BY Name
    ];
    for (Integer i = 0; i < orderdetail.size(); i++) {
      orderdetailMap.put(
        orderdetail[i].Consumable_Product__c,
        orderdetail[i].Consumable_Product__c
      );
    }

    for (Integer i = 0; i < barCodeList.size(); i++) {
      Date expirationDate = null;
      String serialNoorLotNo = '';
      String tracingCode = '';
      String productDateStr = '';
      Date productionDate = null;
      String expirationDateStr = '';

      if (barCodeList[i].substring(0, 2) == '01') {
        String janCodeMark = '';
        //生产日期
        List<String> janCode = new List<String>();
        if (barCodeList[i].length() < 16) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add(
              '产品BarCode(' +
                barCodeList[i] +
                ')的位数不足16，不符合要求错误！'
            );
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                '产品BarCode(' +
                  barCodeList[i] +
                  ')的位数不足16，不符合要求错误！'
              )
            );
          }
          continue;
        } else {
          janCodeMark = barCodeList[i].substring(2, 16);
          try {
            Decimal test = Decimal.valueOf(janCodeMark);
          } catch (Exception e) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' + barCodeList[i] + ')的janCode错误！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' + barCodeList[i] + ')的janCode错误！'
                )
              );
            }
            continue;
          }
        }
        if (barCodeList[i].length() >= 22) {
          if (
            barCodeList[i]
              .substring(
                barCodeList[i].length() - 8,
                barCodeList[i].length() - 5
              ) != '250'
          ) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
                )
              );
            }
            continue;
          }
          if (barCodeList[i].substring(16, 18) == '11') {
            try {
              productDateStr =
                '20' +
                barCodeList[i].substring(18, 20) +
                '-' +
                barCodeList[i].substring(20, 22) +
                '-01';
              productionDate = Date.valueOf(productDateStr);
            } catch (Exception e) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  '产品BarCode(' +
                    barCodeList[i] +
                    ')的生产日期' +
                    productDateStr +
                    '错误！'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    '产品BarCode(' +
                      barCodeList[i] +
                      ')的生产日期' +
                      productDateStr +
                      '错误！'
                  )
                );
              }
              continue;
            }
            if (barCodeList[i].length() >= 32) {
              if (barCodeList[i].substring(24, 26) == '17') {
                try {
                  if (barCodeList[i].substring(30, 32) == '00') {
                    expirationDateStr =
                      '20' +
                      barCodeList[i].substring(26, 28) +
                      '-' +
                      barCodeList[i].substring(28, 30) +
                      '-' +
                      '01';
                    expirationDate = Date.valueOf(expirationDateStr);
                    expirationDate = expirationDate.addMonths(1)
                      .toStartofMonth()
                      .addDays(-1);
                  } else {
                    expirationDateStr =
                      '20' +
                      barCodeList[i].substring(26, 28) +
                      '-' +
                      barCodeList[i].substring(28, 30) +
                      '-' +
                      barCodeList[i].substring(30, 32);
                    expirationDate = Date.valueOf(expirationDateStr);
                  }
                } catch (Exception e) {
                  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                  if (isLwc) {
                    errorList.add(
                      '产品BarCode(' +
                        barCodeList[i] +
                        ')的滅菌有効期限' +
                        expirationDateStr +
                        '错误！'
                    );
                  } else {
                    ApexPages.addmessage(
                      new ApexPages.message(
                        ApexPages.severity.ERROR,
                        '产品BarCode(' +
                          barCodeList[i] +
                          ')的滅菌有効期限' +
                          expirationDateStr +
                          '错误！'
                      )
                    );
                  }
                  continue;
                }
                if (barCodeList[i].length() >= 42) {
                  if (
                    barCodeList[i].substring(32, 34) == '10' ||
                    barCodeList[i].substring(32, 34) == '21'
                  ) {
                    serialNoorLotNo = barCodeList[i]
                      .substring(34, barCodeList[i].length() - 8);
                  }
                }
              } else if (
                barCodeList[i].substring(24, 26) == '10' ||
                barCodeList[i].substring(24, 26) == '21'
              ) {
                serialNoorLotNo = barCodeList[i]
                  .substring(26, barCodeList[i].length() - 8);
              }
            }
          } else if (barCodeList[i].substring(16, 18) == '17') {
            try {
              if (barCodeList[i].substring(22, 24) == '00') {
                expirationDateStr =
                  '20' +
                  barCodeList[i].substring(18, 20) +
                  '-' +
                  barCodeList[i].substring(20, 22) +
                  '-01';
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品expirationDateStr' + expirationDateStr));
                expirationDate = Date.valueOf(expirationDateStr);
                expirationDate = expirationDate.addMonths(1)
                  .toStartofMonth()
                  .addDays(-1);
              } else {
                expirationDateStr =
                  '20' +
                  barCodeList[i].substring(18, 20) +
                  '-' +
                  barCodeList[i].substring(20, 22) +
                  '-' +
                  barCodeList[i].substring(22, 24);
                expirationDate = Date.valueOf(expirationDateStr);
              }
            } catch (Exception e) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                errorList.add(
                  '产品BarCode(' +
                    barCodeList[i] +
                    ')的滅菌有効期限' +
                    expirationDateStr +
                    '错误！'
                );
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(
                    ApexPages.severity.ERROR,
                    '产品BarCode(' +
                      barCodeList[i] +
                      ')的滅菌有効期限' +
                      expirationDateStr +
                      '错误！'
                  )
                );
              }
              continue;
            }
            if (barCodeList[i].length() >= 34) {
              if (
                barCodeList[i].substring(24, 26) == '10' ||
                barCodeList[i].substring(24, 26) == '21'
              ) {
                serialNoorLotNo = barCodeList[i]
                  .substring(26, barCodeList[i].length() - 8);
              }
            }
          } else if (barCodeList[i].length() >= 26) {
            if (
              barCodeList[i].substring(16, 18) == '10' ||
              barCodeList[i].substring(16, 18) == '21'
            ) {
              serialNoorLotNo = barCodeList[i]
                .substring(18, barCodeList[i].length() - 8);
            }
          }
        }
        if (
          barCodeList[i].length() >= 24 &&
          barCodeList[i]
            .substring(
              barCodeList[i].length() - 8,
              barCodeList[i].length() - 5
            ) == '250'
        ) {
          if (
            barCodeList[i]
              .substring(
                barCodeList[i].length() - 8,
                barCodeList[i].length() - 5
              ) == '250'
          ) {
            tracingCode = barCodeList[i]
              .substring(barCodeList[i].length() - 5, barCodeList[i].length());
            Matcher n = Pattern.compile('[0-9]').matcher(tracingCode);
            if (n.find()) {
              // gzw DB202305352696 入库管理编码验证程序调整 start
              if (tracingCode.length() == 5) {
                String tr = tracingCode;
                String Ctr = tr.substring(tr.length() - 3, tr.length());
                String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                if (
                  Pattern.compile('[0-9]').matcher(Atr).find() ||
                  Pattern.compile('[0-9]').matcher(Ctr).find()
                ) {
                  String str = '管理编码不正确，请与管理员确认是否错误。';
                  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                  if (isLwc) {
                    errorList.add(
                      '产品BarCode(' +
                        barCodeList[i] +
                        ')管理编码有误，请检查条形码数据。'
                    );
                  } else {
                    ApexPages.addmessage(
                      new ApexPages.message(
                        ApexPages.severity.ERROR,
                        '产品BarCode(' +
                          barCodeList[i] +
                          ')管理编码有误，请检查条形码数据。'
                      )
                    );
                  }
                  continue;
                }
              }
              // String str = '管理编码不正确，请与管理员确认是否错误。';
              // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品BarCode(' + barCodeList[i] + ')管理编码中有数字，请与管理员确认是否错误！'));
              // continue;
              // gzw DB202305352696 入库管理编码验证程序调整 end
            }
          } else {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              errorList.add(
                '产品BarCode(' + barCodeList[i] + ')的tracingCode错误！'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '产品BarCode(' + barCodeList[i] + ')的tracingCode错误！'
                )
              );
            }
            continue;
          }
        }
        List<String> barcodedetList = new List<String>();
        barcodedetList.add(barCodeList[i]);
        barcodedetList.add(String.valueOf(expirationDate));
        barcodedetList.add(serialNoorLotNo);
        barcodedetList.add(tracingCode);
        Integer jan1 = Integer.valueOf(janCodeMark.substring(0, 1));
        Integer jan2 = Integer.valueOf(janCodeMark.substring(1, 2));
        Integer jan3 = Integer.valueOf(janCodeMark.substring(2, 3));
        Integer jan4 = Integer.valueOf(janCodeMark.substring(3, 4));
        Integer jan5 = Integer.valueOf(janCodeMark.substring(4, 5));
        Integer jan6 = Integer.valueOf(janCodeMark.substring(5, 6));
        Integer jan7 = Integer.valueOf(janCodeMark.substring(6, 7));
        Integer jan8 = Integer.valueOf(janCodeMark.substring(7, 8));
        Integer jan9 = Integer.valueOf(janCodeMark.substring(8, 9));
        Integer jan10 = Integer.valueOf(janCodeMark.substring(9, 10));
        Integer jan11 = Integer.valueOf(janCodeMark.substring(10, 11));
        Integer jan12 = Integer.valueOf(janCodeMark.substring(11, 12));
        Integer jan13 = Integer.valueOf(janCodeMark.substring(12, 13));
        Integer count12 =
          jan2 +
          jan3 * 3 +
          jan4 +
          jan5 * 3 +
          jan6 +
          jan7 * 3 +
          jan8 +
          jan9 * 3 +
          jan10 +
          jan11 * 3 +
          jan12 +
          jan13 * 3;

        Integer count13 =
          jan1 * 3 +
          jan2 +
          jan3 * 3 +
          jan4 +
          jan5 * 3 +
          jan6 +
          jan7 * 3 +
          jan8 +
          jan9 * 3 +
          jan10 +
          jan11 * 3 +
          jan12 +
          jan13 * 3;
        String frost12 = (String.valueOf(count12))
          .substring((String.valueOf(count12)).length() - 1);
        String frost13 = (String.valueOf(count13))
          .substring((String.valueOf(count13)).length() - 1);
        //减去12位个位4
        frost12 = (String.valueOf(10 - Integer.valueOf(frost12)))
          .substring(
            (String.valueOf(10 - Integer.valueOf(frost12))).length() - 1
          );
        frost13 = (String.valueOf(10 - Integer.valueOf(frost13)))
          .substring(
            (String.valueOf(10 - Integer.valueOf(frost13))).length() - 1
          );

        janCode.add(janCodeMark.substring(1, 13) + frost12);
        janCode.add(janCodeMark.substring(0, 13) + frost12);
        janCode.add(janCodeMark.substring(1, 13) + frost13);
        janCode.add(janCodeMark.substring(0, 13) + frost13);
        alljanCodeList.addAll(janCode);
        Map<String, String> janCodeMap = new Map<String, String>();
        janCodeMap.put(janCodeMark.substring(1, 13) + frost12, barCodeList[i]);
        janCodeMap.put(janCodeMark.substring(0, 13) + frost12, barCodeList[i]);
        janCodeMap.put(janCodeMark.substring(1, 13) + frost13, barCodeList[i]);
        janCodeMap.put(janCodeMark.substring(0, 13) + frost13, barCodeList[i]);
        barJancodeMap.put(barCodeList[i], janCodeMap);
        barcodeinfoMap.put(barCodeList[i], barcodedetList);
        barCode01List.add(barCodeList[i]);
      } else if (barCodeList[i].substring(0, 3) == '241') {
        if (
          barCodeList[i].length() > 8 &&
          barCodeList[i]
            .substring(
              barCodeList[i].length() - 8,
              barCodeList[i].length() - 5
            ) != '250'
        ) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add('产品BarCode(' + barCodeList[i] + ')没有管理编码！');
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                '产品BarCode(' + barCodeList[i] + ')没有管理编码！'
              )
            );
          }
          continue;
        }
        List<String> otCodeList = new List<String>();
        Map<String, String> otCodeMap = new Map<String, String>();
        if (barCodeList[i].length() < 7) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add(
              '产品BarCode(' +
                barCodeList[i] +
                ')的位数不足16，不符合要求错误！'
            );
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                '产品BarCode(' +
                  barCodeList[i] +
                  ')的位数不足16，不符合要求错误！'
              )
            );
          }
          continue;
        } else if (barCodeList[i].length() == 11) {
          String otCode4 = barCodeList[i].substring(3, 7);
          String otCode5 = barCodeList[i].substring(3, 8);
          String otCode6 = barCodeList[i].substring(3, 9);
          String otCode7 = barCodeList[i].substring(3, 10);
          String otCode8 = barCodeList[i].substring(3, 11);
          otCodeList.add(otCode4);
          otCodeList.add(otCode5);
          otCodeList.add(otCode6);
          otCodeList.add(otCode7);
          otCodeList.add(otCode8);
          otCodeMap.put(otCode4, barCodeList[i]);
          otCodeMap.put(otCode5, barCodeList[i]);
          otCodeMap.put(otCode6, barCodeList[i]);
          otCodeMap.put(otCode7, barCodeList[i]);
          otCodeMap.put(otCode8, barCodeList[i]);
        } else if (barCodeList[i].length() >= 12) {
          String otCode4 = barCodeList[i].substring(3, 7);
          String otCode5 = barCodeList[i].substring(3, 8);
          String otCode6 = barCodeList[i].substring(3, 9);
          String otCode7 = barCodeList[i].substring(3, 10);
          String otCode8 = barCodeList[i].substring(3, 11);
          String otCode9 = barCodeList[i].substring(3, 12);
          otCodeList.add(otCode4);
          otCodeList.add(otCode5);
          otCodeList.add(otCode6);
          otCodeList.add(otCode7);
          otCodeList.add(otCode8);
          otCodeList.add(otCode9);
          otCodeMap.put(otCode4, barCodeList[i]);
          otCodeMap.put(otCode5, barCodeList[i]);
          otCodeMap.put(otCode6, barCodeList[i]);
          otCodeMap.put(otCode7, barCodeList[i]);
          otCodeMap.put(otCode8, barCodeList[i]);
          otCodeMap.put(otCode9, barCodeList[i]);
        }
        allotCodeList.addAll(otCodeList);
        barOtcodeMap.put(barCodeList[i], otCodeMap);
        barCode241List.add(barCodeList[i]);
      } else {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          errorList.add(
            '产品BarCode(' +
              barCodeList[i] +
              ')没有janCode或OTcode，不符合要求！'
          );
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              '产品BarCode(' +
                barCodeList[i] +
                ')没有janCode或OTcode，不符合要求！'
            )
          );
        }
        continue;
      }
    }
    //01通过检索产品是否存在
    Map<String, String> rightBar = new Map<String, String>();
    if (alljanCodeList.size() > 0) {
      Map<String, String> exitBarCodeMap = new Map<String, String>();
      List<Product2__c> product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Product2_Jancode__c,
          Pro2_Dealer_ENG__c,
          Pro2_Dealer_Object__c,
          Product_Type__c
        FROM Product2__c
        WHERE
          Product2_Jancode__c IN :alljanCodeList
          AND (NOT Product_Type__c LIKE :userPro_Typestr)
        ORDER BY SFDA_Expiration_Date__c DESC
      ];
      if (product2InStore.size() > 0) {
        Map<String, String> errorMap = new Map<String, String>();
        for (Product2__c produ : product2InStore) {
          for (String bar : barJancodeMap.keySet()) {
            if (
              barJancodeMap.get(bar).containsKey(produ.Product2_Jancode__c) &&
              !rightBar.containsKey(bar)
            ) {
              exitBarCodeMap.put(bar, bar);
              errorMap.put(bar, bar);
            }
          }
        }
        if (errorMap.size() > 0) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            errorList.add(
              'BarCode号[' +
                errorMap.values() +
                ']产品类型[' +
                product_Type +
                ']与用户的类型[' +
                userPro_Type +
                ']不符'
            );
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                'BarCode号[' +
                  errorMap.values() +
                  ']产品类型[' +
                  product_Type +
                  ']与用户的类型[' +
                  userPro_Type +
                  ']不符'
              )
            );
          }
        }
      }
      product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Product2_Jancode__c,
          Pro2_Dealer_ENG__c,
          Pro2_Dealer_Object__c,
          Product_Type__c
        FROM Product2__c
        WHERE
          Product2_Jancode__c IN :alljanCodeList
          AND Product_Type__c LIKE :userPro_Typestr
        ORDER BY SFDA_Expiration_Date__c DESC
      ];
      if (product2InStore.size() > 0) {
        Map<String, String> errorMap = new Map<String, String>();
        for (Product2__c produ : product2InStore) {
          for (String bar : barJancodeMap.keySet()) {
            if (
              barJancodeMap.get(bar).containsKey(produ.Product2_Jancode__c) &&
              !rightBar.containsKey(bar)
            ) {
              exitBarCodeMap.put(bar, bar);
              if (orderdetailMap.containsKey(produ.Id)) {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                rightBar.put(bar, bar);
              } else {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodeinfoMap.get(bar))
                );
                rightBar.put(bar, bar);
                list<String> overOrderBARcodeCunList = new List<String>();
                if (notEqualBARcodeCunMap.containsKey(produ.Id)) {
                  overOrderBARcodeCunList = notEqualBARcodeCunMap.get(produ.Id)
                    .clone();
                  overOrderBARcodeCunList.add(bar);
                  notEqualBARcodeCunMap.put(produ.Id, overOrderBARcodeCunList);
                } else {
                  overOrderBARcodeCunList.add(bar);
                  notEqualBARcodeCunMap.put(produ.Id, overOrderBARcodeCunList);
                }
              }
            }
          }
        }
      }
      for (String bartxt : barCode01List) {
        if (!exitBarCodeMap.containsKey(bartxt)) {
          notInStorelist.add(bartxt);
        }
      }
    }

    //241通过检索产品是否存在
    if (allotCodeList.size() > 0) {
      Map<String, String> exitBarCodeMap = new Map<String, String>();
      Map<String, String> errorMap = new Map<String, String>();
      List<Product2__c> product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Pro2_Dealer_Object__c,
          Pro2_Dealer_ENG__c
        FROM Product2__c
        WHERE
          OT_CODE__c IN :allotCodeList
          AND (NOT Product_Type__c LIKE :userPro_Typestr)
      ];
      if (product2InStore.size() > 0) {
        for (Product2__c produ : product2InStore) {
          for (String bar : barOtcodeMap.keySet()) {
            if (barOtcodeMap.get(bar).containsKey(produ.OT_CODE__c)) {
              exitBarCodeMap.put(bar, bar);
              errorMap.put(bar, bar);
            }
          }
        }
      }
      if (errorMap.size() > 0) {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          errorList.add(
            'BarCode号[' +
              errorMap.values() +
              ']产品类型[' +
              product_Type +
              ']与用户[' +
              userPro_Type +
              ']类型不符'
          );
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              'BarCode号[' +
                errorMap.values() +
                ']产品类型[' +
                product_Type +
                ']与用户[' +
                userPro_Type +
                ']类型不符'
            )
          );
        }
      }
      product2InStore = [
        SELECT
          Id,
          Name,
          Name__c,
          Intra_Trade_List_RMB__c,
          Asset_Model_No__c,
          OT_CODE__c,
          Pro2_Dealer_Object__c,
          Pro2_Dealer_ENG__c
        FROM Product2__c
        WHERE
          OT_CODE__c IN :allotCodeList
          AND Product_Type__c LIKE :userPro_Typestr
      ];

      if (product2InStore.size() > 0) {
        for (Product2__c produ : product2InStore) {
          for (String bar : barOtcodeMap.keySet()) {
            Date expirationDate = null;
            String serialNoorLotNo = '';
            String tracingCode = '';
            String productDateStr = '';
            Date productionDate = null;
            String expirationDateStr = '';
            Integer oTcodeLength = produ.OT_CODE__c.length();

            if (bar.length() >= oTcodeLength + 11) {
              if (bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '11') {
                try {
                  productDateStr =
                    '20' +
                    bar.substring(oTcodeLength + 5, oTcodeLength + 7) +
                    '-' +
                    bar.substring(oTcodeLength + 7, oTcodeLength + 9) +
                    '-01';
                  productionDate = Date.valueOf(productDateStr);
                } catch (Exception e) {
                  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                  if (isLwc) {
                    errorList.add(
                      '产品BarCode(' +
                        bar +
                        ')的生产日期' +
                        productDateStr +
                        '错误！'
                    );
                  } else {
                    ApexPages.addmessage(
                      new ApexPages.message(
                        ApexPages.severity.ERROR,
                        '产品BarCode(' +
                          bar +
                          ')的生产日期' +
                          productDateStr +
                          '错误！'
                      )
                    );
                  }
                  continue;
                }
                if (bar.length() >= oTcodeLength + 3 + 16) {
                  //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品BarCode17' + bar.substring(oTcodeLength + 3 + 8,oTcodeLength + 3 + 10)));
                  if (
                    bar.substring(
                      oTcodeLength + 3 + 8,
                      oTcodeLength + 3 + 10
                    ) == '17'
                  ) {
                    try {
                      if (
                        bar.substring(
                          oTcodeLength + 3 + 14,
                          oTcodeLength + 3 + 16
                        ) == '00'
                      ) {
                        expirationDateStr =
                          '20' +
                          bar.substring(
                            oTcodeLength + 3 + 10,
                            oTcodeLength + 3 + 12
                          ) +
                          '-' +
                          bar.substring(
                            oTcodeLength + 3 + 12,
                            oTcodeLength + 3 + 14
                          ) +
                          '-' +
                          '01';
                        expirationDate = Date.valueOf(expirationDateStr);
                        expirationDate = expirationDate.addMonths(1)
                          .toStartofMonth()
                          .addDays(-1);
                      } else {
                        expirationDateStr =
                          '20' +
                          bar.substring(
                            oTcodeLength + 3 + 10,
                            oTcodeLength + 3 + 12
                          ) +
                          '-' +
                          bar.substring(
                            oTcodeLength + 3 + 12,
                            oTcodeLength + 3 + 14
                          ) +
                          '-' +
                          bar.substring(
                            oTcodeLength + 3 + 14,
                            oTcodeLength + 3 + 16
                          );
                        expirationDate = Date.valueOf(expirationDateStr);
                      }
                    } catch (Exception e) {
                      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                      if (isLwc) {
                        errorList.add(
                          '产品BarCode(' +
                            bar +
                            ')的滅菌有効期限' +
                            expirationDateStr +
                            '错误！'
                        );
                      } else {
                        ApexPages.addmessage(
                          new ApexPages.message(
                            ApexPages.severity.ERROR,
                            '产品BarCode(' +
                              bar +
                              ')的滅菌有効期限' +
                              expirationDateStr +
                              '错误！'
                          )
                        );
                      }
                      continue;
                    }
                    if (bar.length() >= oTcodeLength + 3 + 25) {
                      if (
                        bar.substring(
                          oTcodeLength + 3 + 16,
                          oTcodeLength + 3 + 18
                        ) == '10' ||
                        bar.substring(
                          oTcodeLength + 3 + 16,
                          oTcodeLength + 3 + 18
                        ) == '21'
                      ) {
                        serialNoorLotNo = bar.substring(
                          oTcodeLength + 3 + 18,
                          bar.length() - 8
                        );
                        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,  'serialNoorLotNo' + serialNoorLotNo));
                      }
                    }
                  } else if (
                    bar.substring(
                      oTcodeLength + 3 + 8,
                      oTcodeLength + 3 + 10
                    ) == '10' ||
                    bar.substring(
                      oTcodeLength + 3 + 8,
                      oTcodeLength + 3 + 10
                    ) == '21'
                  ) {
                    serialNoorLotNo = bar.substring(
                      oTcodeLength + 3 + 10,
                      bar.length() - 8
                    );
                    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,  'serialNoorLotNo' + serialNoorLotNo));
                  }
                }
              } else if (
                bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '17'
              ) {
                try {
                  if (
                    bar.substring(oTcodeLength + 3 + 6, oTcodeLength + 3 + 8) ==
                    '00'
                  ) {
                    expirationDateStr =
                      '20' +
                      bar.substring(
                        oTcodeLength + 3 + 2,
                        oTcodeLength + 3 + 4
                      ) +
                      '-' +
                      bar.substring(
                        oTcodeLength + 3 + 4,
                        oTcodeLength + 3 + 6
                      ) +
                      '-01';
                    expirationDate = Date.valueOf(expirationDateStr);
                    expirationDate = expirationDate.addMonths(1)
                      .toStartofMonth()
                      .addDays(-1);
                  } else {
                    expirationDateStr =
                      '20' +
                      bar.substring(
                        oTcodeLength + 3 + 2,
                        oTcodeLength + 3 + 4
                      ) +
                      '-' +
                      bar.substring(
                        oTcodeLength + 3 + 4,
                        oTcodeLength + 3 + 6
                      ) +
                      '-' +
                      bar.substring(oTcodeLength + 3 + 6, oTcodeLength + 3 + 8);
                    expirationDate = Date.valueOf(expirationDateStr);
                  }
                } catch (Exception e) {
                  //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                  if (isLwc) {
                    errorList.add(
                      '产品BarCode(' +
                        bar +
                        ')的滅菌有効期限' +
                        expirationDateStr +
                        '错误！'
                    );
                  } else {
                    ApexPages.addmessage(
                      new ApexPages.message(
                        ApexPages.severity.ERROR,
                        '产品BarCode(' +
                          bar +
                          ')的滅菌有効期限' +
                          expirationDateStr +
                          '错误！'
                      )
                    );
                  }
                  continue;
                }
                if (bar.length() >= oTcodeLength + 20) {
                  if (
                    bar.substring(
                      oTcodeLength + 3 + 8,
                      oTcodeLength + 3 + 10
                    ) == '10' ||
                    bar.substring(
                      oTcodeLength + 3 + 8,
                      oTcodeLength + 3 + 10
                    ) == '21'
                  ) {
                    serialNoorLotNo = bar.substring(
                      oTcodeLength + 3 + 10,
                      bar.length() - 8
                    );
                  }
                }
              } else if (bar.length() >= oTcodeLength + 12) {
                if (
                  bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '10' ||
                  bar.substring(oTcodeLength + 3, oTcodeLength + 5) == '21'
                ) {
                  serialNoorLotNo = bar.substring(
                    oTcodeLength + 3 + 2,
                    bar.length() - 8
                  );
                }
              }
            }
            if (
              bar.length() >= oTcodeLength + 3 + 8 &&
              bar.substring(bar.length() - 8, bar.length() - 5) == '250'
            ) {
              if (bar.substring(bar.length() - 8, bar.length() - 5) == '250') {
                tracingCode = bar.substring(bar.length() - 5, bar.length());
                Matcher n = Pattern.compile('[0-9]').matcher(tracingCode);
                if (n.find()) {
                  // gzw DB202305352696 入库管理编码验证程序调整 start
                  if (tracingCode.length() == 5) {
                    String tr = tracingCode;
                    String Ctr = tr.substring(tr.length() - 3, tr.length());
                    String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
                    String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
                    if (
                      Pattern.compile('[0-9]').matcher(Atr).find() ||
                      Pattern.compile('[0-9]').matcher(Ctr).find()
                    ) {
                      String str = '管理编码不正确，请与管理员确认是否错误。';
                      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                      if (isLwc) {
                        errorList.add(
                          '产品BarCode(' +
                            bar +
                            ')管理编码有误，请检查条形码数据。'
                        );
                      } else {
                        ApexPages.addmessage(
                          new ApexPages.message(
                            ApexPages.severity.ERROR,
                            '产品BarCode(' +
                              bar +
                              ')管理编码有误，请检查条形码数据。'
                          )
                        );
                      }
                      continue;
                    }
                  }
                  // String str = '管理编码不正确，请与管理员确认是否错误。';
                  // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'产品BarCode(' + bar + ')管理编码中有数字，请与管理员确认是否错误！'));
                  // continue;
                  // gzw DB202305352696 入库管理编码验证程序调整 end
                }
              } else {
                //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
                if (isLwc) {
                  errorList.add('产品BarCode(' + bar + ')的tracingCode错误！');
                } else {
                  ApexPages.addmessage(
                    new ApexPages.message(
                      ApexPages.severity.ERROR,
                      '产品BarCode(' + bar + ')的tracingCode错误！'
                    )
                  );
                }
                continue;
              }
            }
            List<String> barcodedetList = new List<String>();
            barcodedetList.add(bar);
            barcodedetList.add(String.valueOf(expirationDate));
            barcodedetList.add(serialNoorLotNo);
            barcodedetList.add(tracingCode);
            if (barOtcodeMap.get(bar).containsKey(produ.OT_CODE__c)) {
              exitBarCodeMap.put(bar, bar);

              if (orderdetailMap.containsKey(produ.Id)) {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodedetList)
                );
              } else {
                consumableInventory.add(
                  new ConsumableorderdetailsInfo(produ, barcodedetList)
                );
                list<String> overOrderBARcodeCunList = new List<String>();
                if (notEqualBARcodeCunMap.containsKey(produ.Id)) {
                  overOrderBARcodeCunList = notEqualBARcodeCunMap.get(produ.Id)
                    .clone();
                  overOrderBARcodeCunList.add(bar);
                  notEqualBARcodeCunMap.put(produ.Id, overOrderBARcodeCunList);
                } else {
                  overOrderBARcodeCunList.add(bar);
                  notEqualBARcodeCunMap.put(produ.Id, overOrderBARcodeCunList);
                }
              }
            }
          }
        }
      }

      for (String bartxt : barCode241List) {
        if (!exitBarCodeMap.containsKey(bartxt)) {
          if (!errorMap.containsKey(bartxt)) {
            notInStorelist.add(bartxt);
          }
        }
      }
    }
    //判断产品是否一致
    if (notEqualBARcodeCunMap.size() > 0) {
      for (String widget : notEqualBARcodeCunMap.keySet()) {
        if (notEqualBARcodeCunMap.get(widget).size() > 0) {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            warningList.add('以下barcode产品与订货产品不一致。');
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.INFO,
                '以下barcode产品与订货产品不一致。'
              )
            );
          }
          for (
            String barcodeListTTT : (List<String>) notEqualBARcodeCunMap.get(
              widget
            )
          ) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              warningList.add(barcodeListTTT);
            } else {
              ApexPages.addmessage(
                new ApexPages.message(ApexPages.severity.INFO, barcodeListTTT)
              );
            }
          }
        }
      }
    }
  }

  public String ConfimResult() {
    list<String> overOrderproList = new List<String>();
    list<String> overOrderBARcodeCunList = new List<String>();
    list<String> overOrderBARcodeCunListTest = new List<String>();
    //overOrderBARcodeCunMap.clear();
    for (ConsumableorderdetailsInfo ass : ConsumableorderdetailsRecords) {
      if (
        orderWantArriveCunMap.get(ass.esd.Asset_Model_No__c) +
        orderProductArrivedCunMap.get(ass.esd.Asset_Model_No__c) >
        orderProductCunMap.get(ass.esd.Asset_Model_No__c) - 1
      ) {
        // 获取超过定货数量的消耗品信息
        overOrderBARcodeCunList = new List<String>();
        overOrderBARcodeCunList = overOrderBARcodeCunMap.get(
            ass.esd.Asset_Model_No__c
          )
          .clone();
        overOrderBARcodeCunList.add(ass.esd.Bar_Code__c);
        overOrderBARcodeCunMap.put(
          ass.esd.Asset_Model_No__c,
          overOrderBARcodeCunList
        );
        overOrderCunMap.put(
          ass.esd.Asset_Model_No__c,
          overOrderCunMap.get(ass.esd.Asset_Model_No__c) + 1
        );
        cancellationProList.add(ass.esd.Asset_Model_No__c);
      } else if (
        orderWantArriveCunMap.get(ass.esd.Asset_Model_No__c) +
        orderProductArrivedCunMap.get(ass.esd.Asset_Model_No__c) ==
        orderProductCunMap.get(ass.esd.Asset_Model_No__c) - 1
      ) {
        consumableorderdetailsRecordsUse.add(ass);
        cancellationProList.add(ass.esd.Asset_Model_No__c);
      } else {
        consumableorderdetailsRecordsUse.add(ass);
      }
      orderWantArriveCunMap.put(
        ass.esd.Asset_Model_No__c,
        orderWantArriveCunMap.get(ass.esd.Asset_Model_No__c) + 1
      );
    }
    for (ConsumableorderdetailsInfo ass : consumableInventory) {
      if (!orderWantArriveCunMap.containsKey(ass.Prod.Asset_Model_No__c)) {
        consumableInventoryUse.add(ass);
        continue;
      }
      if (
        orderWantArriveCunMap.get(ass.Prod.Asset_Model_No__c) +
        orderProductArrivedCunMap.get(ass.Prod.Asset_Model_No__c) >
        orderProductCunMap.get(ass.Prod.Asset_Model_No__c) - 1
      ) {
        //取得原有list
        overOrderBARcodeCunList = new List<String>();
        overOrderBARcodeCunList = overOrderBARcodeCunMap.get(
            ass.Prod.Asset_Model_No__c
          )
          .clone();
        //更新list
        overOrderBARcodeCunList.add(ass.barCodeNo);
        //更新map
        overOrderBARcodeCunMap.put(
          ass.Prod.Asset_Model_No__c,
          overOrderBARcodeCunList
        );
        overOrderCunMap.put(
          ass.Prod.Asset_Model_No__c,
          overOrderCunMap.get(ass.Prod.Asset_Model_No__c) + 1
        );
        cancellationProList.add(ass.Prod.Asset_Model_No__c);
      } else if (
        orderWantArriveCunMap.get(ass.Prod.Asset_Model_No__c) +
        orderProductArrivedCunMap.get(ass.Prod.Asset_Model_No__c) ==
        orderProductCunMap.get(ass.Prod.Asset_Model_No__c) - 1
      ) {
        consumableInventoryUse.add(ass);
        cancellationProList.add(ass.Prod.Asset_Model_No__c);
      } else {
        consumableInventoryUse.add(ass);
      }
      orderWantArriveCunMap.put(
        ass.Prod.Asset_Model_No__c,
        orderWantArriveCunMap.get(ass.Prod.Asset_Model_No__c) + 1
      );
    }
    for (Integer i = 0; i < productList.size(); i++) {
      if (overOrderBARcodeCunMap.get(productList[i]).size() > 0) {
        // 获取超过定货数量的消耗品信息
        overOrderproList.add(productList[i]);
      }
    }
    if (overOrderproList.size() > 0) {
      return '产品' +
        overOrderproList +
        '本次到货数量和已到货数量已经超过订货数量!';
    } else {
      return '';
    }
  }

  public void confimResultWithoutOrder() {
    /*list<String> overOrderproList = new list<String>();
        list<String> overOrderBARcodeCunList = new list<String>();
        orderProductCunMap.clear();
        orderProductArrivedCunMap.clear();
        orderWantArriveCunMap.clear();
        //所有产品数量
        List<Consumable_Orderdetails__c> mx1 = [SELECT Asset_Model_No__c,
                                                       Consumable_order__c,
                                                       Consumable_count__c,
                                                       Consumable_Product__r.Name
                                                FROM Consumable_Orderdetails__c
                                                WHERE Consumable_order__c in  :orderId
                                                AND Consumable_Product__r.Name in : prodName
                                                AND Consumable_order__r.Dealer_Info__c = :accountid];
        for (Integer i = 0; i < mx1.size(); i++) {
            orderProductCunMap.put(mx1[i].Consumable_order__c + mx1[i].Asset_Model_No__c,mx1[i].Consumable_count__c);
            orderProductArrivedCunMap.put(mx1[i].Consumable_order__c + mx1[i].Asset_Model_No__c,0);
            orderWantArriveCunMap.put(mx1[i].Consumable_order__c + mx1[i].Asset_Model_No__c,0);
        }
        //已到货产品数量
        List<Consumable_order_details2__c> mx2 = [SELECT Asset_Model_No__c,
                                                        Consumable_count__c,
                                                        Consumable_order_minor__c,
                                                        Consumable_Product__r.Name
                                                    FROM Consumable_order_details2__c
                                                    WHERE recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                                                    AND Consumable_order_minor__c in  :orderId
                                                    AND Consumable_Product__r.Name in : prodName
                                                    AND Dealer_Info_text__c = :accountName
                                                    AND Dealer_Arrive__c = true];
        for (Integer i = 0; i < mx2.size(); i++) {
            if(orderProductArrivedCunMap.containsKey(mx2[i].Consumable_order_minor__c + mx2[i].Asset_Model_No__c)){
                orderProductArrivedCunMap.put(mx2[i].Consumable_order_minor__c + mx2[i].Asset_Model_No__c,orderProductArrivedCunMap.get(mx2[i].Consumable_order_minor__c + mx2[i].Asset_Model_No__c)+1);
            }
        }*/

    //要到货产品数量
    for (ConsumableorderdetailsInfo ass : ConsumableorderdetailsRecords) {
      /*if(orderWantArriveCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c) + orderProductArrivedCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c) > orderProductCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c)-1){
                // 获取超过定货数量的消耗品信息
                overOrderproList.add('产品' + ass.esd.Asset_Model_No__c + '在订单' + ass.esd.Consumable_order_minor__r.Name + '中超过订货数量!\n');
                overOrderBARcodeCunList = new list<String>();
                overOrderBARcodeCunList = overOrderBARcodeCunMap.get(ass.esd.Asset_Model_No__c).clone();
                overOrderBARcodeCunList.add(ass.esd.Bar_Code__c);
                overOrderBARcodeCunMap.put(ass.esd.Asset_Model_No__c,overOrderBARcodeCunList);
            }else if(orderWantArriveCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c) + orderProductArrivedCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c) == orderProductCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c)-1){
                consumableorderdetailsRecordsUse.add(ass);
                orderWantArriveCunMap.put(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c,orderWantArriveCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c)+1);
            }else{*/
      consumableorderdetailsRecordsUse.add(ass);
    }
    /*orderWantArriveCunMap.put(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c,orderWantArriveCunMap.get(ass.esd.Consumable_order_minor__c + ass.esd.Asset_Model_No__c)+1);
        }
        return overOrderproList;*/
  }

  // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
  // 虚拟盘点单消耗品明细1创建巡回
  public void addInventoryDetails1(List<Consumable_order_details2__c> addList) {
    Map<String, List<Consumable_order_details2__c>> accountGroupMap = new Map<String, List<Consumable_order_details2__c>>();
    Map<String, Map<Id, Integer>> productMap = new Map<String, Map<Id, Integer>>();
    List<Id> orderIdList = new List<Id>();
    // 以经销商名将要生成出库单的数据分组
    for (Consumable_order_details2__c cod : addList) {
      List<Consumable_order_details2__c> accGroupList = new List<Consumable_order_details2__c>();
      Map<Id, Integer> pNumMap = new Map<Id, Integer>();
      Integer num = 1;
      if (
        accountGroupMap.containsKey(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        )
      ) {
        accGroupList = accountGroupMap.get(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        );
        pNumMap = productMap.get(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        );
        if (pNumMap.containsKey(cod.Consumable_Product__c)) {
          num = pNumMap.get(cod.Consumable_Product__c) + 1;
        }
      }
      orderIdList.add(cod.Consumable_Inventory_order__c);
      pNumMap.put(cod.Consumable_Product__c, num);
      accGroupList.add(cod);
      productMap.put(
        cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c,
        pNumMap
      );
      accountGroupMap.put(
        cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c,
        accGroupList
      );
      System.debug('======accGroupList' + accGroupList);
    }

    System.debug('======accountGroupMap' + accountGroupMap);
    List<Consumable_order__c> orderList = [
      SELECT Id, Name, Dealer_Info__r.Name, Order_Owner_WorkLocal__c
      FROM Consumable_order__c
      WHERE id IN :orderIdList
    ];

    // 生成各经销商出库订单List
    // List<Consumable_order__c> orderList = new List<Consumable_order__c> ();
    Map<String, List<Consumable_orderdetails__c>> insDetail1Map = new Map<String, List<Consumable_orderdetails__c>>();
    for (String acc : accountGroupMap.keySet()) {
      Consumable_order_details2__c arriveAccount = accountGroupMap.get(acc)[0];
      List<Consumable_order_details2__c> prodPriceList = accountGroupMap.get(
        acc
      );
      Map<Id, Integer> pNumMap = new Map<Id, Integer>();
      pNumMap = productMap.get(acc);
      List<Consumable_orderdetails__c> insDetail1 = new List<Consumable_orderdetails__c>();
      for (Id id : pNumMap.keySet()) {
        Consumable_orderdetails__c ins = new Consumable_orderdetails__c();

        //InsAfterDel.Consumable_order__c = p.id;
        ins.Product_Refind__c = pNumMap.get(id);
        ins.inventory_sum__c = pNumMap.get(id);
        ins.Consumable_Product__c = id;
        for (Consumable_order_details2__c pri : prodPriceList) {
          if (pri.Consumable_Product__c == id) {
            ins.Intra_Trade_List_RMB__c = pri.Intra_Trade_List_RMB__c;
            break;
          }
        }
        ins.Box_Piece__c = '盒';
        ins.Out_unit__c = '盒';
        //ins.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
        //ins.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
        //ins.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
        ins.RecordTypeId = System.Label.RT_ConOrderDetail1_Inventory;
        ins.Used_date__c = Date.today();
        ins.OwnerId = arriveAccount.OwnerId;

        insDetail1.add(ins);
      }
      System.debug('======insDetail1' + insDetail1);
      insDetail1Map.put(acc, insDetail1);
      System.debug('======insDetail1Map' + insDetail1Map);
    }
    List<Consumable_orderdetails__c> insDetail1List = new List<Consumable_orderdetails__c>();
    for (Consumable_order__c setId : orderList) {
      // 明细1
      List<Consumable_orderdetails__c> d1list = insDetail1Map.get(
        setId.Dealer_Info__r.Name + setId.Order_Owner_WorkLocal__c
      );
      Integer i = 1;
      for (Consumable_orderdetails__c dtl1 : d1list) {
        String str = ('000' + i).right(4);
        dtl1.Consumable_order__c = setId.Id;
        dtl1.Name = setId.Name + '-' + str;
        insDetail1List.add(dtl1);
      }
    }
    System.debug('======insDetail1List' + insDetail1List);
    insert insDetail1List;
  }
  // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end

  // 经销商的不同工作地调货自动生成出库单
  public void addSaleOrderAuto(List<Consumable_order_details2__c> addList) {
    Map<String, List<Consumable_order_details2__c>> accountGroupMap = new Map<String, List<Consumable_order_details2__c>>();
    Map<String, Map<Id, Integer>> productMap = new Map<String, Map<Id, Integer>>();
    // 以经销商名将要生成出库单的数据分组
    for (Consumable_order_details2__c cod : addList) {
      List<Consumable_order_details2__c> accGroupList = new List<Consumable_order_details2__c>();
      Map<Id, Integer> pNumMap = new Map<Id, Integer>();
      Integer num = 1;
      if (
        accountGroupMap.containsKey(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        )
      ) {
        accGroupList = accountGroupMap.get(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        );
        pNumMap = productMap.get(
          cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c
        );
        if (pNumMap.containsKey(cod.Consumable_Product__c)) {
          num = pNumMap.get(cod.Consumable_Product__c) + 1;
        }
      }
      pNumMap.put(cod.Consumable_Product__c, num);
      accGroupList.add(cod);
      productMap.put(
        cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c,
        pNumMap
      );
      accountGroupMap.put(
        cod.Dealer_Info_text__c + cod.Arrive_Owner_Work_Location__c,
        accGroupList
      );
    }

    // 生成各经销商出库订单List
    List<Consumable_order__c> orderList = new List<Consumable_order__c>();
    Map<String, List<Consumable_orderdetails__c>> insDetail1Map = new Map<String, List<Consumable_orderdetails__c>>();
    for (String acc : accountGroupMap.keySet()) {
      Consumable_order_details2__c arriveAccount = accountGroupMap.get(acc)[0];
      Consumable_order__c autoOrder = new Consumable_order__c();
      autoOrder.Name = '*';
      autoOrder.Dealer_Info__c = arriveAccount.Consumable_Arrived_order__r.Dealer_Info__c;
      autoOrder.OwnerId = arriveAccount.OwnerId;
      autoOrder.Order_type__c = '传票';
      autoOrder.SummonsStatus_c__c = '已完成';
      autoOrder.Order_ForDealerText__c = accountName;
      autoOrder.SummonsForDirction__c = '互相调货';
      autoOrder.RecordTypeid = System.Label.RT_ConOrder_Shipment;
      autoOrder.Outbound_Date__c = Date.today();
      autoOrder.Order_date__c = Date.today();
      autoOrder.AutoShipment__c = true;
      orderList.add(autoOrder);

      List<Consumable_order_details2__c> prodPriceList = accountGroupMap.get(
        acc
      );
      Map<Id, Integer> pNumMap = new Map<Id, Integer>();
      pNumMap = productMap.get(acc);
      List<Consumable_orderdetails__c> insDetail1 = new List<Consumable_orderdetails__c>();
      for (Id id : pNumMap.keySet()) {
        Consumable_orderdetails__c ins = new Consumable_orderdetails__c();

        //InsAfterDel.Consumable_order__c = p.id;
        ins.Shipment_Count__c = pNumMap.get(id);
        ins.Consumable_Product__c = id;
        for (Consumable_order_details2__c pri : prodPriceList) {
          if (pri.Consumable_Product__c == id) {
            ins.Intra_Trade_List_RMB__c = pri.Intra_Trade_List_RMB__c;
            break;
          }
        }
        ins.Box_Piece__c = '盒';
        ins.Out_unit__c = '盒';
        //ins.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
        //ins.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
        //ins.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
        ins.RecordTypeId = System.Label.RT_ConOrderDetail1_Shipment;
        ins.Used_date__c = Date.today();
        ins.OwnerId = arriveAccount.OwnerId;

        insDetail1.add(ins);
      }
      insDetail1Map.put(acc, insDetail1);
    }
    insert orderList;

    List<Id> orderIdList = new List<Id>();
    for (Consumable_order__c co : orderList) {
      orderIdList.add(co.Id);
    }

    orderList = new List<Consumable_order__c>();
    orderList = [
      SELECT Id, Name, Dealer_Info__r.Name, Order_Owner_WorkLocal__c
      FROM Consumable_order__c
      WHERE id IN :orderIdList
    ];

    // 设置明细1 和 明细2 的 订单ID
    List<Consumable_orderdetails__c> insDetail1List = new List<Consumable_orderdetails__c>();
    List<Consumable_order_details2__c> updDetail2List = new List<Consumable_order_details2__c>();
    for (Consumable_order__c setId : orderList) {
      // 明细1
      List<Consumable_orderdetails__c> d1list = insDetail1Map.get(
        setId.Dealer_Info__r.Name + setId.Order_Owner_WorkLocal__c
      );
      Integer i = 1;
      for (Consumable_orderdetails__c dtl1 : d1list) {
        String str = ('000' + i).right(4);
        // if(str.length() == 1){
        //     str = '0' + str;
        // }
        dtl1.Consumable_order__c = setId.Id;
        dtl1.Name = setId.Name + '-' + str;
        insDetail1List.add(dtl1);
      }

      // 明细2
      List<Consumable_order_details2__c> d2list = accountGroupMap.get(
        setId.Dealer_Info__r.Name + setId.Order_Owner_WorkLocal__c
      );
      for (Consumable_order_details2__c dtl2 : d2list) {
        dtl2.Send_Date__c = Date.today();
        dtl2.Consumable_Sale_order__c = null;
        dtl2.Consumable_Return_order__c = null;
        dtl2.Consumable_ZS_order__c = setId.Id;
        //dtl2.Delivery_List_RMB__c = null;
        dtl2.Return_date__c = null;
        dtl2.Return_reason__c = null;
        dtl2.Consumable_Shipment_order__c = setId.Id;
        // 更新借调信息 add by gzw 2020-0-415 start
        dtl2.Transfer_Time__c = 1;
        dtl2.Agency_Transfer__c = true;
        dtl2.Frist_Transfer_Agency__c = dtl2.Dealer_Info_text__c;
        // 更新借调信息 add by gzw 2020-0-415 end
        updDetail2List.add(dtl2);
      }
    }

    insert insDetail1List;
    update updDetail2List;
  }

  //到货确认
  public PageReference ArriveGoodsConfim() {
    //add by rentx 20210618 start CHAN-C3K4ZQ 跳过不必要的查询
    StaticParameter.ConsumableOrderTrigger = true;
    //add by rentx 20210618 end CHAN-C3K4ZQ 跳过不必要的查询
    cancellationProList = new List<String>();
    List<Consumable_order_details2__c> ins = new List<Consumable_order_details2__c>();
    String resultcheck = '';
    List<String> resultcheckWithoutOrder = new List<String>();
    Savepoint sp = Database.setSavepoint();

    if (
      ConsumableorderdetailsRecords.size() < 1 &&
      consumableInventory.size() < 1
    ) {
      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
      if (isLwc) {
        returnError = '不存在到货明细';
      } else {
        ApexPages.addmessage(
          new ApexPages.message(ApexPages.severity.ERROR, '不存在到货明细')
        );
      }
      return null;
    }
    if (EsetId != null && EsetId != '') {
      resultcheck = ConfimResult();
      if (resultcheck.length() > 0) {
        for (String widget : overOrderBARcodeCunMap.keySet()) {
          if (overOrderBARcodeCunMap.get(widget).size() > 0) {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              warningList.add(
                '产品' +
                  widget +
                  '本次到货数量超过' +
                  overOrderBARcodeCunMap.get(widget).size() +
                  '个订货的数量。'
              );
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.INFO,
                  '产品' +
                    widget +
                    '本次到货数量超过' +
                    overOrderBARcodeCunMap.get(widget).size() +
                    '个订货的数量。'
                )
              );
            }
            for (
              String barcodeListTTT : (List<String>) overOrderBARcodeCunMap.get(
                widget
              )
            ) {
              //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
              if (isLwc) {
                warningList.add(barcodeListTTT);
              } else {
                ApexPages.addmessage(
                  new ApexPages.message(ApexPages.severity.INFO, barcodeListTTT)
                );
              }
            }
          }
        }
      }
    } else {
      confimResultWithoutOrder();
    }
    try {
      Consumable_order__c orderMain = new Consumable_order__c();
      List<Consumable_order_details2__c> orderdetails = new List<Consumable_order_details2__c>();
      //到货正确信息
      orderMain.Name = '*';
      orderMain.Order_status__c = '批准';
      orderMain.Dealer_Info__c = accountid;
      orderMain.Deliver_date__c = Date.today();
      orderMain.Order_date__c = Date.today();
      orderMain.Order_type__c = '到货';
      orderMain.Order_ProType__c = userPro_Type;
      if (EsetId != null && EsetId != '') {
        orderMain.Arrive_Order__c = coc.Id;
      }
      orderMain.RecordTypeid = System.Label.RT_ConOrder_Arrive;
      insert orderMain;

      List<Consumable_order__c> consumable_order = [
        SELECT Name
        FROM Consumable_order__c
        WHERE id = :orderMain.id
      ];
      arriveId = orderMain.id;
      Decimal arriveAmount = 0;
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsUse) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------1------'));
        Consumable_order_details2__c insDetails = new Consumable_order_details2__c();
        insDetails.Id = ass.esd.Id;
        insDetails.Consumable_Arrived_order__c = orderMain.id;
        insDetails.Arrive_date__c = Date.today();
        insDetails.Bar_Code__c = ass.esd.Bar_Code__c;
        insDetails.OwnerId = UserInfo.getUserId();
        // 更新借调信息 add by gzw 2020-0-415 start
        if (orderdetails2trMap.containsKey(ass.esd.Bar_Code__c)) {
          insDetails.Transfer_Time__c = ass.esd.Transfer_Time__c == null
            ? 1
            : ass.esd.Transfer_Time__c;
          insDetails.Agency_Transfer__c = true;
          insDetails.Frist_Transfer_Agency__c = ass.esd.Frist_Transfer_Agency__c ==
            null
            ? ass.esd.Dealer_Info_text__c
            : ass.esd.Frist_Transfer_Agency__c;
        }
        // 更新借调信息 add by gzw 2020-0-415 end

        // 追加首次入库经销商 add by gzw 2020-04-27 start
        insDetails.Agencyinfo_fromSAP__c = ass.esd.Agencyinfo_fromSAP__c;
        insDetails.Frist_Storage_Agency__c = ass.esd.Frist_Storage_Agency__c ==
          null
          ? ass.esd.Dealer_Info_text__c
          : ass.esd.Frist_Storage_Agency__c;
        // 追加首次入库经销商 add by gzw 2020-04-27 end
        arriveAmount += ass.esd.Intra_Trade_List_RMB__c;
        orderdetails.add(insDetails);
      }
      Integer i = 1;
      for (ConsumableorderdetailsInfo ass : consumableInventoryUse) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------2------'));
        Consumable_order_details2__c insAfterDel = new Consumable_order_details2__c();
        String str = ('000' + i).right(4);
        // if(str.length() == 1){
        //     str = '0' + str;
        // }
        insAfterDel.Name = consumable_order[0].Name + '-' + str;
        insAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
        // gzw 手动入库 默认产品单价 20230307
        // if(EsetId != null && EsetId != ''){
        //     insAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
        // }else{
        //     insAfterDel.Intra_Trade_List_RMB__c = 0;
        // }
        insAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
        //gzw 手动入库 默认产品单价 20230307
        insAfterDel.Asset_Model_No__c = ass.Prod.Asset_Model_No__c;
        if (EsetId != null && EsetId != '') {
          insAfterDel.Consumable_order_minor__c = ESetId;
        }
        insAfterDel.Deliver_date__c = Date.today();
        insAfterDel.Direct_Arrive_Product__c = true;
        //TODO待确认
        insAfterDel.Sterilization_limit__c = ass.sterilizationlimitDate;
        insAfterDel.Consumable_Product__c = ass.Prod.id;
        insAfterDel.Bar_Code__c = ass.barCodeNo;
        insAfterDel.Used_account__c = accountid;
        //TODO待确认
        insAfterDel.SerialLotNo__c = ass.serialNoorLotNo;
        insAfterDel.TracingCode__c = ass.tracingCodeNo;

        //insAfterDel.Dealer_Arrive__c                = true;
        insAfterDel.Consumable_Arrived_order__c = orderMain.id;
        insAfterDel.Arrive_date__c = Date.today();
        insAfterDel.OwnerId = UserInfo.getUserId();
        // 更新借调信息 add by gzw 2020-0-415 start
        if (orderdetails2trMap.containsKey(ass.esd.Bar_Code__c)) {
          insAfterDel.Transfer_Time__c = ass.esd.Transfer_Time__c == null
            ? 1
            : ass.esd.Transfer_Time__c;
          insAfterDel.Agency_Transfer__c = true;
          insAfterDel.Frist_Transfer_Agency__c = ass.esd.Frist_Transfer_Agency__c ==
            null
            ? accountName
            : ass.esd.Frist_Transfer_Agency__c;
        }
        // 更新借调信息 add by gzw 2020-0-415 end

        // 追加首次入库经销商 add by gzw 2020-04-27 start
        insAfterDel.Agencyinfo_fromSAP__c = ass.esd.Agencyinfo_fromSAP__c;
        insAfterDel.Frist_Storage_Agency__c = ass.esd.Frist_Storage_Agency__c ==
          null
          ? accountName
          : ass.esd.Frist_Storage_Agency__c;
        // 追加首次入库经销商 add by gzw 2020-04-27 end
        arriveAmount += insAfterDel.Intra_Trade_List_RMB__c;
        //add by rentx 2020-10-14 strat
        //insAfterDel.ContractNo_text__c      = /*ass.esd.ContractNo__c*/;
        // tcm start
        if (String.isBlank(ass.esd.Consumable_order_minor__r.ContractNo__c)) {
          insAfterDel.ContractNo_text__c = ass.esd.ContractNo_text__c;
        } else {
          insAfterDel.ContractNo_text__c = ass.esd.Consumable_order_minor__r.ContractNo__c;
        }
        // tcm end
        //add by rentx 2020-10-14 end
        i++;

        ins.add(insAfterDel);
      }
      orderMain.Arrive_total_amount__c = arriveAmount;
      update orderMain;
      List<Consumable_order_details2__c> updateconsumableorderdetails2 = new List<Consumable_order_details2__c>();
      //更新明细取消时间 => 未到货取消，到货自动生成出库流程
      List<Consumable_order_details2__c> addSaleOrderList = new List<Consumable_order_details2__c>();
      for (Consumable_order_details2__c Cod : consumableorderdetails2Cancle) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------3------'));
        if (Cod.Dealer_Arrive__c) {
          if (Cod.Dealer_Shipment__c == false && Cod.Dealer_Saled__c == false) {
            addSaleOrderList.add(Cod);
          }
        } else {
          Cod.Cancellation_Date__c = Date.today();
          Cod.Cancellation_Flag__c = true;
          updateconsumableorderdetails2.add(Cod);
        }
      }

      if (addSaleOrderList.size() > 0) {
        addSaleOrderAuto(addSaleOrderList);
      }

      if (updateconsumableorderdetails2.size() > 0) {
        update updateconsumableorderdetails2;
      }

      List<Consumable_order_details2__c> insertconsumableorderdetails2 = new List<Consumable_order_details2__c>();
      for (Consumable_order_details2__c Cod2 : consumableorderdetails2Insert) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------4------'));
        String str = ('000' + i).right(4);
        // if(str.length() == 1){
        //     str = '0' + str;
        // }
        Cod2.Name = consumable_order[0].Name + '-' + str;
        Cod2.Consumable_order_minor__c = null;
        Cod2.Deliver_date__c = Date.today();
        Cod2.Used_account__c = accountid;
        Cod2.Consumable_Arrived_order__c = orderMain.id;
        Cod2.Arrive_date__c = Date.today();
        // 更新借调信息 add by gzw 2020-0-415 start
        if (orderdetails2trMap.containsKey(Cod2.Bar_Code__c)) {
          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------4++++++' + Cod2.Frist_Storage_Agency__c));
          Cod2.Transfer_Time__c = Cod2.Transfer_Time__c == null
            ? 1
            : Cod2.Transfer_Time__c;
          Cod2.Agency_Transfer__c = true;
          Cod2.Frist_Transfer_Agency__c = Cod2.Frist_Transfer_Agency__c == null
            ? accountName
            : Cod2.Frist_Transfer_Agency__c;
        }
        // 更新借调信息 add by gzw 2020-0-415 end

        // 追加首次入库经销商 add by gzw 2020-04-27 start
        Cod2.Agencyinfo_fromSAP__c = Cod2.Agencyinfo_fromSAP__c;
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------4------' + Cod2.Frist_Storage_Agency__c));
        Cod2.Frist_Storage_Agency__c = Cod2.Frist_Storage_Agency__c == null
          ? accountName
          : Cod2.Frist_Storage_Agency__c;
        // 追加首次入库经销商 add by gzw 2020-04-27 end
        insertconsumableorderdetails2.add(Cod2);
        i++;
      }

      //return null;

      if (insertconsumableorderdetails2.size() > 0) {
        insert insertconsumableorderdetails2;
      }

      if (ins.size() > 0) {
        insert ins;
      }
      if (orderdetails.size() > 0) {
        ControllerUtil.updateOrderDetailsSatus(orderdetails);
      }
      //超出到货数量产品取消日期更新
      List<Consumable_order_details2__c> needcanceldet = new List<Consumable_order_details2__c>();
      if (cancellationProList.size() > 0) {
        needcanceldet = [
          SELECT Id, Cancellation_Date__c
          FROM Consumable_order_details2__c
          WHERE
            Asset_Model_No__c IN :cancellationProList
            AND Consumable_order_minor__c = :ESetId
            AND Dealer_Arrive__c = FALSE
            AND Cancellation_Date__c = NULL
        ];
        if (needcanceldet.size() > 0) {
          for (Integer a = 0; a < needcanceldet.size(); a++) {
            needcanceldet[a].Cancellation_Date__c = Date.today();
            needcanceldet[a].Cancellation_Flag__c = true;
          }
          ControllerUtil.updateOrderDetailsSatus(needcanceldet);
        }
      }
      List<Consumable_order__c> qs = new List<Consumable_order__c>();
      qs = [
        SELECT
          Id,
          Name,
          Order_status__c,
          Dealer_Info__c,
          Deliver_date__c,
          ReturnGs_Upload_Date__c,
          Order_Reason__c,
          Order_date__c,
          Contract_application_decision__c,
          Order_type__c,
          Total_num__c,
          OrderNumber_arrived__c,
          Delivery_detail_count__c,
          OrderNumber_notarrive__c
        FROM Consumable_order__c
        WHERE Id = :ESetId AND Dealer_Info__c = :accountid
      ];
      if (qs.size() > 0) {
        coc = qs[0];
      }
      saveFLGbln = true;
      alertMessage = '到货完成。';
      // Integer a = 1/0;
    } catch (Exception e) {
      Database.rollback(sp);
      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
      if (isLwc) {
        returnError = e.getLineNumber() + '---' + e.getMessage();
      } else {
        ApexPages.addMessages(e);
      }
      return null;
    }
    if (resultcheck.length() > 0) {
      return null;
    } else if (resultcheckWithoutOrder.size() > 0) {
      return null;
    } else {
      urlType = 'UnabletoEdit';
      return UnabletoEdit();
      // return null;
    }
  }

  // 返品检查，后回库
  public integer GoodsReturnCheck() {
    List<String> GrListIn = ParseBarCode(barcode);
    GrList = new List<String>();
    Map<String, String> CheckBarcodeResult = new Map<String, String>();
    for (String Str : GrListIn) {
      CheckBarcodeResult.put(str, 'UnFind');
    }
    List<Consumable_order_details2__c> BarcodeRetrunResult = [
      SELECT
        Id,
        Name,
        Intra_Trade_List_RMB__c,
        Asset_Model_No__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__r.Asset_Model_No__c,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        Dealer_Arrive__c,
        Guarantee_period_for_products__c,
        CFDA_Status__c,
        ProductPacking_list_manual__c,
        Report_Product_Approbation__c,
        Report_Product_Expiration__c,
        Box_Piece__c,
        Rrturn_count__c,
        Product_Type__c,
        //add by rentx 2020-10-14 start
        ContractNo_text__c /*,ContractNo__c*/,
        // tcm start
        Consumable_order_minor__r.ContractNo__c
      // tcm end
      //add by rentx 2020-10-14 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND (Dealer_Shipment__c = TRUE
        //AND Consumable_Shipment_order__r.SummonsForDirction__c != '互相调货')
        OR Dealer_Saled__c = TRUE)
        AND Dealer_Info_text__c = :accountName
        AND Bar_Code__c IN :GrListIn
        AND (NOT Product_Type__c LIKE :userPro_Typestr)
        AND Dealer_Returned__c = FALSE
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
      ORDER BY Box_Piece__c DESC, Name
    ];
    if (BarcodeRetrunResult.size() > 0) {
      for (Integer i = 0; i < BarcodeRetrunResult.size(); i++) {
        if (
          ErrorIdMap.containsKey(BarcodeRetrunResult[i].Bar_Code__c) ||
          ExistIdMap.containsKey(BarcodeRetrunResult[i].Bar_Code__c)
        ) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str =
            '产品类型[' +
            BarcodeRetrunResult[i].Product_Type__c +
            ']与用户的类型[' +
            userPro_Type +
            ']不符';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(BarcodeRetrunResult[i], str)
          );
          ErrorIdMap.put(
            BarcodeRetrunResult[i].Bar_Code__c,
            BarcodeRetrunResult[i].Bar_Code__c
          );
        }
      }
    }
    AllMap.putAll(ErrorIdMap);
    BarcodeRetrunResult = [
      SELECT
        Id,
        Consumable_order_minor__c,
        Deliver_date__c,
        Asset_Model_No__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Consumable_Product__r.Name__c,
        Name,
        Bar_Code__c,
        Arrive_date__c,
        Dealer_Shipment__c,
        Lose_Flag__c,
        Dealer_Saled__c,
        Return_reason__c,
        Consumable_Shipment_order__c,
        Consumable_Shipment_order__r.Name,
        Send_date__c,
        Consumable_Sale_order__c,
        Consumable_Sale_order__r.Name,
        Used_date__c,
        SerialLotNo__c,
        TracingCode__c,
        Sterilization_limit__c,
        Consumable_ZS_order__c,
        Consumable_ZS_order__r.Name,
        Product_OutDate__c,
        Invoice_Date__c,
        recordtypeid,
        Consumable_Arrived_order__c,
        Box_Piece__c,
        Rrturn_count__c,
        Intra_Trade_List_RMB__c,
        OwnerId,
        SummonsForDirction_det__c,
        Order_Dealer_Info__c,
        HospItal_Name__c,
        Agencyinfo_fromSAP__c,
        Frist_Storage_Agency__c,
        Dealer_Info_text__c,
        Used_account__c,
        Transfer_Time__c,
        Frist_Transfer_Agency__c,
        Arrive_Owner_Work_Location__c,
        Agency_Transfer__c,
        //add by rentx 2020-10-14 start
        ContractNo_text__c /*,ContractNo__c*/,
        // tcm start
        Consumable_order_minor__r.ContractNo__c,
        // tcm end
        //add by rentx 2020-10-14 end
        Report_Product_Expiration__c,
        Intra_Trade_List__c
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND (Dealer_Shipment__c = TRUE
        //AND Consumable_Shipment_order__r.SummonsForDirction__c != '互相调货')
        OR Dealer_Saled__c = TRUE
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        OR (Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Lose_Flag__c = TRUE))
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
        AND Dealer_Info_text__c = :accountName
        AND Bar_Code__c IN :GrListIn
        AND Product_Type__c LIKE :userPro_Typestr
        AND Dealer_Returned__c = FALSE
        AND (Arrive_Owner_Work_Location__c = :userWorkLocation
        OR OwnerId = :System.Label.User_OlympusSystem)
      ORDER BY Box_Piece__c DESC, Name
    ];
    ShowGoodsofReturnList = new List<ConsumableorderdetailsInfo>();

    //返品时istinct处理
    if (ArrType == 'ReG') {
      BarcodeRetrunResult = getDistinctZSOrder(BarcodeRetrunResult);
    }

    for (Consumable_order_details2__c codc : BarcodeRetrunResult) {
      if (
        ErrorIdMap.containsKey(codc.Bar_Code__c) ||
        ExistIdMap.containsKey(codc.Bar_Code__c)
      ) {
        // 跳过已经处理的消耗品明细
        continue;
      } else {
        Matcher n = Pattern.compile('[0-9]').matcher(codc.TracingCode__c);
        if (n.find()) {
          // gzw DB202305352696 入库管理编码验证程序调整 start
          if (codc.TracingCode__c.length() == 5) {
            String tr = codc.TracingCode__c;
            String Ctr = tr.substring(tr.length() - 3, tr.length());
            String Btr = tr.substring(tr.length() - 4, tr.length() - 3);
            String Atr = tr.substring(tr.length() - 5, tr.length() - 4);
            if (
              Pattern.compile('[0-9]').matcher(Atr).find() ||
              Pattern.compile('[0-9]').matcher(Ctr).find()
            ) {
              String str = '管理编码有误，请检查条形码数据。';
              ConsumableorderdetailsRecordserror.add(
                new ConsumableorderdetailsInfo(codc, str)
              );
              ErrorIdMap.put(codc.Bar_Code__c, codc.Bar_Code__c);
              continue;
            }
          }
          // String str = '管理编码中有数字，请与管理员确认是否错误。';
          // ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(codc,str));
          // ErrorIdMap.put(codc.Bar_Code__c,codc.Bar_Code__c);
          // continue;
          // gzw DB202305352696 入库管理编码验证程序调整 end
        }
        if (CheckBarcodeResult.containsKey(codc.Bar_Code__c)) {
          GrList.add(codc.Bar_Code__c);
          if (codc.Dealer_Shipment__c == true) {
            CheckBarcodeResult.put(codc.Bar_Code__c, '已出库');
            ShowGoodsofReturnList.add(new ConsumableorderdetailsInfo(codc));
          }
          // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
          // else{
          //     CheckBarcodeResult.put( codc.Bar_Code__c, '已销售');
          //     ShowGoodsofReturnList.add(  new ConsumableorderdetailsInfo( codc    )   );
          // }
          else if (codc.Dealer_Saled__c == true) {
            CheckBarcodeResult.put(codc.Bar_Code__c, '已销售');
            ShowGoodsofReturnList.add(new ConsumableorderdetailsInfo(codc));
          } else {
            CheckBarcodeResult.put(codc.Bar_Code__c, '已丢失');
            ShowGoodsofReturnList.add(new ConsumableorderdetailsInfo(codc));
          }
          // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
        } else {
          continue;
        }
      }
    }

    return BarcodeRetrunResult.size();
  }

  // 单位为个的Barcode对应的出库单
  public integer Getconsumableorderdetails2Nobox() {
    consumableorderdetails2Nobox = new List<Consumable_order_details2__c>();
    BarcodeCntMap.clear();
    consumableorderdetails2Nobox = [
      SELECT
        Id,
        Consumable_order_minor__c,
        Deliver_date__c,
        Asset_Model_No__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Consumable_Product__r.Name__c,
        Name,
        Bar_Code__c,
        Arrive_date__c,
        Dealer_Shipment__c,
        Dealer_Saled__c,
        Return_reason__c,
        Consumable_Shipment_order__c,
        Send_date__c,
        Consumable_Sale_order__c,
        Used_date__c,
        SerialLotNo__c,
        TracingCode__c,
        Sterilization_limit__c,
        Consumable_ZS_order__c,
        Consumable_ZS_order__r.Name,
        Product_OutDate__c,
        Invoice_Date__c,
        recordtypeid,
        Consumable_Arrived_order__c,
        Box_Piece__c,
        RemoveBox_No__c,
        RemoveBox_date__c,
        Rrturn_count__c,
        Dealer_Info_text__c,
        Arrive_Owner_Work_Location__c,
        Intra_Trade_List_RMB__c,
        //add by rentx 2020-10-13 start 返品时 新数据记录SAP合同号
        ContractNo_text__c /*,ContractNo__c*/,
        // tcm start
        Consumable_order_minor__r.ContractNo__c,
        // tcm end
        Report_Product_Expiration__c,
        //add by rentx 2020-10-13 end
        Intra_Trade_List__c
      //gzw 手动入库 默认产品单价 20230307
      FROM Consumable_order_details2__c
      WHERE
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        // (Dealer_Shipment__c = true or Dealer_Saled__c =  true)
        (Dealer_Shipment__c = TRUE
        OR Dealer_Saled__c = TRUE
        OR (Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Lose_Flag__c = TRUE))
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
        AND Dealer_Info_text__c = :accountName
        AND Bar_Code__c IN :noboxBarcodeList
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Dealer_Returned__c = FALSE
        AND Box_Piece__c = '个'
      ORDER BY Consumable_ZS_order__c, RemoveBox_No__c
    ];

    AggregateResult[] results = [
      SELECT Consumable_ZS_order__c, Bar_Code__c, count(Id) recordCount
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        // AND  (Dealer_Shipment__c= true OR  Dealer_Saled__c = true)
        AND (Dealer_Shipment__c = TRUE
        OR Dealer_Saled__c = TRUE
        OR (Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Lose_Flag__c = TRUE))
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
        AND Dealer_Returned__c = FALSE
        AND Bar_Code__c IN :noboxBarcodeList
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Box_Piece__c = '个'
        AND Dealer_Info_text__c = :accountName
      GROUP BY Consumable_ZS_order__c, Bar_Code__c
    ];

    for (AggregateResult ar : results) {
      String key =
        '' +
        ar.get('Consumable_ZS_order__c') +
        ar.get('Bar_Code__c');
      BarcodeCntMap.put(key, Integer.valueOf(ar.get('recordCount')));
    }

    return consumableorderdetails2Nobox.size();
  }

  //distinct
  public List<Consumable_order_details2__c> getDistinctZSOrder(
    List<Consumable_order_details2__c> duplicates
  ) {
    List<Consumable_order_details2__c> distinctOrder = new List<Consumable_order_details2__c>();

    for (Consumable_order_details2__c details2 : duplicates) {
      Boolean found = false;
      for (Consumable_order_details2__c result : distinctOrder) {
        if (
          details2.Consumable_ZS_order__c == result.Consumable_ZS_order__c &&
          details2.Bar_Code__c == result.Bar_Code__c
        ) {
          found = true;
          break;
        }
      }

      if (!found) {
        distinctOrder.add(details2);

        if (details2.Box_Piece__c == '个')
          noboxBarcodeList.add(details2.Bar_Code__c);
      }
    }
    return distinctOrder;
  }

  // Update返品明细信息
  public Pagereference UpdateGoodsOfReturn() {
    if (ShowGoodsofReturnList == null) {
      GoodsReturnCheck();
    }
    Getconsumableorderdetails2Nobox();

    Savepoint sp = Database.setSavepoint();
    boolean hasReturnGoods = false;
    boolean hasLoseGoods = false;
    try {
      if (ShowGoodsofReturnList.size() > 0 || consumableInventory.size() > 0) {
        Consumable_order__c Return_Order_Sheet = new Consumable_order__c();
        Return_Order_Sheet.Name = '*';
        Return_Order_Sheet.Order_status__c = '批准';
        Return_Order_Sheet.ReturnGs_Uploader_ID__c = UserInfo.getUserId();
        Return_Order_Sheet.ReturnGs_Upload_Date__c = Date.today();
        Return_Order_Sheet.Order_type__c = '返品';
        Return_Order_Sheet.RecordTypeid = System.Label.Dealer_Returned_Label;
        Return_Order_Sheet.Order_ProType__c = userPro_Type;
        insert Return_Order_Sheet;
        return_Order_id = Return_Order_Sheet.id;
        List<Consumable_order__c> consumable_order_ret = [
          SELECT Name
          FROM Consumable_order__c
          WHERE id = :Return_Order_Sheet.id
        ];

        //2017-07-03 到货订单
        Consumable_order__c Arrived_Order_Sheet = new Consumable_order__c();
        Arrived_Order_Sheet.Name = '*';
        Arrived_Order_Sheet.Order_status__c = '批准';
        Arrived_Order_Sheet.Order_type__c = '到货';
        Arrived_Order_Sheet.Dealer_Info__c = accountid;
        Arrived_Order_Sheet.RecordTypeid = System.Label.RT_ConOrder_Arrive;
        Arrived_Order_Sheet.Order_ProType__c = userPro_Type;
        insert Arrived_Order_Sheet;
        List<Consumable_order__c> consumable_order_arr = [
          SELECT Name
          FROM Consumable_order__c
          WHERE id = :Arrived_Order_Sheet.id
        ];

        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        // 虚拟盘点单
        Consumable_order__c Inventory_Order_Sheet = new Consumable_order__c();
        Inventory_Order_Sheet.Name = '*';
        Inventory_Order_Sheet.Order_status__c = '批准';
        Inventory_Order_Sheet.ReturnGs_Uploader_ID__c = UserInfo.getUserId();
        Inventory_Order_Sheet.Inventory_date__c = Date.today();
        Inventory_Order_Sheet.Dealer_Info__c = accountid;
        Inventory_Order_Sheet.ReturnGs_Upload_Date__c = Date.today();
        Inventory_Order_Sheet.Order_type__c = '盘点';
        Inventory_Order_Sheet.RecordTypeid = System.Label.RT_ConOrder_Inventory;
        Inventory_Order_Sheet.Order_ProType__c = userPro_Type;
        insert Inventory_Order_Sheet;
        inventory_Order_id = Inventory_Order_Sheet.id;
        //List<Consumable_order__c> consumable_order_Inv = [SELECT Name FROM Consumable_order__c WHERE id =:Inventory_Order_Sheet.id]; //Commented By Li Jun 20230616
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end

        List<Consumable_order_details2__c> codcList = new List<Consumable_order_details2__c>();
        //新规返品对应的产品明细
        List<Consumable_order_details2__c> codcorderdetList = new List<Consumable_order_details2__c>();
        //返品原因,返品数量检查
        for (ConsumableorderdetailsInfo codi : ShowGoodsofReturnList) {
          if (
            codi.esd.Box_Piece__c == '个' &&
            (codi.esd.Rrturn_count__c == null ||
            String.valueof(codi.esd.Rrturn_count__c) == '' ||
            codi.esd.Rrturn_count__c <= 0)
          ) {
            continue;
          }

          if (
            codi.esd.Return_reason__c == null ||
            codi.esd.Return_reason__c == ''
          ) {
            if (isLwc) {
              returnError = '请补充返品原因';
            } else {
              codi.esd.Return_reason__c.addError('请补充返品原因');
            }
            return null;
          }

          if (codi.esd.Box_Piece__c == '个' && codi.esd.Rrturn_count__c > 0) {
            String key =
              '' +
              codi.esd.Consumable_ZS_order__c +
              codi.esd.Bar_Code__c;
            Integer deliverycnt = BarcodeCntMap.get(key);
            if (codi.esd.Rrturn_count__c > deliverycnt) {
              if (isLwc) {
                returnError = '超出出库数量';
              } else {
                codi.esd.Rrturn_count__c.addError('超出出库数量');
              }
              return null;
            }
          }
        }

        Integer tempNo = 0;
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        List<Consumable_order_details2__c> conOrderDetail2InList = new List<Consumable_order_details2__c>();
        // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
        for (ConsumableorderdetailsInfo codi : ShowGoodsofReturnList) {
          Consumable_order_details2__c codcorderdet = new Consumable_order_details2__c();

          //单位=个
          if (
            codi.esd.Box_Piece__c == '个' &&
            (codi.esd.Rrturn_count__c == null ||
            String.valueof(codi.esd.Rrturn_count__c) == '' ||
            codi.esd.Rrturn_count__c <= 0)
          ) {
            continue;
          }

          if (codi.esd.Box_Piece__c == '个' && codi.esd.Rrturn_count__c > 0) {
            hasReturnGoods = true;

            Integer cnt = 1;
            for (
              Consumable_order_details2__c codctmp : consumableorderdetails2Nobox
            ) {
              if (
                codctmp.Consumable_ZS_order__c ==
                codi.esd.Consumable_ZS_order__c &&
                codctmp.Bar_Code__c == codi.esd.Bar_Code__c
              ) {
                Consumable_order_details2__c esd = codctmp;
                // esd.Consumable_Return_order__c      = Return_Order_Sheet.id;
                esd.Return_reason__c = codi.esd.Return_reason__c;
                esd.Return_date__c = Date.today();
                // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
                // esd.Return_reason__c                = codi.esd.Return_reason__c;
                // esd.Return_date__c                  = Date.today();
                // esd.Consumable_Return_order__c      = Return_Order_Sheet.id;
                if (
                  codi.esd.Dealer_Saled__c == false &&
                  codi.esd.Dealer_Shipment__c == false &&
                  codi.esd.Lose_Flag__c == true
                ) {
                  // esd.Lose_Flag__c = false;
                  esd.Consumable_Inventory_order__c = Inventory_Order_Sheet.id;
                  conOrderDetail2InList.add(esd);
                  hasLoseGoods = true;
                } else {
                  // esd.Return_date__c                  = Date.today();
                  esd.Consumable_Return_order__c = Return_Order_Sheet.id;
                }
                // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
                esd.ReturnGs_Uploader_ID__c = UserInfo.getUserId();

                //修改返品所有人
                esd.OwnerId = UserInfo.getUserId();
                esd.RecordTypeId = System.Label.RT_ConOrderDetail2_Return;

                //Consumable_order__c coc = [select name from Consumable_order__c where Id =:Arrived_Order_Sheet.id];
                codcorderdet = new Consumable_order_details2__c();
                codcorderdet.Name =
                  consumable_order_arr[0].name +
                  '-' +
                  String.valueOf(++tempNo).leftPad(4, '0');
                codcorderdet.Consumable_order_minor__c = codi.esd.Consumable_order_minor__c;
                codcorderdet.Consumable_Arrived_order__c = Arrived_Order_Sheet.id;
                //修改到货所有人
                codcorderdet.OwnerId = UserInfo.getUserId();
                codcorderdet.Arrive_date__c = Date.today();
                codcorderdet.Consumable_Product__c = codi.esd.Consumable_Product__c;
                codcorderdet.Asset_Model_No__c = codi.esd.Asset_Model_No__c;
                codcorderdet.Bar_Code__c = codi.esd.Bar_Code__c;
                codcorderdet.Deliver_date__c = codi.esd.Deliver_date__c;
                codcorderdet.SerialLotNo__c = codi.esd.SerialLotNo__c;
                codcorderdet.TracingCode__c = codi.esd.TracingCode__c;
                codcorderdet.Sterilization_limit__c = codi.esd.Sterilization_limit__c;
                //gzw 手动入库 默认产品单价 20230307
                codcorderdet.Intra_Trade_List_RMB__c = (codi.esd.Intra_Trade_List_RMB__c ==
                  null ||
                  codi.esd.Intra_Trade_List_RMB__c == 0)
                  ? codi.esd.Intra_Trade_List__c
                  : codi.esd.Intra_Trade_List_RMB__c;
                codcorderdet.RemoveBox_No__c = codctmp.RemoveBox_No__c;
                codcorderdet.RemoveBox_date__c = codctmp.RemoveBox_date__c;
                codcorderdet.Box_Piece__c = codctmp.Box_Piece__c;

                //add by rentx 2020-10-13 start 返品时新数据记录SAP合同号
                // codcorderdet.ContractNo_text__c= codctmp.ContractNo__c;
                // tcm start
                if (
                  String.isBlank(
                    codctmp.Consumable_order_minor__r.ContractNo__c
                  )
                ) {
                  codcorderdet.ContractNo_text__c = codctmp.ContractNo_text__c;
                } else {
                  codcorderdet.ContractNo_text__c = codctmp.Consumable_order_minor__r.ContractNo__c;
                }
                // tcm end
                //add by rentx 2020-10-13 end   返品时新数据记录SAP合同号

                // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
                if (hasLoseGoods) {
                  codcorderdet.loseInventory__c = true;
                }
                // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end

                // 追加首次入库经销商 add by gzw 2020-04-27 start
                // 返品时，①追加借调借出方信息 ②保留借调信息 ③保存SAP和经销商首次发货经销商
                codcorderdet.Used_account__c = codi.esd.Used_account__c;
                codcorderdet.Transfer_Time__c = codi.esd.Transfer_Time__c;
                codcorderdet.Frist_Transfer_Agency__c = codi.esd.Frist_Transfer_Agency__c;
                codcorderdet.Agency_Transfer__c = codi.esd.Agency_Transfer__c;

                codcorderdet.Agencyinfo_fromSAP__c = codi.esd.Agencyinfo_fromSAP__c;
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------1------' + codi.esd.Frist_Storage_Agency__c));
                codcorderdet.Frist_Storage_Agency__c = codi.esd.Frist_Storage_Agency__c ==
                  null
                  ? codi.esd.Dealer_Info_text__c
                  : codi.esd.Frist_Storage_Agency__c;
                // 追加首次入库经销商 add by gzw 2020-04-27 end
                codcorderdetList.add(codcorderdet);
                codcList.add(esd);

                cnt++;
                if (cnt > codi.esd.Rrturn_count__c)
                  break;
              }
            }
          } else {
            hasReturnGoods = true;
            //单位=盒
            //changeinvoiceInfo(codi.esd);
            //Consumable_order__c coc = [select name from Consumable_order__c where Id =:Arrived_Order_Sheet.id];
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
            codi.esd.Return_date__c = Date.today();
            // codi.esd.Consumable_Return_order__c      = Return_Order_Sheet.id;
            if (
              codi.esd.Dealer_Saled__c == false &&
              codi.esd.Dealer_Shipment__c == false &&
              codi.esd.Lose_Flag__c == true
            ) {
              codi.esd.Lose_Flag__c = false;
              codi.esd.Return_reason__c = '';
              codi.esd.Consumable_Inventory_order__c = Inventory_Order_Sheet.id;
              conOrderDetail2InList.add(codi.esd);
              hasLoseGoods = true;
            } else {
              // codi.esd.Return_date__c                  = Date.today();
              codi.esd.Consumable_Return_order__c = Return_Order_Sheet.id;
            }
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
            codi.esd.ReturnGs_Uploader_ID__c = UserInfo.getUserId();
            // codi.esd.Consumable_Return_order__c      = Return_Order_Sheet.id;
            //修改返品所有人
            codi.esd.OwnerId = UserInfo.getUserId();
            codi.esd.RecordTypeId = System.Label.RT_ConOrderDetail2_Return;
            codcorderdet.Name =
              consumable_order_arr[0].name +
              '-' +
              String.valueOf(++tempNo).leftPad(4, '0');
            codcorderdet.Consumable_order_minor__c = codi.esd.Consumable_order_minor__c;
            codcorderdet.Consumable_Arrived_order__c = Arrived_Order_Sheet.id;
            //修改到货所有人
            codcorderdet.OwnerId = UserInfo.getUserId();
            codcorderdet.Arrive_date__c = Date.today();
            codcorderdet.Consumable_Product__c = codi.esd.Consumable_Product__c;
            codcorderdet.Asset_Model_No__c = codi.esd.Asset_Model_No__c;
            codcorderdet.Bar_Code__c = codi.esd.Bar_Code__c;
            codcorderdet.Deliver_date__c = codi.esd.Deliver_date__c;
            codcorderdet.SerialLotNo__c = codi.esd.SerialLotNo__c;
            codcorderdet.TracingCode__c = codi.esd.TracingCode__c;
            codcorderdet.Sterilization_limit__c = codi.esd.Sterilization_limit__c;
            //gzw 手动入库 默认产品单价 20230307
            codcorderdet.Intra_Trade_List_RMB__c = (codi.esd.Intra_Trade_List_RMB__c ==
              null ||
              codi.esd.Intra_Trade_List_RMB__c == 0)
              ? codi.esd.Intra_Trade_List__c
              : codi.esd.Intra_Trade_List_RMB__c;
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
            if (hasLoseGoods) {
              codcorderdet.loseInventory__c = true;
            }
            // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end
            // 追加首次入库经销商 add by gzw 2020-04-27 start
            // 返品时，①追加借调借出方信息 ②保留借调信息 ③保存SAP和经销商首次发货经销商
            codcorderdet.Used_account__c = codi.esd.Used_account__c;
            codcorderdet.Transfer_Time__c = codi.esd.Transfer_Time__c;
            codcorderdet.Frist_Transfer_Agency__c = codi.esd.Frist_Transfer_Agency__c;
            codcorderdet.Agency_Transfer__c = codi.esd.Agency_Transfer__c;

            codcorderdet.Agencyinfo_fromSAP__c = codi.esd.Agencyinfo_fromSAP__c;
            //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------2------' + codi.esd.Frist_Storage_Agency__c));
            codcorderdet.Frist_Storage_Agency__c = codi.esd.Frist_Storage_Agency__c ==
              null
              ? codi.esd.Dealer_Info_text__c
              : codi.esd.Frist_Storage_Agency__c;
            // 追加首次入库经销商 add by gzw 2020-04-27 end

            //add by rentx 2020-10-13 start 返品时新数据记录SAP合同号
            // codcorderdet.ContractNo_text__c          = /*codi.esd.ContractNo__c*/;
            // tcm start
            if (
              String.isBlank(codi.esd.Consumable_order_minor__r.ContractNo__c)
            ) {
              codcorderdet.ContractNo_text__c = codi.esd.ContractNo_text__c;
            } else {
              codcorderdet.ContractNo_text__c = codi.esd.Consumable_order_minor__r.ContractNo__c;
            }
            // tcm end
            //add by rentx 2020-10-13 end   返品时新数据记录SAP合同号

            codcorderdetList.add(codcorderdet);
            codcList.add(codi.esd);
          }
        }

        //明细2不存在的对应的到货订单明细 2017-07-05
        Integer i = 1;
        //for(ConsumableorderdetailsInfo ass : consumableInventoryUse){
        for (ConsumableorderdetailsInfo ass : consumableInventory) {
          hasReturnGoods = true;
          Consumable_order_details2__c codcorderdetail = new Consumable_order_details2__c();
          Consumable_order_details2__c retorddetail = new Consumable_order_details2__c();
          String str = ('000' + i).right(4);
          // if(str.length() == 1){
          //     str = '0' + str;
          // }

          if (ass.ReturnReason == null || ass.ReturnReason == '') {
            //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
            if (isLwc) {
              returnError = '请补充返品原因';
            } else {
              ApexPages.addmessage(
                new ApexPages.message(
                  ApexPages.severity.ERROR,
                  '请补充返品原因'
                )
              );
            }
            return null;
          }

          //到货明细
          codcorderdetail.Name = consumable_order_arr[0].Name + '-' + str;
          codcorderdetail.RecordTypeId = System.Label.RT_ConOrderDetail2_Delivery;
          codcorderdetail.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
          //gzw 手动入库 默认产品单价 20230307
          codcorderdetail.Asset_Model_No__c = ass.Prod.Asset_Model_No__c;
          codcorderdetail.Direct_Arrive_Product__c = true;
          codcorderdetail.Sterilization_limit__c = ass.sterilizationlimitDate;
          codcorderdetail.Consumable_Product__c = ass.Prod.id;
          codcorderdetail.Bar_Code__c = ass.barCodeNo;
          codcorderdetail.SerialLotNo__c = ass.serialNoorLotNo;
          codcorderdetail.TracingCode__c = ass.tracingCodeNo;
          codcorderdetail.Consumable_Arrived_order__c = Arrived_Order_Sheet.id;
          codcorderdetail.Arrive_date__c = Date.today();

          //add by rentx 2020-10-14 start
          // codcorderdetail.ContractNo_text__c          = /*ass.esd.ContractNo__c*/;
          // tcm start
          if (String.isBlank(ass.esd.Consumable_order_minor__r.ContractNo__c)) {
            codcorderdetail.ContractNo_text__c = ass.esd.ContractNo_text__c;
          } else {
            codcorderdetail.ContractNo_text__c = ass.esd.Consumable_order_minor__r.ContractNo__c;
          }
          // tcm end
          //add by rentx 2020-10-14 end

          codcorderdetList.add(codcorderdetail);

          //返品明细
          retorddetail.Return_reason__c = ass.ReturnReason;
          retorddetail.Return_date__c = Date.today();
          retorddetail.ReturnGs_Uploader_ID__c = UserInfo.getUserId();

          // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 start
          // if(ass.esd.Dealer_Saled__c == false && ass.esd.Dealer_Shipment__c == false && ass.esd.Lose_Flag__c == true){
          //     retorddetail.Consumable_Inventory_order__c  = Inventory_Order_Sheet.id;
          //     retorddetail.loseInventory__c = true;
          // }
          retorddetail.Consumable_Return_order__c = Return_Order_Sheet.id;
          // WYIN-BLZE48盘点丢失产品增加入库方式 update by vivek 2020-03-05 end

          retorddetail.Name = consumable_order_ret[0].Name + '-' + str;
          retorddetail.RecordTypeId = System.Label.RT_ConOrderDetail2_Return;
          retorddetail.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
          //gzw 手动入库 默认产品单价 20230307
          retorddetail.Dealer_Info_IF__c = accountid;
          retorddetail.Asset_Model_No__c = ass.Prod.Asset_Model_No__c;
          retorddetail.Direct_Arrive_Product__c = true;
          retorddetail.Sterilization_limit__c = ass.sterilizationlimitDate;
          retorddetail.Consumable_Product__c = ass.Prod.id;
          retorddetail.Bar_Code__c = ass.barCodeNo;
          retorddetail.SerialLotNo__c = ass.serialNoorLotNo;
          retorddetail.TracingCode__c = ass.tracingCodeNo;
          retorddetail.Arrive_date__c = Date.today();
          retorddetail.Deliver_date__c = Date.today();
          // 追加首次入库经销商 add by gzw 2020-04-27 start
          retorddetail.Frist_Storage_Agency__c = accountName;
          // 追加首次入库经销商 add by gzw 2020-04-27 end

          //add by rentx 2020-10-14 start
          // retorddetail.ContractNo_text__c         = /*ass.esd.ContractNo__c*/;
          // tcm start
          if (String.isBlank(ass.esd.Consumable_order_minor__r.ContractNo__c)) {
            retorddetail.ContractNo_text__c = ass.esd.ContractNo_text__c;
          } else {
            retorddetail.ContractNo_text__c = ass.esd.Consumable_order_minor__r.ContractNo__c;
          }
          // tcm end
          //add by rentx 2020-10-14 end

          codcorderdetList.add(retorddetail);
          i++;
        }

        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'------end------'));
        // return null;

        if (codcList.size() > 0) {
          ControllerUtil.updateOrderDetailsSatus(codcList);
          //insert codcorderdetList;
        }
        if (codcorderdetList.size() > 0) {
          System.debug('codcorderdetList +++++ ' + codcorderdetList);
          insert codcorderdetList;
        }
        // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 start
        if (conOrderDetail2InList.size() > 0) {
          addInventoryDetails1(conOrderDetail2InList);
        }
        // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 start

        if (hasReturnGoods) {
          // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 start
          // return ToReturnGoodsPage();
          if (hasLoseGoods) {
            urlType = 'ToInventoryGoodsPage';
            return ToInventoryGoodsPage();
            // return null;
          } else {
            urlType = 'ToReturnGoodsPage';
            return ToReturnGoodsPage();
            // return null;
          }
          // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 start
        } else {
          //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
          if (isLwc) {
            returnError = '没有需要登录的返品';
          } else {
            ApexPages.addmessage(
              new ApexPages.message(
                ApexPages.severity.ERROR,
                '没有需要登录的返品'
              )
            );
          }
          return null;
        }
      } else {
        //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
        if (isLwc) {
          returnError = '没有需要登录的返品';
        } else {
          ApexPages.addmessage(
            new ApexPages.message(
              ApexPages.severity.ERROR,
              '没有需要登录的返品'
            )
          );
        }
        return null;
      }
    } catch (Exception e) {
      Database.rollback(sp);
      //LWC:Lwcflag和报错提醒 update by Link 2023-04-27
      if (isLwc) {
        returnError = e.getLineNumber() + '---' + e.getMessage();
      } else {
        ApexPages.addMessages(e);
      }
      return null;
    }
  }

  public void makeArrivedSummary() {
    detailsSummary = new List<ConsumableorderdetailsInfo>();
    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'consumableInventory   ' + consumableInventory));
    try {
      ConsumableorderdetailsInfo arriveDdetailsSummary = null;
      Map<String, ConsumableorderdetailsInfo> detailsSummaryMap = new Map<String, ConsumableorderdetailsInfo>();
      for (ConsumableorderdetailsInfo ass : ConsumableorderdetailsRecords) {
        if (detailsSummaryMap.containsKey(ass.Prod.Id)) {
          detailsSummaryMap.get(ass.Prod.Id).arrivedCount++;
          detailsSummaryMap.get(ass.Prod.Id)
            .arriveAmount += ass.esd.Intra_Trade_List_RMB__c;
        } else {
          arriveDdetailsSummary = new ConsumableorderdetailsInfo(ass.Prod);
          arriveDdetailsSummary.arrivedCount = 1;
          arriveDdetailsSummary.arriveAmount = ass.esd.Intra_Trade_List_RMB__c;
          detailsSummaryMap.put(ass.Prod.Id, arriveDdetailsSummary);
        }
      }
      for (ConsumableorderdetailsInfo ass : consumableInventory) {
        if (detailsSummaryMap.containsKey(ass.Prod.Id)) {
          detailsSummaryMap.get(ass.Prod.Id).arrivedCount++;
          if (EsetId != null && EsetId != '') {
            detailsSummaryMap.get(ass.Prod.Id)
              .arriveAmount += ass.Prod.Intra_Trade_List_RMB__c;
          } else {
            detailsSummaryMap.get(ass.Prod.Id).arriveAmount += 0;
          }
        } else {
          arriveDdetailsSummary = new ConsumableorderdetailsInfo(ass.Prod);
          arriveDdetailsSummary.arrivedCount = 1;
          if (EsetId != null && EsetId != '') {
            arriveDdetailsSummary.arriveAmount = ass.Prod.Intra_Trade_List_RMB__c;
          } else {
            arriveDdetailsSummary.arriveAmount = 0;
          }
          detailsSummaryMap.put(ass.Prod.Id, arriveDdetailsSummary);
        }
      }
      for (String key : detailsSummaryMap.keySet()) {
        detailsSummary.add(detailsSummaryMap.get(key));
      }
    } catch (Exception e) {
      //Database.rollback(sp);
      throw new ControllerUtil.myException(
        'e::' + e + '  linenumber::' + e.getLineNumber()
      );
      // ApexPages.addMessages(e);
      // ApexPages.addMessages(e.getLineNumber() + '  11111111111111111');

      //return null;
    }
  }

  //跳转到返品页面
  public Pagereference ToReturnGoodsPage() {
    PageReference ref = new Pagereference('/' + return_Order_id);
    ref.setRedirect(true);
    return ref;
  }

  // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 start
  public Pagereference ToInventoryGoodsPage() {
    PageReference ref = new Pagereference('/' + inventory_Order_id);
    ref.setRedirect(true);
    return ref;
  }
  // WYIN-BPE3T4 虚拟盘点单 update by vivek 2020-05-11 end

  // 跳转到到货订单明细
  public PageReference UnabletoEdit() {
    PageReference ref = new Pagereference(
      '/ArriveGsDetails?EsetId=' + arriveId
    );
    ref.setRedirect(true);
    return ref;
  }

  public class ConsumableorderdetailsInfo implements Comparable {
    public Consumable_order_details2__c esd { get; set; }
    public Product2__c Prod { get; set; }
    public String ProductName { get; set; }
    //public Boolean canSELECT { get; set; }
    public String barCodeNo { get; set; }
    public Date sterilizationlimitDate { get; set; }
    public String serialNoorLotNo { get; set; }
    public String tracingCodeNo { get; set; }
    public String ReturnReason { get; set; }
    public String oldConsumableCount { get; set; }
    public String ErrorReason { get; set; }
    public boolean canEdit { get; set; }
    public Integer intMark { get; set; }
    public Decimal arriveAmount { get; set; }
    public Decimal arrivedCount { get; set; }

    public String ReportProductExpirationDate { get; set; }

    public ConsumableorderdetailsInfo() {
    }

    public ConsumableorderdetailsInfo(
      Consumable_order_details2__c e,
      string str
    ) {
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
      ErrorReason = str;
      intMark = 1;
      if (e.Report_Product_Expiration__c != null) {
        ReportProductExpirationDate = e.Report_Product_Expiration__c.format();
      }
    }
    public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
      canEdit = false;
      if (e.Box_Piece__c == '盒') {
        e.Rrturn_count__c = 1;
        canEdit = true;
      }

      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
      if (e.Report_Product_Expiration__c != null) {
        ReportProductExpirationDate = e.Report_Product_Expiration__c.format();
      }
    }

    public ConsumableorderdetailsInfo(Product2__c e, List<String> barinfoL) {
      esd = new Consumable_order_details2__c();
      ProductName = e.Name__c;
      Prod = e;
      barCodeNo = barinfoL[0];
      if (String.isNotBlank(barinfoL[1])) {
        sterilizationlimitDate = Date.valueOf(barinfoL[1]);
      }
      serialNoorLotNo = barinfoL[2];
      tracingCodeNo = barinfoL[3];
      ReturnReason = '';
    }

    public ConsumableorderdetailsInfo(
      Consumable_order_details2__c e,
      List<String> barinfoL
    ) {
      esd = e;
      Prod = e.Consumable_Product__r;
      barCodeNo = barinfoL[0];
      if (String.isNotBlank(barinfoL[1])) {
        sterilizationlimitDate = Date.valueOf(barinfoL[1]);
      }
      serialNoorLotNo = barinfoL[2];
      tracingCodeNo = barinfoL[3];
      if (e.Report_Product_Expiration__c != null) {
        ReportProductExpirationDate = e.Report_Product_Expiration__c.format();
      }
    }
    public ConsumableorderdetailsInfo(Product2__c e) {
      Prod = e;
    }
    // 排序
    public Integer compareTo(Object compareTo) {
      return null;
    }
  }
}
