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 consumableInventory { get; set; } //错误明细 public static List ConsumableorderdetailsRecordserror { get; set; } //拆盒明细 public static List 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 ExistIdMap = new Map(); public static Map ErrorIdMap = new Map(); public static Map AllMap = new Map(); public static List BarCodeListP = new List(); //不符合的barcode和型号 public static list notInlist = new List(); 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(); ConsumableorderdetailsRecordsdummy = new List(); consumableInventory = new List(); saveFLGbln = false; } @AuraEnabled public static ResponseBodyLWC init() { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; String userId = UserInfo.getUserId(); List Useracc = new List(); 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 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; } // 将页面或取得BarCode去掉重复的,转换成List public static List ParseBarCode(String Code) { String[] Cache = new List{}; Cache = Code.split('\n'); Set Buff = new Set(); for (String A : Cache) { Buff.add(A); } List outPut = new List(); 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 data = new Map(); res.entity = data; userPro_Typestr = '%' + agencyProType + '%'; barcode = barcode; accountName = accountName; userWorkLocation = userWorkLocation; ConsumableorderdetailsRecordserror = new List(); ConsumableorderdetailsRecordsdummy = new List(); notInlist = new List(); BarCodeListP = ParseBarCode(barcode); Consumable_order_details2__c p = new Consumable_order_details2__c(); List Ins = new List(); List reSet = new List(); List reSet1 = new List(); 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; } //取消拆盒确认 @AuraEnabled public static ResponseBodyLWC cancelRemoveBoxConfirm( String saveConsumableorderdetailsRecordsdummy, String accountName, String userWorkLocation, String agencyProType ) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; userPro_Typestr = '%' + agencyProType + '%'; accountName = accountName; userWorkLocation = userWorkLocation; List ConsumableorderdetailsRecordsdummy = (List) JSON.deserialize( saveConsumableorderdetailsRecordsdummy, List.class ); List ins = new List(); Savepoint sp = Database.setSavepoint(); if (ConsumableorderdetailsRecordsdummy.size() < 1) { // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'不存在取消拆盒明细')); return new ResponseBodyLWC('Error', 500, '不存在取消拆盒明细', ''); // return null; } List BarCodeList = new List(); for (ConsumableorderdetailsInfo tmp : ConsumableorderdetailsRecordsdummy) { BarCodeList.add(tmp.esd.Bar_Code__c); } try { //取得通番大于001的在库明细 List 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 orderlistdel = new List(); List orderlistupd = new List(); 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 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; Prod = e; barCodeNo = barCode; sterilizationlimitDate = sterilizationlimit; serialNoorLotNo = serialNoorLot; tracingCodeNo = tracingCode; } public ConsumableorderdetailsInfo(Consumable_order_details2__c e,String barCode,Date sterilizationlimit,String serialNoorLot,String tracingCode) { //esd = new Consumable_order_details2__c(); Prod = e.Consumable_Product__r; //ProductName = productName; barCodeNo = barCode; sterilizationlimitDate = sterilizationlimit; serialNoorLotNo = serialNoorLot; tracingCodeNo = tracingCode; } */ // 排序 public Integer compareTo(Object compareTo) { return null; } } }