From 2de09bec5cc05bf875543fa8956167ca7db73021 Mon Sep 17 00:00:00 2001 From: 刘磊 <1161824510@qq.com> Date: 星期三, 25 六月 2025 11:36:44 +0800 Subject: [PATCH] 合并 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 671 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 564 insertions(+), 107 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" index ab8eec4..0bc4bf0 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" @@ -2,13 +2,18 @@ using MailKit.Search; using Mapster; using Masuit.Tools; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using System.Diagnostics; +using System.Reflection.Emit; using System.Text.RegularExpressions; using System.Threading.Tasks; +using WIDESEA_Common; using WIDESEA_Core.Const; using WIDESEA_DTO.WMS; using WIDESEA_IServices; using WIDESEA_IStoragIntegrationServices; +using WIDESEA_Model.Models; +using WIDESEA_StorageBasicRepository; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob.Models; @@ -32,6 +37,11 @@ private readonly IDt_WheelsStock_htyRepository _WheelsStock_HtyRepository; private readonly IDt_InWheels_mes_htyRepository _InWheels_Mes_HtyRepository; private readonly IDt_CacheInfoRepository _CacheInfoRepository; + private readonly IDt_OutWheels_htyRepository _OutWheels_HtyRepository; + private readonly IDt_InZdp_mesRepository _InZdp_MesRepository; + private readonly IDt_InZdp_mes_htyRepository _InZdp_Mes_HtyRepository; + private readonly IDt_ZdpStockRepository _ZdpStockRepository; + private readonly IDt_ZdpStock_htyRepository _ZdpStock_HtyRepository; public Dt_TaskService(IDt_TaskRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, @@ -49,7 +59,12 @@ IDt_WheelsStockRepository wheelsStockRepository, IDt_WheelsStock_htyRepository wheelsStock_HtyRepository, IDt_InWheels_mes_htyRepository inWheels_Mes_HtyRepository, - IDt_CacheInfoRepository cacheInfoRepository) : base(BaseDal) + IDt_OutWheels_htyRepository dt_OutWheels_HtyRepository, + IDt_CacheInfoRepository cacheInfoRepository, + IDt_InZdp_mesRepository inZdp_MesRepository, + IDt_InZdp_mes_htyRepository inZdp_Mes_HtyRepository, + IDt_ZdpStockRepository zdpStockRepository, + IDt_ZdpStock_htyRepository dt_ZdpStock_HtyRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; @@ -64,7 +79,12 @@ _WheelsStockRepository = wheelsStockRepository; _WheelsStock_HtyRepository = wheelsStock_HtyRepository; _InWheels_Mes_HtyRepository = inWheels_Mes_HtyRepository; + _OutWheels_HtyRepository = dt_OutWheels_HtyRepository; _CacheInfoRepository = cacheInfoRepository; + _InZdp_MesRepository = inZdp_MesRepository; + _InZdp_Mes_HtyRepository = inZdp_Mes_HtyRepository; + _ZdpStockRepository = zdpStockRepository; + _ZdpStock_HtyRepository = dt_ZdpStock_HtyRepository; } #region 澶栭儴鎺ュ彛鏂规硶 @@ -103,6 +123,39 @@ #endregion 绉诲簱浠诲姟瀹屾垚 + #region 鍒跺姩鐩樼Щ搴撲换鍔″畬鎴� + + /// <summary> + /// 绉诲簱浠诲姟瀹屾垚 + /// </summary> + /// <param name="saveModel">浠诲姟鏁版嵁鍚堥泦</param> + /// <returns>杩斿洖缁撴灉闆�</returns> + public async Task<WebResponseContent> CompleteZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock) + { + WebResponseContent content = new WebResponseContent(); + try + { + // 鏇存柊璐т綅鍜屽簱瀛樹俊鎭� + (Dt_ZdpStock updateStock, DtLocationInfo locationInForm, DtLocationInfo locationInfoTo) = UpdateZdpStockLocation(stock,task); + var taskHty = CreateHistoricalTask(task); + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "绉诲簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庡簱瀛樻暟鎹細{JsonConvert.SerializeObject(updateStock)}锛屽師鍏堣揣浣嶆暟鎹細{locationInForm}"); + + // 鎵ц鏁版嵁搴撲簨鍔� + bool isResult = await ZdpExecuteTransaction(updateStock, taskHty, locationInForm, locationInfoTo, task.TaskId); + if (isResult) + content.OK("绉诲簱浠诲姟瀹屾垚鎴愬姛"); + else + content.Error("绉诲簱浠诲姟瀹屾垚澶辫触"); + } + catch (Exception err) + { + Console.WriteLine(err.Message.ToString()); + } + return content; + } + + #endregion 绉诲簱浠诲姟瀹屾垚 + #region 鍏ュ簱浠诲姟瀹屾垚 /// <summary> @@ -118,7 +171,17 @@ { // 鑾峰彇MES淇℃伅鍜岀洰鏍囦綅缃俊鎭� - var mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode); + Dt_InWheels_mes mes_Wheels = null; + Dt_InZdp_mes mes_Zdp = null; + Dt_WheelsStock wheelsStock = null; + Dt_ZdpStock zdpStock = null; + + if (task.TaskType== (int)TaskInboundTypeEnum.InBrake) + mes_Zdp = await _InZdp_MesRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode); + else + mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode); + + var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway); int lastStatus = locationInf.LocationStatus; @@ -128,39 +191,85 @@ // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷 var taskHty = CreateHistoricalTask(task); - // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷 - Dt_WheelsStock wheelsStock = new Dt_WheelsStock + if(task.TaskType == (int)TaskInboundTypeEnum.InBrake) { - Wheels_ldtm = mes_Wheels.Wheels_ldtm, - CreateDate = DateTime.Now, - Creater = task.Creater, - Wheels_Type = mes_Wheels.Wheels_Type, - Wheels_gkcc = mes_Wheels.Wheels_gkcc, - WheelsProps = mes_Wheels.WheelsProps, - Wheels_CarNo = mes_Wheels.Wheels_CarNo, - Wheels_CarType = mes_Wheels.Wheels_CarType, - Wheels_ldxh = mes_Wheels.Wheels_ldxh, - Wheels_code = mes_Wheels.Wheels_code, - Wheels_InDate = mes_Wheels.Wheels_InDate, - Wheels_level = mes_Wheels.Wheels_level, - Wheels_Location = task.TargetAddress, - Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld, - Wheels_Num = mes_Wheels.Wheels_Num, - Wheels_psj = mes_Wheels.Wheels_psj, - Wheels_CurrentStatue = 1, - Wheels_mttype = mes_Wheels.Wheels_mttype, - Wheels_ljz = mes_Wheels.Wheels_ljz, - Wheels_ldh = mes_Wheels.Wheels_ldh, - //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum, - Wheels_ygljz = mes_Wheels.Wheels_ygljz, - Wheels_gkzja = mes_Wheels.Wheels_gkzja, - Wheels_gkzjb = mes_Wheels.Wheels_gkzjb, - Wheels_gkzjc = mes_Wheels.Wheels_gkzjc, + // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷 + zdpStock = new Dt_ZdpStock + { + Zdp_code= mes_Zdp.Zdp_code, + Zdp_ZPH = mes_Zdp.Zdp_ZPH, + Zdp_CurrentStatue = 1, + Zdp_Location = task.TargetAddress, + Zdp_chexing= mes_Zdp.Zdp_chexing, + Zdp_neworold = mes_Zdp.Zdp_neworold, + Zdp_POS = mes_Zdp.Zdp_POS, + Zdp_LSXH = mes_Zdp.Zdp_LSXH, + Zdp_MAT = mes_Zdp.Zdp_MAT, + Zdp_SITE = mes_Zdp.Zdp_SITE, + Zdp_GKA1 = mes_Zdp.Zdp_GKA1, + Zdp_GKA2 = mes_Zdp.Zdp_GKA2, + Zdp_GKA3 = mes_Zdp.Zdp_GKA3, + Zdp_GKA = mes_Zdp.Zdp_GKA, + Zdp_GKB1 = mes_Zdp.Zdp_GKB1, + Zdp_GKB2 = mes_Zdp.Zdp_GKB2, + Zdp_GKB3 = mes_Zdp.Zdp_GKB3, + Zdp_GKB = mes_Zdp.Zdp_GKB, + Zdp_GKC1 = mes_Zdp.Zdp_GKC1, + Zdp_GKC2 = mes_Zdp.Zdp_GKC2, + Zdp_GKC3 = mes_Zdp.Zdp_GKC3, + Zdp_GKC = mes_Zdp.Zdp_GKC, + Zdp_GKJZ = mes_Zdp.Zdp_GKJZ, + Zdp_LSCSYMH = mes_Zdp.Zdp_LSCSYMH, + Zdp_LMCSYMH = mes_Zdp.Zdp_LMCSYMH, + Zdp_rksj = mes_Zdp.Zdp_rksj, + CreateDate = DateTime.Now, + Creater = task.Creater, + }; + } + else + { + // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷 + wheelsStock = new Dt_WheelsStock + { + Wheels_ldtm = mes_Wheels.Wheels_ldtm, + CreateDate = DateTime.Now, + Creater = task.Creater, + Wheels_Type = mes_Wheels.Wheels_Type, + Wheels_gkcc = mes_Wheels.Wheels_gkcc, + WheelsProps = mes_Wheels.WheelsProps, + Wheels_CarNo = mes_Wheels.Wheels_CarNo, + Wheels_CarType = mes_Wheels.Wheels_CarType, + Wheels_ldxh = mes_Wheels.Wheels_ldxh, + Wheels_code = mes_Wheels.Wheels_code, + Wheels_InDate = mes_Wheels.Wheels_InDate, + Wheels_level = mes_Wheels.Wheels_level, + Wheels_Location = task.TargetAddress, + Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld, + Wheels_Num = mes_Wheels.Wheels_Num, + Wheels_psj = mes_Wheels.Wheels_psj, + Wheels_CurrentStatue = 1, + Wheels_mttype = mes_Wheels.Wheels_mttype, + Wheels_ljz = mes_Wheels.Wheels_ljz, + Wheels_ldh = mes_Wheels.Wheels_ldh, + //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum, + Wheels_ygljz = mes_Wheels.Wheels_ygljz, + Wheels_gkzja = mes_Wheels.Wheels_gkzja, + Wheels_gkzjb = mes_Wheels.Wheels_gkzjb, + Wheels_gkzjc = mes_Wheels.Wheels_gkzjc, + }; + } - }; - - // 鎵ц鏁版嵁搴撲簨鍔� - bool isResult = await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels); + // 鎵ц鏁版嵁搴撲簨鍔DPExecuteTransaction + bool isResult = false; + if (task.TaskType == (int)TaskInboundTypeEnum.InBrake) + { + isResult = await ZDPExecuteTransaction(zdpStock, taskHty, locationInf, task.TaskId, mes_Zdp); + } + else + { + isResult=await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels); + } + if (isResult) { _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum); @@ -188,6 +297,8 @@ WebResponseContent content = new WebResponseContent(); try { + if(stock ==null) return content.Error("浠诲姟瀹屾垚澶辫触锛屾湭鎵惧埌褰撳墠搴撳瓨淇℃伅锛屽垹闄ゅけ璐�"); + // 鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵�� (var loc, var tas) = UpdateStockAndTaskStatus(stock, task); var taskHty = task.Adapt<Dt_Task_Hty>(); @@ -198,6 +309,35 @@ stockInfo_Hty.FinishWheelDate = DateTime.Now; stockInfo_Hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚; + Dt_OutWheels_hty Outwheels_hty = new Dt_OutWheels_hty + { + Wheels_code = stock.Wheels_code, + Wheels_Type = stock.Wheels_Type == "1"?"杞�":"鐩�", + Wheels_Num = stock.Wheels_Num, + CreateDate = DateTime.Now, + Creater = App.User.UserName == null ? "admin" : App.User.UserName, + WheelsProps = stock.WheelsProps, + Wheels_CarNo = stock.Wheels_CarNo, + Wheels_CarType = stock.Wheels_CarType, + Wheels_ldxh = stock.Wheels_ldxh, + Wheels_ldtm = stock.Wheels_ldtm, + Wheels_InDate = stock.Wheels_InDate, + Wheels_level = stock.Wheels_level, + Wheels_NewOrOld = stock.Wheels_NewOrOld, + Wheels_psj = stock.Wheels_psj, + Wheels_gkcc = stock.Wheels_gkcc, + Wheels_gkzja = stock.Wheels_gkzja, + Wheels_gkzjb = stock.Wheels_gkzjb, + Wheels_gkzjc = stock.Wheels_gkzjc, + Wheels_ldh = stock.Wheels_ldh, + Wheels_ljz = stock.Wheels_ljz, + Wheels_mttype = stock.Wheels_mttype, + //Wheels_SequenceNum = "", + Wheels_ygljz = stock.Wheels_ygljz, + }; + + + // 浜嬪姟澶勭悊 await _unitOfWorkManage.UseTranAsync(async () => { @@ -206,6 +346,89 @@ //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId); //鍒犻櫎浠诲姟 var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0; //鍔犲叆鍘嗗彶浠诲姟 var isStockHtyAdd = await _WheelsStock_HtyRepository.AddDataAsync(stockInfo_Hty); //鍔犲叆鍘嗗彶搴撳瓨 + + var isoutWheelsHtyAdd = await _OutWheels_HtyRepository.AddDataAsync(Outwheels_hty); //娣诲姞杞﹁疆鍑哄簱淇℃伅 + }); + + return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark); + } + catch (Exception err) + { + LogFactory.GetLog("浠诲姟瀹屾垚").Error(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}"); + return content.Error(err.Message); + } + } + + private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus( Dt_Task task) + { + var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway); + int lastStatus = location.LocationStatus; + location.LocationStatus = (int)LocationEnum.Free; + task.TaskState = (int)TaskOutStatusEnum.OutFinish; + //task.CurrentAddress = task.NextAddress; + //task.NextAddress = task.TargetAddress; + + _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum); + + LogFactory.GetLog("浠诲姟瀹屾垚").Info(true, "鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵��"); + return (location, task); + } + #endregion + + #region 鍒跺姩鐩樺嚭搴撲换鍔″畬鎴� + public async Task<WebResponseContent> CompleteOutZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock) + { + WebResponseContent content = new WebResponseContent(); + try + { + if (stock == null) return content.Error("浠诲姟瀹屾垚澶辫触锛屾湭鎵惧埌褰撳墠搴撳瓨淇℃伅锛屽垹闄ゅけ璐�"); + + // 鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵�� + (var loc, var tas) = UpdateStockAndTaskStatus(task); + var taskHty = task.Adapt<Dt_Task_Hty>(); + taskHty.FinishTime = DateTime.Now; + taskHty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚; + + Dt_ZdpStock_hty stockInfo_Hty = stock.Adapt<Dt_ZdpStock_hty>(); + stockInfo_Hty.FinishDate = DateTime.Now; + stockInfo_Hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚; + + Dt_OutZdp_hty Outwheels_hty = new Dt_OutZdp_hty + { + Zdp_code = stock.Zdp_code, + Zdp_ZPH = stock.Zdp_ZPH, + Zdp_Location = stock.Zdp_Location, + Zdp_chexing = stock.Zdp_chexing, + Zdp_neworold = stock.Zdp_neworold, + Zdp_POS = stock.Zdp_POS, + Zdp_LSXH = stock.Zdp_LSXH, + Zdp_MAT = stock.Zdp_MAT, + Zdp_SITE = stock.Zdp_SITE, + Zdp_GKA1 = stock.Zdp_GKA1, + Zdp_GKA2 = stock.Zdp_GKA2, + Zdp_GKA3 = stock.Zdp_GKA3, + Zdp_GKA = stock.Zdp_GKA, + Zdp_GKB1 = stock.Zdp_GKB1, + Zdp_GKB2 = stock.Zdp_GKB2, + Zdp_GKB3 = stock.Zdp_GKB3, + Zdp_GKB = stock.Zdp_GKB, + Zdp_GKC1 = stock.Zdp_GKC1, + Zdp_GKC2 = stock.Zdp_GKC2, + Zdp_GKC3 = stock.Zdp_GKC3, + Zdp_GKC = stock.Zdp_GKC, + Zdp_GKJZ = stock.Zdp_GKJZ, + Zdp_LSCSYMH = stock.Zdp_LSCSYMH, + Zdp_rksj = stock.Zdp_rksj, + }; + + // 浜嬪姟澶勭悊 + await _unitOfWorkManage.UseTranAsync(async () => + { + var isStockUpdated = await _ZdpStockRepository.DeleteDataByIdAsync(stock.Zdp_ID); //鍒犻櫎搴撳瓨 + var isLocationUpdate = await _locationRepository.UpdateDataAsync(loc); //鏇存柊搴撲綅 + //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId); //鍒犻櫎浠诲姟 + var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0; //鍔犲叆鍘嗗彶浠诲姟 + var isStockHtyAdd = await _ZdpStock_HtyRepository.AddDataAsync(stockInfo_Hty); //鍔犲叆鍘嗗彶搴撳瓨 }); return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark); @@ -258,7 +481,9 @@ // 楠岃瘉搴撳瓨鏄惁瀛樺湪 - var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode); + var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num.Contains(task.PalletCode) && x.Wheels_Location==task.SourceAddress); + var ZdpStock = await _ZdpStockRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode && x.Zdp_Location == task.SourceAddress); + // 鏍规嵁浠诲姟绫诲瀷璋冪敤鐩稿簲鐨勫畬鎴愪换鍔℃柟娉� switch (task.TaskType) @@ -270,13 +495,19 @@ return await CompleteInboundTaskAsync(task); case (int)TaskOutboundTypeEnum.Outbound: - case (int)TaskOutboundTypeEnum.OutBrake: case (int)TaskOutboundTypeEnum.OutWheels: LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍑哄簱浠诲姟", ""); return await CompleteStackTaskAsync(task, stock); + case (int)TaskOutboundTypeEnum.OutBrake: + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍒跺姩鐩樺嚭搴撲换鍔�", ""); + return await CompleteOutZdpTaskAsync(task, ZdpStock); + case (int)TaskRelocationTypeEnum.Relocation: - return await CompleteTransferTaskAsync(task, stock); + if (stock != null) + return await CompleteTransferTaskAsync(task, stock); + else + return await CompleteZdpTaskAsync(task, ZdpStock); default: return content.Error("浠诲姟绫诲瀷涓嶅瓨鍦�"); @@ -402,75 +633,164 @@ WebResponseContent content = new WebResponseContent(); try { + List<Dt_WheelsStock> WheelList = new List<Dt_WheelsStock>(); + List<Dt_ZdpStock> ZdpStockList = new List<Dt_ZdpStock>(); + List<Dt_Task> TaskList = new List<Dt_Task>(); + List<DtLocationInfo> Locationslist = new List<DtLocationInfo>(); + List<WMSTaskDTO> WMSTaskDTOdata = new List<WMSTaskDTO>(); + + string palletCode = saveModel.MainData["palletCode"].ToString(); string station = saveModel.MainData["station"].ToString(); + string outtype = saveModel.MainData["outtype"].ToString(); //1涓烘寚瀹氳溅杞嚭搴擄紝2涓烘寚瀹氬埗鍔ㄧ洏鍑哄簱 - // 鏌ヨ搴撳瓨淇℃伅 - var stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == palletCode); - if (stockInfo == null) + List<string> palletCodes = JsonConvert.DeserializeObject<List<string>>(palletCode); //鎶婃墭鐩樻潯鐮佹樉绀� + + List<DtLocationInfo> locationinfoData = _locationRepository.QueryData(x => x.LocationStatus == 2); //鏌ユ壘鍏ㄩ儴搴撲綅 + if (outtype == "2") { - return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�"); + List<Dt_ZdpStock> stocktData = _ZdpStockRepository.QueryData(x => x.Zdp_CurrentStatue == 1); //鏌ユ壘鍏ㄩ儴鍦ㄥ簱鐨勫簱瀛� + foreach (var item in palletCodes) + { + Dt_ZdpStock zdpInfo = _ZdpStockRepository.QueryFirst(x => x.Zdp_code == item); + if (zdpInfo == null) return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�"); + zdpInfo.Zdp_CurrentStatue = 4; + string Location = zdpInfo.Zdp_Location; + + var locationst = locationinfoData.FirstOrDefault(x => x.LocationCode == Location); + if (locationst.LocationStatus != (int)LocationEnum.InStock && locationst.EnalbeStatus != 1) return content.Error($"搴撲綅寮傚父,璇锋鏌ヤ竴涓嬪簱浣�,搴撳瓨鏉$爜锛歿item}锛屽簱浣嶅彿锛歿Location}"); + + locationst.LocationStatus = (int)LocationEnum.InStockDisable; + + var task = BaseDal.QueryFirst(x => x.PalletCode == item); + if (task != null) + { + return content.Error($"銆恵item}銆戝凡瀛樺湪浠诲姟"); + } + + + CheckInfo checkInfo = new CheckInfo() + { + CarType = zdpInfo.Zdp_chexing , + MTType ="0" , //鍒跺姩鐩樻病鏈夊姩鎷栧睘鎬� + + //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2", + CheckType = outtype, + + HubLevel = "0" , + CLTM =zdpInfo.Zdp_code, + IsCheck = true, + Standards = zdpInfo.Zdp_neworold + }; + + task = new Dt_Task + { + CarType = zdpInfo.Zdp_chexing, + wheels_gkcc = zdpInfo.Zdp_GKJZ, + WheelsNewOrOld = zdpInfo.Zdp_neworold, + WheelsLX = "", + Grade = 1, + Roadway = "SC1", + TargetAddress = station, + Dispatchertime = DateTime.Now, + MaterialNo = "", + NextAddress = "2010", + OrderNo = null, + PalletCode = zdpInfo.Zdp_code, + wheels_mttype = "" , + SourceAddress = zdpInfo.Zdp_Location, + CurrentAddress =zdpInfo.Zdp_Location, + TaskState = (int)TaskOutStatusEnum.OutNew, + TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels, + TaskNum = BaseDal.GetTaskNo().Result, + Creater = "System", + CreateDate = DateTime.Now, + TaskId = 0, + task_bak1 = JsonConvert.SerializeObject(checkInfo), + Towhereabouts = station, + }; + + // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄 + var taskDTO = CreateTaskDTO(task); + + WMSTaskDTOdata.Add(taskDTO); + Locationslist.Add(locationst); + TaskList.Add(task); + ZdpStockList.Add(zdpInfo); + } + } + else + { + List<Dt_WheelsStock> stocktData = _WheelsStockRepository.QueryData(x => x.Wheels_CurrentStatue == 1); //鏌ユ壘鍏ㄩ儴鍦ㄥ簱鐨勫簱瀛� + foreach (var item in palletCodes) + { + Dt_WheelsStock stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == item); + if (stockInfo == null) return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�"); + stockInfo.Wheels_CurrentStatue = 4; + string Location = stockInfo.Wheels_Location; + var locationst = locationinfoData.Where(x => x.LocationCode== stockInfo.Wheels_Location).FirstOrDefault(); + if (locationst.LocationStatus == (int)LocationEnum.Lock) return content.Error("搴撲綅閿佸畾,璇峰厛瑙i攣鍚庡啀鎸囧畾鍑哄簱"); + + locationst.LocationStatus = (int)LocationEnum.InStockDisable; + + var task = BaseDal.QueryFirst(x => x.PalletCode == item); + if (task != null) + { + return content.Error($"銆恵item}銆戝凡瀛樺湪浠诲姟"); + } + + CheckInfo checkInfo = new CheckInfo() + { + CarType = stockInfo.Wheels_CarType, + MTType = stockInfo.Wheels_mttype, //鍒跺姩鐩樻病鏈夊姩鎷栧睘鎬� + + //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2", + CheckType = outtype, + + HubLevel = stockInfo.Wheels_level.Contains("绛夌骇") ? stockInfo.Wheels_level.Replace("绛夌骇", "") : "0", + CLTM = stockInfo.Wheels_Num, + IsCheck = true, + Standards = stockInfo.Wheels_NewOrOld + }; + + + task = new Dt_Task + { + CarType = stockInfo.Wheels_CarType, + wheels_gkcc = stockInfo.Wheels_gkcc, + WheelsNewOrOld = stockInfo.Wheels_NewOrOld, + WheelsLX = outtype == "2" ? "" : stockInfo.Wheels_ldxh, + Grade = 1, + Roadway = "SC1", + TargetAddress = station, + Dispatchertime = DateTime.Now, + MaterialNo = "", + NextAddress = "2010", + OrderNo = null, + PalletCode = stockInfo.Wheels_Num, + wheels_mttype = stockInfo.Wheels_mttype, + SourceAddress =stockInfo.Wheels_Location, + CurrentAddress = stockInfo.Wheels_Location, + TaskState = (int)TaskOutStatusEnum.OutNew, + TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels, + TaskNum = BaseDal.GetTaskNo().Result, + Creater = "System", + CreateDate = DateTime.Now, + TaskId = 0, + task_bak1 = JsonConvert.SerializeObject(checkInfo), + Towhereabouts = station, + }; + + // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄 + var taskDTO = CreateTaskDTO(task); + + WMSTaskDTOdata.Add(taskDTO); + Locationslist.Add(locationst); + TaskList.Add(task); + WheelList.Add(stockInfo); + } } - if (stockInfo.Wheels_CurrentStatue != 1) return content.Error("鎸囧畾澶辫触锛氬綋鍓嶇姸鎬佷笉鍏佽鎸囧畾鍑哄簱"); - - stockInfo.Wheels_CurrentStatue = 4; - - //鏌ヨ搴撲綅鏄惁閿佸畾锛� - var location = _locationRepository.QueryFirst(x => x.LocationCode == stockInfo.Wheels_Location); - - if (location.LocationStatus == (int)LocationEnum.Lock) return content.Error("搴撲綅閿佸畾,璇峰厛瑙i攣鍚庡啀鎸囧畾鍑哄簱"); - - location.LocationStatus = (int)LocationEnum.InStockDisable; - - var task = BaseDal.QueryFirst(x => x.PalletCode == palletCode); - if (task != null) - { - return content.Error($"銆恵palletCode}銆戝凡瀛樺湪浠诲姟"); - } - - CheckInfo checkInfo = new CheckInfo() - { - CarType = stockInfo.Wheels_CarType, - MTType = stockInfo.Wheels_mttype, - CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2", - HubLevel = stockInfo.Wheels_level.Contains("绛夌骇") ? stockInfo.Wheels_level.Replace("绛夌骇", "") : "0", - CLTM = stockInfo.Wheels_Num, - IsCheck = true, - Standards = stockInfo.Wheels_NewOrOld - }; - - // var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == station); - - // 鍒涘缓骞舵坊鍔犱换鍔″埌鏁版嵁搴� - task = new Dt_Task - { - CarType = stockInfo.Wheels_CarType, - wheels_gkcc = stockInfo.Wheels_gkcc, - WheelsNewOrOld = stockInfo.Wheels_NewOrOld, - WheelsLX = stockInfo.Wheels_ldxh, - Grade = 1, - Roadway = "SC1", - TargetAddress = station, - Dispatchertime = DateTime.Now, - MaterialNo = "", - NextAddress = "2010", - OrderNo = null, - PalletCode = stockInfo.Wheels_Num, - wheels_mttype = stockInfo.Wheels_mttype, - SourceAddress = stockInfo.Wheels_Location, - CurrentAddress = stockInfo.Wheels_Location, - TaskState = (int)TaskOutStatusEnum.OutNew, - TaskType = (int)TaskOutboundTypeEnum.OutWheels, - TaskNum = BaseDal.GetTaskNo().Result, - Creater = "System", - CreateDate = DateTime.Now, - TaskId = 0, - task_bak1 = JsonConvert.SerializeObject(checkInfo) - }; - - // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄 - var taskDTO = CreateTaskDTO(task); // 鑾峰彇WMS IP鍦板潃鐢ㄤ簬鍙戦�佷换鍔¤姹� var wmsIpAddress = GetWCSIpReceiveTask(); @@ -478,19 +798,25 @@ { throw new InvalidOperationException("WMS IP 鏈厤缃�"); } - - var tasks = new List<WMSTaskDTO>() { taskDTO }; // 鍙戦�佷换鍔¤姹傚埌WMS - var result = HttpHelper.Post(wmsIpAddress, tasks.ToJsonString()); + var result = HttpHelper.Post(wmsIpAddress, WMSTaskDTOdata.ToJsonString()); content = JsonConvert.DeserializeObject<WebResponseContent>(result); if (content.Status) { // 娣诲姞浠诲姟鍒版暟鎹簱 - BaseDal.AddData(task); + BaseDal.AddData(TaskList); // 鏇存柊搴撲綅浣嶇疆鐘舵�佷负涓嶅彲鐢� - _locationRepository.UpdateData(location); - _WheelsStockRepository.UpdateData(stockInfo); + _locationRepository.UpdateData(Locationslist); + if (outtype == "2") + { + _ZdpStockRepository.UpdateData(ZdpStockList); + } + else + { + _WheelsStockRepository.UpdateData(WheelList); + } } + } catch (Exception ex) { @@ -747,9 +1073,32 @@ return (stock, fromLocation, toLocation); } - #region 鎵ц鏁版嵁搴撲簨鍔� /// <summary> - /// 鎵ц鏁版嵁搴撲簨鍔� + /// 鍒跺姩鐩樻洿鏂板簱瀛樹綅缃� + /// </summary> + /// <param name="stock"></param> + /// <param name="task"></param> + /// <returns></returns> + private (Dt_ZdpStock, DtLocationInfo, DtLocationInfo) UpdateZdpStockLocation(Dt_ZdpStock stock, Dt_Task task) + { + //淇敼鏉ユ簮搴撲綅鍜� 鐩爣搴撲綅鐘舵�� + var fromLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway); + fromLocation.LocationStatus = (int)LocationEnum.Free; + var toLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway); + toLocation.LocationStatus = (int)LocationEnum.InStock; + + // 灏嗗簱瀛樹綅缃缃负鐩爣浣嶇疆 + stock.Zdp_Location = task.TargetAddress; + + // 杩斿洖鏇存柊鍚庣殑搴撳瓨鍜屼綅缃俊鎭� + return (stock, fromLocation, toLocation); + } + + + + #region 杞﹁疆鎵ц鏁版嵁搴撲簨鍔� + /// <summary> + /// 杞﹁疆鎵ц鏁版嵁搴撲簨鍔� /// </summary> /// <param name="stock">搴撳瓨瀵硅薄</param> /// <param name="taskHty">鍘嗗彶浠诲姟瀵硅薄</param> @@ -812,6 +1161,71 @@ } #endregion + #region 鍒跺姩鐩樻墽琛屾暟鎹簱浜嬪姟 + /// <summary> + /// 鍒跺姩鐩樻墽琛屾暟鎹簱浜嬪姟 + /// </summary> + /// <param name="stock">搴撳瓨瀵硅薄</param> + /// <param name="taskHty">鍘嗗彶浠诲姟瀵硅薄</param> + /// <param name="taskId">浠诲姟ID</param> + /// <returns></returns> + private async Task<bool> ZDPExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId, Dt_InZdp_mes inZdp_Mes = null) + { + _unitOfWorkManage.BeginTran(); + try + { + var isUpdateStock = false; + var isDeleteWheelsMes = false; + + + // 娣诲姞搴撳瓨 + isUpdateStock = _ZdpStockRepository.AddData(stock) > 0; + if (inZdp_Mes != null) + { + isDeleteWheelsMes = _InZdp_MesRepository.DeleteData(inZdp_Mes); + + var InZdp_mes_hty = inZdp_Mes.Adapt<Dt_InZdp_mes_hty>(); + + InZdp_mes_hty.Zdp_CurrentStatue = "2"; + InZdp_mes_hty.FinishDate = DateTime.Now; + InZdp_mes_hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚; + + _InZdp_Mes_HtyRepository.AddData(InZdp_mes_hty); + } + + + // 娣诲姞鍘嗗彶浠诲姟 + var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0; + + // 淇敼绉诲簱鍓嶈揣浣嶇姸鎬� + var isUpdateLoc = _locationRepository.UpdateData(locationInfo); + + // 鍒犻櫎浠诲姟鏁版嵁 + var isTaskDelete = await Delete(taskId); + + // 鎻愪氦鎴栧洖婊氫簨鍔� + if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc && isDeleteWheelsMes) + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"浜嬪姟澶勭悊瀹屾垚,鎻愪氦浜嬪姟銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊鎴栨坊鍔犲簱瀛橈細{isUpdateStock},淇敼鍏ュ簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLoc}"); + _unitOfWorkManage.CommitTran(); + return true; + } + else + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"鏁版嵁澶勭悊澶辫触,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊搴撳瓨锛歿isUpdateStock},淇敼鍏ュ簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLoc}"); + _unitOfWorkManage.RollbackTran(); + return false; + } + } + catch (Exception err) + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�"); + _unitOfWorkManage.RollbackTran(); + throw; // 鎶涘嚭寮傚父浠ヤ究澶栭儴鎹曡幏 + } + } + #endregion + #region 绉诲簱浠诲姟浜嬪姟 private async Task<bool> ExecuteTransaction(Dt_WheelsStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId) @@ -855,6 +1269,49 @@ #endregion MyRegion + #region 鍒跺姩鐩樼Щ搴撲换鍔′簨鍔� + + private async Task<bool> ZdpExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId) + { + _unitOfWorkManage.BeginTran(); + try + { + var isUpdateStock = _ZdpStockRepository.UpdateData(stock); + + // 娣诲姞鍘嗗彶浠诲姟 + var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0; + + // 淇敼绉诲簱鍓嶈揣浣嶇姸鎬� + var isUpdateLocF = _locationRepository.UpdateData(fromLocation); + var isUpdateLocT = _locationRepository.UpdateData(toLocation); + + // 鍒犻櫎浠诲姟鏁版嵁 + var isTaskDelete = await Delete(taskId); + + // 鎻愪氦鎴栧洖婊氫簨鍔� + if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLocF && isUpdateLocT) + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"浜嬪姟澶勭悊瀹屾垚,鎻愪氦浜嬪姟銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊鎴栨坊鍔犲簱瀛橈細{isUpdateStock},淇敼绉诲簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLocF}"); + _unitOfWorkManage.CommitTran(); + return true; + } + else + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"鏁版嵁澶勭悊澶辫触,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊搴撳瓨锛歿isUpdateStock},淇敼绉诲簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLocF}"); + _unitOfWorkManage.RollbackTran(); + return false; + } + } + catch (Exception err) + { + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�"); + _unitOfWorkManage.RollbackTran(); + throw new Exception(err.Message); // 鎶涘嚭寮傚父浠ヤ究澶栭儴鎹曡幏 + } + } + + #endregion MyRegion + #region 浠诲姟璇锋眰鏂规硶 -- Gitblit v1.9.3