From 6bc8d28f628be77b8847edc5eaf414f5c0a4ba3b Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期六, 11 一月 2025 09:57:04 +0800 Subject: [PATCH] 11 --- service/Wom/WwGdManager.cs | 368 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 363 insertions(+), 5 deletions(-) diff --git a/service/Wom/WwGdManager.cs b/service/Wom/WwGdManager.cs index 5803cf3..7a64858 100644 --- a/service/Wom/WwGdManager.cs +++ b/service/Wom/WwGdManager.cs @@ -4,6 +4,7 @@ using NewPdaSqlServer.DB; using NewPdaSqlServer.Dto.service; using NewPdaSqlServer.entity; +using NewPdaSqlServer.util; using SqlSugar; namespace NewPdaSqlServer.service.Wom; @@ -143,7 +144,7 @@ { if (string.IsNullOrEmpty(query.daa001)) throw new Exception("宸ュ崟鍙蜂负绌�"); - var womdaa = Db.Queryable<WwGd, MesItems>((a, i) => + var wwgd = Db.Queryable<WwGd, MesItems>((a, i) => new JoinQueryInfos(JoinType.Left, a.Daa003 == i.ItemId)) .Where((a, i) => a.Daa001 == query.daa001) @@ -152,9 +153,10 @@ a.Daa001, a.RwdGuid }).First(); - if (womdaa?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪"); + if (wwgd?.Daa001 == null) throw new Exception("宸ュ崟鍙蜂笉瀛樺湪"); - var womdabs = Db.Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>( + var womdabs = Db + .Queryable<WwGd, WwGdDetail, MesItems, ProductionOrderSub>( (a, b, c, d) => new JoinQueryInfos( JoinType.Left, @@ -201,12 +203,12 @@ .ToList(); var womcaa = Db.Queryable<ProductionOrder>() - .Where(s => s.Guid == womdaa.RwdGuid) + .Where(s => s.Guid == wwgd.RwdGuid) .First(); var dto = new ProductionPickDto { - daa001 = womdaa.Daa001, + daa001 = wwgd.Daa001, PlanNo = womcaa.ErpProductionOrderNo, totals1 = womdabs, daisao1 = list, @@ -215,4 +217,360 @@ return dto; } + + + #region 濮斿琛ユ枡 + + /// <summary> + /// 濮斿宸ュ崟閫�鏂欐壂鐮� + /// 鎵弿鏉$爜 prc_rf_pda_scan_zout_barcode3 + /// </summary> + /// <param name="query">鏌ヨ鍙傛暟</param> + /// <returns>鎵弿缁撴灉</returns> + /// <remarks> + /// 鍙傛暟璇存槑: + /// - billNo: 鍗曟嵁鍙�(蹇呭~) + /// - barcode: 鏉$爜(蹇呭~) + /// - userName: 鐢ㄦ埛鍚� + /// - blNo: 琛ユ枡鍗曞彿(蹇呭~) + /// </remarks> + public (WarehouseQuery item, List<MesItemBlDetail> pendingList) + WwblScanBarcode(WarehouseQuery query) + { + if (string.IsNullOrEmpty(query.billNo)) + throw new Exception("璇烽�夊彇鍗曟嵁鍙凤紒"); + + if (string.IsNullOrEmpty(query.barcode)) + throw new Exception("璇锋壂鎻忔潯鐮侊紒"); + + if (string.IsNullOrEmpty(query.userName)) + throw new Exception("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒"); + + if (string.IsNullOrEmpty(query.blNo)) + throw new Exception("琛ユ枡鍗曞彿涓嶈兘涓虹┖锛�"); + + + // 妫�楠屾槸鍚﹂噸澶嶆壂鎻� + var exists = Db.Queryable<MesInvItemOutCDetails>() + .Where(b => b.ItemBarcode == query.barcode) + .Any(); + + if (exists) + throw new Exception("姝ゆ潯鐮佸凡鎵弿,鍕块噸澶嶆壂鐮侊紒"); + + // 鏌ヨ鏉$爜搴撳瓨淇℃伅 + var stockBarcode = Db.Queryable<MesInvItemStocks>() + .Where(t => t.ItemBarcode == query.barcode && t.Quantity > 0) + .First(); + + if (stockBarcode == null) + throw new Exception($"搴撳瓨涓棤姝ゆ潯鐮�,璇锋牳瀵癸紒{query.barcode}"); + + // 妫�鏌ヨˉ鏂欏崟鐘舵�� + var mesItemBl = Db.Queryable<MesItemBl>() + .Where(a => a.BlNo == query.blNo) + .First(); + + if (mesItemBl == null) + throw new Exception($"鐢宠鍗� {query.blNo} 宸叉挙鍥烇紒"); + + if (mesItemBl.Bl018 != true) + throw new Exception($"鐢宠鍗� {query.blNo} 鏈鏍革紒"); + + if (mesItemBl.Bl019 == true) + throw new Exception($"鐢宠鍗� {query.blNo} 宸插畬缁擄紒"); + + // 鑾峰彇琛ユ枡鍗曟槑缁嗗苟鏍¢獙 + var blDetail = Db.Queryable<MesItemBlDetail>() + .Where(b => + b.Mid == mesItemBl.Id && b.Bld012 == stockBarcode.ItemId) + .First(); + + if (blDetail == null) + throw new Exception($"鐢宠鍗曚笉瀛樺湪姝ょ墿鏂� {stockBarcode.ItemNo} 璇风‘璁わ紒"); + + // 妫�鏌ュ緟琛ユ暟閲� + var quantity = (blDetail.Bld007 ?? 0) - (blDetail.Bld008 ?? 0); + if (quantity == 0) + throw new Exception("鐗╂枡宸叉壂鐮佸畬鎴愶紝璇锋牳瀵癸紒"); + + // 妫�鏌ュ伐鍗曚俊鎭� + var wwgd = Db.Queryable<WwGd>() + .Where(a => a.Daa001 == query.billNo) + .First(); + + if (wwgd == null) + throw new Exception($"宸ュ崟 {query.billNo} 涓嶅瓨鍦紝璇风‘璁わ紒"); + + // 妫�鏌ュ鏂欐槑缁� + var womdab = Db.Queryable<WwGdDetail>() + .Where(b => b.Dab001 == query.billNo && b.Erpid == blDetail.Bld014) + .First(); + + if (womdab == null) + throw new Exception($"澶囨枡鏄庣粏涓嶅瓨鍦ㄦ鐗╂枡 {stockBarcode.ItemNo} 璇风‘璁わ紒"); + + if (stockBarcode.Quantity > quantity) + { + // 鑾峰彇寰呭彂鏂欐槑缁嗗垪琛� + var pendingList = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) => + new JoinQueryInfos(JoinType.Left, a.Id == b.Mid)) + .Where((a, b) => a.BlNo == query.blNo + && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0) + .Select((a, b) => new MesItemBlDetail + { + Bld012 = b.Bld012, + Bld002 = b.Bld002, + Bld003 = b.Bld003, + Bld004 = b.Bld004, + Bld007 = b.Bld007, + Bld008 = b.Bld008 + }) + .ToList(); + + + query.Num = stockBarcode.Quantity; + query.Fum = quantity; + + return (query, pendingList); + } + + // 寮�鍚簨鍔″鐞� + var success = UseTransaction(db => + { + // 鑾峰彇鎴栧垱寤哄嚭搴撳崟 + var outId = Guid.NewGuid(); + var outNo = BillNo.GetBillNo("BL(宸ュ崟琛ユ枡)"); + + var existingOut = db.Queryable<MesInvItemOuts>() + .Where(a => a.BbillNo == query.blNo + && a.DepotCode == womdab.Dab017 + && a.OutDate.Value.Date.ToString("yyyy-MM-dd") == + DateTime.Now.Date.ToString("yyyy-MM-dd") + && a.BillTypeId == 200 + && a.TransactionNo == 209 + && a.Status == 0) + .First(); + + if (existingOut != null) + { + outId = existingOut.Guid; + outNo = existingOut.ItemOutNo; + } + else + { + // 鎻掑叆鍑哄簱鍗曚富琛� + db.Insertable(new MesInvItemOuts + { + Guid = outId, + ItemOutNo = outNo, + TaskNo = query.blNo, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + BillTypeId = 200, + TransactionNo = 209, + Remark = mesItemBl.Bl007, + DepotCode = womdab.Dab017, + OutPart = wwgd.Daa013.ToString(), + FType = 0, + Factory = stockBarcode.Factory, + Company = stockBarcode.Company, + // WorkNo = wwgd.Daa021, + // BoardItem = wwgd.Daa002, + PbillNo = wwgd.Daa001, + OutDate = DateTime.Now, + Status = 0, + BbillNo = query.blNo + }).IgnoreColumns(true).ExecuteCommand(); + } + + // 妫�鏌ュ苟鏇存柊鍑哄簱鍗曠墿鏂欐槑缁� + var itemCount = db.Queryable<MesInvItemOutItems>() + .Where(i => + i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId) + .Count(); + + if (itemCount > 0) + // 鏇存柊宸插瓨鍦ㄧ殑鐗╂枡鏄庣粏鏁伴噺 + db.Updateable<MesInvItemOutItems>() + .SetColumns(i => + i.Quantity == i.Quantity + stockBarcode.Quantity) + .Where(i => + i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId) + .ExecuteCommand(); + else + // 鎻掑叆鏂扮殑鐗╂枡鏄庣粏璁板綍 + db.Insertable(new MesInvItemOutItems + { + Guid = Guid.NewGuid(), + ItemOutId = outId, + ItemNo = blDetail.Bld002, + Quantity = stockBarcode.Quantity, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + Factory = stockBarcode.Factory, + Company = stockBarcode.Company, + DepotCode = womdab.Dab017, + TaskNo = query.blNo, + // WorkNo = wwgd.Daa021, + WorkLine = blDetail.Bld013, + ErpItemNo = womdab.Dab003.ToString(), + ErpId = womdab.Eid, + ErpAutoid = womdab.Erpid, + PbillNo = query.billNo, + ItemId = blDetail.Bld012 + // Unit = blDetail.Bld009, + // DepotId = (int)stockBarcode.DepotsId + }).IgnoreColumns(true).ExecuteCommand(); + + // 鎻掑叆鍑哄簱鍗曟潯鐮佹槑缁� + db.Insertable(new MesInvItemOutCDetails + { + Guid = Guid.NewGuid(), + ItemOutId = outId, + ItemBarcode = stockBarcode.ItemBarcode, + ItemNo = stockBarcode.ItemNo, + LotNo = stockBarcode.LotNo, + Quantity = stockBarcode.Quantity, + ForceOutFlag = 0, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + DepotCode = stockBarcode.DepotsCode, + DepotSectionCode = stockBarcode.DepotSectionsCode, + Remark = blDetail.Bld010, + Factory = stockBarcode.Factory, + Company = stockBarcode.Company, + TaskNoy = mesItemBl.Bl013, + BoardStyle = mesItemBl.Bl002, + TaskNo = query.blNo, + WorkNo = blDetail.Bld001, + WorkLine = blDetail.Bld013, + SuppNo = stockBarcode.SuppNo, + PbillNo = query.billNo, + ItemId = blDetail.Bld012, + Unit = blDetail.Bld009, + DepotId = (int)stockBarcode.DepotsId, + EbelnK3id = womdab.Eid, + LineK3id = womdab.Erpid + }).IgnoreColumns(true).ExecuteCommand(); + + // 鎻掑叆涓氬姟浜ゆ槗璁板綍 + db.Insertable(new MesInvBusiness2 + { + Guid = Guid.NewGuid(), + Status = 1, + BillTypeId = 200, // p_bill_type_id + TransactionCode = "210", // p_transaction_no + BusinessType = -1, + ItemBarcode = stockBarcode.ItemBarcode, + ItemNo = stockBarcode.ItemNo, + LotNo = stockBarcode.LotNo, + EpFlag = true, + Quantity = stockBarcode.Quantity, + FromInvDepotsCode = stockBarcode.DepotsCode, + FromInvDepotSectionsCode = stockBarcode.DepotSectionsCode, + CreateBy = query.userName, + CreateDate = DateTime.Now, + LastupdateBy = query.userName, + LastupdateDate = DateTime.Now, + Factory = stockBarcode.Factory, + Company = stockBarcode.Company, + TaskNo = mesItemBl.Bl012, // Matches C_QTCK.Bl012 + BillNo = query.blNo, + WorkNo = blDetail.Bld001, // Matches C_QTCK_D.Bld001 + WorkLine = blDetail.Bld013, // Matches C_QTCK_D.Bld013 + SuppNo = stockBarcode.SuppNo, + ItemId = stockBarcode.ItemId + // CkDepot = stockBarcode.DepotsId + }).IgnoreColumns(true).ExecuteCommand(); + + + // 鏇存柊宸ュ崟琛ㄦ暟閲� + db.Updateable<WwGdDetail>() + .SetColumns(it => new WwGdDetail + { + Dab007 = (it.Dab007 ?? 0) + (int)stockBarcode.Quantity, + Dab020 = (it.Dab020 ?? 0) + (int)stockBarcode.Quantity, + Dab021 = (it.Dab021 ?? 0) + (int)stockBarcode.Quantity + }) + .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003) + .ExecuteCommand(); + + // 鏇存柊琛ユ枡鍗曟槑缁嗗凡琛ユ暟閲� + db.Updateable<MesItemBlDetail>() + .SetColumns(it => new MesItemBlDetail + { + Bld008 = (it.Bld008 ?? 0) + (int)stockBarcode.Quantity + }) + .Where(it => it.Id == blDetail.Id) + .ExecuteCommand(); + + // 妫�鏌ヨˉ鏂欏崟鏄庣粏鏄惁瀹屾垚 + var blDetail1 = db.Queryable<MesItemBlDetail>() + .Where(it => it.Id == blDetail.Id) + .First(); + + if ((blDetail1.Bld007 ?? 0) <= (blDetail1.Bld008 ?? 0)) + // 鏇存柊鏄庣粏瀹屾垚鐘舵�� + db.Updateable<MesItemBlDetail>() + .SetColumns(it => it.Bld011 == 1) + .Where(it => it.Id == blDetail1.Id) + .ExecuteCommand(); + + // 鏇存柊搴撳瓨鏁伴噺涓�0 + db.Updateable<MesInvItemStocks>() + .SetColumns(it => it.Quantity == 0) + .Where(it => it.Guid == stockBarcode.Guid) + .ExecuteCommand(); + + + // 妫�鏌ユ槸鍚︽墍鏈夋槑缁嗛兘宸插畬鎴� + var unfinishedDetail = db.Queryable<MesItemBlDetail>() + .LeftJoin<MesItemBl>((b, a) => a.Id == b.Mid) + .Where((b, a) => a.BlNo == query.blNo && (b.Bld011 ?? 0) == 0) + .Select((b, a) => b) + .First(); + + if (unfinishedDetail == null) + // 濡傛灉娌℃湁鏈畬鎴愮殑鏄庣粏锛屾洿鏂拌ˉ鏂欏崟鐘舵�佷负宸插畬鎴� + db.Updateable<MesItemBl>() + .SetColumns(it => new MesItemBl + { + Bl019 = true, + WcUser = query.userName, + WcTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + }) + .Where(it => it.Id == mesItemBl.Id) + .ExecuteCommand(); + + return 1; + }); + + // 鑾峰彇鏈�缁堢殑寰呭彂鏂欐槑缁嗗垪琛� + var finalPendingList = Db.Queryable<MesItemBl, MesItemBlDetail>( + (a, b) => + new JoinQueryInfos(JoinType.Left, a.Id == b.Mid)) + .Where((a, b) => a.BlNo == query.blNo + && (b.Bld007 ?? 0) - (b.Bld008 ?? 0) > 0) + .Select((a, b) => new MesItemBlDetail + { + Bld012 = b.Bld012, + Bld002 = b.Bld002, + Bld003 = b.Bld003, + Bld004 = b.Bld004, + Bld007 = b.Bld007, + Bld008 = b.Bld008 + }) + .ToList(); + + return (query, finalPendingList); + } + + #endregion } \ No newline at end of file -- Gitblit v1.9.3