buli
2023-07-14 744f42c5496e656a1f9927740a3b37c0b97a6cba
force-app/main/default/classes/LexConsumableController.cls
@@ -1,2715 +1,2315 @@
public without sharing class LexConsumableController {
  /*****************検索用******************/
  public static Consumable_order__c coc { get; set; } // FIMXE Consumable_order__c のインスタンス、sql多すぎ
  public static String category1 { get; set; }
  public static String category5 { get; set; }
  public static String category4 { get; set; }
  public static String category3 { get; set; }
  public static String category_Goods { get; set; }
  public static Boolean specialCampaign { get; set; }
  public static Boolean cansee { get; set; }
  //经销商合同名称
  public static String contractName { get; set; }
  //经销商合同ID
  public static String contractId { get; set; }
  //经销商定价查看权限
  public static Boolean dealerPricesee { get; set; }
  /*****************画面初始化用********************************/
  /******20160313_add**************/
  //public String idCheck {get;set;}
  public static Boolean editAble { get; set; }
  public static Boolean edoffersPrice { get; set; }
  public static String statusEdit { get; set; }
  public static Boolean returnOrder { get; set; }
  public static String searchDone { get; set; }
  //暂用20160323
  public static Decimal disCount = 0;
  //总价格计算结果
  public static Decimal sumPrice { get; set; }
  //自定义特价金额
  public static Decimal bargainPrice { get; set; }
  //产品上下限
  public static String[] proLimitAndDate = new List<String>{};
  /*****************画面表示Bean******************/
  private static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsview {
    get;
    set;
  }
  public static Integer ConsumableorderdetailsCount {
    get {
      return consumableorderdetailsRecords == null
        ? 0
        : consumableorderdetailsRecords.size();
    }
  }
  public static Integer ConsumableorderdetailsviewCount {
    get {
      return consumableorderdetailsRecordsview == null
        ? 0
        : consumableorderdetailsRecordsview.size();
    }
  }
  public static List<String> lower = new List<String>();
  //附件
  public static List<ConsumableorderdetailsInfo> attachmentRecoeds { get; set; }
  public static List<String> DealerProductId { get; set; }
  public static Boolean editDelCommitBtnDisabled { get; private set; }
  public static Boolean saveBtnDisabled { get; private set; }
  public static Boolean sorderBtnDisabled { get; private set; }
  public static String decisionCode { get; set; }
  // 保存后动作: 1.检索 2.排序
  public static String baseUrl { get; private set; }
  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 List<String> contactDealer = new List<String>();
  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'
  };
  // 已选择产品明细
  private static List<Attachment> attachmentinfo = new List<Attachment>();
  /*****************ソート時再検索条件(画面からの入力条件を無視するため)******************/
  private static String cate1ForSort = null;
  private static String accountid = null;
  private static String accountName = null;
  // 产品 ID
  public static String ESetId { get; set; }
  private static String userId = '';
  //private String[] ProidListAll = new String[]{};
  public static List<SelectOption> categoryOptionList { get; set; }
  public static List<SelectOption> category4OptionList { get; set; }
  public static List<SelectOption> category5OptionList { get; set; }
  public static List<CusOption> category3Option { get; set; }
  public static List<CusOption> category4Option { get; set; }
  public static List<CusOption> category5Option { get; set; }
  private static Map<Id, Dealer_Product__c> DealerProductMap = new Map<Id, Dealer_Product__c>();
  public static List<String> orderzaikuId = new List<String>();
  //分页功能
  public static Integer size { get; set; }
  public static Integer pageLimit { get; set; }
  public static Integer noOfRecords { get; set; }
  public static ApexPages.StandardSetController con { get; set; }
  public static String soql { get; set; }
  // 登录者工作地
  private static String userWorkLocation;
  public static String agencyProType { get; set; }
  public static String agencyProType1 { get; set; } //lt 20230526 安徽两票制 add
  private static Boolean OSHFLG; //lt 20230517 安徽两票制 add
  public static String methodType { get; set; }
  public static String hospitalName { get; set; }
  public static String hospitalId { get; set; }
  public static String tempidHp { get; set; }
  public static String tempidPp { get; set; }
  private static List<String> hpids = new List<String>();
  private static Boolean isfirst = false;
  //报错和警告信息
  public static List<String> errorMsgList = new List<String>();
  public static List<String> warningMsgList = new List<String>();
  //构造方法
  public LexConsumableController() {
    baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
    consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    DealerProductId = new List<String>();
    attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
    editAble = false;
    edoffersPrice = false;
    returnOrder = false;
    categoryOptionList = new List<SelectOption>();
    category4OptionList = new List<SelectOption>();
    category5OptionList = new List<SelectOption>();
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
  }
  private static void initStandardController() {
    con = new ApexPages.StandardSetController(Database.getQueryLocator(soql));
    con.setPageSize(size);
    noOfRecords = con.getResultSize();
  }
  public static List<Product2__c> product2s() {
    return (List<Product2__c>) con.getRecords();
  }
  private static List<ConsumableorderdetailsInfo> getPageInfo() {
    List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
    Map<String, String> selectedIdMap = new Map<String, String>();
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview) {
      if (ass.check == true) {
        selectedIdMap.put(ass.Prod.id, ass.Prod.id);
        reSet.add(ass);
      }
    }
    consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
    if (editAble) {
      consumableorderdetailsRecordsview = reSet;
    }
    Integer pagestartNo = (con.getPageNumber() * size) - size;
    Integer pageendNo = (con.getPageNumber() * size) > noOfRecords
      ? noOfRecords
      : (con.getPageNumber() * size - 1);
    Integer addNo = 0;
    for (
      Integer i = pagestartNo; i < consumableorderdetailsRecords.size(); i++
    ) {
      Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
      if (selectedIdMap.containsKey(consumableorderdetailsRecords[i].Prod.Id)) {
        addNo++;
        //continue;
      }
      // else if (consumableorderdetailsRecordsview.size() >= pageLimit + size) {
      //     break;
      // }
      else {
        if (consumableorderdetailsRecords[i].check == false) {
          consumableorderdetailsRecords[i].esd = orderdetails1;
    /*****************検索用******************/
    public static Consumable_order__c coc { get; set; } // FIMXE Consumable_order__c のインスタンス、sql多すぎ
    public static String category1 { get; set; }
    public static String category5 { get; set; }
    public static String category4 { get; set; }
    public static String category3 { get; set; }
    public static String category_Goods { get; set; }
    public static Boolean specialCampaign { get; set; }
    public static Boolean cansee { get; set; }
    //经销商合同名称
    public static String contractName { get; set; }
    //经销商合同ID
    public static String contractId { get; set; }
    //经销商定价查看权限
    public static Boolean dealerPricesee { get; set; }
    /*****************画面初始化用********************************/
    /******20160313_add**************/
    //public String idCheck {get;set;}
    public static Boolean editAble { get; set; }
    public static Boolean edoffersPrice { get; set; }
    public static String statusEdit { get; set; }
    public static Boolean returnOrder { get; set; }
    public static String searchDone { get; set; }
    //暂用20160323
    public static Decimal disCount = 0;
    //总价格计算结果
    public static Decimal sumPrice { get; set; }
    //自定义特价金额
    public static Decimal bargainPrice { get; set; }
    //产品上下限
    public static String[] proLimitAndDate = new List<String>{};
    /*****************画面表示Bean******************/
    private static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsview { get; set; }
    public static Integer ConsumableorderdetailsCount {
        get {
            return consumableorderdetailsRecords == null ? 0 : consumableorderdetailsRecords.size();
        }
        //consumableorderdetailsRecords[i].esd.Dealer_Custom_Price__c = consumableorderdetailsRecords[i].Prod.Intra_Trade_List_RMB__c * disCount / 100;
        consumableorderdetailsRecordsview.add(consumableorderdetailsRecords[i]);
        addNo++;
      }
      // if (addNo >= size)
      //     break;
    }
    return consumableorderdetailsRecordsview;
  }
  @AuraEnabled
  public static Results init(String type, String esetId, String keywordStr) {
    Results results = new Results();
    results.isNoteStay = LexUtility.getIsNoteStay();
    errorMsgList = new List<String>();
    warningMsgList = new List<String>();
    baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
    consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    DealerProductId = new List<String>();
    attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
    editAble = false;
    edoffersPrice = false;
    returnOrder = false;
    categoryOptionList = new List<SelectOption>();
    category4OptionList = new List<SelectOption>();
    category5OptionList = new List<SelectOption>();
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
    ESetId = esetId;
    methodType = type;
    if (String.isBlank(methodType) && String.isNotBlank(ESetId)) {
      List<Consumable_order__c> oclist = [
        SELECT orderPattern__c
        FROM Consumable_order__c
        WHERE id = :ESetid
      ];
      methodType = oclist.get(0).orderPattern__c;
    public static Integer ConsumableorderdetailsviewCount {
        get {
            return consumableorderdetailsRecordsview == null ? 0 : consumableorderdetailsRecordsview.size();
        }
    }
    statusEdit = keywordStr;
    System.debug('Param:' + ESetId + '---' + methodType + '---' + statusEdit);
    try {
      sortKey = '1';
      preSortKey = '1';
      sortOrderAsc = false;
      sortOrder = new String[8];
      sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
      cate1ForSort = '';
      decisionCode = '';
      sumPrice = 0;
      specialCampaign = false;
      if (
        ESetId != null &&
        ESetId != '' &&
        statusEdit == '' &&
        statusEdit == null
      ) {
    public static List<String> lower = new List<String>();
    //附件
    public static List<ConsumableorderdetailsInfo> attachmentRecoeds { get; set; }
    public static List<String> DealerProductId { get; set; }
    public static Boolean editDelCommitBtnDisabled { get; private set; }
    public static Boolean saveBtnDisabled { get; private set; }
    public static Boolean sorderBtnDisabled { get; private set; }
    public static String decisionCode { get; set; }
    // 保存后动作: 1.检索 2.排序
    public static String baseUrl { get; private set; }
    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 List<String> contactDealer = new List<String>();
    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'
    };
    // 已选择产品明细
    private static List<Attachment> attachmentinfo = new List<Attachment>();
    /*****************ソート時再検索条件(画面からの入力条件を無視するため)******************/
    private static String cate1ForSort = null;
    private static String accountid = null;
    private static String accountName = null;
    // 产品 ID
    public static String ESetId { get; set; }
    private static String userId = '';
    //private String[] ProidListAll = new String[]{};
    public static List<SelectOption> categoryOptionList { get; set; }
    public static List<SelectOption> category4OptionList { get; set; }
    public static List<SelectOption> category5OptionList { get; set; }
    public static List<CusOption> category3Option { get; set; }
    public static List<CusOption> category4Option { get; set; }
    public static List<CusOption> category5Option { get; set; }
    private static Map<Id, Dealer_Product__c> DealerProductMap = new Map<Id, Dealer_Product__c>();
    public static List<String> orderzaikuId = new List<String>();
    //分页功能
    public static Integer size { get; set; }
    public static Integer pageLimit { get; set; }
    public static Integer noOfRecords { get; set; }
    public static ApexPages.StandardSetController con { get; set; }
    public static String soql { get; set; }
    // 登录者工作地
    private static String userWorkLocation;
    public static String agencyProType { get; set; }
    public static String agencyProType1 { get; set; } //lt 20230526 安徽两票制 add
    private static Boolean OSHFLG; //lt 20230517 安徽两票制 add
    public static String methodType { get; set; }
    public static String hospitalName { get; set; }
    public static String hospitalId { get; set; }
    public static String tempidHp { get; set; }
    public static String tempidPp { get; set; }
    private static List<String> hpids = new List<String>();
    private static Boolean isfirst = false;
    //报错和警告信息
    public static List<String> errorMsgList = new List<String>();
    public static List<String> warningMsgList = new List<String>();
    //构造方法
    public LexConsumableController() {
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        DealerProductId = new List<String>();
        attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
        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();
      List<user> Useracc = new List<user>();
      //lt 20230517 安徽两票制 add ,OSHFLG__c
      Useracc = [
        SELECT accountid, Work_Location__c, UserPro_Type__c, OSHFLG__c
        FROM user
        WHERE id = :userId
      ];
      accountid = Useracc[0].accountid;
      userWorkLocation = Useracc[0].Work_Location__c;
      agencyProType = Useracc[0].UserPro_Type__c;
      agencyProType1 = Useracc[0].UserPro_Type__c; //lt 20230526 安徽两票制 add
      //lt 20230526 安徽两票制 start
      OSHFLG = Useracc[0].OSHFLG__c; //lt 20230517 安徽两票制 add
      if (OSHFLG) {
        agencyProType1 = 'OSH';
      } else if (String.isBlank(Useracc[0].UserPro_Type__c)) {
        agencyProType1 = 'ET';
      }
      //lt 20230526 安徽两票制 end
      if (String.isBlank(Useracc[0].UserPro_Type__c)) {
        agencyProType = 'ET';
      }
      //错误信息提示
      if (
        String.isNotBlank(methodType) &&
        methodType.equals('hospitalorder') &&
        agencyProType == 'ET'
      ) {
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '您没有订货医院特价产品的权限!'));
        errorMsgList.add('您没有订货医院特价产品的权限!');
      }
      contactDealer = new List<String>();
      Date dateToday = Date.today();
      //查该经销商下所有有效合同
      List<Account> contractList = [
        SELECT Id, Name, RecordType.DeveloperName
        FROM Account
        WHERE
          RecordType.DeveloperName = 'AgencyContract'
          AND Contract_Decide_Start_Date__c <= :dateToday
          AND Contract_Decide_End_Date__c >= :dateToday
          AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
          AND Agent_Ref__c = :accountid
          AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
      ];
      for (Account contract : contractList) {
        contactDealer.add(contract.Id);
      }
      DealerProductMap = new Map<Id, Dealer_Product__c>();
      DealerProductId = getDealerProductId();
      Account accountInfo = [
        SELECT
          Name,
          Dealer_discount__c,
          Product_Limit_Date__c,
          Product_Limit_DateENG__c
        FROM account
        WHERE id = :accountid
      ];
      accountName = accountInfo.Name;
      String product_Limit;
      if (agencyProType == 'ET') {
        product_Limit = accountInfo.Product_Limit_Date__c;
      } else {
        product_Limit = accountInfo.Product_Limit_DateENG__c;
      }
      if (product_Limit != null && product_Limit != '') {
        proLimitAndDate = product_Limit.split(',');
      }
      saveBtnDisabled = false;
      sorderBtnDisabled = false;
      coc = new Consumable_order__c();
      consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
      if (String.isBlank(agencyProType)) {
        //return ;
      }
      List<Product2__c> Product2Selected = new List<Product2__c>();
      Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
      //经销商在库数据
      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,
          hospitalSpecialOffer__c,
          promotionorder__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 Cancellation_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 (ESetId == null || ESetId == '') {
        //获取经销商默认的一个合同
        List<Account> contract = [
          SELECT id, Name, State_Master__c, State_Master__r.Name
          FROM Account
          WHERE
            ParentId = :accountid
            AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
            AND Contract_Decide_Start_Date__c <= :Date.Today()
            AND Contract_Decide_End_Date__c >= :Date.Today()
            AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
        ];
        if (contract.size() == 1) {
          contractName = contract[0].Name;
          contractId = contract[0].Id;
        }
        editDelCommitBtnDisabled = true;
        List<String> DealerProductId = new List<String>();
        soql = makeSoql('', '', '', '', '', false, DealerProductId);
        edoffersPrice = false;
        returnOrder = false;
        categoryOptionList = new List<SelectOption>();
        category4OptionList = new List<SelectOption>();
        category5OptionList = new List<SelectOption>();
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        initStandardController();
        product2Selected = Database.query(soql);
        pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
    }
        for (Integer i = 0; i < product2Selected.size(); i++) {
          consumableorderdetailsRecords.add(
            new ConsumableorderdetailsInfo(product2Selected[i])
          );
          MidMap.put(
            product2Selected[i].Id,
            new ConsumableorderdetailsInfo(product2Selected[i])
          );
        }
        //只有在协议订货时会走这个for循环 其他两种订货模式都走的searchorderdetails方法
        if (
          String.isBlank(methodType) ||
          (!methodType.equals('promotionorder') &&
          !methodType.equals('hospitalorder'))
        ) {
          for (Integer i = 0; i < countDel.size(); i++) {
            if (
              countDel[i].promotionorder__c == false &&
              countDel[i].hospitalSpecialOffer__c == false
            ) {
              if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                  countDel[i].Consumable_Product__c
                );
                if (countDel[i].Box_Piece__c == '盒') {
                  Jstage.allnumber = Jstage.allnumber + 1;
                } else {
                  Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                }
                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
              }
    private static void initStandardController() {
        con = new ApexPages.StandardSetController(Database.getQueryLocator(soql));
        con.setPageSize(size);
        noOfRecords = con.getResultSize();
    }
    public static List<Product2__c> product2s() {
        return (List<Product2__c>) con.getRecords();
    }
    private static List<ConsumableorderdetailsInfo> getPageInfo() {
        List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
        Map<String, String> selectedIdMap = new Map<String, String>();
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview) {
            if (ass.check == true) {
                selectedIdMap.put(ass.Prod.id, ass.Prod.id);
                reSet.add(ass);
            }
          }
        }
        consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
        if (editAble) {
            consumableorderdetailsRecordsview = reSet;
        }
        Integer pagestartNo = (con.getPageNumber() * size) - size;
        Integer pageendNo = (con.getPageNumber() * size) > noOfRecords ? noOfRecords : (con.getPageNumber() * size - 1);
        Integer addNo = 0;
        for (Integer i = pagestartNo; i < consumableorderdetailsRecords.size(); i++) {
            Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
            if (selectedIdMap.containsKey(consumableorderdetailsRecords[i].Prod.Id)) {
                addNo++;
                //continue;
            }
            // else if (consumableorderdetailsRecordsview.size() >= pageLimit + size) {
            //     break;
            // }
            else {
                if (consumableorderdetailsRecords[i].check == false) {
                    consumableorderdetailsRecords[i].esd = orderdetails1;
                }
                //consumableorderdetailsRecords[i].esd.Dealer_Custom_Price__c = consumableorderdetailsRecords[i].Prod.Intra_Trade_List_RMB__c * disCount / 100;
                consumableorderdetailsRecordsview.add(consumableorderdetailsRecords[i]);
                addNo++;
            }
            // if (addNo >= size)
            //     break;
        }
        return consumableorderdetailsRecordsview;
    }
    @AuraEnabled
    public static Results init(String type, String esetId, String keywordStr) {
        Results results = new Results();
        results.isNoteStay = LexUtility.getIsNoteStay();
        errorMsgList = new List<String>();
        warningMsgList = new List<String>();
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        //经销商定价 计算
        for (ConsumableorderdetailsInfo bss : MidMap.values()) {
          bss.sortBy = sortOrderAsc;
          bss.packing_list = 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;
          if (DealerProductMap.containsKey(bss.Prod.Id)) {
            bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id)
              .Special_Campaign_Price__c;
            bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id)
              .Campaign_EndDate__c;
            bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id)
              .OrderGoods_Limit__c;
          }
          consumableorderdetailsRecords.add(bss);
        DealerProductId = new List<String>();
        attachmentRecoeds = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
        editAble = false;
        edoffersPrice = false;
        returnOrder = false;
        categoryOptionList = new List<SelectOption>();
        category4OptionList = new List<SelectOption>();
        category5OptionList = new List<SelectOption>();
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
        ESetId = esetId;
        methodType = type;
        if (String.isBlank(methodType) && String.isNotBlank(ESetId)) {
            List<Consumable_order__c> oclist = [SELECT orderPattern__c FROM Consumable_order__c WHERE id = :ESetid];
            methodType = oclist.get(0).orderPattern__c;
        }
        consumableorderdetailsRecords.sort();
        if (
          methodType != null &&
          methodType != '' &&
          (methodType.equals('hospitalorder') ||
          methodType.equals('promotionorder'))
        ) {
          searchorderdetails(
            methodType,
            accountid,
            hospitalId,
            contractId,
            userWorkLocation,
            accountName,
            proLimitAndDate,
            editAble
          );
          isfirst = true;
        statusEdit = keywordStr;
        System.debug('Param:' + ESetId + '---' + methodType + '---' + statusEdit);
        try {
            sortKey = '1';
            preSortKey = '1';
            sortOrderAsc = false;
            sortOrder = new String[8];
            sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
            cate1ForSort = '';
            decisionCode = '';
            sumPrice = 0;
            specialCampaign = false;
            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();
            List<user> Useracc = new List<user>();
            //lt 20230517 安徽两票制 add ,OSHFLG__c
            Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c, OSHFLG__c FROM user WHERE id = :userId];
            accountid = Useracc[0].accountid;
            userWorkLocation = Useracc[0].Work_Location__c;
            agencyProType = Useracc[0].UserPro_Type__c;
            agencyProType1 = Useracc[0].UserPro_Type__c; //lt 20230526 安徽两票制 add
            //lt 20230526 安徽两票制 start
            OSHFLG = Useracc[0].OSHFLG__c; //lt 20230517 安徽两票制 add
            if (OSHFLG) {
                agencyProType1 = 'OSH';
            } else if (String.isBlank(Useracc[0].UserPro_Type__c)) {
                agencyProType1 = 'ET';
            }
            //lt 20230526 安徽两票制 end
            if (String.isBlank(Useracc[0].UserPro_Type__c)) {
                agencyProType = 'ET';
            }
            //错误信息提示
            if (String.isNotBlank(methodType) && methodType.equals('hospitalorder') && agencyProType == 'ET') {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '您没有订货医院特价产品的权限!'));
                errorMsgList.add('您没有订货医院特价产品的权限!');
            }
            contactDealer = new List<String>();
            Date dateToday = Date.today();
            //查该经销商下所有有效合同
            List<Account> contractList = [
                SELECT Id, Name, RecordType.DeveloperName
                FROM Account
                WHERE
                    RecordType.DeveloperName = 'AgencyContract'
                    AND Contract_Decide_Start_Date__c <= :dateToday
                    AND Contract_Decide_End_Date__c >= :dateToday
                    AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
                    AND Agent_Ref__c = :accountid
                    AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
            ];
            for (Account contract : contractList) {
                contactDealer.add(contract.Id);
            }
            DealerProductMap = new Map<Id, Dealer_Product__c>();
            DealerProductId = getDealerProductId();
            Account accountInfo = [
                SELECT Name, Dealer_discount__c, Product_Limit_Date__c, Product_Limit_DateENG__c
                FROM account
                WHERE id = :accountid
            ];
            accountName = accountInfo.Name;
            String product_Limit;
            if (agencyProType == 'ET') {
                product_Limit = accountInfo.Product_Limit_Date__c;
            } else {
                product_Limit = accountInfo.Product_Limit_DateENG__c;
            }
            if (product_Limit != null && product_Limit != '') {
                proLimitAndDate = product_Limit.split(',');
            }
            saveBtnDisabled = false;
            sorderBtnDisabled = false;
            coc = new Consumable_order__c();
            consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
            if (String.isBlank(agencyProType)) {
                //return ;
            }
            List<Product2__c> Product2Selected = new List<Product2__c>();
            Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
            //经销商在库数据
            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,
                    hospitalSpecialOffer__c,
                    promotionorder__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 Cancellation_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 (ESetId == null || ESetId == '') {
                //获取经销商默认的一个合同
                List<Account> contract = [
                    SELECT id, Name, State_Master__c, State_Master__r.Name
                    FROM Account
                    WHERE
                        ParentId = :accountid
                        AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
                        AND Contract_Decide_Start_Date__c <= :Date.Today()
                        AND Contract_Decide_End_Date__c >= :Date.Today()
                        AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
                ];
                if (contract.size() == 1) {
                    contractName = contract[0].Name;
                    contractId = contract[0].Id;
                }
                editDelCommitBtnDisabled = true;
                List<String> DealerProductId = new List<String>();
                soql = makeSoql('', '', '', '', '', false, DealerProductId);
                size = Integer.valueOf(System.Label.orderdetLimitsize);
                initStandardController();
                product2Selected = Database.query(soql);
                for (Integer i = 0; i < product2Selected.size(); i++) {
                    consumableorderdetailsRecords.add(new ConsumableorderdetailsInfo(product2Selected[i]));
                    MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
                }
                //只有在协议订货时会走这个for循环 其他两种订货模式都走的searchorderdetails方法
                if (String.isBlank(methodType) || (!methodType.equals('promotionorder') && !methodType.equals('hospitalorder'))) {
                    for (Integer i = 0; i < countDel.size(); i++) {
                        if (countDel[i].promotionorder__c == false && countDel[i].hospitalSpecialOffer__c == false) {
                            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                                ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                                if (countDel[i].Box_Piece__c == '盒') {
                                    Jstage.allnumber = Jstage.allnumber + 1;
                                } else {
                                    Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                                }
                                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                            }
                        }
                    }
                }
                consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
                //经销商定价 计算
                for (ConsumableorderdetailsInfo bss : MidMap.values()) {
                    bss.sortBy = sortOrderAsc;
                    bss.packing_list = 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;
                    if (DealerProductMap.containsKey(bss.Prod.Id)) {
                        bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id).Special_Campaign_Price__c;
                        bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id).Campaign_EndDate__c;
                        bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id).OrderGoods_Limit__c;
                    }
                    consumableorderdetailsRecords.add(bss);
                }
                consumableorderdetailsRecords.sort();
                if (methodType != null && methodType != '' && (methodType.equals('hospitalorder') || methodType.equals('promotionorder'))) {
                    searchorderdetails(
                        methodType,
                        accountid,
                        hospitalId,
                        contractId,
                        userWorkLocation,
                        accountName,
                        proLimitAndDate,
                        editAble
                    );
                    isfirst = true;
                }
                getPageInfo();
            } else {
                if (methodType != null && methodType.equals('hospitalorder')) {
                    List<Consumable_order__c> oclist = [
                        SELECT orderPattern__c, Order_ForHospital__c, Order_ForHospital__r.Name
                        FROM Consumable_order__c
                        WHERE id = :ESetid
                    ];
                    if (oclist.get(0).orderPattern__c.equals('hospitalorder')) {
                        hospitalName = oclist.get(0).Order_ForHospital__r.Name;
                        hospitalId = oclist.get(0).Order_ForHospital__c;
                    }
                }
                List<Consumable_Orderdetails__c> ConsumableorderdetailsSelected = new List<Consumable_Orderdetails__c>();
                //修改
                List<Consumable_order__c> qs = new List<Consumable_order__c>();
                qs = [
                    SELECT
                        Id,
                        Name,
                        Order_status__c,
                        Consumable_pdf_insert_day__c,
                        Dealer_Info__c,
                        Deliver_date__c,
                        Order_Reason__c,
                        Order_date__c,
                        Contract_application_decision__c,
                        Total_amount__c,
                        Offers_Price__c,
                        Order_effective_contact__c,
                        Order_effective_contact__r.Name
                    FROM Consumable_order__c
                    WHERE Id = :ESetId AND Order_Owner_WorkLocal__c = :userWorkLocation
                ];
                if (qs.size() > 0) {
                    coc = qs[0];
                    decisionCode = coc.Contract_application_decision__c;
                    contractName = coc.Order_effective_contact__r.Name;
                    contractId = coc.Order_effective_contact__r.Id;
                }
                if (qs[0].Order_status__c == '已提交' || qs[0].Order_status__c == '批准' || qs[0].Order_status__c == '附件上传完成') {
                    saveBtnDisabled = true;
                    sorderBtnDisabled = true;
                    editDelCommitBtnDisabled = false;
                }
                // 選択済みの明细を取得
                ConsumableorderdetailsSelected = [
                    SELECT
                        Id,
                        Name,
                        Consumable_order__c,
                        Consumable_Product__r.Name__c,
                        Consumable_Product__c,
                        Consumable_Product__r.Name,
                        Consumable_Count__c,
                        Consumable_Product__r.Category3__c,
                        Consumable_Product__r.Category4__c,
                        Consumable_Product__r.Category5__c,
                        Consumable_Product__r.Intra_Trade_List_RMB__c,
                        Consumable_Product__r.Asset_Model_No__c,
                        Sum_of_money__c,
                        Consumable_Product__r.SFDA_Status__c,
                        Consumable_Product__r.Product2__r.Packing_list_manual__c,
                        Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
                        Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
                    FROM Consumable_Orderdetails__c
                    WHERE
                        recordtypeid = :System.Label.RT_ConOrderDetail1_Order
                        AND Consumable_order__c = :ESetId
                        AND Order_Owner_WorkLocal__c = :userWorkLocation
                        AND Consumable_order__r.Dealer_Info__c = :accountid
                ];
                for (Consumable_Orderdetails__c cdc1 : ConsumableorderdetailsSelected) {
                    if (cdc1.Consumable_Product__c != null) {
                        orderzaikuId.add(cdc1.Consumable_Product__c);
                    }
                }
                soql = makeSoqlorderdet();
                System.debug('soql:' + soql);
                size = orderzaikuId.size();
                initStandardController();
                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++) {
                    //add by rentx 2020-12-09
                    if (String.isNotBlank(methodType) && methodType.equals('hospitalorder')) {
                        if (countDel[i].hospitalSpecialOffer__c == true) {
                            //然后循环CountDel去修改map里的allnumber
                            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                                ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                                if (countDel[i].Box_Piece__c == '盒') {
                                    Jstage.allnumber = Jstage.allnumber + 1;
                                } else {
                                    Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                                }
                                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                            }
                        }
                    } else if (String.isBlank(methodType) || methodType.equals('promotionorder')) {
                        if (countDel[i].promotionorder__c == true) {
                            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                                ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                                if (countDel[i].Box_Piece__c == '盒') {
                                    Jstage.allnumber = Jstage.allnumber + 1;
                                } else {
                                    Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                                }
                                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                            }
                        }
                    } else if (
                        String.isBlank(methodType) || (!methodType.equals('promotionorder') && !methodType.equals('hospitalorder'))
                    ) {
                        if (countDel[i].promotionorder__c == false && countDel[i].hospitalSpecialOffer__c == false) {
                            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                                ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                                if (countDel[i].Box_Piece__c == '盒') {
                                    Jstage.allnumber = Jstage.allnumber + 1;
                                } else {
                                    Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                                }
                                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                            }
                        }
                    }
                }
                consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
                //再把map里的值从新赋给ConsumableorderdetailsRecords
                for (ConsumableorderdetailsInfo bss : MidMap.values()) {
                    bss.packing_list = 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;
                    if (DealerProductMap.containsKey(bss.Prod.Id)) {
                        bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id).Special_Campaign_Price__c;
                        bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id).Campaign_EndDate__c;
                        bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id).OrderGoods_Limit__c;
                    }
                    consumableorderdetailsRecords.add(bss);
                }
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                    ass.sortBy = sortOrderAsc;
                    for (Consumable_Orderdetails__c cdc1 : ConsumableorderdetailsSelected) {
                        sumPrice += cdc1.Sum_of_money__c;
                        if (ass.prod.Id == cdc1.Consumable_Product__c) {
                            ass.check = true;
                            ass.esd = cdc1;
                        }
                    }
                }
                //附件
                // attachmentinfo = [SELECT Id, Name, OwnerId, Owner.Name FROM Attachment WHERE parentid = :ESetId];
                // if (attachmentinfo.size() > 0) {
                //     for (Integer i = 0; i < attachmentinfo.size(); i++) {
                //         attachmentRecoeds.add(new ConsumableorderdetailsInfo(attachmentinfo[i]));
                //     }
                // }
                List<ContentDocumentLink> links = [SELECT Id, ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :ESetId];
                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++) {
                            attachmentRecoeds.add(new ConsumableorderdetailsInfo(cvInfo[i]));
                        }
                    }
                }
                //
                consumableorderdetailsRecords.sort();
                getPageInfo();
            }
            //计算库存上、下限
            productLimtAndDate();
            lowerRecord();
            //明细排序
            List<String> upper = new List<String>();
            if (String.isNotBlank(ESetid)) {
                for (ConsumableorderdetailsInfo bss : consumableorderdetailsRecords) {
                    if (bss.esd.Consumable_count__c != null && bss.allnumber != null && bss.upperlimit != null) {
                        if (bss.esd.Consumable_count__c + bss.allnumber > bss.upperlimit) {
                            upper.add(bss.esd.Consumable_Product__r.Name__c);
                        }
                    }
                }
            }
            if (upper.size() > 0) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '存在以下产品订货数量超出库存上限!'));
                warningMsgList.add('存在以下产品订货数量超出库存上限!');
                for (Integer i = 0; i < upper.size(); i++) {
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, upper[i]));
                    warningMsgList.add(upper[i]);
                }
            }
            if (lower.size() > 0) {
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '存在以下产品订货数量低于库存下限!'));
                warningMsgList.add('存在以下产品订货数量低于库存下限!');
                for (Integer i = 0; i < lower.size(); i++) {
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, lower[i]));
                    warningMsgList.add(lower[i]);
                }
            }
            //价格查看权限
            Schema.DescribeFieldResult dfr = Product2__c.Intra_Trade_List_RMB__c.getDescribe();
            cansee = dfr.isAccessible();
            AggregateResult[] categoryList = [
                SELECT Count(id), Category3_text__c c3c
                FROM Product2__c
                WHERE Estimation_Entry_Possibility__c = '○' AND Product_Type__c LIKE :agencyProType AND Category3_text__c != NULL
                GROUP BY Category3_text__c
            ];
            //categoty3
            // categoryOptionList = new List<SelectOption>();
            category3Option = new List<CusOption>();
            // categoryOptionList.add(new SelectOption('', '-无-'));
            category3Option.add(new CusOption('-无-', ''));
            for (AggregateResult category3Search : categoryList) {
                String deliverycnt = String.valueOf(category3Search.get('c3c'));
                // categoryOptionList.add(new SelectOption(deliverycnt, deliverycnt));
                category3Option.add(new CusOption(deliverycnt, deliverycnt));
            }
            //categoty4
            // category4OptionList = new List<SelectOption>();
            category4Option = new List<CusOption>();
            // category4OptionList.add(new SelectOption('', '-无-'));
            category4Option.add(new CusOption('-无-', ''));
            //categoty5
            // category5OptionList = new List<SelectOption>();
            category5Option = new List<CusOption>();
            // category5OptionList.add(new SelectOption('', '-无-'));
            category5Option.add(new CusOption('-无-', ''));
            //return msg
            consumableorderdetailsRecordsview = consumableorderdetailsRecords;
            getConsumableShowTableFieldValue();
            results.result = 'Success';
            results.coc = coc;
            results.editAble = editAble;
            results.edoffersPrice = edoffersPrice;
            results.editDelCommitBtnDisabled = EditDelCommitBtnDisabled;
            results.category3Option = category3Option;
            results.category4Option = category4Option;
            results.category5Option = category5Option;
            results.hospitalName = hospitalName;
            results.contractName = contractName;
            results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
            results.attachmentRecoeds = attachmentRecoeds;
            results.cansee = cansee;
            results.agencyProType = agencyProType;
            results.agencyProType1 = agencyProType1;
            results.OSHFLG = OSHFLG;
            results.userWorkLocation = userWorkLocation;
            results.accountName = accountName;
            results.category_Goods = category_Goods;
            results.specialCampaign = specialCampaign;
            results.dealerProductId = DealerProductId;
            results.accountid = accountid;
            results.hospitalId = hospitalId;
            results.contractId = contractId;
            results.contactDealer = contactDealer;
            results.errorMsgList = errorMsgList;
            results.warningMsgList = warningMsgList;
            results.methodType = methodType;
            results.proLimitAndDate = proLimitAndDate;
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        getPageInfo();
      } else {
        if (methodType != null && methodType.equals('hospitalorder')) {
          List<Consumable_order__c> oclist = [
        return results;
    }
    @AuraEnabled
    public static Results categoryAllload(String agencyProTypeStr, String category3Str) {
        Results results = new Results();
        agencyProType = agencyProTypeStr;
        category3 = category3Str;
        try {
            AggregateResult[] category4List = [
                SELECT Count(id), Category4_text__c c4c
                FROM Product2__c
                WHERE
                    Estimation_Entry_Possibility__c = '○'
                    AND Product_Type__c LIKE :agencyProType
                    AND Category3_text__c = :category3
                    AND Category4_text__c != NULL
                    AND Category5_text__c != NULL
                GROUP BY Category4_text__c
            ];
            // category4OptionList = new List<SelectOption>();
            category4Option = new List<CusOption>();
            // category4OptionList.add(new SelectOption('', '-无-'));
            category4Option.add(new CusOption('-无-', ''));
            for (AggregateResult category4Search : category4List) {
                String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
                // category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
                category4Option.add(new CusOption(deliverycnt4, deliverycnt4));
            }
            AggregateResult[] category5List = [
                SELECT Count(id), Category5_text__c c5c
                FROM Product2__c
                WHERE
                    Estimation_Entry_Possibility__c = '○'
                    AND Product_Type__c LIKE :agencyProType
                    AND Category3_text__c = :category3
                    AND Category4_text__c != NULL
                    AND Category5_text__c != NULL
                GROUP BY Category5_text__c
            ];
            // category5OptionList = new List<SelectOption>();
            category5Option = new List<CusOption>();
            // category5OptionList.add(new SelectOption('', '-无-'));
            category5Option.add(new CusOption('-无-', ''));
            for (AggregateResult category5Search : category5List) {
                String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
                // category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
                category5Option.add(new CusOption(deliverycnt5, deliverycnt5));
            }
            results.category4Option = category4Option;
            results.category5Option = category5Option;
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    @AuraEnabled
    public static Results categoryload(String agencyProTypeStr, String category3Str, String category4Str) {
        Results results = new Results();
        agencyProType = agencyProTypeStr;
        category3 = category3Str;
        category4 = category4Str;
        try {
            AggregateResult[] category4List = [
                SELECT Count(id), Category4_text__c c4c
                FROM Product2__c
                WHERE
                    Estimation_Entry_Possibility__c = '○'
                    AND Product_Type__c LIKE :agencyProType
                    AND Category3_text__c = :category3
                    AND Category4_text__c != NULL
                    AND Category5_text__c != NULL
                GROUP BY Category4_text__c
            ];
            // category4OptionList = new List<SelectOption>();
            category4Option = new List<CusOption>();
            // category4OptionList.add(new SelectOption('', '-无-'));
            category4Option.add(new CusOption('-无-', ''));
            for (AggregateResult category4Search : category4List) {
                String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
                // category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
                category4Option.add(new CusOption(deliverycnt4, deliverycnt4));
            }
            AggregateResult[] category5List = [
                SELECT Count(id), Category5_text__c c5c
                FROM Product2__c
                WHERE
                    Estimation_Entry_Possibility__c = '○'
                    AND Product_Type__c LIKE :agencyProType
                    AND Category3_text__c = :category3
                    AND Category4_text__c = :category4
                    AND Category5_text__c != NULL
                GROUP BY Category5_text__c
            ];
            // category5OptionList = new List<SelectOption>();
            category5Option = new List<CusOption>();
            // category5OptionList.add(new SelectOption('', '-无-'));
            category5Option.add(new CusOption('-无-', ''));
            for (AggregateResult category5Search : category5List) {
                String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
                // category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
                category5Option.add(new CusOption(deliverycnt5, deliverycnt5));
            }
            results.category4Option = category4Option;
            results.category5Option = category5Option;
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    // 画面初始化
    public static void lowerRecord() {
        List<ConsumableorderdetailsInfo> lowerRecord = new List<ConsumableorderdetailsInfo>();
        //库存明细取得
        Map<String, ConsumableorderdetailsInfo> midMaprecord = new Map<String, ConsumableorderdetailsInfo>();
        List<Product2__c> product2Selected = [
            SELECT Id, Name, Name__c, Intra_Trade_List_RMB__c, Asset_Model_No__c
            FROM Product2__c
            WHERE Pro2_Dealer_Object__c = TRUE AND Estimation_Entry_Possibility__c = '○'
        ];
        for (Integer i = 0; i < product2Selected.size(); i++) {
            lowerRecord.add(new ConsumableorderdetailsInfo(product2Selected[i]));
            //先把ConsumableorderdetailsRecords 做成map
            midMaprecord.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
        }
        List<Consumable_order_details2__c> countDel = [
            SELECT
              orderPattern__c,
              Order_ForHospital__c,
              Order_ForHospital__r.Name
            FROM Consumable_order__c
            WHERE id = :ESetid
          ];
          if (oclist.get(0).orderPattern__c.equals('hospitalorder')) {
            hospitalName = oclist.get(0).Order_ForHospital__r.Name;
            hospitalId = oclist.get(0).Order_ForHospital__c;
          }
        }
        List<Consumable_Orderdetails__c> ConsumableorderdetailsSelected = new List<Consumable_Orderdetails__c>();
        //修改
        List<Consumable_order__c> qs = new List<Consumable_order__c>();
        qs = [
          SELECT
            Id,
            Name,
            Order_status__c,
            Consumable_pdf_insert_day__c,
            Dealer_Info__c,
            Deliver_date__c,
            Order_Reason__c,
            Order_date__c,
            Contract_application_decision__c,
            Total_amount__c,
            Offers_Price__c,
            Order_effective_contact__c,
            Order_effective_contact__r.Name
          FROM Consumable_order__c
          WHERE Id = :ESetId AND Order_Owner_WorkLocal__c = :userWorkLocation
                Id,
                Bar_Code__c,
                Name,
                Inventory_date__c,
                Consumable_Product__c,
                Consumable_Product__r.Asset_Model_No__c,
                Recordtypeid,
                Guarantee_period_for_products__c,
                Isoverdue__c,
                Box_Piece__c,
                hospitalSpecialOffer__c,
                promotionorder__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 Consumable_order_minor__r.Dealer_Info__c = :accountid
                AND Dealer_Info_text__c = :accountName
        ];
        if (qs.size() > 0) {
          coc = qs[0];
          decisionCode = coc.Contract_application_decision__c;
          contractName = coc.Order_effective_contact__r.Name;
          contractId = coc.Order_effective_contact__r.Id;
        }
        if (
          qs[0].Order_status__c == '已提交' ||
          qs[0].Order_status__c == '批准' ||
          qs[0].Order_status__c == '附件上传完成'
        ) {
          saveBtnDisabled = true;
          sorderBtnDisabled = true;
          editDelCommitBtnDisabled = false;
        }
        // 選択済みの明细を取得
        ConsumableorderdetailsSelected = [
          SELECT
            Id,
            Name,
            Consumable_order__c,
            Consumable_Product__r.Name__c,
            Consumable_Product__c,
            Consumable_Product__r.Name,
            Consumable_Count__c,
            Consumable_Product__r.Category3__c,
            Consumable_Product__r.Category4__c,
            Consumable_Product__r.Category5__c,
            Consumable_Product__r.Intra_Trade_List_RMB__c,
            Consumable_Product__r.Asset_Model_No__c,
            Sum_of_money__c,
            Consumable_Product__r.SFDA_Status__c,
            Consumable_Product__r.Product2__r.Packing_list_manual__c,
            Consumable_Product__r.Product2__r.SFDA_Approbation_No__c,
            Consumable_Product__r.Product2__r.SFDA_Expiration_Date__c
          FROM Consumable_Orderdetails__c
          WHERE
            recordtypeid = :System.Label.RT_ConOrderDetail1_Order
            AND Consumable_order__c = :ESetId
            AND Order_Owner_WorkLocal__c = :userWorkLocation
            AND Consumable_order__r.Dealer_Info__c = :accountid
        ];
        for (Consumable_Orderdetails__c cdc1 : ConsumableorderdetailsSelected) {
          if (cdc1.Consumable_Product__c != null) {
            orderzaikuId.add(cdc1.Consumable_Product__c);
          }
        }
        soql = makeSoqlorderdet();
        System.debug('soql:' + soql);
        size = orderzaikuId.size();
        initStandardController();
        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++) {
          //add by rentx 2020-12-09
          if (
            String.isNotBlank(methodType) && methodType.equals('hospitalorder')
          ) {
            if (countDel[i].hospitalSpecialOffer__c == true) {
              //然后循环CountDel去修改map里的allnumber
              if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                  countDel[i].Consumable_Product__c
                );
                if (countDel[i].Box_Piece__c == '盒') {
                  Jstage.allnumber = Jstage.allnumber + 1;
                } else {
                  Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            //add by rentx 2020-12-09
            if (String.isNotBlank(methodType) && methodType.equals('hospitalorder')) {
                if (countDel[i].hospitalSpecialOffer__c == true) {
                    //然后循环CountDel去修改map里的allnumber
                    if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
                        ConsumableorderdetailsInfo Jstage = midMaprecord.get(countDel[i].Consumable_Product__c);
                        if (countDel[i].Box_Piece__c == '盒') {
                            Jstage.allnumber = Jstage.allnumber + 1;
                        } else {
                            Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                        }
                        //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                        midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
                    }
                }
                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
              }
            }
          } else if (
            String.isBlank(methodType) || methodType.equals('promotionorder')
          ) {
            if (countDel[i].promotionorder__c == true) {
              if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                  countDel[i].Consumable_Product__c
                );
                if (countDel[i].Box_Piece__c == '盒') {
                  Jstage.allnumber = Jstage.allnumber + 1;
                } else {
                  Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            } else if (String.isBlank(methodType) || methodType.equals('promotionorder')) {
                if (countDel[i].promotionorder__c == true) {
                    if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
                        ConsumableorderdetailsInfo Jstage = midMaprecord.get(countDel[i].Consumable_Product__c);
                        if (countDel[i].Box_Piece__c == '盒') {
                            Jstage.allnumber = Jstage.allnumber + 1;
                        } else {
                            Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                        }
                        midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
                    }
                }
                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
              }
            }
          } else if (
            String.isBlank(methodType) ||
            (!methodType.equals('promotionorder') &&
            !methodType.equals('hospitalorder'))
          ) {
            if (
              countDel[i].promotionorder__c == false &&
              countDel[i].hospitalSpecialOffer__c == false
            ) {
              if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                ConsumableorderdetailsInfo Jstage = MidMap.get(
                  countDel[i].Consumable_Product__c
                );
                if (countDel[i].Box_Piece__c == '盒') {
                  Jstage.allnumber = Jstage.allnumber + 1;
                } else {
                  Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            } else if (String.isBlank(methodType) || (!methodType.equals('promotionorder') && !methodType.equals('hospitalorder'))) {
                if (countDel[i].promotionorder__c == false && countDel[i].hospitalSpecialOffer__c == false) {
                    if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
                        ConsumableorderdetailsInfo Jstage = midMaprecord.get(countDel[i].Consumable_Product__c);
                        if (countDel[i].Box_Piece__c == '盒') {
                            Jstage.allnumber = Jstage.allnumber + 1;
                        } else {
                            Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                        }
                        midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
                    }
                }
                MidMap.put(countDel[i].Consumable_Product__c, Jstage);
              }
            }
          }
        }
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        lowerRecord = new List<ConsumableorderdetailsInfo>();
        //再把map里的值从新赋给ConsumableorderdetailsRecords
        for (ConsumableorderdetailsInfo bss : MidMap.values()) {
          bss.packing_list = 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;
          if (DealerProductMap.containsKey(bss.Prod.Id)) {
            bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id)
              .Special_Campaign_Price__c;
            bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id)
              .Campaign_EndDate__c;
            bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id)
              .OrderGoods_Limit__c;
          }
          consumableorderdetailsRecords.add(bss);
        for (ConsumableorderdetailsInfo bss : midMaprecord.values()) {
            lowerRecord.add(bss);
        }
        allProductLimt(lowerRecord);
        for (ConsumableorderdetailsInfo bss : lowerRecord) {
            if (bss.allnumber < bss.lowerlimit) {
                lower.add(bss.Prod.Name__c);
            }
        }
    }
    //库存上下限
    public static void productLimtAndDate() {
        String nowName = null, nowRightAsstModelNo = null;
        Map<String, String> productLimt = new Map<String, String>();
        for (Integer i = 0; i < proLimitAndDate.size(); i++) {
            nowName = proLimitAndDate[i];
            if (nowName.indexOf('|') >= 0) {
                nowRightAsstModelNo = nowName.subString(0, nowName.indexOf('|'));
                nowName = nowName.subString(nowName.indexOf('|') + 1);
            }
            productLimt.put(nowRightAsstModelNo, nowName);
        }
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
          ass.sortBy = sortOrderAsc;
          for (
            Consumable_Orderdetails__c cdc1 : ConsumableorderdetailsSelected
          ) {
            sumPrice += cdc1.Sum_of_money__c;
            if (ass.prod.Id == cdc1.Consumable_Product__c) {
              ass.check = true;
              ass.esd = cdc1;
            if (productLimt.containsKey(ass.Prod.Asset_Model_No__c)) {
                ass.lowerlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(0, productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|'))
                );
                ass.upperlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|') + 1)
                );
            }
          }
        }
    }
    //全部库存上下限
    private static void allProductLimt(List<ConsumableorderdetailsInfo> lowerRecord) {
        String nowName = null, nowRightAsstModelNo = null;
        Map<String, String> productLimt = new Map<String, String>();
        for (Integer i = 0; i < proLimitAndDate.size(); i++) {
            nowName = proLimitAndDate[i];
            if (nowName.indexOf('|') >= 0) {
                nowRightAsstModelNo = nowName.subString(0, nowName.indexOf('|'));
                nowName = nowName.subString(nowName.indexOf('|') + 1);
            }
            productLimt.put(nowRightAsstModelNo, nowName);
        }
        for (ConsumableorderdetailsInfo ass : lowerRecord) {
            if (productLimt.containsKey(ass.Prod.Asset_Model_No__c)) {
                ass.lowerlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(0, productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|'))
                );
                ass.upperlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|') + 1)
                );
            }
        }
    }
    @AuraEnabled
    public static Results searchConsumableorderdetails(
        String userWorkLocationStr,
        String agencyProTypeStr,
        String accountNameStr,
        String accountIdStr,
        String hospitalIdStr,
        String contractIdStr,
        String category1Str,
        String category3Str,
        String category4Str,
        String category5Str,
        String category_GoodStr,
        Boolean specialCampaignStr,
        String dealerProductIdStr,
        String methodTypeStr,
        String consumableorderdetailsRecordsviewStr,
        Boolean editAbleStr,
        List<String> proLimitAndDateList
    ) {
        Results results = new Results();
        errorMsgList = new List<String>();
        warningMsgList = new List<String>();
        userWorkLocation = userWorkLocationStr;
        agencyProType = agencyProTypeStr;
        accountName = accountNameStr;
        accountid = accountIdStr;
        hospitalId = hospitalIdStr;
        contractId = contractIdStr;
        category1 = category1Str;
        category3 = category3Str;
        category4 = category4Str;
        category5 = category5Str;
        category_Goods = category_GoodStr;
        specialCampaign = specialCampaignStr;
        methodType = methodTypeStr;
        editAble = editAbleStr;
        proLimitAndDate = proLimitAndDateList;
        dealerProductId = (List<String>) JSON.deserialize(dealerProductIdStr, List<String>.class);
        consumableorderdetailsRecordsview = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
            consumableorderdetailsRecordsviewStr,
            List<ConsumableorderdetailsInfo>.class
        );
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
        try {
            searchDone = 'searchDone';
            sortKey = '1';
            preSortKey = '1';
            sortOrderAsc = false;
            sortOrder = new String[7];
            sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
            Map<String, String> selectedIdMap = new Map<String, String>();
            List<ConsumableorderdetailsInfo> derdetailsRecords = new List<ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
            List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
            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,
                    //add by rentx 2020-12-09
                    hospitalSpecialOffer__c,
                    promotionorder__c
                //add by rentx 2020-12-09
                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 Arrive_Owner_Work_Location__c = :userWorkLocation
                    AND Dealer_Info_text__c = :accountName
            ];
            List<Product2__c> product2Selected = new List<Product2__c>();
            consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
            soql = makeSoql(category1, category_Goods, category3, category4, category5, specialCampaign, DealerProductId);
            size = Integer.valueOf(System.Label.orderdetLimitsize);
            initStandardController();
            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++) {
                //然后循环CountDel去修改map里的allnumber
                if (String.isNotBlank(methodType) && methodType.equals('hospitalorder')) {
                    if (countDel[i].hospitalSpecialOffer__c == true) {
                        if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                            ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                            if (countDel[i].Box_Piece__c == '盒') {
                                Jstage.allnumber = Jstage.allnumber + 1;
                            } else {
                                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                            }
                            MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                        }
                    }
                } else if (String.isBlank(methodType) || methodType.equals('promotionorder')) {
                    if (countDel[i].promotionorder__c == true) {
                        if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                            ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                            if (countDel[i].Box_Piece__c == '盒') {
                                Jstage.allnumber = Jstage.allnumber + 1;
                            } else {
                                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                            }
                            MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                        }
                    }
                } else if (String.isBlank(methodType) || (!methodType.equals('promotionorder') && !methodType.equals('hospitalorder'))) {
                    if (countDel[i].promotionorder__c == false && countDel[i].hospitalSpecialOffer__c == false) {
                        if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                            ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                            if (countDel[i].Box_Piece__c == '盒') {
                                Jstage.allnumber = Jstage.allnumber + 1;
                            } else {
                                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                            }
                            MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                        }
                    }
                }
            }
            //再把map里的值从新赋给ConsumableorderdetailsRecordsa0l0l0000000byXAAQ
            for (ConsumableorderdetailsInfo bss : MidMap.values()) {
                if (selectedIdMap.containsKey(bss.Prod.id)) {
                    continue;
                } else {
                    if (DealerProductMap.containsKey(bss.Prod.Id)) {
                        bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id).Special_Campaign_Price__c;
                        bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id).Campaign_EndDate__c;
                        bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id).OrderGoods_Limit__c;
                    }
                    bss.sortBy = sortOrderAsc;
                    bss.packing_list = 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;
                    consumableorderdetailsRecords.add(bss);
                }
            }
            consumableorderdetailsRecords.sort();
            productLimtAndDate();
            getPageInfo();
            sortKey = '1';
            preSortKey = '1';
            sortOrderAsc = false;
            sortOrder = new String[7];
            sortOrder = new List<String>{ '  ', '  ', ' ', '', '', '', '', '' };
            cate1ForSort = category1;
            // 显示数据条数信息
            // makeMessage();
            results.errorMsgList = errorMsgList;
            results.warningMsgList = warningMsgList;
            if (consumableorderdetailsRecords.size() > 0) {
                getConsumableShowTableFieldValue();
                results.result = 'Success';
                results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
                results.errorMsg = '搜索到' + consumableorderdetailsRecords.size() + '件产品';
            } else {
                getConsumableShowTableFieldValue();
                results.result = 'Fail';
                results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
                results.errorMsg = '没有搜索到相关数据';
            }
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //医院--检索
    @AuraEnabled
    public static Results searchorderdetails(
        String methodTypeStr,
        String accountIdStr,
        String hospitalIdStr,
        String contractIdStr,
        String userWorkLocationStr,
        String accountNameStr,
        List<String> proLimitAndDateList,
        Boolean editAbleStr
    ) {
        Results results = new Results();
        methodType = methodTypeStr;
        accountId = accountIdStr;
        hospitalId = hospitalIdStr;
        contractId = contractIdStr;
        userWorkLocation = userWorkLocationStr;
        accountName = accountNameStr;
        proLimitAndDate = proLimitAndDateList;
        editAble = editAbleStr;
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
        try {
            soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
            if (methodType.equals('hospitalorder')) {
                //医院id 有值
                List<hospitalprice__c> hplist = [
                    SELECT id, product__c
                    FROM hospitalprice__c
                    WHERE account__c = :accountid AND hospital__c = :hospitalId
                ];
                if (hplist != null && hplist.size() > 0) {
                    List<String> hpids = new List<String>();
                    for (hospitalprice__c hc : hplist) {
                        hpids.add(hc.product__c);
                    }
                    if (hpids != null && hpids.size() > 0) {
                        soql += ' AND Id in : hpids ';
                    }
                } else {
                    //该医院下没有符合医院特价的产品
                    soql += ' AND Id = null ';
                }
            } else if (methodType.equals('promotionorder')) {
                List<Dealer_Product__c> dpclist = [
                    SELECT Id, Dealer_Product2__c
                    FROM Dealer_Product__c
                    WHERE Dealer_Contact__c = :contractId AND (Special_Discount__c != NULL OR Special_Campaign_Price__c != NULL)
                ];
                if (dpclist != null && dpclist.size() > 0) {
                    String ids = '(';
                    for (Dealer_Product__c hc : dpclist) {
                        hpids.add(hc.Dealer_Product2__c);
                        ids += '\'' + hc.Dealer_Product2__c + '\',';
                    }
                    ids = ids.substring(0, ids.length() - 1) + ')';
                    if (hpids != null && hpids.size() > 0) {
                        // soql += ' AND Id in : hpids ';
                        soql += ' AND Id in ' + ids;
                    }
                } else {
                    //该经销商下没有促销价格的产品
                    soql += ' AND Id = null ';
                }
            }
            size = Integer.valueOf(System.Label.orderdetLimitsize);
            initStandardController();
            List<Product2__c> product2Selected = new List<Product2__c>();
            Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
            Map<String, String> selectedIdMap = new Map<String, String>();
            consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
            product2Selected = Database.query(soql);
            for (Integer i = 0; i < product2Selected.size(); i++) {
                MidMap.put(product2Selected[i].Id, new ConsumableorderdetailsInfo(product2Selected[i]));
            }
            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,
                    hospitalSpecialOffer__c,
                    promotionorder__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 Arrive_Owner_Work_Location__c = :userWorkLocation
                    //AND Consumable_order_minor__r.Dealer_Info__c = :accountid
                    AND Dealer_Info_text__c = :accountName
            ];
            for (Integer i = 0; i < countDel.size(); i++) {
                if (methodType.equals('hospitalorder')) {
                    if (countDel[i].hospitalSpecialOffer__c == true) {
                        //然后循环CountDel去修改map里的allnumber
                        if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                            ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                            if (countDel[i].Box_Piece__c == '盒') {
                                Jstage.allnumber = Jstage.allnumber + 1;
                            } else {
                                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                        }
                    }
                } else if (methodType.equals('promotionorder')) {
                    if (countDel[i].promotionorder__c == true) {
                        //然后循环CountDel去修改map里的allnumber
                        if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
                            ConsumableorderdetailsInfo Jstage = MidMap.get(countDel[i].Consumable_Product__c);
                            if (countDel[i].Box_Piece__c == '盒') {
                                Jstage.allnumber = Jstage.allnumber + 1;
                            } else {
                                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
                            }
                            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                            MidMap.put(countDel[i].Consumable_Product__c, Jstage);
                        }
                    }
                }
            }
            //再把map里的值从新赋给ConsumableorderdetailsRecordsa0l0l0000000byXAAQ
            for (ConsumableorderdetailsInfo bss : MidMap.values()) {
                if (selectedIdMap.containsKey(bss.Prod.id)) {
                    continue;
                } else {
                    if (DealerProductMap.containsKey(bss.Prod.Id)) {
                        bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id).Special_Campaign_Price__c;
                        bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id).Campaign_EndDate__c;
                        bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id).OrderGoods_Limit__c;
                    }
                    bss.sortBy = sortOrderAsc;
                    bss.packing_list = 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;
                    consumableorderdetailsRecords.add(bss);
                }
            }
            consumableorderdetailsRecords.sort();
            productLimtAndDate();
            getPageInfoForHos();
            sortKey = '1';
            preSortKey = '1';
            sortOrderAsc = false;
            sortOrder = new String[7];
            sortOrder = new List<String>{ '  ', '  ', ' ', '', '', '', '', '' };
            cate1ForSort = category1;
            // 显示数据条数信息
            noOfRecords = consumableorderdetailsRecords.size();
            getConsumableShowTableFieldValue();
            results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
            if (consumableorderdetailsRecordsview.size() > 0) {
                results.result = 'Success';
                results.errorMsg = '共搜索到' + consumableorderdetailsRecordsview.size() + '条数据';
            } else {
                results.result = 'Fail';
                results.errorMsg = '没有搜索到相关数据';
            }
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //用户切换医院时取消选中的产品
    private static List<ConsumableorderdetailsInfo> getPageInfoForHos() {
        List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
        Map<String, String> selectedIdMap = new Map<String, String>();
        consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
        if (editAble) {
            consumableorderdetailsRecordsview = reSet;
        }
        Integer pagestartNo = (con.getPageNumber() * size) - size;
        Integer pageendNo = (con.getPageNumber() * size) > noOfRecords ? noOfRecords : (con.getPageNumber() * size - 1);
        Integer addNo = 0;
        for (Integer i = pagestartNo; i < consumableorderdetailsRecords.size(); i++) {
            Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
            if (selectedIdMap.containsKey(consumableorderdetailsRecords[i].Prod.Id)) {
                addNo++;
                //continue;
            }
            // else if (consumableorderdetailsRecordsview.size() >= pageLimit + size) {
            //     break;
            // }
            else {
                if (consumableorderdetailsRecords[i].check == false) {
                    consumableorderdetailsRecords[i].esd = orderdetails1;
                }
                consumableorderdetailsRecordsview.add(consumableorderdetailsRecords[i]);
                addNo++;
            }
            // if (addNo >= size){
            //     break;
            // }
        }
        return consumableorderdetailsRecordsview;
    }
    //add by rentx 2020-12-03 end =====================================================================================================================
    //特价
    public static void OffersPrice() {
        edoffersPrice = true;
    }
    //得到促销产品Id
    private static List<String> getDealerProductId() {
        List<String> ProductId = new List<String>();
        Map<String, String> DealerProductIdMap = new Map<String, String>();
        Date dateToday = Date.today();
        List<Dealer_Product__c> DealerProductList = [
            SELECT
                Id,
                Name,
                Dealer_Product2__c,
                Special_Campaign_Price__c,
                Campaign_StartDate__c,
                Campaign_EndDate__c,
                Dealer_Contact__c,
                OrderGoods_Limit__c
            FROM Dealer_Product__c
            WHERE
                Dealer_Contact__c IN :contactDealer
                AND Campaign_StartDate__c <= :dateToday
                AND Campaign_EndDate__c >= :dateToday
                AND Special_Campaign_Price__c != NULL
        ];
        for (Dealer_Product__c dealerProduct : DealerProductList) {
            if (DealerProductIdMap.containsKey(dealerProduct.Dealer_Product2__c)) {
                continue;
            } else {
                ProductId.add(dealerProduct.Dealer_Product2__c);
                DealerProductIdMap.put(dealerProduct.Dealer_Product2__c, dealerProduct.Dealer_Product2__c);
            }
        }
        return ProductId;
    }
    private static String makeSoql(
        String CateName,
        String CateCode,
        String Category3,
        String Category4,
        String Category5,
        Boolean specialCampaign,
        List<String> DealerProductId
    ) {
        String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
        // add begin ================================================================================================
        if (methodType != null && methodType.equals('hospitalorder')) {
            //如果是医院特价
            //1.判断 医院id是否有值 如果有值 则根据医院id去 医院特价表中获取产品id
            //医院id 有值
            if (hospitalId == null || hospitalId == '') {
                soql += ' and id = null ';
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '请选择医院'));
                warningMsgList.add('请选择医院');
            } else {
                List<hospitalprice__c> hplist = [
                    SELECT id, product__c
                    FROM hospitalprice__c
                    WHERE account__c = :accountid AND hospital__c = :hospitalId
                ];
                if (hplist != null && hplist.size() > 0) {
                    hpids = new List<String>();
                    for (hospitalprice__c hc : hplist) {
                        hpids.add(hc.product__c);
                    }
                    if (hpids != null && hpids.size() > 0) {
                        soql += ' AND Id in : hpids ';
                    }
                } else {
                    //该医院下没有符合医院特价的产品
                    soql += ' AND Id = null ';
                    return soql;
                }
            }
        }
        //促销订货
        if (methodType != null && methodType.equals('promotionorder')) {
            if (contractId == null || contractId == '') {
                soql += ' and id = null ';
                // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '请选择合同'));
                warningMsgList.add('请选择合同');
            } else {
                //1.查询所有经销商产品
                List<Dealer_Product__c> dpclist = [
                    SELECT Id, Dealer_Product2__c
                    FROM Dealer_Product__c
                    WHERE Dealer_Contact__c = :contractId AND (Special_Discount__c != NULL OR Special_Campaign_Price__c != NULL)
                ];
                if (dpclist != null && dpclist.size() > 0) {
                    hpids = new List<String>();
                    for (Dealer_Product__c hc : dpclist) {
                        hpids.add(hc.Dealer_Product2__c);
                    }
                    if (hpids != null && hpids.size() > 0) {
                        soql += ' AND Id in : hpids ';
                    }
                } else {
                    //该经销商下没有促销价格的产品
                    soql += ' AND Id = null ';
                    return soql;
                }
            }
        }
        //add end ===================================================================================================
        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 + '\'';
        }
        if (agencyProType == 'ET') {
            soql += ' AND Pro2_Dealer_Object__c = true';
        }
        if (agencyProType == 'ENG') {
            soql += ' AND Pro2_Dealer_ENG__c = true';
        }
        soql += ' AND Intra_Trade_List_RMB__c > 0 ';
        System.debug('soql +++++++++++  ' + soql);
        return soql;
    }
    private 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] + '\')';
            }
        }
        String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
        System.debug('sqlTail:' + sqlTail);
        System.debug('orderzaikuId:' + orderzaikuId);
        if (orderzaikuId.size() > 0) {
            soql += ' AND Id in' + sqlTail;
        }
        return soql;
    }
    // 编辑按钮
    @AuraEnabled
    public static Results setEditAble(String eSetidStr) {
        Results results = new Results();
        ESetId = eSetidStr;
        try {
            statusEdit = 'Redirect';
            List<Consumable_order__c> oclist = [SELECT orderPattern__c FROM Consumable_order__c WHERE id = :ESetid];
            String url = '/lexconsumable?ESetid=' + ESetid + '&KeyWords=' + statusEdit + '&type=' + oclist.get(0).orderPattern__c;
            results.result = 'Success';
            results.url = url;
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    // 再申请
    @AuraEnabled
    public static Results backOrder(String eSetidStr) {
        Results results = new Results();
        ESetId = eSetidStr;
        statusEdit = 'Redirect';
        returnOrder = true;
        try {
            statusEdit = 'Redirect';
            List<Consumable_order__c> oclist = [SELECT orderPattern__c FROM Consumable_order__c WHERE id = :ESetid];
            String url = '/lexconsumable?ESetid=' + ESetid + '&KeyWords=' + statusEdit + '&type=' + oclist.get(0).orderPattern__c;
            results.result = 'Success';
            results.url = url;
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //上传附件
    @AuraEnabled
    public static Results filesUpload(String pId, String fileName, String base64Data) {
        Results results = new Results();
        try {
            base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
            ContentVersion cv = new ContentVersion();
            cv.Title = fileName;
            cv.PathOnClient = '/' + fileName;
            cv.FirstPublishLocationId = pId;
            cv.VersionData = EncodingUtil.base64Decode(base64Data);
            cv.IsMajorVersion = true;
            insert cv;
            Consumable_order__c c = [SELECT Id FROM Consumable_order__c WHERE Id = :pId];
            c.Consumable_pdf_insert_day__c = Date.today();
            update c;
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //删除按钮
    @AuraEnabled
    public static Results delConsumable(String eSetidStr) {
        Results results = new Results();
        ESetId = eSetidStr;
        try {
            Consumable_order__c cord = new Consumable_order__c(Id = ESetId);
            List<Consumable_Orderdetails__c> orderdetails1 = [
                SELECT Id
                FROM Consumable_Orderdetails__c
                WHERE Consumable_order__c = :EsetId
            ];
            delete orderdetails1;
            delete cord;
            results.result = 'Success';
            results.url = '/lexconsumableordermanage';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    // 提交按钮
    @AuraEnabled
    public static Results sorder(String eSetidStr, String accountidStr) {
        Results results = new Results();
        errorMsgList = new List<String>();
        warningMsgList = new List<String>();
        ESetId = eSetidStr;
        accountid = accountidStr;
        Savepoint sp = Database.setSavepoint();
        try {
            Map<Id, String> prodMap = new Map<Id, String>();
            Consumable_order__c P = new Consumable_order__c();
            P = new Consumable_order__c();
            p.Id = ESetId;
            p.Order_date__c = Date.today();
            p.Order_status__c = '附件上传完成';
            for (Consumable_Orderdetails__c cod1 : [
                SELECT Consumable_product__r.Product2__c, Consumable_product__r.Name__c
                FROM Consumable_Orderdetails__c
                WHERE Consumable_order__c = :ESetId
            ]) {
                prodMap.put(cod1.Consumable_product__r.Product2__c, cod1.Consumable_product__r.Name__c);
            }
            // GZW 提交产品无效 出错误消息
            System.debug(prodMap);
            Map<String, String> chkMap = OpportunityWebService.MapCheckProRegisterDecide(prodMap, accountid, '');
            System.debug(chkMap);
            if (chkMap.size() > 0) {
                if (chkMap.containsKey('agency')) {
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '第一经销商没有有效的医疗器械经营许可证。'));
                    errorMsgList.add('第一经销商没有有效的医疗器械经营许可证。');
                }
                for (String proId : prodMap.keySet()) {
                    if (chkMap.containsKey(proId)) {
                        if (chkMap.get(proId) == '1') {
                            // ApexPages.addmessage(
                            //     new ApexPages.message(ApexPages.severity.Error, '产品 ' + prodMap.get(proId) + ' 没有有效的注册证。')
                            // );
                            errorMsgList.add('产品 ' + prodMap.get(proId) + ' 没有有效的注册证。');
                        } else if (chkMap.get(proId) == '2') {
                            // ApexPages.addmessage(
                            //     new ApexPages.message(ApexPages.severity.Error, '产品 ' + prodMap.get(proId) + ' 超过经销商经营范围。')
                            // );
                            errorMsgList.add('产品 ' + prodMap.get(proId) + ' 超过经销商经营范围。');
                        }
                    }
                }
                results.result = 'Fail';
                results.errorMsg = '';
                results.errorMsgList = errorMsgList;
                results.warningMsgList = warningMsgList;
                return results;
            }
            update p;
            Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
            psr.setObjectId(ESetId);
            Approval.ProcessResult submitResult = Approval.process(psr);
            results.result = 'Success';
            results.url = '/lexconsumableordermanage';
        } catch (Exception e) {
            Database.rollback(sp);
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    // 驳回订单copy
    @AuraEnabled
    public static Results ordrCopy(
        String contractNameStr,
        String cocStr,
        String agencyProTypeStr,
        String accountidStr,
        String consumableorderdetailsRecordsviewStr,
        String contactDealerStr,
        String methodTypeStr,
        String hospitalIdStr,
        String contractIdStr,
        String agencyProType1Str,
        Boolean OSHFLGStr
    ) {
        ESetId = '';
        return save(
            contractNameStr,
            cocStr,
            agencyProTypeStr,
            accountidStr,
            consumableorderdetailsRecordsviewStr,
            contactDealerStr,
            methodTypeStr,
            ESetId,
            hospitalIdStr,
            contractIdStr,
            agencyProType1Str,
            OSHFLGStr
        );
    }
    //保存按钮
    @AuraEnabled
    public static Results save(
        String contractNameStr,
        String cocStr,
        String agencyProTypeStr,
        String accountidStr,
        String consumableorderdetailsRecordsviewStr,
        String contactDealerStr,
        String methodTypeStr,
        String eSetIdStr,
        String hospitalIdStr,
        String contractIdStr,
        String agencyProType1Str,
        Boolean OSHFLGStr
    ) {
        Results results = new Results();
        errorMsgList = new List<String>();
        warningMsgList = new List<String>();
        contractName = contractNameStr;
        agencyProType = agencyProTypeStr;
        accountid = accountidStr;
        methodType = methodTypeStr;
        ESetId = eSetIdStr;
        hospitalId = hospitalIdStr;
        contractId = contractIdStr;
        agencyProType1 = agencyProType1Str;
        OSHFLG = OSHFLGStr;
        coc = (Consumable_order__c) JSON.deserialize(cocStr, Consumable_order__c.class);
        contactDealer = (List<String>) JSON.deserialize(contactDealerStr, List<String>.class);
        System.debug('consumableorderdetailsRecordsviewStr:' + consumableorderdetailsRecordsviewStr);
        consumableorderdetailsRecordsview = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
            consumableorderdetailsRecordsviewStr,
            List<ConsumableorderdetailsInfo>.class
        );
        if (coc.Offers_Price__c != null) {
            String offerStr = String.valueOf(coc.Offers_Price__c);
            bargainPrice = Decimal.valueOf(offerStr.replace(',', ''));
        }
        Savepoint sp = Database.setSavepoint();
        try {
            if (String.isEmpty(contractName)) {
                // coc.Order_effective_contact__c.addError('请选择合同');
                results.result = 'Fail';
                results.errorMsg = '请选择合同';
                return results;
            }
            List<Account> contract = [
                SELECT Id, Name, Contract_Department_Class__c, Contract_Quote_Decide_Flag__c
                FROM account
                WHERE
                    Name = :contractName
                    AND Id = :contractId //lt 20230517 安徽两票制 add
                    AND Contract_Decide_Start_Date__c <= :Date.Today()
                    AND Contract_Decide_End_Date__c >= :Date.Today()
                    AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
                    AND Agent_Ref__c = :accountid
                    AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
            ];
            if (contract.size() <= 0) {
                // coc.Order_effective_contact__c.addError('不存在的合同,请重新确认。');
                results.result = 'Fail';
                results.errorMsg = '不存在的合同,请重新确认。';
                return results;
            } else {
                if (String.isEmpty(contract[0].Contract_Quote_Decide_Flag__c)) {
                    // coc.Order_effective_contact__c.addError('合同无效,请重新确认。');
                    results.result = 'Fail';
                    results.errorMsg = '合同无效,请重新确认。';
                    return results;
                }
            }
            Integer FLG = 0;
            Integer Count = 0;
            //add by rentx 2020-11-25
            List<String> tpids = new List<String>();
            //add by rentx 2020-11-25
            for (ConsumableorderdetailsInfo CheckCount : consumableorderdetailsRecordsview) {
                FLG = FLG + 1;
                if (CheckCount.check == false) {
                    Count = Count + 1;
                }
                if (CheckCount.check == true) {
                    //add by rentx 2020-11-25
                    tpids.add(CheckCount.Prod.Id);
                    //add by rentx 2020-11-25
                    if (CheckCount.esd.Consumable_Count__c == null || CheckCount.esd.Consumable_Count__c == 0) {
                        // CheckCount.esd.Consumable_Count__c.addError('请输入采购数量');
                        results.result = 'Fail';
                        results.errorMsg = '请输入采购数量';
                        return results;
                    }
                    if (
                        CheckCount.orderGoods_Limit > 0 &&
                        math.mod(Integer.valueOf(CheckCount.esd.Consumable_Count__c), Integer.valueOf(CheckCount.orderGoods_Limit)) > 0
                    ) {
                        // CheckCount.esd.Consumable_Count__c.addError('请输入促销数量的倍数');
                        results.result = 'Fail';
                        results.errorMsg = '请输入促销数量的倍数';
                        return results;
                    }
                }
            }
            if (Count == FLG) {
                results.result = 'Fail';
                results.errorMsg = '请选择所需消耗品';
                return results;
            }
            //=======================================医院特价,有金额的话取金额
            Map<String, Decimal> dealerHospitalmMap = new Map<String, Decimal>();
            List<hospitalprice__c> hplist = [
                SELECT Id, hospital__c, mPrice__c, pPrice__c, product__c, account__c
                FROM hospitalprice__c
                WHERE product__c IN :tpids AND mPrice__c != NULL AND account__c = :accountid
            ];
            for (hospitalprice__c dealerProduct : hplist) {
                if (dealerProduct.mPrice__c != null) {
                    dealerHospitalmMap.put('' + dealerProduct.hospital__c + dealerProduct.product__c, dealerProduct.mPrice__c);
                }
            }
            //促销订货 根据经销商产品中的数据计算金额
            //=======================================产品特殊折扣
            Map<String, Decimal> dealerPDiscountMap = new Map<String, Decimal>();
            Map<String, Decimal> dealerMPDiscountMap = new Map<String, Decimal>();
            //1.获取有开始结束日的产品
            Date dateToday = Date.today();
            List<Dealer_Product__c> haveDateList = [
                SELECT
                    Id,
                    Name,
                    Dealer_Product2__c,
                    Special_Campaign_Price__c,
                    Campaign_StartDate__c,
                    Campaign_EndDate__c,
                    Dealer_Contact__c,
                    OrderGoods_Limit__c,
                    Special_Discount__c
                FROM Dealer_Product__c
                WHERE
                    Dealer_Contact__c IN :contactDealer
                    AND Campaign_StartDate__c <= :dateToday
                    AND Campaign_EndDate__c >= :dateToday
                    AND (Special_Discount__c != NULL
                    OR Special_Campaign_Price__c != NULL)
            ];
            //2.获取没有开始结束日的产品
            List<Dealer_Product__c> DealerProductList = [
                SELECT
                    Id,
                    Name,
                    Dealer_Product2__c,
                    Special_Campaign_Price__c,
                    Campaign_StartDate__c,
                    Campaign_EndDate__c,
                    Dealer_Contact__c,
                    Special_Discount__c,
                    OrderGoods_Limit__c
                FROM Dealer_Product__c
                WHERE Dealer_Contact__c IN :contactDealer AND (Special_Discount__c != NULL OR Special_Campaign_Price__c != NULL)
            ];
            for (Dealer_Product__c dealerProduct : DealerProductList) {
                //如果促销价格为null 则设置特殊折扣(百分比)到集合
                if (dealerProduct.Special_Campaign_Price__c == null) {
                    dealerPDiscountMap.put(
                        '' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c,
                        dealerProduct.Special_Discount__c
                    );
                } else {
                    dealerMPDiscountMap.put(
                        '' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c,
                        dealerProduct.Special_Campaign_Price__c
                    );
                }
            }
            //这样做是为了计算促销价格时 优先计算促销开始结束日不为空的产品
            //如果该集合有值 则说明需要根据当前的金额或者折扣来计算
            if (haveDateList != null && haveDateList.size() > 0) {
                for (Dealer_Product__c dealerProduct : haveDateList) {
                    if (dealerProduct.Special_Campaign_Price__c == null) {
                        dealerPDiscountMap.put(
                            '' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c,
                            dealerProduct.Special_Discount__c
                        );
                        dealerMPDiscountMap.remove('' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c);
                    } else {
                        dealerMPDiscountMap.put(
                            '' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c,
                            dealerProduct.Special_Campaign_Price__c
                        );
                        dealerPDiscountMap.remove('' + dealerProduct.Dealer_Contact__c + dealerProduct.Dealer_Product2__c);
                    }
                }
            }
            //=======================================经销商合同折扣
            List<Account> at = [
                SELECT id, Name, State_Master__c, State_Master__r.Name, Sales_Section__c, Dealer_discount__c
                FROM Account
                WHERE
                    Name = :contractName
                    AND Id = :contractId //lt 20230517 安徽两票制 add
                    AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add  1
                    AND Contact_Type__c LIKE :agencyProType
                    AND Contract_Decide_Start_Date__c <= :Date.Today()
                    AND Contract_Decide_End_Date__c >= :Date.Today()
                    AND Contract_Decide_End_Date__c >= :Date.Today()
                    AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
            ];
            if (at.size() > 0 && at[0].Dealer_discount__c != null) {
                disCount = at[0].Dealer_discount__c;
            } else {
                disCount = 100;
            }
            Consumable_order__c P = new Consumable_order__c();
            List<Consumable_Orderdetails__c> Ins = new List<Consumable_Orderdetails__c>();
            //新建订单时
            if (String.isBlank(ESetId)) {
                Integer i = 1;
                Integer Roll = 0;
                p.Name = '*';
                p.Order_status__c = '草案中';
                p.Dealer_Info__c = accountid;
                p.Order_ProType__c = agencyProType;
                p.Offers_Price__c = coc.Offers_Price__c;
                p.Order_date__c = coc.Order_date__c;
                p.Order_effective_contact__c = contract[0].Id;
                p.Order_Reason__c = coc.Order_Reason__c;
                p.RecordTypeid = System.Label.RT_ConOrder_Order;
                p.Overrule_order__c = coc.Id;
                if (String.isNotBlank(methodType)) {
                    p.orderPattern__c = methodType;
                }
                insert p;
                List<Consumable_order__c> Consumable_order = [SELECT Name, orderPattern__c FROM Consumable_order__c WHERE id = :p.id];
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview) {
                    Roll = Roll + 1;
                    if (ass.check == true) {
                        if (ass.esd.Consumable_Count__c == null || ass.esd.Consumable_Count__c == 0) {
                            // ass.esd.Consumable_Count__c.addError('请输入采购数量');
                            results.result = 'Fail';
                            results.errorMsg = '请输入采购数量';
                            return results;
                        } else {
                            Consumable_Orderdetails__c InsAfterDel = new Consumable_Orderdetails__c();
                            String str = string.valueOf(i);
                            if (str.length() == 1) {
                                str = '0' + str;
                            }
                            InsAfterDel.Name = Consumable_order[0].Name + '-' + str;
                            InsAfterDel.Consumable_Count__c = ass.esd.Consumable_Count__c;
                            InsAfterDel.Consumable_order__c = p.id;
                            InsAfterDel.Consumable_Product__c = ass.Prod.id;
                            InsAfterDel.Box_Piece__c = '盒';
                            //协议订货
                            if (methodType.equals('agreementorder')) {
                                Consumable_order[0].orderPattern__c = 'agreementorder';
                                InsAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c * disCount / 100;
                                //=====================================================================================update by rentx 2020-11-25
                            } else if (methodType.equals('promotionorder')) {
                                Consumable_order[0].orderPattern__c = 'promotionorder';
                                //促销订货
                                //如果促销价格不为null 则直接使用促销价格来计算金额
                                if (dealerMPDiscountMap.containsKey('' + contract[0].Id + ass.Prod.Id)) {
                                    InsAfterDel.Intra_Trade_List_RMB__c = dealerMPDiscountMap.get('' + contract[0].Id + ass.Prod.Id);
                                    system.debug('cai 0' + InsAfterDel.Intra_Trade_List_RMB__c);
                                } else if (dealerPDiscountMap.containsKey('' + contract[0].Id + ass.Prod.Id)) {
                                    InsAfterDel.Intra_Trade_List_RMB__c =
                                        ass.Prod.Intra_Trade_List_RMB__c *
                                        dealerPDiscountMap.get('' + contract[0].Id + ass.Prod.Id) /
                                        100;
                                    system.debug('cai 00' + InsAfterDel.Intra_Trade_List_RMB__c);
                                }
                                //=====================================================================================update by rentx 2020-11-25
                            } else if (methodType.equals('hospitalorder')) {
                                //医院特价
                                Consumable_order[0].Order_ForHospital__c = hospitalId;
                                Consumable_order[0].orderPattern__c = 'hospitalorder';
                                if (
                                    dealerHospitalmMap.containsKey(hospitalId + ass.Prod.Id) &&
                                    dealerHospitalmMap.get(hospitalId + ass.Prod.Id) != null
                                ) {
                                    //直接根据促销金额计算
                                    InsAfterDel.Intra_Trade_List_RMB__c = dealerHospitalmMap.get('' + hospitalId + ass.Prod.Id);
                                }
                            } else if (DealerProductMap.containsKey(ass.Prod.Id)) {
                                InsAfterDel.Intra_Trade_List_RMB__c = DealerProductMap.get(ass.Prod.Id).Special_Campaign_Price__c;
                                system.debug('cai 2' + InsAfterDel.Intra_Trade_List_RMB__c);
                                InsAfterDel.Purchase_Unitprtprice_From__c = '促销';
                                InsAfterDel.Special_Campaign_Price__c = DealerProductMap.get(ass.Prod.Id).Special_Campaign_Price__c;
                            }
                            InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
                            i++;
                            Ins.add(InsAfterDel);
                        }
                    }
                }
                ESetId = p.id;
                if (Consumable_order.size() > 0) {
                    update Consumable_order;
                }
            }
            //修改之后 保存订单
            if (Ins.size() > 0) {
                insert Ins;
            } else {
                //修改,获取消耗品订单
                List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
                cocinfo = [
                    SELECT Id, Name, Order_status__c, Dealer_Info__c, Deliver_date__c, Order_Reason__c, Offers_Price__c
                    FROM Consumable_order__c
                    WHERE Id = :ESetId
                ];
                if (cocinfo.size() > 0) {
                    p = cocinfo[0];
                }
                p.Name = coc.Name;
                p.Dealer_Info__c = accountid;
                p.Order_ProType__c = agencyProType;
                p.Order_date__c = coc.Order_date__c;
                p.Order_effective_contact__c = contract[0].Id;
                p.Order_Reason__c = coc.Order_Reason__c;
                if (bargainPrice != null) {
                    p.Offers_Price__c = bargainPrice;
                }
                update p;
                List<Consumable_order__c> Consumable_order = [SELECT Name, orderPattern__c FROM Consumable_order__c WHERE id = :p.id];
                List<Consumable_Orderdetails__c> qs = new List<Consumable_Orderdetails__c>();
                qs = [
                    SELECT Id
                    FROM Consumable_Orderdetails__c
                    WHERE Consumable_order__c = :ESetId AND Consumable_order__r.Dealer_Info__c = :accountid
                ];
                if (qs.size() > 0) {
                    delete qs;
                }
                Integer i = 1;
                for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview) {
                    if (ass.check == true) {
                        Consumable_Orderdetails__c InsAfterDel = new Consumable_Orderdetails__c();
                        if (ass.esd.Consumable_Count__c == null || ass.esd.Consumable_Count__c == 0) {
                            // ass.esd.Consumable_Count__c.addError('请输入采购数量');
                            results.result = 'Fail';
                            results.errorMsg = '请输入采购数量';
                            return results;
                        } else {
                            String str = string.valueOf(i);
                            if (str.length() == 1) {
                                str = '0' + str;
                            }
                            InsAfterDel.Name = Consumable_order[0].Name + '-' + str;
                            InsAfterDel.Consumable_Count__c = ass.esd.Consumable_Count__c;
                            InsAfterDel.Consumable_order__c = ESetId;
                            InsAfterDel.Consumable_Product__c = ass.Prod.id;
                            InsAfterDel.Box_Piece__c = '盒';
                            //协议订货
                            if (methodType.equals('agreementorder')) {
                                Consumable_order[0].orderPattern__c = 'agreementorder';
                                InsAfterDel.Intra_Trade_List_RMB__c = ass.Prod.Intra_Trade_List_RMB__c * disCount / 100;
                            } else if (methodType.equals('promotionorder')) {
                                Consumable_order[0].orderPattern__c = 'promotionorder';
                                //促销订货
                                if (dealerMPDiscountMap.containsKey('' + contract[0].Id + ass.Prod.Id)) {
                                    InsAfterDel.Intra_Trade_List_RMB__c = dealerMPDiscountMap.get('' + contract[0].Id + ass.Prod.Id);
                                } else if (dealerPDiscountMap.containsKey('' + contract[0].Id + ass.Prod.Id)) {
                                    InsAfterDel.Intra_Trade_List_RMB__c =
                                        ass.Prod.Intra_Trade_List_RMB__c *
                                        dealerPDiscountMap.get('' + contract[0].Id + ass.Prod.Id) /
                                        100;
                                }
                            } else if (methodType.equals('hospitalorder')) {
                                Consumable_order[0].orderPattern__c = 'hospitalorder';
                                //医院特价
                                Consumable_order[0].Order_ForHospital__c = hospitalId;
                                if (
                                    dealerHospitalmMap.containsKey(hospitalId + ass.Prod.Id) &&
                                    dealerHospitalmMap.get(hospitalId + ass.Prod.Id) != null
                                ) {
                                    //直接根据促销金额计算
                                    InsAfterDel.Intra_Trade_List_RMB__c = dealerHospitalmMap.get('' + hospitalId + ass.Prod.Id);
                                }
                            } else if (DealerProductMap.containsKey(ass.Prod.Id)) {
                                InsAfterDel.Intra_Trade_List_RMB__c = DealerProductMap.get(ass.Prod.Id).Special_Campaign_Price__c;
                                InsAfterDel.Purchase_Unitprtprice_From__c = '促销';
                                InsAfterDel.Special_Campaign_Price__c = DealerProductMap.get(ass.Prod.Id).Special_Campaign_Price__c;
                            }
                            // ==================================================之前的促销订货的逻辑
                            InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
                            i++;
                            Ins.add(InsAfterDel);
                        }
                    }
                }
                if (Ins.size() > 0) {
                    insert Ins;
                }
            }
            results.result = 'Success';
            results.eSetId = ESetId;
        } catch (Exception e) {
            Database.rollback(sp);
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    //删除附件
    @AuraEnabled
    public static Results deleteAtt(String contentVersionId, String cocId) {
        Results results = new Results();
        try {
            List<ContentVersion> cvInfo = [SELECT Id FROM ContentVersion WHERE FirstPublishLocationId = :cocId];
            ContentVersion conVersion = [SELECT ContentDocumentId FROM ContentVersion WHERE Id = :contentVersionId];
            String contentDocumentId = conVersion.ContentDocumentId;
            ContentDocument conDocument = [SELECT Id FROM ContentDocument WHERE Id = :contentDocumentId];
            delete conDocument;
            if (cvInfo.size() <= 1) {
                Consumable_order__c c = [SELECT Id FROM Consumable_order__c WHERE Id = :cocId];
                c.Consumable_pdf_insert_day__c = null;
                update c;
            }
            results.result = 'Success';
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }
    public static void getConsumableShowTableFieldValue() {
        for (ConsumableorderdetailsInfo con : consumableorderdetailsRecordsview) {
            if (con.Prod != null) {
                con.recordId = con.Prod.Id;
                if (!con.oldCheck) {
                    con.prodName = con.Prod.Name__c;
                    // System.debug('ProdName:'+con.Prod.Id+'---'+con.Prod.Name__c);
                }
                con.prodSFDAStatus = con.Prod.SFDA_Status__c;
                con.prodCategory3 = con.Prod.Category3__c;
                con.prodCategory4 = con.Prod.Category4__c;
                con.prodCategory5 = con.Prod.Category5__c;
                con.prodIntraTradeList = con.Prod.Intra_Trade_List_RMB__c;
            }
            if (con.esd != null) {
                // if(con.oldCheck){
                // con.prodName = con.esd.Consumable_Product__r.Name__c;
                // }
                con.consumableCount = con.esd.Consumable_count__c;
            }
        }
    }
    public class ConsumableorderdetailsInfo implements Comparable {
        @AuraEnabled
        public Boolean check { get; set; }
        @AuraEnabled
        public Boolean oldCheck { get; set; }
        @AuraEnabled
        public Consumable_Orderdetails__c esd { get; set; }
        @AuraEnabled
        public Product2__c Prod { get; set; }
        @AuraEnabled
        public Integer packing_list { get; set; }
        @AuraEnabled
        public Date expiration_Date { get; set; }
        @AuraEnabled
        public String approbation_No { get; set; }
        @AuraEnabled
        public Decimal allnumber { get; set; }
        @AuraEnabled
        public Decimal allnumber_piece { get; set; }
        @AuraEnabled
        public Decimal oldConsumableCount { get; set; }
        @AuraEnabled
        public Boolean canSelect { get; set; }
        @AuraEnabled
        public ContentVersion Concc { get; set; }
        @AuraEnabled
        public Boolean sortBy { get; set; }
        @AuraEnabled
        public Decimal upperlimit { get; set; }
        @AuraEnabled
        public Decimal lowerlimit { get; set; }
        @AuraEnabled
        public Decimal SpecialCampaignPrice { get; set; }
        @AuraEnabled
        public Decimal orderGoods_Limit { get; set; }
        @AuraEnabled
        public Date Campaign_EndDate { get; set; }
        @AuraEnabled
        public String recordId { get; set; }
        @AuraEnabled
        public String prodName { get; set; }
        @AuraEnabled
        public String prodSFDAStatus { get; set; }
        @AuraEnabled
        public String prodCategory3 { get; set; }
        @AuraEnabled
        public String prodCategory4 { get; set; }
        @AuraEnabled
        public String prodCategory5 { get; set; }
        @AuraEnabled
        public Decimal prodIntraTradeList { get; set; }
        @AuraEnabled
        public Decimal consumableCount { get; set; }
        // 已存产品明细
        public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) {
            check = true;
            oldCheck = true;
            esd = e;
            Prod = e.Consumable_Product__r;
            oldConsumableCount = e.Consumable_Count__c;
            canSelect = true;
            allnumber = 0;
            allnumber_piece = 0;
        }
        public ConsumableorderdetailsInfo(Product2__c e) {
            check = false;
            oldCheck = false;
            esd = new Consumable_Orderdetails__c();
            Prod = e;
            oldConsumableCount = null;
            canSelect = true;
            allnumber = 0;
            allnumber_piece = 0;
        }
        //附件
        // attachmentinfo = [SELECT Id, Name, OwnerId, Owner.Name FROM Attachment WHERE parentid = :ESetId];
        // if (attachmentinfo.size() > 0) {
        //     for (Integer i = 0; i < attachmentinfo.size(); i++) {
        //         attachmentRecoeds.add(new ConsumableorderdetailsInfo(attachmentinfo[i]));
        //     }
        // }
        List<ContentDocumentLink> links = [
          SELECT Id, ContentDocumentId
          FROM ContentDocumentLink
          WHERE LinkedEntityId = :ESetId
        ];
        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++) {
              attachmentRecoeds.add(new ConsumableorderdetailsInfo(cvInfo[i]));
            }
          }
        public ConsumableorderdetailsInfo(ContentVersion e) {
            Concc = e;
        }
        //
        consumableorderdetailsRecords.sort();
        getPageInfo();
      }
      //计算库存上、下限
      productLimtAndDate();
      lowerRecord();
      //明细排序
      List<String> upper = new List<String>();
      if (String.isNotBlank(ESetid)) {
        for (ConsumableorderdetailsInfo bss : consumableorderdetailsRecords) {
          if (
            bss.esd.Consumable_count__c != null &&
            bss.allnumber != null &&
            bss.upperlimit != null
          ) {
            if (bss.esd.Consumable_count__c + bss.allnumber > bss.upperlimit) {
              upper.add(bss.esd.Consumable_Product__r.Name__c);
            }
          }
        }
      }
      if (upper.size() > 0) {
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '存在以下产品订货数量超出库存上限!'));
        warningMsgList.add('存在以下产品订货数量超出库存上限!');
        for (Integer i = 0; i < upper.size(); i++) {
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, upper[i]));
          warningMsgList.add(upper[i]);
        }
      }
      if (lower.size() > 0) {
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '存在以下产品订货数量低于库存下限!'));
        warningMsgList.add('存在以下产品订货数量低于库存下限!');
        for (Integer i = 0; i < lower.size(); i++) {
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, lower[i]));
          warningMsgList.add(lower[i]);
        }
      }
      //价格查看权限
      Schema.DescribeFieldResult dfr = Product2__c.Intra_Trade_List_RMB__c.getDescribe();
      cansee = dfr.isAccessible();
      AggregateResult[] categoryList = [
        SELECT Count(id), Category3_text__c c3c
        FROM Product2__c
        WHERE
          Estimation_Entry_Possibility__c = '○'
          AND Product_Type__c LIKE :agencyProType
          AND Category3_text__c != NULL
        GROUP BY Category3_text__c
      ];
      //categoty3
      // categoryOptionList = new List<SelectOption>();
      category3Option = new List<CusOption>();
      // categoryOptionList.add(new SelectOption('', '-无-'));
      category3Option.add(new CusOption('-无-', ''));
      for (AggregateResult category3Search : categoryList) {
        String deliverycnt = String.valueOf(category3Search.get('c3c'));
        // categoryOptionList.add(new SelectOption(deliverycnt, deliverycnt));
        category3Option.add(new CusOption(deliverycnt, deliverycnt));
      }
      //categoty4
      // category4OptionList = new List<SelectOption>();
      category4Option = new List<CusOption>();
      // category4OptionList.add(new SelectOption('', '-无-'));
      category4Option.add(new CusOption('-无-', ''));
      //categoty5
      // category5OptionList = new List<SelectOption>();
      category5Option = new List<CusOption>();
      // category5OptionList.add(new SelectOption('', '-无-'));
      category5Option.add(new CusOption('-无-', ''));
      //return msg
      consumableorderdetailsRecordsview = consumableorderdetailsRecords;
      getConsumableShowTableFieldValue();
      results.result = 'Success';
      results.coc = coc;
      results.editAble = editAble;
      results.edoffersPrice = edoffersPrice;
      results.editDelCommitBtnDisabled = EditDelCommitBtnDisabled;
      results.category3Option = category3Option;
      results.category4Option = category4Option;
      results.category5Option = category5Option;
      results.hospitalName = hospitalName;
      results.contractName = contractName;
      results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
      results.attachmentRecoeds = attachmentRecoeds;
      results.cansee = cansee;
      results.agencyProType = agencyProType;
      results.agencyProType1 = agencyProType1;
      results.OSHFLG = OSHFLG;
      results.userWorkLocation = userWorkLocation;
      results.accountName = accountName;
      results.category_Goods = category_Goods;
      results.specialCampaign = specialCampaign;
      results.dealerProductId = DealerProductId;
      results.accountid = accountid;
      results.hospitalId = hospitalId;
      results.contractId = contractId;
      results.contactDealer = contactDealer;
      results.errorMsgList = errorMsgList;
      results.warningMsgList = warningMsgList;
      results.methodType = methodType;
      results.proLimitAndDate = proLimitAndDate;
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  @AuraEnabled
  public static Results categoryAllload(
    String agencyProTypeStr,
    String category3Str
  ) {
    Results results = new Results();
    agencyProType = agencyProTypeStr;
    category3 = category3Str;
    try {
      AggregateResult[] category4List = [
        SELECT Count(id), Category4_text__c c4c
        FROM Product2__c
        WHERE
          Estimation_Entry_Possibility__c = '○'
          AND Product_Type__c LIKE :agencyProType
          AND Category3_text__c = :category3
          AND Category4_text__c != NULL
          AND Category5_text__c != NULL
        GROUP BY Category4_text__c
      ];
      // category4OptionList = new List<SelectOption>();
      category4Option = new List<CusOption>();
      // category4OptionList.add(new SelectOption('', '-无-'));
      category4Option.add(new CusOption('-无-', ''));
      for (AggregateResult category4Search : category4List) {
        String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
        // category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
        category4Option.add(new CusOption(deliverycnt4, deliverycnt4));
      }
      AggregateResult[] category5List = [
        SELECT Count(id), Category5_text__c c5c
        FROM Product2__c
        WHERE
          Estimation_Entry_Possibility__c = '○'
          AND Product_Type__c LIKE :agencyProType
          AND Category3_text__c = :category3
          AND Category4_text__c != NULL
          AND Category5_text__c != NULL
        GROUP BY Category5_text__c
      ];
      // category5OptionList = new List<SelectOption>();
      category5Option = new List<CusOption>();
      // category5OptionList.add(new SelectOption('', '-无-'));
      category5Option.add(new CusOption('-无-', ''));
      for (AggregateResult category5Search : category5List) {
        String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
        // category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
        category5Option.add(new CusOption(deliverycnt5, deliverycnt5));
      }
      results.category4Option = category4Option;
      results.category5Option = category5Option;
      results.result = 'Success';
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  @AuraEnabled
  public static Results categoryload(
    String agencyProTypeStr,
    String category3Str,
    String category4Str
  ) {
    Results results = new Results();
    agencyProType = agencyProTypeStr;
    category3 = category3Str;
    category4 = category4Str;
    try {
      AggregateResult[] category4List = [
        SELECT Count(id), Category4_text__c c4c
        FROM Product2__c
        WHERE
          Estimation_Entry_Possibility__c = '○'
          AND Product_Type__c LIKE :agencyProType
          AND Category3_text__c = :category3
          AND Category4_text__c != NULL
          AND Category5_text__c != NULL
        GROUP BY Category4_text__c
      ];
      // category4OptionList = new List<SelectOption>();
      category4Option = new List<CusOption>();
      // category4OptionList.add(new SelectOption('', '-无-'));
      category4Option.add(new CusOption('-无-', ''));
      for (AggregateResult category4Search : category4List) {
        String deliverycnt4 = String.valueOf(category4Search.get('c4c'));
        // category4OptionList.add(new SelectOption(deliverycnt4, deliverycnt4));
        category4Option.add(new CusOption(deliverycnt4, deliverycnt4));
      }
      AggregateResult[] category5List = [
        SELECT Count(id), Category5_text__c c5c
        FROM Product2__c
        WHERE
          Estimation_Entry_Possibility__c = '○'
          AND Product_Type__c LIKE :agencyProType
          AND Category3_text__c = :category3
          AND Category4_text__c = :category4
          AND Category5_text__c != NULL
        GROUP BY Category5_text__c
      ];
      // category5OptionList = new List<SelectOption>();
      category5Option = new List<CusOption>();
      // category5OptionList.add(new SelectOption('', '-无-'));
      category5Option.add(new CusOption('-无-', ''));
      for (AggregateResult category5Search : category5List) {
        String deliverycnt5 = String.valueOf(category5Search.get('c5c'));
        // category5OptionList.add(new SelectOption(deliverycnt5, deliverycnt5));
        category5Option.add(new CusOption(deliverycnt5, deliverycnt5));
      }
      results.category4Option = category4Option;
      results.category5Option = category5Option;
      results.result = 'Success';
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  // 画面初始化
  public static void lowerRecord() {
    List<ConsumableorderdetailsInfo> lowerRecord = new List<ConsumableorderdetailsInfo>();
    //库存明细取得
    Map<String, ConsumableorderdetailsInfo> midMaprecord = new Map<String, ConsumableorderdetailsInfo>();
    List<Product2__c> product2Selected = [
      SELECT Id, Name, Name__c, Intra_Trade_List_RMB__c, Asset_Model_No__c
      FROM Product2__c
      WHERE
        Pro2_Dealer_Object__c = TRUE
        AND Estimation_Entry_Possibility__c = '○'
    ];
    for (Integer i = 0; i < product2Selected.size(); i++) {
      lowerRecord.add(new ConsumableorderdetailsInfo(product2Selected[i]));
      //先把ConsumableorderdetailsRecords 做成map
      midMaprecord.put(
        product2Selected[i].Id,
        new ConsumableorderdetailsInfo(product2Selected[i])
      );
    }
    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,
        Guarantee_period_for_products__c,
        Isoverdue__c,
        Box_Piece__c,
        hospitalSpecialOffer__c,
        promotionorder__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 Consumable_order_minor__r.Dealer_Info__c = :accountid
        AND Dealer_Info_text__c = :accountName
    ];
    for (Integer i = 0; i < countDel.size(); i++) {
      //add by rentx 2020-12-09
      if (String.isNotBlank(methodType) && methodType.equals('hospitalorder')) {
        if (countDel[i].hospitalSpecialOffer__c == true) {
          //然后循环CountDel去修改map里的allnumber
          if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
            ConsumableorderdetailsInfo Jstage = midMaprecord.get(
              countDel[i].Consumable_Product__c
            );
            if (countDel[i].Box_Piece__c == '盒') {
              Jstage.allnumber = Jstage.allnumber + 1;
            } else {
              Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            }
            //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
            midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
          }
        }
      } else if (
        String.isBlank(methodType) || methodType.equals('promotionorder')
      ) {
        if (countDel[i].promotionorder__c == true) {
          if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
            ConsumableorderdetailsInfo Jstage = midMaprecord.get(
              countDel[i].Consumable_Product__c
            );
            if (countDel[i].Box_Piece__c == '盒') {
              Jstage.allnumber = Jstage.allnumber + 1;
            } else {
              Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            }
            midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
          }
        }
      } else if (
        String.isBlank(methodType) ||
        (!methodType.equals('promotionorder') &&
        !methodType.equals('hospitalorder'))
      ) {
        if (
          countDel[i].promotionorder__c == false &&
          countDel[i].hospitalSpecialOffer__c == false
        ) {
          if (midMaprecord.containsKey(countDel[i].Consumable_Product__c)) {
            ConsumableorderdetailsInfo Jstage = midMaprecord.get(
              countDel[i].Consumable_Product__c
            );
            if (countDel[i].Box_Piece__c == '盒') {
              Jstage.allnumber = Jstage.allnumber + 1;
            } else {
              Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
            }
            midMaprecord.put(countDel[i].Consumable_Product__c, Jstage);
          }
        }
      }
    }
    lowerRecord = new List<ConsumableorderdetailsInfo>();
    //再把map里的值从新赋给ConsumableorderdetailsRecords
    for (ConsumableorderdetailsInfo bss : midMaprecord.values()) {
      lowerRecord.add(bss);
    }
    allProductLimt(lowerRecord);
    for (ConsumableorderdetailsInfo bss : lowerRecord) {
      if (bss.allnumber < bss.lowerlimit) {
        lower.add(bss.Prod.Name__c);
      }
    }
  }
  //库存上下限
  public static void productLimtAndDate() {
    String nowName = null, nowRightAsstModelNo = null;
    Map<String, String> productLimt = new Map<String, String>();
    for (Integer i = 0; i < proLimitAndDate.size(); i++) {
      nowName = proLimitAndDate[i];
      if (nowName.indexOf('|') >= 0) {
        nowRightAsstModelNo = nowName.subString(0, nowName.indexOf('|'));
        nowName = nowName.subString(nowName.indexOf('|') + 1);
      }
      productLimt.put(nowRightAsstModelNo, nowName);
    }
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
      if (productLimt.containsKey(ass.Prod.Asset_Model_No__c)) {
        ass.lowerlimit = decimal.valueOf(
          productLimt.get(ass.Prod.Asset_Model_No__c)
            .subString(
              0,
              productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|')
            )
        );
        ass.upperlimit = decimal.valueOf(
          productLimt.get(ass.Prod.Asset_Model_No__c)
            .subString(
              productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|') + 1
            )
        );
      }
    }
  }
  //全部库存上下限
  private static void allProductLimt(
    List<ConsumableorderdetailsInfo> lowerRecord
  ) {
    String nowName = null, nowRightAsstModelNo = null;
    Map<String, String> productLimt = new Map<String, String>();
    for (Integer i = 0; i < proLimitAndDate.size(); i++) {
      nowName = proLimitAndDate[i];
      if (nowName.indexOf('|') >= 0) {
        nowRightAsstModelNo = nowName.subString(0, nowName.indexOf('|'));
        nowName = nowName.subString(nowName.indexOf('|') + 1);
      }
      productLimt.put(nowRightAsstModelNo, nowName);
    }
    for (ConsumableorderdetailsInfo ass : lowerRecord) {
      if (productLimt.containsKey(ass.Prod.Asset_Model_No__c)) {
        ass.lowerlimit = decimal.valueOf(
          productLimt.get(ass.Prod.Asset_Model_No__c)
            .subString(
              0,
              productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|')
            )
        );
        ass.upperlimit = decimal.valueOf(
          productLimt.get(ass.Prod.Asset_Model_No__c)
            .subString(
              productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|') + 1
            )
        );
      }
    }
  }
  @AuraEnabled
  public static Results searchConsumableorderdetails(
    String userWorkLocationStr,
    String agencyProTypeStr,
    String accountNameStr,
    String accountIdStr,
    String hospitalIdStr,
    String contractIdStr,
    String category1Str,
    String category3Str,
    String category4Str,
    String category5Str,
    String category_GoodStr,
    Boolean specialCampaignStr,
    String dealerProductIdStr,
    String methodTypeStr,
    String consumableorderdetailsRecordsviewStr,
    Boolean editAbleStr,
    List<String> proLimitAndDateList
  ) {
    Results results = new Results();
    errorMsgList = new List<String>();
    warningMsgList = new List<String>();
    userWorkLocation = userWorkLocationStr;
    agencyProType = agencyProTypeStr;
    accountName = accountNameStr;
    accountid = accountIdStr;
    hospitalId = hospitalIdStr;
    contractId = contractIdStr;
    category1 = category1Str;
    category3 = category3Str;
    category4 = category4Str;
    category5 = category5Str;
    category_Goods = category_GoodStr;
    specialCampaign = specialCampaignStr;
    methodType = methodTypeStr;
    editAble = editAbleStr;
    proLimitAndDate = proLimitAndDateList;
    dealerProductId = (List<String>) JSON.deserialize(
      dealerProductIdStr,
      List<String>.class
    );
    consumableorderdetailsRecordsview = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      consumableorderdetailsRecordsviewStr,
      List<ConsumableorderdetailsInfo>.class
    );
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
    try {
      searchDone = 'searchDone';
      sortKey = '1';
      preSortKey = '1';
      sortOrderAsc = false;
      sortOrder = new String[7];
      sortOrder = new List<String>{ ' ', ' ', ' ', ' ', '↓', '', '', '' };
      Map<String, String> selectedIdMap = new Map<String, String>();
      List<ConsumableorderdetailsInfo> derdetailsRecords = new List<ConsumableorderdetailsInfo>();
      Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
      List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
      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,
          //add by rentx 2020-12-09
          hospitalSpecialOffer__c,
          promotionorder__c
        //add by rentx 2020-12-09
        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 Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Dealer_Info_text__c = :accountName
      ];
      List<Product2__c> product2Selected = new List<Product2__c>();
      consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
      soql = makeSoql(
        category1,
        category_Goods,
        category3,
        category4,
        category5,
        specialCampaign,
        DealerProductId
      );
      size = Integer.valueOf(System.Label.orderdetLimitsize);
      initStandardController();
      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++) {
        //然后循环CountDel去修改map里的allnumber
        if (
          String.isNotBlank(methodType) && methodType.equals('hospitalorder')
        ) {
          if (countDel[i].hospitalSpecialOffer__c == true) {
            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
              ConsumableorderdetailsInfo Jstage = MidMap.get(
                countDel[i].Consumable_Product__c
              );
              if (countDel[i].Box_Piece__c == '盒') {
                Jstage.allnumber = Jstage.allnumber + 1;
              } else {
                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
              }
              MidMap.put(countDel[i].Consumable_Product__c, Jstage);
            }
          }
        } else if (
          String.isBlank(methodType) || methodType.equals('promotionorder')
        ) {
          if (countDel[i].promotionorder__c == true) {
            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
              ConsumableorderdetailsInfo Jstage = MidMap.get(
                countDel[i].Consumable_Product__c
              );
              if (countDel[i].Box_Piece__c == '盒') {
                Jstage.allnumber = Jstage.allnumber + 1;
              } else {
                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
              }
              MidMap.put(countDel[i].Consumable_Product__c, Jstage);
            }
          }
        } else if (
          String.isBlank(methodType) ||
          (!methodType.equals('promotionorder') &&
          !methodType.equals('hospitalorder'))
        ) {
          if (
            countDel[i].promotionorder__c == false &&
            countDel[i].hospitalSpecialOffer__c == false
          ) {
            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
              ConsumableorderdetailsInfo Jstage = MidMap.get(
                countDel[i].Consumable_Product__c
              );
              if (countDel[i].Box_Piece__c == '盒') {
                Jstage.allnumber = Jstage.allnumber + 1;
              } else {
                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
              }
              MidMap.put(countDel[i].Consumable_Product__c, Jstage);
            }
          }
        }
      }
      //再把map里的值从新赋给ConsumableorderdetailsRecordsa0l0l0000000byXAAQ
      for (ConsumableorderdetailsInfo bss : MidMap.values()) {
        if (selectedIdMap.containsKey(bss.Prod.id)) {
          continue;
        } else {
          if (DealerProductMap.containsKey(bss.Prod.Id)) {
            bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id)
              .Special_Campaign_Price__c;
            bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id)
              .Campaign_EndDate__c;
            bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id)
              .OrderGoods_Limit__c;
          }
          bss.sortBy = sortOrderAsc;
          bss.packing_list = 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;
          consumableorderdetailsRecords.add(bss);
        }
      }
      consumableorderdetailsRecords.sort();
      productLimtAndDate();
      getPageInfo();
      sortKey = '1';
      preSortKey = '1';
      sortOrderAsc = false;
      sortOrder = new String[7];
      sortOrder = new List<String>{ '  ', '  ', ' ', '', '', '', '', '' };
      cate1ForSort = category1;
      // 显示数据条数信息
      // makeMessage();
      results.errorMsgList = errorMsgList;
      results.warningMsgList = warningMsgList;
      if (consumableorderdetailsRecords.size() > 0) {
        getConsumableShowTableFieldValue();
        results.result = 'Success';
        results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
        results.errorMsg =
          '搜索到' +
          consumableorderdetailsRecords.size() +
          '件产品';
      } else {
        getConsumableShowTableFieldValue();
        results.result = 'Fail';
        results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
        results.errorMsg = '没有搜索到相关数据';
      }
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  //医院--检索
  @AuraEnabled
  public static Results searchorderdetails(
    String methodTypeStr,
    String accountIdStr,
    String hospitalIdStr,
    String contractIdStr,
    String userWorkLocationStr,
    String accountNameStr,
    List<String> proLimitAndDateList,
    Boolean editAbleStr
  ) {
    Results results = new Results();
    methodType = methodTypeStr;
    accountId = accountIdStr;
    hospitalId = hospitalIdStr;
    contractId = contractIdStr;
    userWorkLocation = userWorkLocationStr;
    accountName = accountNameStr;
    proLimitAndDate = proLimitAndDateList;
    editAble = editAbleStr;
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
    try {
      soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
      if (methodType.equals('hospitalorder')) {
        //医院id 有值
        List<hospitalprice__c> hplist = [
          SELECT id, product__c
          FROM hospitalprice__c
          WHERE account__c = :accountid AND hospital__c = :hospitalId
        ];
        if (hplist != null && hplist.size() > 0) {
          List<String> hpids = new List<String>();
          for (hospitalprice__c hc : hplist) {
            hpids.add(hc.product__c);
          }
          if (hpids != null && hpids.size() > 0) {
            soql += ' AND Id in : hpids ';
          }
        } else {
          //该医院下没有符合医院特价的产品
          soql += ' AND Id = null ';
        }
      } else if (methodType.equals('promotionorder')) {
        List<Dealer_Product__c> dpclist = [
          SELECT Id, Dealer_Product2__c
          FROM Dealer_Product__c
          WHERE
            Dealer_Contact__c = :contractId
            AND (Special_Discount__c != NULL
            OR Special_Campaign_Price__c != NULL)
        ];
        if (dpclist != null && dpclist.size() > 0) {
          String ids = '(';
          for (Dealer_Product__c hc : dpclist) {
            hpids.add(hc.Dealer_Product2__c);
            ids += '\'' + hc.Dealer_Product2__c + '\',';
          }
          ids = ids.substring(0, ids.length() - 1) + ')';
          if (hpids != null && hpids.size() > 0) {
            // soql += ' AND Id in : hpids ';
            soql += ' AND Id in ' + ids;
          }
        } else {
          //该经销商下没有促销价格的产品
          soql += ' AND Id = null ';
        }
      }
      size = Integer.valueOf(System.Label.orderdetLimitsize);
      initStandardController();
      List<Product2__c> product2Selected = new List<Product2__c>();
      Map<String, ConsumableorderdetailsInfo> MidMap = new Map<String, ConsumableorderdetailsInfo>();
      Map<String, String> selectedIdMap = new Map<String, String>();
      consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
      product2Selected = Database.query(soql);
      for (Integer i = 0; i < product2Selected.size(); i++) {
        MidMap.put(
          product2Selected[i].Id,
          new ConsumableorderdetailsInfo(product2Selected[i])
        );
      }
      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,
          hospitalSpecialOffer__c,
          promotionorder__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 Arrive_Owner_Work_Location__c = :userWorkLocation
          //AND Consumable_order_minor__r.Dealer_Info__c = :accountid
          AND Dealer_Info_text__c = :accountName
      ];
      for (Integer i = 0; i < countDel.size(); i++) {
        if (methodType.equals('hospitalorder')) {
          if (countDel[i].hospitalSpecialOffer__c == true) {
            //然后循环CountDel去修改map里的allnumber
            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
              ConsumableorderdetailsInfo Jstage = MidMap.get(
                countDel[i].Consumable_Product__c
              );
              if (countDel[i].Box_Piece__c == '盒') {
                Jstage.allnumber = Jstage.allnumber + 1;
              } else {
                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
              }
              //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
              MidMap.put(countDel[i].Consumable_Product__c, Jstage);
            }
          }
        } else if (methodType.equals('promotionorder')) {
          if (countDel[i].promotionorder__c == true) {
            //然后循环CountDel去修改map里的allnumber
            if (MidMap.containsKey(countDel[i].Consumable_Product__c)) {
              ConsumableorderdetailsInfo Jstage = MidMap.get(
                countDel[i].Consumable_Product__c
              );
              if (countDel[i].Box_Piece__c == '盒') {
                Jstage.allnumber = Jstage.allnumber + 1;
              } else {
                Jstage.allnumber_piece = Jstage.allnumber_piece + 1;
              }
              //Jstage.BoxPiece = CountDel[i].Box_Piece__c;
              MidMap.put(countDel[i].Consumable_Product__c, Jstage);
            }
          }
        }
      }
      //再把map里的值从新赋给ConsumableorderdetailsRecordsa0l0l0000000byXAAQ
      for (ConsumableorderdetailsInfo bss : MidMap.values()) {
        if (selectedIdMap.containsKey(bss.Prod.id)) {
          continue;
        } else {
          if (DealerProductMap.containsKey(bss.Prod.Id)) {
            bss.SpecialCampaignPrice = DealerProductMap.get(bss.Prod.Id)
              .Special_Campaign_Price__c;
            bss.Campaign_EndDate = DealerProductMap.get(bss.Prod.Id)
              .Campaign_EndDate__c;
            bss.orderGoods_Limit = DealerProductMap.get(bss.Prod.Id)
              .OrderGoods_Limit__c;
          }
          bss.sortBy = sortOrderAsc;
          bss.packing_list = 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;
          consumableorderdetailsRecords.add(bss);
        }
      }
      consumableorderdetailsRecords.sort();
      productLimtAndDate();
      getPageInfoForHos();
      sortKey = '1';
      preSortKey = '1';
      sortOrderAsc = false;
      sortOrder = new String[7];
      sortOrder = new List<String>{ '  ', '  ', ' ', '', '', '', '', '' };
      cate1ForSort = category1;
      // 显示数据条数信息
      noOfRecords = consumableorderdetailsRecords.size();
      getConsumableShowTableFieldValue();
      results.consumableorderdetailsRecordsview = consumableorderdetailsRecordsview;
      if (consumableorderdetailsRecordsview.size() > 0) {
        results.result = 'Success';
        results.errorMsg =
          '共搜索到' +
          consumableorderdetailsRecordsview.size() +
          '条数据';
      } else {
        results.result = 'Fail';
        results.errorMsg = '没有搜索到相关数据';
      }
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  //用户切换医院时取消选中的产品
  private static List<ConsumableorderdetailsInfo> getPageInfoForHos() {
    List<ConsumableorderdetailsInfo> reSet = new List<ConsumableorderdetailsInfo>();
    Map<String, String> selectedIdMap = new Map<String, String>();
    consumableorderdetailsRecordsview = new List<ConsumableorderdetailsInfo>();
    if (editAble) {
      consumableorderdetailsRecordsview = reSet;
    }
    Integer pagestartNo = (con.getPageNumber() * size) - size;
    Integer pageendNo = (con.getPageNumber() * size) > noOfRecords
      ? noOfRecords
      : (con.getPageNumber() * size - 1);
    Integer addNo = 0;
    for (
      Integer i = pagestartNo; i < consumableorderdetailsRecords.size(); i++
    ) {
      Consumable_Orderdetails__c orderdetails1 = new Consumable_Orderdetails__c();
      if (selectedIdMap.containsKey(consumableorderdetailsRecords[i].Prod.Id)) {
        addNo++;
        //continue;
      }
      // else if (consumableorderdetailsRecordsview.size() >= pageLimit + size) {
      //     break;
      // }
      else {
        if (consumableorderdetailsRecords[i].check == false) {
          consumableorderdetailsRecords[i].esd = orderdetails1;
        }
        consumableorderdetailsRecordsview.add(consumableorderdetailsRecords[i]);
        addNo++;
      }
      // if (addNo >= size){
      //     break;
      // }
    }
    return consumableorderdetailsRecordsview;
  }
  //add by rentx 2020-12-03 end =====================================================================================================================
  //特价
  public static void OffersPrice() {
    edoffersPrice = true;
  }
  //得到促销产品Id
  private static List<String> getDealerProductId() {
    List<String> ProductId = new List<String>();
    Map<String, String> DealerProductIdMap = new Map<String, String>();
    Date dateToday = Date.today();
    List<Dealer_Product__c> DealerProductList = [
      SELECT
        Id,
        Name,
        Dealer_Product2__c,
        Special_Campaign_Price__c,
        Campaign_StartDate__c,
        Campaign_EndDate__c,
        Dealer_Contact__c,
        OrderGoods_Limit__c
      FROM Dealer_Product__c
      WHERE
        Dealer_Contact__c IN :contactDealer
        AND Campaign_StartDate__c <= :dateToday
        AND Campaign_EndDate__c >= :dateToday
        AND Special_Campaign_Price__c != NULL
    ];
    for (Dealer_Product__c dealerProduct : DealerProductList) {
      if (DealerProductIdMap.containsKey(dealerProduct.Dealer_Product2__c)) {
        continue;
      } else {
        ProductId.add(dealerProduct.Dealer_Product2__c);
        DealerProductIdMap.put(
          dealerProduct.Dealer_Product2__c,
          dealerProduct.Dealer_Product2__c
        );
      }
    }
    return ProductId;
  }
  private static String makeSoql(
    String CateName,
    String CateCode,
    String Category3,
    String Category4,
    String Category5,
    Boolean specialCampaign,
    List<String> DealerProductId
  ) {
    String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
    // add begin ================================================================================================
    if (methodType != null && methodType.equals('hospitalorder')) {
      //如果是医院特价
      //1.判断 医院id是否有值 如果有值 则根据医院id去 医院特价表中获取产品id
      //医院id 有值
      if (hospitalId == null || hospitalId == '') {
        soql += ' and id = null ';
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '请选择医院'));
        warningMsgList.add('请选择医院');
      } else {
        List<hospitalprice__c> hplist = [
          SELECT id, product__c
          FROM hospitalprice__c
          WHERE account__c = :accountid AND hospital__c = :hospitalId
        ];
        if (hplist != null && hplist.size() > 0) {
          hpids = new List<String>();
          for (hospitalprice__c hc : hplist) {
            hpids.add(hc.product__c);
          }
          if (hpids != null && hpids.size() > 0) {
            soql += ' AND Id in : hpids ';
          }
        } else {
          //该医院下没有符合医院特价的产品
          soql += ' AND Id = null ';
          return soql;
        }
      }
    }
    //促销订货
    if (methodType != null && methodType.equals('promotionorder')) {
      if (contractId == null || contractId == '') {
        soql += ' and id = null ';
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '请选择合同'));
        warningMsgList.add('请选择合同');
      } else {
        //1.查询所有经销商产品
        List<Dealer_Product__c> dpclist = [
          SELECT Id, Dealer_Product2__c
          FROM Dealer_Product__c
          WHERE
            Dealer_Contact__c = :contractId
            AND (Special_Discount__c != NULL
            OR Special_Campaign_Price__c != NULL)
        ];
        if (dpclist != null && dpclist.size() > 0) {
          hpids = new List<String>();
          for (Dealer_Product__c hc : dpclist) {
            hpids.add(hc.Dealer_Product2__c);
          }
          if (hpids != null && hpids.size() > 0) {
            soql += ' AND Id in : hpids ';
          }
        } else {
          //该经销商下没有促销价格的产品
          soql += ' AND Id = null ';
          return soql;
        }
      }
    }
    //add end ===================================================================================================
    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 + '\'';
    }
    if (agencyProType == 'ET') {
      soql += ' AND Pro2_Dealer_Object__c = true';
    }
    if (agencyProType == 'ENG') {
      soql += ' AND Pro2_Dealer_ENG__c = true';
    }
    soql += ' AND Intra_Trade_List_RMB__c > 0 ';
    System.debug('soql +++++++++++  ' + soql);
    return soql;
  }
  private 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] + '\')';
      }
    }
    String soql = 'SELECT Id, Name,Name__c,Intra_Trade_List_RMB__c,Asset_Model_No__c,SFDA_Status__c,Product2__r.SFDA_Approbation_No__c,Product2__r.SFDA_Expiration_Date__c,Product2__r.Packing_list_manual__c,Category3__c,Category4__c,Category5__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\' ';
    System.debug('sqlTail:' + sqlTail);
    System.debug('orderzaikuId:' + orderzaikuId);
    if (orderzaikuId.size() > 0) {
      soql += ' AND Id in' + sqlTail;
    }
    return soql;
  }
  // 编辑按钮
  @AuraEnabled
  public static Results setEditAble(String eSetidStr) {
    Results results = new Results();
    ESetId = eSetidStr;
    try {
      statusEdit = 'Redirect';
      List<Consumable_order__c> oclist = [
        SELECT orderPattern__c
        FROM Consumable_order__c
        WHERE id = :ESetid
      ];
      String url =
        '/lexconsumable?ESetid=' +
        ESetid +
        '&KeyWords=' +
        statusEdit +
        '&type=' +
        oclist.get(0).orderPattern__c;
      results.result = 'Success';
      results.url = url;
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  // 再申请
  @AuraEnabled
  public static Results backOrder(String eSetidStr) {
    Results results = new Results();
    ESetId = eSetidStr;
    statusEdit = 'Redirect';
    returnOrder = true;
    try {
      statusEdit = 'Redirect';
      List<Consumable_order__c> oclist = [
        SELECT orderPattern__c
        FROM Consumable_order__c
        WHERE id = :ESetid
      ];
      String url =
        '/lexconsumable?ESetid=' +
        ESetid +
        '&KeyWords=' +
        statusEdit +
        '&type=' +
        oclist.get(0).orderPattern__c;
      results.result = 'Success';
      results.url = url;
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  //上传附件
  @AuraEnabled
  public static Results filesUpload(
    String pId,
    String fileName,
    String base64Data
  ) {
    Results results = new Results();
    try {
      base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8');
      ContentVersion cv = new ContentVersion();
      cv.Title = fileName;
      cv.PathOnClient = '/' + fileName;
      cv.FirstPublishLocationId = pId;
      cv.VersionData = EncodingUtil.base64Decode(base64Data);
      cv.IsMajorVersion = true;
      insert cv;
      Consumable_order__c c = [
        SELECT Id
        FROM Consumable_order__c
        WHERE Id = :pId
      ];
      c.Consumable_pdf_insert_day__c = Date.today();
      update c;
      results.result = 'Success';
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  //删除按钮
  @AuraEnabled
  public static Results delConsumable(String eSetidStr) {
    Results results = new Results();
    ESetId = eSetidStr;
    try {
      Consumable_order__c cord = new Consumable_order__c(Id = ESetId);
      List<Consumable_Orderdetails__c> orderdetails1 = [
        SELECT Id
        FROM Consumable_Orderdetails__c
        WHERE Consumable_order__c = :EsetId
      ];
      delete orderdetails1;
      delete cord;
      results.result = 'Success';
      results.url = '/lexconsumableordermanage';
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  // 提交按钮
  @AuraEnabled
  public static Results sorder(String eSetidStr, String accountidStr) {
    Results results = new Results();
    errorMsgList = new List<String>();
    warningMsgList = new List<String>();
    ESetId = eSetidStr;
    accountid = accountidStr;
    Savepoint sp = Database.setSavepoint();
    try {
      Map<Id, String> prodMap = new Map<Id, String>();
      Consumable_order__c P = new Consumable_order__c();
      P = new Consumable_order__c();
      p.Id = ESetId;
      p.Order_date__c = Date.today();
      p.Order_status__c = '附件上传完成';
      for (Consumable_Orderdetails__c cod1 : [
        SELECT Consumable_product__r.Product2__c, Consumable_product__r.Name__c
        FROM Consumable_Orderdetails__c
        WHERE Consumable_order__c = :ESetId
      ]) {
        prodMap.put(
          cod1.Consumable_product__r.Product2__c,
          cod1.Consumable_product__r.Name__c
        );
      }
      // GZW 提交产品无效 出错误消息
      System.debug(prodMap);
      Map<String, String> chkMap = OpportunityWebService.MapCheckProRegisterDecide(
        prodMap,
        accountid,
        ''
      );
      System.debug(chkMap);
      if (chkMap.size() > 0) {
        if (chkMap.containsKey('agency')) {
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '第一经销商没有有效的医疗器械经营许可证。'));
          errorMsgList.add('第一经销商没有有效的医疗器械经营许可证。');
        }
        for (String proId : prodMap.keySet()) {
          if (chkMap.containsKey(proId)) {
            if (chkMap.get(proId) == '1') {
              // ApexPages.addmessage(
              //     new ApexPages.message(ApexPages.severity.Error, '产品 ' + prodMap.get(proId) + ' 没有有效的注册证。')
              // );
              errorMsgList.add(
                '产品 ' + prodMap.get(proId) + ' 没有有效的注册证。'
              );
            } else if (chkMap.get(proId) == '2') {
              // ApexPages.addmessage(
              //     new ApexPages.message(ApexPages.severity.Error, '产品 ' + prodMap.get(proId) + ' 超过经销商经营范围。')
              // );
              errorMsgList.add(
                '产品 ' + prodMap.get(proId) + ' 超过经销商经营范围。'
              );
            }
          }
        }
        results.result = 'Fail';
        results.errorMsg = '';
        results.errorMsgList = errorMsgList;
        results.warningMsgList = warningMsgList;
        return results;
      }
      update p;
      Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
      psr.setObjectId(ESetId);
      Approval.ProcessResult submitResult = Approval.process(psr);
      results.result = 'Success';
      results.url = '/lexconsumableordermanage';
    } catch (Exception e) {
      Database.rollback(sp);
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  // 驳回订单copy
  @AuraEnabled
  public static Results ordrCopy(
    String contractNameStr,
    String cocStr,
    String agencyProTypeStr,
    String accountidStr,
    String consumableorderdetailsRecordsviewStr,
    String contactDealerStr,
    String methodTypeStr,
    String hospitalIdStr,
    String contractIdStr,
    String agencyProType1Str,
    Boolean OSHFLGStr
  ) {
    ESetId = '';
    return save(
      contractNameStr,
      cocStr,
      agencyProTypeStr,
      accountidStr,
      consumableorderdetailsRecordsviewStr,
      contactDealerStr,
      methodTypeStr,
      ESetId,
      hospitalIdStr,
      contractIdStr,
      agencyProType1Str,
      OSHFLGStr
    );
  }
  //保存按钮
  @AuraEnabled
  public static Results save(
    String contractNameStr,
    String cocStr,
    String agencyProTypeStr,
    String accountidStr,
    String consumableorderdetailsRecordsviewStr,
    String contactDealerStr,
    String methodTypeStr,
    String eSetIdStr,
    String hospitalIdStr,
    String contractIdStr,
    String agencyProType1Str,
    Boolean OSHFLGStr
  ) {
    Results results = new Results();
    errorMsgList = new List<String>();
    warningMsgList = new List<String>();
    contractName = contractNameStr;
    agencyProType = agencyProTypeStr;
    accountid = accountidStr;
    methodType = methodTypeStr;
    ESetId = eSetIdStr;
    hospitalId = hospitalIdStr;
    contractId = contractIdStr;
    agencyProType1 = agencyProType1Str;
    OSHFLG = OSHFLGStr;
    coc = (Consumable_order__c) JSON.deserialize(
      cocStr,
      Consumable_order__c.class
    );
    contactDealer = (List<String>) JSON.deserialize(
      contactDealerStr,
      List<String>.class
    );
    System.debug(
      'consumableorderdetailsRecordsviewStr:' +
      consumableorderdetailsRecordsviewStr
    );
    consumableorderdetailsRecordsview = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      consumableorderdetailsRecordsviewStr,
      List<ConsumableorderdetailsInfo>.class
    );
    if (coc.Offers_Price__c != null) {
      String offerStr = String.valueOf(coc.Offers_Price__c);
      bargainPrice = Decimal.valueOf(offerStr.replace(',', ''));
    }
    Savepoint sp = Database.setSavepoint();
    try {
      if (String.isEmpty(contractName)) {
        // coc.Order_effective_contact__c.addError('请选择合同');
        results.result = 'Fail';
        results.errorMsg = '请选择合同';
        return results;
      }
      List<Account> contract = [
        SELECT
          Id,
          Name,
          Contract_Department_Class__c,
          Contract_Quote_Decide_Flag__c
        FROM account
        WHERE
          Name = :contractName
          AND Id = :contractId //lt 20230517 安徽两票制 add
          AND Contract_Decide_Start_Date__c <= :Date.Today()
          AND Contract_Decide_End_Date__c >= :Date.Today()
          AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add 1
          AND Agent_Ref__c = :accountid
          AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
      ];
      if (contract.size() <= 0) {
        // coc.Order_effective_contact__c.addError('不存在的合同,请重新确认。');
        results.result = 'Fail';
        results.errorMsg = '不存在的合同,请重新确认。';
        return results;
      } else {
        if (String.isEmpty(contract[0].Contract_Quote_Decide_Flag__c)) {
          // coc.Order_effective_contact__c.addError('合同无效,请重新确认。');
          results.result = 'Fail';
          results.errorMsg = '合同无效,请重新确认。';
          return results;
        }
      }
      Integer FLG = 0;
      Integer Count = 0;
      //add by rentx 2020-11-25
      List<String> tpids = new List<String>();
      //add by rentx 2020-11-25
      for (
        ConsumableorderdetailsInfo CheckCount : consumableorderdetailsRecordsview
      ) {
        FLG = FLG + 1;
        if (CheckCount.check == false) {
          Count = Count + 1;
        }
        if (CheckCount.check == true) {
          //add by rentx 2020-11-25
          tpids.add(CheckCount.Prod.Id);
          //add by rentx 2020-11-25
          if (
            CheckCount.esd.Consumable_Count__c == null ||
            CheckCount.esd.Consumable_Count__c == 0
          ) {
            // CheckCount.esd.Consumable_Count__c.addError('请输入采购数量');
            results.result = 'Fail';
            results.errorMsg = '请输入采购数量';
            return results;
          }
          if (
            CheckCount.orderGoods_Limit > 0 &&
            math.mod(
              Integer.valueOf(CheckCount.esd.Consumable_Count__c),
              Integer.valueOf(CheckCount.orderGoods_Limit)
            ) > 0
          ) {
            // CheckCount.esd.Consumable_Count__c.addError('请输入促销数量的倍数');
            results.result = 'Fail';
            results.errorMsg = '请输入促销数量的倍数';
            return results;
          }
        }
      }
      if (Count == FLG) {
        results.result = 'Fail';
        results.errorMsg = '请选择所需消耗品';
        return results;
      }
      //=======================================医院特价,有金额的话取金额
      Map<String, Decimal> dealerHospitalmMap = new Map<String, Decimal>();
      List<hospitalprice__c> hplist = [
        SELECT Id, hospital__c, mPrice__c, pPrice__c, product__c, account__c
        FROM hospitalprice__c
        WHERE
          product__c IN :tpids
          AND mPrice__c != NULL
          AND account__c = :accountid
      ];
      for (hospitalprice__c dealerProduct : hplist) {
        if (dealerProduct.mPrice__c != null) {
          dealerHospitalmMap.put(
            '' + dealerProduct.hospital__c + dealerProduct.product__c,
            dealerProduct.mPrice__c
          );
        }
      }
      //促销订货 根据经销商产品中的数据计算金额
      //=======================================产品特殊折扣
      Map<String, Decimal> dealerPDiscountMap = new Map<String, Decimal>();
      Map<String, Decimal> dealerMPDiscountMap = new Map<String, Decimal>();
      //1.获取有开始结束日的产品
      Date dateToday = Date.today();
      List<Dealer_Product__c> haveDateList = [
        SELECT
          Id,
          Name,
          Dealer_Product2__c,
          Special_Campaign_Price__c,
          Campaign_StartDate__c,
          Campaign_EndDate__c,
          Dealer_Contact__c,
          OrderGoods_Limit__c,
          Special_Discount__c
        FROM Dealer_Product__c
        WHERE
          Dealer_Contact__c IN :contactDealer
          AND Campaign_StartDate__c <= :dateToday
          AND Campaign_EndDate__c >= :dateToday
          AND (Special_Discount__c != NULL
          OR Special_Campaign_Price__c != NULL)
      ];
      //2.获取没有开始结束日的产品
      List<Dealer_Product__c> DealerProductList = [
        SELECT
          Id,
          Name,
          Dealer_Product2__c,
          Special_Campaign_Price__c,
          Campaign_StartDate__c,
          Campaign_EndDate__c,
          Dealer_Contact__c,
          Special_Discount__c,
          OrderGoods_Limit__c
        FROM Dealer_Product__c
        WHERE
          Dealer_Contact__c IN :contactDealer
          AND (Special_Discount__c != NULL
          OR Special_Campaign_Price__c != NULL)
      ];
      for (Dealer_Product__c dealerProduct : DealerProductList) {
        //如果促销价格为null 则设置特殊折扣(百分比)到集合
        if (dealerProduct.Special_Campaign_Price__c == null) {
          dealerPDiscountMap.put(
            '' +
              dealerProduct.Dealer_Contact__c +
              dealerProduct.Dealer_Product2__c,
            dealerProduct.Special_Discount__c
          );
        } else {
          dealerMPDiscountMap.put(
            '' +
              dealerProduct.Dealer_Contact__c +
              dealerProduct.Dealer_Product2__c,
            dealerProduct.Special_Campaign_Price__c
          );
        }
      }
      //这样做是为了计算促销价格时 优先计算促销开始结束日不为空的产品
      //如果该集合有值 则说明需要根据当前的金额或者折扣来计算
      if (haveDateList != null && haveDateList.size() > 0) {
        for (Dealer_Product__c dealerProduct : haveDateList) {
          if (dealerProduct.Special_Campaign_Price__c == null) {
            dealerPDiscountMap.put(
              '' +
                dealerProduct.Dealer_Contact__c +
                dealerProduct.Dealer_Product2__c,
              dealerProduct.Special_Discount__c
            );
            dealerMPDiscountMap.remove(
              '' +
                dealerProduct.Dealer_Contact__c +
                dealerProduct.Dealer_Product2__c
            );
          } else {
            dealerMPDiscountMap.put(
              '' +
                dealerProduct.Dealer_Contact__c +
                dealerProduct.Dealer_Product2__c,
              dealerProduct.Special_Campaign_Price__c
            );
            dealerPDiscountMap.remove(
              '' +
                dealerProduct.Dealer_Contact__c +
                dealerProduct.Dealer_Product2__c
            );
          }
        }
      }
      //=======================================经销商合同折扣
      List<Account> at = [
        SELECT
          id,
          Name,
          State_Master__c,
          State_Master__r.Name,
          Sales_Section__c,
          Dealer_discount__c
        FROM Account
        WHERE
          Name = :contractName
          AND Id = :contractId //lt 20230517 安徽两票制 add
          AND Contact_Type__c LIKE :agencyProType1 //lt 20230517 安徽两票制 add  1
          AND Contact_Type__c LIKE :agencyProType
          AND Contract_Decide_Start_Date__c <= :Date.Today()
          AND Contract_Decide_End_Date__c >= :Date.Today()
          AND Contract_Decide_End_Date__c >= :Date.Today()
          AND OSH_Dealer__c = :OSHFLG //lt 20230517 安徽两票制 add
      ];
      if (at.size() > 0 && at[0].Dealer_discount__c != null) {
        disCount = at[0].Dealer_discount__c;
      } else {
        disCount = 100;
      }
      Consumable_order__c P = new Consumable_order__c();
      List<Consumable_Orderdetails__c> Ins = new List<Consumable_Orderdetails__c>();
      //新建订单时
      if (String.isBlank(ESetId)) {
        Integer i = 1;
        Integer Roll = 0;
        p.Name = '*';
        p.Order_status__c = '草案中';
        p.Dealer_Info__c = accountid;
        p.Order_ProType__c = agencyProType;
        p.Offers_Price__c = coc.Offers_Price__c;
        p.Order_date__c = coc.Order_date__c;
        p.Order_effective_contact__c = contract[0].Id;
        p.Order_Reason__c = coc.Order_Reason__c;
        p.RecordTypeid = System.Label.RT_ConOrder_Order;
        p.Overrule_order__c = coc.Id;
        if (String.isNotBlank(methodType)) {
          p.orderPattern__c = methodType;
        }
        insert p;
        List<Consumable_order__c> Consumable_order = [
          SELECT Name, orderPattern__c
          FROM Consumable_order__c
          WHERE id = :p.id
        ];
        for (
          ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview
        ) {
          Roll = Roll + 1;
          if (ass.check == true) {
            if (
              ass.esd.Consumable_Count__c == null ||
              ass.esd.Consumable_Count__c == 0
            ) {
              // ass.esd.Consumable_Count__c.addError('请输入采购数量');
              results.result = 'Fail';
              results.errorMsg = '请输入采购数量';
              return results;
            } else {
              Consumable_Orderdetails__c InsAfterDel = new Consumable_Orderdetails__c();
              String str = string.valueOf(i);
              if (str.length() == 1) {
                str = '0' + str;
              }
              InsAfterDel.Name = Consumable_order[0].Name + '-' + str;
              InsAfterDel.Consumable_Count__c = ass.esd.Consumable_Count__c;
              InsAfterDel.Consumable_order__c = p.id;
              InsAfterDel.Consumable_Product__c = ass.Prod.id;
              InsAfterDel.Box_Piece__c = '盒';
              //协议订货
              if (methodType.equals('agreementorder')) {
                Consumable_order[0].orderPattern__c = 'agreementorder';
                InsAfterDel.Intra_Trade_List_RMB__c =
                  ass.Prod.Intra_Trade_List_RMB__c *
                  disCount /
                  100;
                //=====================================================================================update by rentx 2020-11-25
              } else if (methodType.equals('promotionorder')) {
                Consumable_order[0].orderPattern__c = 'promotionorder';
                //促销订货
                //如果促销价格不为null 则直接使用促销价格来计算金额
                if (
                  dealerMPDiscountMap.containsKey(
                    '' + contract[0].Id + ass.Prod.Id
                  )
                ) {
                  InsAfterDel.Intra_Trade_List_RMB__c = dealerMPDiscountMap.get(
                    '' + contract[0].Id + ass.Prod.Id
                  );
                  system.debug('cai 0' + InsAfterDel.Intra_Trade_List_RMB__c);
                } else if (
                  dealerPDiscountMap.containsKey(
                    '' + contract[0].Id + ass.Prod.Id
                  )
                ) {
                  InsAfterDel.Intra_Trade_List_RMB__c =
                    ass.Prod.Intra_Trade_List_RMB__c *
                    dealerPDiscountMap.get('' + contract[0].Id + ass.Prod.Id) /
                    100;
                  system.debug('cai 00' + InsAfterDel.Intra_Trade_List_RMB__c);
        // 排序Consumable_order__c
        public Integer compareTo(Object compareTo) {
            ConsumableorderdetailsInfo compareToesd = (ConsumableorderdetailsInfo) compareTo;
            Integer returnValue = 0;
            if (check == true) {
                if (sortBy == false) {
                    if (allnumber > compareToesd.allnumber) {
                        returnValue = -1;
                    } else if (allnumber < compareToesd.allnumber) {
                        returnValue = 1;
                    }
                    return returnValue;
                } else {
                    if (allnumber > compareToesd.allnumber) {
                        returnValue = 1;
                    } else if (allnumber < compareToesd.allnumber) {
                        returnValue = -1;
                    }
                    return returnValue;
                }
                //=====================================================================================update by rentx 2020-11-25
              } else if (methodType.equals('hospitalorder')) {
                //医院特价
                Consumable_order[0].Order_ForHospital__c = hospitalId;
                Consumable_order[0].orderPattern__c = 'hospitalorder';
                if (
                  dealerHospitalmMap.containsKey(hospitalId + ass.Prod.Id) &&
                  dealerHospitalmMap.get(hospitalId + ass.Prod.Id) != null
                ) {
                  //直接根据促销金额计算
                  InsAfterDel.Intra_Trade_List_RMB__c = dealerHospitalmMap.get(
                    '' + hospitalId + ass.Prod.Id
                  );
                }
              } else if (DealerProductMap.containsKey(ass.Prod.Id)) {
                InsAfterDel.Intra_Trade_List_RMB__c = DealerProductMap.get(
                    ass.Prod.Id
                  )
                  .Special_Campaign_Price__c;
                system.debug('cai 2' + InsAfterDel.Intra_Trade_List_RMB__c);
                InsAfterDel.Purchase_Unitprtprice_From__c = '促销';
                InsAfterDel.Special_Campaign_Price__c = DealerProductMap.get(
                    ass.Prod.Id
                  )
                  .Special_Campaign_Price__c;
              }
              InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
              i++;
              Ins.add(InsAfterDel);
            }
          }
        }
        ESetId = p.id;
        if (Consumable_order.size() > 0) {
          update Consumable_order;
        }
      }
      //修改之后 保存订单
      if (Ins.size() > 0) {
        insert Ins;
      } else {
        //修改,获取消耗品订单
        List<Consumable_order__c> cocinfo = new List<Consumable_order__c>();
        cocinfo = [
          SELECT
            Id,
            Name,
            Order_status__c,
            Dealer_Info__c,
            Deliver_date__c,
            Order_Reason__c,
            Offers_Price__c
          FROM Consumable_order__c
          WHERE Id = :ESetId
        ];
        if (cocinfo.size() > 0) {
          p = cocinfo[0];
        }
        p.Name = coc.Name;
        p.Dealer_Info__c = accountid;
        p.Order_ProType__c = agencyProType;
        p.Order_date__c = coc.Order_date__c;
        p.Order_effective_contact__c = contract[0].Id;
        p.Order_Reason__c = coc.Order_Reason__c;
        if (bargainPrice != null) {
          p.Offers_Price__c = bargainPrice;
        }
        update p;
        List<Consumable_order__c> Consumable_order = [
          SELECT Name, orderPattern__c
          FROM Consumable_order__c
          WHERE id = :p.id
        ];
        List<Consumable_Orderdetails__c> qs = new List<Consumable_Orderdetails__c>();
        qs = [
          SELECT Id
          FROM Consumable_Orderdetails__c
          WHERE
            Consumable_order__c = :ESetId
            AND Consumable_order__r.Dealer_Info__c = :accountid
        ];
        if (qs.size() > 0) {
          delete qs;
        }
        Integer i = 1;
        for (
          ConsumableorderdetailsInfo ass : consumableorderdetailsRecordsview
        ) {
          if (ass.check == true) {
            Consumable_Orderdetails__c InsAfterDel = new Consumable_Orderdetails__c();
            if (
              ass.esd.Consumable_Count__c == null ||
              ass.esd.Consumable_Count__c == 0
            ) {
              // ass.esd.Consumable_Count__c.addError('请输入采购数量');
              results.result = 'Fail';
              results.errorMsg = '请输入采购数量';
              return results;
            } else {
              String str = string.valueOf(i);
              if (str.length() == 1) {
                str = '0' + str;
              }
              InsAfterDel.Name = Consumable_order[0].Name + '-' + str;
              InsAfterDel.Consumable_Count__c = ass.esd.Consumable_Count__c;
              InsAfterDel.Consumable_order__c = ESetId;
              InsAfterDel.Consumable_Product__c = ass.Prod.id;
              InsAfterDel.Box_Piece__c = '盒';
              //协议订货
              if (methodType.equals('agreementorder')) {
                Consumable_order[0].orderPattern__c = 'agreementorder';
                InsAfterDel.Intra_Trade_List_RMB__c =
                  ass.Prod.Intra_Trade_List_RMB__c *
                  disCount /
                  100;
              } else if (methodType.equals('promotionorder')) {
                Consumable_order[0].orderPattern__c = 'promotionorder';
                //促销订货
                if (
                  dealerMPDiscountMap.containsKey(
                    '' + contract[0].Id + ass.Prod.Id
                  )
                ) {
                  InsAfterDel.Intra_Trade_List_RMB__c = dealerMPDiscountMap.get(
                    '' + contract[0].Id + ass.Prod.Id
                  );
                } else if (
                  dealerPDiscountMap.containsKey(
                    '' + contract[0].Id + ass.Prod.Id
                  )
                ) {
                  InsAfterDel.Intra_Trade_List_RMB__c =
                    ass.Prod.Intra_Trade_List_RMB__c *
                    dealerPDiscountMap.get('' + contract[0].Id + ass.Prod.Id) /
                    100;
                if (sortBy == false) {
                    if (allnumber > compareToesd.allnumber) {
                        returnValue = -1;
                    } else if (allnumber < compareToesd.allnumber) {
                        returnValue = 1;
                    }
                    return returnValue;
                } else {
                    if (allnumber > compareToesd.allnumber) {
                        returnValue = 1;
                    } else if (allnumber < compareToesd.allnumber) {
                        returnValue = -1;
                    }
                    return returnValue;
                }
              } else if (methodType.equals('hospitalorder')) {
                Consumable_order[0].orderPattern__c = 'hospitalorder';
                //医院特价
                Consumable_order[0].Order_ForHospital__c = hospitalId;
                if (
                  dealerHospitalmMap.containsKey(hospitalId + ass.Prod.Id) &&
                  dealerHospitalmMap.get(hospitalId + ass.Prod.Id) != null
                ) {
                  //直接根据促销金额计算
                  InsAfterDel.Intra_Trade_List_RMB__c = dealerHospitalmMap.get(
                    '' + hospitalId + ass.Prod.Id
                  );
                }
              } else if (DealerProductMap.containsKey(ass.Prod.Id)) {
                InsAfterDel.Intra_Trade_List_RMB__c = DealerProductMap.get(
                    ass.Prod.Id
                  )
                  .Special_Campaign_Price__c;
                InsAfterDel.Purchase_Unitprtprice_From__c = '促销';
                InsAfterDel.Special_Campaign_Price__c = DealerProductMap.get(
                    ass.Prod.Id
                  )
                  .Special_Campaign_Price__c;
              }
              // ==================================================之前的促销订货的逻辑
              InsAfterDel.RecordTypeId = System.Label.RT_ConOrderDetail1_Order;
              i++;
              Ins.add(InsAfterDel);
            }
          }
        }
        if (Ins.size() > 0) {
          insert Ins;
    }
    public class Results {
        @AuraEnabled
        public String result;
        @AuraEnabled
        public String errorMsg;
        @AuraEnabled
        public String eSetId;
        @AuraEnabled
        public String agencyProType;
        @AuraEnabled
        public String userWorkLocation;
        @AuraEnabled
        public String accountName;
        @AuraEnabled
        public String accountid;
        @AuraEnabled
        public String hospitalId;
        @AuraEnabled
        public String contractId;
        @AuraEnabled
        public String category_Goods;
        @AuraEnabled
        public Consumable_order__c coc;
        @AuraEnabled
        public Boolean edoffersPrice;
        @AuraEnabled
        public Boolean editDelCommitBtnDisabled;
        @AuraEnabled
        public Boolean editAble;
        @AuraEnabled
        public String hospitalName;
        @AuraEnabled
        public String contractName;
        @AuraEnabled
        public List<CusOption> category3Option;
        @AuraEnabled
        public List<CusOption> category4Option;
        @AuraEnabled
        public List<CusOption> category5Option;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsview;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> attachmentRecoeds;
        @AuraEnabled
        public Boolean cansee;
        @AuraEnabled
        public List<String> errorMsgList;
        @AuraEnabled
        public List<String> warningMsgList;
        @AuraEnabled
        public Boolean hasWarning;
        @AuraEnabled
        public Boolean hasError;
        @AuraEnabled
        public Boolean specialCampaign;
        @AuraEnabled
        public List<String> dealerProductId;
        @AuraEnabled
        public List<String> contactDealer;
        @AuraEnabled
        public String url;
        @AuraEnabled
        public String methodType;
        @AuraEnabled
        public List<String> proLimitAndDate;
        @AuraEnabled
        public Boolean isNoteStay;
        @AuraEnabled
        public Boolean OSHFLG;
        @AuraEnabled
        public String agencyProType1;
    }
    public class CusOption {
        CusOption(String label, String value) {
            this.label = label;
            this.value = value;
        }
      }
      results.result = 'Success';
      results.eSetId = ESetId;
    } catch (Exception e) {
      Database.rollback(sp);
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
    }
    return results;
  }
  //删除附件
  @AuraEnabled
  public static Results deleteAtt(String contentVersionId, String cocId) {
    Results results = new Results();
    try {
      List<ContentVersion> cvInfo = [
        SELECT Id
        FROM ContentVersion
        WHERE FirstPublishLocationId = :cocId
      ];
      ContentVersion conVersion = [
        SELECT ContentDocumentId
        FROM ContentVersion
        WHERE Id = :contentVersionId
      ];
      String contentDocumentId = conVersion.ContentDocumentId;
      ContentDocument conDocument = [
        SELECT Id
        FROM ContentDocument
        WHERE Id = :contentDocumentId
      ];
      delete conDocument;
      if (cvInfo.size() <= 1) {
        Consumable_order__c c = [
          SELECT Id
          FROM Consumable_order__c
          WHERE Id = :cocId
        ];
        c.Consumable_pdf_insert_day__c = null;
        update c;
      }
      results.result = 'Success';
    } catch (Exception e) {
      results.result = 'Fail';
      results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        @AuraEnabled
        public String label;
        @AuraEnabled
        public String value;
    }
    return results;
  }
  public static void getConsumableShowTableFieldValue() {
    for (ConsumableorderdetailsInfo con : consumableorderdetailsRecordsview) {
      if (con.Prod != null) {
        con.recordId = con.Prod.Id;
        if (!con.oldCheck) {
          con.prodName = con.Prod.Name__c;
          // System.debug('ProdName:'+con.Prod.Id+'---'+con.Prod.Name__c);
        }
        con.prodSFDAStatus = con.Prod.SFDA_Status__c;
        con.prodCategory3 = con.Prod.Category3__c;
        con.prodCategory4 = con.Prod.Category4__c;
        con.prodCategory5 = con.Prod.Category5__c;
        con.prodIntraTradeList = con.Prod.Intra_Trade_List_RMB__c;
      }
      if (con.esd != null) {
        // if(con.oldCheck){
        // con.prodName = con.esd.Consumable_Product__r.Name__c;
        // }
        con.consumableCount = con.esd.Consumable_count__c;
      }
    }
  }
  public class ConsumableorderdetailsInfo implements Comparable {
    @AuraEnabled
    public Boolean check { get; set; }
    @AuraEnabled
    public Boolean oldCheck { get; set; }
    @AuraEnabled
    public Consumable_Orderdetails__c esd { get; set; }
    @AuraEnabled
    public Product2__c Prod { get; set; }
    @AuraEnabled
    public Integer packing_list { get; set; }
    @AuraEnabled
    public Date expiration_Date { get; set; }
    @AuraEnabled
    public String approbation_No { get; set; }
    @AuraEnabled
    public Decimal allnumber { get; set; }
    @AuraEnabled
    public Decimal allnumber_piece { get; set; }
    @AuraEnabled
    public Decimal oldConsumableCount { get; set; }
    @AuraEnabled
    public Boolean canSelect { get; set; }
    @AuraEnabled
    public ContentVersion Concc { get; set; }
    @AuraEnabled
    public Boolean sortBy { get; set; }
    @AuraEnabled
    public Decimal upperlimit { get; set; }
    @AuraEnabled
    public Decimal lowerlimit { get; set; }
    @AuraEnabled
    public Decimal SpecialCampaignPrice { get; set; }
    @AuraEnabled
    public Decimal orderGoods_Limit { get; set; }
    @AuraEnabled
    public Date Campaign_EndDate { get; set; }
    @AuraEnabled
    public String recordId { get; set; }
    @AuraEnabled
    public String prodName { get; set; }
    @AuraEnabled
    public String prodSFDAStatus { get; set; }
    @AuraEnabled
    public String prodCategory3 { get; set; }
    @AuraEnabled
    public String prodCategory4 { get; set; }
    @AuraEnabled
    public String prodCategory5 { get; set; }
    @AuraEnabled
    public Decimal prodIntraTradeList { get; set; }
    @AuraEnabled
    public Decimal consumableCount { get; set; }
    // 已存产品明细
    public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) {
      check = true;
      oldCheck = true;
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.Consumable_Count__c;
      canSelect = true;
      allnumber = 0;
      allnumber_piece = 0;
    }
    public ConsumableorderdetailsInfo(Product2__c e) {
      check = false;
      oldCheck = false;
      esd = new Consumable_Orderdetails__c();
      Prod = e;
      oldConsumableCount = null;
      canSelect = true;
      allnumber = 0;
      allnumber_piece = 0;
    }
    //附件
    public ConsumableorderdetailsInfo(ContentVersion e) {
      Concc = e;
    }
    // 排序Consumable_order__c
    public Integer compareTo(Object compareTo) {
      ConsumableorderdetailsInfo compareToesd = (ConsumableorderdetailsInfo) compareTo;
      Integer returnValue = 0;
      if (check == true) {
        if (sortBy == false) {
          if (allnumber > compareToesd.allnumber) {
            returnValue = -1;
          } else if (allnumber < compareToesd.allnumber) {
            returnValue = 1;
          }
          return returnValue;
        } else {
          if (allnumber > compareToesd.allnumber) {
            returnValue = 1;
          } else if (allnumber < compareToesd.allnumber) {
            returnValue = -1;
          }
          return returnValue;
        }
      } else {
        if (sortBy == false) {
          if (allnumber > compareToesd.allnumber) {
            returnValue = -1;
          } else if (allnumber < compareToesd.allnumber) {
            returnValue = 1;
          }
          return returnValue;
        } else {
          if (allnumber > compareToesd.allnumber) {
            returnValue = 1;
          } else if (allnumber < compareToesd.allnumber) {
            returnValue = -1;
          }
          return returnValue;
        }
      }
    }
  }
  public class Results {
    @AuraEnabled
    public String result;
    @AuraEnabled
    public String errorMsg;
    @AuraEnabled
    public String eSetId;
    @AuraEnabled
    public String agencyProType;
    @AuraEnabled
    public String userWorkLocation;
    @AuraEnabled
    public String accountName;
    @AuraEnabled
    public String accountid;
    @AuraEnabled
    public String hospitalId;
    @AuraEnabled
    public String contractId;
    @AuraEnabled
    public String category_Goods;
    @AuraEnabled
    public Consumable_order__c coc;
    @AuraEnabled
    public Boolean edoffersPrice;
    @AuraEnabled
    public Boolean editDelCommitBtnDisabled;
    @AuraEnabled
    public Boolean editAble;
    @AuraEnabled
    public String hospitalName;
    @AuraEnabled
    public String contractName;
    @AuraEnabled
    public List<CusOption> category3Option;
    @AuraEnabled
    public List<CusOption> category4Option;
    @AuraEnabled
    public List<CusOption> category5Option;
    @AuraEnabled
    public List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsview;
    @AuraEnabled
    public List<ConsumableorderdetailsInfo> attachmentRecoeds;
    @AuraEnabled
    public Boolean cansee;
    @AuraEnabled
    public List<String> errorMsgList;
    @AuraEnabled
    public List<String> warningMsgList;
    @AuraEnabled
    public Boolean hasWarning;
    @AuraEnabled
    public Boolean hasError;
    @AuraEnabled
    public Boolean specialCampaign;
    @AuraEnabled
    public List<String> dealerProductId;
    @AuraEnabled
    public List<String> contactDealer;
    @AuraEnabled
    public String url;
    @AuraEnabled
    public String methodType;
    @AuraEnabled
    public List<String> proLimitAndDate;
    @AuraEnabled
    public Boolean isNoteStay;
    @AuraEnabled
    public Boolean OSHFLG;
    @AuraEnabled
    public String agencyProType1;
  }
  public class CusOption {
    CusOption(String label, String value) {
      this.label = label;
      this.value = value;
    }
    @AuraEnabled
    public String label;
    @AuraEnabled
    public String value;
  }
}
}