From 44abd42a36a8265fb6f91849df7a5a05383b3c63 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期二, 03 九月 2024 17:39:49 +0800 Subject: [PATCH] 生产领料 --- MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs | 704 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 652 insertions(+), 52 deletions(-) diff --git a/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs index 836f395..d1a6bea 100644 --- a/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs +++ b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs @@ -1,5 +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,69 +12,667 @@ //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemBarcodesManager.cs + #region 鐢熶骇棰嗘枡鏉$爜楠岃瘉 - #region 鏁欏鏂规硶 - - /// <summary> - /// 浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉� - /// </summary> - public void Study() + //鐢熶骇棰嗘枡鏉$爜楠岃瘉鍚堢悊鎬� + private bool PdaProdPickItemCkBar(string cBarcode, string cDaa001) { - /*********鏌ヨ*********/ - - var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ - var data2 = base.GetList(); //鏌ヨ鎵�鏈� - var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ - //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊 - - var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ - var data5 = base.GetPageList(it => 1 == 1, p); - Console.Write(p.TotalCount); //杩斿洖鎬绘暟 - - var data6 = - base.GetPageList(it => 1 == 1, p, - it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴� - Console.Write(p.TotalCount); //杩斿洖鎬绘暟 - - var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴� - conModels.Add(new ConditionalModel + try { - FieldName = typeof(MesInvItemBarcodes).GetProperties()[0].Name, - ConditionalType = ConditionalType.Equal, FieldValue = "1" - }); //id=1 - var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom()); + // 1. 妫�鏌ユ潯鐮佹槸鍚︿负绌� + if (string.IsNullOrEmpty(cBarcode)) + { + throw new Exception("璇疯緭鍏ユ潯鐮侊紒"); + } - AsQueryable().Where(x => 1 == 1) - .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘 + // 2. 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦ㄤ簬 MesInvItemBarcodes 琛ㄤ腑 + int tempNum = Db.Queryable<MesInvItemBarcodes>() + .Where(it => it.ItemBarcode == cBarcode) + .Count(); + if (tempNum == 0) + { + throw new Exception("鏉$爜涓嶅瓨鍦紒"); + } + // 3. 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦ㄤ簬 MesInvItemStocks 琛ㄤ腑 + tempNum = Db.Queryable<MesInvItemStocks>() + .Where(it => it.ItemBarcode == cBarcode) + .Count(); + if (tempNum == 0) + { + throw new Exception("搴撳瓨涓棤姝ゆ潯鐮侊紒"); + } - /*********鎻掑叆*********/ - var insertData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟 - var insertArray = new[] { insertData }; - base.Insert(insertData); //鎻掑叆 - base.InsertRange(insertArray); //鎵归噺鎻掑叆 - var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒� - AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆 + // 4. 鑾峰彇 MesInvItemBarcodes 鐨勬暟鎹� + var mesInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>() + .Where(it => it.ItemBarcode == cBarcode) + .First(); + if (mesInvItemBarcodes == null) + { + throw new Exception("鏉$爜涓嶅瓨鍦紒"); + } + // 5. 妫�鏌ユ潯鐮佹暟閲忔槸鍚︿负 0 + if (mesInvItemBarcodes.Quantity == 0) + { + throw new Exception("姝ゆ潯鐮佹暟閲忎负0锛�"); + } - /*********鏇存柊*********/ - var updateData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟 - var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟 - base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊 - base.UpdateRange(updateArray); //鎵归噺鏇存柊 - //base.Update(it => new MesInvItemBarcodes() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1 - AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏� + // 6. 妫�鏌ユ潯鐮佺姸鎬� + if (mesInvItemBarcodes.Barcodestatus == 1 || + mesInvItemBarcodes.Hbdytm == 1) + { + throw new Exception("鏃犳晥鏉$爜锛�"); + } + // 7. 妫�鏌ユ潯鐮佹槸鍚﹁鍐荤粨 + if (mesInvItemBarcodes.Visable == 1) + { + throw new Exception("鏉$爜鍐荤粨锛�"); + } - /*********鍒犻櫎*********/ - var deldata = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟 - base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎 - base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎 - base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎 - base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎 - AsDeleteable().Where(it => 1 == 2) - .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣� + // 8. 妫�鏌ユ潯鐮佹槸鍚︿綔搴� + if (mesInvItemBarcodes.Location == 2) + { + throw new Exception("鏉$爜浣滃簾锛�"); + } + + // 9. 妫�鏌ユ姇鏂欏崟鏄惁闇�瑕佹鐗╂枡 + tempNum = Db.Queryable<Womdab>() + .Where(it => + it.Dab001 == cDaa001 && it.Dab003 == + mesInvItemBarcodes.ItemId.ToString()) + .Count(); + if (tempNum == 0) + { + throw new Exception("鎶曟枡鍗曚笉闇�瑕佹鐗╂枡锛�"); + } + + string sql = + "SELECT COUNT(1) FROM WOMDAB WHERE DAB001='" + cDaa001 + + "' AND DAB003='" + mesInvItemBarcodes.ItemId + + "' AND DAB017=(SELECT DEPOTS_CODE FROM MES_INV_ITEM_STOCKS WHERE ITEM_BARCODE='" + + cBarcode + "')"; + + // 10. 妫�鏌ュ彂鏂欎粨搴撴槸鍚︽纭� + tempNum = Db.Ado.SqlQuerySingle<int>(sql); + if (tempNum == 0) + { + throw new Exception("鍙戞枡浠撳簱鏈夎锛�"); + } + + // 11. 鎴愬姛锛岃繑鍥炵粨鏋� + return true; + } + catch (Exception ex) + { + // 鎹曡幏寮傚父骞堕噸鏂版姏鍑� + throw new Exception($"鎶ラ敊: {ex.Message}"); + } + } + + public decimal? GetBarCodesQuan(WarehouseQuery query) + { + if (!PdaProdPickItemCkBar(query.barcode, query.daa001)) + { + return null; + } + + var invItemBarcodes = Db.Queryable<MesInvItemBarcodes>() + .Where(s => s.ItemBarcode == query.barcode).First(); + + if (invItemBarcodes == null) + { + throw new Exception("鏉$爜涓嶅瓨鍦紒"); + } + + return invItemBarcodes.Quantity; + } + + //鐢熶骇棰嗘枡淇濆瓨 + public string PrcRfPdaProdPickItem3(WarehouseQuery query) + { + var (factory, company) = UserUtil.GetFactory(query.userName); + var param = new ProdPickParams + { + CUser = query.userName, + CBarcode = query.barcode, + CDaa001 = query.daa001, + CNum = query.Num, + PiFactory = factory, + PiCompany = company + }; + + // 妫�鏌ュ彂鏂欐暟閲忔槸鍚﹀悎娉� + if (param.CNum <= 0) + { + throw new Exception("鍙戞枡鏁伴噺涓嶈兘灏忎簬绛変簬0锛�"); + } + + // 妫�鏌ユ潯鐮佹槸鍚﹀瓨鍦� + param.CInvItemBarcodes = Db.Queryable<MesInvItemBarcodes>() + .Where(it => it.ItemBarcode == param.CBarcode) + .First(); + if (param.CInvItemBarcodes == null) + { + throw new Exception("鏉$爜涓嶅瓨鍦紒"); + } + + // 妫�鏌ユ潯鐮佹槸鍚﹀凡鍏ュ簱 + param.CInvItemStocks = Db.Queryable<MesInvItemStocks>() + .Where(it => it.ItemBarcode == param.CBarcode) + .First(); + if (param.CInvItemStocks == null) + { + throw new Exception("鏉$爜鏈叆搴擄紒"); + } + + // 妫�鏌ュ伐鍗曞彿鏄惁瀛樺湪 + param.CWomdaa = Db.Queryable<Womdaa>() + .Where(it => it.Daa001 == param.CDaa001) + .First(); + if (param.CWomdaa == null) + { + throw new Exception("涓嶅瓨鍦ㄦ宸ュ崟锛�"); + } + + // 妫�鏌ュ彂鏂欐暟閲忔槸鍚﹁秴鍑烘潯鐮佹暟閲� + if (param.CNum > param.CInvItemBarcodes.Quantity) + { + throw new Exception("鍙戞枡鏁伴噺涓嶈兘澶т簬鏉$爜鏁伴噺锛�"); + } + + // 妫�鏌ユ潯鐮佸悎娉曟�� + if (!PdaProdPickItemCkBar(param.CBarcode, param.CDaa001)) + { + return null; + } + + // 璁$畻鍓╀綑鍙彂鏁伴噺 + decimal? tempNum = CalculateRemainingQuantity(param.CDaa001, + param.CInvItemBarcodes.ItemId); + if (param.CNum > tempNum) + { + throw new Exception("鍙戞枡鏁伴噺涓嶈兘澶т簬瀵瑰簲鐗╂枡鐨勬湭鍙戞枡鏁伴噺锛�"); + } + + // 宸ュ崟閮ㄩ棬鍚嶇О + param.CDepart = Db.Queryable<SysDepartment>() + .Where(dep => dep.Id.ToString() == param.CWomdaa.Daa013) + .Select(dep => dep.Departmentname) + .First(); + + // 鐢熸垚鏂版潯鐮� + param.NewBarcode = GenerateNewBarcode(param.CBarcode); + + UseTransaction(db => + { + // 瀵瑰嚭搴撳崟鐨勬搷浣� + var (outId, outBill) = HandleInventoryOut(db, param); + param.COutId = outId; + param.OutBill = outBill; + + // 鏇存柊鏉$爜鏁版嵁 + UpdateBarcodeData(db, param); + + // 鐢熸垚鎵撳嵃鏉$爜骞舵彃鍏ュ埌 mes_rf_prnbarcode + GenerateAndInsertPrintBarcode(db, param); + + return 1; + }); + + return "001"; + } + + private void UpdateBarcodeData(SqlSugarScope db, ProdPickParams param) + { + // 鏇存柊鏉$爜鏁版嵁 + db.Updateable<MesInvItemBarcodes>() + .SetColumns(it => new MesInvItemBarcodes + { Oldqty = it.Quantity, Quantity = it.Quantity - param.CNum }) + .Where(it => it.ItemBarcode == param.CBarcode) + .ExecuteCommand(); + + // 鎻掑叆鏂扮殑鏉$爜璁板綍 + db.Insertable(new MesInvItemBarcodes + { + ItemNo = param.CInvItemBarcodes.ItemNo, + ItemId = param.CInvItemBarcodes.ItemId, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + TaskNo = param.CDaa001, + WorkNo = param.CWomdaa.Daa021, + SuppNo = param.CInvItemBarcodes.SuppNo, + Mblnr = param.CInvItemBarcodes.Mblnr, + Zeile = param.CInvItemBarcodes.Zeile, + Factory = param.CInvItemBarcodes.Factory, + Company = param.CInvItemBarcodes.Company, + EbelnK3id = param.CInvItemBarcodes.EbelnK3id, + LineK3id = param.CInvItemBarcodes.LineK3id, + Quantity = param.CNum, + Oldqty = param.CNum, + ItemBarcode = param.NewBarcode, + Unit = param.CInvItemBarcodes.Unit, + LotDate = param.CInvItemBarcodes.LotDate, + Memo = "鐢熶骇棰嗘枡", + ItemSname = param.CInvItemBarcodes.ItemSname, + TrLotno = param.CInvItemBarcodes.TrLotno, + BillNo = param.CInvItemBarcodes.BillNo, + InsDate = param.CInvItemBarcodes.InsDate, + WorkLine = param.CInvItemBarcodes.WorkLine, + ComeFlg = 6, + OldItemBarcode = param.CBarcode + }).ExecuteCommand(); + + // 鏇存柊鏉$爜搴撳瓨 + db.Updateable<MesInvItemStocks>() + .SetColumns(it => new MesInvItemStocks + { Quantity = it.Quantity - param.CNum }) + .Where(it => it.ItemBarcode == param.CBarcode) + .ExecuteCommand(); + + // 鎻掑叆鍑哄簱鏉$爜鏄庣粏琛� + db.Insertable(new MesInvItemOutCDetails + { + ItemOutId = param.COutId, + ItemNo = param.CInvItemBarcodes.ItemNo, + ItemId = param.CInvItemBarcodes.ItemId, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + DepotCode = param.CInvItemStocks.DepotsCode, + DepotSectionCode = param.CInvItemStocks.DepotSectionsCode, + TaskNo = param.CDaa001, + WorkNo = param.CWomdaa.Daa021, + SuppNo = param.CInvItemBarcodes.SuppNo, + PbillNo = param.OutBill, + Factory = param.PiFactory, + Company = param.PiCompany, + EbelnK3id = param.CInvItemStocks.EbelnK3id, + LineK3id = param.CInvItemStocks.LineK3id, + Quantity = param.CNum, + ItemBarcode = param.NewBarcode + }).ExecuteCommand(); + + // 鎻掑叆鍒� MesInvBusiness2 琛� + db.Insertable(new MesInvBusiness2 + { + Status = 1, + BillTypeId = 200, + ItemNo = param.CInvItemBarcodes.ItemNo, + ItemId = param.CInvItemBarcodes.ItemId, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + TaskNo = param.CDaa001, + WorkNo = param.CWomdaa.Daa021, + SuppNo = param.CInvItemBarcodes.SuppNo, + Factory = param.PiFactory, + Company = param.PiCompany, + EbelnK3id = param.CInvItemStocks.EbelnK3id, + LineK3id = param.CInvItemStocks.LineK3id, + Quantity = param.CNum, + ItemBarcode = param.CBarcode + }).ExecuteCommand(); + } + + private void GenerateAndInsertPrintBarcode(SqlSugarScope db, + ProdPickParams param) + { + string cSupName = null; + if (!string.IsNullOrEmpty(param.CInvItemBarcodes.SuppNo)) + { + cSupName = db.Queryable<MesSupplier>() + .Where(it => it.SuppNo == param.CInvItemBarcodes.SuppNo) + .Select(it => it.SuppName) + .First(); + } + + int cId = + db.Ado.GetInt( + "SELECT F_GETSEQNEXTVALUE('MES_RF_PRNBARCODE') FROM dual"); + + // 鎻掑叆鎵撳嵃鏉$爜璁板綍 + db.Insertable(new MesRfPrnbarcode + { + Id = cId, + Forder = "1", + Fno = "1", + CreateDate = DateTime.Now, + Strp1 = param.CBarcode, + Strp2 = cSupName ?? " ", + Strp3 = param.CInvItemBarcodes.ItemNo, + Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ", + Strp5 = + $"{param.CInvItemBarcodes.Quantity - param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}", + Strp6 = DateTime.Now.ToString("yyyy-MM-dd"), + Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", + Strp8 = param.CBarcode, + Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", + Strp10 = param.CBarcode, + Strp11 = param.CBarcode, + Strp12 = param.CBarcode + }).ExecuteCommand(); + + db.Insertable(new MesRfPrnbarcode + { + Id = cId, + Forder = "1", + Fno = "1", + CreateDate = DateTime.Now, + Strp1 = param.NewBarcode, + Strp2 = cSupName ?? " ", + Strp3 = param.CInvItemBarcodes.ItemNo, + Strp4 = GetItemName(param.CInvItemBarcodes.ItemId) ?? " ", + Strp5 = $"{param.CNum} {GetUnitName(param.CInvItemBarcodes.Unit)}", + Strp6 = DateTime.Now.ToString("yyyy-MM-dd"), + Strp7 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", + Strp8 = param.NewBarcode, + Strp9 = GetItemModel(param.CInvItemBarcodes.ItemId) ?? " ", + Strp10 = param.NewBarcode, + Strp11 = param.NewBarcode, + Strp12 = param.NewBarcode + }).ExecuteCommand(); + } + + private (int OutId, string OutBill) HandleInventoryOut(SqlSugarScope db, + ProdPickParams param) + { + // 澶勭悊鍑哄簱鍗曠殑鎻掑叆鎴栨洿鏂伴�昏緫 + var tempNum = db.Queryable<MesInvItemOuts>() + .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0) + .Count(); + + int cOutId = 0; + string cOutBill; + + if (tempNum == 0) + { + string sql = + "SELECT COUNT(1) FROM MES_INV_ITEM_OUTS WHERE TRUNC(CREATE_DATE)=TRUNC(SYSDATE);"; + int todayCount = db.Ado.SqlQuerySingle<int>(sql); + + cOutBill = $"P{DateTime.Now:yyyyMMdd}{(todayCount + 1):D4}"; + + // 鎻掑叆鏂扮殑鍑哄簱鍗� + db.Insertable(new MesInvItemOuts + { + ItemOutNo = cOutBill, + TaskNo = param.CDaa001, + Status = 0, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + WorkNo = param.CWomdaa.Daa021, + OutType = "鐢熶骇棰嗘枡", + BoardItem = param.CWomdaa.Daa002, + PbillNo = param.CDaa001, + BillTypeId = 200, + TransactionNo = 201, + Company = param.PiCompany, + Factory = param.PiFactory, + Remark = "鐢熶骇棰嗘枡", + DepotCode = param.CInvItemStocks.DepotsCode, + OutDate = DateTime.Now, + OutPart = param.CDepart + }).ExecuteCommand(); + } + else + { + // 鑾峰彇鐜版湁鍑哄簱鍗曞彿 + var outItem = db.Queryable<MesInvItemOuts>() + .Where(it => it.TaskNo == param.CDaa001 && it.Status == 0) + .Select(it => new { it.ItemOutNo, it.Id }) + .First(); + + cOutBill = outItem.ItemOutNo; + cOutId = Convert.ToInt32(outItem.Id); + } + + // 鎻掑叆鎴栨洿鏂颁粠琛� + InsertOrUpdateOutItems(db, cOutId, param); + + return (cOutId, cOutBill); + } + + private void InsertOrUpdateOutItems(SqlSugarScope db, int cOutId, + ProdPickParams param) + { + var tempNum = db.Queryable<MesInvItemOutItems>() + .Where(it => + it.ItemId == param.CInvItemBarcodes.ItemId && + it.ItemOutId == cOutId) + .Count(); + + decimal? cNumTemp = param.CNum; + + string sql = + "SELECT B.Id, NVL(A.YF, 0) yfl, B.DAB006 - NVL(A.YF, 0) Qty FROM WOMDAB B LEFT JOIN (SELECT SUM(QUANTITY) YF, ITEM_DABID FROM MES_INV_ITEM_OUT_ITEMS GROUP BY ITEM_DABID) A ON A.ITEM_DABID = B.ID WHERE DAB003 = '" + + param.CInvItemBarcodes.ItemId + "' AND DAB001 = '" + param.CDaa001 + + "' ORDER BY TO_NUMBER(DAB002)"; + + var womdabList = db.Ado.SqlQuery<DabResult>(sql); + + foreach (var item in womdabList) + { + if (item.Qty <= 0) continue; + var itemDabid = item.Id; + if (cNumTemp <= item.Qty) + { + if (tempNum == 0) + { + // 鎻掑叆鏂扮殑鍙戞枡璁板綍 + db.Insertable(new MesInvItemOutItems + { + ItemOutId = cOutId, + Quantity = cNumTemp, + ItemDabid = itemDabid, + ItemId = param.CInvItemBarcodes.ItemId, + ItemNo = param.CInvItemBarcodes.ItemNo, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + Factory = param.PiFactory, + Company = param.PiCompany, + DepotCode = param.CInvItemStocks.DepotsCode, + TaskNo = param.CDaa001, + EbelnK3id = param.CInvItemBarcodes.EbelnK3id, + LineK3id = param.CInvItemBarcodes.LineK3id, + PbillNo = param.CDaa001, + WorkNo = param.CInvItemStocks.WorkNo, + WorkLine = param.CInvItemStocks.WorkLine, + DepotSectionCode = + param.CInvItemStocks.DepotSectionsCode + }).ExecuteCommand(); + } + else + { + // 鏇存柊鐜版湁鍙戞枡璁板綍鐨勬暟閲� + db.Updateable<MesInvItemOutItems>() + .SetColumns(it => new MesInvItemOutItems + { Quantity = it.Quantity + cNumTemp }) + .Where(it => + it.ItemOutId == cOutId && + it.ItemDabid == itemDabid) + .ExecuteCommand(); + } + + // 鏇存柊 WOMDAB 琛ㄧ殑鍙戞枡鏁伴噺 + db.Updateable<Womdab>() + .SetColumns(it => new Womdab + { Dab007 = item.Yfl + cNumTemp }) + .Where(it => it.Id == itemDabid) + .ExecuteCommand(); + + break; + } + + // 鎻掑叆鍓╀綑鐨勫彂鏂欒褰� + db.Insertable(new MesInvItemOutItems + { + ItemOutId = cOutId, + Quantity = item.Qty, + ItemDabid = itemDabid, + ItemId = param.CInvItemBarcodes.ItemId, + ItemNo = param.CInvItemBarcodes.ItemNo, + CreateBy = param.CUser, + CreateDate = DateTime.Now, + Factory = param.PiFactory, + Company = param.PiCompany, + DepotCode = param.CInvItemStocks.DepotsCode, + TaskNo = param.CDaa001, + EbelnK3id = param.CInvItemBarcodes.EbelnK3id, + LineK3id = param.CInvItemBarcodes.LineK3id, + PbillNo = param.CDaa001, + WorkNo = param.CInvItemStocks.WorkNo, + WorkLine = param.CInvItemStocks.WorkLine, + DepotSectionCode = param.CInvItemStocks.DepotSectionsCode + }).ExecuteCommand(); + + cNumTemp -= item.Qty; + + // 鏇存柊 WOMDAB 琛ㄧ殑鍙戞枡鏁伴噺 + db.Updateable<Womdab>() + .SetColumns(it => new Womdab { Dab007 = it.Dab006 }) + .Where(it => it.Id == itemDabid) + .ExecuteCommand(); + } + } + + private string GenerateNewBarcode(string oldBarcode) + { + // 鐢熸垚鏂扮殑鏉$爜閫昏緫 + int count = Db.Queryable<MesInvItemBarcodes>() + .Where(b => b.OldItemBarcode == oldBarcode).Count(); + return $"{oldBarcode}-{count + 1}"; + } + + private decimal? CalculateRemainingQuantity( + string cDaa001, decimal? itemId) + { + // 璁$畻鍓╀綑鍙彂鏁伴噺 + var womdab = Db.Queryable<Womdab, Womdaa>((b, a) => new JoinQueryInfos( + JoinType.Left, b.Pid == a.Id)) + .Where((b, a) => + a.Daa001 == cDaa001 && b.Dab003 == itemId.ToString()) + .Select(b => new + { + TotalQuantity = SqlFunc.AggregateMax(b.Dab006), + IssuedQuantity = SqlFunc.AggregateMax(b.Dab007) + }) + .First(); + + return womdab.TotalQuantity - womdab.IssuedQuantity; + } + + private static string GetItemName(decimal? pId) + { + try + { + if (pId == null) + { + return null; + } + + // 鏌ヨ鐗╂枡鍚嶇О + string itemName = Db.Queryable<MesItems>() + .Where(it => it.Id == pId) + .Select(it => it.ItemName) + .First(); + + return itemName; + } + catch (Exception) + { + throw new Exception("鏈壘鍒扮墿鏂欏悕绉帮紝鐗╂枡id鍙蜂负" + pId); + } + } + + private string GetUnitName(string? pId) + { + try + { + if (string.IsNullOrEmpty(pId)) + { + return null; + } + + // 鏌ヨ鍗曚綅鍚嶇О鏄惁瀛樺湪 + int tempNum = Db.Queryable<MesUnit>() + .Where(it => it.Id.ToString() == pId) + .Count(); + + string unitName; + + if (tempNum != 0) + { + // 濡傛灉鍦� MES_UNIT 琛ㄤ腑鎵惧埌鍗曚綅鍚嶇О + unitName = Db.Queryable<MesUnit>() + .Where(it => it.Id.ToString() == pId) + .Select(it => it.Fname) + .First(); + } + else + { + // 濡傛灉鍦� MES_UNIT 琛ㄤ腑鎵句笉鍒帮紝鍦� MES_ITEMS 琛ㄤ腑鏌ユ壘鐩稿叧鑱旂殑鍗曚綅鍚嶇О + unitName = Db.Queryable<MesItems, MesUnit>((i, u) => + new JoinQueryInfos( + JoinType.Left, i.ItemUnit == u.Id.ToString())) + .Where((i, u) => i.Id.ToString() == pId) + .Select((i, u) => u.Fname) + .First(); + } + + return unitName; + } + catch (Exception) + { + throw new Exception("鍗曚綅鍚嶇О鏈壘鍒帮紝鐗╂枡id鍙蜂负" + pId); + } + } + + private string GetItemModel(decimal? pId) + { + try + { + if (pId == null) + { + return null; + } + + // 鏌ヨ鐗╂枡瑙勬牸 + string itemModel = Db.Queryable<MesItems>() + .Where(it => it.Id == pId) + .Select(it => it.ItemModel) + .First(); + + return itemModel; + } + catch (Exception) + { + throw new Exception("鏈壘鍒扮墿鏂欏瀷鍙凤紝鐗╂枡id鍙蜂负" + pId); + } } #endregion +} + +public class ProdPickParams +{ + public string? CUser { get; set; } + public string? CBarcode { get; set; } + public string? CDaa001 { get; set; } + public decimal? CNum { get; set; } + public MesInvItemBarcodes? CInvItemBarcodes { get; set; } + public MesInvItemStocks? CInvItemStocks { get; set; } + public Womdaa? CWomdaa { get; set; } + public string? NewBarcode { get; set; } + public string? PiCompany { get; set; } + public string? PiFactory { get; set; } + public string? CDepart { get; set; } + public int? COutId { get; set; } + public string? OutBill { get; set; } +} + +public class DabResult +{ + public decimal? Id { get; set; } + public decimal? Yfl { get; set; } + public decimal? Qty { get; set; } } \ No newline at end of file -- Gitblit v1.9.3