From 87f516dbb2e9a10d0e6bb1cb15587c82c709e130 Mon Sep 17 00:00:00 2001 From: lg <999544862qq.com> Date: 星期五, 16 八月 2024 08:34:33 +0800 Subject: [PATCH] 增加注释 --- MES.Service/service/Warehouse/MesInvItemMovesManager.cs | 483 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 481 insertions(+), 2 deletions(-) diff --git a/MES.Service/service/Warehouse/MesInvItemMovesManager.cs b/MES.Service/service/Warehouse/MesInvItemMovesManager.cs index 59d36c3..5e1cb86 100644 --- a/MES.Service/service/Warehouse/MesInvItemMovesManager.cs +++ b/MES.Service/service/Warehouse/MesInvItemMovesManager.cs @@ -1,6 +1,7 @@ 锘縰sing MES.Service.DB; using MES.Service.Dto.service; using MES.Service.Modes; +using MES.Service.util; using SqlSugar; namespace MES.Service.service.Warehouse; @@ -10,6 +11,149 @@ //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉� //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemMovesManager.cs + + public MovesDto ScanInBarcode(WarehouseQuery query) + { + if (string.IsNullOrEmpty(query.sectionCode)) + { + throw new Exception("璇锋壂搴撲綅鏉$爜锛�"); + } + + int pBillTypeId = 300; + int pTransctionNo = 301; + + var depotQuery = Db.Queryable<MesDepotSections, MesDepots>((a, b) => + new JoinQueryInfos( + JoinType.Inner, a.Zuid.ToString() == b.Zuid)) + .Where((a, b) => a.DepotSectionCode == query.sectionCode) + .Select((a, b) => new { b.DepotCode }) + .First(); + + if (depotQuery == null) + { + throw new Exception($"002[搴撲綅缂栫爜 {query.sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒"); + } + + var cDepotCode = depotQuery.DepotCode; + + // 鏌ヨ璋冩嫈鍏ュ簱淇℃伅 + var itemMoveQuery = Db + .Queryable<MesInvItemMoves, MesInvItemMovesCDetails>((a, b) => + new JoinQueryInfos( + JoinType.Inner, a.Id == b.ItemMoveId)) + .Where((a, b) => b.ItemBarcode == query.barcode && + a.BillTypeId == pBillTypeId && + a.TransactionNo == pTransctionNo && + a.Status == 1 && SqlFunc.IsNull(b.MoveOk, 0) != 1) + .Select((a, b) => new { a.Id, a.BillNo, a.InvDepotsCode }) + .First(); + + if (itemMoveQuery == null) + { + throw new Exception("鏉$爜鏈仛璋冩嫈鍑哄簱鎵爜锛岃鏍稿锛�"); + } + + var cBillNo = itemMoveQuery.BillNo; + var iDepotCode = itemMoveQuery.InvDepotsCode; + + // 楠岃瘉搴撳尯涓庝粨搴� + var depotValidationQuery = Db.Queryable<MesDepotSections, MesDepots>( + (a, b) => new JoinQueryInfos( + JoinType.Inner, a.Zuid.ToString() == b.Zuid)) + .Where((a, b) => a.DepotSectionCode == query.sectionCode && + b.DepotCode == iDepotCode) + .Select((a, b) => new { b.DepotCode }) + .First(); + + if (depotValidationQuery == null) + { + throw new Exception($"002[搴撲綅缂栫爜 {query.sectionCode} 涓嶅瓨鍦紝璇风‘璁わ紒"); + } + + if (iDepotCode != depotValidationQuery.DepotCode) + { + throw new Exception("瀹為檯浠撳簱涓庣敵璇疯皟鍏ヤ粨搴撲笉绗︼紝璇锋牳瀵癸紒"); + } + + var barcodeCount = Db.Queryable<MesInvItemMovesCDetails>() + .Where(b => + b.ItemBarcode == query.barcode && + b.ItemMoveId == itemMoveQuery.Id && b.MoveOk == 1) + .Count(); + + if (barcodeCount > 0) + { + throw new Exception("鏉$爜璋冩嫈宸插畬鎴愶紝璇锋牳瀵癸紒"); + } + + var barcodeInfo = Db.Queryable<MesInvItemBarcodes>() + .Where(t => t.ItemBarcode == query.barcode) + .First(); + + if (barcodeInfo == null) + { + throw new Exception("鏉$爜涓嶅瓨鍦紝璇锋牳瀵癸紒"); + } + + var isAudit = UseTransaction(db => + { + // 鏇存柊涓氬姟銆佸簱瀛樺拰鏉$爜鏁版嵁 + db.Updateable<MesInvBusiness2>() + .SetColumns(b => new MesInvBusiness2 + { + ToInvDepotsCode = cDepotCode, + ToInvDepotSectionsCode = query.sectionCode + }) + .Where(b => + b.BillNo == cBillNo && b.BillTypeId == pBillTypeId && + b.TransactionCode == pTransctionNo.ToString() && + b.ItemBarcode == query.barcode) + .ExecuteCommand(); + + db.Updateable<MesInvItemStocks>() + .SetColumns(b => new MesInvItemStocks + { + DepotsCode = cDepotCode, + DepotSectionsCode = query.sectionCode + }) + .Where(b => b.ItemBarcode == query.barcode) + .ExecuteCommand(); + + db.Updateable<MesInvItemMovesCDetails>() + .SetColumns(b => new MesInvItemMovesCDetails + { + MoveOk = 1, + InvDepotsCode = cDepotCode, + InvDepotSectionsCode = query.sectionCode + }) + .Where(b => + b.ItemBarcode == query.barcode && + b.ItemMoveId == itemMoveQuery.Id) + .ExecuteCommand(); + + // 妫�鏌ユ槸鍚︽墍鏈夋潯鐮佸凡鎵爜绉诲簱 + var totalQuantity = db.Queryable<MesInvItemOutItems>() + .Where(a => a.ItemOutId == itemMoveQuery.Id) + .Sum(a => SqlFunc.IsNull(a.Quantity, 0)); + + var scannedQuantity = db.Queryable<MesInvItemMovesCDetails>() + .Where(a => a.ItemMoveId == itemMoveQuery.Id && a.MoveOk == 1) + .Sum(a => SqlFunc.IsNull(a.Quantity, 0)); + + if (totalQuantity == scannedQuantity) + { + return 1; + } + + return 0; + }); + + MovesDto dto = new MovesDto(); + dto.InAudit = isAudit == 1; + dto.BarcodesInfo = barcodeInfo; + return dto; + } + public List<MesInvItemMoves> GetBillNo(WarehouseQuery query) { @@ -25,13 +169,260 @@ .OrderBy(it => it.Id, OrderByType.Desc).ToList(); } - //scan_out_show_DB - public List<InventoryItem> ScanOutShowDb(WarehouseQuery query) + public List<MesInvItemMoves> GetPage(WarehouseQuery query) + { + return Db.Queryable<MesInvItemMoves>() + .WhereIF(!string.IsNullOrEmpty(query.billNo), + s => s.BillNo == query.billNo) + .OrderByDescending(s => s.Id) + .ToPageList(query.PageIndex, query.Limit); + } + + public MovesDto GetItems(WarehouseQuery query) + { + MovesDto dto = new MovesDto(); + + dto.BarcodeList = GetItemMovesCDetails(query); + dto.OutItems = GetItemOutItems(query); + + return dto; + } + + private List<MesInvItemOutItems> GetItemOutItems(WarehouseQuery query) + { + var sql = string.Format( + "SELECT C.ITEM_NO, C.QUANTITY, C.REMARK, C.REMARK, S.ITEM_NAME, S.ITEM_MODEL, U.FNAME ITEM_UNIT, D.QUANTITY_OK, NVL(ST.QUANTITY, 0) WLKC FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_ID = S.ID LEFT JOIN MES_UNIT U ON U.ID = S.ITEM_UNIT LEFT JOIN MES_DEPOTS P ON P.DEPOT_CODE = C.DEPOT_CODE LEFT JOIN MES_DEPOT_SECTIONS E ON E.DEPOT_SECTION_CODE = C.DEPOT_SECTION_CODE LEFT JOIN (SELECT ITEM_MOVE_ID, ITEM_NO, SUM(QUANTITY) QUANTITY_OK FROM MES_INV_ITEM_MOVES_C_DETAILS GROUP BY ITEM_MOVE_ID, ITEM_NO) D ON D.ITEM_MOVE_ID = C.ITEM_OUT_ID AND D.ITEM_NO = C.ITEM_NO LEFT JOIN MES_INV_ITEM_MOVES A ON A.ID = C.ITEM_OUT_ID left join (SELECT ITEM_ID, SUM(QUANTITY) QUANTITY, DEPOTS_CODE FROM MES_INV_ITEM_STOCKS GROUP BY ITEM_ID, DEPOTS_CODE) ST ON C.ITEM_ID = ST.ITEM_ID AND ST.DEPOTS_CODE = A.FROM_DEPOTS_CODE where C.ITEM_OUT_ID = {0}", + query.id); + + return Db.Ado.SqlQuery<MesInvItemOutItems>(sql); + } + + private List<MesInvItemMovesCDetails> GetItemMovesCDetails( + WarehouseQuery query) + { + return Db.Queryable<MesInvItemMovesCDetails, MesItems, MesSupplier>( + (b, c, f) => new JoinQueryInfos( + JoinType.Left, + b.ItemNo == c.ItemNo && b.Company == c.Company && + b.Factory == c.Factory, + JoinType.Left, b.SuppNo == f.SuppNo + )) + .Where((b, c, f) => b.ItemMoveId == query.id) + .Select((b, c, f) => new MesInvItemMovesCDetails + { + FromDepotSectionsCode = b.FromDepotSectionsCode, + BoardStyle = b.BoardStyle, + FromDepotsCode = b.FromDepotsCode, + InvDepotSectionsCode = b.InvDepotSectionsCode, + InvDepotsCode = b.InvDepotsCode, + Quantity = b.Quantity, + LotNo = b.LotNo, + ItemNo = b.ItemNo, + ItemBarcode = b.ItemBarcode, + ItemName = c.ItemName, + ItemModel = c.ItemModel, + ItemUnit = c.ItemUnit, + SuppName = f.SuppName, + MoveOk = + SqlFunc.IsNull(b.MoveOk, 0) // 浣跨敤 SqlFunc.IsNull 瀹炵幇 NVL 鐨勬晥鏋� + }).ToList(); + } + + public OutItemDto ScanMoveBarcode(WarehouseQuery query) { var BillTypeId = 300; var TransctionNo = 301; query.Factory = "1000"; query.Company = "1000"; + + if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璇烽�夊崟鎹彿锛�"); + + var mesInvItemStocks = Db.Queryable<MesInvItemStocks>() + .Where(s => s.ItemBarcode == query.barcode && + s.Quantity > 0 && s.DepotsCode != null).First(); + if (mesInvItemStocks == null) + throw new Exception("搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒" + query.barcode); + + var mesInvItemMoves = Db.Queryable<MesInvItemMoves>() + .Where(d => d.TransactionNo == TransctionNo + && SqlFunc.IsNull(d.Status, 0) == 1).First(); + + if (mesInvItemMoves == null) + throw new Exception("鍑哄簱鍗� " + query.billNo + "涓嶅瓨鍦紝璇风‘璁わ紒"); + + var count = Db.Queryable<MesInvItemMoves, MesInvItemMovesCDetails>( + (a, b) => + new JoinQueryInfos(JoinType.Inner, a.Id == b.ItemMoveId)) + .Where((a, b) => b.ItemBarcode == query.barcode + && a.TransactionNo == TransctionNo && + SqlFunc.IsNull(a.Status, 0) == 0).Count(); + if (count > 0) throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�"); + + count = Db.Queryable<MesInvItemMoves, MesInvItemMovesCDetails>((a, b) => + new JoinQueryInfos(JoinType.Inner, a.Id == b.ItemMoveId)) + .Where((a, b) => b.ItemBarcode == query.barcode + && a.TransactionNo == TransctionNo && + SqlFunc.IsNull(b.MoveOk, 0) == 0).Count(); + + if (count > 0) throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�"); + + if (mesInvItemMoves.FromDepotsCode != mesInvItemStocks.DepotsCode) + throw new Exception("鏉$爜鐜板瓨浠撳簱涓庣敵璇峰嚭璐т粨搴撲笉涓�鑷达紝璇锋牳瀵癸紒"); + + var quantity = Db.Queryable<MesInvItemOutItems>() + .Where(b => b.ItemNo == mesInvItemStocks.ItemNo + && b.ItemOutId == mesInvItemMoves.Id) + .Sum(b => b.Quantity); + + if (quantity == null) + throw new Exception("鎵爜鐗╂枡闈炴湰娆$敵璇风墿鏂欙紝璇锋牳瀵癸紒" + query.barcode); + + var sum = Db.Queryable<MesInvItemMovesCDetails>() + .Where(b => b.ItemNo == mesInvItemStocks.ItemNo + && b.ItemMoveId == mesInvItemMoves.Id) + .Sum(b => b.Quantity) ?? 0; + + var sumqty = sum + (mesInvItemStocks.Quantity ?? 0); + + if (sumqty > quantity) + throw new Exception( + "宸叉壂鏉$爜鏁伴噺鎴栨湰娆℃壂鐮佹暟閲忥細" + sumqty + " 澶т簬鐢宠鏁伴噺锛�" + quantity + "锛岃鏍稿锛�"); + + List<InventoryItem> scanOutShowDb = null; + + UseTransaction(db => + { + SaveMesInvItemMovesCDetails(db, query, mesInvItemMoves, + mesInvItemStocks); + + // Insert into mes_inv_business2 + SaveMesInvBusiness2(db, query, BillTypeId, TransctionNo, + mesInvItemStocks, mesInvItemMoves); + + if (TransctionNo == 303) + db.Updateable<MesInvItemStocks>() + .SetColumns(s => + s.DepotSectionsCode == mesInvItemMoves.InvDepotsCode) + .SetColumns(s => + s.DepotsCode == mesInvItemMoves.InvDepotsCode) + .Where(s => s.Id == mesInvItemStocks.Id) + .ExecuteCommand(); + else + db.Updateable<MesInvItemStocks>() + .SetColumns(s => s.DepotSectionsCode == null) + .SetColumns(s => s.DepotsCode == null) + .Where(s => s.Id == mesInvItemStocks.Id) + .ExecuteCommand(); + + scanOutShowDb = ScanOutShowDb(query); + if (CollectionUtil.IsNullOrEmpty(scanOutShowDb)) + db.Updateable<MesInvItemMoves>() + .SetColumns(s => s.Status == 1) + .SetColumns(s => s.Checkdate == DateTime.Now) + .SetColumns(s => s.Checkuser == query.userName) + .Where(s => s.BillNo == query.billNo).ExecuteCommand(); + + return 1; + }); + + var itemDto = new OutItemDto(); + itemDto.SumItem = scanOutShowDb; + + if (TransctionNo == 201) itemDto.Quantity = mesInvItemStocks.Quantity; + + itemDto.ItemNo = mesInvItemStocks.ItemNo; + + return itemDto; + } + + private void SaveMesInvBusiness2(SqlSugarScope Db, WarehouseQuery query, + int BillTypeId, + int TransctionNo, MesInvItemStocks mesInvItemStocks, + MesInvItemMoves mesInvItemMoves) + { + var executeCommand = Db.Insertable(new MesInvBusiness2 + { + Status = 1, + BillTypeId = BillTypeId, + TransactionCode = TransctionNo.ToString(), + BusinessType = 1, + ItemBarcode = query.barcode, + ItemNo = mesInvItemStocks.ItemNo, + LotNo = mesInvItemStocks.LotNo, + EpFlag = 1, + Quantity = mesInvItemStocks.Quantity, + FromInvDepotsCode = mesInvItemStocks.DepotsCode, + FromInvDepotSectionsCode = mesInvItemStocks.DepotSectionsCode, + ToInvDepotsCode = TransctionNo == 303 + ? mesInvItemMoves.InvDepotsCode + : null, + ToInvDepotSectionsCode = TransctionNo == 303 + ? mesInvItemMoves.InvDepotsCode + : null, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + Factory = query.Factory, + Company = query.Company, + TaskNo = mesInvItemStocks.TaskNo, + BillNo = query.billNo, + WorkNo = mesInvItemStocks.WorkNo, + WorkLine = mesInvItemStocks.WorkLine, + SuppNo = mesInvItemStocks.SuppNo + }).ExecuteCommand(); + + if (executeCommand <= 0) throw new Exception("鍐欏叆MesInvBusiness2琛ㄥけ璐�"); + } + + private void SaveMesInvItemMovesCDetails(SqlSugarScope Db, + WarehouseQuery query, + MesInvItemMoves mesInvItemMoves, MesInvItemStocks mesInvItemStocks) + { + var executeCommand = Db.Insertable(new MesInvItemMovesCDetails + { + ItemMoveId = mesInvItemMoves.Id, + ItemBarcode = query.barcode, + CItemCode = mesInvItemStocks.CItemCode, + ItemNo = mesInvItemStocks.ItemNo, + LotNo = mesInvItemStocks.LotNo, + Quantity = mesInvItemStocks.Quantity, + EpFlag = mesInvItemStocks.EpFlag, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + CustNo = mesInvItemStocks.CustomerNo, + TaskNo = mesInvItemStocks.TaskNo, + FromDepotsCode = mesInvItemStocks.DepotsCode, + FromDepotSectionsCode = mesInvItemStocks.DepotSectionsCode, + Factory = mesInvItemStocks.Factory, + Company = mesInvItemStocks.Company, + IqcStatus = mesInvItemStocks.IqcStatus, + Fcar = mesInvItemStocks.Fcar, + IndepDate = mesInvItemStocks.IndepDate, + VisableSubmit = mesInvItemStocks.VisableSubmit, + VisableSubmitBy = mesInvItemStocks.VisableSubmitBy, + VisableSubmitDate = mesInvItemStocks.VisableSubmitDate, + BoardStyle = mesInvItemStocks.BoardStyle, + WorkNo = mesInvItemStocks.WorkNo, + WorkLine = mesInvItemStocks.WorkLine, + SuppNo = mesInvItemStocks.SuppNo + }).ExecuteCommand(); + + if (executeCommand <= 0) + throw new Exception("鍐欏叆MesInvItemMovesCDetails琛ㄥけ璐�"); + } + + //scan_out_show_DB + private List<InventoryItem> ScanOutShowDb(WarehouseQuery query) + { + var BillTypeId = 300; + var TransctionNo = 301; + query.Factory = "1000"; + query.Company = "1000"; + + if (string.IsNullOrEmpty(query.billNo)) throw new Exception("璇烽�夊崟鎹彿锛�"); var sql = string.Format( "select f_get_sections_code({0}, {1}, b.item_no) sections_code , s.erp_item_no , S.ITEM_MODEL , to_char(nvl(b.quantity, 0) - nvl(quantity_ok, 0), 'FM9999999990.00') flist from mes_inv_item_moves a join mes_inv_item_out_items b on b.item_out_id = a.id join mes_items s on b.item_no = s.item_no left join (select ITEM_MOVE_ID, item_no, sum(quantity) quantity_ok from MES_INV_ITEM_MOVES_C_DETAILS group by ITEM_MOVE_ID, item_no) c on c.ITEM_MOVE_ID = a.id and b.item_no = c.item_no where 1 = 1 and a.bill_type_id = {2} and a.transaction_no = {3} and a.bill_no = {4} and nvl(b.quantity, 0) - nvl(quantity_ok, 0) > 0 and rownum < 500 AND A.STATUS = 1 order by f_get_sections_code({0}, {1}, b.item_no), s.erp_item_no ", @@ -42,4 +433,92 @@ return results; } + + public bool Audit(WarehouseQuery query) + { + return Db.Updateable<MesInvItemMoves>() + .SetColumns(a => new MesInvItemMoves { Ts = 1 }) + .Where(a => a.Id == query.id) + .ExecuteCommand() > 0; + } + + public MessageCenter SaveMessageCenter(WarehouseQuery query) + { + var message = MesToErpParam(query); + + var executeReturnIdentity = + Db.Insertable(message).ExecuteReturnIdentity(); + if (executeReturnIdentity > 0) + { + message.Id = executeReturnIdentity; + message.Pid = executeReturnIdentity; + return message; + } + + throw new Exception("鑾峰彇鏁版嵁澶辫触"); + } + + public MessageCenter MesToErpParam(WarehouseQuery query) + { + var erpParameters = ""; + var title = ""; + var tableName = "MES_INV_ITEM_MOVES_" + query.Type; + if ("A".Equals(query.Type)) + { + erpParameters = GetErpParameters(query.billNo); + title = "璋冩嫧鍏ュ簱鍗�" + query.billNo + "瀹℃牳"; + } + else if ("B".Equals(query.Type)) + { + erpParameters = GetDeApprovePam(query.id); + title = "璋冩嫧鍏ュ簱鍗�" + query.billNo + "鍙嶅鏍�"; + } + + var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl; + var message = new MessageCenter + { + TableName = tableName, + Url = ErpUrl, + Status = 1, + CreateBy = query.userName, + Route = query.billNo, + Title = title, + PageName = "Allocation/Add?id=" + query.id + + "&billNo=" + query.billNo, + CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Method = "POST", + Seq = 1, + Data = erpParameters, + IsMessage = 0, + ContentType = "application/x-www-form-urlencoded" + }; + return message; + } + + private string GetErpParameters(string? billNo) + { + // var invItemIns = Db.Queryable<MesInvItemOuts>() + // .Single(x => x.ItemOutNo == billNo); + // + // //璋冪敤function鍑芥暟 + // var sql = + // $"SELECT F_GENERATE_DATA_INSERTED('{billNo}') FROM DUAL;"; + // var jsonString = Db.Ado.SqlQuerySingle<string>(sql); + // + // var encodedUrl = "taskname=CGTL&mesid=" + invItemIns.Id + + // "&optype=create&datajson=" + jsonString; + // + // return encodedUrl; + return null; + } + + private string GetDeApprovePam(decimal? id) + { + // var sid = (int)id; + // var encodedUrl = "taskname=CGTL&mesid=" + sid + + // "&optype=delete&datajson={}"; + // + // return encodedUrl; + return null; + } } \ No newline at end of file -- Gitblit v1.9.3