public with sharing class LexOverdueStockController { /*****************検索用******************/ public static String barcode { get; set; } // 过期和销存,画面显示用 public static List codPageRecords { get; set; } // 过期和销存,画面显示用 public static List overduePageRecords { get; set; } // 登录者工作地 private static String userWorkLocation; //经销商用户产品分类(ET、ENG) private static String agencyProType; private static String sqlagencyProType; // 经销商信息 private static Account accountInfo; //判断操作人员是否销存 public static Boolean iSinventory = false; public static List overdueList = new List(); public static Integer pageRecordsSize { get { return codPageRecords == null ? 0 : codPageRecords.size(); } } public LexOverdueStockController() { } // 画面初始化 @AuraEnabled public static ResponseBodyLWC init() { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; codPageRecords = new List(); overduePageRecords = new List(); // 获取用户和经销商信息 user Useracc = [ SELECT Accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId() ]; userWorkLocation = Useracc.Work_Location__c; agencyProType = Useracc.UserPro_Type__c; if (String.isBlank(Useracc.UserPro_Type__c)) { agencyProType = 'ET'; } sqlagencyProType = '%' + agencyProType + '%'; accountInfo = [ SELECT id, Name, Dealer_discount__c FROM account WHERE id = :Useracc.accountid ]; // 过期库存汇总信息 List orderDetZaiku = [ SELECT count(Id) countsum, Consumable_Product__c prodid, Consumable_Product__r.Name_Text__c prodname, Box_Piece__c boxPiece 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 Isoverdue__c = 0 AND Dealer_Returned__c = FALSE AND Cancellation_Flag__c = FALSE AND Bar_Code__c != NULL AND Product_Type__c LIKE :sqlagencyProType AND Dealer_Info_text__c = :accountInfo.Name AND Arrive_Owner_Work_Location__c = :userWorkLocation GROUP BY Consumable_Product__c, Box_Piece__c, Consumable_Product__r.Name_Text__c ]; for (AggregateResult overdue : orderDetZaiku) { codPageRecords.add(new orderBean(overdue)); } system.debug('codPageRecords====>' + codPageRecords); data.put('codPageRecords', JSON.serialize(codPageRecords)); data.put('userWorkLocation', userWorkLocation); data.put('accountName', accountInfo.Name); data.put('agencyProType', agencyProType); data.put('orderDetZaiku', JSON.serialize(orderDetZaiku)); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } // BarCode录入 @AuraEnabled public static ResponseBodyLWC searchorderBean( String agencyProTypeLWC, String userWorkLocationLWC, String accountNameLWC, String barcodeLWC, String codPageRecordsLWC ) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; List codPageRecords = (List) JSON.deserialize( codPageRecordsLWC, List.class ); sqlagencyProType = '%' + agencyProTypeLWC + '%'; system.debug('sqlagencyProType==>' + sqlagencyProType); barcode = barcodeLWC; system.debug('barcode==>' + barcode); userWorkLocation = userWorkLocationLWC; // add by Wang Xueqin 2023/04/12 // 获取用户和经销商信息 user Useracc = [ SELECT Accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId() ]; accountInfo = [ SELECT id, Name, Dealer_discount__c FROM account WHERE id = :Useracc.accountid ]; iSinventory = true; Set barCodeoverdue = new Set(); overduePageRecords = new List(); List barCodeListP = ParseBarCode(barcode); // 页面显示数据初始化 for (orderBean codPage : codPageRecords) { codPage.pandian = 0; } // 查询所有过期库存 List orderDetZaiku = [ SELECT Id, Name, Consumable_Product__c, Bar_Code__c, Consumable_Product__r.Name__c, Dealer_Info_text__c, Asset_Model_No__c, Isoverdue__c, Box_Piece__c, Sterilization_limit__c, Bar_Code_search__c FROM Consumable_order_details2__c WHERE Dealer_Arrive__c = TRUE AND Dealer_Shipment__c = FALSE AND Dealer_Saled__c = FALSE AND Lose_Flag__c = FALSE AND Isoverdue__c = 0 AND Dealer_Returned__c = FALSE AND Cancellation_Flag__c = FALSE AND Bar_Code__c != NULL AND Product_Type__c LIKE :sqlagencyProType AND Dealer_Info_text__c = :accountInfo.Name AND Arrive_Owner_Work_Location__c = :userWorkLocation ]; // 没有输入条码时,循环页面,所有打钩产品全部销存 // 取得所有 overdueList = new List(); if (String.isBlank(barcode)) { System.debug('barcode空'); for (orderBean codPage : codPageRecords) { if (codPage.check) { for (Consumable_order_details2__c cod2 : orderDetZaiku) { if ( cod2.Consumable_Product__c == codPage.prodid && codPage.boxPiece == cod2.Box_Piece__c ) { overduePageRecords.add(new orderBean(cod2, '过期库存销存')); overdueList.add(cod2); } } codPage.pandian = codPage.overlimitCount; } } // return; System.debug('overduePageRecords = ' + overduePageRecords); System.debug('overdueList = ' + overdueList); data.put('overduePageRecords', JSON.serialize(overduePageRecords)); data.put('codPageRecords', JSON.serialize(codPageRecords)); data.put('iSinventory', iSinventory); data.put('overdueList', overdueList); res.status = 'Success1'; res.code = 200; // res.msg = '请输入BarCode号'; System.debug('res = ' + res); return res; } // 输入barcode时 // BarCode的检索 所有在库 List reSet = [ SELECT Id, Consumable_Product__c, Consumable_Product__r.Name__c, Box_Piece__c, Bar_Code_search__c, Dealer_Shipment__c, Dealer_Saled__c, Lose_Flag__c, Bar_Code__c, Cancellation_Flag__c, Isoverdue__c, Sterilization_limit__c FROM Consumable_order_details2__c WHERE Bar_Code_search__c IN :BarCodeListP AND Dealer_Arrive__c = TRUE AND Cancellation_Flag__c = FALSE AND Dealer_Returned__c = FALSE AND Bar_Code__c != NULL AND Product_Type__c LIKE :sqlagencyProType AND Arrive_Owner_Work_Location__c = :userWorkLocation AND Dealer_Info_text__c = :accountInfo.Name ORDER BY Name ]; System.debug('reSet===>' + reSet); for (Consumable_order_details2__c cod2 : reSet) { if ( (cod2.Dealer_Shipment__c == false && cod2.Dealer_Saled__c == false && cod2.Lose_Flag__c == false && cod2.Cancellation_Flag__c == false) && cod2.Isoverdue__c == 0 ) { for (orderBean codPage : codPageRecords) { if ( cod2.Consumable_Product__c == codPage.prodid && cod2.Box_Piece__c == codPage.boxPiece ) { overduePageRecords.add(new orderBean(cod2, '过期库存销存')); overdueList.add(cod2); codPage.pandian++; codPage.check = true; } } } else if (cod2.Dealer_Shipment__c || cod2.Dealer_Saled__c) { overduePageRecords.add(new orderBean(cod2, '产品已经出库')); } else { overduePageRecords.add(new orderBean(cod2, '不是过期库存')); } } System.debug('overduePageRecords = ' + overduePageRecords); data.put('overduePageRecords', JSON.serialize(overduePageRecords)); data.put('codPageRecords', JSON.serialize(codPageRecords)); data.put('iSinventory', iSinventory); data.put('overdueList', overdueList); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } // 保存按钮 @AuraEnabled public static ResponseBodyLWC save( Boolean iSinventory, string saveCodPageRecords, List saveoverdueList ) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; system.debug('saveCodPageRecords=============>' + saveCodPageRecords); system.debug('saveoverdueList' + saveoverdueList); overdueList = saveoverdueList; // if(saveoverdueList==null){ // return new ResponseBodyLWC('Error',500, '请选择要销存的明细', ''); // } List codPageRecords = (List) JSON.deserialize( saveCodPageRecords, List.class ); // List overdueList = (List)JSON.deserialize(saveoverdueList,List.class); // add by Wang Xueqin 2023/04/12 // 获取用户和经销商信息 user Useracc = [ SELECT Accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :UserInfo.getUserId() ]; accountInfo = [ SELECT id, Name, Dealer_discount__c FROM account WHERE id = :Useracc.accountid ]; // 跳过明细2不必要更新 StaticParameter.EscapeConsumableOrderDetail2Trigger = true; if (!iSinventory) { // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请先点【BarCode录入】')); return new ResponseBodyLWC('Error', 500, '请先录入BarCode', ''); // return null; } integer Lo = 0; for (orderBean header : codPageRecords) { if (header.check == true) { Lo++; } } if (Lo == 0) { iSinventory = false; // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'请选择要销存的明细。')); return new ResponseBodyLWC('Error', 500, '请选择要销存的明细', ''); // return null; } Integer orderDetNo = 1; Savepoint sp = Database.setSavepoint(); Consumable_order__c po = new Consumable_order__c(); po.Name = '*'; po.Order_status__c = '批准'; po.Inventory_date__c = Date.today(); po.Order_type__c = '销存'; po.Dealer_Info__c = accountInfo.Id; po.Order_ProType__c = agencyProType; po.RecordTypeid = System.Label.RT_ConOrder_Overdue; try { insert po; Consumable_order__c order = [ SELECT Name FROM Consumable_order__c WHERE id = :po.id ]; List InsList = new List(); for (orderBean header : codPageRecords) { if (header.check == true) { Consumable_orderdetails__c insPan = new Consumable_orderdetails__c(); String str = string.valueOf(orderDetNo); if (str.length() == 1) { str = '0' + str; } insPan.Name = order.Name + '-' + str; insPan.Consumable_Product__c = header.prodId; insPan.Consumable_order__c = po.Id; insPan.Lose_reason__c = '过期库存销存'; insPan.Overdue_count__c = header.pandian; insPan.Overdue_SUM__c = header.overlimitCount; insPan.RecordTypeId = System.Label.RT_ConOrderDetail1_Inventory; orderDetNo++; InsList.add(insPan); } } // 生成明细1 if (InsList.size() > 0) { insert InsList; } for (Consumable_order_details2__c cod : overdueList) { cod.Consumable_Inventory_order__c = po.Id; cod.Inventory_date__c = Date.today(); cod.Lose_reason__c = '过期库存销存'; cod.Lose_Flag__c = true; } if (overdueList.size() > 0) { ControllerUtil.updateOrderDetailsSatus(overdueList); } } catch (Exception ex) { Database.rollback(sp); ApexPages.addMessages(ex); return null; } // return new Pagereference('/' + po.Id); data.put('Id', po.Id); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } // 将页面或取得BarCode去掉重复的,转换成List public static List ParseBarCode(String Code) { Map barcodeCountMap = new Map(); String[] Cache = new List{}; Cache = Code.split('\n'); List Buff = new List(); for (String A : Cache) { A = A.trim().toUpperCase(); if (barcodeCountMap.containsKey(A)) { barcodeCountMap.put(A, barcodeCountMap.get(A) + 1); } else { barcodeCountMap.put(A, 1); } Buff.add(A + barcodeCountMap.get(A)); } return Buff; } // Data Bean @TestVisible class orderBean implements Comparable { @AuraEnabled public Consumable_order_details2__c orderdetails2 { get; set; } @AuraEnabled public Product2__c Prod { get; set; } @AuraEnabled public Boolean check { get; set; } // 过期库存 @AuraEnabled public Integer overlimitCount { get; set; } // 销存数量 @AuraEnabled public Integer pandian { get; set; } // 销存原因 @AuraEnabled public String diffReason { get; set; } // 单位 @AuraEnabled public String boxPiece { get; set; } @AuraEnabled public String prodname { get; set; } @AuraEnabled public String prodid { get; set; } orderBean(Consumable_order_details2__c e, string str) { orderdetails2 = e; Prod = e.Consumable_Product__r; DiffReason = str; } public orderBean(AggregateResult e) { check = false; overlimitCount = Integer.valueOf(e.get('countsum')); prodname = String.valueOf(e.get('prodname')); prodid = String.valueOf(e.get('prodid')); boxPiece = String.valueOf(e.get('BoxPiece')); pandian = 0; } // 排序 public Integer compareTo(Object compareTo) { orderBean compareToesd = (orderBean) compareTo; Integer returnValue = 0; if (overlimitCount > compareToesd.overlimitCount) { returnValue = -1; } else if (overlimitCount < compareToesd.overlimitCount) { returnValue = 1; } return returnValue; } } }