public without sharing class SaleOrderController { //画面录入barcode取得 public static boolean isRunning = false; public String barcode { get; set; } public Consumable_order__c coc { get; set; } /*****************画面表示Bean******************/ //明细2 public List consumableorderdetailsRecords { get; set; } public List consumableorderdetails2Nobox= new List(); //错误明细 public List consumableorderdetailsRecordserror { get; set; } Map existIdMap = new Map(); Map errorIdMap = new Map(); Map allMap = new Map(); Map orderpieceorboxMap = new Map(); Map orderpriceMap = new Map(); Map orderagencypriceMap = new Map(); Map orderdetCountMap = new Map(); //存在的到货barcode数量(个) Map BarcodeCntMap = new Map(); public String baseUrl {get;private set;} //指示单ID public String ESetId { get; set; } //经销商ID private String accountName = null; // 登录者工作地 private String userWorkLocation; //add by rentx 2021-2-26 start private Boolean hasSpecialHos; private Map msiMap = new Map(); //在2021-3-1日 将明细1 和明细2中所有的Consumable_product__c变为了 Product_Pattern__c 为了区分医院特价和非医院特价 //add by rentx 2021-2-26 end public SaleOrderController(){ //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8'); baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); ESetId = ApexPages.currentPage().getParameters().get('esetId'); consumableorderdetailsRecords = new List(); consumableorderdetailsRecordserror = new List(); } List orderdetails = New List(); //add by rentx 2021-3-10 private String accountid; //add by rentx 2021-3-10 //初始化 public void init() { isRunning = true; String UserName = UserInfo.getUserId(); user useracc = [SELECT Accountid, Work_Location__c FROM user WHERE id =:UserName]; accountid = useracc.Accountid; userWorkLocation = useracc.Work_Location__c; Account accountInfo = [SELECT Name FROM account WHERE id =:accountid]; accountName = accountInfo.Name; consumableorderdetailsRecords = new List(); consumableorderdetailsRecordserror = new List(); coc = new Consumable_order__c(); List arriveDat = new List(); if(String.isNotBlank(ESetId)){ // update start by vivek 2019-7-16 // coc = [select Id,Name,Order_ForDealer__r.Name, // Summons_Order_type__c,Order_status__c,Dealer_Info__c, // SummonsStatus_c__c,Deliver_date__c,Order_Reason__c, // Order_date__c,Order_ForHospital__c,SummonsForDirction__c, // Arrive_Order__c, // Arrive_Order__r.IsShipment__c,Outbound_Date__c, // Billed_Status__c,ShipmentAccount__c,Order_ForCustomerText__c // From Consumable_order__c // Where Id =:ESetId]; coc = [select Id,Name,NoConfirmedPrice__c,Order_ForDealer__r.Name, Summons_Order_type__c,Order_status__c,Dealer_Info__c,Dealer_Info__r.Name, SummonsStatus_c__c,Deliver_date__c,Order_Reason__c, Order_date__c,Order_ForHospital__c,SummonsForDirction__c, Arrive_Order__c, Arrive_Order__r.IsShipment__c,Outbound_Date__c, Billed_Status__c,ShipmentAccount__c,Order_ForCustomerText__c,OutPattern__c From Consumable_order__c Where Id =:ESetId]; // update end by vivek 2019-7-16 if(coc.Arrive_Order__c!= null){ arriveDat = [select Id, Name, recordtypeid,Used_account__c, Product_Pattern__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,Intra_Trade_List_RMB__c, Asset_Model_No__c,Isoverdue__c,Guarantee_period_for_products__c,Box_Piece__c // gzw add 20210308 报错修复 ,hospitalSpecialOffer__c from Consumable_order_details2__c where Consumable_ZS_order__c = :ESetId]; for(Integer j = 0; j < arriveDat.size(); j++){ consumableorderdetailsRecords.add(new ConsumableorderdetailsInfo(arriveDat[j])); } } orderdetails =[select Id,Name,Product_Pattern__c,Consumable_product__r.Name, Shipment_Count__c,Box_Piece__c,Delivery_List_RMB__c,Unitprice_To_agency__c,isOutPattern__c from Consumable_orderdetails__c where Consumable_order__c = :ESetId AND Order_Owner_WorkLocal__c = : userWorkLocation ]; for(Integer i = 0; i < orderdetails.size(); i++){ orderpieceorboxMap.put(orderdetails[i].Product_Pattern__c,orderdetails[i].Box_Piece__c); if(orderdetails[i].Unitprice_To_agency__c != null && orderdetails[i].Unitprice_To_agency__c !=0){ orderagencypriceMap.put(orderdetails[i].Product_Pattern__c, orderdetails[i].Unitprice_To_agency__c); } orderpriceMap.put(orderdetails[i].Product_Pattern__c,orderdetails[i].Delivery_List_RMB__c); orderdetCountMap.put(orderdetails[i].Product_Pattern__c,orderdetails[i].Shipment_Count__c); } //add by rentx 2021-2-26 List hlist = [select id from hospitalprice__c where hospital__c = :coc.ShipmentAccount__c and account__c = :accountid]; if (hlist == null || hlist.size() == 0) { hasSpecialHos = false; }else { hasSpecialHos = true; } // add by rentx 2021-2-26 end } } // 去的页面上的barcode,转换成List public List ParseBarCode(String Code){ String[] Cache = new String[]{}; Cache = Code.split('\n'); List Buff = new List(); for(String A : Cache){ A = A.trim(); Buff.add(A.toUpperCase()); } return Buff; } //检索时明细做成 public void SearchPro() { //判断是否和订单联动 if(coc.Arrive_Order__c!= null){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'无需到货确认,请直接出库。')); return; } //判断barcode是否为空 if(barcode == null || barcode ==''){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'请输BarCode号。')); return; } list exitlist = new List(); list notexitlist = new List(); existIdMap = new Map(); errorIdMap = new Map(); allMap = new Map(); consumableorderdetailsRecords = new List(); consumableorderdetailsRecordserror = new List(); List barCodeListP = new List(); List reSet = new List(); List reSet1 = new List(); //BarCodelist做成 barCodeListP = ParseBarCode(barcode); //针对所有商品到货确认 reSet1 = [select Id, Name, recordtypeid, Used_account__c, Product_Pattern__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, Intra_Trade_List_RMB__c, Asset_Model_No__c, Isoverdue__c, Box_Piece__c, ProductPacking_list_manual__c, Guarantee_period_for_products__c, hospitalSpecialOffer__c , exchangeOutPattern__c from Consumable_order_details2__c WHERE Dealer_Arrive__c = true AND Dealer_Returned__c = false //AND Dealer_Shipment__c = false //AND Dealer_Saled__c = false //AND Lose_Flag__c = false AND Bar_Code__c !=null AND Dealer_Info_text__c = :accountName AND Bar_Code__c in :barCodeListP AND Arrive_Owner_Work_Location__c =: userWorkLocation order by RemoveBox_No__c desc]; List newdet2 = new List(); //add by rentx 2021-3-10 start //如果明细2对应的产品存在医院特价关系表但是出库单上的客户不存在 报错 //判断当前明细2对应的产品是否存在医院特价关系表 不存在就可以出库 // for(String barcode :barCodeListP){ // Integer idx = 0; // for(Consumable_order_details2__c cod2 : reSet1){ // if(cod2.Bar_Code__c == barcode){ // newdet2.add(cod2); // reSet1.remove(idx); // break; // } // idx++; // } // } Set proIds = new Set(); for(String barcode :barCodeListP){ Integer idx = 0; for(Consumable_order_details2__c cod2 : reSet1){ if(cod2.Bar_Code__c == barcode){ newdet2.add(cod2); reSet1.remove(idx); proIds.add(cod2.Consumable_product__c); break; } idx++; } } Map proHosMap = new Map(); Map proIdMap = new Map(); List hpList = [select id,hospital__c,product__c from hospitalprice__c where account__c = :accountid]; if (hpList!= null && hpList.size() > 0) { for (hospitalprice__c hp : hpList) { proIdMap.put((''+hp.product__c).subString(0,15)+'是', ''); if (hp.hospital__c ==coc.Order_ForHospital__c) { proHosMap.put((''+hp.product__c).subString(0,15)+'是', ''); } } } // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'proIdMap '+ proIdMap)); // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'proHosMap '+ proHosMap)); //add by rentx 2021-3-10 end for(Integer i = 0; i < orderdetails.size(); i++){ for(Integer j = 0; j < newdet2.size(); j++){ if(newdet2[j].Product_Pattern__c == orderdetails[i].Product_Pattern__c && newdet2[j].Box_Piece__c != orderdetails[i].Box_Piece__c){ String str = '该商品出货单位错误'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } //add by rentx 2021-3-10 start /* 如果当前经销商下有特价医院的话 判断 如果医院和特价产品都维护在医院特价关系表中 可以正常出库 如果 医院特价关系表中没有再维护该产品 可以正常出库 else 报错 产品维护在医院特价关系表中 但是医院没有 */ //判断当前出库单是否为医院特价出库单 if (coc.OutPattern__c == true) { if (newdet2[j].Product_Pattern__c == orderdetails[i].Product_Pattern__c) { //add by rentx 2021-03-22 start if (newdet2[j].exchangeOutPattern__c == true) { //如果当前经销商下没有维护对应的特价产品 报错 if (!proIdMap.containsKey(newdet2[j].Product_Pattern__c)) { String str = '没有维护该产品的特价医院'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } } //add by rentx 2021-03-22 end if (hpList != null && hpList.size() > 0) { if (proHosMap.containsKey(newdet2[j].Product_Pattern__c)) { continue; }else if (!proIdMap.containsKey(newdet2[j].Product_Pattern__c)) { continue; }else{ String str = '该商品出库医院错误'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } } } } //add by rentx 2021-3-10 end /*//===========================add by rentx 2020-12-10 //判断如果是医院特价 或不是医院特价 //1.如果需要出库/销售 医院特价的产品 //add by rentx 2021-2-26 start //先判断当前经销商下有没有特价医院 if (hasSpecialHos == false) { // //没有特价医院,判断明细1 和明细2是否都是或都不是医院特价 // if(newdet2[j].Product_Pattern__c == orderdetails[i].Product_Pattern__c ){ // if (newdet2[j].hospitalSpecialOffer__c == true && orderdetails[i].isOutPattern__c == false) { // String str = '该商品是医院特价入库的商品,请选择非医院特价入库的商品'; // consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); // errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); // }else if (newdet2[j].hospitalSpecialOffer__c == false && orderdetails[i].isOutPattern__c == true) { // String str = '该商品是非医院特价入库的商品,请选择医院特价入库的商品'; // consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); // errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); // } // } //add by rentx 2021-2-26 end }else{ if (coc.OutPattern__c == true) { //1.判断明细1,明细2 是否都是医院特价 if (orderdetails[i].isOutPattern__c == true) { if (newdet2[j].hospitalSpecialOffer__c == false) { String str = '该商品是非医院特价入库的商品,无法出库'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } }else{ String str = '该商品无法出库,请重新确认明细1与明细2的入库方式'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } } //2.如果需要出库/销售 非医院特价的产品 if (coc.OutPattern__c == false) { //1.判断明细1,明细2 是否都是医院特价 if (orderdetails[i].isOutPattern__c == false) { if (newdet2[j].hospitalSpecialOffer__c == true) { String str = '该商品是医院特价入库的商品,无法出库'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } }else{ String str = '该商品无法出库,请重新确认明细1与明细2的入库方式'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } } } //add by rentx 2021-2-26 end //===========================add by rentx 2020-12-10*/ } } //管理编码为空时,报错 reSet1 = [select Id, Name, Product_Pattern__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, Box_Piece__c, Arrive_Owner_Work_Location__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Bar_Code__c in :barCodeListP AND Bar_Code__c !=null AND Dealer_Arrive__c = true AND Dealer_Info_text__c = :accountName AND Arrive_Owner_Work_Location__c =: userWorkLocation AND (TracingCode__c = null OR TracingCode__c = '') order by Name ]; if(reSet1.size()>0){ for (Integer i = 0; i < reSet1.size(); i++) { if(errorIdMap.containsKey(reSet1[i].Bar_Code__c) || existIdMap.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, Product_Pattern__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, Box_Piece__c, Arrive_Owner_Work_Location__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Bar_Code__c in :barCodeListP AND Bar_Code__c !=null AND Dealer_Arrive__c = true AND Dealer_Info_text__c = :accountName AND Arrive_Owner_Work_Location__c =: userWorkLocation AND Cancellation_Flag__c = true order by Name ]; if(reSet1.size()>0){ for (Integer i = 0; i < reSet1.size(); i++) { if(errorIdMap.containsKey(reSet1[i].Bar_Code__c) || existIdMap.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, Product_Pattern__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, Box_Piece__c, Arrive_Owner_Work_Location__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Bar_Code__c in :barCodeListP AND Bar_Code__c !=null AND Dealer_Arrive__c = true 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) || existIdMap.containsKey(reSet1[i].Bar_Code__c)){ // 跳过已经处理的消耗品明细 continue; }else if(!orderpieceorboxMap.containsKey(reSet1[i].Product_Pattern__c)){ 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, Product_Pattern__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, Box_Piece__c,Dealer_Info_text__c, Arrive_Owner_Work_Location__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Bar_Code__c in :barCodeListP AND Bar_Code__c !=null AND Dealer_Arrive__c = true AND ((Dealer_Info_text__c = :accountName AND Arrive_Owner_Work_Location__c !=: userWorkLocation) OR Dealer_Info_text__c != :accountName) AND Cancellation_Flag__c = false AND Dealer_Shipment__c= FALSE AND Dealer_Saled__c = FALSE AND Lose_Flag__c = false AND Dealer_Returned__c = false order by Name ]; if(reSet1.size()>0){ for (Integer i = 0; i < reSet1.size(); i++) { if(errorIdMap.containsKey(reSet1[i].Bar_Code__c) || existIdMap.containsKey(reSet1[i].Bar_Code__c)){ // 跳过已经处理的消耗品明细 continue; }else{ // 当前经销商是否存在此产品判断 boolean containsFlg = false; for(Consumable_order_details2__c cod2 : newdet2){ if(cod2.Bar_Code__c == reSet1[i].Bar_Code__c){ containsFlg = true; break; } } if (containsFlg == false) { String str = '该商品是' + reSet1[i].Arrive_Owner_Work_Location__c + '的库存'; if (reSet1[i].Dealer_Info_text__c != accountName) { str = '该商品在其他经销商库存'; } consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(reSet1[i],str)); errorIdMap.put(reSet1[i].Bar_Code__c,reSet1[i].Bar_Code__c); } } } } reSet1 = [select Id, Name, Product_Pattern__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, Box_Piece__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Dealer_Saled__c = true AND Box_Piece__c = '盒' AND Dealer_Info_text__c = :accountName and Dealer_Returned__c = false and Bar_Code__c in :barCodeListP 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) || existIdMap.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, Product_Pattern__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, Box_Piece__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Dealer_Shipment__c = true AND Box_Piece__c = '盒' AND Dealer_Info_text__c = :accountName AND Dealer_Returned__c = false and Bar_Code__c in :barCodeListP 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) || existIdMap.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, Product_Pattern__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, Box_Piece__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where Lose_Flag__c = true AND Box_Piece__c = '盒' AND Dealer_Info_text__c = :accountName and Bar_Code__c in :barCodeListP 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) || existIdMap.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); } } } reSet = [select Id, Name, recordtypeid, Used_account__c, Product_Pattern__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, Intra_Trade_List_RMB__c, Asset_Model_No__c, Isoverdue__c, Box_Piece__c, ProductPacking_list_manual__c, Guarantee_period_for_products__c, TracingCode__c, Transfer_Time__c, Frist_Transfer_Agency__c ,hospitalSpecialOffer__c from Consumable_order_details2__c WHERE Dealer_Arrive__c = true AND Dealer_Shipment__c = false AND Dealer_Saled__c = false AND Lose_Flag__c = false AND Dealer_Returned__c = false AND Bar_Code__c !=null AND Dealer_Info_text__c = :accountName and Bar_Code__c in :barCodeListP AND Arrive_Owner_Work_Location__c =: userWorkLocation order by RemoveBox_No__c desc]; //对应录入barcode数量的检索结果 newdet2 = new List(); for(String barcode :barCodeListP){ Integer idx = 0; for(Consumable_order_details2__c cod2 : reSet){ if(cod2.Bar_Code__c == barcode){ newdet2.add(cod2); reSet.remove(idx); break; } idx++; } } Map checkBarcodeResult = new Map(); for(Integer i = 0; i < orderdetails.size(); i++){ Integer a = 0; for(Integer j = 0; j < newdet2.size(); j++){ if(newdet2[j].Product_Pattern__c == orderdetails[i].Product_Pattern__c && a< orderdetails[i].Shipment_Count__c){ if((existIdMap.containsKey(newdet2[j].Bar_Code__c) && newdet2[j].Bar_Code__c == '盒') || errorIdMap.containsKey(newdet2[j].Bar_Code__c)){ // 跳过已经处理的消耗品明细 continue; }else if(newdet2[j].Isoverdue__c == 0){ String str = '该商品已经超出减菌有效期的有效范围'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); }else if(newdet2[j].Box_Piece__c != orderdetails[i].Box_Piece__c){ String str = '该商品出货单位错误'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); }else if(!checkBarcodeResult.containsKey(newdet2[j].Bar_Code__c)) { Matcher n = Pattern.compile('[0-9]').matcher(newdet2[j].TracingCode__c); if(n.find()){ // gzw DB202305352696 入库管理编码验证程序调整 start if (newdet2[j].TracingCode__c.length() == 5) { String tr = newdet2[j].TracingCode__c; String Ctr = tr.substring(tr.length() - 3,tr.length()); String Btr = tr.substring(tr.length() - 4,tr.length()-3); String Atr = tr.substring(tr.length() - 5,tr.length()-4); if (Pattern.compile('[0-9]').matcher(Atr).find() || Pattern.compile('[0-9]').matcher(Ctr).find()) { String str = '管理编码有误,请检查条形码数据。'; consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); continue; } } // String str = '管理编码中有数字,请与管理员确认是否错误。'; // consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); // errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); // continue; // gzw DB202305352696 入库管理编码验证程序调整 end } checkBarcodeResult.put(newdet2[j].Bar_Code__c, newdet2[j].Bar_Code__c); consumableorderdetailsRecords.add(new ConsumableorderdetailsInfo(newdet2[j])); a++; existIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } }else if(newdet2[j].Product_Pattern__c == orderdetails[i].Product_Pattern__c){ if(a >= orderdetails[i].Shipment_Count__c && orderdetails[i].Box_Piece__c == '个'){ // 跳过超过数量的消耗品明细 continue; }else if(errorIdMap.containsKey(newdet2[j].Bar_Code__c)){ // 跳过已经处理的消耗品明细 continue; }else{ //CHAN-C23BWX update by rentx 2021-04-28 start // String str = '该商品超出订货数量'; String str = '该产品超出出库单产品范围'; //CHAN-C23BWX update by rentx 2021-04-28 end consumableorderdetailsRecordserror.add(new ConsumableorderdetailsInfo(newdet2[j],str)); errorIdMap.put(newdet2[j].Bar_Code__c,newdet2[j].Bar_Code__c); } } } } reSet1 = [select Id, Name, Product_Pattern__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, Box_Piece__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where recordtypeid = :System.Label.RT_ConOrderDetail2_Delivery and Bar_Code__c in :barCodeListP AND Dealer_Arrive__c = false AND Dealer_Shipment__c = false AND Dealer_Saled__c = false AND Lose_Flag__c = false AND Bar_Code__c !=null AND Dealer_Info_text__c = :accountName AND ((Consumable_order_minor__c != null AND Consumable_order_minor__r.Order_Owner_WorkLocal__c = :userWorkLocation) OR (Consumable_order_minor__c = null AND Cancellation_Flag__c = FALSE)) order by Name ]; if(reSet1.size()>0){ for (Integer i = 0; i < reSet1.size(); i++) { if(errorIdMap.containsKey(reSet1[i].Bar_Code__c) || existIdMap.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); } } } allMap.putAll(errorIdMap); allMap.putAll(existIdMap); //得到不存在的BarCode for(Integer i = 0; i < barCodeListP.size(); i++){ if(allMap.containsKey(barCodeListP[i])){ continue; }else{ exitlist.add(barCodeListP[i]); } } reSet1 = [select Id, Name, Product_Pattern__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, Box_Piece__c ,hospitalSpecialOffer__c from Consumable_order_details2__c where (Dealer_Saled__c = true or Dealer_Shipment__c = true) and Dealer_Returned__c = false and Bar_Code__c in :exitlist order by Name ]; if(reSet1.size()>0){ for (Integer i = 0; i < reSet1.size(); i++) { if(errorIdMap.containsKey(reSet1[i].Bar_Code__c) || existIdMap.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); } } } allMap.putAll(errorIdMap); for(Integer i = 0; i < barCodeListP.size(); i++){ if(allMap.containsKey(barCodeListP[i])){ continue; }else{ notexitlist.add(barCodeListP[i]); } } if(notexitlist.size()>0){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'BarCode号'+ notexitlist + '不存在。')); } } // 单位为个的Barcode对应的出库单 public integer Getconsumableorderdetails2Nobox(){ if(String.isBlank(barcode)){ return 0; } List barCodeListP = ParseBarCode(barcode); consumableorderdetails2Nobox = new List(); BarcodeCntMap.clear(); consumableorderdetails2Nobox = [ select Id, Name, recordtypeid, Used_account__c, Product_Pattern__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, Intra_Trade_List_RMB__c, Asset_Model_No__c, Isoverdue__c, Box_Piece__c, ProductPacking_list_manual__c, Guarantee_period_for_products__c ,hospitalSpecialOffer__c from Consumable_order_details2__c WHERE Dealer_Arrive__c = true AND Dealer_Shipment__c = false AND Dealer_Saled__c = false AND Lose_Flag__c = false AND Bar_Code__c !=null AND Dealer_Info_text__c = :accountName and Bar_Code__c in :barCodeListP AND Arrive_Owner_Work_Location__c =: userWorkLocation AND Box_Piece__c = '个' order by RemoveBox_No__c desc]; AggregateResult[] results = [SELECT Bar_Code__c,count(Id) recordCount FROM Consumable_order_details2__c WHERE Dealer_Arrive__c = true AND Dealer_Shipment__c = false AND Dealer_Saled__c = false AND Lose_Flag__c = false AND Bar_Code__c !=null AND Dealer_Info_text__c = :accountName and Bar_Code__c in :barCodeListP AND Arrive_Owner_Work_Location__c =: userWorkLocation AND Box_Piece__c = '个' GROUP BY Bar_Code__c]; for(AggregateResult ar: results){ String key ='' + ar.get('Bar_Code__c'); BarcodeCntMap.put(key, Integer.valueOf(ar.get('recordCount'))); } return consumableorderdetails2Nobox.size(); } // 销售 public PageReference ProSale() { if(consumableorderdetailsRecords.size()<1){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '无销售明细')); return null; } if(coc.Arrive_Order__r.IsShipment__c == true){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '订单已经销售')); return null; } Getconsumableorderdetails2Nobox(); for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { String key = '' + ass.orderdetails2.Bar_Code__c; Integer deliverycnt = BarcodeCntMap.get(key); if (ass.orderdetails2.Box_Piece__c =='个' && ( ass.outboundCount == null || String.valueof(ass.outboundCount) =='' || ass.outboundCount <= 0)){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '请输入产品 '+ ass.Prod.Name +' 的出货数量')); return null; } if(ass.outboundCount > deliverycnt){ ass.orderdetails2.Rrturn_count__c.addError('超出出库数量'); return null; } } for(Integer i = 0; i < orderdetails.size(); i++){ Decimal a = 0; for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { if(ass.orderdetails2.Product_Pattern__c == orderdetails[i].Product_Pattern__c){ a = a + ass.outboundCount; } } if(a< orderdetails[i].Shipment_Count__c){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'商品'+orderdetails[i].Consumable_product__r.Name +'数量小于出货数量')); return null; }else if(a > orderdetails[i].Shipment_Count__c){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'商品'+orderdetails[i].Consumable_product__r.Name +'超出出货数量')); return null; } } Savepoint sp = Database.setSavepoint(); List orderdetails1List = [SELECT Id, Used_date__c from Consumable_orderdetails__c WHERE Consumable_order__c =:ESetId ]; try{ if(orderdetails1List.size()>0){ for(Integer i = 0; i < orderdetails1List.size(); i++){ orderdetails1List[i].RecordTypeId = System.Label.RT_ConOrderDetail1_Sale; orderdetails1List[i].Used_date__c = Date.today(); } ControllerUtil.updateOrderDetails1Satus(orderdetails1List); } //coc.Order_type__c = '销售'; coc.RecordTypeId = System.Label.RT_ConOrder_Sale; // update start by vivek 2019-7-15 // coc.SummonsStatus_c__c = '已完成'; if(coc.NoConfirmedPrice__c){ coc.SummonsStatus_c__c= '价格未定'; }else{ coc.SummonsStatus_c__c= '已完成'; } // update start by vivek 2019-7-15 coc.Outbound_Date__c = Date.today(); update coc; //销售明细 List Ins = New List(); for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { if(ass.orderdetails2.Box_Piece__c == '个'){ Decimal cnt = 1; for(Consumable_order_details2__c codctmp : consumableorderdetails2Nobox){ Consumable_order_details2__c insDetails = new Consumable_order_details2__c(); if(codctmp.Bar_Code__c == ass.orderdetails2.Bar_Code__c){ insDetails.Id = codctmp.Id; insDetails.Consumable_Shipment_order__c = null; insDetails.Consumable_Return_order__c = null; insDetails.Consumable_ZS_order__c = ESetId; insDetails.Return_date__c = null; insDetails.Delivery_List_RMB__c = orderpriceMap.get(ass.orderdetails2.Product_Pattern__c); if(orderagencypriceMap.containsKey(ass.orderdetails2.Product_Pattern__c) == true){ insDetails.Unitprice_To_agency__c = orderagencypriceMap.get(ass.orderdetails2.Product_Pattern__c); } insDetails.Return_reason__c = null; insDetails.Used_date__c = Date.today(); insDetails.Consumable_Sale_order__c = ESetId; cnt++; Ins.add(insDetails); if(cnt > ass.outboundCount) break; } } }else{ Consumable_order_details2__c insDetails = new Consumable_order_details2__c(); insDetails.Id = ass.orderdetails2.Id; insDetails.Consumable_Shipment_order__c = null; insDetails.Consumable_Return_order__c = null; insDetails.Consumable_ZS_order__c = ESetId; insDetails.Return_date__c = null; insDetails.Delivery_List_RMB__c = orderpriceMap.get(ass.orderdetails2.Product_Pattern__c); if(orderagencypriceMap.containsKey(ass.orderdetails2.Product_Pattern__c) == true){ insDetails.Unitprice_To_agency__c = orderagencypriceMap.get(ass.orderdetails2.Product_Pattern__c); } insDetails.Return_reason__c = null; insDetails.Used_date__c = Date.today(); insDetails.Consumable_Sale_order__c = ESetId; Ins.add(insDetails); } } //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'consumableorderdetails2Nobox +++'+consumableorderdetails2Nobox.size())); //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Ins +++'+Ins)); //return null; if(Ins.size()>0){ ControllerUtil.updateOrderDetailsSatus(Ins); } if(coc.Arrive_Order__c!= null){ Consumable_order__c orderUps = New Consumable_order__c(); orderUps.Id = coc.Arrive_Order__c; orderUps.IsShipment__c = true; update orderUps; } }catch(Exception ex){ Database.rollback(sp); ApexPages.addMessages(ex); } //return null; return ProS(); } // 出货 public PageReference ProdElivery() { if(coc.Arrive_Order__r.IsShipment__c == true){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '订单已经出货')); return null; } if(consumableorderdetailsRecords.size()<1){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '无出货明细')); return null; } Getconsumableorderdetails2Nobox(); for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { String key = '' + ass.orderdetails2.Bar_Code__c; Integer deliverycnt = BarcodeCntMap.get(key); if (ass.orderdetails2.Box_Piece__c =='个' && ( ass.outboundCount == null || String.valueof(ass.outboundCount) =='' || ass.outboundCount <= 0)){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '请输入产品 '+ ass.Prod.Name +' 的出货数量')); return null; } if(ass.outboundCount > deliverycnt){ ass.orderdetails2.Rrturn_count__c.addError('超出出库数量'); return null; } } for(Integer i = 0; i < orderdetails.size(); i++){ Decimal a = 0; for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { if(ass.orderdetails2.Product_Pattern__c == orderdetails[i].Product_Pattern__c){ a = a + ass.outboundCount; } } // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'商品'+a)); if(a< orderdetails[i].Shipment_Count__c){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'商品'+orderdetails[i].Consumable_product__r.Name +'数量小于出货数量')); return null; }else if(a > orderdetails[i].Shipment_Count__c){ ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'商品'+orderdetails[i].Consumable_product__r.Name +'超出出货数量')); return null; } } List Ins = New List(); Savepoint sp = Database.setSavepoint(); List orderdetails1List = [SELECT Id, Used_date__c from Consumable_orderdetails__c WHERE Consumable_order__c =:ESetId ]; try{ if(orderdetails1List.size()>0){ for(Integer i = 0; i < orderdetails1List.size(); i++){ orderdetails1List[i].RecordTypeId = System.Label.RT_ConOrderDetail1_Shipment; orderdetails1List[i].Used_date__c = Date.today(); } ControllerUtil.updateOrderDetails1Satus(orderdetails1List); } //coc.Order_type__c = '出货'; coc.RecordTypeId = System.Label.RT_ConOrder_Shipment; // update start by vivek 2019-7-15 // coc.SummonsStatus_c__c = '已完成'; if(coc.NoConfirmedPrice__c){ coc.SummonsStatus_c__c= '价格未定'; }else{ coc.SummonsStatus_c__c= '已完成'; } // update start by vivek 2019-7-15 coc.Outbound_Date__c = Date.today(); update coc; for (ConsumableorderdetailsInfo ass : consumableorderdetailsRecords) { if(ass.orderdetails2.Box_Piece__c == '个'){ Decimal cnt = 1; for(Consumable_order_details2__c codctmp : consumableorderdetails2Nobox){ Consumable_order_details2__c insDetails = new Consumable_order_details2__c(); if(codctmp.Bar_Code__c == ass.orderdetails2.Bar_Code__c){ insDetails.Id = codctmp.Id; insDetails.Consumable_Sale_order__c = null; insDetails.Consumable_Return_order__c = null; insDetails.Consumable_ZS_order__c = ESetId; insDetails.Delivery_List_RMB__c = orderpriceMap.get(ass.orderdetails2.Product_Pattern__c); insDetails.Return_date__c = null; insDetails.Return_reason__c = null; insDetails.Consumable_Shipment_order__c = ESetId; insDetails.Send_Date__c = Date.today(); if (coc.SummonsForDirction__c == '互相调货') { insDetails.Transfer_Time__c = ass.orderdetails2.Transfer_Time__c == null ? 1 : ass.orderdetails2.Transfer_Time__c + 1; insDetails.Frist_Transfer_Agency__c = ass.orderdetails2.Frist_Transfer_Agency__c == null ? coc.Dealer_Info__r.Name : ass.orderdetails2.Frist_Transfer_Agency__c; insDetails.Agency_Transfer__c = true; } cnt++; Ins.add(insDetails); if(cnt > ass.outboundCount) break; } } }else{ Consumable_order_details2__c insDetails = new Consumable_order_details2__c(); insDetails.Id = ass.orderdetails2.Id; insDetails.Consumable_Sale_order__c = null; insDetails.Consumable_Return_order__c = null; insDetails.Consumable_ZS_order__c = ESetId; insDetails.Delivery_List_RMB__c = orderpriceMap.get(ass.orderdetails2.Product_Pattern__c); insDetails.Return_date__c = null; insDetails.Return_reason__c = null; insDetails.Consumable_Shipment_order__c = ESetId; insDetails.Send_Date__c = Date.today(); if (coc.SummonsForDirction__c == '互相调货') { insDetails.Transfer_Time__c = ass.orderdetails2.Transfer_Time__c == null ? 1 : ass.orderdetails2.Transfer_Time__c + 1; insDetails.Frist_Transfer_Agency__c = ass.orderdetails2.Frist_Transfer_Agency__c == null ? coc.Dealer_Info__r.Name : ass.orderdetails2.Frist_Transfer_Agency__c; insDetails.Agency_Transfer__c = true; } Ins.add(insDetails); } } //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'consumableorderdetails2Nobox +++'+consumableorderdetails2Nobox.size())); //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'Ins +++'+Ins)); //return null; if(Ins.size()>0){ ControllerUtil.updateOrderDetailsSatus(Ins); } if(coc.Arrive_Order__c!= null){ Consumable_order__c OrderUps = New Consumable_order__c(); OrderUps.Id = coc.Arrive_Order__c; OrderUps.IsShipment__c = true; update OrderUps; } }catch(Exception ex){ Database.rollback(sp); ApexPages.addMessages(ex); return null; } //return null; return ProS(); } /* // 返回按钮 public PageReference cancel() { // 返回备品set PageReference ref = new Pagereference('/SaleAndDelivery'); ref.setRedirect(true); return ref; }*/ // 返回按钮 public PageReference ProS() { // 返回备品set PageReference ref = new Pagereference('/SaleAndDelivery'); ref.setRedirect(true); return ref; } class ConsumableorderdetailsInfo implements Comparable { public Consumable_orderdetails__c orderdetails1 { get; set; } public Consumable_order_details2__c orderdetails2 { get; set; } public Product2__c Prod { get; set; } public String oldConsumableCount { get; set; } public String ErrorReason { get; set; } public Decimal outboundCount { get; set; } public ConsumableorderdetailsInfo(Consumable_order_details2__c e,string str) { orderdetails1 = new Consumable_orderdetails__c(); orderdetails2 = e; Prod = e.Consumable_Product__r; oldConsumableCount = e.name; ErrorReason = str; } public ConsumableorderdetailsInfo(Consumable_order_details2__c e) { orderdetails1 = new Consumable_orderdetails__c(); orderdetails2 = e; Prod = e.Consumable_Product__r; if(e.Box_Piece__c == '盒'){ outboundCount = 1; } oldConsumableCount = e.name; } public ConsumableorderdetailsInfo(Consumable_orderdetails__c e) { orderdetails1 = e; Prod = e.Consumable_Product__r; outboundCount = e.Shipment_Count__c; } // 排序 public Integer compareTo(Object compareTo) { return null; } } public void testUtil() { Integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }