buli
2023-07-14 744f42c5496e656a1f9927740a3b37c0b97a6cba
force-app/main/default/classes/LexSummonsCreatController.cls
@@ -1,498 +1,445 @@
public without sharing class LexSummonsCreatController {
  public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    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();
    /*****************検索用******************/
    //经销商用户产品分类(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);
    }
  }
  //消耗品明细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, '');
    //总价格计算结果
    @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();
        }
        hasHos = true;
      }
      //add by rentx 2021-3-1 end
    }
    //消耗品明细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; }
      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
    public static Boolean EditDelCommitBtnDisabled { get; private set; }
    public static Boolean saveBtnDisabled { get; private set; }
    public static Boolean SorderBtnDisabled { get; private set; }
      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';
    // 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 {
              str = 'notHos';
                for (hospitalprice__c hp : hlist) {
                    HosProMap.put(hp.product__c, '');
                }
                hasHos = true;
            }
            //明细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);
              }
            //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('MidMap2.size() = ' + MidMap2.size());
            /*//然后循环CountDel去修改map里的allnumber
            System.debug('orderdetailCount = ' + orderdetailCount);
            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]));
                    }
                    System.debug('MidMap = ' + MidMap);
                    for (Integer i = 0; i < CountDel.size(); i++) {
                        String str = '';
                        if (CountDel[i].hospitalSpecialOffer__c) {
                            str = 'isHos';
                        } else {
                            str = 'notHos';
                        }
                        System.debug('CountDel[i].Consumable_Product__c= ' + CountDel[i].Consumable_Product__c);
                        System.debug('CountDel[i].Consumable_Product__c + str= ' + CountDel[i].Consumable_Product__c + str);
                        //明细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 ;
@@ -509,144 +456,135 @@
                                //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                                MidMap.put(CountDel[i].Consumable_Product__c+str, Jstage);
                            }*/
          }
                    }
          //update by rentx 2021-01-29 end
                    //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);
            //}
          }
                    //再把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++){
                    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);
@@ -661,327 +599,275 @@
                            }
                        }*/
          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
                    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 {
              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;
                // 更新、
                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 (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                }
                // 到货订单来的时候
                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++;
                    }
                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;
                }
                    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>();
                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);
              }
            }
          }
                    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);
          //再把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++){
                    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);
@@ -996,2475 +882,2147 @@
                            }
                        }*/
          for (Integer i = 0; i < CountDel.size(); i++) {
            String str = '';
            if (CountDel[i].hospitalSpecialOffer__c) {
              str = 'isHos';
                    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 {
              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;
                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);
                    }
                }
                if (CountDel[i].hospitalSpecialOffer__c) {
                  Jstage.hospitalSpecialOffer = true;
                } else {
                  Jstage.hospitalSpecialOffer = false;
                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);
                    }
                }
            }
                if (HosProMap.containsKey(Jstage.Prod.Id)) {
                  Jstage.hosPro = true;
            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]));
                }
                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
            AggregateResult[] categoryList = [
                SELECT Count(id), Category3_text__c c3c
                FROM Product2__c
                WHERE Category3_text__c != NULL
                GROUP BY Category3_text__c
            ];
            //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
            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);
            }
            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) {
            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('', '-无-');
            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;
            //分页
            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, '');
            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(), '');
        }
        for (ConsumableorderdetailsInfoLwc ass : pageRecordsLwc) {
          if (ass.check == true) {
            //判断选中的医院特价产品
            if (ass.hospitalSpecialOffer == true) {
              //用户选中了当前医院下的特价产品
              if (proMap.containsKey(ass.Prod.Id)) {
    }
    @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
        ];
        System.debug('category4List ' + category4List);
        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
        ];
        System.debug('category5List ' + category5List);
        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
        ];
        System.debug('category4List ' + category4List);
        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
        ];
        System.debug('category5List ' + category5List);
        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
        ];
        System.debug('orderdetailCount = ' + orderdetailCount);
        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 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 {
                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;
                }
            }
        }
      }
    } 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, '');
        if (ishosnum > 0) {
            hasHosPro = true;
        } else {
            hasHosPro = false;
        }
        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 + ',';
              }
        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));
            }
        }
        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) +
              ' 的特价',
            ''
          );
        }
      }
        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;
    }
    // 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, '请输入出货数量', '');
          }
    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;
    }
          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 +
                    '库存不足',
                  ''
                );
              }
    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];
            }
          } 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 +
                    '库存不足',
                  ''
                );
              }
        }
        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];
                }
            }
          }
        }
      }
      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);
        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);
                }
            }
        }
      }
      // 如果 出库单 和 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);
        System.debug('zhj3');
        pageRecords = new List<ConsumableorderdetailsInfo>();
        System.debug('reSet.size() = ' + reSet.size());
        if (editAble && String.isBlank(arriveorder)) {
            pageRecords = reSet;
        }
      }
      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;
        //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);
        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('请输入单位');
        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, '请输入单位', '');
          }
          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 {
            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;
                        System.debug('ass.Prod.id:' + ass.Prod.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;
                        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 = new List<ContentVersion>();
        List<ContentDocumentLink> links = [SELECT Id, ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :recordId];
        if (links != null && links.size() > 0) {
            List<String> documentIds = new List<String>();
            for (ContentDocumentLink link : links) {
                documentIds.add(link.ContentDocumentId);
            }
            List<ContentVersion> cvInfo = [
                SELECT Id, Title, OwnerId, Owner.Name, CreatedDate, ContentDocumentId
                FROM ContentVersion
                WHERE ContentDocumentId IN :documentIds
            ];
            if (cvInfo.size() > 0) {
                for (Integer i = 0; i < cvInfo.size(); i++) {
                    cvList.add(cvInfo[i]);
                }
            }
        }
        // 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 new ResponseBodyLWC(
                  'Error',
                  500,
                  '消耗品' +
                    ass.orderdetails1.Consumable_Product__r.Name__c +
                    '库存不足',
                  ''
                );
              }
                // return null;
                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 +
                    '库存不足',
                  ''
                );
              }
        }
        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;
            }
          }
          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;
        } 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;
        }
        //附件
        @TestVisible
        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;
            }
            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);
    @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; }
    }
    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
        )
      );
    //分页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; }
    }
    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; }
  }
}
}