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 {set;get;} //拆盒明细件数 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 String[]{}; 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; } } 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; } } }