public without sharing class LexTopPageController {
    //经销商信息
    public static account accountInfo;
    /*****************画面表示Bean******************/
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    public static List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
    //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 pagesize = Integer.valueof(system.label.orderdetLimitsize);
    // public static Integer totalcount;
    // public static Integer pagecount;
    // public static Integer currentpage = 0;
    // public static Boolean hasPrevious;
    // public static Boolean hasNext;
    public static List<ConsumableorderdetailsInfo> pageRecords;
    public static String soql { get; set; }
    // 汇总使用
    public static Integer Total_num;
    public static Integer OrderNumber_arrived;
    public static Integer Delivery_detail_count;
    public static Integer OrderNumber_notarrive;
    public static Integer More_than_seven_days;
    //排序使用
    // public static String sortKey;
    // public static String preSortKey;
    // public static Boolean sortOrderAsc;
    // public static String[] sortOrder;
    /*****************一周未到货订单一览对应start******************/
    // 订单 字段标签
    public static List<String> title;
    // 订单 字段名
    public static List<String> column;
    public static List<List<String>> columns;
    // 画面显示数据
    public static List<Consumable_order__c> raesList;
    /*****************一周未到货订单一览对应end******************/
    //排序使用
    private static String[] orderby = new List<String>{ 'Product2__c.Name__c' };
    //产品上下限
    public static String[] proLimitAndDate = new List<String>{};
    public static String product_Limit;
    //库存产品最早有效期限
    private static Map<String, Date> productkucun = new Map<String, Date>();
    //消费期限小于一年的产品
    public static List<ConsumableorderdetailsInfo> overlimitdateorderdetails = new List<ConsumableorderdetailsInfo>();
    public static String accountid;
    public static String accountName;
    public static List<String> orderDetZaikuList = new List<String>();
    // 登录者工作地
    private static String userWorkLocation;
    // 未到货订单信息（超过一周）显示控制
    public static Boolean over_view {
        get {
            return raesList.size() > 0 ? true : false;
        }
    }
    // 使用期限小于一年的产品 显示控制
    public static Boolean overlimit {
        get {
            return overlimitdateorderdetails.size() > 0 ? true : false;
        }
    }
    //用户产品区分
    public static String userPro_Type;
    public static String userPro_Typestr = null;
    public static Boolean EngFlag = false;
    public static Boolean ETFlag = false;
    public static Boolean hasHos;

    @AuraEnabled
    public static Results initAgency() {
        Results results = new Results();
        results.isNoteStay = LexUtility.getIsNoteStay();
        try {
            User useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId()];
            accountid = useracc.accountid;
            List<Account> accList = new List<Account>();
            accList = [
                SELECT
                    Name,
                    Ban_On_Use_Reason__c,
                    Deposit_Price__c,
                    Medical_Equipment_Num__c,
                    Medical_Equipment_Expiration_Date__c,
                    Ban_On_Use_Date__c,
                    Tax_Practice_No__c,
                    Tax_Practice_Expiration_Date__c,
                    Business_Authorization_No__c,
                    Business_Paper_Expiration_Date__c,
                    Credit_Check_No__c,
                    Dealer_discount__c,
                    Phone,
                    Address_Together__c,
                    Is_Active_Formula__c,
                    Management_Code__c,
                    Sales_Shop_Class__c,
                    Postal_Code__c,
                    Fax,
                    Address__c,
                    Deposit_Receipt_Finished__c,
                    Deposit_Receipt_Completion_Day__c,
                    Product_Limit_Date__c,
                    Product_Limit_DateENG__c
                FROM account
                WHERE id = :accountid
            ];
            if (accList.size() == 1) {
                accountInfo = accList[0];
            } else {
                results.result = 'Fail';
                results.errorMsg = '未获取到经销商信息';
                return results;
            }
            results.result = 'Success';
            results.accountInfo = accountInfo;
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }

    @AuraEnabled
    public static Results initPage(Integer pageSizeLWC, Integer pageTokenLWC) {
        pageSize = pageSizeLWC;
        pageToken = pageTokenLWC;
        Results results = new Results();
        results.isNoteStay = LexUtility.getIsNoteStay();
        try {
            consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
            consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
            overlimitdateorderdetails = new List<ConsumableorderdetailsInfo>();
            //page
            // pagesize = Integer.valueof(system.label.orderdetLimitsize);
            // currentpage = 0;

            User useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId()];
            // String uid = '0051000000E7Pv9AAF';
            // User useracc = [SELECT accountid, Work_Location__c,UserPro_Type__c FROM user WHERE id =:uid];
            accountid = useracc.accountid;
            userWorkLocation = useracc.Work_Location__c;
            userPro_Type = useracc.UserPro_Type__c;
            if (String.isBlank(userPro_Type)) {
                userPro_Type = 'ET';
            }
            userPro_Typestr = '%' + userPro_Type + '%';
            if (userPro_Type == 'ENG') {
                EngFlag = true;
            } else {
                ETFlag = true;
            }
            //经销商·基本信息获取
            List<Account> accList = new List<Account>();
            accList = [
                SELECT
                    Name,
                    Ban_On_Use_Reason__c,
                    Deposit_Price__c,
                    Medical_Equipment_Num__c,
                    Medical_Equipment_Expiration_Date__c,
                    Ban_On_Use_Date__c,
                    Tax_Practice_No__c,
                    Tax_Practice_Expiration_Date__c,
                    Business_Authorization_No__c,
                    Business_Paper_Expiration_Date__c,
                    Credit_Check_No__c,
                    Dealer_discount__c,
                    Phone,
                    Address_Together__c,
                    Is_Active_Formula__c,
                    Management_Code__c,
                    Sales_Shop_Class__c,
                    Postal_Code__c,
                    Fax,
                    Address__c,
                    Deposit_Receipt_Finished__c,
                    Deposit_Receipt_Completion_Day__c,
                    Product_Limit_Date__c,
                    Product_Limit_DateENG__c
                FROM account
                WHERE id = :accountid
            ];
            if (accList.size() == 1) {
                accountInfo = accList[0];
            } else {
                results.result = 'Fail';
                results.errorMsg = '未获取到经销商信息';
                return results;
            }
            accountName = accountInfo.Name;
            if (EngFlag) {
                product_Limit = accountInfo.Product_Limit_DateENG__c;
            } else if (ETFlag) {
                product_Limit = accountInfo.Product_Limit_Date__c;
            }
            if (product_Limit != null && product_Limit != '') {
                proLimitAndDate = product_Limit.split(',');
            }
            List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
            //库存明细取得
            orderDetZaikuList = new List<String>();
            List<AggregateResult> orderDetZaiku = [
                SELECT count(Id), Consumable_Product__c
                FROM Consumable_order_details2__c
                WHERE
                    Dealer_Arrive__c = TRUE
                    AND Dealer_Shipment__c = FALSE
                    AND Dealer_Saled__c = FALSE
                    AND Lose_Flag__c = FALSE
                    AND Dealer_Returned__c = FALSE
                    AND Cancellation_Flag__c = FALSE
                    AND Bar_Code__c != NULL
                    AND Product_Type__c LIKE :userPro_Typestr
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c = :userWorkLocation
                GROUP BY Consumable_Product__c
            ];
            for (AggregateResult zaikuId : orderDetZaiku) {
                orderDetZaikuList.add(String.valueOf(zaikuId.get('Consumable_Product__c')));
            }
            Map<String, Product2__c> MidMap = new Map<String, Product2__c>();
            List<Product2__c> product2Selected = [
                SELECT
                    Id,
                    Name,
                    Name__c,
                    Asset_Model_No__c,
                    Category3__c,
                    Category4__c,
                    Category5__c,
                    SFDA_Status__c,
                    Product2__r.SFDA_Approbation_No__c,
                    Product2__r.SFDA_Expiration_Date__c,
                    Product2__r.Packing_list_manual__c
                FROM Product2__c
                WHERE Id IN :orderDetZaikuList
            ];

            for (Integer i = 0; i < product2Selected.size(); i++) {
                MidMap.put(product2Selected[i].Id, product2Selected[i]);
            }
            //返品库存统计
            List<Consumable_order_details2__c> CountDel = [
                SELECT
                    Id,
                    Bar_Code__c,
                    Name,
                    Inventory_date__c,
                    Consumable_Product__c,
                    Recordtypeid,
                    Guarantee_period_for_products__c,
                    Isoverdue__c,
                    Box_Piece__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 Cancellation_Flag__c = FALSE
                    AND Bar_Code__c != NULL
                    AND Product_Type__c LIKE :userPro_Typestr
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c = :userWorkLocation
            ];
            Map<String, ConsumableorderdetailsInfo> newMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> newMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> newHosMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> newHosMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
            for (Integer i = 0; i < CountDel.size(); i++) {
                //然后循环CountDel做Box和piece2个map
                if (MidMap.containsKey(CountDel[i].Consumable_Product__c) && CountDel[i].Box_Piece__c == '盒') {
                    String tex = 'A';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        tex = 'B';
                    }
                    if (newMidBoxMap.containsKey(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex)) {
                        ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(
                                CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex
                            )
                            .clone();
                        Jstage.allnumber = Jstage.allnumber + 1;
                        if (CountDel[i].Isoverdue__c == 1) {
                            Jstage.limitCount = Jstage.limitCount + 1;
                        }
                        Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                        newMidBoxMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                    } else {
                        ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(CountDel[i].Consumable_Product__c));
                        Jstage.allnumber = Jstage.allnumber + 1;
                        if (CountDel[i].Isoverdue__c == 1) {
                            Jstage.limitCount = Jstage.limitCount + 1;
                        }
                        Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                        if (CountDel[i].hospitalSpecialOffer__c) {
                            Jstage.hospitalSpecialOffer = true;
                            newMidBoxMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                        } else {
                            Jstage.hospitalSpecialOffer = false;
                            newMidBoxMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                        }
                    }
                } else if (MidMap.containsKey(CountDel[i].Consumable_Product__c) && CountDel[i].Box_Piece__c == '个') {
                    String tex = 'A';
                    if (CountDel[i].hospitalSpecialOffer__c) {
                        tex = 'B';
                    }
                    if (newMidPieceMap.containsKey(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex)) {
                        ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(
                                CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex
                            )
                            .clone();
                        Jstage.allnumber = Jstage.allnumber + 1;
                        if (CountDel[i].Isoverdue__c == 1) {
                            Jstage.limitCount = Jstage.limitCount + 1;
                        }
                        Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                        newMidPieceMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                    } else {
                        ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(MidMap.get(CountDel[i].Consumable_Product__c));
                        Jstage.allnumber = Jstage.allnumber + 1;
                        if (CountDel[i].Isoverdue__c == 1) {
                            Jstage.limitCount = Jstage.limitCount + 1;
                        }
                        Jstage.BoxPiece = CountDel[i].Box_Piece__c;
                        if (CountDel[i].hospitalSpecialOffer__c) {
                            Jstage.hospitalSpecialOffer = true;
                            newMidPieceMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                        } else {
                            Jstage.hospitalSpecialOffer = false;
                            newMidPieceMap.put(CountDel[i].Consumable_Product__c + CountDel[i].Box_Piece__c + tex, Jstage);
                        }
                    }
                }
                //如果是 医院特价创建的明细2  则
            }
            consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
            List<ConsumableorderdetailsInfo> newHosMidBoxList = new List<ConsumableorderdetailsInfo>();
            //把Boxmap里的值从新赋给boxRecords
            for (ConsumableorderdetailsInfo bss : newMidBoxMap.values()) {
                if (bss.allnumber > 0) {
                    bss.packing_list = Integer.valueof(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    bss.overlimitCount = bss.allnumber - bss.limitCount;
                    boxRecords.add(bss);
                }
            }
            boxRecords.sort();
            for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
                if (bss.allnumber > 0) {
                    bss.packing_list = Integer.valueof(bss.Prod.Product2__r.Packing_list_manual__c);
                    bss.approbation_No = bss.Prod.Product2__r.SFDA_Approbation_No__c;
                    bss.expiration_Date = bss.Prod.Product2__r.SFDA_Expiration_Date__c;
                    bss.overlimitCount = bss.allnumber - bss.limitCount;
                }
            }
            //排序应该是 非医院特价的盒,医院特价的盒,非医院特价的个,医院特价的个
            //add by rentx 2020-11-27 先判断医院特价的盒 和 个
            //2020-11-27 日 于 rentx 注释 start
            String temp = 'A';
            for (ConsumableorderdetailsInfo bss : boxRecords) {
                consumableorderdetailsRecords.add(bss);
                //该产品是医院特价产品
                if (bss.hospitalSpecialOffer && newMidPieceMap.containsKey(bss.Prod.Id + '个B')) {
                    if (newMidPieceMap.get(bss.Prod.Id + '个B').hospitalSpecialOffer) {
                        consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个B'));
                        newMidPieceMap.remove(bss.Prod.Id + '个B');
                    }
                }

                if (!bss.hospitalSpecialOffer && newMidPieceMap.containsKey(bss.Prod.Id + '个A')) {
                    // if (newMidPieceMap.get(bss.Prod.Id+'个A')) {
                    consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个A'));
                    newMidPieceMap.remove(bss.Prod.Id + '个A');
                    // }
                }
            }

            for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
                if (newMidPieceMap.containsKey(bss.Prod.Id + '个B')) {
                    consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个B'));
                }
            }
            for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
                if (newMidPieceMap.containsKey(bss.Prod.Id + '个A')) {
                    consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个A'));
                }
            }
            // consumableorderdetailsRecords.addAll(newMidPieceMap.values());
            //2020-11-27 日 于 rentx 注释 end
            // consumableorderdetailsRecords.addAll(newMidPieceMap.values());
            //2020-11-27 日 于 rentx 注释 end

            notarriveorder();
            productLimtAndDate();
            datelimitSearch();
            //add by rentx
            Integer ishos = 0;
            for (ConsumableorderdetailsInfo bss : consumableorderdetailsRecords) {
                if (productkucun.get(bss.Prod.Id) != null) {
                    bss.guaranteeperiod = productkucun.get(bss.Prod.Id);
                }
                //add by rentx 2021-3-10 start
                if (bss.hospitalSpecialOffer) {
                    ishos = ishos + 1;
                }
            }
            if (ishos > 0) {
                hasHos = true;
            } else {
                hasHos = false;
            }
            //add by rentx 2021-3-10 end
            //consumableorderdetailsRecords.sort();
            //list分割
            //listCut();
            // sortKey = '0';
            // preSortKey = '0';
            // sortOrderAsc = false;
            // sortOrder = new String[1];
            // sortOrder = new String[]{' ', '↓'};
            //总件数
            totalCount = consumableorderdetailsRecords.size();
            //页数
            // pagecount=(totalcount  +  pagesize  - 1) / pagesize;
            //显示第一页
            // moveToFirst();
            makeCurrentPageRecords();
            //分页
            PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
            System.debug('pageToken==>' + pageToken);
            System.debug('pageSize===>' + pageSize);

            paginatedAccounts.nextPageToken = (pageToken + pageSize < totalCount) ? pageToken + pageSize : null;
            paginatedAccounts.recordStart = pageToken + 1;
            paginatedAccounts.pageNumber = pageToken / pageSize + 1;
            Integer recordEnd = pageSize * paginatedAccounts.pageNumber;
            System.debug('paginatedAccounts.recordStart' + paginatedAccounts.recordStart);
            System.debug('paginatedAccounts.pageNumber' + paginatedAccounts.pageNumber);
            System.debug('paginatedAccounts.nextPageToken===>' + paginatedAccounts.nextPageToken);
            System.debug('recordEnd' + recordEnd);

            paginatedAccounts.recordEnd = totalCount >= recordEnd ? recordEnd : totalCount;
            paginatedAccounts.totalRecords = totalCount;
            //end
            System.debug('PaginatedAccounts===>' + PaginatedAccounts);

            //赋值回传
            results.result = 'Success';
            results.title = title;
            results.raesList = raesList;
            results.columns = columns;
            results.over_view = over_view;
            results.overlimit = overlimit;
            results.hasHos = hasHos;
            results.overlimitdateorderdetails = overlimitdateorderdetails;
            results.accountInfo = accountInfo;
            results.pageRecords = pageRecords;
            results.product_Limit = product_Limit;
            results.totalNum = Total_num;
            results.orderNumberArrived = OrderNumber_arrived;
            results.deliveryDetailCount = Delivery_detail_count;
            results.orderNumberNotarrive = OrderNumber_notarrive;
            results.moreThanSevenDays = More_than_seven_days;
            //add by WangXueqin 2023/05/05
            results.userPro_Type = userPro_Type;
            results.paginatedAccounts = paginatedAccounts;
        } catch (Exception e) {
            results.result = 'Fail';
            results.errorMsg = e.getLineNumber() + '---' + e.getMessage();
        }
        return results;
    }

    //超过一周未到货订单
    public static void notarriveorder() {
        //over_view = false;
        Date orderdate = Date.today().addDays(-7);

        List<Consumable_order_details2__c> orderdetails = [
            SELECT Id, Name, Consumable_order_minor__c
            FROM Consumable_order_details2__c
            WHERE
                Deliver_date__c < :orderdate
                AND Consumable_order_minor__c != NULL
                AND Dealer_Info_text__c = :accountName
                AND recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery
                AND Dealer_Arrive__c = FALSE
        ];
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO , 'userPro_Type——————' + userPro_Type));
        Map<String, String> notarriveorderMap = new Map<String, String>();
        List<String> notarriveorderid = new List<String>();
        for (Integer i = 0; i < orderdetails.size(); i++) {
            if (notarriveorderMap.containsKey(orderdetails[i].Consumable_order_minor__c)) {
                continue;
            } else {
                notarriveorderMap.put(orderdetails[i].Consumable_order_minor__c, orderdetails[i].Consumable_order_minor__c);
                //notarriveorderid.add('\'' + orderdetails[i].Consumable_order_minor__c +'\'');
                notarriveorderid.add(orderdetails[i].Consumable_order_minor__c);
            }
        }
        // 获得订单一览
        Map<String, Schema.FieldSet> fsMap = Schema.getGlobalDescribe().get('Consumable_order__c').getDescribe().fieldSets.getMap();
        Schema.FieldSet fs = fsMap.get('arrive_view');
        // 获得订单中的所有项目
        List<FieldSetMember> fsmList = fs.getFields();
        // 获得字段标签和字段名
        title = new List<String>();
        column = new List<String>();
        columns = new List<List<String>>();
        for (FieldSetMember fsm : fsmList) {
            title.add(fsm.getLabel());
            column.add(fsm.getFieldPath());
            columns.add(fsm.getFieldPath().split('\\.'));
        }
        system.debug('columns=====================>' + columns);
        // 获得显示数据
        raesList = new List<Consumable_order__c>();
        String soql = 'select Id';
        for (String s : column) {
            soql += ',' + s;
        }
        soql +=
            ' from Consumable_order__c where Order_type__c = \'' +
            '订单' +
            '\' and  recordtypeid =\'' +
            System.Label.RT_ConOrder_Delivery +
            '\' and Dealer_Info__c =\'' +
            accountid +
            '\'  and  Delivery_detail_count__c > 0 and showFalseNotshowTrue__c = false  ';
        soql += ' and Order_ProType__c = \'' + userPro_Type + '\' ';
        soql += ' and Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';

        if (notarriveorderid.size() < 1) {
            soql += ' AND Id = null ';
        } else {
            String sqlTail = '(\'';
            for (Integer i = 0; i < notarriveorderid.size(); i++) {
                if (i < notarriveorderid.size() - 1) {
                    sqlTail += notarriveorderid[i] + '\',\'';
                } else {
                    sqlTail += notarriveorderid[i] + '\')';
                }
            }
            //over_view = true;
            soql += ' AND Id in ' + sqlTail;
        }
        system.debug('soql_____11111__' + soql);
        raesList = Database.query(soql);
        // update end by vivek2020-01-15
        Total_num = 0;
        OrderNumber_arrived = 0;
        Delivery_detail_count = 0;
        OrderNumber_notarrive = 0;
        More_than_seven_days = 0;
        for (Consumable_order__c conorder : raesList) {
            Total_num += (Integer) conorder.Total_num__c;
            OrderNumber_arrived += (Integer) conorder.OrderNumber_arrived__c;
            Delivery_detail_count += (Integer) conorder.Delivery_detail_count__c;
            OrderNumber_notarrive += (Integer) conorder.OrderNumber_notarrive__c;
            More_than_seven_days += (Integer) conorder.More_than_seven_days__c;
        }
        // update end by vivek2020-01-15
    }

    public static void productLimtAndDate() {
        String nowName = null, nowRightAsstModelNo = null;
        Map<String, String> productLimt = new Map<String, String>();
        for (Integer i = 0; i < proLimitAndDate.size(); i++) {
            nowName = proLimitAndDate[i];
            if (nowName.indexOf('|') >= 0) {
                nowRightAsstModelNo = nowName.subString(0, nowName.indexOf('|'));
                nowName = nowName.subString(nowName.indexOf('|') + 1);
            }
            productLimt.put(nowRightAsstModelNo, nowName);
        }
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
            if (productLimt.containsKey(ass.Prod.Asset_Model_No__c)) {
                ass.lowerlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(0, productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|'))
                );
                ass.upperlimit = decimal.valueOf(
                    productLimt.get(ass.Prod.Asset_Model_No__c).subString(productLimt.get(ass.Prod.Asset_Model_No__c).indexOf('|') + 1)
                );
            }
        }
    }

    public static void datelimitSearch() {
        Set<String> barcodekucun = new Set<String>();
        //--------UpdateStart-----XHL--------------20180929-------------
        List<Consumable_order_details2__c> orderkucun = [
            SELECT
                Id,
                Bar_Code__c,
                Name,
                Consumable_Product__c,
                Recordtypeid,
                Guarantee_period_for_products__c,
                Sterilization_limit__c,
                Box_Piece__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 Product_Type__c LIKE :userPro_Typestr
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
            ORDER BY Consumable_Product__c, Sterilization_limit__c ASC
        ];
        //--------UpdateEnd-----XHL--------------20180929-------------
        for (Integer i = 0; i < orderkucun.size(); i++) {
            if (productkucun.containsKey(orderkucun[i].Consumable_Product__c)) {
                continue;
            } else {
                productkucun.put(orderkucun[i].Consumable_Product__c, orderkucun[i].Sterilization_limit__c);
            }
        }
        barcodekucun.clear();
        for (Integer i = 0; i < orderkucun.size(); i++) {
            if (orderkucun[i].Sterilization_limit__c < Date.today().addYears(1)) {
                if (barcodekucun.contains(orderkucun[i].Bar_Code__c)) {
                    continue;
                } else {
                    barcodekucun.add(orderkucun[i].Bar_Code__c);
                }
            }
        }
        List<AggregateResult> overlimitdatedetails = [
            SELECT Asset_Model_No__c prodName, Box_Piece__c BoxPiece, count(id) countid
            FROM Consumable_order_details2__c
            WHERE
                Bar_Code__c IN :barcodekucun
                AND Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
            GROUP BY Asset_Model_No__c, Box_Piece__c
            ORDER BY Asset_Model_No__c, Box_Piece__c
        ];
        for (Integer i = 0; i < overlimitdatedetails.size(); i++) {
            overlimitdateorderdetails.add(new ConsumableorderdetailsInfo(overlimitdatedetails[i]));
        }
    }

    //首页
    // public static void moveToFirst(){
    //     if(currentpage == 1) return;
    //     currentpage = 1;
    //     canMove();
    // }

    //判断是否可翻页
    // public static void canMove(){
    //     hasPrevious = false;
    //     hasNext = false;
    //     if(pagecount > 1 && currentpage > 1) hasPrevious = true;
    //     if(pagecount > 1 && currentpage < pagecount)  hasNext = true;
    // }

    //编辑当前页内容
    public static void makeCurrentPageRecords() {
        Integer startIdx;
        Integer endIdx;
        pageRecords = new List<ConsumableorderdetailsInfo>();
        startIdx = pageToken;
        endIdx = pageToken + pageSize;
        if (endIdx > consumableorderdetailsRecords.size()) {
            endIdx = consumableorderdetailsRecords.size();
        }
        for (Integer i = startIdx; i < endIdx; i++) {
            pageRecords.add(consumableorderdetailsRecords.get(i));
        }
    }
    //分页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; }
    }

    // Data Bean
    public class ConsumableorderdetailsInfo implements Comparable {
        //public Boolean check { get; set; }
        //public Boolean oldCheck { get; set; }
        @AuraEnabled
        public Consumable_order_details2__c esd { get; set; }
        @AuraEnabled
        public Product2__c Prod { get; set; }
        @AuraEnabled
        public Decimal allnumber { get; set; }
        @AuraEnabled
        public Decimal oldConsumableCount { get; set; }
        @AuraEnabled
        public Integer packing_list { get; set; }
        @AuraEnabled
        public Date expiration_Date { get; set; }
        @AuraEnabled
        public String approbation_No { get; set; }
        @AuraEnabled
        public Decimal upperlimit { get; set; }
        @AuraEnabled
        public Decimal lowerlimit { get; set; }
        @AuraEnabled
        public Date guaranteeperiod { get; set; }
        @AuraEnabled
        public Decimal countid { get; set; }
        @AuraEnabled
        public String prodName { get; set; }
        @AuraEnabled
        public Decimal limitCount { get; set; }
        @AuraEnabled
        public Decimal overlimitCount { get; set; }
        @AuraEnabled
        public String BoxPiece { get; set; }
        @AuraEnabled
        public Boolean hospitalSpecialOffer { get; set; }

        public ConsumableorderdetailsInfo(Product2__c e) {
            //check = false;
            //oldCheck = false;
            esd = new Consumable_order_details2__c();
            Prod = e;
            oldConsumableCount = null;
            allnumber = 0;
            limitCount = 0;
            overlimitCount = 0;
        }

        public ConsumableorderdetailsInfo(AggregateResult e) {
            countid = Integer.valueOf(e.get('countid'));
            prodName = String.valueOf(e.get('prodname'));
            BoxPiece = String.valueOf(e.get('BoxPiece'));
        }

        // 排序
        public Integer compareTo(Object compareTo) {
            ConsumableorderdetailsInfo compareToesd = (ConsumableorderdetailsInfo) compareTo;
            Integer returnValue = 0;
            if (allnumber > compareToesd.allnumber) {
                returnValue = -1;
            } else if (allnumber < compareToesd.allnumber) {
                returnValue = 1;
            }
            return returnValue;
        }
    }

    public class Results {
        @AuraEnabled
        public String result;
        @AuraEnabled
        public String errorMsg;
        @AuraEnabled
        public List<String> title;
        @AuraEnabled
        public List<Consumable_order__c> raesList;
        @AuraEnabled
        public List<List<String>> columns;
        @AuraEnabled
        public Boolean over_view;
        @AuraEnabled
        public Boolean overlimit;
        @AuraEnabled
        public Boolean hasHos;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> overlimitdateorderdetails;
        @AuraEnabled
        public Account accountInfo;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> pageRecords;
        @AuraEnabled
        public String product_Limit;
        @AuraEnabled
        public Integer totalNum;
        @AuraEnabled
        public Integer orderNumberArrived;
        @AuraEnabled
        public Integer deliveryDetailCount;
        @AuraEnabled
        public Integer orderNumberNotarrive;
        @AuraEnabled
        public Integer moreThanSevenDays;
        @AuraEnabled
        public Boolean isNoteStay;
        //add by WangXueqin 2023/05/05
        @AuraEnabled
        public String userPro_Type;
        @AuraEnabled
        public List<ConsumableorderdetailsInfo> pageCodeRecords;
        @AuraEnabled
        public PaginatedAccounts paginatedAccounts;
    }
}