public without sharing class LexSummonsCreatController {
  public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();

  /*****************検索用******************/
  //经销商用户产品分类（ET、ENG）
  @AuraEnabled
  public static String agencyProType { get; set; }
  public static Consumable_order__c coc { get; set; } // 画view用， 可能是 出库指示单， 也有可能是到货单， 也有可能 空instance
  public static User localuser { get; set; }
  public static String category1 { get; set; }
  public static Integer noOfRecords { get; set; }
  //public String category_Goods {get ; set;}
  public static Boolean cansee { get; set; }
  public static Integer size { get; set; }
  //经销商定价查看权限
  //public static ApexPages.StandardSetController setCon { get; set; }
  public static Boolean dealerPricesee { get; set; }
  /*****************画面初始化用********************************/
  /******20160313_add**************/
  public static String IdCheck { get; set; }
  public static Boolean editAble { get; set; }
  public static String statusEdit { get; set; }
  public static String alertMessage { get; set; }
  public static String SearchDone { get; set; }
  public static List<String> zaikuId = new List<String>();
  public static List<String> orderzaikuId = new List<String>();
  //附件
  public static List<ConsumableorderdetailsInfo> attachmentRecoeds { get; set; }
  public static Boolean getExistarrive() {
    return (coc.Arrive_Order__c != null);
  }
  //总价格计算结果
  @AuraEnabled
  public static Decimal sumPrice { get; set; }
  /******20160317_add**************/
  public static String SummonsFlag { get; set; } // 新規: hidden, 更新: visible
  public static String category5 { get; set; }
  public static String category4 { get; set; }
  public static String category3 { get; set; }
  public static List<SelectOption> categoryOptionList { get; set; }
  public static List<SelectOption> category4OptionList { get; set; }
  public static List<SelectOption> category5OptionList { get; set; }
  @AuraEnabled
  public static Map<String, String> categoryOptionMap { get; set; }
  @AuraEnabled
  public static Map<String, String> category4OptionMap { get; set; }
  @AuraEnabled
  public static Map<String, String> category5OptionMap { get; set; }
  /*****************画面表示Bean******************/
  private static List<ConsumableorderdetailsInfo> consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
  //明细2
  @AuraEnabled
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords {
    get;
    set;
  }
  //错误明细
  @AuraEnabled
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecordserror {
    get;
    set;
  }
  @AuraEnabled
  public static List<ConsumableorderdetailsInfo> pageRecords { get; set; }
  public static List<ConsumableorderdetailsInfoLwc> pageRecordsLwc { get; set; }
  //public List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview { get; set; }
  public static List<ConsumableorderdetailsInfo> consumableorderdetails2Records {
    get;
    set;
  }
  public static List<Consumable_order__c> consumableInvoiceRecords { get; set; }
  private static List<ConsumableorderdetailsInfo> consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
  private static List<Attachment> attachmentinfo = new List<Attachment>();
  public static List<Product2__c> product2Selected = new List<Product2__c>();
  @AuraEnabled
  public static Map<String, String> orderpieceorboxMap { get; set; }
  @AuraEnabled
  public static List<Consumable_orderdetails__c> orderdetails { get; set; }
  @AuraEnabled
  public static Map<String, Decimal> orderagencypriceMap { get; set; }
  @AuraEnabled
  public static Map<String, Decimal> orderpriceMap { get; set; }
  @AuraEnabled
  public static Map<String, Decimal> orderdetCountMap { get; set; }
  @AuraEnabled
  public static Boolean hasSpecialHos { get; set; }
  //选择产品size
  public static Integer consumableorderdetailsCount {
    get {
      return pageRecords == null ? 0 : pageRecords.size();
    }
  }
  //消耗品明细2数量
  public static Integer consumableorderdetails2Count {
    get {
      return consumableorderdetails2Records == null
        ? 0
        : consumableorderdetails2Records.size();
    }
  }
  //订货单号
  public static String consumableorderId {
    get {
      return (coc.Arrive_Order__c);
    }
  }
  //选择框
  public static List<SelectOption> provinceOpts { get; set; }
  @AuraEnabled
  public static Map<String, String> provinceOptsMap { get; set; }
  public static String SecondDealer { get; set; }
  //public List<SelectOption> orderForHospitalOpts { get; set; }
  public static String HospitalInfo { get; set; }
  public static String HospitalName { get; set; }

  public static Boolean EditDelCommitBtnDisabled { get; private set; }
  public static Boolean saveBtnDisabled { get; private set; }
  public static Boolean SorderBtnDisabled { get; private set; }

  // page
  public static Integer pagesize { get; set; }
  public static Integer pageToken { get; set; }
  //public static String sortField { get; set; }
  //public static String sortOrder { get; set; }
  public static Integer totalcount { get; set; }
  public static Integer addSize { get; set; }
  //List<ConsumableorderdetailsInfoLwc> reSetLwc
  public static List<ConsumableorderdetailsInfo> addData { get; set; }
  public static Map<String, String> skipData { get; set; }
  // 保存后动作： 1.检索 2.排序
  // public static String sortKey { get; set; }
  // public static String preSortKey { get; private set; }
  // public static Boolean sortOrderAsc { get; private set; }
  // public static String[] sortOrder { get; private set; }
  // private static String[] columus = new List<String>{
  //     'Consumable_Product__r.Name',
  //     'Consumable_Product__r.Asset_Model_No__c',
  //     'Consumable_Product__r.Intra_Trade_List_RMB__c',
  //     '',
  //     '',
  //     'Consumable_Product__r.Category3__c',
  //     'Consumable_Product__r.Category4__c',
  //     'Consumable_Product__r.Category5__c'
  // };
  // private static String[] columus_no = new List<String>{
  //     'Product2__c.Name',
  //     'Product2__c.Asset_Model_No__c',
  //     'Product2__c.Intra_Trade_List_RMB__c',
  //     '',
  //     '',
  //     'Category3__c',
  //     'Category4__c',
  //     'Category5__c'
  // };

  //到货单明细1
  private static List<Consumable_Orderdetails__c> consumableorderdetailsSelected = new List<Consumable_Orderdetails__c>();
  //到货单明细2
  private static List<Consumable_order_details2__c> consumablearriveproductdetailsSelected = new List<Consumable_order_details2__c>();

  //出库单明细2
  private static List<Consumable_order_details2__c> consumableorderdetails2RecordsList = new List<Consumable_order_details2__c>();
  /*****************ソート時再検索条件（画面からの入力条件を無視するため）******************/
  //private String cate1ForSort = null;
  private static String accountid = null;
  @AuraEnabled
  public static String accountName { get; set; }

  // 产品 ID
  private static String ESetId = '';
  @AuraEnabled
  public static String arriveorder { get; set; }
  private static String userId = '';
  //private String[] ProidListAll = new String[]{};

  // 登录者工作地
  @AuraEnabled
  public static String userWorkLocation { get; set; }

  //add by rentx 2021-01-29
  public static List<SelectOption> outOutPatternOptionList { get; set; }
  @AuraEnabled
  public static Map<String, String> outOutPatternOptionMap { get; set; }
  public static String outOutPattern { get; set; }
  public static Boolean hasHos { get; set; }
  @AuraEnabled
  public static Boolean hasHosPro { get; set; }

  private static Map<String, String> HosProMap = new Map<String, String>();
  //add by rentx 2021-01-29

  public LexSummonsCreatController() {
    System.debug('LexSummonsCreatController');
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    // ESetId = ApexPages.currentPage().getParameters().get('esetId');
    // arriveorder = ApexPages.currentPage().getParameters().get('arriveorder');
    // statusEdit = ApexPages.currentPage().getParameters().get('KeyWords');
    provinceOpts = new List<SelectOption>();
    provinceOptsMap = new Map<String, String>();
    pageRecords = new List<ConsumableorderdetailsInfo>();
    consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
    attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
    consumableorderdetails2Records = new List<ConsumableorderdetailsInfo>();
    consumableInvoiceRecords = new List<Consumable_order__c>();
    categoryOptionList = new List<SelectOption>();
    category4OptionList = new List<SelectOption>();
    category5OptionList = new List<SelectOption>();

    categoryOptionMap = new Map<String, String>();
    category4OptionMap = new Map<String, String>();
    category5OptionMap = new Map<String, String>();

    outOutPatternOptionMap = new Map<String, String>();
    outOutPatternOptionMap.put('', '-无-');
    outOutPatternOptionMap.put('ishos', '医院特价产品');
    outOutPatternOptionMap.put('nothos', '非医院特价产品');

    outOutPatternOptionList.add(new SelectOption('', '-无-'));
    outOutPatternOptionList.add(new SelectOption('ishos', '医院特价产品'));
    outOutPatternOptionList.add(new SelectOption('nothos', '非医院特价产品'));
    HospitalName = '';
  }

  public static void firstInit(String ESetidJs) {
    System.debug('enter firstInit');
    ESetid = ESetidJs;
    System.debug('ESetid = ' + ESetid);
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    provinceOpts = new List<SelectOption>();
    provinceOptsMap = new Map<String, String>();
    pageRecords = new List<ConsumableorderdetailsInfo>();
    consumableproductdetailsRecords = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
    attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
    consumableorderdetails2Records = new List<ConsumableorderdetailsInfo>();
    consumableInvoiceRecords = new List<Consumable_order__c>();
    categoryOptionList = new List<SelectOption>();
    category4OptionList = new List<SelectOption>();
    category5OptionList = new List<SelectOption>();

    categoryOptionMap = new Map<String, String>();
    category4OptionMap = new Map<String, String>();
    category5OptionMap = new Map<String, String>();

    outOutPatternOptionMap = new Map<String, String>();
    outOutPatternOptionMap.put('', '-无-');
    outOutPatternOptionMap.put('ishos', '医院特价产品');
    outOutPatternOptionMap.put('nothos', '非医院特价产品');

    // outOutPatternOptionList.add(new SelectOption('', '-无-'));
    // outOutPatternOptionList.add(new SelectOption('ishos', '医院特价产品'));
    // outOutPatternOptionList.add(new SelectOption('nothos', '非医院特价产品'));
    HospitalName = '';
  }

  // 画面初始化
  @AuraEnabled
  public static ResponseBodyLWC init(
    String ESetidJs,
    String statusEdit,
    Integer pageSizeLWC,
    Integer pageTokenLWC,
    String arriveorderLWC
  ) {
    try {
      firstInit(ESetidJs);
      statusEdit = statusEdit;
      arriveorder = arriveorderLWC;
      HospitalName = '';
      provinceOpts = new List<SelectOption>();
      provinceOptsMap = new Map<String, String>();
      ResponseBodyLWC res = new ResponseBodyLWC();
      Map<String, object> data = new Map<String, object>();
      res.entity = data;
      // public static Integer pagesize { get; set; }
      // public static Integer pageToken { get; set; }
      // public static String sortField { get; set; }
      // public static String sortOrder { get; set; }
      pagesize = pageSizeLWC;
      pageToken = pageTokenLWC > 2000 ? 2000 : pageTokenLWC;

      // sortKey = '1';
      // preSortKey = '1';
      // sortOrderAsc = false;
      // sortOrder = new List<String>(8);
      // sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
      //cate1ForSort = '';
      sumPrice = 0;
      IdCheck = EsetId;
      if (
        ESetId != null &&
        ESetId != '' &&
        (statusEdit == '' ||
        statusEdit == null)
      ) {
        editAble = false;
      } else if (
        (ESetId == null || ESetId == '') &&
        (statusEdit == '' ||
        statusEdit == null)
      ) {
        editAble = true;
      } else if (
        ESetId != null &&
        ESetId != '' &&
        statusEdit != '' &&
        statusEdit != null
      ) {
        editAble = true;
      }
      userId = UserInfo.getUserId();
      localuser = [
        SELECT id, State_Hospital__c
        FROM User
        WHERE id = :UserInfo.getUserId()
      ];
      //userId = '00510000005QO75';
      user Useracc = [
        SELECT accountid, Work_Location__c, UserPro_Type__c
        FROM user
        WHERE id = :userId
      ];
      accountid = Useracc.accountid;
      userWorkLocation = Useracc.Work_Location__c;
      agencyProType = Useracc.UserPro_Type__c;
      if (String.isBlank(Useracc.UserPro_Type__c)) {
        agencyProType = 'ET';
      }
      Account accountInfo = [SELECT Name FROM account WHERE id = :accountid];
      accountName = accountInfo.Name;
      //coc.Order_date__c = Date.today();
      list<Dealer_elationship__c> Dealerelationship = new List<Dealer_elationship__c>();
      Dealerelationship = [
        SELECT Dealer_subordinate__c, Dealer_subordinate__r.Name
        FROM Dealer_elationship__c
        WHERE Dealer_principal__c = :accountid
      ];

      List<Agency_Hospital_Link__c> AgencyHospitalLink = new List<Agency_Hospital_Link__c>();
      AgencyHospitalLink = [
        SELECT Id, Hospital__c, Hospital__r.Name
        FROM Agency_Hospital_Link__c
        WHERE Agency__c = :accountid
      ];

      //add by rentx 2021-3-1 start
      //判断当前经销商下是否有特价医院
      List<hospitalprice__c> hlist = [
        SELECT id, product__c
        FROM hospitalprice__c
        WHERE account__c = :accountid
      ];
      if (hlist == null || hlist.size() == 0) {
        hasHos = false;
      } else {
        for (hospitalprice__c hp : hlist) {
          HosProMap.put(hp.product__c, '');
        }
        hasHos = true;
      }
      //add by rentx 2021-3-1 end

      saveBtnDisabled = false;
      SorderBtnDisabled = false;
      String sqlagencyProType = '%' + agencyProType + '%';
      coc = new Consumable_order__c();
      consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
      Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
      //add by rentx 2021-01-29
      Map<String, ConsumableorderdetailsInfo> MidMap2 = new Map<String, ConsumableorderdetailsInfo>();
      //add by rentx 2021-01-29

      List<AggregateResult> orderdetailCount = [
        SELECT count(id), Consumable_Product__c cpc, Box_Piece__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 Cancellation_Flag__c = FALSE
          AND Bar_Code__c != NULL
          AND Isoverdue__c = 1
          AND Product_Type__c LIKE :sqlagencyProType
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
        GROUP BY Consumable_Product__c, Box_Piece__c
      ];
      for (AggregateResult orderdetail : orderdetailCount) {
        zaikuId.add(String.valueOf(orderdetail.get('cpc')));
      }
      System.debug('sqlagencyProType = ' + sqlagencyProType);
      System.debug('userWorkLocation = ' + userWorkLocation);
      System.debug('accountName = ' + accountName);
      List<Consumable_order_details2__c> CountDel = [
        SELECT
          Id,
          Bar_Code__c,
          Name,
          Inventory_date__c,
          Consumable_Product__c,
          Consumable_Product__r.Asset_Model_No__c,
          Recordtypeid,
          Box_Piece__c,
          ProductPacking_list_manual__c,
          //add by rentx 2020-11-27 start
          hospitalSpecialOffer__c
        //add by rentx 2020-11-27 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 Lose_Flag__c = FALSE
          AND Cancellation_Flag__c = FALSE
          AND Bar_Code__c != NULL
          AND Isoverdue__c = 1
          AND Product_Type__c LIKE :sqlagencyProType
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Dealer_Info_text__c = :accountName
      ];
      // 新規
      if (ESetId == null || ESetId == '') {
        SummonsFlag = 'hidden';
        String msoql = makeSoqlinventory();
        initStandardController(msoql);
        System.debug('msoql = ' + msoql);
        product2Selected = Database.query(msoql);
        if (String.isBlank(arriveorder)) {
          EditDelCommitBtnDisabled = true;
          for (Integer i = 0; i < product2Selected.size(); i++) {
            MidMap.put(
              product2Selected[i].Id,
              new ConsumableorderdetailsInfo(product2Selected[i])
            );
          }
          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
            } else {
              str = 'notHos';
            }
            //明细2对应的产品存在于MidMap中
            if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
              //设置map中key的后缀 用于区分医院特价和非医院特价
              if (
                MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)
              ) {
                ConsumableorderdetailsInfo Jstage = MidMap2.get(
                  CountDel[i].Consumable_Product__c + str
                );
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              } else {
                //midmap2中没有对应的产品
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                    CountDel[i].Consumable_Product__c
                  )
                  .clone();
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              }
            }
            System.debug('MidMap2.size() = ' + MidMap2.size());
            /*//然后循环CountDel去修改map里的allnumber
                            if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                                ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c);
                                Jstage.allnumber = Jstage.allnumber+1 ;
                                if(CountDel[i].Box_Piece__c == '盒'){
                                    Jstage.Boxnumber = Jstage.Boxnumber + 1;
                                }else if(CountDel[i].Box_Piece__c == '个'){
                                    Jstage.Piecenumber = Jstage.Piecenumber + 1;
                                }
                                if (CountDel[i].hospitalSpecialOffer__c) {
                                    Jstage.hospitalSpecialOffer = true;
                                }else{
                                    Jstage.hospitalSpecialOffer = false;
                                }
                                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                                MidMap.put(CountDel[i].Consumable_Product__c+str, Jstage);
                            }*/
          }

          //update by rentx 2021-01-29 end

          //再把map里的值从新赋给ConsumableorderdetailsRecords
          //update by rentx 2021-01-29
          // for(ConsumableorderdetailsInfo bss : MidMap.values()){
          for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
            //update by rentx 2021-01-29
            //if(bss.allnumber>0){
            bss.packinglist = Integer.valueOf(
              bss.Prod.Product2__r.Packing_list_manual__c
            );
            bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
            bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
            consumableorderdetailsSelectRecords.add(bss);
            //}
          }

          Integer ishosnum = 0;
          for (
            ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords
          ) {
            //ass.sortBy = sortOrderAsc;
            //add by rentx 2021-3-10
            if (ass.hospitalSpecialOffer) {
              ishosnum = ishosnum + 1;
            }
          }
          if (ishosnum > 0) {
            hasHosPro = true;
          } else {
            hasHosPro = false;
          }
          consumableorderdetailsSelectRecords.sort();
          //add by rentx
          noOfRecords = consumableorderdetailsSelectRecords.size();
          //add by rentx
          System.debug('makepagerecords1');
          makepagerecords();
          //listCut();
        } else {
          if (statusEdit == '' || statusEdit == null) {
            editAble = false;
          } else if (statusEdit != '' && statusEdit != null) {
            editAble = true;
          }
          // upadte start by vivek 2019-7-15
          // coc = [SELECT Id,Name,Summons_Order_type__c,SummonsStatus_c__c,Order_ForDealerText__c,
          //             Dealer_Info__c,Order_ForDealer__c,Order_ForDealer__r.Name,Order_ForDealerTextID__c,
          //             Order_ForHospital__c,SummonsForDirction__c,Order_date__c,Arrive_Order__c,
          //             Order_status__c,Shipment_total_amount__c,Offers_Price__c,
          //             Billed_Status__c,ShipmentAccount__c,Order_Dealer_Info__c,Order_ForCustomerText__c,ConInvoice_Code__c,Onchange_order__c
          //         FROM Consumable_order__c
          //         WHERE Id =:arriveorder AND Order_Owner_WorkLocal__c =: userWorkLocation
          //         AND recordtypeid = :System.Label.RT_ConOrder_Arrive];
          coc = [
            SELECT
              Id,
              Name,
              Summons_Order_type__c,
              NoConfirmedPrice__c,
              SummonsStatus_c__c,
              Order_ForDealerText__c,
              Dealer_Info__c,
              Order_ForDealer__c,
              Order_ForDealer__r.Name,
              Order_ForDealerTextID__c,
              Order_ForHospital__c,
              SummonsForDirction__c,
              Order_date__c,
              Arrive_Order__c,
              Order_status__c,
              Shipment_total_amount__c,
              Offers_Price__c,
              Billed_Status__c,
              ShipmentAccount__c,
              Order_Dealer_Info__c,
              Order_ForCustomerText__c,
              ConInvoice_Code__c,
              Onchange_order__c,
              OutPattern__c
            FROM Consumable_order__c
            WHERE
              Id = :arriveorder
              AND Order_Owner_WorkLocal__c = :userWorkLocation
              AND recordtypeid = :System.Label.RT_ConOrder_Arrive
          ];
          // update end by vivek 2019-7-15
          //明细1获取
          consumableorderdetailsSelected = [
            SELECT
              Id,
              Dealer_Custom_Price__c,
              Delivery_List_RMB__c,
              Consumable_Product__r.Name__c,
              Name,
              Consumable_order__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Shipment_Count__c,
              Consumable_Product__r.Intra_Trade_List_RMB__c,
              Consumable_Product__r.Asset_Model_No__c,
              Sum_of_money__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              Consumable_Product__r.SFDA_Status__c,
              Consumable_count__c,
              Invoiced_Procount__c,
              RrturnPro_count__c,
              InvoiceProNot_count__c,
              //Unitprice_To_agency__c,
              Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
              Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
            FROM Consumable_Orderdetails__c
            WHERE Consumable_order__c = :coc.Arrive_Order__c
            ORDER BY Name
          ];
          for (
            Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
          ) {
            orderzaikuId.add(cdc1.Consumable_Product__c);
          }
          msoql = makeSoqlorderdet();
          product2Selected = Database.query(msoql);
          size = product2Selected.size();
          initStandardController(msoql);
          for (Integer i = 0; i < product2Selected.size(); i++) {
            MidMap.put(
              product2Selected[i].Id,
              new ConsumableorderdetailsInfo(product2Selected[i])
            );
          }
          //update by rentx 2021-01-29
          /*for(Integer i = 0 ; i< CountDel.size();i++){
                            //然后循环CountDel去修改map里的allnumber
                            if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                                ConsumableorderdetailsInfo Jstage = MidMap.get(CountDel[i].Consumable_Product__c);
                                Jstage.allnumber = Jstage.allnumber+1 ;
                                if(CountDel[i].Box_Piece__c == '盒'){
                                    Jstage.Boxnumber = Jstage.Boxnumber + 1;
                                }else if(CountDel[i].Box_Piece__c == '个'){
                                    Jstage.Piecenumber = Jstage.Piecenumber + 1;
                                }
                                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                                MidMap.put(CountDel[i].Consumable_Product__c, Jstage);
                            }

                        }*/
          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
            } else {
              str = 'notHos';
            }
            //明细2对应的产品存在于MidMap中
            if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
              //设置map中key的后缀 用于区分医院特价和非医院特价
              if (
                MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)
              ) {
                ConsumableorderdetailsInfo Jstage = MidMap2.get(
                  CountDel[i].Consumable_Product__c + str
                );
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }

                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              } else {
                //midmap2中没有对应的产品
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                    CountDel[i].Consumable_Product__c
                  )
                  .clone();
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }

                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              }
            }
          }

          //再把map里的值从新赋给ConsumableorderdetailsRecords
          //update by rentx 2021-01-29
          // for(ConsumableorderdetailsInfo bss : MidMap.values()){
          for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
            //update by rentx 2021-01-29
            bss.packinglist = Integer.valueOf(
              bss.Prod.Product2__r.Packing_list_manual__c
            );
            bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
            bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
            consumableorderdetailsSelectRecords.add(bss);
          }
          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'test11111' + consumableorderdetailsSelected.size()));
          //return;

          Integer ishosnum = 0;
          for (
            ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords
          ) {
            //ass.sortBy = sortOrderAsc;
            for (
              Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
            ) {
              cdc1.Shipment_Count__c = cdc1.Consumable_count__c;
              if (ass.prod.Id == cdc1.Consumable_Product__c) {
                ass.check = true;
                ass.orderdetails1 = cdc1;
              }
            }
            if (ass.hospitalSpecialOffer == true) {
              ishosnum = ishosnum + 1;
            }
          }
          if (ishosnum > 0) {
            hasHosPro = true;
          } else {
            hasHosPro = false;
          }

          consumableorderdetailsSelectRecords.sort();
          //add by rentx
          noOfRecords = consumableorderdetailsSelectRecords.size();
          //add by rentx
          System.debug('makepagerecords2');
          makepagerecords();
          consumablearriveproductdetailsSelected = [
            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.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__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,
              Delivery_List_RMB__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              //add by rentx start
              hospitalSpecialOffer__c
            //add by rentx end
            FROM Consumable_order_details2__c
            WHERE
              Consumable_order_minor__c = :coc.Arrive_Order__c
              AND recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
              AND Dealer_Arrive__c = TRUE
            ORDER BY Name
          ];
          for (
            Integer i = 0;
            i < consumablearriveproductdetailsSelected.size();
            i++
          ) {
            if (
              consumablearriveproductdetailsSelected[i]
                .hospitalSpecialOffer__c &&
              HosProMap.containsKey(
                consumablearriveproductdetailsSelected[i].Consumable_product__c
              )
            ) {
              coc.OutPattern__c = true;
            }
            consumableproductdetailsRecords.add(
              new ConsumableorderdetailsInfo(
                consumablearriveproductdetailsSelected[i]
              )
            );
          }
        }
      } else {
        // 更新、
        SummonsFlag = 'visible';
        // update start by vivek 2019-7-15 add “NoConfirmedPrice__c” in select
        consumableInvoiceRecords = [
          SELECT
            Id,
            Name,
            Invoice_Date__c,
            NoConfirmedPrice__c,
            Invoice_total_amount__c,
            Invoice_status__c
          FROM Consumable_order__c
          WHERE
            Id IN (
              SELECT Invoice_Code_link__c
              FROM Consumable_order_LinkTable__c
              WHERE Outboundorder_Code_link__c = :ESetId
            )
            AND Invoice_status__c != '草案中'
        ];

        System.debug('coc ESetId = ' + ESetId);
        System.debug('coc userWorkLocation = ' + userWorkLocation);
        coc = [
          SELECT
            Id,
            Name,
            Summons_Order_type__c,
            NoConfirmedPrice__c,
            SummonsStatus_c__c,
            Order_ForDealerText__c,
            Dealer_Info__c,
            Order_ForDealer__c,
            Order_ForDealer__r.Name,
            Order_ForDealerTextID__c,
            Order_ForHospital__c,
            SummonsForDirction__c,
            Order_date__c,
            Arrive_Order__c,
            Order_status__c,
            Shipment_total_amount__c,
            Offers_Price__c,
            Billed_Status__c,
            ShipmentAccount__c,
            Order_Dealer_Info__c,
            Order_ForCustomerText__c,
            ConInvoice_Code__c,
            Onchange_order__c,
            OutPattern__c
          FROM Consumable_order__c
          WHERE
            Id = :ESetId
            AND Order_Owner_WorkLocal__c = :userWorkLocation
            AND Order_type__c = '传票'
        ];
        // update start by vivek 2019-7-15
        if (getExistarrive()) {
          arriveorder = coc.Arrive_Order__c;
        }
        // 到货订单来的时候
        if (getExistarrive()) {
          if (editAble) {
            alertMessage = '到货订单直接出库，出库单明细不可编辑';
          }
          if (
            coc.SummonsStatus_c__c == '已提交' ||
            coc.SummonsStatus_c__c == '批准'
          ) {
            system.debug('coc.SummonsStatus_c__c : ' + coc.SummonsStatus_c__c);
            saveBtnDisabled = true;
            SorderBtnDisabled = true;
            EditDelCommitBtnDisabled = false;
          }
          //医院二级经销商分类
          Integer io = 0;
          while (io < Dealerelationship.size()) {
            if (
              coc.Order_ForDealer__c ==
              Dealerelationship[io].Dealer_subordinate__c
            ) {
              SecondDealer = Dealerelationship[io].Dealer_subordinate__c;
              coc.Order_ForDealer__c = null;
              io = io + Dealerelationship.size();
            }
            io++;
          }

          Integer ik = 0;
          while (ik < AgencyHospitalLink.size()) {
            if (
              coc.Order_ForHospital__c == AgencyHospitalLink[ik].Hospital__c
            ) {
              HospitalInfo = AgencyHospitalLink[ik].Hospital__c;
              HospitalName = AgencyHospitalLink[ik].Hospital__r.Name;
              coc.Order_ForHospital__c = null;
              ik = ik + AgencyHospitalLink.size();
            }
            ik++;
          }
          //出库单明细1取得
          consumableorderdetailsSelected = [
            SELECT
              Id,
              Dealer_Custom_Price__c,
              Delivery_List_RMB__c,
              Consumable_Product__r.Name__c,
              Consumable_Product__r.SFDA_Status__c,
              Name,
              Consumable_order__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Shipment_Count__c,
              Consumable_Product__r.Intra_Trade_List_RMB__c,
              Consumable_Product__r.Asset_Model_No__c,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Shipment_amount__c,
              //Unitprice_To_agency__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              Invoiced_Procount__c,
              RrturnPro_count__c,
              InvoiceProNot_count__c,
              Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
              Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c,
              isOutPattern__c
            FROM Consumable_orderdetails__c
            WHERE
              Consumable_order__c = :ESetId
              AND Consumable_order__r.Order_Owner_WorkLocal__c = :userWorkLocation
            ORDER BY Name
          ];
          Map<String, Consumable_Orderdetails__c> cocMap = new Map<String, Consumable_Orderdetails__c>();

          for (
            Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
          ) {
            sumPrice += cdc1.Shipment_amount__c;
            orderzaikuId.add(cdc1.Consumable_Product__c);
            //add by rentx 2021-2-26
            String tempId = cdc1.Consumable_product__c;
            if (cdc1.isOutPattern__c) {
              cocMap.put(tempId + 'ishos', cdc1);
            } else {
              cocMap.put(tempId + 'nothos', cdc1);
            }
            //add by rentx 2021-2-26
          }
          String msoql = makeSoqlorderdet();
          product2Selected = Database.query(msoql);
          size = product2Selected.size();
          initStandardController(msoql);

          for (Integer i = 0; i < product2Selected.size(); i++) {
            MidMap.put(
              product2Selected[i].Id,
              new ConsumableorderdetailsInfo(product2Selected[i])
            );
          }
          //update by rentx 2021-01-29
          /*for(Integer i = 0 ; i< CountDel.size();i++){
                            //然后循环CountDel去修改map里的allnumber
                            if(MidMap.containsKey(CountDel[i].Consumable_Product__c)){
                                ConsumableorderdetailsInfo Jstage =  MidMap.get(CountDel[i].Consumable_Product__c);
                                Jstage.allnumber = Jstage.allnumber+1 ;
                                if(CountDel[i].Box_Piece__c == '盒'){
                                    Jstage.Boxnumber = Jstage.Boxnumber + 1;
                                }else if(CountDel[i].Box_Piece__c == '个'){
                                    Jstage.Piecenumber = Jstage.Piecenumber + 1;
                                }
                                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                                MidMap.put(CountDel[i].Consumable_Product__c, Jstage);
                            }
                        }*/

          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
            } else {
              str = 'notHos';
            }
            //明细2对应的产品存在于MidMap中
            if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
              //设置map中key的后缀 用于区分医院特价和非医院特价
              if (
                MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)
              ) {
                ConsumableorderdetailsInfo Jstage = MidMap2.get(
                  CountDel[i].Consumable_Product__c + str
                );
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }

                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              } else {
                //midmap2中没有对应的产品
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                    CountDel[i].Consumable_Product__c
                  )
                  .clone();
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              }
            }
          }
          //update by rentx 2021-01-29
          consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
          //再把map里的值从新赋给ConsumableorderdetailsRecords
          //update by rentx 2021-01-29
          // for(ConsumableorderdetailsInfo bss : MidMap.values()){
          for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
            //update by rentx 2021-01-29

            //if(bss.allnumber > 0){
            //bss.UnitpriceToagency = bss.orderdetails1.Unitprice_To_agency__c == null  || bss.orderdetails1.Unitprice_To_agency__c == 0 ? '' :bss.orderdetails1.Unitprice_To_agency__c.format();
            bss.packinglist = Integer.valueOf(
              bss.Prod.Product2__r.Packing_list_manual__c
            );
            bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
            bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;

            //update by rentx 2021-2-26 start
            if (
              cocMap.containsKey(bss.Prod.Id + 'ishos') &&
              bss.hospitalSpecialOffer == true
            ) {
              consumableorderdetailsSelectRecords.add(bss);
            } else if (
              cocMap.containsKey(bss.Prod.Id + 'nothos') &&
              bss.hospitalSpecialOffer == false
            ) {
              consumableorderdetailsSelectRecords.add(bss);
            }
            //update by rentx 2021-2-26 end
            // consumableorderdetailsSelectRecords.add(bss);
            //}
          }
          Integer ishosnum = 0;
          for (
            ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords
          ) {
            for (
              Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
            ) {
              //update by rentx 2012-3-1 start
              // if(ass.prod.Id == cdc1.Consumable_Product__c){
              //     ass.check = true;
              //     ass.orderdetails1 = cdc1;
              // }
              if (
                ass.Prod.Id == cdc1.Consumable_Product__c &&
                ass.hospitalSpecialOffer == cdc1.isOutPattern__c
              ) {
                ass.check = true;
                ass.orderdetails1 = cdc1;
              }
              //update by rentx 2012-3-1 end
            }
            if (ass.hospitalSpecialOffer == true) {
              ishosnum = ishosnum + 1;
            }
          }
          if (ishosnum > 0) {
            hasHosPro = true;
          } else {
            hasHosPro = false;
          }

          //add by rentx
          noOfRecords = consumableorderdetailsSelectRecords.size();
          //add by rentx
          System.debug('makepagerecords3');
          makepagerecords();
          //listCut();
          // 消耗品明细2を取得
          consumableorderdetails2RecordsList = [
            SELECT
              Id,
              Name,
              SerialLotNo__c,
              Consumable_Product__r.Name__c,
              TracingCode__c,
              Sterilization_limit__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Return_date__c,
              Invoice_Date__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              //add by rentx start
              hospitalSpecialOffer__c
            //add by rentx end
            FROM Consumable_order_details2__c
            WHERE Consumable_ZS_order__c = :ESetId
            ORDER BY Name
          ];
          for (
            Integer i = 0; i < consumableorderdetails2RecordsList.size(); i++
          ) {
            consumableorderdetails2Records.add(
              new ConsumableorderdetailsInfo(
                consumableorderdetails2RecordsList[i]
              )
            );
          }
          //产品明细取得
          consumablearriveproductdetailsSelected = [
            SELECT
              Id,
              Delivery_List_RMB__c,
              Consumable_Product__r.Name__c,
              Name,
              Consumable_Product__r.SFDA_Status__c,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Sterilization_limit__c,
              Consumable_Product__r.Intra_Trade_List_RMB__c,
              Consumable_Product__r.Asset_Model_No__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              //add by rentx start
              hospitalSpecialOffer__c
            //add by rentx end
            FROM Consumable_order_details2__c
            WHERE Consumable_ZS_order__c = :ESetId
            ORDER BY Name
          ];
          for (
            Integer i = 0;
            i < consumablearriveproductdetailsSelected.size();
            i++
          ) {
            consumableproductdetailsRecords.add(
              new ConsumableorderdetailsInfo(
                consumablearriveproductdetailsSelected[i]
              )
            );
          }
        } else {
          // 不是到货订单来的时候
          if (
            coc.SummonsStatus_c__c == '已提交' ||
            coc.SummonsStatus_c__c == '批准'
          ) {
            system.debug('coc.SummonsStatus_c__c : ' + coc.SummonsStatus_c__c);
            saveBtnDisabled = true;
            SorderBtnDisabled = true;
            EditDelCommitBtnDisabled = false;
          }
          //医院二级经销商分类
          Integer io = 0;
          while (io < Dealerelationship.size()) {
            if (
              coc.Order_ForDealer__c ==
              Dealerelationship[io].Dealer_subordinate__c
            ) {
              SecondDealer = Dealerelationship[io].Dealer_subordinate__c;
              coc.Order_ForDealer__c = null;
              io = io + Dealerelationship.size();
            }
            io++;
          }
          Integer ik = 0;
          while (ik < AgencyHospitalLink.size()) {
            if (
              coc.Order_ForHospital__c == AgencyHospitalLink[ik].Hospital__c
            ) {
              HospitalInfo = AgencyHospitalLink[ik].Hospital__c;
              HospitalName = AgencyHospitalLink[ik].Hospital__r.Name;
              coc.Order_ForHospital__c = null;
              ik = ik + AgencyHospitalLink.size();
            }
            ik++;
          }
          // 消耗品明细1を取得
          consumableorderdetailsSelected = [
            SELECT
              Id,
              Dealer_Custom_Price__c,
              Delivery_List_RMB__c,
              Consumable_Product__r.Name__c,
              Consumable_Product__r.SFDA_Status__c,
              Name,
              Consumable_order__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Shipment_Count__c,
              Consumable_Product__r.Intra_Trade_List_RMB__c,
              Consumable_Product__r.Asset_Model_No__c,
              Shipment_amount__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              Invoiced_Procount__c,
              RrturnPro_count__c,
              //Unitprice_To_agency__c,
              InvoiceProNot_count__c,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
              Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c,
              isOutPattern__c
            FROM Consumable_orderdetails__c
            WHERE
              Consumable_order__c = :ESetId
              AND Consumable_order__r.Order_Owner_WorkLocal__c = :userWorkLocation
            ORDER BY Name
          ];
          //add by rentx 202-2-26
          Map<String, Consumable_Orderdetails__c> cocMap = new Map<String, Consumable_Orderdetails__c>();

          for (
            Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
          ) {
            sumPrice += cdc1.Shipment_amount__c;
            orderzaikuId.add(cdc1.Consumable_Product__c);
            //add by rentx 2021-2-26
            String tempId = cdc1.Consumable_product__c;
            if (cdc1.isOutPattern__c) {
              cocMap.put(tempId + 'ishos', cdc1);
            } else {
              cocMap.put(tempId + 'nothos', cdc1);
            }
            //add by rentx 2021-2-26
          }

          String msoql = makeSoqlorderdet();
          product2Selected = Database.query(msoql);
          size = product2Selected.size();
          initStandardController(msoql);
          for (Integer i = 0; i < product2Selected.size(); i++) {
            MidMap.put(
              product2Selected[i].Id,
              new ConsumableorderdetailsInfo(product2Selected[i])
            );
          }

          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
            } else {
              str = 'notHos';
            }
            //明细2对应的产品存在于MidMap中
            if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
              //设置map中key的后缀 用于区分医院特价和非医院特价
              if (
                MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)
              ) {
                ConsumableorderdetailsInfo Jstage = MidMap2.get(
                  CountDel[i].Consumable_Product__c + str
                );
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              } else {
                //midmap2中没有对应的产品
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                    CountDel[i].Consumable_Product__c
                  )
                  .clone();
                Jstage.allnumber = Jstage.allnumber + 1;
                if (CountDel[i].Box_Piece__c == '盒') {
                  Jstage.Boxnumber = Jstage.Boxnumber + 1;
                } else if (CountDel[i].Box_Piece__c == '个') {
                  Jstage.Piecenumber = Jstage.Piecenumber + 1;
                }

                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
                }
                Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
              }
            }
          }

          //再把map里的值从新赋给ConsumableorderdetailsRecords
          //update by rentx 2021-01-29
          // for(ConsumableorderdetailsInfo bss : MidMap.values()){
          for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
            //update by rentx 2021-01-29

            //if(bss.allnumber>0){
            bss.packinglist = Integer.valueOf(
              bss.Prod.Product2__r.Packing_list_manual__c
            );
            bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
            bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;

            //update by rentx 2021-2-26 start
            if (
              cocMap.containsKey(bss.Prod.Id + 'ishos') &&
              bss.hospitalSpecialOffer == true
            ) {
              consumableorderdetailsSelectRecords.add(bss);
            } else if (
              cocMap.containsKey(bss.Prod.Id + 'nothos') &&
              bss.hospitalSpecialOffer == false
            ) {
              consumableorderdetailsSelectRecords.add(bss);
            }
            // consumableorderdetailsSelectRecords.add(bss);
            //}
          }
          // return null;
          Integer ishosnum = 0;
          for (
            ConsumableorderdetailsInfo ass : consumableorderdetailsSelectRecords
          ) {
            //ass.sortBy = sortOrderAsc;
            for (
              Consumable_Orderdetails__c cdc1 : consumableorderdetailsSelected
            ) {
              //update by rentx 2012-3-1 start
              // if(ass.prod.Id == cdc1.Consumable_Product__c){
              //     ass.check = true;
              //     ass.orderdetails1 = cdc1;
              // }
              if (
                ass.Prod.Id == cdc1.Consumable_Product__c &&
                ass.hospitalSpecialOffer == cdc1.isOutPattern__c
              ) {
                ass.check = true;
                ass.orderdetails1 = cdc1;
              }
              //update by rentx 2012-3-1 end
            }

            if (ass.hospitalSpecialOffer == true) {
              ishosnum = ishosnum + 1;
            }
          }

          if (ishosnum > 0) {
            hasHosPro = true;
          } else {
            hasHosPro = false;
          }

          consumableorderdetailsSelectRecords.sort();
          //add by rentx
          noOfRecords = consumableorderdetailsSelectRecords.size();
          //add by rentx
          System.debug('makepagerecords4');
          makepagerecords();

          // 消耗品明细2を取得
          consumableorderdetails2RecordsList = [
            SELECT
              Id,
              Name,
              SerialLotNo__c,
              Consumable_Product__r.Name__c,
              TracingCode__c,
              Sterilization_limit__c,
              Consumable_Product__c,
              Consumable_Product__r.Name,
              Consumable_Product__r.Category3__c,
              Consumable_Product__r.Category4__c,
              Consumable_Product__r.Category5__c,
              Return_date__c,
              Invoice_Date__c,
              Box_Piece__c,
              ProductPacking_list_manual__c,
              //add by rentx start
              hospitalSpecialOffer__c
            //add by rentx end

            FROM Consumable_order_details2__c
            WHERE Consumable_ZS_order__c = :ESetId
            ORDER BY Name
          ];
          for (
            Integer i = 0; i < consumableorderdetails2RecordsList.size(); i++
          ) {
            consumableorderdetails2Records.add(
              new ConsumableorderdetailsInfo(
                consumableorderdetails2RecordsList[i]
              )
            );
          }
        }
      }
      //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'test++++++' + SecondDealer));
      if (SecondDealer == null || SecondDealer == '') {
        provinceOpts.add(new SelectOption('', '-无-'));
        provinceOptsMap.put('', '-无-');
        for (Integer i = 0; i < Dealerelationship.size(); i++) {
          provinceOpts.add(
            new SelectOption(
              Dealerelationship[i].Dealer_subordinate__c,
              Dealerelationship[i].Dealer_subordinate__r.Name
            )
          );
          provinceOptsMap.put(
            Dealerelationship[i].Dealer_subordinate__c,
            Dealerelationship[i].Dealer_subordinate__r.Name
          );
        }
      } else {
        provinceOpts.add(new SelectOption('', '-无-'));
        provinceOptsMap.put('', '-无-');
        for (Integer i = 0; i < Dealerelationship.size(); i++) {
          if (Dealerelationship[i].Dealer_subordinate__c == SecondDealer) {
            provinceOpts.add(
              new SelectOption(
                Dealerelationship[i].Dealer_subordinate__c,
                Dealerelationship[i].Dealer_subordinate__r.Name
              )
            );
            provinceOptsMap.put(
              Dealerelationship[i].Dealer_subordinate__c,
              Dealerelationship[i].Dealer_subordinate__r.Name
            );
          }
        }
        for (Integer i = 0; i < Dealerelationship.size(); i++) {
          if (Dealerelationship[i].Dealer_subordinate__c != SecondDealer) {
            provinceOpts.add(
              new SelectOption(
                Dealerelationship[i].Dealer_subordinate__c,
                Dealerelationship[i].Dealer_subordinate__r.Name
              )
            );
            provinceOptsMap.put(
              Dealerelationship[i].Dealer_subordinate__c,
              Dealerelationship[i].Dealer_subordinate__r.Name
            );
          }
        }
      }

      Schema.DescribeFieldResult dfr = Product2__c.Intra_Trade_List_RMB__c.getDescribe();
      cansee = dfr.isAccessible();
      Schema.DescribeFieldResult dealerPrice = Consumable_orderdetails__c.Dealer_Custom_Price__c.getDescribe();
      dealerPricesee = dealerPrice.isAccessible();
      // 显示数据条数信息
      //    makeMessage();
      //附件
      attachmentinfo = [
        SELECT Id, Name, OwnerId
        FROM Attachment
        WHERE parentid = :ESetId
      ];
      if (attachmentinfo.size() > 0) {
        for (Integer i = 0; i < attachmentinfo.size(); i++) {
          attachmentRecoeds.add(
            new ConsumableorderdetailsInfo(attachmentinfo[i])
          );
        }
      }
      AggregateResult[] categoryList = [
        SELECT Count(id), Category3_text__c c3c
        FROM Product2__c
        WHERE Category3_text__c != NULL
        GROUP BY Category3_text__c
      ];

      categoryOptionList = new List<SelectOption>();
      categoryOptionList.add(new SelectOption('', '-无-'));
      categoryOptionMap = new Map<String, String>();
      categoryOptionMap.put('', '-无-');
      for (AggregateResult category3Search : categoryList) {
        String deliverycnt = String.valueOf(category3Search.get('c3c'));
        categoryOptionList.add(new SelectOption(deliverycnt, deliverycnt));
        categoryOptionMap.put(deliverycnt, deliverycnt);
      }

      category4OptionList = new List<SelectOption>();
      category4OptionList.add(new SelectOption('', '-无-'));
      category4OptionMap = new Map<String, String>();
      category4OptionMap.put('', '-无-');
      /*for(AggregateResult category4Search : category4List) {
                    String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
                    category4OptionList.add(new SelectOption(deliverycnt4,deliverycnt4));
                }*/

      category5OptionList = new List<SelectOption>();
      category5OptionList.add(new SelectOption('', '-无-'));
      category5OptionMap = new Map<String, String>();
      category5OptionMap.put('', '-无-');

      //分页
      PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
      totalCount = pageRecords.size();
      System.debug('pageToken = ' + pageToken);
      System.debug('pageSize = ' + pageSize);
      System.debug('totalCount = ' + totalCount);
      paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount)
        ? pageToken + pageSize
        : null;
      System.debug(
        'paginatedAccounts.nextPageToken = ' + paginatedAccounts.nextPageToken
      );
      paginatedAccounts.recordStart = pageToken + 1;
      paginatedAccounts.pageNumber = pageToken / pageSize + 1;
      Integer recordEnd = pageSize * paginatedAccounts.pageNumber;
      paginatedAccounts.recordEnd = totalCount >= recordEnd
        ? recordEnd
        : totalCount;
      paginatedAccounts.totalRecords = totalCount;

      Integer startIdx;
      Integer endIdx;
      startIdx = pageToken;
      endIdx = pageToken + pageSize;
      List<ConsumableorderdetailsInfo> pageRecordsTemp = new List<ConsumableorderdetailsInfo>();
      if (endIdx > pageRecords.size()) {
        endIdx = pageRecords.size();
      }
      for (Integer i = startIdx; i < endIdx; i++) {
        pageRecordsTemp.add(pageRecords.get(i));
      }

      Boolean Existarrive = (coc.Arrive_Order__c != null);
      String ConsumableOut_report = System.Label.ConsumableOut_report;
      System.debug(
        'consumableproductdetailsRecords = ' + consumableproductdetailsRecords
      );

      data.put('paginatedAccounts', paginatedAccounts);
      data.put('ConsumableOut_report', ConsumableOut_report);
      data.put('accountid', accountid);
      data.put(
        'consumableproductdetailsRecords',
        consumableproductdetailsRecords
      );
      data.put('agencyProType', agencyProType);
      data.put('accountName', accountName);
      data.put('userWorkLocation', userWorkLocation);
      data.put('categoryOptionMap', categoryOptionMap);
      data.put('category4OptionMap', category4OptionMap);
      data.put('category5OptionMap', category5OptionMap);
      data.put('outOutPatternOptionMap', outOutPatternOptionMap);
      data.put('hasHosPro', hasHosPro);
      data.put('Existarrive', Existarrive);
      data.put('sumPrice', sumPrice);
      data.put('HospitalName', HospitalName);
      data.put('provinceOptsMap', provinceOptsMap);
      data.put('SummonsFlag', SummonsFlag);
      data.put('EditDelCommitBtnDisabled', EditDelCommitBtnDisabled);
      data.put('EditAble', EditAble);
      data.put('coc', coc);
      data.put('pageRecords', pageRecordsTemp);
      data.put('arriveorder', arriveorder);
      data.put('consumableorderdetails2Count', consumableorderdetails2Count);
      data.put(
        'consumableorderdetails2Records',
        consumableorderdetails2Records
      );
      data.put('HospitalInfo', HospitalInfo);
      res.status = 'Success';
      res.code = 200;
      System.debug('res = ' + res);
      return res;
    } catch (Exception e) {
      return new ResponseBodyLWC(
        'Error',
        500,
        e.getMessage() + e.getLineNumber(),
        ''
      );
    }
  }

  @AuraEnabled
  public static ResponseBodyLWC categoryAllload(String category3Lwc) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;

    category3 = category3Lwc;
    AggregateResult[] category4List = [
      SELECT Count(id), Category4_text__c c4c
      FROM Product2__c
      WHERE
        Category3_text__c = :category3
        AND Category4_text__c != NULL
        AND Category5_text__c != NULL
      GROUP BY Category4_text__c
    ];
    category4OptionList = new List<SelectOption>();
    category4OptionList.add(new SelectOption('', '-无-'));
    category4OptionMap = new Map<String, String>();
    category4OptionMap.put('', '-无-');
    for (AggregateResult category4Search : category4List) {
      String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
      category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
      category4OptionMap.put(deliverycnt4, deliverycnt4);
    }

    AggregateResult[] category5List = [
      SELECT Count(id), Category5_text__c c5c
      FROM Product2__c
      WHERE
        Category3_text__c = :category3
        AND Category4_text__c != NULL
        AND Category5_text__c != NULL
      GROUP BY Category5_text__c
    ];

    category5OptionList = new List<SelectOption>();
    category5OptionList.add(new SelectOption('', '-无-'));
    category5OptionMap = new Map<String, String>();
    category5OptionMap.put('', '-无-');
    for (AggregateResult category5Search : category5List) {
      String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
      category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
      category5OptionMap.put(deliverycnt5, deliverycnt5);
    }
    data.put('category4OptionMap', category4OptionMap);
    data.put('category5OptionMap', category5OptionMap);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  @AuraEnabled
  public static ResponseBodyLWC categoryload(
    String category3Lwc,
    String category4Lwc
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;

    category3 = category3Lwc;
    category4 = category4Lwc;
    AggregateResult[] category4List = [
      SELECT Count(id), Category4_text__c c4c
      FROM Product2__c
      WHERE
        Category3_text__c = :category3
        AND Category4_text__c != NULL
        AND Category5_text__c != NULL
      GROUP BY Category4_text__c
    ];
    category4OptionList = new List<SelectOption>();
    category4OptionList.add(new SelectOption('', '-无-'));
    category4OptionMap = new Map<String, String>();
    category4OptionMap.put('', '-无-');
    for (AggregateResult category4Search : category4List) {
      String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
      category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
      category4OptionMap.put(deliverycnt4, deliverycnt4);
    }

    AggregateResult[] category5List = [
      SELECT Count(id), Category5_text__c c5c
      FROM Product2__c
      WHERE
        Category3_text__c = :category3
        AND Category4_text__c = :category4
        AND Category5_text__c != NULL
      GROUP BY Category5_text__c
    ];

    category5OptionList = new List<SelectOption>();
    category5OptionList.add(new SelectOption('', '-无-'));
    category5OptionMap = new Map<String, String>();
    category5OptionMap.put('', '-无-');
    for (AggregateResult category5Search : category5List) {
      String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
      category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
      category5OptionMap.put(deliverycnt5, deliverycnt5);
    }
    data.put('category4OptionMap', category4OptionMap);
    data.put('category5OptionMap', category5OptionMap);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  // 检索
  @AuraEnabled
  public static ResponseBodyLWC searchConsumableorderdetails(
    String agencyProTypeLwc,
    String accountNameLwc,
    String userWorkLocationLwc,
    String outOutPattern,
    String category1,
    String category3,
    String category4,
    String category5,
    Boolean editAbleLwc,
    List<ConsumableorderdetailsInfoLwc> pageRecordsLwcLwc,
    List<ConsumableorderdetailsInfo> consumableproductdetailsRecordsLwc,
    String arriveorderLwc,
    Integer pageSizeLWC,
    Integer pageTokenLWC
  ) {
    consumableproductdetailsRecords = consumableproductdetailsRecordsLwc;
    pageRecordsLwc = pageRecordsLwcLwc;
    System.debug('pageRecordsLwc = ' + pageRecordsLwc);
    arriveorder = arriveorderLwc;
    accountName = accountNameLwc;
    userWorkLocation = userWorkLocationLwc;
    agencyProType = agencyProTypeLwc;
    product2Selected = new List<Product2__c>();
    pagesize = pageSizeLWC;
    pageToken = pageTokenLWC > 2000 ? 2000 : pageTokenLWC;
    addSize = 0;
    addData = new List<ConsumableorderdetailsInfo>();
    System.debug('start addData = ' + addData);
    System.debug('accountName = ' + accountName);
    System.debug('userWorkLocation = ' + userWorkLocation);
    String sqlagencyProType = '%' + agencyProTypeLwc + '%';
    List<AggregateResult> orderdetailCount = [
      SELECT count(id), Consumable_Product__c cpc, Box_Piece__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 Cancellation_Flag__c = FALSE
        AND Bar_Code__c != NULL
        AND Isoverdue__c = 1
        AND Product_Type__c LIKE :sqlagencyProType
        AND Dealer_Info_text__c = :accountNameLwc
        AND Arrive_Owner_Work_Location__c = :userWorkLocationLwc
      GROUP BY Consumable_Product__c, Box_Piece__c
    ];
    for (AggregateResult orderdetail : orderdetailCount) {
      zaikuId.add(String.valueOf(orderdetail.get('cpc')));
    }
    editAble = editAbleLwc;
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    SearchDone = 'SearchDone';
    Map<String, String> selectedIdMap = new Map<String, String>();
    List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
    Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
    //update by rentx 2021-01-29
    Map<String, ConsumableorderdetailsInfo> MidMap2 = new Map<String, ConsumableorderdetailsInfo>();
    String countdelSoql = 'SELECT Id,Bar_Code__c,Name,Inventory_date__c,Consumable_Product__c,Consumable_Product__r.Asset_Model_No__c,Recordtypeid,Box_Piece__c,ProductPacking_list_manual__c,hospitalSpecialOffer__c 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 Lose_Flag__c = false AND Bar_Code__c != null AND Isoverdue__c = 1 AND Arrive_Owner_Work_Location__c =  :userWorkLocation AND Dealer_Info_text__c = :accountName ';
    if (String.isNotBlank(outOutPattern) && outOutPattern.equals('ishos')) {
      countdelSoql += ' AND hospitalSpecialOffer__c = true';
    } else if (
      String.isNotBlank(outOutPattern) && outOutPattern.equals('nothos')
    ) {
      countdelSoql += ' AND hospitalSpecialOffer__c = false';
    }
    System.debug('countdelSoql = ' + countdelSoql);
    List<Consumable_order_details2__c> CountDel = Database.query(countdelSoql);
    System.debug('CountDel = ' + CountDel);
    //update by rentx 2021-01-29

    consumableorderdetailsSelectRecords = new List<ConsumableorderdetailsInfo>();
    //consumableorderdetailsSelectRecords = reSet;
    String soql = makeSoql(category1, category3, category4, category5);
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    initStandardController(soql);
    System.debug('soql = ' + soql);
    product2Selected = Database.query(soql);
    for (Integer i = 0; i < product2Selected.size(); i++) {
      MidMap.put(
        product2Selected[i].Id,
        new ConsumableorderdetailsInfo(product2Selected[i])
      );
    }

    for (Integer i = 0; i < CountDel.size(); i++) {
      String str = '';
      if (CountDel[i].hospitalSpecialOffer__c) {
        str = 'isHos';
      } else {
        str = 'notHos';
      }
      System.debug('MidMap = ' + MidMap);
      //明细2对应的产品存在于MidMap中
      if (MidMap.containsKey(CountDel[i].Consumable_Product__c)) {
        //设置map中key的后缀 用于区分医院特价和非医院特价
        if (MidMap2.containsKey(CountDel[i].Consumable_Product__c + str)) {
          ConsumableorderdetailsInfo Jstage = MidMap2.get(
            CountDel[i].Consumable_Product__c + str
          );
          Jstage.allnumber = Jstage.allnumber + 1;
          if (CountDel[i].Box_Piece__c == '盒') {
            Jstage.Boxnumber = Jstage.Boxnumber + 1;
          } else if (CountDel[i].Box_Piece__c == '个') {
            Jstage.Piecenumber = Jstage.Piecenumber + 1;
          }
          if (CountDel[i].hospitalSpecialOffer__c) {
            Jstage.hospitalSpecialOffer = true;
          } else {
            Jstage.hospitalSpecialOffer = false;
          }
          if (HosProMap.containsKey(Jstage.Prod.Id)) {
            Jstage.hosPro = true;
          }
          MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
        } else {
          //midmap2中没有对应的产品
          ConsumableorderdetailsInfo Jstage = MidMap.get(
              CountDel[i].Consumable_Product__c
            )
            .clone();
          Jstage.allnumber = Jstage.allnumber + 1;
          if (CountDel[i].Box_Piece__c == '盒') {
            Jstage.Boxnumber = Jstage.Boxnumber + 1;
          } else if (CountDel[i].Box_Piece__c == '个') {
            Jstage.Piecenumber = Jstage.Piecenumber + 1;
          }
          if (CountDel[i].hospitalSpecialOffer__c) {
            Jstage.hospitalSpecialOffer = true;
          } else {
            Jstage.hospitalSpecialOffer = false;
          }
          if (HosProMap.containsKey(Jstage.Prod.Id)) {
            Jstage.hosPro = true;
          }
          //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
          MidMap2.put(CountDel[i].Consumable_Product__c + str, Jstage);
        }
      }
    }
    Integer ishosnum = 0;
    System.debug('MidMap2 = ' + MidMap2);
    for (ConsumableorderdetailsInfo bss : MidMap2.values()) {
      if (selectedIdMap.containsKey(bss.Prod.id)) {
        continue;
      } else {
        bss.sortBy = false;
        bss.packinglist = Integer.valueOf(
          bss.Prod.Product2__r.Packing_list_manual__c
        );
        bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
        bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
        consumableorderdetailsSelectRecords.add(bss);

        if (bss.hospitalSpecialOffer == true) {
          ishosnum = ishosnum + 1;
        }
      }
    }
    if (ishosnum > 0) {
      hasHosPro = true;
    } else {
      hasHosPro = false;
    }

    consumableorderdetailsSelectRecords.sort();
    makepagerecordsLwc();
    //分页
    PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
    totalCount = pageRecords.size();
    paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount)
      ? pageToken + pageSize
      : null;
    paginatedAccounts.recordStart = pageToken + 1;
    paginatedAccounts.pageNumber = pageToken / pageSize + 1;
    Integer recordEnd = pageSize * paginatedAccounts.pageNumber;
    paginatedAccounts.recordEnd = totalCount >= recordEnd
      ? recordEnd
      : totalCount;
    paginatedAccounts.totalRecords = totalCount;

    System.debug('addSize = ' + addSize);
    Integer startIdx;
    Integer endIdx;
    startIdx = pageToken;
    endIdx = pageToken + pageSize;
    List<ConsumableorderdetailsInfo> pageRecordsTemp = new List<ConsumableorderdetailsInfo>();
    if (endIdx > pageRecords.size()) {
      endIdx = pageRecords.size();
    }

    System.debug('addData.size() = ' + addData.size());
    for (ConsumableorderdetailsInfo ci : addData) {
      pageRecordsTemp.add(ci);
    }
    System.debug('startIdx = ' + startIdx);
    System.debug('endIdx = ' + endIdx);
    System.debug('skipData = ' + skipData);
    System.debug('pageRecords = ' + pageRecords.size());
    String hos = '';
    for (Integer i = startIdx; i < endIdx; i++) {
      System.debug(
        'skipData.get(pageRecords.get(i).Prod.Id) = ' +
        skipData.get(pageRecords.get(i).Prod.Id)
      );
      if (pageRecords.get(i).hospitalSpecialOffer == true) {
        hos = 'ishos';
      } else {
        hos = 'nothos';
      }
      if (skipData.get(pageRecords.get(i).Prod.Id + hos) == null) {
        pageRecordsTemp.add(pageRecords.get(i));
      }
    }

    System.debug('pageRecordsTemp = ' + pageRecordsTemp.size());
    data.put('paginatedAccounts', paginatedAccounts);
    data.put('pageRecords', pageRecordsTemp);
    data.put('SearchDone', SearchDone);
    data.put('hasHosPro', hasHosPro);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  private static String makeSoql(
    String CateName,
    String Category3,
    String Category4,
    String Category5
  ) {
    String sqlTail1 = '(\'';
    for (Integer i = 0; i < zaikuId.size(); i++) {
      if (zaikuId[i] != null) {
        if (i < zaikuId.size() - 1) {
          sqlTail1 += zaikuId[i] + '\',\'';
        } else {
          sqlTail1 += zaikuId[i];
        }
      }
    }
    sqlTail1 += '\')';
    String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
    soql += ' WHERE Id in' + sqlTail1;
    if (!String.isBlank(CateName)) {
      soql +=
        ' AND (Name__c like \'%' +
        String.escapeSingleQuotes(CateName.replaceAll('%', '\\%')) +
        '%\' or Asset_Model_No__c like \'%' +
        String.escapeSingleQuotes(CateName.replaceAll('%', '\\%')) +
        '%\')';
    }
    if (!String.isBlank(Category3)) {
      soql += ' AND Category3__c = \'' + Category3 + '\'';
    }
    if (!String.isBlank(Category4)) {
      soql += ' AND Category4__c = \'' + Category4 + '\'';
    }
    if (!String.isBlank(Category5)) {
      soql += ' AND Category5__c = \'' + Category5 + '\'';
    }
    return soql;
  }

  public static String makeSoqlorderdet() {
    String sqlTail = '(\'';
    for (Integer i = 0; i < orderzaikuId.size(); i++) {
      if (i < orderzaikuId.size() - 1) {
        sqlTail += orderzaikuId[i] + '\',\'';
      } else {
        sqlTail += orderzaikuId[i];
      }
    }
    sqlTail += '\')';
    String msoql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
    msoql += ' WHERE Id in' + sqlTail;
    return msoql;
  }

  public static String makeSoqlinventory() {
    String sqlTail = '(\'';
    for (Integer i = 0; i < zaikuId.size(); i++) {
      if (zaikuId[i] != null) {
        if (i < zaikuId.size() - 1) {
          sqlTail += zaikuId[i] + '\',\'';
        } else {
          sqlTail += zaikuId[i];
        }
      }
    }
    sqlTail += '\')';
    String msoql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,Product2__r.Packing_list_manual__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Category3__c,Category4__c,Category5__c  FROM Product2__c ';
    msoql += ' WHERE Id in' + sqlTail;
    return msoql;
  }

  public static void initStandardController(String soql) {
    // init standard controller
    System.debug('soql =' + soql);
    System.debug('initStandardController star');
    //setCon = new ApexPages.StandardSetController(Database.getQueryLocator(soql));
    // sets the number of records in each page set
    //setCon.setPageSize(size);
    System.debug('initStandardController end');
  }

  public static List<ConsumableorderdetailsInfo> makepagerecords() {
    List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
    Map<String, String> selectedIdMap = new Map<String, String>();
    System.debug('zhj1');
    //取出选择的产品
    if (pageRecords != null) {
      System.debug('zhj2');
      for (ConsumableorderdetailsInfo ass : pageRecords) {
        if (ass.check == true) {
          if (ass.hospitalSpecialOffer == true) {
            selectedIdMap.put(ass.Prod.Id + 'ishos', ass.Prod.Id);
          } else {
            selectedIdMap.put(ass.Prod.Id + 'nothos', ass.Prod.Id);
          }
          reSet.add(ass);
        }
      }
    }
    System.debug('zhj3');
    pageRecords = new List<ConsumableorderdetailsInfo>();
    System.debug('reSet.size() = ' + reSet.size());
    if (editAble && String.isBlank(arriveorder)) {
      pageRecords = reSet;
    }
    //Integer pagestartNo = (setCon.getPageNumber() * size)-size;
    //Integer pageendNo = (setCon.getPageNumber() * size)>noOfRecords ? noOfRecords :(setCon.getPageNumber() * size-1);
    Integer addNo = 0;
    //update by rentx 2021-2-26 start
    System.debug(
      'consumableorderdetailsSelectRecords.size() = ' +
      consumableorderdetailsSelectRecords.size()
    );
    for (
      ConsumableorderdetailsInfo info : consumableorderdetailsSelectRecords
    ) {
      Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
      if (
        (info.hospitalSpecialOffer &&
        selectedIdMap.containsKey(info.Prod.Id + 'ishos')) ||
        (info.hospitalSpecialOffer == false &&
        selectedIdMap.containsKey(info.Prod.Id + 'nothos'))
      ) {
        addNo++;
      } else {
        if (info.check == false) {
          info.orderdetails1 = orderdetails1;
        }
        pageRecords.add(info);
        addNo++;
      }
    }
    System.debug('pageRecords 2 = ' + pageRecords);
    System.debug('zhj5');
    System.debug('pageRecords = ' + pageRecords);
    return pageRecords;
  }

  public static List<ConsumableorderdetailsInfo> makepagerecordsLwc() {
    List<ConsumableorderdetailsInfoLwc> reSetLwc = new List<ConsumableorderdetailsInfoLwc>();
    Map<String, String> selectedIdMap = new Map<String, String>();
    skipData = new Map<String, String>();
    System.debug('makepagerecordsLwc pageRecordsLwc = ' + pageRecordsLwc);
    //取出选择的产品
    if (pageRecordsLwc != null) {
      for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
        System.debug('ass.check = ' + ass.check);
        if (ass.check == true) {
          if (ass.hospitalSpecialOffer == true) {
            selectedIdMap.put(ass.Prod.Id + 'ishos', ass.Prod.Id);
            skipData.put(ass.Prod.Id + 'ishos', ass.Prod.Id);
          } else {
            selectedIdMap.put(ass.Prod.Id + 'nothos', ass.Prod.Id);
            skipData.put(ass.Prod.Id + 'nothos', ass.Prod.Id);
          }
          reSetLwc.add(ass);
        }
      }
    }
    System.debug('selectedIdMap = ' + selectedIdMap);
    pageRecords = new List<ConsumableorderdetailsInfo>();
    if (editAble && String.isBlank(arriveorder)) {
      List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
      System.debug('reSetLwc = ' + reSetLwc);
      for (ConsumableorderdetailsInfoLwc assLwc : reSetLwc) {
        ConsumableorderdetailsInfo ci = new ConsumableorderdetailsInfo();
        ci.check = assLwc.check;
        ci.oldCheck = assLwc.oldCheck;
        ci.orderdetails1 = assLwc.orderdetails1;
        ci.orderdetails2 = assLwc.orderdetails2;
        ci.Prod = assLwc.Prod;
        ci.Boxnumber = assLwc.Boxnumber;
        ci.Piecenumber = assLwc.Piecenumber;
        ci.allnumber = assLwc.allnumber;
        ci.oldConsumableCount = assLwc.oldConsumableCount;
        ci.canSelect = assLwc.canSelect;
        ci.sortBy = assLwc.sortBy;
        ci.packinglist = assLwc.packinglist;
        ci.approbation_No = assLwc.approbation_No;
        ci.expiration_Date = assLwc.expiration_Date;
        ci.boxorpiecein = assLwc.boxorpiecein;
        ci.boxorpiece = assLwc.boxorpiece;
        ci.boxorpieceMap = assLwc.boxorpieceMap;
        ci.concc = assLwc.concc;
        ci.BoxPiece = assLwc.BoxPiece;
        ci.hospitalSpecialOffer = assLwc.hospitalSpecialOffer;
        ci.hosPro = assLwc.hosPro;
        reSet.add(ci);
      }
      pageRecords = reSet;
      System.debug('reSet = ' + reSet);
      addData = reSet.clone();
      System.debug('addData = reSet = ' + addData);
    }
    //Integer pagestartNo = (setCon.getPageNumber() * size)-size;
    //Integer pageendNo = (setCon.getPageNumber() * size)>noOfRecords ? noOfRecords :(setCon.getPageNumber() * size-1);
    Integer addNo = 0;
    //update by rentx 2021-2-26 start
    System.debug(
      'consumableorderdetailsSelectRecords.size() = ' +
      consumableorderdetailsSelectRecords.size()
    );
    for (
      ConsumableorderdetailsInfo info : consumableorderdetailsSelectRecords
    ) {
      Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
      if (
        (info.hospitalSpecialOffer &&
        selectedIdMap.containsKey(info.Prod.Id + 'ishos')) ||
        (info.hospitalSpecialOffer == false &&
        selectedIdMap.containsKey(info.Prod.Id + 'nothos'))
      ) {
        System.debug('去掉的id : ' + info.Prod.Id);
        addNo++;
        addSize++;
      } else {
        if (info.check == false) {
          info.orderdetails1 = orderdetails1;
        }
        pageRecords.add(info);
        addNo++;
      }
    }
    System.debug('pageRecords.size() = ' + pageRecords.size());
    System.debug('end  addData = ' + addData);
    return pageRecords;
  }

  // 保存按钮
  @AuraEnabled
  public static ResponseBodyLWC save(
    Consumable_order__c cocLwc,
    String hospitalInfoLwc,
    String hospitalNameLwc,
    String secondaryDistributorLwc,
    List<ConsumableorderdetailsInfoLwc> pageRecordsLwc,
    String accountidLwc,
    String ESetIdLwc,
    List<ConsumableorderdetailsInfo> consumableproductdetailsRecordsLwc,
    String agencyProTypeLwc,
    String userWorkLocationLwc
  ) {
    coc = cocLwc;
    HospitalInfo = hospitalInfoLwc;
    HospitalName = hospitalNameLwc;
    SecondDealer = secondaryDistributorLwc;
    pageRecordsLwc = pageRecordsLwc;
    accountid = accountidLwc;
    consumableproductdetailsRecords = consumableproductdetailsRecordsLwc;
    ESetId = ESetIdLwc;
    agencyProType = agencyProTypeLwc;
    userWorkLocation = userWorkLocationLwc;

    System.debug('coc = ' + coc);
    System.debug('HospitalInfo = ' + HospitalInfo);
    System.debug('HospitalName = ' + HospitalName);
    System.debug('SecondDealer = ' + SecondDealer);
    System.debug('pageRecordsLwc = ' + pageRecordsLwc);
    System.debug('accountid = ' + accountid);
    System.debug(
      'consumableproductdetailsRecords = ' + consumableproductdetailsRecords
    );
    System.debug('ESetId = ' + ESetId);
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    //订单信息确认
    if (coc.SummonsForDirction__c == '' || coc.SummonsForDirction__c == null) {
      // coc.SummonsForDirction__c.addError('请输入指示单目的');
      // return null;
      return new ResponseBodyLWC('Error', 500, '请输入指示单目的', '');
    } else if (coc.SummonsForDirction__c == '直接销售给医院') {
      if (String.isBlank(HospitalInfo) || String.isBlank(HospitalName)) {
        // coc.addError('请输入医院');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入医院', '');
      }
      if (String.isBlank(coc.Order_ForCustomerText__c)) {
        // coc.Order_ForCustomerText__c.addError('请输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入科室', '');
      } else if (
        String.isNotBlank(SecondDealer) ||
        String.isNotBlank(coc.Order_ForDealerText__c)
      ) {
        // coc.addError('不需要二级经销商和经销商(录入)信息' );
        // return null;
        return new ResponseBodyLWC(
          'Error',
          500,
          '不需要二级经销商和经销商(录入)信息',
          ''
        );
      }
    } else if (coc.SummonsForDirction__c == '医院试用') {
      if (String.isBlank(HospitalInfo) || String.isBlank(HospitalName)) {
        // coc.addError('请输入医院');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入医院', '');
      }
      if (String.isBlank(coc.Order_ForCustomerText__c)) {
        // coc.Order_ForCustomerText__c.addError('请输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入科室', '');
      }
    } else if (coc.SummonsForDirction__c == '销售给二级经销商') {
      if (
        String.isBlank(SecondDealer) &&
        String.isBlank(coc.Order_ForDealerText__c)
      ) {
        // coc.addError('必须输入二级经销商或经销商(录入)');
        // return null;
        return new ResponseBodyLWC(
          'Error',
          500,
          '必须输入二级经销商或经销商(录入)',
          ''
        );
      }
      if (String.isBlank(HospitalInfo) || String.isBlank(HospitalName)) {
        // coc.addError('请输入医院');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入医院', '');
      }
      if (String.isBlank(coc.Order_ForCustomerText__c)) {
        // coc.Order_ForCustomerText__c.addError('请输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入科室', '');
      }
    } else if (coc.SummonsForDirction__c == '互相调货') {
      if (String.isNotBlank(HospitalInfo) || String.isNotBlank(HospitalName)) {
        // coc.addError('不需要输入医院');
        // return null;
        return new ResponseBodyLWC('Error', 500, '不需要输入医院', '');
      }
      if (String.isNotBlank(coc.Order_ForCustomerText__c)) {
        // coc.Order_ForCustomerText__c.addError('不需要输入科室');
        // return null;
        return new ResponseBodyLWC('Error', 500, '不需要输入科室', '');
      }
      if (
        String.isBlank(SecondDealer) &&
        String.isBlank(coc.Order_ForDealerText__c)
      ) {
        // coc.addError('必须输入二级经销商或经销商(录入)');
        // return null;
        return new ResponseBodyLWC(
          'Error',
          500,
          '必须输入二级经销商或经销商(录入)',
          ''
        );
      }
    }

    Integer isHos = 0;

    Integer FLG = 0;
    Integer Count = 0;
    for (ConsumableorderdetailsInfoLwc CheckCount : pageRecordsLwc) {
      FLG = FLG + 1;
      if (CheckCount.check == false) {
        Count = Count + 1;
      } else {
        //add by rentx
        if (CheckCount.hospitalSpecialOffer) {
          isHos = isHos + 1;
        }
        //add by rentx
      }
    }
    if (Count == FLG) {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择所需消耗品'));
      // return null;
      return new ResponseBodyLWC('Error', 500, '请选择所需消耗品', '');
    }
    // gzw 注释 判断提前 20210308
    //checkOutPattern();
    //根据用户选中的产品给 出库单上的是否医院特价出库字段赋值
    Integer isHosCheckOutPattern = 0;
    for (ConsumableorderdetailsInfoLwc CheckCount : pageRecordsLwc) {
      if (CheckCount.check == true && CheckCount.hospitalSpecialOffer == true) {
        isHosCheckOutPattern = isHosCheckOutPattern + 1;
      }
    }
    if (isHosCheckOutPattern > 0) {
      coc.OutPattern__c = true;
    } else {
      coc.OutPattern__c = false;
    }

    // add by rentx 2021-3-10 start
    //特价医院出库非本医院维护的特价商品时,报错 非特价医院出库维护在医院特价关系表的产品时 报错
    if (coc.SummonsForDirction__c != '互相调货') {
      //非特价医院出库特价产品时 报错(当前经销商下没有特价医院除外)
      List<hospitalprice__c> hopList = [
        SELECT id, hospital__c, product__c
        FROM hospitalprice__c
        WHERE account__c = :accountid
      ];
      //经销商对应医院下的所有特价产品
      Map<String, String> proMap = new Map<String, String>();
      //经销商下的所有特价产品
      Map<String, String> allProMap = new Map<String, String>();

      if (hopList != null && hopList.size() > 0) {
        Boolean flag = false;
        if (HospitalInfo != null && HospitalInfo != '') {
          for (hospitalprice__c hp : hopList) {
            allProMap.put(hp.product__c, '');
            //如果当前 医院特价关系中的医院对应出库单上出库的医院,则放产品id到map
            if (hp.hospital__c == HospitalInfo) {
              flag = true;
              proMap.put(hp.product__c, '');
            }
          }
        }
        for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
          if (ass.check == true) {
            //判断选中的医院特价产品
            if (ass.hospitalSpecialOffer == true) {
              //用户选中了当前医院下的特价产品
              if (proMap.containsKey(ass.Prod.Id)) {
                continue;
                //用户选中了没有维护特价医院的特价产品
              } else if (!allProMap.containsKey(ass.Prod.Id)) {
                continue;
              } else {
                //用户选中非当前医院维护的特价产品
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '当前医院没有维护 消耗品:'+ ass.Prod.Name__c +' 的特价'));
                // return null;
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '当前医院没有维护 消耗品:' + ass.Prod.Name__c + '的特价',
                  ''
                );
              }
            } //非医院特价产品可以出库给任意医院,所以不需要判断
          }
        }
      }
    } else {
      //如果是互相调货,判断 经销商(录入) 是否维护了 当前选中的特价产品
      List<hospitalprice__c> hopList = [
        SELECT id, hospital__c, product__c
        FROM hospitalprice__c
        WHERE account__c = :coc.Order_ForDealerTextID__c
      ];
      Map<Id, String> proMap = new Map<Id, String>();
      if (hopList != null && hopList.size() > 0) {
        for (hospitalprice__c hpc : hopList) {
          proMap.put(hpc.product__c, '');
        }

        String proStr = '';
        for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
          if (ass.check == true) {
            if (ass.hospitalSpecialOffer == true) {
              if (!proMap.containsKey(ass.Prod.Id)) {
                proStr += ass.Prod.Name__c + ',';
              }
            }
          }
        }
        if (proStr != '') {
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '经销商:'+coc.Order_ForDealerText__c +' 没有消耗品:'+proStr.substring(0,proStr.length()-1) + ' 的特价'));
          // return null;
          return new ResponseBodyLWC(
            'Error',
            500,
            '经销商:' +
              coc.Order_ForDealerText__c +
              ' 没有消耗品:' +
              proStr.substring(0, proStr.length() - 1) +
              ' 的特价',
            ''
          );
        }
      }
    }

    // checkOutPattern();
    Consumable_order__c p = new Consumable_order__c();
    List<Consumable_orderdetails__c> Ins = new List<Consumable_orderdetails__c>();
    List<Consumable_order_details2__c> InsProduct = new List<Consumable_order_details2__c>();
    Savepoint sp = Database.setSavepoint();
    // try {
    //新建订单时
    if (String.isEmpty(ESetId)) {
      p.Name = '*';
      p.Order_type__c = '传票';
      p.Order_ProType__c = agencyProType;
      if (
        coc.SummonsStatus_c__c == null || String.isBlank(coc.SummonsStatus_c__c)
      )
        coc.SummonsStatus_c__c = '草案中';
      // update strat by vivek 2019-7-12
      p.NoConfirmedPrice__c = coc.NoConfirmedPrice__c;
      // update end by vivek 2019-7-12
      p.SummonsStatus_c__c = coc.SummonsStatus_c__c;
      if (coc.Arrive_Order__c != null) {
        p.Arrive_Order__c = coc.Arrive_Order__c;
      }
      p.Offers_Price__c = coc.Offers_Price__c;
      p.Dealer_Info__c = accountid;
      if (String.isBlank(SecondDealer)) {
        p.Order_ForHospital__c = String.isNotBlank(HospitalInfo)
          ? HospitalInfo
          : null;
        p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
      } else {
        p.Order_ForHospital__c = String.isNotBlank(HospitalInfo)
          ? HospitalInfo
          : null;
        p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
        p.Order_ForDealer__c = SecondDealer;
      }
      P.Order_ForDealerText__c = coc.Order_ForDealerText__c;
      P.Order_ForDealerTextID__c = coc.Order_ForDealerTextID__c;
      p.Order_date__c = coc.Order_date__c;
      p.SummonsForDirction__c = coc.SummonsForDirction__c;
      p.RecordTypeid = System.Label.RT_ConOrder_Outboundorder;
      // update start by vivek 2019-7-15
      p.NoConfirmedPrice__c = coc.NoConfirmedPrice__c;
      // update end by vivek 2019-7-15
      //add by rentx
      p.OutPattern__c = coc.OutPattern__c;
      //add by rentx
      //Map<String,String> ProductNewMap = new Map<String, String>();
      for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
        if (ass.check == true) {
          if (ass.orderdetails1.Delivery_List_RMB__c < 0) {
            return new ResponseBodyLWC(
              'Error',
              500,
              '请输入正确的出货单价 (元)',
              ''
            );
          }
          if (
            ass.orderdetails1.Delivery_List_RMB__c == null &&
            coc.SummonsForDirction__c != '医院试用'
          ) {
            return new ResponseBodyLWC(
              'Error',
              500,
              '请输入正确的出货单价 (元)',
              ''
            );
          }
          if (
            (ass.orderdetails1.Delivery_List_RMB__c == null ||
            ass.orderdetails1.Delivery_List_RMB__c == 0) &&
            coc.SummonsForDirction__c != '医院试用'
          ) {
            return new ResponseBodyLWC('Error', 500, '请输入出货单价 (元)', '');
          }
          if (
            ass.orderdetails1.Delivery_List_RMB__c == 0 &&
            (coc.SummonsForDirction__c == '销售给二级经销商' ||
            coc.SummonsForDirction__c == '直接销售给医院')
          ) {
            return new ResponseBodyLWC('Error', 500, '请输入出货单价 (元)', '');
          }
          if (
            ass.orderdetails1.Shipment_Count__c == null ||
            ass.orderdetails1.Shipment_Count__c == 0
          ) {
            // ass.orderdetails1.Shipment_Count__c.addError('请输入出货数量');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请输入出货数量', '');
          }

          if (
            ass.orderdetails1.Box_Piece__c == null ||
            ass.orderdetails1.Box_Piece__c == ''
          ) {
            // ass.orderdetails1.Box_Piece__c.addError('请输入单位');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请输入单位', '');
          }
          if (ass.orderdetails1.Box_Piece__c == '盒') {
            if (ass.orderdetails1.Shipment_Count__c > ass.Boxnumber) {
              //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
              if (ass.oldCheck == false) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' + ass.Prod.Name__c + '库存不足',
                  ''
                );
              } else {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' +
                    ass.orderdetails1.Consumable_Product__r.Name__c +
                    '库存不足',
                  ''
                );
              }
            }
          } else if (ass.orderdetails1.Box_Piece__c == '个') {
            if (ass.orderdetails1.Shipment_Count__c > ass.Piecenumber) {
              //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
              if (ass.oldCheck == false) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' + ass.Prod.Name__c + '库存不足',
                  ''
                );
              } else {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' +
                    ass.orderdetails1.Consumable_Product__r.Name__c +
                    '库存不足',
                  ''
                );
              }
            }
          }
        }
      }
      insert p;
      ESetId = p.id;
      List<Consumable_order__c> detailName = new List<Consumable_order__c>();
      detailName = [
        SELECT id, Name
        FROM Consumable_order__c
        WHERE id = :ESetId
      ];
      Integer i = 1;
      for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
        if (ass.check == true) {
          Consumable_orderdetails__c InsAfterDel = new Consumable_orderdetails__c();
          String str = string.valueOf(i);
          if (str.length() == 1) {
            str = '0' + str;
          }
          InsAfterDel.Name = detailName[0].name + '-' + str;
          InsAfterDel.Shipment_Count__c = ass.orderdetails1.Shipment_Count__c;
          InsAfterDel.Consumable_order__c = p.id;
          InsAfterDel.Consumable_Product__c = ass.Prod.id;
          InsAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
          InsAfterDel.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
          // TODO 默认 盒 ，需要修正
          InsAfterDel.Box_Piece__c = ass.orderdetails1.Box_Piece__c;
          InsAfterDel.Out_unit__c = ass.orderdetails1.Box_Piece__c;
          //InsAfterDel.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
          InsAfterDel.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
          InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
          //add by rentx 2021-2-26 start
          InsAfterDel.isOutPattern__c = ass.hospitalSpecialOffer;
          //add by rentx 2021-2-26 end
          i++;
          Ins.add(InsAfterDel);
        }
      }
      // 如果 出库单 和 OCM发货Header连 的话，发货的Detail2 Copy到 出库单的Detail2里
      if (getExistarrive()) {
        for (ConsumableorderdetailsInfo ass : consumableproductdetailsRecords) {
          //BlockForP;
          Consumable_order_details2__c InsProductDet = new Consumable_order_details2__c();
          InsProductDet.Id = ass.orderdetails2.Id;
          InsProductDet.Consumable_ZS_order__c = p.id;
          i++;
          InsProduct.add(InsProductDet);
        }
      }
      if (Ins.size() > 0) {
        insert Ins;
      }
      if (InsProduct.size() > 0) {
        //ControllerUtil.updateOrderDetailsSatus(InsProduct);
        update InsProduct;
      }
    } else if (ESetId != null || ESetId.length() > 0) {
      //修改之后 保存订单
      List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
      // update start by vivek 2019-7-15 add "NoConfirmedPrice__c" in select
      cocinfo = [
        SELECT
          Id,
          Name,
          SummonsStatus_c__c,
          NoConfirmedPrice__c,
          Dealer_Info__c,
          Order_ForHospital__c,
          SummonsForDirction__c
        FROM Consumable_order__c
        WHERE Id = :ESetId
      ];
      // update end by vivek 2019-7-15
      if (cocinfo.size() > 0) {
        p = cocinfo[0];
      }
      p.Name = coc.Name;
      p.Dealer_Info__c = accountid;
      p.Order_ProType__c = agencyProType;
      if (String.isEmpty(SecondDealer)) {
        p.Order_ForHospital__c = String.isNotBlank(HospitalInfo)
          ? HospitalInfo
          : null;
        p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
        System.debug('SecondDealer = ' + SecondDealer);
        p.Order_ForDealer__c = null;
      } else {
        p.Order_ForHospital__c = String.isNotBlank(HospitalInfo)
          ? HospitalInfo
          : null;
        p.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
        p.Order_ForDealer__c = SecondDealer;
      }
      P.Order_ForDealerText__c = coc.Order_ForDealerText__c;
      P.Order_ForDealerTextID__c = coc.Order_ForDealerTextID__c;
      p.Order_date__c = coc.Order_date__c;
      p.SummonsForDirction__c = coc.SummonsForDirction__c;
      //add by rentx
      p.OutPattern__c = coc.OutPattern__c;
      // update start by vivek 2019-7-15
      if (p.SummonsStatus_c__c == '价格未定') {
        p.NoConfirmedPrice__c = false;
        p.SummonsStatus_c__c = '已完成';
      } else {
        p.SummonsStatus_c__c = '草案中';
      }
      // p.SummonsStatus_c__c = '草案中';
      // update end by vivek 2019-7-15
      Integer i = 1;
      //Map<String,String> ProductOldMap = new Map<String, String>();
      for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
        if (ass.check == true) {
          if (ass.orderdetails1.Delivery_List_RMB__c < 0) {
            return new ResponseBodyLWC(
              'Error',
              500,
              '请输入正确的出货单价 (元)',
              ''
            );
          }
          Consumable_orderdetails__c InsAfterDel = new Consumable_orderdetails__c();
          if (
            (ass.orderdetails1.Delivery_List_RMB__c == null ||
            ass.orderdetails1.Delivery_List_RMB__c == 0) &&
            coc.SummonsForDirction__c != '医院试用'
          ) {
            return new ResponseBodyLWC('Error', 500, '请输入出货单价 (元)', '');
          }
          if (
            ass.orderdetails1.Delivery_List_RMB__c == 0 &&
            (coc.SummonsForDirction__c == '销售给二级经销商' ||
            coc.SummonsForDirction__c == '直接销售给医院')
          ) {
            return new ResponseBodyLWC('Error', 500, '请输入出货单价 (元)', '');
          }
          if (
            ass.orderdetails1.Box_Piece__c == null ||
            ass.orderdetails1.Box_Piece__c == ''
          ) {
            // ass.orderdetails1.Box_Piece__c.addError('请输入单位');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请输入单位', '');
          }
          if (ass.orderdetails1.Box_Piece__c == '盒') {
            if (ass.orderdetails1.Shipment_Count__c > ass.Boxnumber) {
              //ass.orderdetails1.Shipment_Count__c.addError('库存不足');
              if (ass.oldCheck == false) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' + ass.Prod.Name__c + '库存不足',
                  ''
                );
              } else {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' +
                    ass.orderdetails1.Consumable_Product__r.Name__c +
                    '库存不足',
                  ''
                );
              }
            }
          } else if (ass.orderdetails1.Box_Piece__c == '个') {
            if (ass.orderdetails1.Shipment_Count__c > ass.Piecenumber) {
              if (ass.oldCheck == false) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.Prod.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' + ass.Prod.Name__c + '库存不足',
                  ''
                );
              } else {
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
                return new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' +
                    ass.orderdetails1.Consumable_Product__r.Name__c +
                    '库存不足',
                  ''
                );
              }
            }
          }
          if (
            ass.orderdetails1.Shipment_Count__c == null ||
            ass.orderdetails1.Shipment_Count__c == 0
          ) {
            // ass.orderdetails1.Shipment_Count__c.addError('请输入出货数量');
            // return null;
            return new ResponseBodyLWC('Error', 500, '请输入出货数量', '');
          } else {
            String str = string.valueOf(i);
            if (str.length() == 1) {
              str = '0' + str;
            }
            InsAfterDel.Name = p.name + '-' + str;
            InsAfterDel.Shipment_Count__c = ass.orderdetails1.Shipment_Count__c;
            InsAfterDel.Consumable_order__c = ESetId;
            InsAfterDel.Consumable_Product__c = ass.Prod.id;
            InsAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c;
            InsAfterDel.Delivery_List_RMB__c = ass.orderdetails1.Delivery_List_RMB__c;
            InsAfterDel.Box_Piece__c = ass.orderdetails1.Box_Piece__c;
            InsAfterDel.Out_unit__c = ass.orderdetails1.Box_Piece__c;
            //InsAfterDel.Unitprice_To_agency__c = ass.orderdetails1.Unitprice_To_agency__c;
            InsAfterDel.Dealer_Custom_Price__c = ass.orderdetails1.Dealer_Custom_Price__c;
            InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
            //add by rentx 2021-2-26 start
            InsAfterDel.isOutPattern__c = ass.hospitalSpecialOffer;
            //add by rentx 2021-2-26 end
            i++;
            Ins.add(InsAfterDel);
          }
        }
      }
      update p;
      List<Consumable_orderdetails__c> qs = new List<Consumable_orderdetails__c>();
      qs = [
        SELECT Id
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c = :ESetId
      ];
      if (qs.size() > 0) {
        delete qs;
      }
      if (Ins.size() > 0) {
        insert Ins;
      }
    }
    // }catch (Exception ex) {
    //     Database.rollback(sp);
    //     // ApexPages.addMessages(ex);
    //     // return null;
    //     //return new ResponseBodyLWC('Error',500, ex.getMessage(), '');
    //     return new ResponseBodyLWC('Error',500, JSON.serialize(ex), '');
    // }
    data.put('ESetId', ESetId);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  public static void checkOutPattern() {
    //根据用户选中的产品给 出库单上的是否医院特价出库字段赋值
    Integer isHos = 0;
    for (ConsumableorderdetailsInfo CheckCount : pageRecords) {
      if (CheckCount.check == true && CheckCount.hospitalSpecialOffer == true) {
        ishos = ishos + 1;
      }
    }
    if (isHos > 0) {
      coc.OutPattern__c = true;
    } else {
      coc.OutPattern__c = false;
    }
  }

  //打印PDF
  @AuraEnabled
  public static ResponseBodyLWC PraseToPDF(
    Consumable_order__c cocLwc,
    String ESetId
  ) {
    System.debug('cocLwc = ' + cocLwc);
    System.debug('ESetId = ' + ESetId);
    coc = cocLwc;
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;

    if (coc.SummonsStatus_c__c == '批准') {
      Consumable_order__c P = new Consumable_order__c();
      List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
      // update start by vivek 2019-7-15 add “NoConfirmedPrice__c” in select
      cocinfo = [
        SELECT
          Id,
          Name,
          SummonsStatus_c__c,
          NoConfirmedPrice__c,
          Dealer_Info__c,
          Order_ForHospital__c,
          SummonsForDirction__c,
          Billed_Status__c
        FROM Consumable_order__c
        WHERE Id = :ESetId
      ];
      // update end by vivek 2019-7-15
      if (cocinfo.size() > 0) {
        p = cocinfo[0];
      }
      p.SummonsStatus_c__c = '出库单已打印';
      update p;
    }
    data.put('ESetId', ESetId);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  //查找经销商
  @AuraEnabled(cacheable=true scope='global')
  public static List<LookupSearchResult> search(String searchTerm) {
    System.debug('searchTerm = ' + searchTerm);
    String nameCondition = '';
    nameCondition +=
      '%' +
      String.escapeSingleQuotes(searchTerm.replaceAll('%', '\\%')) +
      '%';
    List<Account> accs = new List<Account>();
    System.debug('nameCondition = ' + nameCondition);
    //查询条件修改
    //筛选判断条件：当前财年的4/1 ~ 第二年的6/30  & ET or ENG类型 & 当前用户类型
    //1 and 2
    //1. Integer year 2022/4/1 ~ 2023/6/30
    //开始日期 + 结束日期
    //Contract_Decide_Start_Date__c>=开始日期  and Contract_Decide_End_Date__c<结束日期
    //2. 添加经销商允销类型：ET经销商协议；ENG耗材经销商协议
    //取当前用户的类型，如果用户类型是ET,ET经销商协议 = true
    // Date today = Date.today();
    // Integer thisYear = today.year();
    // Integer nextYear = today.year() + 1;
    // Date thisDatetime = Date.newInstance(thisYear, 4, 1);
    // Date nextDatetime = Date.newInstance(nextYear, 6, 30);
    // System.debug('thisDatetime = ' + thisDatetime);
    // System.debug('nextDatetime = ' + nextDatetime);

    // User UserProTypecTemp = [select UserPro_Type__c from User where id =: UserInfo.getUserId()];
    // System.debug('UserInfo.getUserId() = ' + UserInfo.getUserId());
    // System.debug('UserProTypecTemp = ' + UserProTypecTemp);
    // System.debug('UserProTypecTemp.UserPro_Type__c = ' + UserProTypecTemp.UserPro_Type__c);
    // if (UserProTypecTemp.UserPro_Type__c == 'ENG') {
    //     accs = [
    //         SELECT Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name, BillingCity
    //         FROM Account
    //         WHERE
    //             // Name = '奥林巴斯（北京）销售服务有限公司'
    //             // AND
    //             Name LIKE :nameCondition
    //             AND RecordType.DeveloperName = 'AgencyContract'
    //             AND Contract_Decide_Start_Date__c >= :thisDatetime
    //             AND Contract_Decide_End_Date__c <= :nextDatetime
    //             AND ENG_Dealer__c = true
    //         ORDER BY Name
    //         LIMIT 49
    //     ];
    // }
    // if (UserProTypecTemp.UserPro_Type__c == 'ET') {
    //     accs = [
    //         SELECT Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name, BillingCity
    //         FROM Account
    //         WHERE
    //             // Name = '奥林巴斯（北京）销售服务有限公司'
    //             // AND
    //             Name LIKE :nameCondition
    //             AND RecordType.DeveloperName = 'AgencyContract'
    //             AND Contract_Decide_Start_Date__c >= :thisDatetime
    //             AND Contract_Decide_End_Date__c <= :nextDatetime
    //             AND ET_SP_Dealer__c = true
    //         ORDER BY Name
    //         LIMIT 49
    //     ];
    // }

    Date today = Date.today();
    //Date today = Date.newInstance(2023, 3, 1);
    Integer thisMonth = today.month();
    System.debug('thisMonth = ' + thisMonth);

    Integer lastYear = today.year() - 1;
    Integer thisYear = today.year();
    Integer nextYear = today.year() + 1;

    Date lastDatetime = Date.newInstance(lastYear, 4, 1);
    Date thisDatetime = Date.newInstance(thisYear, 4, 1);
    Date thisDatetime2 = Date.newInstance(thisYear, 7, 1);
    Date nextDatetime = Date.newInstance(nextYear, 7, 1);
    System.debug('lastDatetime = ' + lastDatetime);
    System.debug('thisDatetime = ' + thisDatetime);
    System.debug('thisDatetime2 = ' + thisDatetime2);
    System.debug('nextDatetime = ' + nextDatetime);
    System.debug('UserInfo.getUserId() = ' + UserInfo.getUserId());
    User UserProTypecTemp = [
      SELECT UserPro_Type__c
      FROM User
      WHERE id = :UserInfo.getUserId()
    ];

    String sql = 'SELECT id, Parentid FROM Account WHERE Parent.Name LIKE :nameCondition ';
    if (thisMonth < 4) {
      sql += 'AND Contract_Decide_Start_Date__c >= :lastDatetime AND Contract_Decide_End_Date__c < :thisDatetime2 ';
    } else if (thisMonth >= 4 && thisMonth <= 6) {
      sql += 'AND Contract_Decide_Start_Date__c >= :lastDatetime AND Contract_Decide_End_Date__c < :nextDatetime ';
    } else {
      sql += 'AND Contract_Decide_Start_Date__c >= :thisDatetime AND Contract_Decide_End_Date__c < :nextDatetime ';
    }
    if (UserProTypecTemp.UserPro_Type__c == 'ENG') {
      sql += 'AND ENG_Dealer__c = true';
    }
    if (UserProTypecTemp.UserPro_Type__c == 'ET') {
      sql += 'AND ET_SP_Dealer__c = true';
    }
    System.debug('sql = ' + sql);
    accs = Database.query(sql);
    // 用于保存特约经销商匹配到的其父类的id
    Set<String> pids = new Set<String>();
    for (Account acc : accs) {
      pids.add(acc.Parentid);
    }

    accs = [
      SELECT
        Id,
        Name,
        Department_Class__c,
        Department_Class__r.Name,
        Hospital__c,
        Hospital__r.Name,
        BillingCity
      FROM Account
      WHERE
        (Id IN :pids
        OR (Name = '奥林巴斯（北京）销售服务有限公司'
        AND Name LIKE :nameCondition))
        AND RecordType.DeveloperName = 'Agency'
      ORDER BY Name
      LIMIT 49
    ];

    // accs = [
    //     SELECT id, Parentid
    //     FROM Account
    //     WHERE
    //         Parent.Name LIKE :nameCondition
    //         AND Contract_Decide_Start_Date__c <= :Date.Today()
    //         AND Contract_Decide_End_Date__c >= :Date.Today()
    // ];

    // 用于保存特约经销商匹配到的其父类的id
    // Set<String> pids = new Set<String>();
    // for (Account acc : accs) {
    //     pids.add(acc.Parentid);
    // }
    // accs = [
    //     SELECT Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name, BillingCity
    //     FROM Account
    //     WHERE
    //         (Id IN :pids
    //         OR (Name = '奥林巴斯（北京）销售服务有限公司'
    //         AND Name LIKE :nameCondition))
    //         AND RecordType.DeveloperName = 'Agency'
    //         AND Is_Active__c != '無効'
    //     ORDER BY Name
    //     LIMIT 5
    // ];
    System.debug('accs = ' + accs);
    List<LookupSearchResult> results = new List<LookupSearchResult>();
    String accountIcon = 'standard:account';
    for (Account account : accs) {
      String subtitle = account.BillingCity == null
        ? 'Account'
        : 'Account • ' + account.BillingCity;
      results.add(
        new LookupSearchResult(
          account.Id,
          'Account',
          accountIcon,
          account.Name,
          subtitle
        )
      );
    }
    results.sort();
    System.debug('results = ' + results);
    return results;
  }

  //保存附件
  @AuraEnabled
  public static String saveFile(
    Id recordId,
    String fileName,
    String base64Data
  ) {
    base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
    ContentVersion cv = new ContentVersion();
    cv.Title = fileName;
    cv.PathOnClient = '/' + fileName;
    cv.FirstPublishLocationId = recordId;
    cv.VersionData = EncodingUtil.base64Decode(base64Data);
    cv.IsMajorVersion = true;
    insert cv;
    return cv.Id;
  }

  //获取附件
  @AuraEnabled
  public static ResponseBodyLWC getFiles(Id recordId) {
    System.debug('getFiles recordId = ' + recordId);
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    List<ContentVersion> cvList = [
      SELECT
        id,
        Title,
        CreatedBy.Name,
        PathOnClient,
        CreatedDate,
        ContentDocumentId
      FROM ContentVersion
      WHERE FirstPublishLocationId = :recordId
    ];
    data.put('cvList', cvList);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  //删除附件
  @AuraEnabled
  public static ResponseBodyLWC deleteAtt(String contentVersionId) {
    try {
      ContentVersion conVersion = [
        SELECT ContentDocumentId
        FROM ContentVersion
        WHERE Id = :contentVersionId
      ];
      String contentDocumentId = conVersion.ContentDocumentId;
      ContentDocument conDocument = [
        SELECT Id
        FROM ContentDocument
        WHERE Id = :contentDocumentId
      ];
      delete conDocument;
      return new ResponseBodyLWC('Success', 200, '', '');
    } catch (Exception e) {
      return new ResponseBodyLWC(
        'Error',
        500,
        e.getMessage() + e.getLineNumber(),
        ''
      );
    }
  }

  //跳转出货/销售
  @AuraEnabled
  public static ResponseBodyLWC GoodsDelivery(
    Consumable_order__c cocLwc,
    String ESetId,
    List<ConsumableorderdetailsInfoLwc> pageRecordsLwcLwc
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    coc = cocLwc;
    ESetId = ESetId;
    pageRecordsLwc = pageRecordsLwcLwc;
    if (coc.SummonsForDirction__c == '互相调货') {
      List<Account> accList = [
        SELECT Id
        FROM Account
        WHERE
          Name = :coc.Order_ForDealerText__c
          AND RecordType.DeveloperName = 'Agency'
      ];
      if (accList.size() < 1) {
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入二级经销商全称！'));
        // return null;
        return new ResponseBodyLWC('Error', 500, '请输入二级经销商全称！', '');
      }
    }
    if (coc.SummonsStatus_c__c == '批准') {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请先打印指示单！'));
      // return null;
      return new ResponseBodyLWC('Error', 500, '请先打印指示单！', '');
    }
    for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
      if (ass.orderdetails1.Shipment_Count__c > ass.allnumber) {
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '消耗品'+ ass.orderdetails1.Consumable_Product__r.Name__c + '库存不足'));
        // return null;
        return new ResponseBodyLWC(
          'Error',
          500,
          '消耗品' +
            ass.orderdetails1.Consumable_Product__r.Name__c +
            '库存不足',
          ''
        );
      }
    }
    data.put('ESetid', ESetid);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  //删除按钮
  @AuraEnabled
  public static ResponseBodyLWC DelConsumable(String ESetId) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;

    ESetId = ESetId;

    Savepoint sp = Database.setSavepoint();
    try {
      List<Consumable_order__c> qs = new List<Consumable_order__c>();
      List<Consumable_orderdetails__c> Dqs = new List<Consumable_orderdetails__c>();
      Dqs = [
        SELECT Id
        FROM Consumable_orderdetails__c
        WHERE Consumable_order__c = :ESetId
      ];
      qs = [SELECT Id FROM Consumable_order__c WHERE Id = :ESetId];
      if (Dqs.size() > 0 || qs.size() > 0) {
        delete Dqs;
        delete qs;
      }
    } catch (Exception e) {
      Database.rollback(sp);
      System.debug(e.getMessage() + e.getLineNumber());
      return new ResponseBodyLWC('Error', 500, e.getMessage(), '');
    }
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }

  // Data Bean
  @TestVisible
  class ConsumableorderdetailsInfo implements Comparable {
    @AuraEnabled
    public Boolean check { get; set; }
    @AuraEnabled
    public Boolean oldCheck { get; set; }
    @AuraEnabled
    public Consumable_Orderdetails__c orderdetails1 { get; set; }
    @AuraEnabled
    public Consumable_order_details2__c orderdetails2 { get; set; }
    @AuraEnabled
    public Product2__c Prod { get; set; }
    @AuraEnabled
    public Decimal Boxnumber { get; set; }
    @AuraEnabled
    public Decimal Piecenumber { get; set; }
    @AuraEnabled
    public Decimal allnumber { get; set; }
    @AuraEnabled
    public Decimal oldConsumableCount { get; set; }
    @AuraEnabled
    public Boolean canSelect { get; set; }
    @AuraEnabled
    public Boolean sortBy { get; set; }
    @AuraEnabled
    public Integer packinglist { get; set; }
    @AuraEnabled
    public String approbation_No { get; set; }
    @AuraEnabled
    public Date expiration_Date { get; set; }
    @AuraEnabled
    public String boxorpiecein { get; set; }

    public List<SelectOption> boxorpiece { get; set; }
    @AuraEnabled
    public Map<String, String> boxorpieceMap { get; set; }
    @AuraEnabled
    public Attachment concc { get; set; }
    @AuraEnabled
    public String BoxPiece { get; set; }
    @AuraEnabled
    public Boolean hospitalSpecialOffer { get; set; }
    @AuraEnabled
    public Boolean hosPro { get; set; }

    public ConsumableorderdetailsInfo() {
    }

    public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) {
      check = true;
      oldCheck = true;
      orderdetails1 = e;
      orderdetails2 = new Consumable_order_details2__c();
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.Shipment_Count__c;
      canSelect = true;
      allnumber = 0;
      Boxnumber = 0;
      Piecenumber = 0;
      BoxPiece = e.Box_Piece__c;
      boxorpiece = new List<SelectOption>();
      boxorpiece.add(new SelectOption('盒', '盒'));
      boxorpiece.add(new SelectOption('个', '个'));

      boxorpieceMap = new Map<String, String>();
      boxorpieceMap.put('盒', '盒');
      boxorpieceMap.put('个', '个');
      hospitalSpecialOffer = false;
      hosPro = false;
    }

    // 消耗品发货明细
    public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
      check = true;
      oldCheck = true;
      orderdetails1 = new Consumable_Orderdetails__c();
      orderdetails2 = e;
      Prod = e.Consumable_Product__r;
      canSelect = true;
      allnumber = 0;
      Boxnumber = 0;
      Piecenumber = 0;
      //boxorpiece = new List<SelectOption>();
      //boxorpiece.add(new SelectOption('盒', '盒'));
      //boxorpiece.add(new SelectOption('个', '个'));
      hospitalSpecialOffer = false;
      hosPro = false;
    }

    //附件
    public ConsumableorderdetailsInfo(Attachment e) {
      concc = e;
      hospitalSpecialOffer = false;
      hosPro = false;
    }

    public ConsumableorderdetailsInfo(Product2__c e) {
      check = false;
      oldCheck = false;
      orderdetails1 = new Consumable_Orderdetails__c();
      orderdetails2 = new Consumable_order_details2__c();
      Prod = e;
      //oldConsumableCount = null;
      canSelect = true;
      allnumber = 0;
      Boxnumber = 0;
      Piecenumber = 0;
      orderdetails1.Box_Piece__c = '盒';
      boxorpiece = new List<SelectOption>();
      boxorpiece.add(new SelectOption('盒', '盒'));
      boxorpiece.add(new SelectOption('个', '个'));

      boxorpieceMap = new Map<String, String>();
      boxorpieceMap.put('盒', '盒');
      boxorpieceMap.put('个', '个');
      hospitalSpecialOffer = false;
      hosPro = false;
    }

    // 排序
    public Integer compareTo(Object compareTo) {
      ConsumableorderdetailsInfo compareToorderdetails1 = (ConsumableorderdetailsInfo) compareTo;
      Integer returnValue = 0;
      if (sortBy == false) {
        if (Boxnumber > compareToorderdetails1.Boxnumber) {
          returnValue = -1;
        } else if (Boxnumber < compareToorderdetails1.Boxnumber) {
          returnValue = 1;
        }
        return returnValue;
      } else {
        if (Boxnumber > compareToorderdetails1.Boxnumber) {
          returnValue = 1;
        } else if (Boxnumber < compareToorderdetails1.Boxnumber) {
          returnValue = -1;
        }
        return returnValue;
      }
    }
  }
  @TestVisible
  class ConsumableorderdetailsInfoLwc {
    @AuraEnabled
    public Boolean check { get; set; }
    @AuraEnabled
    public Boolean oldCheck { get; set; }
    @AuraEnabled
    public Consumable_Orderdetails__c orderdetails1 { get; set; }
    @AuraEnabled
    public Consumable_order_details2__c orderdetails2 { get; set; }
    @AuraEnabled
    public Product2__c Prod { get; set; }
    @AuraEnabled
    public Decimal Boxnumber { get; set; }
    @AuraEnabled
    public Decimal Piecenumber { get; set; }
    @AuraEnabled
    public Decimal allnumber { get; set; }
    @AuraEnabled
    public Decimal oldConsumableCount { get; set; }
    @AuraEnabled
    public Boolean canSelect { get; set; }
    @AuraEnabled
    public Boolean sortBy { get; set; }
    @AuraEnabled
    public Integer packinglist { get; set; }
    @AuraEnabled
    public String approbation_No { get; set; }
    @AuraEnabled
    public Date expiration_Date { get; set; }
    @AuraEnabled
    public String boxorpiecein { get; set; }
    public List<SelectOption> boxorpiece { get; set; }
    @AuraEnabled
    public Map<String, String> boxorpieceMap { get; set; }
    @AuraEnabled
    public Attachment concc { get; set; }
    @AuraEnabled
    public String BoxPiece { get; set; }
    @AuraEnabled
    public Boolean hospitalSpecialOffer { get; set; }
    @AuraEnabled
    public Boolean hosPro { get; set; }
    @AuraEnabled
    public List<Map<String, String>> unitOptions { get; set; }
    @AuraEnabled
    public String unitValue { get; set; }
    @AuraEnabled
    public Integer shipmentNumber { get; set; }
    @AuraEnabled
    public Decimal shippingUnitPrice { get; set; }
    @AuraEnabled
    public String recordId { get; set; }
    @AuraEnabled
    public String Id { get; set; }
    @AuraEnabled
    public String Name { get; set; }
    @AuraEnabled
    public String Category3 { get; set; }
    @AuraEnabled
    public String Category4 { get; set; }
    @AuraEnabled
    public String Category5 { get; set; }
  }

  //分页Bean
  public class PaginatedAccounts {
    @AuraEnabled
    public Integer nextPageToken;
    @AuraEnabled
    public Integer pageNumber { get; set; }
    @AuraEnabled
    public Integer totalRecords { get; set; }
    @AuraEnabled
    public Integer recordStart { get; set; }
    @AuraEnabled
    public Integer recordEnd { get; set; }
  }
}
