From 992a33ca68af405d08da512c46d7d59ec3ceaabc Mon Sep 17 00:00:00 2001 From: 肖洋 <cathay_xy@163.com> Date: 星期二, 11 二月 2025 14:33:47 +0800 Subject: [PATCH] 添加 ProductionLine 属性并优化任务处理逻辑 --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs | 13 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs | 7 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 230 +++++++++++++++++----------- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs | 2 Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs | 8 + Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs | 8 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs | 1 Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs | 21 +- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs | 134 ++++++++++++---- 项目资料/接口协议/冠宇MOM项目方案设计规格书_电芯段_[创智静置陈化工序]_设备集成模块_v1.2@20250208(1).pdf | 0 10 files changed, 282 insertions(+), 142 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs index f29527c..41a4da7 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs @@ -11,17 +11,17 @@ /// <summary> /// WMS浠诲姟涓婚敭 /// </summary> - public int Id { get; set; } + public int Id { get; set; } /// <summary> /// 浠诲姟鍙� /// </summary> - public int TaskNum { get; set; } + public int TaskNum { get; set; } /// <summary> /// 鎵樼洏鍙� /// </summary> - public string PalletCode { get; set; } + public string PalletCode { get; set; } /// <summary> /// 宸烽亾鍙� @@ -31,7 +31,7 @@ /// <summary> /// 浠诲姟绫诲瀷 /// </summary> - public int TaskType { get; set; } + public int TaskType { get; set; } /// <summary> /// 浠诲姟鐘舵�� @@ -41,16 +41,21 @@ /// <summary> /// 璧风偣 /// </summary> - public string SourceAddress { get; set; } + public string SourceAddress { get; set; } /// <summary> /// 缁堢偣 /// </summary> - public string TargetAddress { get; set; } + public string TargetAddress { get; set; } /// <summary> /// 浼樺厛绾� /// </summary> - public int Grade { get; set; } + public int Grade { get; set; } + + /// <summary> + /// 澶� 娉�: 鎵樼洏浜х嚎 + ///</summary> + public string? ProductionLine { get; set; } } -} +} \ No newline at end of file diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs index 889e3a0..0caccd8 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs @@ -148,5 +148,13 @@ [ExporterHeader(DisplayName = "澶囨敞")] [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "澶囨敞")] public string Remark { get; set; } + + /// <summary> + /// 鎵樼洏浜х嚎 + /// </summary> + [ImporterHeader(Name = "鎵樼洏浜х嚎")] + [ExporterHeader(DisplayName = "鎵樼洏浜х嚎")] + [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鎵樼洏浜х嚎")] + public string ProductionLine { get; set; } } } diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs index fff1309..c812e28 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs @@ -282,7 +282,7 @@ } var wmsIpAddrss = wmsBase + requestTask; - var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = "", EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode }.ToJsonString()); + var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = "", EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode, ProductionLine = stationManager.productLine }.ToJsonString()); WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); if (!content.Status) { diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs index 063fbb7..7e5705a 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/WMS/WMSTaskDTO.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing SqlSugar; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -52,5 +53,10 @@ /// 浼樺厛绾� /// </summary> public int Grade { get; set; } + + /// <summary> + /// 澶� 娉�: 鎵樼洏浜х嚎 + ///</summary> + public string? ProductionLine { get; set; } } } \ No newline at end of file diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs index 33fc24b..4e7750a 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_Task.cs @@ -122,6 +122,13 @@ public string? ErrorMessage { get; set; } /// <summary> + /// 澶� 娉�: 鎵樼洏浜х嚎 + /// 榛樿鍊�: + ///</summary> + [SugarColumn(ColumnName = "ProductionLine", Length = 20, IsNullable = true)] + public string? ProductionLine { get; set; } + + /// <summary> /// 浠诲姟鎵ц鏄庣粏 /// </summary> [SugarColumn(ColumnName = "浠诲姟鎵ц鏄庣粏")] diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs index 3e409e3..fd68d02 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo.cs @@ -79,6 +79,7 @@ /// </summary> [ImporterHeader(Name = "鐢熶骇浜х嚎")] [ExporterHeader(DisplayName = "鐢熶骇浜х嚎")] + [SugarColumn(IsNullable = true, ColumnDescription = "鐢熶骇浜х嚎")] public string ProductionLine { get; set; } /// <summary> diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs index 5499743..a001e83 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs @@ -478,6 +478,7 @@ IsFull = false, AreaCode = area.AreaCode ?? "", LocationId = loation.Id, + ProductionLine = task.ProductionLine, StockInfoDetails = new List<DtStockInfoDetail>() { new DtStockInfoDetail() @@ -760,7 +761,7 @@ { NGStation = efg.Select(x => x.stationNGChildCode).ToList(); } - content = await CreateNewTask(input, NGStation, 2); + content = await CreateNewTask(input, result.ProductionLine, NGStation, 2); return content.Error("瀛樺湪寮傚父鐢佃姱"); } @@ -797,7 +798,7 @@ { // TODO 閫佽嚦鍖呰 List<string> strings = stationManagers.Where(x => x.stationType == 0).Select(x => x.Roadway).ToList(); - content = await CreateNewTask(input, strings, 3); + content = await CreateNewTask(input, result.ProductionLine, strings, 3); return content; } else @@ -805,7 +806,7 @@ var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker"); var strings = config.ConfigValue.Split(',').ToList(); // TODO 鍏ュ簱 - content = await CreateNewTask(input, strings); + content = await CreateNewTask(input, result.ProductionLine, strings); if (content.Status) await _boxingInfoRepository.AddDataNavAsync(boxing); } @@ -894,7 +895,7 @@ List<string> strings = stationManagers.Roadway.Split(',').ToList(); Console.WriteLine(strings.ToJsonString() + "b-----------------------"); //// 璋冪敤CreateNewTask鏂规硶锛屽垱寤烘柊浠诲姟 - content = await CreateNewTask(input, strings); + content = await CreateNewTask(input, result.ProductionLine, strings); if (content.Status) { var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -950,6 +951,7 @@ Creater = "System", // 淇鎷煎啓閿欒 CreateDate = DateTime.Now, TaskId = 0, + ProductionLine = stock.ProductionLine, }; var taskDTO = CreateTaskDTO(taskNew); @@ -1073,20 +1075,46 @@ if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew) { // 鍒涘缓WMS浠诲姟 - WMSTaskDTO taskDTO = new WMSTaskDTO() - { - TaskNum = task.TaskNum.Value, - Grade = 1, - PalletCode = task.PalletCode, - RoadWay = task.Roadway, - SourceAddress = task.SourceAddress, - TargetAddress = task.Roadway, - TaskState = task.TaskState.Value, - Id = 0, - TaskType = task.TaskType, - }; + WMSTaskDTO taskDTO = CreateTaskDTO(task); + //WMSTaskDTO taskDTO = new WMSTaskDTO() + //{ + // TaskNum = task.TaskNum.Value, + // Grade = 1, + // PalletCode = task.PalletCode, + // RoadWay = task.Roadway, + // SourceAddress = task.SourceAddress, + // TargetAddress = task.Roadway, + // TaskState = task.TaskState.Value, + // Id = 0, + // TaskType = task.TaskType, + //}; return content.OK(data: task); } + + // 鏍规嵁浣嶇疆鏌ヨ鍖哄煙淇℃伅 + var areaCode = Regex.Replace(input.Position, @"-(\d+)", ""); + var area = await QueryAreaInfoByPosition(areaCode); + if (area == null) + { + return content.Error("璇ョ偣浣嶄笉鍦ㄥ尯鍩熷垪琛ㄤ腑瀛樺湪"); + } + + // 鑾峰彇鏁寸洏鐢佃姱灞炴�х姸鎬� + TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, input.PalletCode); + content = await GetTrayCellStatusAsync(trayCells); + if (!content.Status) + { + ConsoleHelper.WriteErrorLine($"鑾峰彇鐢佃姱鐘舵�佸け璐�:{content.Message}"); + return content; + } + + var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); + if (result.ProductionLine.IsNullOrEmpty()) + { + ConsoleHelper.WriteErrorLine($"褰撳墠鎵樼洏鏃犱骇绾�,鑱旂郴MOM娣诲姞浜х嚎"); + return content.Error("褰撳墠鎵樼洏鏃犱骇绾�,鑱旂郴MOM娣诲姞浜х嚎"); + } + var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 6 && x.stationChildCode == input.Position).FirstOrDefault(); if (stationManagers == null) @@ -1096,9 +1124,8 @@ throw new Exception("鏈壘鍒扮┖鎵樼洏鍏ュ簱绔欏彴鍜屽叆搴撶珯鍙伴厤缃�"); } List<string> strings = stationManagers.Roadway.Split(',').ToList(); - //Console.WriteLine(strings.ToJsonString() + "b-----------------------"); - return await CreateNewTask(input, strings, 1); + return await CreateNewTask(input, result.ProductionLine, strings, 1); } catch (Exception) { @@ -1173,6 +1200,9 @@ { return content.Error("搴撳瓨淇℃伅涓嶅瓨鍦�"); } + + //ConsoleHelper.WriteColorLine(JsonConvert.SerializeObject(stockInfo), ConsoleColor.DarkMagenta); + // 鏂板閲嶅浠诲姟鏍¢獙 var hasTask = BaseDal.QueryFirst(x => x.PalletCode == stockInfo.PalletCode); @@ -1293,6 +1323,7 @@ var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails + .Where(x => x.ProductionLine == station.productLine) .Where(x => x.AreaCode == areaCode && x.IsFull == false) .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "绌烘墭鐩�")) .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 @@ -1328,6 +1359,7 @@ Creater = "System", // 淇鎷煎啓閿欒 CreateDate = DateTime.Now, TaskId = 0, + ProductionLine = stockInfo.ProductionLine, }; } @@ -1347,6 +1379,7 @@ TaskState = task.TaskState.Value, Id = 0, TaskType = task.TaskType, + ProductionLine = task.ProductionLine, }; } @@ -1695,7 +1728,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.Inbound, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; // 鍒涘缓WMS浠诲姟 @@ -1731,7 +1765,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.InTray, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; // 鍒涘缓WMS浠诲姟 WMSTaskDTO taskDTO = CreateWMSTaskDTO(task); @@ -1779,6 +1814,7 @@ TaskState = taskOld.TaskState.Value, Id = 0, TaskType = taskOld.TaskType, + ProductionLine = taskOld.ProductionLine }; } else if (source is Dt_Task task) @@ -1794,6 +1830,7 @@ TaskState = task.TaskState.Value, Id = 0, TaskType = task.TaskType, + ProductionLine = task.ProductionLine }; } else @@ -2060,16 +2097,19 @@ } } - var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); - if (stocks != null && stocks.Count > 0) + if (stock.IsFull) { - foreach (var item in stocks) + var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); + if (stocks != null && stocks.Count > 0) { - item.SpecialParameterDuration = stock.SpecialParameterDuration; - item.ParameterInfos = stock.ParameterInfos; - item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); + foreach (var item in stocks) + { + item.SpecialParameterDuration = stock.SpecialParameterDuration; + item.ParameterInfos = stock.ParameterInfos; + item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); + } + var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocks); } - var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocks); } // 娣诲姞鍘嗗彶浠诲姟 @@ -2105,85 +2145,97 @@ #region 浠诲姟璇锋眰鏂规硶 + + private static readonly SemaphoreSlim _semaphoreUpdate = new SemaphoreSlim(1, 1); // 鏇存柊浠诲姟璐т綅 private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task) { - if (task == null) - { - return new WebResponseContent().Error("浠诲姟瀵硅薄涓虹┖"); - } - + await _semaphoreUpdate.WaitAsync(); try { - // 鍒涘缓WebResponseContent瀵硅薄 - var content = new WebResponseContent(); - - // 鑾峰彇鐩爣鍦板潃鍜屾洿鏂颁换鍔$姸鎬� - - input.Position = Regex.Replace(input.Position, @"-(\d+)", ""); - if (Convert.ToInt32(input.Position) > 1999) + if (task == null) { - input.Position = (Convert.ToInt32(input.Position) - 1000).ToString(); + return new WebResponseContent().Error("浠诲姟瀵硅薄涓虹┖"); } - if (task.TaskType == (int)TaskInboundTypeEnum.InNG) + try { - // TODO 鏍规嵁宸烽亾鏌ユ壘瀵瑰簲NG鍙o紝鐜板湪榛樿鍘婚潤缃爢鍨涙満鐨勫紓甯稿彛璐т綅鍙� - task.CurrentAddress = input.Position; - task.TargetAddress = "002-021-000"; - task.NextAddress = "002-021-000"; - task.TaskState = (int)TaskInStatusEnum.Line_InFinish; - bool isResult = await BaseDal.UpdateDataAsync(task); - return content.OK(data: task); - } - else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) - { - var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode); - task.CurrentAddress = input.Position; - task.TargetAddress = stockInfo.LocationInfo.LocationCode; - task.NextAddress = stockInfo.LocationInfo.LocationCode; - task.TaskState = (int)TaskInStatusEnum.Line_InFinish; - bool isResult = await BaseDal.UpdateDataAsync(task); - return content.OK(data: task); - } - else - { - var location = await GetLocationDistributeAsync(task.Roadway); - if (location == null) + // 鍒涘缓WebResponseContent瀵硅薄 + var content = new WebResponseContent(); + + // 鑾峰彇鐩爣鍦板潃鍜屾洿鏂颁换鍔$姸鎬� + + input.Position = Regex.Replace(input.Position, @"-(\d+)", ""); + if (Convert.ToInt32(input.Position) > 1999) { - return content.Error("鏃犳硶鑾峰彇璐т綅淇℃伅"); + input.Position = (Convert.ToInt32(input.Position) - 1000).ToString(); } - string toAddress = location.LocationCode; - int taskState = (int)TaskInStatusEnum.Line_InFinish; - int beforeStatus = location.LocationStatus; - // 鏇存柊璐т綅淇℃伅 - location.LocationStatus = (int)LocationEnum.Lock; - - // 鏇存柊浠诲姟淇℃伅 - MapTaskProperties(task, input, toAddress, taskState); - - // 寮�濮嬩簨鍔� - var isResult = await UpdateTaskAsync(task, location, beforeStatus); - if (!isResult) + if (task.TaskType == (int)TaskInboundTypeEnum.InNG) { - _unitOfWorkManage.RollbackTran(); - return content.Error("鏇存柊浠诲姟澶辫触"); + // TODO 鏍规嵁宸烽亾鏌ユ壘瀵瑰簲NG鍙o紝鐜板湪榛樿鍘婚潤缃爢鍨涙満鐨勫紓甯稿彛璐т綅鍙� + task.CurrentAddress = input.Position; + task.TargetAddress = "002-021-000"; + task.NextAddress = "002-021-000"; + task.TaskState = (int)TaskInStatusEnum.Line_InFinish; + bool isResult = await BaseDal.UpdateDataAsync(task); + return content.OK(data: task); } + else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) + { + var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode); + task.CurrentAddress = input.Position; + task.TargetAddress = stockInfo.LocationInfo.LocationCode; + task.NextAddress = stockInfo.LocationInfo.LocationCode; + task.TaskState = (int)TaskInStatusEnum.Line_InFinish; + bool isResult = await BaseDal.UpdateDataAsync(task); + return content.OK(data: task); + } + else + { + var location = await GetLocationDistributeAsync(task.Roadway); + if (location == null) + { + return content.Error("鏃犳硶鑾峰彇璐т綅淇℃伅"); + } - // 鎻愪氦浜嬪姟 - _unitOfWorkManage.CommitTran(); - return content.OK(data: task); + string toAddress = location.LocationCode; + int taskState = (int)TaskInStatusEnum.Line_InFinish; + int beforeStatus = location.LocationStatus; + // 鏇存柊璐т綅淇℃伅 + location.LocationStatus = (int)LocationEnum.Lock; + + // 鏇存柊浠诲姟淇℃伅 + MapTaskProperties(task, input, toAddress, taskState); + + // 寮�濮嬩簨鍔� + var isResult = await UpdateTaskAsync(task, location, beforeStatus); + if (!isResult) + { + _unitOfWorkManage.RollbackTran(); + return content.Error("鏇存柊浠诲姟澶辫触"); + } + + // 鎻愪氦浜嬪姟 + _unitOfWorkManage.CommitTran(); + return content.OK(data: task); + } + } + catch (Exception ex) + { + // 鍥炴粴浜嬪姟 + _unitOfWorkManage.RollbackTran(); + // 杩欓噷鍙互娣诲姞鏃ュ織璁板綍 + return new WebResponseContent().Error($"鏇存柊浠诲姟鏃跺彂鐢熼敊璇�: {ex.Message}"); } } - catch (Exception ex) + catch (Exception) { - // 鍥炴粴浜嬪姟 - _unitOfWorkManage.RollbackTran(); - // 杩欓噷鍙互娣诲姞鏃ュ織璁板綍 - return new WebResponseContent().Error($"鏇存柊浠诲姟鏃跺彂鐢熼敊璇�: {ex.Message}"); + + throw; } + finally { _semaphoreUpdate.Release(); } } private void MapTaskProperties(Dt_Task task, RequestTaskDto input, string toAddress, int taskState) @@ -2223,7 +2275,7 @@ /// <param name="process">宸烽亾</param> /// <param name="flag">鏍囪瘑锛�0-鍏ュ簱锛�1-绌烘墭鐩樺叆搴擄紝2-NG鍏ュ簱锛�3-鍑哄簱锛�</param> /// <returns></returns> - private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<string> process = null, int flag = 0) + private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, string productionLine, List<string> process = null, int flag = 0) { WebResponseContent content = new WebResponseContent(); @@ -2251,7 +2303,8 @@ TaskState = flag == 3 ? (int)TaskOutStatusEnum.OutNew : (int)TaskInStatusEnum.InNew, TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : flag == 1 ? (int)TaskInboundTypeEnum.InTray : flag == 2 ? (int)TaskInboundTypeEnum.InNG : (int)TaskOutboundTypeEnum.Outbound, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = productionLine }; // 灏濊瘯娣诲姞鏂颁换鍔� @@ -2280,6 +2333,7 @@ TaskState = task.TaskState.Value, Id = 0, TaskType = task.TaskType, + ProductionLine = task.ProductionLine }; content.OK(data: taskDTO); } diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs index 40ef704..7e35a13 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs @@ -14,6 +14,7 @@ using WIDESEA_StorageTaskRepository; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob.Models; namespace WIDESEA_StorageTaskServices; @@ -39,18 +40,20 @@ //if (task.TaskState == (int)TaskInStatusEnum.InNew) { // 鍒涘缓WMS浠诲姟 - WMSTaskDTO taskDTO = new WMSTaskDTO() - { - TaskNum = task.TaskNum.Value, - Grade = 1, - PalletCode = task.PalletCode, - RoadWay = task.Roadway, - SourceAddress = task.SourceAddress, - TargetAddress = task.TargetAddress, - TaskState = task.TaskState.Value, - Id = 0, - TaskType = task.TaskType, - }; + //WMSTaskDTO taskDTO = new WMSTaskDTO() + //{ + // TaskNum = task.TaskNum.Value, + // Grade = 1, + // PalletCode = task.PalletCode, + // RoadWay = task.Roadway, + // SourceAddress = task.SourceAddress, + // TargetAddress = task.TargetAddress, + // TaskState = task.TaskState.Value, + // Id = 0, + // TaskType = task.TaskType, + // ProductionLine = task.ProductionLine, + //}; + WMSTaskDTO taskDTO = CreateTaskDTO(task); return content.OK(data: taskDTO); } } @@ -108,6 +111,7 @@ TaskState = task.TaskState.Value, Id = 0, TaskType = task.TaskType, + ProductionLine = task.ProductionLine }; content.OK(data: taskDTO); } @@ -204,7 +208,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskOutboundTypeEnum.InToOut, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; return taskNG; } @@ -261,7 +266,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskOutboundTypeEnum.InToOut, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; return taskNG; } @@ -293,7 +299,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskOutboundTypeEnum.InToOut, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; return task; } @@ -324,26 +331,33 @@ if (locationInfo == null) throw new Exception("搴撲綅宸叉弧"); + // 鍒涘缓涓�涓猅rayCellsStatusDto瀵硅薄锛屽苟璧嬪�� + TrayCellsStatusDto trayCells = new TrayCellsStatusDto() + { + Software = "WMS", + TrayBarcode = input.PalletCode, + //EquipmentCode = "EQ_CWJZ01" + EquipmentCode = input.EquiCodeMOM + }; + + // 璋冪敤GetTrayCellStatusAsync鏂规硶锛岃幏鍙栨暣鐩樼數鑺� + WebResponseContent content = await GetTrayCellStatusAsync(trayCells); + // 濡傛灉鐘舵�佷负false锛屽垯杩斿洖content + if (!content.Status) throw new Exception(content.Message); + + // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄 + var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); + + if (stationManager.stationType == 6 && result.ProductionLine.IsNullOrEmpty()) + { + ConsoleHelper.WriteErrorLine($"褰撳墠鎵樼洏鏃犱骇绾�,鑱旂郴MOM娣诲姞浜х嚎"); + throw new Exception("褰撳墠鎵樼洏鏃犱骇绾�,鑱旂郴MOM娣诲姞浜х嚎"); + } + if (stationManager.stationType == 1) { #region - // 鍒涘缓涓�涓猅rayCellsStatusDto瀵硅薄锛屽苟璧嬪�� - TrayCellsStatusDto trayCells = new TrayCellsStatusDto() - { - Software = "WMS", - TrayBarcode = input.PalletCode, - //EquipmentCode = "EQ_CWJZ01" - EquipmentCode = input.EquiCodeMOM - }; - // 璋冪敤GetTrayCellStatusAsync鏂规硶锛岃幏鍙栨暣鐩樼數鑺� - WebResponseContent content = await GetTrayCellStatusAsync(trayCells); - // 濡傛灉鐘舵�佷负false锛屽垯杩斿洖content - if (!content.Status) throw new Exception(content.Message); - - // 娣诲姞缁勭洏淇℃伅 - // 灏哻ontent.Data杞崲涓篟esultTrayCellsStatus瀵硅薄 - var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); if (result.SerialNos.Count <= 0) { ConsoleHelper.WriteErrorLine(result.MOMMessage); @@ -362,7 +376,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskOutboundTypeEnum.InToOut, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine }; return taskNG; } @@ -410,7 +425,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = stationManager.stationType == 1 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine, }; int lastStatus = locationInfo.LocationStatus; ConsoleHelper.WriteSuccessLine($"淇敼鍓嶏細" + lastStatus.ToString()); @@ -544,7 +560,8 @@ TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = (int)TaskOutboundTypeEnum.OutTray, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = stockinfo.ProductionLine, }; return task; @@ -635,7 +652,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.InTray, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine, }; return Epmtytask; } @@ -695,7 +713,8 @@ TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.Inbound, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = result.ProductionLine, }; var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -859,7 +878,7 @@ var location = locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault(); - var stockInfo = await QueryStockInfoForEmptyTrayAsync("CWSC1","10086"); + var stockInfo = await QueryStockInfoForEmptyTrayFRAsync("CWSC1", "10086", taskDTO.ProductionLine); if (stockInfo != null) { @@ -895,6 +914,43 @@ return content; } + /// <summary> + /// 鏌ヨ绌虹洏搴撳瓨淇℃伅 + /// </summary> + private async Task<DtStockInfo> QueryStockInfoForEmptyTrayFRAsync(string areaCode, string position, string productLine) + { + var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == areaCode); + + ConsoleHelper.WriteColorLine(position + "..." + areaCode, ConsoleColor.Magenta); + var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == position && x.stationType == 17); + + ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta); + var stackers = station.Roadway.Split(',').ToList(); + + + var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() + .Where(x => x.DeviceStatus == "1") + .Where(x => stackers.Contains(x.DeviceCode)) + .ToList(); + + var deviceCode = devices.Select(x => x.DeviceCode).ToList(); + + var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo + .Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails + .Where(x => x.ProductionLine == productLine) + .Where(x => x.AreaCode == areaCode && x.IsFull == false) + .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "绌烘墭鐩�")) + .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 + .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) + .OrderBy(x => x.CreateDate) // 鎺掑簭 + .FirstAsync(); // 杞崲涓哄垪琛� + + //var firstOrDefault = result[0]; // 鏌ユ壘绗竴涓尮閰嶇殑鍏冪礌 + //return firstOrDefault; + return result; + } + #endregion public async Task<WebResponseContent> RequestOutTaskToBZAsync(RequestTaskDto json) @@ -905,6 +961,7 @@ Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call"); var stockInfo = _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Where(x => x.ProductionLine == station.productLine) .Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true) // 杩囨护鏉′欢 .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock) // 杩囨护鏉′欢 @@ -934,7 +991,8 @@ TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = (int)TaskOutboundTypeEnum.Outbound, TaskNum = await BaseDal.GetTaskNo(), - Creater = "Systeam" + Creater = "Systeam", + ProductionLine = stockInfo.ProductionLine, }; WMSTaskDTO taskDTO = CreateTaskDTO(task); diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs index 2ea4892..771d001 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs @@ -61,7 +61,7 @@ var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker"); var strings = config.ConfigValue.Split(',').ToList(); // 鍏ュ簱閫佽嚦甯告俯3 - var resultContent = await CreateNewTask(input, strings); + var resultContent = await CreateNewTask(input, input.ProductionLine, strings); if (resultContent.Status) { await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -75,14 +75,14 @@ { // 閫佽嚦鍖呰 List<string> strings = stationManagers.Where(x => x.stationType == 0).Select(x => x.Roadway).ToList(); - return await CreateNewTask(input, strings, 3); + return await CreateNewTask(input, input.ProductionLine, strings, 3); } else { var config = _configService.GetByConfigKey("SYS_InStacker", "CW3InStacker"); var strings = config.ConfigValue.Split(',').ToList(); // 鍏ュ簱閫佽嚦甯告俯3 - var resultContent = await CreateNewTask(input, strings); + var resultContent = await CreateNewTask(input, input.ProductionLine, strings); if (resultContent.Status) { await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -138,7 +138,7 @@ } List<string> strings = stationManagers.Roadway.Split(',').ToList(); - var resultContent = await CreateNewTask(input, strings); + var resultContent = await CreateNewTask(input, result.ProductionLine, strings); if (resultContent.Status) { var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing); @@ -200,7 +200,7 @@ // NGStation = stationManagers.stationNGChildCode.Split(',').ToList(); //} List<string> NGStation = stationManagers.stationNGChildCode.Split(',').ToList(); - content = await CreateNewTask(input, NGStation, 2); + content = await CreateNewTask(input, input.ProductionLine, NGStation, 2); return content.Error("瀛樺湪寮傚父鐢佃姱"); } @@ -230,7 +230,8 @@ TargetAddress = task.Roadway, TaskState = task.TaskState.Value, Id = 0, - TaskType = task.TaskType + TaskType = task.TaskType, + ProductionLine = task.ProductionLine, }; return new WebResponseContent().OK(data: taskDTO); } diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\206\240\345\256\207MOM\351\241\271\347\233\256\346\226\271\346\241\210\350\256\276\350\256\241\350\247\204\346\240\274\344\271\246_\347\224\265\350\212\257\346\256\265_\133\345\210\233\346\231\272\351\235\231\347\275\256\351\231\210\345\214\226\345\267\245\345\272\217\135_\350\256\276\345\244\207\351\233\206\346\210\220\346\250\241\345\235\227_v1.2@20250208\0501\051.pdf" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\206\240\345\256\207MOM\351\241\271\347\233\256\346\226\271\346\241\210\350\256\276\350\256\241\350\247\204\346\240\274\344\271\246_\347\224\265\350\212\257\346\256\265_\133\345\210\233\346\231\272\351\235\231\347\275\256\351\231\210\345\214\226\345\267\245\345\272\217\135_\350\256\276\345\244\207\351\233\206\346\210\220\346\250\241\345\235\227_v1.2@20250208\0501\051.pdf" new file mode 100644 index 0000000..52da981 --- /dev/null +++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\345\206\240\345\256\207MOM\351\241\271\347\233\256\346\226\271\346\241\210\350\256\276\350\256\241\350\247\204\346\240\274\344\271\246_\347\224\265\350\212\257\346\256\265_\133\345\210\233\346\231\272\351\235\231\347\275\256\351\231\210\345\214\226\345\267\245\345\272\217\135_\350\256\276\345\244\207\351\233\206\346\210\220\346\250\241\345\235\227_v1.2@20250208\0501\051.pdf" Binary files differ -- Gitblit v1.9.3