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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    //update by rentx 2021-01-29 end

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        Integer isHos = 0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        ESetId = ESetId;

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

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

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

        public ConsumableorderdetailsInfo() {
        }

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

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

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

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

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

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

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

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