From 4108af346376cce285499336917fd01b2435de06 Mon Sep 17 00:00:00 2001 From: bklLiudl <673013083@qq.com> Date: 星期六, 21 六月 2025 11:03:55 +0800 Subject: [PATCH] 修改质检请验业务流程。 --- Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs | 476 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 468 insertions(+), 8 deletions(-) diff --git a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs index d4719d4..81a389c 100644 --- a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs +++ b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs @@ -531,7 +531,7 @@ #endregion #region 璐ㄦ璇烽獙 - if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") + if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") { var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); if (qualityRequest == null) @@ -1047,7 +1047,7 @@ #endregion #region 璐ㄦ璇烽獙 - if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1") + if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") { var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); if (qualityRequest == null) @@ -1497,7 +1497,7 @@ #endregion #region 璐ㄦ璇烽獙 - if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") + if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") { var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); if (qualityRequest == null) @@ -2226,15 +2226,17 @@ }; //鑾峰彇鐘舵�佹槸鏈粍鎵樼殑鏍囩淇℃伅 - var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId ).GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }).Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0" + var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.Status == "0") + .GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }) + .Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0" foreach (var item in models) { - var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList(); + var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.Status == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList(); if (boxNoList.Count > 0) { data.BoxNoList = boxNoList; - data.Date1 = item.ProductionTime.ToString(); - data.Date2 = item.ExpirationTime.ToString(); + data.Date1 = item.ProductionTime == null ? "" : Convert.ToDateTime(item.ProductionTime).ToString("yyyy-MM-dd"); + data.Date2 = item.ExpirationTime == null ? "" : Convert.ToDateTime(item.ExpirationTime).ToString("yyyy-MM-dd"); break; } @@ -2411,6 +2413,464 @@ { throw new Exception(e.Message); } + } + + /// <summary> + /// 鏍规嵁绠辩爜鑾峰彇鏍囩绠辩爜淇℃伅锛堣溅闂村叆搴�-鑾峰彇WMS鐢熸垚鐨勭淇℃伅锛� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) + { + try + { + if (string.IsNullOrEmpty(boxNo)) + { + throw new Exception("璇锋壂鎻忓绠辨潯鐮�!"); + } + + string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty FROM BllBoxInfo + WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}' + GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; "; + var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); + + if (models.Count != 0) + { + return models; + } + else + { + throw new Exception("娌℃湁鏌ヨ鍒扮鐮佷俊鎭�"); + } + + } + catch (Exception ex) + { + throw ex; + } + } + + + public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId) + { + try + { + #region MyRegion + + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鍙蜂笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(boxNo)) + { + throw new Exception("绠卞彿涓嶈兘涓虹┖"); + } + if (qty<=0) + { + throw new Exception("鏁伴噺涓嶈兘灏忕瓑0"); + } + var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList(); + if (boxInfo.Count == 0) + { + throw new Exception("鏈煡璇㈠埌褰撳墠绠卞彿淇℃伅"); + } + var boxInfoOne = boxInfo.First(); + var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (pall == null) + { + throw new Exception("鏈煡璇㈠埌褰撳墠鎵樼洏淇℃伅"); + } + #endregion + + //寮�鍚簨鍔� + Db.BeginTran(); + //褰撳墠鏃堕棿 + var comTime = DateTime.Now; + + #region 鍖呰 + + var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo); + var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); + + var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 + var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 + + //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 + new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); + + #endregion + + var msgStr = $"绠卞彿涓簕boxNo}"; + var boxInfoList = new List<BllBoxInfo>(); + + + boxInfoList.AddRange(boxInfo); + + #region 搴撳瓨鏄庣粏 + + var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); + if (area == null) + { + throw new Exception("鍏ュ簱鍖哄煙涓嶈兘涓虹┖"); + } + + var tags = "0"; + + // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭� + var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo); + var sdId1 = 0; + if (sd1 != null) + { + if (sd1.AreaNo!= areaNo) + { + throw new Exception("閫夋嫨鐨勫尯鍩熶笌搴撳瓨涓嶅悓"); + } + sdId1 = sd1.Id; + // 搴撳瓨宸插瓨鍦� 鏇存柊鏁版嵁 + sd1.Qty += qty; + sd1.CompleteTime = comTime; + sd1.UpdateUser = userId; + sd1.UpdateTime = comTime; + + Db.Updateable(sd1).ExecuteCommand(); + } + else + { + var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo)); + if (sd2.Count(m=>m.AreaNo!= areaNo) > 0) + { + throw new Exception("褰撳墠鎵樼洏浣嶇疆涓庨�夋嫨鐨勪笉鍚岋紝璇锋牳瀹�"); + } + // 搴撳瓨涓嶅瓨鍦� 鎻掑叆鏁版嵁 + sd1 = new DataStockDetail() + { + ASNNo = "", + LotNo = boxInfoOne.LotNo, + LotText = boxInfoOne.LotText, + SupplierLot = boxInfoOne.SupplierLot, + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + Qty = qty, + LockQty = 0, + FrozenQty = 0, + InspectQty = 0, + WareHouseNo = area.WareHouseNo,//鎵�灞炰粨搴� + RoadwayNo = "",//鎵�灞炲贩閬� + AreaNo = area.AreaNo,//鎵�灞炲尯鍩� + LocatNo = "",//鍌ㄤ綅鍦板潃 + PalletNo = palletNo, + PalletTags = tags, + CompleteTime = comTime, + ProductionTime = boxInfoOne.ProductionTime, + ExpirationTime = boxInfoOne.ExpirationTime, + Status = "0", + InspectMark = boxInfoOne.InspectMark, + InspectStatus = sku.IsInspect, + BitPalletMark = "1", + PackagNo = sku.PackagNo, + + IsDel = "0", + CreateUser = 0, + CreateTime = comTime + }; + + //娣诲姞搴撳瓨鏄庣粏 + sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); + } + #endregion + + // 鏇存敼绠辨敮鍏崇郴琛� + decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲� + + + //鏍囩缁勬墭 + var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList(); + foreach (var g in boxGroup) + { + decimal boxFullQty = 0;//绠卞唴鎬绘暟閲� + foreach (var box in g) + { + if (box.BindNo != null && box.BindNo != 0) + { + continue; + } + + + box.PalletNo = palletNo; + box.Status = "2"; + + box.CompleteTime = comTime; + box.UpdateTime = comTime; + box.UpdateUser = userId; + + //box.Qty = box.Qty; + //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1"; + + factQty += box.Qty; + boxFullQty += box.Qty; + + #region 搴撳瓨绠辩爜鏄庣粏 + var box2 = new DataBoxInfo() + { + StockDetailId = sdId1, + BoxNo = box.BoxNo, + BoxNo2 = box.BoxNo2, + BoxNo3 = box.BoxNo3, + PalletNo = box.PalletNo, + PalletNo2 = box.PalletNo2, + PalletNo3 = box.PalletNo3, + Qty = box.Qty, + FullQty = box.FullQty, + Status = "2",//0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 + LotNo = box.LotNo, + LotText = box.LotText, + SkuNo = box.SkuNo, + SkuName = box.SkuName, + Standard = sku.Standard, + ProductionTime = box.ProductionTime, + SupplierLot = box.SupplierLot, + InspectStatus = sku.IsInspect, + InspectMark = box.InspectMark, + BitBoxMark = box.BitBoxMark, + ExpirationTime = box.ExpirationTime, + + CreateUser = 0, + CreateTime = comTime + }; + //娣诲姞搴撳瓨绠辩爜鏄庣粏 + Db.Insertable(box2).ExecuteCommand(); + #endregion + } + if (boxFullQty > bNum) + { + throw new Exception($"缁戝畾澶辫触锛寋g.Key}绠辩爜缁戝畾鏁伴噺澶т簬璇ョ墿鍝佸寘瑁呮暟閲忥紒"); + } + } + //鏇存敼绠辨敮鍏崇郴琛ㄤ俊鎭� + Db.Updateable(boxInfoList).ExecuteCommand(); + + + #region 搴撳瓨 + var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo); + if (dataStock != null) + { + dataStock.Qty += factQty; + Db.Updateable(dataStock).ExecuteCommand(); + } + else + { + var stock = new DataStock() + { + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + LotNo = boxInfoOne.LotNo, + LotText = boxInfoOne.LotText, + Qty = qty, + LockQty = 0, + FrozenQty = 0, + IsSampling = "0", + IsDel = "0", + CreateUser = userId, + CreateTime = comTime + }; + Db.Insertable(stock).ExecuteCommand(); + } + #endregion + + // 鏇存敼鎵樼洏浣跨敤鐘舵�� + var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; + ////娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹� + //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);"; + //Db.Ado.ExecuteCommand(sqlStr); + new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "杞﹂棿鍏ュ簱", boxNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{palletNo}銆亄msgStr}鐨勫叆搴撲俊鎭�", userId); + + //鎻愪氦浜嬪姟 + Db.CommitTran(); + + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + /// <summary> + /// 杞﹂棿缁戝畾鎵樼洏 涓嶈创鏍囩墿鏂� + /// </summary> + /// <param name="model"></param> + /// <param name="userId"></param> + /// <exception cref="Exception"></exception> + public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId) + { + try + { + #region MyRegion + + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鍙蜂笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(skuNo)) + { + throw new Exception("鐗╂枡涓嶈兘涓虹┖"); + } + if (qty <= 0) + { + throw new Exception("鏁伴噺涓嶈兘灏忕瓑0"); + } + var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo); + if (skuInfo == null) + { + throw new Exception("鏈煡璇㈠埌鐗╂枡淇℃伅"); + } + var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (pall == null) + { + throw new Exception("鏈煡璇㈠埌褰撳墠鎵樼洏淇℃伅"); + } + #endregion + + //寮�鍚簨鍔� + Db.BeginTran(); + //褰撳墠鏃堕棿 + var comTime = DateTime.Now; + + #region 鍖呰 + + var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); + + var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 + var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 + + //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 + new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum); + + #endregion + + + + #region 搴撳瓨鏄庣粏 + + var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo); + if (area == null) + { + throw new Exception("鍏ュ簱鍖哄煙涓嶈兘涓虹┖"); + } + + var tags = "0"; + + // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭� + var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo); + var sdId1 = 0; + if (sd1 != null) + { + if (sd1.AreaNo != areaNo) + { + throw new Exception("閫夋嫨鐨勫尯鍩熶笌搴撳瓨涓嶅悓"); + } + sdId1 = sd1.Id; + // 搴撳瓨宸插瓨鍦� 鏇存柊鏁版嵁 + sd1.Qty += qty; + sd1.CompleteTime = comTime; + sd1.UpdateUser = userId; + sd1.UpdateTime = comTime; + if (sd1.Qty >= pNum) + { + sd1.BitPalletMark = "0"; + } + Db.Updateable(sd1).ExecuteCommand(); + } + else + { + // 搴撳瓨涓嶅瓨鍦� 鎻掑叆鏁版嵁 + sd1 = new DataStockDetail() + { + LotNo = lotNo, + SupplierLot = "", + SkuNo = skuInfo.SkuNo, + SkuName = skuInfo.SkuName, + Standard = skuInfo.Standard, + Qty = qty, + LockQty = 0, + FrozenQty = 0, + InspectQty = 0, + WareHouseNo = area.WareHouseNo,//鎵�灞炰粨搴� + RoadwayNo = "",//鎵�灞炲贩閬� + AreaNo = area.AreaNo,//鎵�灞炲尯鍩� + LocatNo = "",//鍌ㄤ綅鍦板潃 + PalletNo = palletNo, + PalletTags = tags, + CompleteTime = comTime, + //ProductionTime = boxInfoOne.ProductionTime, + //ExpirationTime = boxInfoOne.ExpirationTime, + Status = "0", + InspectMark = "0", + InspectStatus = "1", + BitPalletMark = qty >= pNum ?"0" :"1", + PackagNo = skuInfo.PackagNo, + + IsDel = "0", + CreateUser = 0, + CreateTime = comTime + }; + + //娣诲姞搴撳瓨鏄庣粏 + sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity(); + } + #endregion + + // 鏇存敼绠辨敮鍏崇郴琛� + decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲� + + + #region 搴撳瓨 + var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo); + if (dataStock != null) + { + dataStock.Qty += factQty; + Db.Updateable(dataStock).ExecuteCommand(); + } + else + { + var stock = new DataStock() + { + SkuNo = skuInfo.SkuNo, + SkuName = skuInfo.SkuName, + Standard = skuInfo.Standard, + LotNo = lotNo, + LotText = "", + Qty = qty, + LockQty = 0, + FrozenQty = 0, + IsSampling = "0", + IsDel = "0", + CreateUser = userId, + CreateTime = comTime + }; + Db.Insertable(stock).ExecuteCommand(); + } + #endregion + + // 鏇存敼鎵樼洏浣跨敤鐘舵�� + var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';"; + ////娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹� + //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);"; + Db.Ado.ExecuteCommand(sqlStr); + new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "杞﹂棿鍏ュ簱", skuNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{palletNo}鐨勫叆搴撲俊鎭�", userId); + + //鎻愪氦浜嬪姟 + Db.CommitTran(); + + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } #endregion @@ -5504,7 +5964,7 @@ #endregion #region 璐ㄦ璇烽獙 - if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1") + if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1") { var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot); if (qualityRequest == null) -- Gitblit v1.8.0