buli
2023-07-05 af7b716a60d889acea95560abba0e46eee008b8f
force-app/main/default/classes/LexInventoryController.cls
@@ -1,1473 +1,1801 @@
public without sharing class LexInventoryController {
    // 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; }
  // 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 String fileName { get; set; }
    public static Integer size { get; set; }
    public static Integer noOfRecords { get; set; }
    public static List<ConsumableorderdetailsInfo> codPageRecords { get; set; } // 丢失和巡回的,画面显示用
    public static ApexPages.StandardSetController setCon { get; set; }
    @AuraEnabled
    public static List<Consumable_order_details2__c> setConDetails2 { get; set; }
    public static Map<Id, String> pandiandetailsMap = new Map<Id, String>();
    /*****************検索用******************/
    public static String barcode { get; set; }
    public static Boolean done { get; set; }
    /*****************画面表示Bean******************/
    //页面主数据显示用
    // private static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
    //盘点到的产品
    public static List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
    public static List<Consumable_order_details2__c> showcod2nid = new List<Consumable_order_details2__c>();
  public static Integer totalcount { get; set; }
  //分页使用数据
  public static String fileName { get; set; }
  public static Integer size { get; set; }
  public static Integer noOfRecords { get; set; }
  public static List<ConsumableorderdetailsInfo> codPageRecords { get; set; } // 丢失和巡回的,画面显示用
  public static ApexPages.StandardSetController setCon { get; set; }
  @AuraEnabled
  public static List<Consumable_order_details2__c> setConDetails2 { get; set; }
  public static Map<Id, String> pandiandetailsMap = new Map<Id, String>();
  /*****************検索用******************/
  public static String barcode { get; set; }
  public static Boolean done { get; set; }
  /*****************画面表示Bean******************/
  //页面主数据显示用
  // private static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecords;
  //盘点到的产品
  public static List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
  public static List<Consumable_order_details2__c> showcod2nid = new List<Consumable_order_details2__c>();
    //public List<Consumable_order_details2__c> pandiandetailsList { get; set; }
    public static List<List<Consumable_order_details2__c>> pandiandetailsListShow { get; set; }
    //寻回明细
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecordserrordummy; // 丢失和巡回的,实际炒作用
    @AuraEnabled
    public static List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview { get; set; } // 产品单位的List
    public static List<Consumable_order_details2__c> InsListUp = new List<Consumable_order_details2__c>();
  //public List<Consumable_order_details2__c> pandiandetailsList { get; set; }
  public static List<List<Consumable_order_details2__c>> pandiandetailsListShow {
    get;
    set;
  }
  //寻回明细
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsRecordserrordummy; // 丢失和巡回的,实际炒作用
  @AuraEnabled
  public static List<List<ConsumableorderdetailsInfo>> consumableorderdetailsRecordsview {
    get;
    set;
  } // 产品单位的List
  public static List<Consumable_order_details2__c> InsListUp = new List<Consumable_order_details2__c>();
    public static List<ConsumableorderdetailsInfo> consumableorderdetailsviewRecords;
  public static List<ConsumableorderdetailsInfo> consumableorderdetailsviewRecords;
    public static Integer consumableorderdetailsCount {
        get {
            return consumableorderdetailsRecords == null ? 0 : consumableorderdetailsRecords.size();
        }
  public static Integer consumableorderdetailsCount {
    get {
      return consumableorderdetailsRecords == null
        ? 0
        : consumableorderdetailsRecords.size();
    }
    //list<String> notexitlist = new list<String>();
    public static Map<String, String> reFindProduct = new Map<String, String>();
    //排序用
    // public static  String sortKey;
    // public static  String preSortKey;
    // public static  Boolean sortOrderAsc;
    // public static  String[] sortOrder;
    //private Set<String> carCodeListLose = new Set<String>();              //ProductCount_Res 有,BarCodeListP 没有
    /*****************经销商ID******************/
    private static String accountid = null;
    private static String accountName = null;
    // 盘点 ID
    private static String eSetId = '';
    // 登录者工作地
    private static String userWorkLocation;
    //经销商用户产品分类(ET、ENG)
    public static String agencyProType { get; set; }
    public static String sqlagencyProType;
    //判断操作人员是否盘点
    public static Boolean iSinventory = false;
  }
  //list<String> notexitlist = new list<String>();
  public static Map<String, String> reFindProduct = new Map<String, String>();
  //排序用
  // public static  String sortKey;
  // public static  String preSortKey;
  // public static  Boolean sortOrderAsc;
  // public static  String[] sortOrder;
  //private Set<String> carCodeListLose = new Set<String>();              //ProductCount_Res 有,BarCodeListP 没有
  /*****************经销商ID******************/
  private static String accountid = null;
  private static String accountName = null;
  // 盘点 ID
  private static String eSetId = '';
  // 登录者工作地
  private static String userWorkLocation;
  //经销商用户产品分类(ET、ENG)
  public static String agencyProType { get; set; }
  public static String sqlagencyProType;
  //判断操作人员是否盘点
  public static Boolean iSinventory = false;
    public LexInventoryController() {
        size = Integer.valueOf(System.Label.orderdetLimitsize);
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        done = false;
  public LexInventoryController() {
    size = Integer.valueOf(System.Label.orderdetLimitsize);
    consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    done = false;
        consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
        consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        //codPageRecordsShow = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
    consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
    codPageRecords = new List<ConsumableorderdetailsInfo>();
    //codPageRecordsShow = new List<ConsumableorderdetailsInfo>();
  }
  private static void initStandardController() {
    // init standard controller
    List<Consumable_order_details2__c> showcod2 = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Asset_Model_No__c,
        Isoverdue__c,
        Box_Piece__c,
        Bar_Code_search__c
      FROM Consumable_order_details2__c
      WHERE Id IN :pandiandetailsMap.keySet()
      ORDER BY Name DESC
    ];
    setConDetails2 = showcod2;
    System.debug('setConDetails2===>' + setConDetails2);
    // setCon = new ApexPages.StandardSetController(showcod2);
    // // sets the number of records in each page set
    // setCon.setPageSize(size);
    // noOfRecords = setCon.getResultSize();
  }
  public static List<Consumable_order_details2__c> cod2s() {
    return setConDetails2;
  }
  //Changes the size of pagination
  public static PageReference refreshPageSize() {
    setCon.setPageSize(size);
    //showcod2nid = cod2s();
    makepagerecords();
    return null;
  }
  public static List<ConsumableorderdetailsInfo> makepagerecords() {
    showcod2nid = cod2s();
    codPageRecords = new List<ConsumableorderdetailsInfo>();
    for (Consumable_order_details2__c cod2 : showcod2nid) {
      codPageRecords.add(
        new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id))
      );
    }
    System.debug('===>codPageRecords1' + codPageRecords);
    return codPageRecords;
  }
    private static void initStandardController() {
        // init standard controller
        List<Consumable_order_details2__c> showcod2 = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Asset_Model_No__c,
                Isoverdue__c,
                Box_Piece__c,
                Bar_Code_search__c
            FROM Consumable_order_details2__c
            WHERE Id IN :pandiandetailsMap.keySet()
            ORDER BY Name DESC
        ];
        setConDetails2 = showcod2;
        System.debug('setConDetails2===>' + setConDetails2);
        // setCon = new ApexPages.StandardSetController(showcod2);
        // // sets the number of records in each page set
        // setCon.setPageSize(size);
        // noOfRecords = setCon.getResultSize();
  // 画面初始化
  @AuraEnabled
  public static ResponseBodyLWC init() {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
    setConDetails2 = new List<Consumable_order_details2__c>();
    String url = '在库调整一览';
    fileName = EncodingUtil.urlEncode(url, 'UTF-8');
    List<Consumable_order_details2__c> showcod2 = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Asset_Model_No__c,
        Isoverdue__c,
        Box_Piece__c,
        Bar_Code_search__c
      FROM Consumable_order_details2__c
      WHERE Id IN :pandiandetailsMap.keySet()
      ORDER BY Name
    ];
    System.debug('pandiandetailsMap====>' + pandiandetailsMap);
    initStandardController();
    makepagerecords();
    // sortKey = '1';
    // preSortKey = '1';
    // sortOrderAsc = false;
    // sortOrder = new String[1];
    // sortOrder = new String[]{' ',' ','↓'};
    String userId = UserInfo.getUserId();
    //String userId = '00510000006k82X';
    //String 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';
    }
    public static List<Consumable_order_details2__c> cod2s() {
        return setConDetails2;
    }
    //Changes the size of pagination
    public static PageReference refreshPageSize() {
        setCon.setPageSize(size);
        //showcod2nid = cod2s();
        makepagerecords();
        return null;
    }
    public static List<ConsumableorderdetailsInfo> makepagerecords() {
        showcod2nid = cod2s();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        for (Consumable_order_details2__c cod2 : showcod2nid) {
            codPageRecords.add(new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id)));
        }
        System.debug('===>codPageRecords1' + codPageRecords);
        return codPageRecords;
    }
    // 画面初始化
    @AuraEnabled
    public static ResponseBodyLWC init() {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        consumableorderdetailsRecordsview = new List<List<ConsumableorderdetailsInfo>>();
        setConDetails2 = new List<Consumable_order_details2__c>();
        String url = '在库调整一览';
        fileName = EncodingUtil.urlEncode(url, 'UTF-8');
        List<Consumable_order_details2__c> showcod2 = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Asset_Model_No__c,
                Isoverdue__c,
                Box_Piece__c,
                Bar_Code_search__c
            FROM Consumable_order_details2__c
            WHERE Id IN :pandiandetailsMap.keySet()
            ORDER BY Name
        ];
        System.debug('pandiandetailsMap====>' + pandiandetailsMap);
        initStandardController();
        makepagerecords();
        // sortKey = '1';
        // preSortKey = '1';
        // sortOrderAsc = false;
        // sortOrder = new String[1];
        // sortOrder = new String[]{' ',' ','↓'};
        String userId = UserInfo.getUserId();
        //String userId = '00510000006k82X';
        //String 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';
        }
        sqlagencyProType = '%' + agencyProType + '%';
        Account accountInfo = [SELECT Name, Dealer_discount__c FROM account WHERE id = :accountid];
        accountName = accountInfo.Name;
        consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
        Map<String, Product2__c> midMap = new Map<String, Product2__c>();
        List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
        Map<String, ConsumableorderdetailsInfo> newMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
        Map<String, ConsumableorderdetailsInfo> newMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
        //开始制作表头数据
        // List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
        //                                                     SFDA_Status__c,Packing_list_manual__c,
        //                                                     Asset_Model_No__c
        //                                                 from Product2__c
        //                                                 //where Estimation_Entry_Possibility__c = '○'
        //                                                  where Product_Type__c like : sqlagencyProType
        //                                                 ];
        // for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
        //     midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        // }
        //查询库存 追加返品库存
        List<Consumable_order_details2__c> ProductCount_Res = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Asset_Model_No__c,
                Isoverdue__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 Cancellation_Flag__c = FALSE
                AND Bar_Code__c != NULL
                AND Product_Type__c LIKE :sqlagencyProType
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND Dealer_Info_text__c = :accountName
        ];
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
        //开始制作表头数据
        Set<Id> Product2cIdSet = new Set<Id>();
        for (Consumable_order_details2__c con_or_d2item : ProductCount_Res) {
            Product2cIdSet.add(con_or_d2item.Consumable_Product__c);
        }
        List<Product2__c> productCount_Unfull_bak = [
            SELECT Id, Name, Name__c, SFDA_Status__c, Packing_list_manual__c, Asset_Model_No__c
            FROM Product2__c
            //where Estimation_Entry_Possibility__c = '○'
            WHERE Id IN :Product2cIdSet AND Product_Type__c LIKE :sqlagencyProType
        ];
        for (integer i = 0; i < productCount_Unfull_bak.size(); i++) {
            midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
        }
        system.debug('productCount_Unfull_bak' + productCount_Unfull_bak.size());
        // String erro='productCount_Unfull_bak:'+productCount_Unfull_bak.size();
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, erro));
        //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy end
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ProductCount_Res  ' + ProductCount_Res.size()));
        for (Integer i = 0; i < ProductCount_Res.size(); i++) {
            //然后循环CountDel做Box和piece2个map
            if (MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) && ProductCount_Res[i].Box_Piece__c == '盒') {
                if (newMidBoxMap.containsKey(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c)) {
                    ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(
                            ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c
                        )
                        .clone();
                    Jstage.countid = Jstage.countid + 1;
                    if (ProductCount_Res[i].Isoverdue__c == 1) {
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidBoxMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, Jstage);
                } else {
                    ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
                        MidMap.get(ProductCount_Res[i].Consumable_Product__c)
                    );
                    Jstage.countid = Jstage.countid + 1;
                    if (ProductCount_Res[i].Isoverdue__c == 1) {
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidBoxMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, Jstage);
                }
            } else if (MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) && ProductCount_Res[i].Box_Piece__c == '个') {
                if (newMidPieceMap.containsKey(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c)) {
                    ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(
                            ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c
                        )
                        .clone();
                    Jstage.countid = Jstage.countid + 1;
                    if (ProductCount_Res[i].Isoverdue__c == 1) {
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidPieceMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, Jstage);
                } else {
                    ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
                        MidMap.get(ProductCount_Res[i].Consumable_Product__c)
                    );
                    Jstage.countid = Jstage.countid + 1;
                    if (ProductCount_Res[i].Isoverdue__c == 1) {
                        Jstage.limitCount = Jstage.limitCount + 1;
                    }
                    Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
                    newMidPieceMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, Jstage);
                }
            }
        }
        for (ConsumableorderdetailsInfo bss : newMidBoxMap.values()) {
            bss.overlimitCount = bss.countid - bss.limitCount;
            boxRecords.add(bss);
        }
        boxRecords.sort();
        for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
            bss.overlimitCount = bss.countid - bss.limitCount;
        }
        for (ConsumableorderdetailsInfo bss : boxRecords) {
            consumableorderdetailsRecords.add(bss);
            if (newMidPieceMap.containsKey(bss.Prod.Id + '个')) {
                consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
                //newMidPieceMap移除已经添加的Piece
                newMidPieceMap.remove(bss.Prod.Id + '个');
            }
        }
        for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
            consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
        }
        //consumableorderdetailsCount = consumableorderdetailsRecords.size();
        listCut();
        data.put('ConsumableorderdetailsRecordsview', JSON.serialize(ConsumableorderdetailsRecordsview));
        data.put('userWorkLocation', userWorkLocation);
        data.put('agencyProType', agencyProType);
        data.put('accountName', accountName);
        data.put('accountid', accountid);
        data.put('consumableorderdetailsRecords', JSON.serialize(consumableorderdetailsRecords));
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    private static void listCut() {
        //拆分暂用list
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsInfo c = null;
        ConsumableorderdetailsRecordsbreak.clear();
        ConsumableorderdetailsRecordsbreakover.clear();
        consumableorderdetailsRecordsview.clear();
        //选择产品view
        ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
        if (consumableorderdetailsRecords.size() > 1000) {
            for (Integer i = 0; i < consumableorderdetailsRecords.size(); i++) {
                if (i < 1000) {
                    c = consumableorderdetailsRecords.get(i);
                    ConsumableorderdetailsRecordsbreak.add(c);
                } else {
                    c = consumableorderdetailsRecords.get(i);
                    ConsumableorderdetailsRecordsbreakover.add(c);
                }
            }
            consumableorderdetailsRecordsview.add(ConsumableorderdetailsRecordsbreak);
            consumableorderdetailsRecordsview.add(ConsumableorderdetailsRecordsbreakover);
        } else {
            consumableorderdetailsRecordsview.add(consumableorderdetailsRecords);
        }
    }
    //========20160311======ADD_Start================================
    // 将页面或取得BarCode去掉重复的,转换成List
    //========20160311======ADD_Start================================
    public static List<String> ParseBarCode(String Code) {
        Map<String, Integer> barcodeCountMap = new Map<String, Integer>();
        String[] Cache = new List<String>{};
        Cache = Code.split('\n');
        List<String> Buff = new List<String>();
        for (String A : Cache) {
            A = A.trim().toUpperCase();
            if (barcodeCountMap.containsKey(A)) {
                barcodeCountMap.put(A, barcodeCountMap.get(A) + 1);
            } else {
                barcodeCountMap.put(A, 1);
            }
            Buff.add(A + barcodeCountMap.get(A));
        }
        return Buff;
    }
    //test
    // @AuraEnabled
    // public static ResponseBodyLWC searchConsumableorderdetails(String sqlagencyProType,String userWorkLocation,String accountName,String barcode,List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsLWC){
    //     return new ResponseBodyLWC('Error',500, 'test', '');
    sqlagencyProType = '%' + agencyProType + '%';
    Account accountInfo = [
      SELECT Name, Dealer_discount__c
      FROM account
      WHERE id = :accountid
    ];
    accountName = accountInfo.Name;
    consumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
    Map<String, Product2__c> midMap = new Map<String, Product2__c>();
    List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
    Map<String, ConsumableorderdetailsInfo> newMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
    Map<String, ConsumableorderdetailsInfo> newMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
    //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
    //开始制作表头数据
    // List<Product2__c> productCount_Unfull_bak = [select Id, Name,Name__c,
    //                                                     SFDA_Status__c,Packing_list_manual__c,
    //                                                     Asset_Model_No__c
    //                                                 from Product2__c
    //                                                 //where Estimation_Entry_Possibility__c = '○'
    //                                                  where Product_Type__c like : sqlagencyProType
    //                                                 ];
    // for(integer i = 0;i < productCount_Unfull_bak.size() ; i++){
    //     midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
    // }
    //========20160311======ADD_End==================================
    // BarCode录入
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(
        String agencyProType,
        String userWorkLocation,
        String accountName,
        String barcode,
        String consumableorderdetailsRecordsLWC,
        Integer pageSizeLWC,
        Integer pageTokenLWC,
        String sortFieldLWC,
        String sortOrderLWC
    ) {
        pageSize = pageSizeLWC;
        pageToken = pageTokenLWC;
        sortField = sortFieldLWC;
        sortOrder = sortOrderLWC;
        System.debug('===>consumableorderdetailsRecordsLWC' + consumableorderdetailsRecordsLWC);
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
            consumableorderdetailsRecordsLWC,
            List<ConsumableorderdetailsInfo>.class
        );
        // ConsumableorderdetailsInfo[] consumableorderdetailsRecords=(List<ConsumableorderdetailsInfo>)JSON.deserialize(consumableorderdetailsRecordsLWC,List<ConsumableorderdetailsInfo>.class);
        system.debug('=====>consumableorderdetailsRecordsLWC' + consumableorderdetailsRecordsLWC);
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        sqlagencyProType = '%' + agencyProType + '%';
        System.debug('sqlagencyProType==>' + sqlagencyProType);
        System.debug('accountName==>' + accountName);
        System.debug('userWorkLocation==>' + userWorkLocation);
        /* BarCodelist做成 */
        //FIXME barcodeSet 做成,ProductCount_ResSet 做成
        List<Consumable_order_details2__c> pandiandetailsList = new List<Consumable_order_details2__c>();
        pandiandetailsListShow = new List<List<Consumable_order_details2__c>>();
        done = false;
        List<String> BarCodeListP = ParseBarCode(barcode);
        System.debug('BarCodeListP===>' + BarCodeListP);
        //查询库存 追加返品库存
        List<Consumable_order_details2__c> ProductCount_Res = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Dealer_Info_text__c,
                Asset_Model_No__c,
                Isoverdue__c,
                Box_Piece__c,
                Bar_Code_search__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 :sqlagencyProType
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND Dealer_Info_text__c = :accountName
        ];
        System.debug('ProductCount_Res==>' + ProductCount_Res);
        reFindProduct.clear();
        Map<String, ConsumableorderdetailsInfo> barCodeListAdjustMap = new Map<String, ConsumableorderdetailsInfo>();
        //barCodeListLoseMap.clear();
        Set<String> carCodeListLose = new Set<String>();
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsAdjust = new List<ConsumableorderdetailsInfo>();
        Map<String, String> proIdNotinpage = new Map<String, String>();
        List<Consumable_order_details2__c> reFindProductList = new List<Consumable_order_details2__c>();
        codPageRecords = new List<ConsumableorderdetailsInfo>();
        consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
        List<ConsumableorderdetailsInfo> reFindProductaddtopage = new List<ConsumableorderdetailsInfo>();
        pandiandetailsMap.clear();
        reSet = new List<Consumable_order_details2__c>();
        /* 判断BarCode是否为空 */
        if (barcode == null || barcode == '') {
            //先取出所有丢失产品
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                // 20200509 gzw add 盘点数量初始化
                ass.Pandian = 0;
                // 20200509 gzw add 盘点数量初始化
                if (ass.check == true) {
                    //ass.Diff = ass.countid - ass.Pandian;
                    for (integer i = 0; i < ProductCount_Res.size(); i++) {
                        System.debug('Pro==>' + ProductCount_Res[i].Consumable_Product__c);
                        System.debug('ProId==>' + ass.Prod.Id);
                        System.debug('ass.boxPiece ==>' + ass.boxPiece);
                        System.debug('boxPiece ==>' + ProductCount_Res[i].Box_Piece__c);
                        if (ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c) {
                            if (carCodeListLose.contains(ProductCount_Res[i].Bar_Code__c)) {
                                continue;
                            } else {
                                //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                                //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                                ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
                                carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
                            }
                        }
                    }
                }
            }
            //已经出库的产品
            List<Consumable_order_details2__c> reSet1 = [
                SELECT
                    Id,
                    Name,
                    Consumable_Product__c,
                    Bar_Code__c,
                    Consumable_Product__r.Name__c,
                    Asset_Model_No__c,
                    Isoverdue__c,
                    Box_Piece__c,
                    Bar_Code_search__c,
                    Dealer_Info_text__c
                FROM Consumable_order_details2__c
                WHERE
                    Dealer_Arrive__c = TRUE
                    AND (Dealer_Shipment__c = TRUE
                    OR Dealer_Saled__c = TRUE)
                    AND Dealer_Returned__c = FALSE
                    AND Cancellation_Flag__c = FALSE
                    AND Bar_Code__c IN :carCodeListLose
                    AND Dealer_Info_text__c = :accountName
                ORDER BY Name
            ];
            Map<String, Consumable_order_details2__c> needreturnMap = new Map<String, Consumable_order_details2__c>();
            for (Consumable_order_details2__c cod2 : reSet1) {
                needreturnMap.put(cod2.Bar_Code__c, cod2);
            }
            // 经销商之间或者同一经销商不同工作地调货
            reSet1 = [
                SELECT
                    Id,
                    Name,
                    Consumable_Product__c,
                    Bar_Code__c,
                    Consumable_Product__r.Name__c,
                    Asset_Model_No__c,
                    Isoverdue__c,
                    Box_Piece__c,
                    Bar_Code_search__c,
                    Dealer_Info_text__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 Cancellation_Flag__c = FALSE
                    AND Bar_Code__c IN :carCodeListLose
                    AND (Dealer_Info_text__c != :accountName
                    OR (Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c != :userWorkLocation))
                ORDER BY Name
            ];
            Map<String, Consumable_order_details2__c> otherAgProMap = new Map<String, Consumable_order_details2__c>();
            for (Consumable_order_details2__c cod2 : reSet1) {
                otherAgProMap.put(cod2.Bar_Code__c, cod2);
            }
            carCodeListLose.clear();
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (ass.check == true) {
                    ass.Diff = ass.countid - ass.Pandian;
                    for (integer i = 0; i < ProductCount_Res.size(); i++) {
                        if (ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c) {
                            if (carCodeListLose.contains(ProductCount_Res[i].Bar_Code_search__c)) {
                                continue;
                            } else {
                                if (needreturnMap.containsKey(ProductCount_Res[i].Bar_Code__c)) {
                                    consumableorderdetailsRecordserrordummy.add(
                                        new ConsumableorderdetailsInfo(ProductCount_Res[i], '该产品未返品')
                                    );
                                    pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品未返品');
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    continue;
                                }
                                if (otherAgProMap.containsKey(ProductCount_Res[i].Bar_Code__c)) {
                                    consumableorderdetailsRecordserrordummy.add(
                                        new ConsumableorderdetailsInfo(
                                            ProductCount_Res[i],
                                            '该产品归属于' +
                                                otherAgProMap.get(ProductCount_Res[i].Bar_Code__c).Dealer_Info_text__c +
                                                '的库存。'
                                        )
                                    );
                                    pandiandetailsMap.put(
                                        ProductCount_Res[i].Id,
                                        '该产品归属于' + otherAgProMap.get(ProductCount_Res[i].Bar_Code__c).Dealer_Info_text__c + '的库存。'
                                    );
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    continue;
                                }
                                if (ProductCount_Res[i].Isoverdue__c == 0) {
                                    consumableorderdetailsRecordserrordummy.add(
                                        new ConsumableorderdetailsInfo(ProductCount_Res[i], '该产品已经过有效期,请销存。')
                                    );
                                    pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品已经过有效期,请销存。');
                                    carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                                    ass.Diff--;
                                    continue;
                                }
                                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i], '丢失'));
                                pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                                carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                            }
                        }
                    }
                } else {
                    ass.Pandian = 0;
                    ass.Diff = 0;
                }
            }
            List<Consumable_order_details2__c> showcod2 = new List<Consumable_order_details2__c>();
            if (pandiandetailsMap.keySet().size() > 0) {
                showcod2 = [
                    SELECT
                        Id,
                        Name,
                        Consumable_Product__c,
                        Bar_Code__c,
                        Consumable_Product__r.Name__c,
                        Asset_Model_No__c,
                        Isoverdue__c,
                        Box_Piece__c,
                        Bar_Code_search__c
                    FROM Consumable_order_details2__c
                    WHERE Id IN :pandiandetailsMap.keySet()
                    ORDER BY Name
                ];
            }
            initStandardController();
            showcod2nid = cod2s();
            for (Consumable_order_details2__c cod2 : showcod2nid) {
                codPageRecords.add(new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id)));
            }
            iSinventory = true;
            if (codPageRecords.size() > 0)
                done = true;
            consumableorderdetailsRecordserrordummy.clear();
            //pandiandetailsList = new list<Consumable_order_details2__c>();
            pandiandetailsList = [
                SELECT Id, Bar_Code__c, Consumable_Product__r.Name__c, Box_Piece__c, Lose_reason__c
                FROM Consumable_order_details2__c
                WHERE Id IN :pandiandetailsMap.keySet()
                ORDER BY Name
            ];
            for (Consumable_order_details2__c codDet : pandiandetailsList) {
                codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
            }
            List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
            for (Consumable_order_details2__c cod2 : pandiandetailsList) {
                pandiandetailsListMid.add(cod2);
                if (pandiandetailsListMid.size() == 1000) {
                    pandiandetailsListShow.add(pandiandetailsListMid);
                    pandiandetailsListMid = new List<Consumable_order_details2__c>();
                }
            }
            if (pandiandetailsListMid.size() > 0) {
                pandiandetailsListShow.add(pandiandetailsListMid);
            }
            //分页
            PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
            totalCount = codPageRecords.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;
            Integer startIdx;
            Integer endIdx;
            List<ConsumableorderdetailsInfo> pageCodeRecords = new List<ConsumableorderdetailsInfo>();
            startIdx = pageToken;
            endIdx = startIdx + pageSize;
            if (endIdx > codPageRecords.size()) {
                endIdx = codPageRecords.size();
            }
            for (Integer i = startIdx; i < endIdx; i++) {
                pageCodeRecords.add(codPageRecords.get(i));
            }
            data.put('paginatedAccounts', paginatedAccounts);
            data.put('pageCodeRecords', pageCodeRecords);
            //end
            data.put('codPageRecords', JSON.serialize(codPageRecords));
            data.put('consumableorderdetailsRecords', JSON.serialize(consumableorderdetailsRecords));
            data.put('consumableorderdetailsRecordsview', JSON.serialize(consumableorderdetailsRecordsview));
            data.put('pandiandetailsMap', pandiandetailsMap);
            System.debug('iSinventory===>' + iSinventory);
            System.debug('codPageRecords===>' + codPageRecords);
            data.put('iSinventory', JSON.serialize(iSinventory));
            data.put('reSet1', reSet1);
            System.debug('reSet1===>' + reSet1);
            res.code = 200;
            res.status = 'Success1';
            return res;
        }
        //CHAN-B7J4NB 只有一个时,盘点不到
        //init();
        //CHAN-B7J4NB
        Map<String, String> showproductIdMap = new Map<String, String>();
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
            showproductIdMap.put(ass.prod.Id + ass.boxPiece, ass.prod.Id + ass.boxPiece);
        }
        // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCodeListP' + BarCodeListP));
        /***************************************************************************/
        // BarCode的检索  所有在库
        reSet = [
            SELECT Id, Consumable_Product__c, Consumable_Product__r.Name__c, Box_Piece__c, Bar_Code_search__c, Isoverdue__c
            FROM Consumable_order_details2__c
            WHERE
                Bar_Code_search__c IN :BarCodeListP
                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
                AND Cancellation_Date__c = NULL
                AND Bar_Code__c != NULL
                AND Product_Type__c LIKE :sqlagencyProType
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        System.debug('reSet===>' + reSet);
        Map<String, Integer> pandianProdIdCountMap = new Map<String, Integer>(); // ProdId 単位
        // 20200509 add gzw 记录需要销存数量
        Map<String, Integer> pandianoverdueCountMap = new Map<String, Integer>(); // ProdId 単位
        // 20200509 add gzw 记录需要销存数量
        Map<String, ConsumableorderdetailsInfo> barCodeListPandianMap = new Map<String, ConsumableorderdetailsInfo>(); // 明細バーコード 単位
        //盘点到的明细
        for (Consumable_order_details2__c rs : reSet) {
            //BarCodeListPandian.add(rs.Bar_Code_search__c);
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (rs.Consumable_Product__c == ass.Prod.Id && rs.Box_Piece__c == ass.boxPiece) {
                    ass.check = true;
                }
            }
            barCodeListPandianMap.put(rs.Bar_Code_search__c, new ConsumableorderdetailsInfo(rs));
            if (rs.Isoverdue__c == 0) {
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs, '该产品已经过有效期,请销存。'));
                pandiandetailsMap.put(rs.Id, '该产品已经过有效期,请销存。');
                if (pandianoverdueCountMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c) == false) {
                    pandianoverdueCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, 1);
                } else {
                    pandianoverdueCountMap.put(
                        rs.Consumable_Product__c + rs.Box_Piece__c,
                        pandianoverdueCountMap.get(rs.Consumable_Product__c + rs.Box_Piece__c) + 1
                    );
                }
                continue;
            }
            if (pandianProdIdCountMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c) == false) {
                pandianProdIdCountMap.put(rs.Consumable_Product__c + rs.Box_Piece__c, 1);
            } else {
                pandianProdIdCountMap.put(
                    rs.Consumable_Product__c + rs.Box_Piece__c,
                    pandianProdIdCountMap.get(rs.Consumable_Product__c + rs.Box_Piece__c) + 1
                );
            }
        }
        // 经销商之间或者同一经销商不同工作地调货
        List<Consumable_order_details2__c> reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Dealer_Shipment__c,
                Dealer_Saled__c,
                Asset_Model_No__c,
                Isoverdue__c,
                Box_Piece__c,
                Dealer_Arrive__c,
                Bar_Code_search__c,
                Dealer_Info_text__c
            FROM Consumable_order_details2__c
            WHERE
                (Dealer_Arrive__c = TRUE
                OR Dealer_Shipment__c = TRUE
                OR Dealer_Saled__c = TRUE)
                AND Dealer_Returned__c = FALSE
                AND Cancellation_Flag__c = FALSE
                AND Bar_Code_search__c IN :BarCodeListP
                AND (Dealer_Info_text__c != :accountName
                OR (Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c != :userWorkLocation))
            ORDER BY Name
        ];
        Map<String, Consumable_order_details2__c> otherAgProMap = new Map<String, Consumable_order_details2__c>();
        for (Consumable_order_details2__c cod2 : reSet1) {
            otherAgProMap.put(cod2.Bar_Code__c, cod2);
        }
        // 需要入库的产品
        for (Consumable_order_details2__c cod2 : reSet1) {
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (cod2.Consumable_Product__c == ass.Prod.Id && cod2.Box_Piece__c == ass.boxPiece) {
                    ass.check = true;
                }
            }
            if (!showproductIdMap.containsKey(cod2.Consumable_product__c + cod2.Box_Piece__c)) {
                reFindProductList.add(cod2);
                proIdNotinpage.put(cod2.Consumable_Product__c, cod2.Box_Piece__c);
            }
            if (
                !barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c) &&
                otherAgProMap.containsKey(cod2.Bar_Code__c) &&
                (otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == true ||
                otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == true)
            ) {
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(cod2, '无此产品的库存,请入库。'));
                pandiandetailsMap.put(cod2.Id, '无此产品的库存,请入库。');
            }
        }
        //寻回明细
        List<Consumable_order_details2__c> productAdjust = new List<Consumable_order_details2__c>();
        productAdjust = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Lose_reason__c,
                Asset_Model_No__c,
                Box_Piece__c,
                Bar_Code_search__c,
                Isoverdue__c
            FROM Consumable_order_details2__c
            WHERE
                Bar_Code_search__c IN :BarCodeListP
                AND Bar_Code__c != NULL
                AND Lose_Flag__c = TRUE
                AND Product_Type__c LIKE :sqlagencyProType
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
            ORDER BY Name
        ];
        for (Consumable_order_details2__c rs : productAdjust) {
            // 过期库存销存 20200427 gzw add srart
            if (rs.Isoverdue__c == 0 || rs.Lose_reason__c == '过期库存销存') {
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs, '过期或者销存产品,无法寻回入库'));
                pandiandetailsMap.put(rs.Id, '过期或者销存产品,无法寻回入库');
                carCodeListLose.add(rs.Bar_Code_search__c);
                continue;
            }
            // 过期库存销存 20200427 gzw add end
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (rs.Consumable_Product__c == ass.Prod.Id && rs.Box_Piece__c == ass.boxPiece) {
                    ass.check = true;
                }
            }
            if (!showproductIdMap.containsKey(rs.Consumable_product__c + rs.Box_Piece__c)) {
                reFindProductList.add(rs);
                proIdNotinpage.put(rs.Consumable_Product__c, rs.Box_Piece__c);
            }
            if (barCodeListAdjustMap.containsKey(rs.Bar_Code_search__c)) {
                continue;
            } else {
                barCodeListAdjustMap.put(rs.Bar_Code_search__c, new ConsumableorderdetailsInfo(rs));
                consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(rs, '寻回'));
                pandiandetailsMap.put(rs.Id, '寻回');
                consumableorderdetailsRecordsAdjust.add(new ConsumableorderdetailsInfo(rs));
            }
        }
        if (reFindProductList.size() > 0) {
            Map<String, Product2__c> midMap = new Map<String, Product2__c>();
            List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> newMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
            Map<String, ConsumableorderdetailsInfo> newMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
            List<Product2__c> product_Refind = [
                SELECT Id, Name, Name__c, SFDA_Status__c, Packing_list_manual__c, Asset_Model_No__c
                FROM Product2__c
                WHERE Id IN :proIdNotinpage.keySet()
            ];
            for (Product2__c pro : product_Refind) {
                midMap.put(pro.Id, pro);
            }
            for (Integer i = 0; i < reFindProductList.size(); i++) {
                //然后循环CountDel做Box和piece2个map
                if (MidMap.containsKey(reFindProductList[i].Consumable_Product__c) && reFindProductList[i].Box_Piece__c == '盒') {
                    if (newMidBoxMap.containsKey(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c)) {
                        ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(
                                reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c
                            )
                            .clone();
                        Jstage.countid = 0;
                        if (reFindProductList[i].Isoverdue__c == 1) {
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidBoxMap.put(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c, Jstage);
                    } else {
                        ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
                            MidMap.get(reFindProductList[i].Consumable_Product__c)
                        );
                        Jstage.countid = 0;
                        if (reFindProductList[i].Isoverdue__c == 1) {
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidBoxMap.put(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c, Jstage);
                    }
                } else if (MidMap.containsKey(reFindProductList[i].Consumable_Product__c) && reFindProductList[i].Box_Piece__c == '个') {
                    if (newMidPieceMap.containsKey(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c)) {
                        ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(
                                reFindProductList[i].Consumable_product__c + reFindProductList[i].Box_Piece__c
                            )
                            .clone();
                        Jstage.countid = 0;
                        if (reFindProductList[i].Isoverdue__c == 1) {
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidPieceMap.put(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c, Jstage);
                    } else {
                        ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
                            MidMap.get(reFindProductList[i].Consumable_Product__c)
                        );
                        Jstage.countid = 0;
                        if (reFindProductList[i].Isoverdue__c == 1) {
                            Jstage.limitCount = 0;
                        }
                        Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
                        newMidPieceMap.put(reFindProductList[i].Consumable_Product__c + reFindProductList[i].Box_Piece__c, Jstage);
                    }
                }
            }
            for (ConsumableorderdetailsInfo bss : newMidBoxMap.values()) {
                bss.check = true;
                bss.overlimitCount = bss.countid - bss.limitCount;
                boxRecords.add(bss);
            }
            boxRecords.sort();
            for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
                bss.check = true;
                bss.overlimitCount = bss.countid - bss.limitCount;
            }
            for (ConsumableorderdetailsInfo bss : boxRecords) {
                consumableorderdetailsRecords.add(bss);
                if (newMidPieceMap.containsKey(bss.Prod.Id + '个')) {
                    consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
                    //newMidPieceMap移除已经添加的Piece
                    newMidPieceMap.remove(bss.Prod.Id + '个');
                }
            }
            for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
                consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
            }
        }
        //先取出未盘点到的产品
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
            if (ass.check == true) {
                for (integer i = 0; i < ProductCount_Res.size(); i++) {
                    if (ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c) {
                        if (barCodeListPandianMap.get(ProductCount_Res[i].Bar_Code_search__c) != null) {
                            continue;
                        } else {
                            carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
                            ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
                            //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                            //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                        }
                    }
                }
            }
        }
        //已经出库的产品
        List<Consumable_order_details2__c> reSet2 = [
            SELECT
                Id,
                Name,
                Consumable_Product__c,
                Bar_Code__c,
                Consumable_Product__r.Name__c,
                Asset_Model_No__c,
                Isoverdue__c,
                Box_Piece__c,
                Bar_Code_search__c,
                Dealer_Info_text__c
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND (Dealer_Shipment__c = TRUE
                OR Dealer_Saled__c = TRUE)
                AND Dealer_Returned__c = FALSE
                AND Cancellation_Flag__c = FALSE
                AND Bar_Code_search__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        Map<String, Consumable_order_details2__c> needreturnMap = new Map<String, Consumable_order_details2__c>();
        for (Consumable_order_details2__c cod2 : reSet2) {
            needreturnMap.put(cod2.Bar_Code__c, cod2);
        }
        //// 经销商之间或者同一经销商不同工作地调货
        //List<Consumable_order_details2__c> reSet1 = [SELECT Id,  Name,Consumable_Product__c,
        //                Bar_Code__c,Consumable_Product__r.Name__c,Dealer_Shipment__c,Dealer_Saled__c,
        //                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,Dealer_Arrive__c,
        //                Bar_Code_search__c,Dealer_Info_text__c
        //            FROM Consumable_order_details2__c
        //            WHERE (Dealer_Arrive__c = TRUE
        //            or  Dealer_Shipment__c= TRUE
        //            or  Dealer_Saled__c = TRUE)
        //            AND  Dealer_Returned__c = FALSE
        //            AND  Cancellation_Flag__c = FALSE
        //            AND  Bar_Code_search__c in :BarCodeListP
        //            AND (Dealer_Info_text__c != :accountName
        //                OR (Dealer_Info_text__c = :accountName
        //                    AND Arrive_Owner_Work_Location__c != :userWorkLocation)
        //            )
        //            ORDER BY Name ];
        //Map<String,Consumable_order_details2__c> otherAgProMap = new Map<String,Consumable_order_details2__c>();
        //for(Consumable_order_details2__c cod2 :reSet1){
        //    otherAgProMap.put(cod2.Bar_Code__c,cod2);
        //}
        carCodeListLose.clear();
        //未盘点到的产品
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
            if (ass.check == true) {
                for (integer i = 0; i < ProductCount_Res.size(); i++) {
                    if (ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id && ass.boxPiece == ProductCount_Res[i].Box_Piece__c) {
                        if (barCodeListPandianMap.containsKey(ProductCount_Res[i].Bar_Code_search__c)) {
                            continue;
                        }
                        if (ProductCount_Res[i].Isoverdue__c == 0) {
                            consumableorderdetailsRecordserrordummy.add(
                                new ConsumableorderdetailsInfo(ProductCount_Res[i], '该产品已经过有效期,请销存。')
                            );
                            pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品已经过有效期,请销存。');
                            if (
                                pandianoverdueCountMap.containsKey(
                                    ProductCount_Res[i].Consumable_product__c + ProductCount_Res[i].Box_Piece__c
                                ) == false
                            ) {
                                pandianoverdueCountMap.put(ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c, 1);
                            } else {
                                pandianoverdueCountMap.put(
                                    ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c,
                                    pandianoverdueCountMap.get(
                                        ProductCount_Res[i].Consumable_Product__c + ProductCount_Res[i].Box_Piece__c
                                    ) + 1
                                );
                            }
                            continue;
                        }
                        consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i], '丢失'));
                        pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                    }
                }
                // 同时存在其他经销商库存产品
                for (Consumable_order_details2__c cod2 : reSet1) {
                    if (cod2.Consumable_Product__c == ass.Prod.Id && ass.boxPiece == cod2.Box_Piece__c) {
                        if (
                            barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c) &&
                            otherAgProMap.containsKey(cod2.Bar_Code__c) &&
                            otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == false &&
                            otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == false
                        ) {
                            consumableorderdetailsRecordserrordummy.add(
                                new ConsumableorderdetailsInfo(
                                    cod2,
                                    '该产品归属于' + otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c + '的库存。'
                                )
                            );
                            pandiandetailsMap.put(
                                cod2.Id,
                                '该产品归属于' + otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c + '的库存。'
                            );
                            continue;
                        }
                    }
                }
                // 需要返品的产品
                for (Consumable_order_details2__c cod2 : reSet2) {
                    if (cod2.Consumable_Product__c == ass.Prod.Id && ass.boxPiece == cod2.Box_Piece__c) {
                        if (needreturnMap.containsKey(cod2.Bar_Code__c)) {
                            consumableorderdetailsRecordserrordummy.add(
                                new ConsumableorderdetailsInfo(cod2, '该产品目前出库状态,请返品。')
                            );
                            pandiandetailsMap.put(cod2.Id, '该产品目前出库状态,请返品。');
                            continue;
                        }
                    }
                }
            }
        }
        //更新主明细单
        if (barCodeListPandianMap.size() > 0) {
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (ass.check == true) {
                    integer countSum = 0;
                    if (pandianProdIdCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        countSum = pandianProdIdCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    integer overdueSum = 0;
                    if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    ass.Pandian = countSum;
                    ass.Diff = ass.countid - countSum - overdueSum;
                    ass.refind = 0;
                }
            }
    //查询库存 追加返品库存
    List<Consumable_order_details2__c> ProductCount_Res = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Asset_Model_No__c,
        Isoverdue__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 Cancellation_Flag__c = FALSE
        AND Bar_Code__c != NULL
        AND Product_Type__c LIKE :sqlagencyProType
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Dealer_Info_text__c = :accountName
    ];
    //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy start
    //开始制作表头数据
    Set<Id> Product2cIdSet = new Set<Id>();
    for (Consumable_order_details2__c con_or_d2item : ProductCount_Res) {
      Product2cIdSet.add(con_or_d2item.Consumable_Product__c);
    }
    List<Product2__c> productCount_Unfull_bak = [
      SELECT
        Id,
        Name,
        Name__c,
        SFDA_Status__c,
        Packing_list_manual__c,
        Asset_Model_No__c
      FROM Product2__c
      //where Estimation_Entry_Possibility__c = '○'
      WHERE Id IN :Product2cIdSet AND Product_Type__c LIKE :sqlagencyProType
    ];
    for (integer i = 0; i < productCount_Unfull_bak.size(); i++) {
      midMap.put(productCount_Unfull_bak[i].Id, productCount_Unfull_bak[i]);
    }
    system.debug('productCount_Unfull_bak' + productCount_Unfull_bak.size());
    // String erro='productCount_Unfull_bak:'+productCount_Unfull_bak.size();
    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, erro));
    //DB202302357027 消耗品追溯系统无法正常使用——盘点页面操作即报错 fy end
    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'ProductCount_Res  ' + ProductCount_Res.size()));
    for (Integer i = 0; i < ProductCount_Res.size(); i++) {
      //然后循环CountDel做Box和piece2个map
      if (
        MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) &&
        ProductCount_Res[i].Box_Piece__c == '盒'
      ) {
        if (
          newMidBoxMap.containsKey(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c
          )
        ) {
          ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(
              ProductCount_Res[i].Consumable_Product__c +
              ProductCount_Res[i].Box_Piece__c
            )
            .clone();
          Jstage.countid = Jstage.countid + 1;
          if (ProductCount_Res[i].Isoverdue__c == 1) {
            Jstage.limitCount = Jstage.limitCount + 1;
          }
          Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
          newMidBoxMap.put(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c,
            Jstage
          );
        } else {
            for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
                if (ass.check == true) {
                    integer overdueSum = 0;
                    if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
                        overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
                    }
                    ass.Diff = ass.countid - ass.Pandian - overdueSum;
                }
            }
          ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
            MidMap.get(ProductCount_Res[i].Consumable_Product__c)
          );
          Jstage.countid = Jstage.countid + 1;
          if (ProductCount_Res[i].Isoverdue__c == 1) {
            Jstage.limitCount = Jstage.limitCount + 1;
          }
          Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
          newMidBoxMap.put(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c,
            Jstage
          );
        }
        //寻回做成
        for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
            for (ConsumableorderdetailsInfo adjust : consumableorderdetailsRecordsAdjust) {
                if (ass.Prod.Name__c == adjust.Prod.Name__c && ass.boxPiece == adjust.orderdetails2.Box_Piece__c) {
                    if (reFindProduct.containsKey(adjust.orderdetails2.Bar_Code_search__c)) {
                        continue;
                    } else {
                        ass.Pandian++;
                        ass.refind++;
                        reFindProduct.put(adjust.orderdetails2.Bar_Code_search__c, adjust.orderdetails2.Bar_Code_search__c);
                    }
                }
            }
      } else if (
        MidMap.containsKey(ProductCount_Res[i].Consumable_Product__c) &&
        ProductCount_Res[i].Box_Piece__c == '个'
      ) {
        if (
          newMidPieceMap.containsKey(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c
          )
        ) {
          ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(
              ProductCount_Res[i].Consumable_Product__c +
              ProductCount_Res[i].Box_Piece__c
            )
            .clone();
          Jstage.countid = Jstage.countid + 1;
          if (ProductCount_Res[i].Isoverdue__c == 1) {
            Jstage.limitCount = Jstage.limitCount + 1;
          }
          Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
          newMidPieceMap.put(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c,
            Jstage
          );
        } else {
          ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
            MidMap.get(ProductCount_Res[i].Consumable_Product__c)
          );
          Jstage.countid = Jstage.countid + 1;
          if (ProductCount_Res[i].Isoverdue__c == 1) {
            Jstage.limitCount = Jstage.limitCount + 1;
          }
          Jstage.boxPiece = ProductCount_Res[i].Box_Piece__c;
          newMidPieceMap.put(
            ProductCount_Res[i].Consumable_Product__c +
            ProductCount_Res[i].Box_Piece__c,
            Jstage
          );
        }
        if (pandiandetailsMap.keySet().size() > 0) {
            List<Consumable_order_details2__c> showcod2 = [
                SELECT
                    Id,
                    Name,
                    Consumable_Product__c,
                    Bar_Code__c,
                    Consumable_Product__r.Name__c,
                    Asset_Model_No__c,
                    Isoverdue__c,
                    Box_Piece__c,
                    Bar_Code_search__c
                FROM Consumable_order_details2__c
                WHERE Id IN :pandiandetailsMap.keySet()
                ORDER BY Name
            ];
            initStandardController();
            showcod2nid = cod2s();
        }
        for (Consumable_order_details2__c cod2 : showcod2nid) {
            codPageRecords.add(new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id)));
        }
        if (codPageRecords.size() > 0)
            done = true;
        iSinventory = true;
        consumableorderdetailsRecordserrordummy.clear();
        pandiandetailsList = [
            SELECT Id, Bar_Code__c, Consumable_Product__r.Name__c, Box_Piece__c, Lose_reason__c
            FROM Consumable_order_details2__c
            WHERE Id IN :pandiandetailsMap.keySet()
            ORDER BY Name
        ];
        for (Consumable_order_details2__c codDet : pandiandetailsList) {
            codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
        }
        List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
        for (Consumable_order_details2__c cod2 : pandiandetailsList) {
            pandiandetailsListMid.add(cod2);
            if (pandiandetailsListMid.size() == 1000) {
                pandiandetailsListShow.add(pandiandetailsListMid);
                pandiandetailsListMid = new List<Consumable_order_details2__c>();
            }
        }
        if (pandiandetailsListMid.size() > 0) {
            pandiandetailsListShow.add(pandiandetailsListMid);
        }
        //分页
        PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
        totalCount = codPageRecords.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;
        Integer startIdx;
        Integer endIdx;
        List<ConsumableorderdetailsInfo> pageCodeRecords = new List<ConsumableorderdetailsInfo>();
        startIdx = pageToken;
        endIdx = startIdx + pageSize;
        if (endIdx > codPageRecords.size()) {
            endIdx = codPageRecords.size();
        }
        for (Integer i = startIdx; i < endIdx; i++) {
            pageCodeRecords.add(codPageRecords.get(i));
        }
        data.put('paginatedAccounts', paginatedAccounts);
        data.put('pageCodeRecords', pageCodeRecords);
        //end
        System.debug('=====>codPageRecords2' + codPageRecords);
        System.debug('=====>consumableorderdetailsRecords' + consumableorderdetailsRecords);
        data.put('codPageRecords', JSON.serialize(codPageRecords));
        data.put('consumableorderdetailsRecords', JSON.serialize(consumableorderdetailsRecords));
        System.debug('iSinventory===>' + iSinventory);
        data.put('iSinventory', JSON.serialize(iSinventory));
        System.debug('pandiandetailsMap===>' + pandiandetailsMap);
        data.put('pandiandetailsMap', pandiandetailsMap);
        data.put('reSet', reSet);
        data.put('consumableorderdetailsRecordsview', JSON.serialize(consumableorderdetailsRecordsview));
        System.debug('=====>consumableorderdetailsRecordsview' + consumableorderdetailsRecordsview);
        res.code = 200;
        res.status = 'Sucess';
        return res;
      }
    }
    // 保存按钮
    @AuraEnabled
    public static ResponseBodyLWC save(
        Boolean iSinventory,
        String consumableorderdetailsRecordsLWC,
        String accountid,
        String agencyProType,
        Map<Id, String> pandiandetailsMap,
        List<Consumable_order_details2__c> reSet
    ) {
        List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
            consumableorderdetailsRecordsLWC,
            List<ConsumableorderdetailsInfo>.class
    for (ConsumableorderdetailsInfo bss : newMidBoxMap.values()) {
      bss.overlimitCount = bss.countid - bss.limitCount;
      boxRecords.add(bss);
    }
    boxRecords.sort();
    for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
      bss.overlimitCount = bss.countid - bss.limitCount;
    }
    for (ConsumableorderdetailsInfo bss : boxRecords) {
      consumableorderdetailsRecords.add(bss);
      if (newMidPieceMap.containsKey(bss.Prod.Id + '个')) {
        consumableorderdetailsRecords.add(
          newMidPieceMap.get(bss.Prod.Id + '个')
        );
        agencyProType = agencyProType;
        accountid = accountid;
        pandiandetailsMap = pandiandetailsMap;
        reSet = reSet;
        System.debug('pandiandetailsMap===>' + pandiandetailsMap);
        //newMidPieceMap移除已经添加的Piece
        newMidPieceMap.remove(bss.Prod.Id + '个');
      }
    }
    for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
      consumableorderdetailsRecords.add(newMidPieceMap.get(bss.Prod.Id + '个'));
    }
    //consumableorderdetailsCount = consumableorderdetailsRecords.size();
    listCut();
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        // 跳过明细2不必要更新
        StaticParameter.EscapeConsumableOrderDetail2Trigger = true;
        if (!iSinventory) {
            return new ResponseBodyLWC('Error', 500, '请先录入BarCode', '');
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请先点【BarCode录入】'));
            // return null;
    data.put(
      'ConsumableorderdetailsRecordsview',
      JSON.serialize(ConsumableorderdetailsRecordsview)
    );
    data.put('userWorkLocation', userWorkLocation);
    data.put('agencyProType', agencyProType);
    data.put('accountName', accountName);
    data.put('accountid', accountid);
    data.put(
      'consumableorderdetailsRecords',
      JSON.serialize(consumableorderdetailsRecords)
    );
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  private static void listCut() {
    //拆分暂用list
    List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
    List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsInfo c = null;
    ConsumableorderdetailsRecordsbreak.clear();
    ConsumableorderdetailsRecordsbreakover.clear();
    consumableorderdetailsRecordsview.clear();
    //选择产品view
    ConsumableorderdetailsRecordsbreak = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsbreakover = new List<ConsumableorderdetailsInfo>();
    if (consumableorderdetailsRecords.size() > 1000) {
      for (Integer i = 0; i < consumableorderdetailsRecords.size(); i++) {
        if (i < 1000) {
          c = consumableorderdetailsRecords.get(i);
          ConsumableorderdetailsRecordsbreak.add(c);
        } else {
          c = consumableorderdetailsRecords.get(i);
          ConsumableorderdetailsRecordsbreakover.add(c);
        }
        integer Lo = 0;
        for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
            if (header.check == true) {
                Lo++;
      }
      consumableorderdetailsRecordsview.add(ConsumableorderdetailsRecordsbreak);
      consumableorderdetailsRecordsview.add(
        ConsumableorderdetailsRecordsbreakover
      );
    } else {
      consumableorderdetailsRecordsview.add(consumableorderdetailsRecords);
    }
  }
  //========20160311======ADD_Start================================
  // 将页面或取得BarCode去掉重复的,转换成List
  //========20160311======ADD_Start================================
  public static List<String> ParseBarCode(String Code) {
    Map<String, Integer> barcodeCountMap = new Map<String, Integer>();
    String[] Cache = new List<String>{};
    Cache = Code.split('\n');
    List<String> Buff = new List<String>();
    for (String A : Cache) {
      A = A.trim().toUpperCase();
      if (barcodeCountMap.containsKey(A)) {
        barcodeCountMap.put(A, barcodeCountMap.get(A) + 1);
      } else {
        barcodeCountMap.put(A, 1);
      }
      Buff.add(A + barcodeCountMap.get(A));
    }
    return Buff;
  }
  //test
  // @AuraEnabled
  // public static ResponseBodyLWC searchConsumableorderdetails(String sqlagencyProType,String userWorkLocation,String accountName,String barcode,List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsLWC){
  //     return new ResponseBodyLWC('Error',500, 'test', '');
  // }
  //========20160311======ADD_End==================================
  // BarCode录入
  @AuraEnabled
  public static ResponseBodyLWC searchConsumableorderdetails(
    String agencyProType,
    String userWorkLocation,
    String accountName,
    String barcode,
    String consumableorderdetailsRecordsLWC,
    Integer pageSizeLWC,
    Integer pageTokenLWC,
    String sortFieldLWC,
    String sortOrderLWC
  ) {
    pageSize = pageSizeLWC;
    pageToken = pageTokenLWC;
    sortField = sortFieldLWC;
    sortOrder = sortOrderLWC;
    System.debug(
      '===>consumableorderdetailsRecordsLWC' + consumableorderdetailsRecordsLWC
    );
    List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      consumableorderdetailsRecordsLWC,
      List<ConsumableorderdetailsInfo>.class
    );
    // ConsumableorderdetailsInfo[] consumableorderdetailsRecords=(List<ConsumableorderdetailsInfo>)JSON.deserialize(consumableorderdetailsRecordsLWC,List<ConsumableorderdetailsInfo>.class);
    system.debug(
      '=====>consumableorderdetailsRecordsLWC' +
      consumableorderdetailsRecordsLWC
    );
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    sqlagencyProType = '%' + agencyProType + '%';
    System.debug('sqlagencyProType==>' + sqlagencyProType);
    System.debug('accountName==>' + accountName);
    System.debug('userWorkLocation==>' + userWorkLocation);
    /* BarCodelist做成 */
    //FIXME barcodeSet 做成,ProductCount_ResSet 做成
    List<Consumable_order_details2__c> pandiandetailsList = new List<Consumable_order_details2__c>();
    pandiandetailsListShow = new List<List<Consumable_order_details2__c>>();
    done = false;
    List<String> BarCodeListP = ParseBarCode(barcode);
    System.debug('BarCodeListP===>' + BarCodeListP);
    //查询库存 追加返品库存
    List<Consumable_order_details2__c> ProductCount_Res = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Dealer_Info_text__c,
        Asset_Model_No__c,
        Isoverdue__c,
        Box_Piece__c,
        Bar_Code_search__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 :sqlagencyProType
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Dealer_Info_text__c = :accountName
    ];
    System.debug('ProductCount_Res==>' + ProductCount_Res);
    reFindProduct.clear();
    Map<String, ConsumableorderdetailsInfo> barCodeListAdjustMap = new Map<String, ConsumableorderdetailsInfo>();
    //barCodeListLoseMap.clear();
    Set<String> carCodeListLose = new Set<String>();
    List<ConsumableorderdetailsInfo> consumableorderdetailsRecordsAdjust = new List<ConsumableorderdetailsInfo>();
    Map<String, String> proIdNotinpage = new Map<String, String>();
    List<Consumable_order_details2__c> reFindProductList = new List<Consumable_order_details2__c>();
    codPageRecords = new List<ConsumableorderdetailsInfo>();
    consumableorderdetailsRecordserrordummy = new List<ConsumableorderdetailsInfo>();
    List<ConsumableorderdetailsInfo> reFindProductaddtopage = new List<ConsumableorderdetailsInfo>();
    pandiandetailsMap.clear();
    reSet = new List<Consumable_order_details2__c>();
    /* 判断BarCode是否为空 */
    if (barcode == null || barcode == '') {
      //先取出所有丢失产品
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        // 20200509 gzw add 盘点数量初始化
        ass.Pandian = 0;
        // 20200509 gzw add 盘点数量初始化
        if (ass.check == true) {
          //ass.Diff = ass.countid - ass.Pandian;
          for (integer i = 0; i < ProductCount_Res.size(); i++) {
            System.debug('Pro==>' + ProductCount_Res[i].Consumable_Product__c);
            System.debug('ProId==>' + ass.Prod.Id);
            System.debug('ass.boxPiece ==>' + ass.boxPiece);
            System.debug('boxPiece ==>' + ProductCount_Res[i].Box_Piece__c);
            if (
              ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id &&
              ass.boxPiece == ProductCount_Res[i].Box_Piece__c
            ) {
              if (carCodeListLose.contains(ProductCount_Res[i].Bar_Code__c)) {
                continue;
              } else {
                //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
                //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
                carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
              }
            }
          }
        }
        if (Lo == 0) {
            iSinventory = false;
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请选择要盘点的明细'));
            // return null;
            return new ResponseBodyLWC('Error', 500, '请选择要盘点的明细', '');
        }
        for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
            if (header.check == true) {
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '  '+header.prod.Name__c));
                //return null;
                if ((header.DiffReason == '' || header.DiffReason == null) && header.Diff > 0) {
                    return new ResponseBodyLWC('Error', 500, header.prod.Name__c + '请输入差异原因', '');
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '请输入差异原因'));
                    // return null;
                } else if ((header.DiffReason != '' && header.DiffReason != null) && header.Diff == 0) {
                    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '无丢失产品,不需要填写差异原因'));
                    // return null;
                    return new ResponseBodyLWC('Error', 500, header.prod.Name__c + '无丢失产品,不需要填写差异原因', '');
      }
      //已经出库的产品
      List<Consumable_order_details2__c> reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__c,
          Bar_Code__c,
          Consumable_Product__r.Name__c,
          Asset_Model_No__c,
          Isoverdue__c,
          Box_Piece__c,
          Bar_Code_search__c,
          Dealer_Info_text__c
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = TRUE
          AND (Dealer_Shipment__c = TRUE
          OR Dealer_Saled__c = TRUE)
          AND Dealer_Returned__c = FALSE
          AND Cancellation_Flag__c = FALSE
          AND Bar_Code__c IN :carCodeListLose
          AND Dealer_Info_text__c = :accountName
        ORDER BY Name
      ];
      Map<String, Consumable_order_details2__c> needreturnMap = new Map<String, Consumable_order_details2__c>();
      for (Consumable_order_details2__c cod2 : reSet1) {
        needreturnMap.put(cod2.Bar_Code__c, cod2);
      }
      // 经销商之间或者同一经销商不同工作地调货
      reSet1 = [
        SELECT
          Id,
          Name,
          Consumable_Product__c,
          Bar_Code__c,
          Consumable_Product__r.Name__c,
          Asset_Model_No__c,
          Isoverdue__c,
          Box_Piece__c,
          Bar_Code_search__c,
          Dealer_Info_text__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 Cancellation_Flag__c = FALSE
          AND Bar_Code__c IN :carCodeListLose
          AND (Dealer_Info_text__c != :accountName
          OR (Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c != :userWorkLocation))
        ORDER BY Name
      ];
      Map<String, Consumable_order_details2__c> otherAgProMap = new Map<String, Consumable_order_details2__c>();
      for (Consumable_order_details2__c cod2 : reSet1) {
        otherAgProMap.put(cod2.Bar_Code__c, cod2);
      }
      carCodeListLose.clear();
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (ass.check == true) {
          ass.Diff = ass.countid - ass.Pandian;
          for (integer i = 0; i < ProductCount_Res.size(); i++) {
            if (
              ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id &&
              ass.boxPiece == ProductCount_Res[i].Box_Piece__c
            ) {
              if (
                carCodeListLose.contains(ProductCount_Res[i].Bar_Code_search__c)
              ) {
                continue;
              } else {
                if (
                  needreturnMap.containsKey(ProductCount_Res[i].Bar_Code__c)
                ) {
                  consumableorderdetailsRecordserrordummy.add(
                    new ConsumableorderdetailsInfo(
                      ProductCount_Res[i],
                      '该产品未返品'
                    )
                  );
                  pandiandetailsMap.put(ProductCount_Res[i].Id, '该产品未返品');
                  carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                  continue;
                }
            }
        }
        Integer orderDetNo = 1;
        Savepoint sp = Database.setSavepoint();
        Consumable_order__c Po = new Consumable_order__c();
        Po.Name = '*';
        Po.Order_status__c = '批准';
        Po.Inventory_date__c = Date.today();
        Po.Order_type__c = '盘点';
        Po.Dealer_Info__c = accountid;
        Po.Order_ProType__c = agencyProType;
        Po.RecordTypeid = System.Label.RT_ConOrder_Inventory;
        try {
            insert Po;
            eSetId = Po.id;
            List<Consumable_order__c> Consumable_order = [SELECT Name FROM Consumable_order__c WHERE id = :Po.id];
            List<Consumable_orderdetails__c> InsList = new List<Consumable_orderdetails__c>();
            List<Consumable_order_details2__c> InsListUp = new List<Consumable_order_details2__c>();
            List<Consumable_order_details2__c> updListAdjust = new List<Consumable_order_details2__c>();
            Map<String, String> ErrorName = new Map<String, String>();
            Map<String, Boolean> CheckTF = new Map<String, Boolean>();
            for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
                if (header.check == true) {
                    Consumable_orderdetails__c insPan = new Consumable_orderdetails__c();
                    insPan = new Consumable_orderdetails__c();
                    String str = string.valueOf(orderDetNo);
                    if (str.length() == 1) {
                        str = '0' + str;
                    }
                    insPan.Name = Consumable_order[0].Name + '-' + str;
                    insPan.Consumable_Product__c = header.ProdId;
                    ErrorName.put(insPan.Consumable_Product__c, header.DiffReason);
                    CheckTF.put(insPan.Consumable_product__c, true);
                    insPan.Consumable_order__c = Po.Id;
                    insPan.Lose_reason__c = header.DiffReason;
                    insPan.Diff__c = header.Diff;
                    insPan.Product_Refind__c = header.refind;
                    insPan.inventory_sum__c = header.Pandian;
                    insPan.Count_Sum__c = header.countid;
                    insPan.RecordTypeId = System.Label.RT_ConOrderDetail1_Inventory;
                    orderDetNo++;
                    InsList.add(insPan);
                if (
                  otherAgProMap.containsKey(ProductCount_Res[i].Bar_Code__c)
                ) {
                  consumableorderdetailsRecordserrordummy.add(
                    new ConsumableorderdetailsInfo(
                      ProductCount_Res[i],
                      '该产品归属于' +
                        otherAgProMap.get(ProductCount_Res[i].Bar_Code__c)
                          .Dealer_Info_text__c +
                        '的库存。'
                    )
                  );
                  pandiandetailsMap.put(
                    ProductCount_Res[i].Id,
                    '该产品归属于' +
                      otherAgProMap.get(ProductCount_Res[i].Bar_Code__c)
                        .Dealer_Info_text__c +
                      '的库存。'
                  );
                  carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                  continue;
                }
            }
            if (InsList.size() > 0) {
                insert InsList;
            }
            List<Consumable_order_details2__c> showcod2 = [
                SELECT
                    Id,
                    Name,
                    Consumable_Product__c,
                    Bar_Code__c,
                    Consumable_Product__r.Name__c,
                    Asset_Model_No__c,
                    Isoverdue__c,
                    Box_Piece__c,
                    Bar_Code_search__c
                FROM Consumable_order_details2__c
                WHERE Id IN :pandiandetailsMap.keySet()
                ORDER BY Name
            ];
            for (Consumable_order_details2__c cod : showcod2) {
                Consumable_order_details2__c InsDetail = new Consumable_order_details2__c();
                InsDetail.Id = cod.Id;
                InsDetail.Consumable_Inventory_order__c = po.Id;
                InsDetail.Inventory_date__c = Date.today();
                // 20210224 gzw CHAN-BXF3PG start
                // if(pandiandetailsMap.get(cod.Id) == '丢失' ){
                if (pandiandetailsMap.get(cod.Id) == '丢失' && CheckTF.containsKey(cod.Consumable_product__c)) {
                    // 20210224 gzw CHAN-BXF3PG end
                    InsDetail.Lose_reason__c = ErrorName.get(cod.Consumable_product__c);
                    InsDetail.Lose_Flag__c = true;
                } else if (pandiandetailsMap.get(cod.Id) == '寻回') {
                    InsDetail.Lose_reason__c = '';
                    InsDetail.Lose_Flag__c = false;
                } else {
                    continue;
                if (ProductCount_Res[i].Isoverdue__c == 0) {
                  consumableorderdetailsRecordserrordummy.add(
                    new ConsumableorderdetailsInfo(
                      ProductCount_Res[i],
                      '该产品已经过有效期,请销存。'
                    )
                  );
                  pandiandetailsMap.put(
                    ProductCount_Res[i].Id,
                    '该产品已经过有效期,请销存。'
                  );
                  carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
                  ass.Diff--;
                  continue;
                }
                InsListUp.add(InsDetail);
                consumableorderdetailsRecordserrordummy.add(
                  new ConsumableorderdetailsInfo(ProductCount_Res[i], '丢失')
                );
                pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
                carCodeListLose.add(ProductCount_Res[i].Bar_Code_search__c);
              }
            }
            for (Consumable_order_details2__c rs : reSet) {
                rs.Inventory_date__c = Date.today();
            }
            if (reSet.size() > 0) {
                update reSet;
            }
            if (InsListUp.size() > 0) {
                ControllerUtil.updateOrderDetailsSatus(InsListUp); // Commented By DTT - Li Jun for testing 20230407
            }
        } catch (Exception e) {
            Database.rollback(sp);
            // ApexPages.addMessages(ex);
            return new ResponseBodyLWC('Error', 500, e.getMessage() + e.getLineNumber(), '');
            // return null;
          }
        } else {
          ass.Pandian = 0;
          ass.Diff = 0;
        }
        // FIXME impliment BarCodeListAdjust
        /************************************************************************************************/
        // return ProS();
        data.put('eSetId', eSetId);
        data.put('InsListUp', InsListUp);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
      }
      List<Consumable_order_details2__c> showcod2 = new List<Consumable_order_details2__c>();
      if (pandiandetailsMap.keySet().size() > 0) {
        showcod2 = [
          SELECT
            Id,
            Name,
            Consumable_Product__c,
            Bar_Code__c,
            Consumable_Product__r.Name__c,
            Asset_Model_No__c,
            Isoverdue__c,
            Box_Piece__c,
            Bar_Code_search__c
          FROM Consumable_order_details2__c
          WHERE Id IN :pandiandetailsMap.keySet()
          ORDER BY Name
        ];
      }
      initStandardController();
      showcod2nid = cod2s();
      for (Consumable_order_details2__c cod2 : showcod2nid) {
        codPageRecords.add(
          new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id))
        );
      }
      iSinventory = true;
      if (codPageRecords.size() > 0)
        done = true;
      consumableorderdetailsRecordserrordummy.clear();
      //pandiandetailsList = new list<Consumable_order_details2__c>();
      pandiandetailsList = [
        SELECT
          Id,
          Bar_Code__c,
          Consumable_Product__r.Name__c,
          Box_Piece__c,
          Lose_reason__c
        FROM Consumable_order_details2__c
        WHERE Id IN :pandiandetailsMap.keySet()
        ORDER BY Name
      ];
      for (Consumable_order_details2__c codDet : pandiandetailsList) {
        codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
      }
      List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
      for (Consumable_order_details2__c cod2 : pandiandetailsList) {
        pandiandetailsListMid.add(cod2);
        if (pandiandetailsListMid.size() == 1000) {
          pandiandetailsListShow.add(pandiandetailsListMid);
          pandiandetailsListMid = new List<Consumable_order_details2__c>();
        }
      }
      if (pandiandetailsListMid.size() > 0) {
        pandiandetailsListShow.add(pandiandetailsListMid);
      }
      //分页
      PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
      totalCount = codPageRecords.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;
      Integer startIdx;
      Integer endIdx;
      List<ConsumableorderdetailsInfo> pageCodeRecords = new List<ConsumableorderdetailsInfo>();
      startIdx = pageToken;
      endIdx = startIdx + pageSize;
      if (endIdx > codPageRecords.size()) {
        endIdx = codPageRecords.size();
      }
      for (Integer i = startIdx; i < endIdx; i++) {
        pageCodeRecords.add(codPageRecords.get(i));
      }
      data.put('paginatedAccounts', paginatedAccounts);
      data.put('pageCodeRecords', pageCodeRecords);
      //end
      data.put('codPageRecords', JSON.serialize(codPageRecords));
      data.put(
        'consumableorderdetailsRecords',
        JSON.serialize(consumableorderdetailsRecords)
      );
      data.put(
        'consumableorderdetailsRecordsview',
        JSON.serialize(consumableorderdetailsRecordsview)
      );
      data.put('pandiandetailsMap', pandiandetailsMap);
      System.debug('iSinventory===>' + iSinventory);
      System.debug('codPageRecords===>' + codPageRecords);
      data.put('iSinventory', JSON.serialize(iSinventory));
      data.put('reSet1', reSet1);
      System.debug('reSet1===>' + reSet1);
      res.code = 200;
      res.status = 'Success1';
      return res;
    }
    //盘点一览
    public PageReference ProS() {
        // 返回盘点一览
        PageReference ref = new Pagereference('/apex/InventoryList?eSetId=' + eSetId);
        ref.setRedirect(true);
        return ref;
    //CHAN-B7J4NB 只有一个时,盘点不到
    //init();
    //CHAN-B7J4NB
    Map<String, String> showproductIdMap = new Map<String, String>();
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
      showproductIdMap.put(
        ass.prod.Id + ass.boxPiece,
        ass.prod.Id + ass.boxPiece
      );
    }
    //CSV出力
    public PageReference doClick() {
        Pagereference pr = page.InventoryCSV;
        return pr;
    }
    //分页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; }
    // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCodeListP' + BarCodeListP));
    /***************************************************************************/
    // BarCode的检索  所有在库
    reSet = [
      SELECT
        Id,
        Consumable_Product__c,
        Consumable_Product__r.Name__c,
        Box_Piece__c,
        Bar_Code_search__c,
        Isoverdue__c
      FROM Consumable_order_details2__c
      WHERE
        Bar_Code_search__c IN :BarCodeListP
        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
        AND Cancellation_Date__c = NULL
        AND Bar_Code__c != NULL
        AND Product_Type__c LIKE :sqlagencyProType
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    System.debug('reSet===>' + reSet);
    Map<String, Integer> pandianProdIdCountMap = new Map<String, Integer>(); // ProdId 単位
    // 20200509 add gzw 记录需要销存数量
    Map<String, Integer> pandianoverdueCountMap = new Map<String, Integer>(); // ProdId 単位
    // 20200509 add gzw 记录需要销存数量
    Map<String, ConsumableorderdetailsInfo> barCodeListPandianMap = new Map<String, ConsumableorderdetailsInfo>(); // 明細バーコード 単位
    //盘点到的明细
    for (Consumable_order_details2__c rs : reSet) {
      //BarCodeListPandian.add(rs.Bar_Code_search__c);
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (
          rs.Consumable_Product__c == ass.Prod.Id &&
          rs.Box_Piece__c == ass.boxPiece
        ) {
          ass.check = true;
        }
      }
      barCodeListPandianMap.put(
        rs.Bar_Code_search__c,
        new ConsumableorderdetailsInfo(rs)
      );
      if (rs.Isoverdue__c == 0) {
        consumableorderdetailsRecordserrordummy.add(
          new ConsumableorderdetailsInfo(rs, '该产品已经过有效期,请销存。')
        );
        pandiandetailsMap.put(rs.Id, '该产品已经过有效期,请销存。');
        if (
          pandianoverdueCountMap.containsKey(
            rs.Consumable_product__c + rs.Box_Piece__c
          ) == false
        ) {
          pandianoverdueCountMap.put(
            rs.Consumable_Product__c + rs.Box_Piece__c,
            1
          );
        } else {
          pandianoverdueCountMap.put(
            rs.Consumable_Product__c + rs.Box_Piece__c,
            pandianoverdueCountMap.get(
              rs.Consumable_Product__c + rs.Box_Piece__c
            ) + 1
          );
        }
        continue;
      }
      if (
        pandianProdIdCountMap.containsKey(
          rs.Consumable_product__c + rs.Box_Piece__c
        ) == false
      ) {
        pandianProdIdCountMap.put(
          rs.Consumable_Product__c + rs.Box_Piece__c,
          1
        );
      } else {
        pandianProdIdCountMap.put(
          rs.Consumable_Product__c + rs.Box_Piece__c,
          pandianProdIdCountMap.get(
            rs.Consumable_Product__c + rs.Box_Piece__c
          ) + 1
        );
      }
    }
    // Data Bean
    @TestVisible
    class ConsumableorderdetailsInfo implements Comparable {
        @AuraEnabled
        public Boolean check { 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 countid { get; set; }
        @AuraEnabled
        public String ProdId { get; set; }
        @AuraEnabled
        public Decimal Pandian { get; set; }
        @AuraEnabled
        public Decimal Diff { get; set; }
        @AuraEnabled
        public Decimal refind { get; set; }
        @AuraEnabled
        public String DiffReason { get; set; }
        @AuraEnabled
        public Boolean canSelect { get; set; }
        @AuraEnabled
        public Boolean sortBy { get; set; }
        @AuraEnabled
        public Decimal limitCount { get; set; }
        @AuraEnabled
        public Decimal overlimitCount { get; set; }
        @AuraEnabled
        public String boxPiece { get; set; }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e, string str) {
            orderdetails2 = e;
            Prod = e.Consumable_Product__r;
            //e.Lose_reason__c = str;
            DiffReason = str;
    // 经销商之间或者同一经销商不同工作地调货
    List<Consumable_order_details2__c> reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Dealer_Shipment__c,
        Dealer_Saled__c,
        Asset_Model_No__c,
        Isoverdue__c,
        Box_Piece__c,
        Dealer_Arrive__c,
        Bar_Code_search__c,
        Dealer_Info_text__c
      FROM Consumable_order_details2__c
      WHERE
        (Dealer_Arrive__c = TRUE
        OR Dealer_Shipment__c = TRUE
        OR Dealer_Saled__c = TRUE)
        AND Dealer_Returned__c = FALSE
        AND Cancellation_Flag__c = FALSE
        AND Bar_Code_search__c IN :BarCodeListP
        AND (Dealer_Info_text__c != :accountName
        OR (Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c != :userWorkLocation))
      ORDER BY Name
    ];
    Map<String, Consumable_order_details2__c> otherAgProMap = new Map<String, Consumable_order_details2__c>();
    for (Consumable_order_details2__c cod2 : reSet1) {
      otherAgProMap.put(cod2.Bar_Code__c, cod2);
    }
    // 需要入库的产品
    for (Consumable_order_details2__c cod2 : reSet1) {
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (
          cod2.Consumable_Product__c == ass.Prod.Id &&
          cod2.Box_Piece__c == ass.boxPiece
        ) {
          ass.check = true;
        }
      }
      if (
        !showproductIdMap.containsKey(
          cod2.Consumable_product__c + cod2.Box_Piece__c
        )
      ) {
        reFindProductList.add(cod2);
        proIdNotinpage.put(cod2.Consumable_Product__c, cod2.Box_Piece__c);
      }
      if (
        !barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c) &&
        otherAgProMap.containsKey(cod2.Bar_Code__c) &&
        (otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == true ||
        otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == true)
      ) {
        consumableorderdetailsRecordserrordummy.add(
          new ConsumableorderdetailsInfo(cod2, '无此产品的库存,请入库。')
        );
        pandiandetailsMap.put(cod2.Id, '无此产品的库存,请入库。');
      }
    }
    //寻回明细
    List<Consumable_order_details2__c> productAdjust = new List<Consumable_order_details2__c>();
    productAdjust = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Lose_reason__c,
        Asset_Model_No__c,
        Box_Piece__c,
        Bar_Code_search__c,
        Isoverdue__c
      FROM Consumable_order_details2__c
      WHERE
        Bar_Code_search__c IN :BarCodeListP
        AND Bar_Code__c != NULL
        AND Lose_Flag__c = TRUE
        AND Product_Type__c LIKE :sqlagencyProType
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
      ORDER BY Name
    ];
        // 已存在消耗品明细用
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            check = false;
            orderdetails2 = e;
            Prod = e.Consumable_Product__r;
            canSelect = true;
    for (Consumable_order_details2__c rs : productAdjust) {
      // 过期库存销存 20200427 gzw add srart
      if (rs.Isoverdue__c == 0 || rs.Lose_reason__c == '过期库存销存') {
        consumableorderdetailsRecordserrordummy.add(
          new ConsumableorderdetailsInfo(rs, '过期或者销存产品,无法寻回入库')
        );
        pandiandetailsMap.put(rs.Id, '过期或者销存产品,无法寻回入库');
        carCodeListLose.add(rs.Bar_Code_search__c);
        continue;
      }
      // 过期库存销存 20200427 gzw add end
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (
          rs.Consumable_Product__c == ass.Prod.Id &&
          rs.Box_Piece__c == ass.boxPiece
        ) {
          ass.check = true;
        }
        public ConsumableorderdetailsInfo(Product2__c e) {
            check = false;
            //orderdetails1 = new Consumable_orderdetails__c();
            Prod = e;
            canSelect = true;
            ProdId = string.valueOf(e.id);
            countid = 0;
            Pandian = 0;
            refind = 0;
            Diff = 0;
            limitCount = 0;
            overlimitCount = 0;
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            ConsumableorderdetailsInfo compareToesd = (ConsumableorderdetailsInfo) compareTo;
            Integer returnValue = 0;
            if (countid > compareToesd.countid) {
                returnValue = -1;
            } else if (countid < compareToesd.countid) {
                returnValue = 1;
      }
      if (
        !showproductIdMap.containsKey(
          rs.Consumable_product__c + rs.Box_Piece__c
        )
      ) {
        reFindProductList.add(rs);
        proIdNotinpage.put(rs.Consumable_Product__c, rs.Box_Piece__c);
      }
      if (barCodeListAdjustMap.containsKey(rs.Bar_Code_search__c)) {
        continue;
      } else {
        barCodeListAdjustMap.put(
          rs.Bar_Code_search__c,
          new ConsumableorderdetailsInfo(rs)
        );
        consumableorderdetailsRecordserrordummy.add(
          new ConsumableorderdetailsInfo(rs, '寻回')
        );
        pandiandetailsMap.put(rs.Id, '寻回');
        consumableorderdetailsRecordsAdjust.add(
          new ConsumableorderdetailsInfo(rs)
        );
      }
    }
    if (reFindProductList.size() > 0) {
      Map<String, Product2__c> midMap = new Map<String, Product2__c>();
      List<ConsumableorderdetailsInfo> boxRecords = new List<ConsumableorderdetailsInfo>();
      Map<String, ConsumableorderdetailsInfo> newMidBoxMap = new Map<String, ConsumableorderdetailsInfo>();
      Map<String, ConsumableorderdetailsInfo> newMidPieceMap = new Map<String, ConsumableorderdetailsInfo>();
      List<Product2__c> product_Refind = [
        SELECT
          Id,
          Name,
          Name__c,
          SFDA_Status__c,
          Packing_list_manual__c,
          Asset_Model_No__c
        FROM Product2__c
        WHERE Id IN :proIdNotinpage.keySet()
      ];
      for (Product2__c pro : product_Refind) {
        midMap.put(pro.Id, pro);
      }
      for (Integer i = 0; i < reFindProductList.size(); i++) {
        //然后循环CountDel做Box和piece2个map
        if (
          MidMap.containsKey(reFindProductList[i].Consumable_Product__c) &&
          reFindProductList[i].Box_Piece__c == '盒'
        ) {
          if (
            newMidBoxMap.containsKey(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c
            )
          ) {
            ConsumableorderdetailsInfo Jstage = newMidBoxMap.get(
                reFindProductList[i].Consumable_Product__c +
                reFindProductList[i].Box_Piece__c
              )
              .clone();
            Jstage.countid = 0;
            if (reFindProductList[i].Isoverdue__c == 1) {
              Jstage.limitCount = 0;
            }
            return returnValue;
            Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
            newMidBoxMap.put(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c,
              Jstage
            );
          } else {
            ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
              MidMap.get(reFindProductList[i].Consumable_Product__c)
            );
            Jstage.countid = 0;
            if (reFindProductList[i].Isoverdue__c == 1) {
              Jstage.limitCount = 0;
            }
            Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
            newMidBoxMap.put(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c,
              Jstage
            );
          }
        } else if (
          MidMap.containsKey(reFindProductList[i].Consumable_Product__c) &&
          reFindProductList[i].Box_Piece__c == '个'
        ) {
          if (
            newMidPieceMap.containsKey(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c
            )
          ) {
            ConsumableorderdetailsInfo Jstage = newMidPieceMap.get(
                reFindProductList[i].Consumable_product__c +
                reFindProductList[i].Box_Piece__c
              )
              .clone();
            Jstage.countid = 0;
            if (reFindProductList[i].Isoverdue__c == 1) {
              Jstage.limitCount = 0;
            }
            Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
            newMidPieceMap.put(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c,
              Jstage
            );
          } else {
            ConsumableorderdetailsInfo Jstage = new ConsumableorderdetailsInfo(
              MidMap.get(reFindProductList[i].Consumable_Product__c)
            );
            Jstage.countid = 0;
            if (reFindProductList[i].Isoverdue__c == 1) {
              Jstage.limitCount = 0;
            }
            Jstage.boxPiece = reFindProductList[i].Box_Piece__c;
            newMidPieceMap.put(
              reFindProductList[i].Consumable_Product__c +
              reFindProductList[i].Box_Piece__c,
              Jstage
            );
          }
        }
      }
      for (ConsumableorderdetailsInfo bss : newMidBoxMap.values()) {
        bss.check = true;
        bss.overlimitCount = bss.countid - bss.limitCount;
        boxRecords.add(bss);
      }
      boxRecords.sort();
      for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
        bss.check = true;
        bss.overlimitCount = bss.countid - bss.limitCount;
      }
      for (ConsumableorderdetailsInfo bss : boxRecords) {
        consumableorderdetailsRecords.add(bss);
        if (newMidPieceMap.containsKey(bss.Prod.Id + '个')) {
          consumableorderdetailsRecords.add(
            newMidPieceMap.get(bss.Prod.Id + '个')
          );
          //newMidPieceMap移除已经添加的Piece
          newMidPieceMap.remove(bss.Prod.Id + '个');
        }
      }
      for (ConsumableorderdetailsInfo bss : newMidPieceMap.values()) {
        consumableorderdetailsRecords.add(
          newMidPieceMap.get(bss.Prod.Id + '个')
        );
      }
    }
}
    //先取出未盘点到的产品
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
      if (ass.check == true) {
        for (integer i = 0; i < ProductCount_Res.size(); i++) {
          if (
            ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id &&
            ass.boxPiece == ProductCount_Res[i].Box_Piece__c
          ) {
            if (
              barCodeListPandianMap.get(
                ProductCount_Res[i].Bar_Code_search__c
              ) != null
            ) {
              continue;
            } else {
              carCodeListLose.add(ProductCount_Res[i].Bar_Code__c);
              ////barCodeListLoseMap.put(ProductCount_Res[i].Id, new ConsumableorderdetailsInfo(ProductCount_Res[i]));
              //consumableorderdetailsRecordserrordummy.add(new ConsumableorderdetailsInfo(ProductCount_Res[i],'丢失'));
              //pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
            }
          }
        }
      }
    }
    //已经出库的产品
    List<Consumable_order_details2__c> reSet2 = [
      SELECT
        Id,
        Name,
        Consumable_Product__c,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Asset_Model_No__c,
        Isoverdue__c,
        Box_Piece__c,
        Bar_Code_search__c,
        Dealer_Info_text__c
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND (Dealer_Shipment__c = TRUE
        OR Dealer_Saled__c = TRUE)
        AND Dealer_Returned__c = FALSE
        AND Cancellation_Flag__c = FALSE
        AND Bar_Code_search__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    Map<String, Consumable_order_details2__c> needreturnMap = new Map<String, Consumable_order_details2__c>();
    for (Consumable_order_details2__c cod2 : reSet2) {
      needreturnMap.put(cod2.Bar_Code__c, cod2);
    }
    //// 经销商之间或者同一经销商不同工作地调货
    //List<Consumable_order_details2__c> reSet1 = [SELECT Id,  Name,Consumable_Product__c,
    //                Bar_Code__c,Consumable_Product__r.Name__c,Dealer_Shipment__c,Dealer_Saled__c,
    //                Asset_Model_No__c,Isoverdue__c,Box_Piece__c,Dealer_Arrive__c,
    //                Bar_Code_search__c,Dealer_Info_text__c
    //            FROM Consumable_order_details2__c
    //            WHERE (Dealer_Arrive__c = TRUE
    //            or  Dealer_Shipment__c= TRUE
    //            or  Dealer_Saled__c = TRUE)
    //            AND  Dealer_Returned__c = FALSE
    //            AND  Cancellation_Flag__c = FALSE
    //            AND  Bar_Code_search__c in :BarCodeListP
    //            AND (Dealer_Info_text__c != :accountName
    //                OR (Dealer_Info_text__c = :accountName
    //                    AND Arrive_Owner_Work_Location__c != :userWorkLocation)
    //            )
    //            ORDER BY Name ];
    //Map<String,Consumable_order_details2__c> otherAgProMap = new Map<String,Consumable_order_details2__c>();
    //for(Consumable_order_details2__c cod2 :reSet1){
    //    otherAgProMap.put(cod2.Bar_Code__c,cod2);
    //}
    carCodeListLose.clear();
    //未盘点到的产品
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
      if (ass.check == true) {
        for (integer i = 0; i < ProductCount_Res.size(); i++) {
          if (
            ProductCount_Res[i].Consumable_Product__c == ass.Prod.Id &&
            ass.boxPiece == ProductCount_Res[i].Box_Piece__c
          ) {
            if (
              barCodeListPandianMap.containsKey(
                ProductCount_Res[i].Bar_Code_search__c
              )
            ) {
              continue;
            }
            if (ProductCount_Res[i].Isoverdue__c == 0) {
              consumableorderdetailsRecordserrordummy.add(
                new ConsumableorderdetailsInfo(
                  ProductCount_Res[i],
                  '该产品已经过有效期,请销存。'
                )
              );
              pandiandetailsMap.put(
                ProductCount_Res[i].Id,
                '该产品已经过有效期,请销存。'
              );
              if (
                pandianoverdueCountMap.containsKey(
                  ProductCount_Res[i].Consumable_product__c +
                  ProductCount_Res[i].Box_Piece__c
                ) == false
              ) {
                pandianoverdueCountMap.put(
                  ProductCount_Res[i].Consumable_Product__c +
                  ProductCount_Res[i].Box_Piece__c,
                  1
                );
              } else {
                pandianoverdueCountMap.put(
                  ProductCount_Res[i].Consumable_Product__c +
                  ProductCount_Res[i].Box_Piece__c,
                  pandianoverdueCountMap.get(
                    ProductCount_Res[i].Consumable_Product__c +
                    ProductCount_Res[i].Box_Piece__c
                  ) + 1
                );
              }
              continue;
            }
            consumableorderdetailsRecordserrordummy.add(
              new ConsumableorderdetailsInfo(ProductCount_Res[i], '丢失')
            );
            pandiandetailsMap.put(ProductCount_Res[i].Id, '丢失');
          }
        }
        // 同时存在其他经销商库存产品
        for (Consumable_order_details2__c cod2 : reSet1) {
          if (
            cod2.Consumable_Product__c == ass.Prod.Id &&
            ass.boxPiece == cod2.Box_Piece__c
          ) {
            if (
              barCodeListPandianMap.containsKey(cod2.Bar_Code_search__c) &&
              otherAgProMap.containsKey(cod2.Bar_Code__c) &&
              otherAgProMap.get(cod2.Bar_Code__c).Dealer_Saled__c == false &&
              otherAgProMap.get(cod2.Bar_Code__c).Dealer_Shipment__c == false
            ) {
              consumableorderdetailsRecordserrordummy.add(
                new ConsumableorderdetailsInfo(
                  cod2,
                  '该产品归属于' +
                    otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c +
                    '的库存。'
                )
              );
              pandiandetailsMap.put(
                cod2.Id,
                '该产品归属于' +
                  otherAgProMap.get(cod2.Bar_Code__c).Dealer_Info_text__c +
                  '的库存。'
              );
              continue;
            }
          }
        }
        // 需要返品的产品
        for (Consumable_order_details2__c cod2 : reSet2) {
          if (
            cod2.Consumable_Product__c == ass.Prod.Id &&
            ass.boxPiece == cod2.Box_Piece__c
          ) {
            if (needreturnMap.containsKey(cod2.Bar_Code__c)) {
              consumableorderdetailsRecordserrordummy.add(
                new ConsumableorderdetailsInfo(
                  cod2,
                  '该产品目前出库状态,请返品。'
                )
              );
              pandiandetailsMap.put(cod2.Id, '该产品目前出库状态,请返品。');
              continue;
            }
          }
        }
      }
    }
    //更新主明细单
    if (barCodeListPandianMap.size() > 0) {
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (ass.check == true) {
          integer countSum = 0;
          if (pandianProdIdCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
            countSum = pandianProdIdCountMap.get(ass.Prod.Id + ass.boxPiece);
          }
          integer overdueSum = 0;
          if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
            overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
          }
          ass.Pandian = countSum;
          ass.Diff = ass.countid - countSum - overdueSum;
          ass.refind = 0;
        }
      }
    } else {
      for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
        if (ass.check == true) {
          integer overdueSum = 0;
          if (pandianoverdueCountMap.containsKey(ass.Prod.Id + ass.boxPiece)) {
            overdueSum = pandianoverdueCountMap.get(ass.Prod.Id + ass.boxPiece);
          }
          ass.Diff = ass.countid - ass.Pandian - overdueSum;
        }
      }
    }
    //寻回做成
    for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) {
      for (
        ConsumableorderdetailsInfo adjust : consumableorderdetailsRecordsAdjust
      ) {
        if (
          ass.Prod.Name__c == adjust.Prod.Name__c &&
          ass.boxPiece == adjust.orderdetails2.Box_Piece__c
        ) {
          if (
            reFindProduct.containsKey(adjust.orderdetails2.Bar_Code_search__c)
          ) {
            continue;
          } else {
            ass.Pandian++;
            ass.refind++;
            reFindProduct.put(
              adjust.orderdetails2.Bar_Code_search__c,
              adjust.orderdetails2.Bar_Code_search__c
            );
          }
        }
      }
    }
    if (pandiandetailsMap.keySet().size() > 0) {
      List<Consumable_order_details2__c> showcod2 = [
        SELECT
          Id,
          Name,
          Consumable_Product__c,
          Bar_Code__c,
          Consumable_Product__r.Name__c,
          Asset_Model_No__c,
          Isoverdue__c,
          Box_Piece__c,
          Bar_Code_search__c
        FROM Consumable_order_details2__c
        WHERE Id IN :pandiandetailsMap.keySet()
        ORDER BY Name
      ];
      initStandardController();
      showcod2nid = cod2s();
    }
    for (Consumable_order_details2__c cod2 : showcod2nid) {
      codPageRecords.add(
        new ConsumableorderdetailsInfo(cod2, pandiandetailsMap.get(cod2.Id))
      );
    }
    if (codPageRecords.size() > 0)
      done = true;
    iSinventory = true;
    consumableorderdetailsRecordserrordummy.clear();
    pandiandetailsList = [
      SELECT
        Id,
        Bar_Code__c,
        Consumable_Product__r.Name__c,
        Box_Piece__c,
        Lose_reason__c
      FROM Consumable_order_details2__c
      WHERE Id IN :pandiandetailsMap.keySet()
      ORDER BY Name
    ];
    for (Consumable_order_details2__c codDet : pandiandetailsList) {
      codDet.Lose_reason__c = pandiandetailsMap.get(codDet.Id);
    }
    List<Consumable_order_details2__c> pandiandetailsListMid = new List<Consumable_order_details2__c>();
    for (Consumable_order_details2__c cod2 : pandiandetailsList) {
      pandiandetailsListMid.add(cod2);
      if (pandiandetailsListMid.size() == 1000) {
        pandiandetailsListShow.add(pandiandetailsListMid);
        pandiandetailsListMid = new List<Consumable_order_details2__c>();
      }
    }
    if (pandiandetailsListMid.size() > 0) {
      pandiandetailsListShow.add(pandiandetailsListMid);
    }
    //分页
    PaginatedAccounts paginatedAccounts = new PaginatedAccounts();
    totalCount = codPageRecords.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;
    Integer startIdx;
    Integer endIdx;
    List<ConsumableorderdetailsInfo> pageCodeRecords = new List<ConsumableorderdetailsInfo>();
    startIdx = pageToken;
    endIdx = startIdx + pageSize;
    if (endIdx > codPageRecords.size()) {
      endIdx = codPageRecords.size();
    }
    for (Integer i = startIdx; i < endIdx; i++) {
      pageCodeRecords.add(codPageRecords.get(i));
    }
    data.put('paginatedAccounts', paginatedAccounts);
    data.put('pageCodeRecords', pageCodeRecords);
    //end
    System.debug('=====>codPageRecords2' + codPageRecords);
    System.debug(
      '=====>consumableorderdetailsRecords' + consumableorderdetailsRecords
    );
    data.put('codPageRecords', JSON.serialize(codPageRecords));
    data.put(
      'consumableorderdetailsRecords',
      JSON.serialize(consumableorderdetailsRecords)
    );
    System.debug('iSinventory===>' + iSinventory);
    data.put('iSinventory', JSON.serialize(iSinventory));
    System.debug('pandiandetailsMap===>' + pandiandetailsMap);
    data.put('pandiandetailsMap', pandiandetailsMap);
    data.put('reSet', reSet);
    data.put(
      'consumableorderdetailsRecordsview',
      JSON.serialize(consumableorderdetailsRecordsview)
    );
    System.debug(
      '=====>consumableorderdetailsRecordsview' +
      consumableorderdetailsRecordsview
    );
    res.code = 200;
    res.status = 'Sucess';
    return res;
  }
  // 保存按钮
  @AuraEnabled
  public static ResponseBodyLWC save(
    Boolean iSinventory,
    String consumableorderdetailsRecordsLWC,
    String accountid,
    String agencyProType,
    Map<Id, String> pandiandetailsMap,
    List<Consumable_order_details2__c> reSet
  ) {
    List<ConsumableorderdetailsInfo> consumableorderdetailsRecords = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      consumableorderdetailsRecordsLWC,
      List<ConsumableorderdetailsInfo>.class
    );
    agencyProType = agencyProType;
    accountid = accountid;
    pandiandetailsMap = pandiandetailsMap;
    reSet = reSet;
    System.debug('pandiandetailsMap===>' + pandiandetailsMap);
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    // 跳过明细2不必要更新
    StaticParameter.EscapeConsumableOrderDetail2Trigger = true;
    if (!iSinventory) {
      return new ResponseBodyLWC('Error', 500, '请先录入BarCode', '');
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请先点【BarCode录入】'));
      // return null;
    }
    integer Lo = 0;
    for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
      if (header.check == true) {
        Lo++;
      }
    }
    if (Lo == 0) {
      iSinventory = false;
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请选择要盘点的明细'));
      // return null;
      return new ResponseBodyLWC('Error', 500, '请选择要盘点的明细', '');
    }
    for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
      if (header.check == true) {
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '  '+header.prod.Name__c));
        //return null;
        if (
          (header.DiffReason == '' || header.DiffReason == null) &&
          header.Diff > 0
        ) {
          return new ResponseBodyLWC(
            'Error',
            500,
            header.prod.Name__c + '请输入差异原因',
            ''
          );
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, header.prod.Name__c + '请输入差异原因'));
          // return null;
        } else if (
          (header.DiffReason != '' && header.DiffReason != null) &&
          header.Diff == 0
        ) {
          // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '无丢失产品,不需要填写差异原因'));
          // return null;
          return new ResponseBodyLWC(
            'Error',
            500,
            header.prod.Name__c + '无丢失产品,不需要填写差异原因',
            ''
          );
        }
      }
    }
    Integer orderDetNo = 1;
    Savepoint sp = Database.setSavepoint();
    Consumable_order__c Po = new Consumable_order__c();
    Po.Name = '*';
    Po.Order_status__c = '批准';
    Po.Inventory_date__c = Date.today();
    Po.Order_type__c = '盘点';
    Po.Dealer_Info__c = accountid;
    Po.Order_ProType__c = agencyProType;
    Po.RecordTypeid = System.Label.RT_ConOrder_Inventory;
    try {
      insert Po;
      eSetId = Po.id;
      List<Consumable_order__c> Consumable_order = [
        SELECT Name
        FROM Consumable_order__c
        WHERE id = :Po.id
      ];
      List<Consumable_orderdetails__c> InsList = new List<Consumable_orderdetails__c>();
      List<Consumable_order_details2__c> InsListUp = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> updListAdjust = new List<Consumable_order_details2__c>();
      Map<String, String> ErrorName = new Map<String, String>();
      Map<String, Boolean> CheckTF = new Map<String, Boolean>();
      for (ConsumableorderdetailsInfo header : consumableorderdetailsRecords) {
        if (header.check == true) {
          Consumable_orderdetails__c insPan = new Consumable_orderdetails__c();
          insPan = new Consumable_orderdetails__c();
          String str = string.valueOf(orderDetNo);
          if (str.length() == 1) {
            str = '0' + str;
          }
          insPan.Name = Consumable_order[0].Name + '-' + str;
          insPan.Consumable_Product__c = header.ProdId;
          ErrorName.put(insPan.Consumable_Product__c, header.DiffReason);
          CheckTF.put(insPan.Consumable_product__c, true);
          insPan.Consumable_order__c = Po.Id;
          insPan.Lose_reason__c = header.DiffReason;
          insPan.Diff__c = header.Diff;
          insPan.Product_Refind__c = header.refind;
          insPan.inventory_sum__c = header.Pandian;
          insPan.Count_Sum__c = header.countid;
          insPan.RecordTypeId = System.Label.RT_ConOrderDetail1_Inventory;
          orderDetNo++;
          InsList.add(insPan);
        }
      }
      if (InsList.size() > 0) {
        insert InsList;
      }
      List<Consumable_order_details2__c> showcod2 = [
        SELECT
          Id,
          Name,
          Consumable_Product__c,
          Bar_Code__c,
          Consumable_Product__r.Name__c,
          Asset_Model_No__c,
          Isoverdue__c,
          Box_Piece__c,
          Bar_Code_search__c
        FROM Consumable_order_details2__c
        WHERE Id IN :pandiandetailsMap.keySet()
        ORDER BY Name
      ];
      for (Consumable_order_details2__c cod : showcod2) {
        Consumable_order_details2__c InsDetail = new Consumable_order_details2__c();
        InsDetail.Id = cod.Id;
        InsDetail.Consumable_Inventory_order__c = po.Id;
        InsDetail.Inventory_date__c = Date.today();
        // 20210224 gzw CHAN-BXF3PG start
        // if(pandiandetailsMap.get(cod.Id) == '丢失' ){
        if (
          pandiandetailsMap.get(cod.Id) == '丢失' &&
          CheckTF.containsKey(cod.Consumable_product__c)
        ) {
          // 20210224 gzw CHAN-BXF3PG end
          InsDetail.Lose_reason__c = ErrorName.get(cod.Consumable_product__c);
          InsDetail.Lose_Flag__c = true;
        } else if (pandiandetailsMap.get(cod.Id) == '寻回') {
          InsDetail.Lose_reason__c = '';
          InsDetail.Lose_Flag__c = false;
        } else {
          continue;
        }
        InsListUp.add(InsDetail);
      }
      for (Consumable_order_details2__c rs : reSet) {
        rs.Inventory_date__c = Date.today();
      }
      if (reSet.size() > 0) {
        update reSet;
      }
      if (InsListUp.size() > 0) {
        ControllerUtil.updateOrderDetailsSatus(InsListUp); // Commented By DTT - Li Jun for testing 20230407
      }
    } catch (Exception e) {
      Database.rollback(sp);
      // ApexPages.addMessages(ex);
      return new ResponseBodyLWC(
        'Error',
        500,
        e.getMessage() + e.getLineNumber(),
        ''
      );
      // return null;
    }
    // FIXME impliment BarCodeListAdjust
    /************************************************************************************************/
    // return ProS();
    data.put('eSetId', eSetId);
    data.put('InsListUp', InsListUp);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  //盘点一览
  public PageReference ProS() {
    // 返回盘点一览
    PageReference ref = new Pagereference(
      '/apex/InventoryList?eSetId=' + eSetId
    );
    ref.setRedirect(true);
    return ref;
  }
  //CSV出力
  public PageReference doClick() {
    Pagereference pr = page.InventoryCSV;
    return pr;
  }
  //分页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
  @TestVisible
  class ConsumableorderdetailsInfo implements Comparable {
    @AuraEnabled
    public Boolean check { 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 countid { get; set; }
    @AuraEnabled
    public String ProdId { get; set; }
    @AuraEnabled
    public Decimal Pandian { get; set; }
    @AuraEnabled
    public Decimal Diff { get; set; }
    @AuraEnabled
    public Decimal refind { get; set; }
    @AuraEnabled
    public String DiffReason { get; set; }
    @AuraEnabled
    public Boolean canSelect { get; set; }
    @AuraEnabled
    public Boolean sortBy { get; set; }
    @AuraEnabled
    public Decimal limitCount { get; set; }
    @AuraEnabled
    public Decimal overlimitCount { get; set; }
    @AuraEnabled
    public String boxPiece { get; set; }
    public ConsumableorderdetailsInfo(
      Consumable_order_details2__c e,
      string str
    ) {
      orderdetails2 = e;
      Prod = e.Consumable_Product__r;
      //e.Lose_reason__c = str;
      DiffReason = str;
    }
    // 已存在消耗品明细用
    public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
      check = false;
      orderdetails2 = e;
      Prod = e.Consumable_Product__r;
      canSelect = true;
    }
    public ConsumableorderdetailsInfo(Product2__c e) {
      check = false;
      //orderdetails1 = new Consumable_orderdetails__c();
      Prod = e;
      canSelect = true;
      ProdId = string.valueOf(e.id);
      countid = 0;
      Pandian = 0;
      refind = 0;
      Diff = 0;
      limitCount = 0;
      overlimitCount = 0;
    }
    // 排序
    public Integer compareTo(Object compareTo) {
      ConsumableorderdetailsInfo compareToesd = (ConsumableorderdetailsInfo) compareTo;
      Integer returnValue = 0;
      if (countid > compareToesd.countid) {
        returnValue = -1;
      } else if (countid < compareToesd.countid) {
        returnValue = 1;
      }
      return returnValue;
    }
  }
}