buli
2023-07-14 e6068da47c1bef5517c9e5fdc8c726766867ad4e
force-app/main/default/classes/LexCancelRemoveBoxController.cls
@@ -1,801 +1,742 @@
public with sharing class LexCancelRemoveBoxController {
  //经销商产品分类
  public static String agencyProType { get; set; }
  public static String userPro_Typestr = null;
  public static String barcode { get; set; }
  /*****************画面表示Bean******************/
  public static List<ConsumableorderdetailsInfo> consumableInventory {
    get;
    set;
  }
  //错误明细
  public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror {
    get;
    set;
  }
  //拆盒明细
  public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy {
    get;
    set;
  }
  public static boolean saveFLGbln { get; set; }
  //错误信息
  public static String alertMessage { get; set; }
  //拆盒明细件数
  public static Integer getinventorysize() {
    return ConsumableorderdetailsRecordsdummy.size();
  }
  public static Map<String, String> ExistIdMap = new Map<String, String>();
  public static Map<String, String> ErrorIdMap = new Map<String, String>();
  public static Map<String, String> AllMap = new Map<String, String>();
  public static List<String> BarCodeListP = new List<String>();
  //不符合的barcode和型号
  public static list<String> notInlist = new List<String>();
  public static String baseUrl { get; private set; }
  private static String accountid = null;
  private static String accountName = null;
  //public String[] proidList =new String[]{};
  // 登录者工作地
  private static String userWorkLocation;
  public LexCancelRemoveBoxController() {
    baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    consumableInventory = new List<ConsumableorderdetailsInfo>();
    saveFLGbln = false;
  }
  @AuraEnabled
  public static ResponseBodyLWC init() {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    String userId = UserInfo.getUserId();
    List<user> Useracc = new List<user>();
    Useracc = [
      SELECT accountid, Work_Location__c, UserPro_Type__c
      FROM user
      WHERE id = :userId
    ];
    accountid = Useracc[0].accountid;
    userWorkLocation = Useracc[0].Work_Location__c;
    agencyProType = Useracc[0].UserPro_Type__c;
    if (String.isBlank(Useracc[0].UserPro_Type__c)) {
      agencyProType = 'ET';
    //经销商产品分类
    public static String agencyProType { get; set; }
    public static String userPro_Typestr = null;
    public static String barcode { get; set; }
    /*****************画面表示Bean******************/
    public static List<ConsumableorderdetailsInfo> consumableInventory { get; set; }
    //错误明细
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordserror { get; set; }
    //拆盒明细
    public static List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy { get; set; }
    public static boolean saveFLGbln { get; set; }
    //错误信息
    public static String alertMessage { get; set; }
    //拆盒明细件数
    public static Integer getinventorysize() {
        return ConsumableorderdetailsRecordsdummy.size();
    }
    userPro_Typestr = '%' + agencyProType + '%';
    List<account> accountInfo = [
      SELECT Name
      FROM account
      WHERE id = :accountid
    ];
    //String view_product = accountInfo[0].view_product__c;
    accountName = accountInfo[0].Name;
    //proidList = view_product.split(',');
    data.put('accountName', accountName);
    data.put('userWorkLocation', userWorkLocation);
    data.put('agencyProType', agencyProType);
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
    public static Map<String, String> ExistIdMap = new Map<String, String>();
    public static Map<String, String> ErrorIdMap = new Map<String, String>();
    public static Map<String, String> AllMap = new Map<String, String>();
    public static List<String> BarCodeListP = new List<String>();
    //不符合的barcode和型号
    public static list<String> notInlist = new List<String>();
    public static String baseUrl { get; private set; }
    private static String accountid = null;
    private static String accountName = null;
    //public String[] proidList =new String[]{};
    // 登录者工作地
    private static String userWorkLocation;
  // 将页面或取得BarCode去掉重复的,转换成List
  public static List<String> ParseBarCode(String Code) {
    String[] Cache = new List<String>{};
    Cache = Code.split('\n');
    Set<String> Buff = new Set<String>();
    for (String A : Cache) {
      Buff.add(A);
    }
    List<String> outPut = new List<String>();
    for (String B : Buff) {
      B = B.trim();
      outPut.add(B);
    }
    return outPut;
  }
  //获取明细
  @AuraEnabled
  public static ResponseBodyLWC searchConsumableorderdetails(
    String barcode,
    String accountName,
    String userWorkLocation,
    String agencyProType
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    userPro_Typestr = '%' + agencyProType + '%';
    barcode = barcode;
    accountName = accountName;
    userWorkLocation = userWorkLocation;
    ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
    ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
    notInlist = new List<String>();
    BarCodeListP = ParseBarCode(barcode);
    Consumable_order_details2__c p = new Consumable_order_details2__c();
    List<Consumable_order_details2__c> Ins = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
    List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
    saveFLGbln = false;
    alertMessage = '';
    //判断barcode是否为空
    if (barcode == null || barcode == '') {
      return new ResponseBodyLWC('Error', 500, '请输入BarCode号', '');
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
      // return;
    public LexCancelRemoveBoxController() {
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        consumableInventory = new List<ConsumableorderdetailsInfo>();
        saveFLGbln = false;
    }
    // ExistIdMap.clear();
    // ErrorIdMap.clear();
    // notInlist.clear();
    // ConsumableorderdetailsRecordserror.clear();
    // ConsumableorderdetailsRecordsdummy.clear();
    @AuraEnabled
    public static ResponseBodyLWC init() {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
    // 产品类型不同
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Product_Type__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        Arrive_Owner_Work_Location__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND (NOT Product_Type__c LIKE :userPro_Typestr)
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str =
            '该商品类型' +
            reSet1[i].Product_Type__c +
            '与产品类型' +
            agencyProType +
            '不符,不能拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        String userId = UserInfo.getUserId();
        List<user> Useracc = new List<user>();
        Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :userId];
        accountid = Useracc[0].accountid;
        userWorkLocation = Useracc[0].Work_Location__c;
        agencyProType = Useracc[0].UserPro_Type__c;
        if (String.isBlank(Useracc[0].UserPro_Type__c)) {
            agencyProType = 'ET';
        }
      }
        userPro_Typestr = '%' + agencyProType + '%';
        List<account> accountInfo = [SELECT Name FROM account WHERE id = :accountid];
        //String view_product = accountInfo[0].view_product__c;
        accountName = accountInfo[0].Name;
        //proidList = view_product.split(',');
        data.put('accountName', accountName);
        data.put('userWorkLocation', userWorkLocation);
        data.put('agencyProType', agencyProType);
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    //没有拆盒
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '盒'
        //AND  ProductPacking_list_manual__c > 1
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ]; //没出库,没销售,在库,没有拆盒
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品没有拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
    // 将页面或取得BarCode去掉重复的,转换成List
    public static List<String> ParseBarCode(String Code) {
        String[] Cache = new List<String>{};
        Cache = Code.split('\n');
        Set<String> Buff = new Set<String>();
        for (String A : Cache) {
            Buff.add(A);
        }
      }
    }
    //已出货,未到货
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = FALSE
        AND Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '盒'
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品还未到货';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        List<String> outPut = new List<String>();
        for (String B : Buff) {
            B = B.trim();
            outPut.add(B);
        }
      }
        return outPut;
    }
    //拆盒已出货
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Shipment__c = TRUE
        AND Dealer_Arrive__c = TRUE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在出货履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    //拆盒已销售
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Saled__c = TRUE
        AND Dealer_Arrive__c = TRUE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在销售履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    //拆盒返品
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Returned__c = TRUE
        AND Return_date__c != NULL
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在返品履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    //拆盒后盘点过(盘点日期不为空)
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Inventory_date__c != NULL
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str = '该商品存在盘点履历';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    //不同工作地
    reSet1 = [
      SELECT
        Id,
        Name,
        Consumable_Product__r.Name__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        recordtypeid,
        Consumable_order_minor__r.Arrive_Order__c,
        Arrive_Owner_Work_Location__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c != :userWorkLocation
      ORDER BY Name
    ];
    if (reSet1.size() > 0) {
      for (Integer i = 0; i < reSet1.size(); i++) {
        if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          String str =
            '该商品属于' +
            reSet1[i].Arrive_Owner_Work_Location__c +
            ',不能取消拆盒';
          ConsumableorderdetailsRecordserror.add(
            new ConsumableorderdetailsInfo(reSet1[i], str)
          );
          ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
        }
      }
    }
    reSet = [
      SELECT
        Id,
        Name,
        Intra_Trade_List_RMB__c,
        Asset_Model_No__c,
        Consumable_Product__c,
        Consumable_Product__r.Name,
        Consumable_Product__r.Name__c,
        Sterilization_limit__c,
        Deliver_date__c,
        Bar_Code__c,
        Arrive_date__c,
        Send_Date__c,
        Consumable_order_minor__r.Name,
        Consumable_order_minor__c,
        Dealer_Arrive__c,
        Guarantee_period_for_products__c,
        CFDA_Status__c,
        ProductPacking_list_manual__c,
        Report_Product_Approbation__c,
        Report_Product_Expiration__c,
        //add by rentx 2020-10-13 start
        ContractNo_text__c
      /*,ContractNo__c*/
      //add by rentx 2020-10-13 end
      FROM Consumable_order_details2__c
      WHERE
        Dealer_Arrive__c = TRUE
        AND Dealer_Shipment__c = FALSE
        AND Dealer_Saled__c = FALSE
        AND Dealer_Returned__c = FALSE
        AND Lose_Flag__c = FALSE
        AND Box_Piece__c = '个'
        AND RemoveBox_date__c != NULL
        AND Bar_Code__c IN :BarCodeListP
        AND Dealer_Info_text__c = :accountName
        AND Arrive_Owner_Work_Location__c = :userWorkLocation
        AND Product_Type__c LIKE :userPro_Typestr
    ];
    if (reSet.size() > 0) {
      for (Integer i = 0; i < reSet.size(); i++) {
        if (ErrorIdMap.containsKey(reSet[i].Bar_Code__c)) {
          // 跳过错误的消耗品明细
          continue;
        } else if (ExistIdMap.containsKey(reSet[i].Bar_Code__c)) {
          // 跳过已经处理的消耗品明细
          continue;
        } else {
          ConsumableorderdetailsRecordsdummy.add(
            new ConsumableorderdetailsInfo(reSet[i])
          );
          ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
        }
      }
    }
    AllMap.putAll(ExistIdMap);
    //得到不存在的BarCode
    for (Integer i = 0; i < BarCodeListP.size(); i++) {
      if (ExistIdMap.containsKey(BarCodeListP[i])) {
        continue;
      } else if (ErrorIdMap.containsKey(BarCodeListP[i])) {
        continue;
      } else {
        notInlist.add(BarCodeListP[i]);
      }
    }
    if (notInlist.size() > 0) {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCode'+ notInlist + '不存在。'));
      return new ResponseBodyLWC(
        'Error',
        500,
        'BarCode' + notInlist + '不存在。',
        ''
      );
    }
    data.put(
      'ConsumableorderdetailsRecordsdummy',
      JSON.serialize(ConsumableorderdetailsRecordsdummy)
    );
    data.put(
      'ConsumableorderdetailsRecordserror',
      JSON.serialize(ConsumableorderdetailsRecordserror)
    );
    data.put('dataSize', ConsumableorderdetailsRecordsdummy.size());
    res.status = 'Success';
    res.code = 200;
    System.debug('res = ' + res);
    return res;
  }
  //取消拆盒确认
  @AuraEnabled
  public static ResponseBodyLWC cancelRemoveBoxConfirm(
    String saveConsumableorderdetailsRecordsdummy,
    String accountName,
    String userWorkLocation,
    String agencyProType
  ) {
    ResponseBodyLWC res = new ResponseBodyLWC();
    Map<String, object> data = new Map<String, object>();
    res.entity = data;
    userPro_Typestr = '%' + agencyProType + '%';
    accountName = accountName;
    userWorkLocation = userWorkLocation;
    List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
      saveConsumableorderdetailsRecordsdummy,
      List<ConsumableorderdetailsInfo>.class
    );
    List<Consumable_order_details2__c> ins = new List<Consumable_order_details2__c>();
    Savepoint sp = Database.setSavepoint();
    if (ConsumableorderdetailsRecordsdummy.size() < 1) {
      // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细'));
      return new ResponseBodyLWC('Error', 500, '不存在取消拆盒明细', '');
      // return null;
    }
    List<String> BarCodeList = new List<String>();
    for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy) {
      BarCodeList.add(tmp.esd.Bar_Code__c);
    }
    try {
      //取得通番大于001的在库明细
      List<Consumable_order_details2__c> orderDetails2del = [
        SELECT
          Id,
          Box_Piece__c,
          RemoveBox_date__c,
          RemoveBox_No__c,
          Bar_Code__c,
          //add by rentx 2020-10-13 start
          ContractNo_text__c
        /*,ContractNo__c*/
        //add by rentx 2020-10-13 end
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = TRUE
          AND Dealer_Shipment__c = FALSE
          AND Dealer_Saled__c = FALSE
          AND Dealer_Returned__c = FALSE
          AND Lose_Flag__c = FALSE
          AND Box_Piece__c = '个'
          AND RemoveBox_date__c != NULL
          AND RemoveBox_No__c > 1
          AND Bar_Code__c IN :BarCodeList
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Product_Type__c LIKE :userPro_Typestr
      ];
      List<Consumable_order_details2__c> orderlistdel = new List<Consumable_order_details2__c>();
      List<Consumable_order_details2__c> orderlistupd = new List<Consumable_order_details2__c>();
      for (Consumable_order_details2__c detail2tmp : orderDetails2del) {
        Consumable_order_details2__c delDetails2 = new Consumable_order_details2__c();
        delDetails2.Id = detail2tmp.Id;
        //删除通番大于001的明细2
        //delete delDetails2;
        orderlistdel.add(delDetails2);
      }
      //取得通番001的在库明细
      List<Consumable_order_details2__c> orderDetails2 = [
        SELECT
          Id,
          Box_Piece__c,
          RemoveBox_date__c,
          RemoveBox_No__c,
          Bar_Code__c,
          //add by rentx 2020-10-13 start
          ContractNo_text__c,
          /*,ContractNo__c*/
          //add by rebtx 2020-10-13 end
          // tcm start
          Consumable_order_minor__r.ContractNo__c
        // tcm end
        FROM Consumable_order_details2__c
        WHERE
          Dealer_Arrive__c = TRUE
          AND Dealer_Shipment__c = FALSE
          AND Dealer_Saled__c = FALSE
          AND Dealer_Returned__c = FALSE
          AND Lose_Flag__c = FALSE
          AND Box_Piece__c = '个'
          AND RemoveBox_date__c != NULL
          AND RemoveBox_No__c = 1
          AND Bar_Code__c IN :BarCodeList
          AND Dealer_Info_text__c = :accountName
          AND Arrive_Owner_Work_Location__c = :userWorkLocation
          AND Product_Type__c LIKE :userPro_Typestr
      ];
      for (Consumable_order_details2__c detail2tmp : orderDetails2) {
        Consumable_order_details2__c updDetails2 = new Consumable_order_details2__c();
        updDetails2.Id = detail2tmp.Id;
        updDetails2.Box_Piece__c = '盒';
        updDetails2.RemoveBox_date__c = null;
        updDetails2.RemoveBox_No__c = null;
        // tcm start
        if (
          String.isBlank(detail2tmp.Consumable_order_minor__r.ContractNo__c)
        ) {
          updDetails2.ContractNo_text__c = detail2tmp.ContractNo_text__c;
        } else {
          updDetails2.ContractNo_text__c = detail2tmp.Consumable_order_minor__r.ContractNo__c;
        }
        // updDetails2.ContractNo_text__c       = detail2tmp.ContractNo__c;
        // tcm end
        //通番001のデータの管理単位を盒に戻し、通番をクリア
        //update updDetails2;
        orderlistupd.add(updDetails2);
      }
      if (orderlistdel.size() > 0) {
        delete orderlistdel;
      }
      if (orderlistupd.size() > 0) {
        update orderlistupd;
      }
      saveFLGbln = true;
      alertMessage = '取消拆盒完成';
      data.put('saveFLGbln', saveFLGbln);
      res.status = 'Success';
      res.code = 200;
      res.msg = alertMessage;
      System.debug('res = ' + res);
      return res;
      // return null;
    } catch (Exception e) {
      Database.rollback(sp);
      ApexPages.addMessages(e);
      return null;
    }
  }
  @TestVisible
  class ConsumableorderdetailsInfo implements Comparable {
    public Consumable_order_details2__c esd { get; set; }
    public Product2__c Prod { get; set; }
    //public String ProductName { get; set; }
    //public Boolean canSELECT { get; set; }
    //public String barCodeNo { get; set; }
    //public Date sterilizationlimitDate { get; set; }
    //public String serialNoorLotNo { get; set; }
    //public String tracingCodeNo { get; set; }
    public String oldConsumableCount { get; set; }
    public String ErrorReason { get; set; }
    public ConsumableorderdetailsInfo(
      Consumable_order_details2__c e,
      string str
    //获取明细
    @AuraEnabled
    public static ResponseBodyLWC searchConsumableorderdetails(
        String barcode,
        String accountName,
        String userWorkLocation,
        String agencyProType
    ) {
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
      ErrorReason = str;
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        userPro_Typestr = '%' + agencyProType + '%';
        barcode = barcode;
        accountName = accountName;
        userWorkLocation = userWorkLocation;
        ConsumableorderdetailsRecordserror = new List<ConsumableorderdetailsInfo>();
        ConsumableorderdetailsRecordsdummy = new List<ConsumableorderdetailsInfo>();
        notInlist = new List<String>();
        BarCodeListP = ParseBarCode(barcode);
        Consumable_order_details2__c p = new Consumable_order_details2__c();
        List<Consumable_order_details2__c> Ins = new List<Consumable_order_details2__c>();
        List<Consumable_order_details2__c> reSet = new List<Consumable_order_details2__c>();
        List<Consumable_order_details2__c> reSet1 = new List<Consumable_order_details2__c>();
        saveFLGbln = false;
        alertMessage = '';
        //判断barcode是否为空
        if (barcode == null || barcode == '') {
            return new ResponseBodyLWC('Error', 500, '请输入BarCode号', '');
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输入BarCode号。'));
            // return;
        }
        // ExistIdMap.clear();
        // ErrorIdMap.clear();
        // notInlist.clear();
        // ConsumableorderdetailsRecordserror.clear();
        // ConsumableorderdetailsRecordsdummy.clear();
        // 产品类型不同
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Product_Type__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                Arrive_Owner_Work_Location__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND (NOT Product_Type__c LIKE :userPro_Typestr)
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品类型' + reSet1[i].Product_Type__c + '与产品类型' + agencyProType + '不符,不能拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //没有拆盒
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Box_Piece__c = '盒'
                //AND  ProductPacking_list_manual__c > 1
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ]; //没出库,没销售,在库,没有拆盒
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品没有拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //已出货,未到货
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = FALSE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Box_Piece__c = '盒'
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品还未到货';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //拆盒已出货
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Shipment__c = TRUE
                AND Dealer_Arrive__c = TRUE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Box_Piece__c = '个'
                AND RemoveBox_date__c != NULL
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品存在出货履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //拆盒已销售
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Saled__c = TRUE
                AND Dealer_Arrive__c = TRUE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Box_Piece__c = '个'
                AND RemoveBox_date__c != NULL
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品存在销售履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //拆盒返品
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Returned__c = TRUE
                AND Return_date__c != NULL
                AND Box_Piece__c = '个'
                AND RemoveBox_date__c != NULL
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品存在返品履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //拆盒后盘点过(盘点日期不为空)
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Inventory_date__c != NULL
                AND Box_Piece__c = '个'
                AND RemoveBox_date__c != NULL
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品存在盘点履历';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        //不同工作地
        reSet1 = [
            SELECT
                Id,
                Name,
                Consumable_Product__r.Name__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                recordtypeid,
                Consumable_order_minor__r.Arrive_Order__c,
                Arrive_Owner_Work_Location__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c != :userWorkLocation
            ORDER BY Name
        ];
        if (reSet1.size() > 0) {
            for (Integer i = 0; i < reSet1.size(); i++) {
                if (ErrorIdMap.containsKey(reSet1[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    String str = '该商品属于' + reSet1[i].Arrive_Owner_Work_Location__c + ',不能取消拆盒';
                    ConsumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i], str));
                    ErrorIdMap.put(reSet1[i].Bar_Code__c, reSet1[i].Bar_Code__c);
                }
            }
        }
        reSet = [
            SELECT
                Id,
                Name,
                Intra_Trade_List_RMB__c,
                Asset_Model_No__c,
                Consumable_Product__c,
                Consumable_Product__r.Name,
                Consumable_Product__r.Name__c,
                Sterilization_limit__c,
                Deliver_date__c,
                Bar_Code__c,
                Arrive_date__c,
                Send_Date__c,
                Consumable_order_minor__r.Name,
                Consumable_order_minor__c,
                Dealer_Arrive__c,
                Guarantee_period_for_products__c,
                CFDA_Status__c,
                ProductPacking_list_manual__c,
                Report_Product_Approbation__c,
                Report_Product_Expiration__c,
                //add by rentx 2020-10-13 start
                ContractNo_text__c
            /*,ContractNo__c*/
            //add by rentx 2020-10-13 end
            FROM Consumable_order_details2__c
            WHERE
                Dealer_Arrive__c = TRUE
                AND Dealer_Shipment__c = FALSE
                AND Dealer_Saled__c = FALSE
                AND Dealer_Returned__c = FALSE
                AND Lose_Flag__c = FALSE
                AND Box_Piece__c = '个'
                AND RemoveBox_date__c != NULL
                AND Bar_Code__c IN :BarCodeListP
                AND Dealer_Info_text__c = :accountName
                AND Arrive_Owner_Work_Location__c = :userWorkLocation
                AND Product_Type__c LIKE :userPro_Typestr
        ];
        if (reSet.size() > 0) {
            for (Integer i = 0; i < reSet.size(); i++) {
                if (ErrorIdMap.containsKey(reSet[i].Bar_Code__c)) {
                    // 跳过错误的消耗品明细
                    continue;
                } else if (ExistIdMap.containsKey(reSet[i].Bar_Code__c)) {
                    // 跳过已经处理的消耗品明细
                    continue;
                } else {
                    ConsumableorderdetailsRecordsdummy.add(new ConsumableorderdetailsInfo(reSet[i]));
                    ExistIdMap.put(reSet[i].Bar_Code__c, reSet[i].Bar_Code__c);
                }
            }
        }
        AllMap.putAll(ExistIdMap);
        //得到不存在的BarCode
        for (Integer i = 0; i < BarCodeListP.size(); i++) {
            if (ExistIdMap.containsKey(BarCodeListP[i])) {
                continue;
            } else if (ErrorIdMap.containsKey(BarCodeListP[i])) {
                continue;
            } else {
                notInlist.add(BarCodeListP[i]);
            }
        }
        if (notInlist.size() > 0) {
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCode'+ notInlist + '不存在。'));
            return new ResponseBodyLWC('Error', 500, 'BarCode' + notInlist + '不存在。', '');
        }
        data.put('ConsumableorderdetailsRecordsdummy', JSON.serialize(ConsumableorderdetailsRecordsdummy));
        data.put('ConsumableorderdetailsRecordserror', JSON.serialize(ConsumableorderdetailsRecordserror));
        data.put('dataSize', ConsumableorderdetailsRecordsdummy.size());
        res.status = 'Success';
        res.code = 200;
        System.debug('res = ' + res);
        return res;
    }
    public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
      esd = e;
      Prod = e.Consumable_Product__r;
      oldConsumableCount = e.name;
    //取消拆盒确认
    @AuraEnabled
    public static ResponseBodyLWC cancelRemoveBoxConfirm(
        String saveConsumableorderdetailsRecordsdummy,
        String accountName,
        String userWorkLocation,
        String agencyProType
    ) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        userPro_Typestr = '%' + agencyProType + '%';
        accountName = accountName;
        userWorkLocation = userWorkLocation;
        List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecordsdummy = (List<ConsumableorderdetailsInfo>) JSON.deserialize(
            saveConsumableorderdetailsRecordsdummy,
            List<ConsumableorderdetailsInfo>.class
        );
        List<Consumable_order_details2__c> ins = new List<Consumable_order_details2__c>();
        Savepoint sp = Database.setSavepoint();
        if (ConsumableorderdetailsRecordsdummy.size() < 1) {
            // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细'));
            return new ResponseBodyLWC('Error', 500, '不存在取消拆盒明细', '');
            // return null;
        }
        List<String> BarCodeList = new List<String>();
        for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy) {
            BarCodeList.add(tmp.esd.Bar_Code__c);
        }
        try {
            //取得通番大于001的在库明细
            List<Consumable_order_details2__c> orderDetails2del = [
                SELECT
                    Id,
                    Box_Piece__c,
                    RemoveBox_date__c,
                    RemoveBox_No__c,
                    Bar_Code__c,
                    //add by rentx 2020-10-13 start
                    ContractNo_text__c
                /*,ContractNo__c*/
                //add by rentx 2020-10-13 end
                FROM Consumable_order_details2__c
                WHERE
                    Dealer_Arrive__c = TRUE
                    AND Dealer_Shipment__c = FALSE
                    AND Dealer_Saled__c = FALSE
                    AND Dealer_Returned__c = FALSE
                    AND Lose_Flag__c = FALSE
                    AND Box_Piece__c = '个'
                    AND RemoveBox_date__c != NULL
                    AND RemoveBox_No__c > 1
                    AND Bar_Code__c IN :BarCodeList
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c = :userWorkLocation
                    AND Product_Type__c LIKE :userPro_Typestr
            ];
            List<Consumable_order_details2__c> orderlistdel = new List<Consumable_order_details2__c>();
            List<Consumable_order_details2__c> orderlistupd = new List<Consumable_order_details2__c>();
            for (Consumable_order_details2__c detail2tmp : orderDetails2del) {
                Consumable_order_details2__c delDetails2 = new Consumable_order_details2__c();
                delDetails2.Id = detail2tmp.Id;
                //删除通番大于001的明细2
                //delete delDetails2;
                orderlistdel.add(delDetails2);
            }
            //取得通番001的在库明细
            List<Consumable_order_details2__c> orderDetails2 = [
                SELECT
                    Id,
                    Box_Piece__c,
                    RemoveBox_date__c,
                    RemoveBox_No__c,
                    Bar_Code__c,
                    //add by rentx 2020-10-13 start
                    ContractNo_text__c,
                    /*,ContractNo__c*/
                    //add by rebtx 2020-10-13 end
                    // tcm start
                    Consumable_order_minor__r.ContractNo__c
                // tcm end
                FROM Consumable_order_details2__c
                WHERE
                    Dealer_Arrive__c = TRUE
                    AND Dealer_Shipment__c = FALSE
                    AND Dealer_Saled__c = FALSE
                    AND Dealer_Returned__c = FALSE
                    AND Lose_Flag__c = FALSE
                    AND Box_Piece__c = '个'
                    AND RemoveBox_date__c != NULL
                    AND RemoveBox_No__c = 1
                    AND Bar_Code__c IN :BarCodeList
                    AND Dealer_Info_text__c = :accountName
                    AND Arrive_Owner_Work_Location__c = :userWorkLocation
                    AND Product_Type__c LIKE :userPro_Typestr
            ];
            for (Consumable_order_details2__c detail2tmp : orderDetails2) {
                Consumable_order_details2__c updDetails2 = new Consumable_order_details2__c();
                updDetails2.Id = detail2tmp.Id;
                updDetails2.Box_Piece__c = '盒';
                updDetails2.RemoveBox_date__c = null;
                updDetails2.RemoveBox_No__c = null;
                // tcm start
                if (String.isBlank(detail2tmp.Consumable_order_minor__r.ContractNo__c)) {
                    updDetails2.ContractNo_text__c = detail2tmp.ContractNo_text__c;
                } else {
                    updDetails2.ContractNo_text__c = detail2tmp.Consumable_order_minor__r.ContractNo__c;
                }
                // updDetails2.ContractNo_text__c       = detail2tmp.ContractNo__c;
                // tcm end
                //通番001のデータの管理単位を盒に戻し、通番をクリア
                //update updDetails2;
                orderlistupd.add(updDetails2);
            }
            if (orderlistdel.size() > 0) {
                delete orderlistdel;
            }
            if (orderlistupd.size() > 0) {
                update orderlistupd;
            }
            saveFLGbln = true;
            alertMessage = '取消拆盒完成';
            data.put('saveFLGbln', saveFLGbln);
            res.status = 'Success';
            res.code = 200;
            res.msg = alertMessage;
            System.debug('res = ' + res);
            return res;
            // return null;
        } catch (Exception e) {
            Database.rollback(sp);
            ApexPages.addMessages(e);
            return null;
        }
    }
    /*
    @TestVisible
    class ConsumableorderdetailsInfo implements Comparable {
        public Consumable_order_details2__c esd { get; set; }
        public Product2__c Prod { get; set; }
        //public String ProductName { get; set; }
        //public Boolean canSELECT { get; set; }
        //public String barCodeNo { get; set; }
        //public Date sterilizationlimitDate { get; set; }
        //public String serialNoorLotNo { get; set; }
        //public String tracingCodeNo { get; set; }
        public String oldConsumableCount { get; set; }
        public String ErrorReason { get; set; }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e, string str) {
            esd = e;
            Prod = e.Consumable_Product__r;
            oldConsumableCount = e.name;
            ErrorReason = str;
        }
        public ConsumableorderdetailsInfo(Consumable_order_details2__c e) {
            esd = e;
            Prod = e.Consumable_Product__r;
            oldConsumableCount = e.name;
        }
        /*
        public ConsumableorderdetailsInfo(Product2__c e,String barCode,Date sterilizationlimit,String serialNoorLot,String tracingCode) {
            esd = new Consumable_order_details2__c();
            ProductName = e.Name__c;
@@ -816,9 +757,9 @@
            tracingCodeNo          = tracingCode;
        }
*/
    // 排序
    public Integer compareTo(Object compareTo) {
      return null;
        // 排序
        public Integer compareTo(Object compareTo) {
            return null;
        }
    }
  }
}