From b7f53ba61fbc1844d7b92ff852762b140d46ab54 Mon Sep 17 00:00:00 2001 From: huanghongfeng <huanghongfeng@hnkhzn.com> Date: 星期一, 23 六月 2025 19:58:16 +0800 Subject: [PATCH] 最新 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs | 869 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 852 insertions(+), 17 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" index e57b084..c328736 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs" @@ -11,6 +11,13 @@ using Microsoft.AspNetCore.Http; using System.Reflection.Metadata; using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; +using System.Diagnostics; +using Newtonsoft.Json; +using System.Security.Policy; +using static WIDESEA_ITaskInfoService.ITaskService; +using MailKit.Search; +using WIDESEA_Common.Log; +using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; namespace WIDESEA_TaskInfoService { @@ -151,10 +158,10 @@ { try { - WebResponseContent content=new WebResponseContent(); + WebResponseContent content = new WebResponseContent(); _unitOfWorkManage.BeginTran(); //鍒ゆ柇绉诲簱 - content=RelocationTasks(tasks.OrderBy(x=>x.Depth).ToList()); + content = RelocationTasks(tasks.OrderBy(x => x.Depth).ToList()); if (content.Status) { _unitOfWorkManage.CommitTran(); @@ -211,7 +218,7 @@ { //(Dt_LocationInfo?, int?) result = _basicService.LocationInfoService.isDepth(location); (Dt_LocationInfo?, int?) result = isDepth(location); - if (result.Item1 != null &&result.Item2 != LocationStatusEnum.Lock.ObjToInt() && result.Item2 != LocationStatusEnum.PalletLock.ObjToInt() && result.Item2 != LocationStatusEnum.Free.ObjToInt()) + if (result.Item1 != null && result.Item2 != LocationStatusEnum.Lock.ObjToInt() && result.Item2 != LocationStatusEnum.PalletLock.ObjToInt() && result.Item2 != LocationStatusEnum.Free.ObjToInt()) { int sum = 0; for (int j = 0; j < task.Count; j++) @@ -270,12 +277,12 @@ _unitOfWorkManage.CommitTran(); return content; } - catch(Exception ex) + catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return content = WebResponseContent.Instance.Error(ex.Message); } - } + } /// <summary> /// 绉诲簱浠诲姟 /// </summary> @@ -291,15 +298,15 @@ { int beforeStatus = locationInfo.LocationStatus; //(Dt_LocationInfo?,int?) Result = _basicService.LocationInfoService.isDepth(locationInfo); - (Dt_LocationInfo?,int?) Result = isDepth(locationInfo); - if (Result.Item1 != null&& Result.Item2== LocationStatusEnum.InStock.ObjToInt()) + (Dt_LocationInfo?, int?) Result = isDepth(locationInfo); + if (Result.Item1 != null && Result.Item2 == LocationStatusEnum.InStock.ObjToInt()) { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == Result.Item1.LocationCode); - Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId==stockInfo.Id); - if (stockInfo != null&& stockInfoDetail != null) + Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id); + if (stockInfo != null && stockInfoDetail != null) { - (Dt_Task ?, Dt_LocationInfo ?) result= AddRelocationTask(Result.Item1, stockInfo, task); - if (result.Item1!=null&&result.Item2!=null) + (Dt_Task?, Dt_LocationInfo?) result = AddRelocationTask(Result.Item1, stockInfo, task); + if (result.Item1 != null && result.Item2 != null) { _basicService.LocationInfoService.RelocationLock(Result.Item1, result.Item2, result.Item1.TaskNum); locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); @@ -311,13 +318,13 @@ { return content = WebResponseContent.Instance.Error("绉诲簱浠诲姟鐢熸垚澶辫触"); } - } + } else { return content = WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�"); } } - else if(Result.Item1 != null && Result.Item2 == LocationStatusEnum.Pallet.ObjToInt()) + else if (Result.Item1 != null && Result.Item2 == LocationStatusEnum.Pallet.ObjToInt()) { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == Result.Item1.LocationCode); if (stockInfo != null) @@ -357,12 +364,657 @@ } finally { - - } - + } } - public (Dt_Task?,Dt_LocationInfo?) AddRelocationTask(Dt_LocationInfo location,Dt_StockInfo stockInfo,Dt_Task task) + + /// <summary> + /// 鍒ゆ柇宸烽亾鍐呯Щ搴� + /// </summary> + /// <param name="TaskNum"></param> + /// <param name="SourceAddress"></param> + /// <returns></returns> + public WebResponseContent IsRelocations(int TaskNum, string SourceAddress) + { + try + { + WebResponseContent content = new WebResponseContent(); + List<Dt_LocationInfo> loca = new List<Dt_LocationInfo>(); + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == TaskNum); + if (task == null) + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅锛屼换鍔″彿锛歿TaskNum}"); + } + else + { + //鍒ゆ柇鏄惁闇�瑕佺Щ搴� + string[] targetCodes = SourceAddress.Split("-"); + if (targetCodes[1] == "001") + { + targetCodes[1] = "002"; + + } + else if (targetCodes[1] == "004") + { + targetCodes[1] = "003"; + } + else + { + return content = WebResponseContent.Instance.Error($"璐т綅瑙f瀽澶辫触锛岃揣浣嶇紪鍙凤細{SourceAddress}"); + } + targetCodes[4] = "01"; + string LocationCode = string.Join("-", targetCodes); //缁勮娴呭簱浣嶅湴鍧� + Dt_LocationInfo locationInfos = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode && (x.LocationStatus == (int)LocationStatusEnum.Free || x.LocationStatus == (int)LocationStatusEnum.InStock)); + if (locationInfos == null) + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒拌璐т綅淇℃伅,璐т綅缂栧彿:{locationInfos}"); + } + else + { + if (locationInfos.LocationStatus == (int)LocationStatusEnum.Free) //鍒ゆ柇娴呰揣浣嶆槸鍚︽湁璐� + { + return content = WebResponseContent.Instance.OK(); + } + else + { + Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode && x.StockStatus== (int)StockStatusEmun.宸插叆搴�); + if (dt_StockInfo == null) + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒拌璐т綅鐨勫簱瀛樹俊鎭�,璐т綅缂栧彿:{LocationCode}"); + } + else + { + Dt_LocationInfo newLocation; + //鏌ヨ蛋璐т綅锛岃繘琛岀敓鎴愮Щ搴撲换鍔� + int Locationtype = 9; //榛樿涓�9 + if (dt_StockInfo.MaterialType == (int)InventoryMaterialType.鎴愬搧) + { + Locationtype = 11; + } + else if (dt_StockInfo.MaterialType == (int)InventoryMaterialType.鍘熸潗鏂�) + { + Locationtype = 10; + } + //newLocation = _basicService.LocationInfoService.GetLocation(locationInfos.RoadwayNo,Locationtype); //鎷垮埌浜嗙Щ搴撳悗鐨勮揣浣� + if (dt_StockInfo.MaterialType == (int)InventoryMaterialType.鎴愬搧) + { + string[] targetCodesst = dt_StockInfo.PalletCode.Split("*"); + Dt_InboundOrder dt_Inbound = _inboundService.InbounOrderService.Repository.QueryFirst(x => x.OrderName == targetCodesst[0]); + if (dt_Inbound.Startingcolumn != 0 || dt_Inbound.Terminationcolumn != 0) + { + newLocation = _basicService.LocationInfoService.GetLocation2(locationInfos.RoadwayNo, Locationtype, dt_Inbound.Startingcolumn, dt_Inbound.Terminationcolumn); + } + else + { + newLocation = _basicService.LocationInfoService.GetLocation(locationInfos.RoadwayNo, Locationtype); + } + + } + else + { + newLocation = _basicService.LocationInfoService.GetLocation(locationInfos.RoadwayNo, Locationtype); + } + + + //鐩爣璐т綅鏌ユ壘搴撲綅鏄惁鏈夎揣 + Dt_StockInfo dt_StockCurren = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == newLocation.LocationCode); + if (dt_StockCurren != null) return content = WebResponseContent.Instance.Error($"鍏ュ簱澶辫触锛屾墭鐩樻潯鐮侊細{dt_StockInfo.PalletCode}锛屾煡鎵惧嚭鐨勮揣浣嶄俊鎭搴斿凡鏈夊簱瀛�"); + + Dt_Task taskcurren = BaseDal.QueryFirst(x => x.TargetAddress == newLocation.LocationCode); + if (taskcurren != null) return content = WebResponseContent.Instance.Error($"鍏ュ簱澶辫触锛屾墭鐩樻潯鐮侊細{dt_StockInfo.PalletCode}锛屾煡鎵惧嚭鐨勮揣浣嶄俊鎭凡鏈夊叆搴撲换鍔�"); + + bool crutaskthy = _taskHtyService.CrueeTaskHty(newLocation.LocationCode); + if (crutaskthy) return content = WebResponseContent.Instance.Error($"鍏ュ簱澶辫触锛屾墭鐩樻潯鐮侊細{dt_StockInfo.PalletCode}锛屾煡鎵惧嚭鐨勮揣浣嶅湪浠诲姟鍘嗗彶淇℃伅涓紝鏈夊叆搴撴垨绉诲簱淇℃伅"); + + + //鎵剧殑娣卞簱鍖猴紝鍒欏垽鏂祬搴撲綅鏄惁鏈� + + + + if (newLocation != null) + { + Dt_Task dt_Task = new() + { + PalletCode = dt_StockInfo.PalletCode, + Roadway = locationInfos.RoadwayNo, + TaskType = TaskTypeEnum.RelocationIn.ObjToInt(), + TaskStatus = OutTaskStatusEnum.OutNew.ObjToInt(), + SourceAddress = locationInfos.LocationCode, + TargetAddress = newLocation.LocationCode, + CurrentAddress = locationInfos.LocationCode, + NextAddress = newLocation.LocationCode, + Grade = 2, + Creater = "WMS", + CreateDate = DateTime.Now, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + MaterialType = dt_StockInfo.MaterialType + }; + _unitOfWorkManage.BeginTran(); + if (locationInfos.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + locationInfos.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + newLocation.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + + } + else if (locationInfos.LocationStatus == LocationStatusEnum.Pallet.ObjToInt()) + { + locationInfos.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt(); + newLocation.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt(); + } + loca.Add(newLocation); + loca.Add(locationInfos); + _basicService.LocationInfoService.UpdateData(loca); + BaseDal.AddData(dt_Task); + _unitOfWorkManage.CommitTran(); + return content = WebResponseContent.Instance.OK(data: dt_Task); + } + else + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒板贩閬撳唴鍙Щ搴撶殑璐т綅"); + } + + } + } + } + } + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + throw; + } + } + + + public string ReceiveWMSTask = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTask"]; + + + /// <summary> + /// 鎺ユ敹璧风偣闇�瑕佺殑绌烘墭鐩樿繘琛屽嚭搴� + /// </summary> + /// <param name="SourceAddress"></param> + /// <returns></returns> + public WebResponseContent Empty_outbound(GenerateInv generate) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_Task task = BaseDal.QueryFirst(x => x.TargetAddress == generate.SourceAddress); + if (task == null) + { + string RoadwayNo = "1"; + if (generate.SourceAddress != "R01-002-041-001-01") + { + RoadwayNo = "2"; + } + Dt_LocationInfo locationInfos = _basicService.LocationInfoService.Repository.QueryFirst(x => x.RoadwayNo == RoadwayNo && x.EnableStatus != (int)EnableStatusEnum.Disable && x.Depth==1 && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt()); + if(locationInfos == null) + { + locationInfos = _basicService.LocationInfoService.Repository.QueryFirst(x => x.RoadwayNo == RoadwayNo && x.Depth == 2 && x.EnableStatus != (int)EnableStatusEnum.Disable && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt()); + } + + if (locationInfos != null) + { + Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationInfos.LocationCode); + if (dt_StockInfo != null && dt_StockInfo.MaterialType == (int)InventoryMaterialType.绌烘墭) + { + + + Dt_LocationInfo newSourceAddress; + newSourceAddress = _basicService.LocationInfoService.GetLocationplatform(generate.SourceAddress); + if (newSourceAddress != null) + { + Dt_Task dt_Task = new() + { + PalletCode = dt_StockInfo.PalletCode, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + Roadway = locationInfos.RoadwayNo, + TaskType = TaskTypeEnum.PalletOutbound.ObjToInt(), + TaskStatus = InTaskStatusEnum.InNew.ObjToInt(), + SourceAddress = locationInfos.LocationCode, + TargetAddress = newSourceAddress.LocationCode, + CurrentAddress = locationInfos.LocationCode, + NextAddress = newSourceAddress.LocationCode, + Grade = 1, + Creater = "WMS", + Depth = locationInfos.Depth, + CreateDate = DateTime.Now, + PalletCodequantity = (int)dt_StockInfo.Materialweight, + MaterialType = dt_StockInfo.MaterialType + }; + + _unitOfWorkManage.BeginTran(); + dt_StockInfo.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾; + dt_StockInfo.Remark = "绛夊緟鍫嗗灈鏈哄畬鎴愬嚭搴撲换鍔�"; + if (locationInfos.LocationStatus == LocationStatusEnum.Pallet.ObjToInt()) + { + locationInfos.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt(); + } + BaseDal.AddData(dt_Task); + _basicService.LocationInfoService.UpdateData(locationInfos); + _stockService.StockInfoService.Repository.UpdateData(dt_StockInfo); + _unitOfWorkManage.CommitTran(); + + return content = WebResponseContent.Instance.OK(data: dt_Task); + } + else + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙扮紪鍙凤紝缂栧彿锛歿generate.SourceAddress}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鏃犺搴撲綅绌烘墭涓哄簱瀛樹俊鎭紝搴撲綅缂栧彿锛歿locationInfos.LocationCode}"); + } + + } + else + { + return content = WebResponseContent.Instance.Error($"璇ュ贩閬撳凡鏃犵┖鎵樼洏锛屽贩閬撳彿:{RoadwayNo}宸烽亾"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"宸叉湁璇ョ珯鍙扮殑绌烘墭鍑哄簱浠诲姟锛岀珯鍙扮紪鍙穥generate.SourceAddress}"); + } + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + + /// <summary> + /// 鎺ユ敹璧风偣闇�瑕佺殑绌烘墭鐩樿繘琛屽嚭搴� + /// </summary> + /// <param name="SourceAddress"></param> + /// <returns></returns> + public WebResponseContent Rawmaterialout(GenerateInv3 generate) + { + WebResponseContent content = new WebResponseContent(); + List<Dt_StockInfo> dt_StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.PalletCode.Contains(generate.PalletCode) && x.MaterialType== (int)InventoryMaterialType.鍘熸潗鏂�).OrderBy(x=>x.CreateDate).Take(generate.outCount).ToList(); + + if(dt_StockInfo.Count > 0) + { + for (int i = 0; i < dt_StockInfo.Count; i++) + { + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == dt_StockInfo[i].LocationCode); //纭璐т綅淇℃伅鏄惁瀵逛笂 + if (locationinfo != null) + { + Dt_Task dt_Task = new() + { + PalletCode = dt_StockInfo[i].PalletCode, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + Roadway = locationinfo.RoadwayNo, + TaskType = TaskTypeEnum.Outbound.ObjToInt(), + TaskStatus = InTaskStatusEnum.InNew.ObjToInt(), + SourceAddress = locationinfo.LocationCode, + TargetAddress = locationinfo.RoadwayNo == "1" ? "R01-002-041-011-01" : "R02-002-027-011-01", + CurrentAddress = locationinfo.LocationCode, + NextAddress = locationinfo.RoadwayNo == "1" ? "R01-002-041-011-01" : "R02-002-027-011-01", + Grade = 1, + Creater = "WMS", + Depth = locationinfo.Depth, + CreateDate = DateTime.Now, + PalletCodequantity = (int)dt_StockInfo[i].Materialweight, + PLCTo = generate.TargetAddress == "R01-002-041-011-01" ? 1 : 2, + MaterialType = dt_StockInfo[i].MaterialType + }; + + _unitOfWorkManage.BeginTran(); + dt_StockInfo[i].StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾; + dt_StockInfo[i].Remark = "绛夊緟鍫嗗灈鏈哄畬鎴愬嚭搴撲换鍔�"; + if (locationinfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + } + BaseDal.AddData(dt_Task); + _basicService.LocationInfoService.UpdateData(locationinfo); + _stockService.StockInfoService.Repository.UpdateData(dt_StockInfo); + _unitOfWorkManage.CommitTran(); + + content = WebResponseContent.Instance.OK(data: dt_Task); + } + else + { + content = WebResponseContent.Instance.Error($"鐗╂枡淇℃伅涓庤揣浣嶄俊鎭笉瀵癸紝鎵樼洏鍙凤細{dt_StockInfo[i].PalletCode}"); + } + } + return content; + } + else + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撶殑搴撳瓨淇℃伅"); + } + } + + /// <summary> + /// 鎵嬪姩鐢熸垚鍑哄簱浠诲姟 + /// </summary> + /// <param name="PalletCode"></param> + /// <returns></returns> + public WebResponseContent ManualOutbound(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>(); + List<Dt_LocationInfo> locations = new List<Dt_LocationInfo>(); + List<Dt_Task> taskdt = new List<Dt_Task>(); + List<Dt_StockInfoDetail> dtstocktdetail = new List<Dt_StockInfoDetail>(); + for (int i = 0; i < saveModel.DelKeys.Count; i++) + { + Dt_StockInfo stockt = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == saveModel.DelKeys[i].ToString()); + if (stockt.StockStatus == (int)StockStatusEmun.宸插叆搴� && (stockt.Wlstatus == (int)InventoryMaterialStatus.鍚堟牸 || stockt.Wlstatus == (int)InventoryMaterialStatus.杩斿伐 || stockt.Wlstatus == (int)InventoryMaterialStatus.鐗归噰) ) + { + if(stockt.MaterialType != (int)InventoryMaterialType.鍘熸潗鏂�) + { + Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockt.Id); + stockt.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾; + if (stockt.MaterialType != (int)InventoryMaterialType.绌烘墭) + { + stocktdetail.Status = (int)StockStatusEmun.鍑哄簱閿佸畾; + } + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockt.LocationCode); + if (locationinfo.RoadwayNo == "1") + { + if (locationinfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + } + else if (locationinfo.LocationStatus == LocationStatusEnum.Pallet.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.PalletLock.ObjToInt(); + } + string LocationName = "R01-002-044-001-01"; + if (stockt.MaterialType == (int)InventoryMaterialType.绌烘墭) + { + LocationName = "R01-002-043-001-01"; + } + Dt_LocationInfo newTargetAddress; + newTargetAddress = _basicService.LocationInfoService.GetLocationplatform(LocationName); + Dt_Task dt_Task = new() + { + PalletCode = stockt.PalletCode, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + Roadway = newTargetAddress.RoadwayNo, + TaskType = TaskTypeEnum.Outbound.ObjToInt(), + TaskStatus = InTaskStatusEnum.InNew.ObjToInt(), + SourceAddress = locationinfo.LocationCode, + TargetAddress = newTargetAddress.LocationCode, + CurrentAddress = locationinfo.LocationCode, + NextAddress = newTargetAddress.LocationCode, + Grade = 1, + Creater = "WMS", + Depth = locationinfo.Depth, + CreateDate = DateTime.Now, + MaterialType= stockt.MaterialType + }; + dtstockt.Add(stockt); + locations.Add(locationinfo); + taskdt.Add(dt_Task); + if (stockt.MaterialType != (int)InventoryMaterialType.绌烘墭) + { + dtstocktdetail.Add(stocktdetail); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屽彧鍙嚭搴�1宸烽亾鐨勬墭鐩樺拰鎴愬搧锛屽嚭搴撴潯鐮侊細{saveModel.DelKeys[i].ToString()}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛岃涓嶈閫夋嫨鍘熸潗鏂欏嚭搴擄紝鍑哄簱鏉$爜锛歿saveModel.DelKeys[i].ToString()}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛岃閫夋嫨宸插叆搴撲笖锛堝悎鏍硷紝杩斿伐锛岀壒閲囷級鐨勭墿鏂欏嚭搴擄紒锛侊紒锛屽嚭搴撴潯鐮侊細{saveModel.DelKeys[i].ToString()}"); + } + + } + var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTask, taskdt, "涓嬪彂浠诲姟鍏ュ簱"); + _unitOfWorkManage.BeginTran(); + if (dtstockt.Count > 0) + { + _stockService.StockInfoService.Repository.UpdateData(dtstockt); + _stockService.StockInfoDetailService.Repository.UpdateData(dtstocktdetail); + _basicService.LocationInfoService.Repository.UpdateData(locations); + BaseDal.AddData(taskdt); + } + _unitOfWorkManage.CommitTran(); + content = WebResponseContent.Instance.OK(); + return content; + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + + public WebResponseContent ManualOutbound2(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>(); + List<Dt_LocationInfo> locations = new List<Dt_LocationInfo>(); + List<Dt_Task> taskdt = new List<Dt_Task>(); + List<Dt_StockInfoDetail> dtstocktdetail = new List<Dt_StockInfoDetail>(); + + + List<Dt_StockInfo> stocktData= _stockService.StockInfoService.Repository.QueryData(x=>x.StockStatus== (int)StockStatusEmun.宸插叆搴� && x.MaterialType == (int)InventoryMaterialType.鍘熸潗鏂�); + List<Dt_LocationInfo> locationinfoData = _basicService.LocationInfoService.Repository.QueryData(x =>x.LocationStatus == LocationStatusEnum.InStock.ObjToInt()); + List<Dt_StockInfoDetail> StockInfoDetailData = _stockService.StockInfoDetailService.Repository.QueryData(x => x.Status == (int)StockStatusEmun.宸插叆搴�); + + + string json = saveModel.DelKeys[0].ToString(); + List<string> palletCodes = JsonConvert.DeserializeObject<List<string>>(json); + + foreach (var palletCode in palletCodes) + { + Dt_StockInfo stockt = stocktData.FirstOrDefault(x => x.PalletCode == palletCode); + if (stockt !=null) + { + if (stockt.StockStatus == (int)StockStatusEmun.宸插叆搴� && (stockt.Wlstatus == (int)InventoryMaterialStatus.鍚堟牸 || stockt.Wlstatus == (int)InventoryMaterialStatus.閫�璐� || stockt.Wlstatus == (int)InventoryMaterialStatus.鐗归噰)) + { + Dt_StockInfoDetail stocktdetail = StockInfoDetailData.FirstOrDefault(x => x.StockId == stockt.Id); + if(stocktdetail != null) + { + Dt_LocationInfo locationinfo = locationinfoData.FirstOrDefault(x => x.LocationCode == stockt.LocationCode); + if(locationinfo != null) + { + stockt.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾; + if (locationinfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + } + + string TargetAdd = ""; + if (saveModel.DelKeys[1].ToString()=="20") + { + TargetAdd = "R02-001-021-001-02"; + }else if(saveModel.DelKeys[1].ToString() == "30") + { + TargetAdd = "R02-001-022-001-02"; + } + else if (saveModel.DelKeys[1].ToString() == "40") + { + TargetAdd = "R01-002-044-001-01"; + } + else + { + TargetAdd = locationinfo.RoadwayNo == "2" ? "R02-002-027-011-01" : "R01-002-041-011-01"; + } + + + Dt_Task dt_Task = new() + { + PalletCode = stockt.PalletCode, + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + Roadway = locationinfo.RoadwayNo, + TaskType = TaskTypeEnum.Outbound.ObjToInt(), + TaskStatus = InTaskStatusEnum.InNew.ObjToInt(), + SourceAddress = locationinfo.LocationCode, + TargetAddress = TargetAdd, + CurrentAddress = locationinfo.LocationCode, + NextAddress = TargetAdd, + Grade = 1, + Creater = "WMS", + Depth = locationinfo.Depth, + CreateDate = DateTime.Now, + PLCTo = int.Parse(saveModel.DelKeys[1].ToString()), + MaterialType=stockt.MaterialType + }; + dtstockt.Add(stockt); + locations.Add(locationinfo); + taskdt.Add(dt_Task); + dtstocktdetail.Add(stocktdetail); + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫簱浣嶄俊鎭紝璇锋牳瀵癸紒锛侊紒锛屽嚭搴撴潯鐮侊細{palletCode}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫簱瀛樿鎯呬俊鎭紝璇锋牳瀵癸紒锛侊紒锛屽嚭搴撴潯鐮侊細{palletCode}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛岃閫夋嫨宸插叆搴撲笖锛堝悎鏍硷紝鐗归噰锛岄��璐э級鐨勭墿鏂欏嚭搴擄紒锛侊紒锛屽嚭搴撴潯鐮侊細{palletCode}"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾湭鎵惧埌瀵瑰簲鏉$爜鐨勫簱瀛樹俊鎭紝鍑哄簱鏉$爜锛歿palletCode}"); + + } + } + var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTask, taskdt, "涓嬪彂浠诲姟鍏ュ簱"); + _unitOfWorkManage.BeginTran(); + if(dtstockt.Count > 0) + { + _stockService.StockInfoService.Repository.UpdateData(dtstockt); + _stockService.StockInfoDetailService.Repository.UpdateData(dtstocktdetail); + _basicService.LocationInfoService.Repository.UpdateData(locations); + BaseDal.AddData(taskdt); + } + _unitOfWorkManage.CommitTran(); + content = WebResponseContent.Instance.OK($"鍑哄簱鎴愬姛锛屽嚭搴撴�绘暟锛歿palletCodes.Count}锛屾垚鍔熸暟閲忥細{dtstockt.Count}"); + return content; + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + public WebResponseContent ManualOutbound3(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>(); + + + List<Dt_StockInfo> stocktData = _stockService.StockInfoService.Repository.QueryData(x => x.StockStatus == (int)StockStatusEmun.宸插叆搴�); + string json = saveModel.DelKeys[0].ToString(); + List<int> palletCodes = JsonConvert.DeserializeObject<List<int>>(json); + + foreach (int pallid in palletCodes) + { + Dt_StockInfo stockt = stocktData.FirstOrDefault(x => x.Id == pallid); + if (stockt != null) + { + + stockt.Wlstatus = int.Parse(saveModel.DelKeys[1].ToString()); + dtstockt.Add(stockt); + } + else + { + return content = WebResponseContent.Instance.Error($"淇敼澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫簱瀛樹俊鎭紝搴撳瓨缂栧彿锛歿pallid}"); + + } + } + _unitOfWorkManage.BeginTran(); + if (dtstockt.Count > 0) + { + _stockService.StockInfoService.Repository.UpdateData(dtstockt); + } + _unitOfWorkManage.CommitTran(); + content = WebResponseContent.Instance.OK($"淇敼鎴愬姛"); + return content; + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"淇敼澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + public WebResponseContent ManualOutbound4(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>(); + + + List<Dt_StockInfo> stocktData = _stockService.StockInfoService.Repository.QueryData(x => x.StockStatus == (int)StockStatusEmun.宸插叆搴�); + string json = saveModel.DelKeys[0].ToString(); + List<int> palletCodes = JsonConvert.DeserializeObject<List<int>>(json); + + foreach (int pallid in palletCodes) + { + Dt_StockInfo stockt = stocktData.FirstOrDefault(x => x.Id == pallid); + if (stockt != null) + { + + stockt.Mgeneratetime = DateTime.Parse(saveModel.DelKeys[1].ToString()); + dtstockt.Add(stockt); + } + else + { + return content = WebResponseContent.Instance.Error($"淇敼澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫簱瀛樹俊鎭紝搴撳瓨缂栧彿锛歿pallid}"); + + } + } + _unitOfWorkManage.BeginTran(); + if (dtstockt.Count > 0) + { + _stockService.StockInfoService.Repository.UpdateData(dtstockt); + } + _unitOfWorkManage.CommitTran(); + content = WebResponseContent.Instance.OK($"淇敼鎴愬姛"); + return content; + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"淇敼澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + public class PalletCodeList + { + public string PalletCode { get; set; } + } + + + public (Dt_Task?, Dt_LocationInfo?) AddRelocationTask(Dt_LocationInfo location, Dt_StockInfo stockInfo, Dt_Task task) { Dt_LocationInfo? locationInfos = _basicService.LocationInfoService.AssignLocation(location.RoadwayNo); if (locationInfos != null) @@ -557,5 +1209,188 @@ } return (null, LocationStatusEnum.Free.ObjToInt()); } + + /// <summary> + /// 浜哄伐鎵嬪姩鍑哄簱锛堝垹闄ゅ簱瀛橈級 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent ManualOutboundDeleteinventory(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>(); + List<Dt_LocationInfo> locations = new List<Dt_LocationInfo>(); + List<Dt_StockInfoDetail> dtstocktdetail = new List<Dt_StockInfoDetail>(); + + for (int i = 0; i < saveModel.DelKeys.Count; i++) + { + Dt_StockInfo stockt = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == saveModel.DelKeys[i].ToString()); + if (stockt.StockStatus == (int)StockStatusEmun.宸插叆搴�) + { + Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockt.Id); + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockt.LocationCode); + Dt_Task_Hty task_Hty = new Dt_Task_Hty() + { + TaskNum = 001, + PalletCode = stockt.PalletCode, + Roadway = locationinfo.RoadwayNo, + TaskType = (int)TaskTypeEnum.Outbound, + TaskStatus = (int)OutTaskStatusEnum.OutFinish, + SourceAddress = locationinfo.LocationCode, + TargetAddress = locationinfo.LocationCode, + CurrentAddress = locationinfo.LocationCode, + NextAddress = locationinfo.LocationCode, + Grade = 1, + Dispatchertime = DateTime.Now, + Creater = App.User.UserName, + CreateDate = DateTime.Now, + ModifyDate = DateTime.Now, + Modifier = App.User.UserName, + Remark = "浜哄伐鍑哄簱", + PLCTo = 1, + PalletCodequantity = 1, + MaterialType = 1 + }; + _taskHtyService.AddData(task_Hty); + locationinfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + dtstockt.Add(stockt); + locations.Add(locationinfo); + if (stockt.MaterialType != (int)InventoryMaterialType.绌烘墭) + { + dtstocktdetail.Add(stocktdetail); + } + WriteLog.GetLog("浜哄伐鎵嬪姩鍒犻櫎搴撳瓨淇℃伅").Write($"鎵樼洏鏉$爜锛歿stockt.PalletCode},搴撲綅缂栧彿锛歿stockt.LocationCode}", $"浜哄伐鍑哄簱搴撳瓨"); + } + else + { + return content = WebResponseContent.Instance.Error($"鍑哄簱澶辫触锛岃搴撳瓨淇℃伅涓嶅彲杩涜鍑哄簱"); + } + + } + _unitOfWorkManage.BeginTran(); + _stockService.StockInfoService.Repository.DeleteData(dtstockt); + _stockService.StockInfoDetailService.Repository.DeleteData(dtstocktdetail); + _basicService.LocationInfoService.Repository.UpdateData(locations); + _unitOfWorkManage.CommitTran(); + content = WebResponseContent.Instance.OK(); + return content; + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return content = WebResponseContent.Instance.Error($"鎵嬪姩鍑哄簱淇℃伅澶辫触锛屾姤閿欎俊鎭細{ex.Message}"); + throw; + } + } + + /// <summary> + /// 浠诲姟鍙栨秷 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent Cancelinventory(int taskNum) + { + WebResponseContent content = new WebResponseContent(); + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + if(task != null) + { + if(task.TaskType== (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound) + { + //澶勭悊鍑哄簱鐨勯�昏緫 + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationinfo.LocationStatus == LocationStatusEnum.Lock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + if (locationinfo.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt(); + } + _basicService.LocationInfoService.Repository.UpdateData(locationinfo); + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode); + stockInfo.StockStatus = (int)StockStatusEmun.宸插叆搴�; + _stockService.StockInfoService.Repository.UpdateData(stockInfo); + Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id); + if(stocktdetail != null) + { + stocktdetail.Status = (int)StockStatusEmun.宸插叆搴�; + _stockService.StockInfoDetailService.Repository.UpdateData(stocktdetail); + } + BaseDal.DeleteData(task); + BaseDal.DeleteAndMoveIntoHty(task, OperateType.浜哄伐鍒犻櫎); + WriteLog.GetLog("浠诲姟鏃ュ織").Write($"鍑哄簱浠诲姟鍙栨秷鎴愬姛锛屾墭鐩樻潯鐮侊細{task.PalletCode}", $"浠诲姟鍙栨秷"); + WebResponseContent webResponseContent = HttpHelper.Post<WebResponseContent>(ReceiveWCSTask, task.TaskNum, "浠诲姟鍒犻櫎"); + return content = WebResponseContent.Instance.Error($"鍑哄簱浠诲姟鍙栨秷鎴愬姛"); + + } + else if(task.TaskType == (int)TaskTypeEnum.Inbound || task.TaskType == (int)TaskTypeEnum.PalletInbound) + { + //澶勭悊鍑哄簱鐨勯�昏緫 + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationinfo.LocationStatus == LocationStatusEnum.Lock.ObjToInt() || locationinfo.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + } + _basicService.LocationInfoService.Repository.UpdateData(locationinfo); + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode); + _stockService.StockInfoService.Repository.DeleteData(stockInfo); + Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id); + if (stocktdetail != null) + { + _stockService.StockInfoDetailService.Repository.DeleteData(stocktdetail); + } + BaseDal.DeleteData(task); + BaseDal.DeleteAndMoveIntoHty(task, OperateType.浜哄伐鍒犻櫎); + WriteLog.GetLog("浠诲姟鏃ュ織").Write($"鍏ュ簱浠诲姟鍙栨秷鎴愬姛锛屾墭鐩樻潯鐮侊細{task.PalletCode}", $"浠诲姟鍙栨秷"); + WebResponseContent webResponseContent = HttpHelper.Post<WebResponseContent>(ReceiveWCSTask, task.TaskNum, "浠诲姟鍒犻櫎"); + return content = WebResponseContent.Instance.Error($"鍏ュ簱浠诲姟鍙栨秷鎴愬姛"); + } + else if (task.TaskType == (int)TaskTypeEnum.RelocationIn) //搴撳唴绉诲簱 + { + //澶勭悊鍑哄簱鐨勯�昏緫 + Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationinfo.LocationStatus == LocationStatusEnum.Lock.ObjToInt() || locationinfo.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt()) + { + locationinfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + } + _basicService.LocationInfoService.Repository.UpdateData(locationinfo); + + Dt_LocationInfo locationinfo2 = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationinfo2.LocationStatus == LocationStatusEnum.Lock.ObjToInt()) + { + locationinfo2.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + if (locationinfo2.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt()) + { + locationinfo2.LocationStatus = LocationStatusEnum.Pallet.ObjToInt(); + } + _basicService.LocationInfoService.Repository.UpdateData(locationinfo2); + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode); + stockInfo.StockStatus = (int)StockStatusEmun.宸插叆搴�; + _stockService.StockInfoService.Repository.UpdateData(stockInfo); + Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id); + if (stocktdetail != null) + { + stocktdetail.Status = (int)StockStatusEmun.宸插叆搴�; + _stockService.StockInfoDetailService.Repository.UpdateData(stocktdetail); + } + BaseDal.DeleteData(task); + BaseDal.DeleteAndMoveIntoHty(task, OperateType.浜哄伐鍒犻櫎); + WriteLog.GetLog("浠诲姟鏃ュ織").Write($"鍏ュ簱浠诲姟鍙栨秷鎴愬姛锛屾墭鐩樻潯鐮侊細{task.PalletCode}", $"浠诲姟鍙栨秷"); + WebResponseContent webResponseContent = HttpHelper.Post<WebResponseContent>(ReceiveWCSTask, task.TaskNum, "浠诲姟鍒犻櫎"); + return content = WebResponseContent.Instance.Error($"鍏ュ簱浠诲姟鍙栨秷鎴愬姛"); + } + else + { + return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$殑浠诲姟绫诲瀷寮傚父锛屽彇娑堝け璐�"); + } + } + else + { + return content = WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔″彿"); + } + } } } -- Gitblit v1.9.3