From ce4a2fbe3a3b4b423b13080293787bc99ce07da9 Mon Sep 17 00:00:00 2001 From: hehaibing-1996 Date: Sat, 21 Dec 2024 18:46:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=85=A4=E7=A7=91=E9=99=A2=E7=8E=B0=E5=9C=BA?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WCS.BLL/DbModels/Task/CurrentTask.cs | 13 +- WCS.BLL/DbModels/Task/FinishedTask.cs | 13 +- WCS.BLL/DbModels/Task/UploadedTask.cs | 13 +- WCS.BLL/HardWare/MXL4Shelf.cs | 230 +++++++++-------- WCS.BLL/HardWare/MXL4ShelfModule.cs | 2 +- WCS.BLL/Manager/DbInit.cs | 2 +- WCS.BLL/Manager/MKYBackgroundThread.cs | 234 ++++++++++++++++++ WCS.BLL/Services/Service/MXL4Service.cs | 38 ++- .../MKYBackgroundThread/SysOrderRequest.cs | 35 +++ .../MKYBackgroundThread/SysOrderResponse.cs | 13 + .../ApiModel/MXL4/SysOrderMXL4Request.cs | 7 +- WCS.WebApi/Program.cs | 4 +- 12 files changed, 468 insertions(+), 136 deletions(-) create mode 100644 WCS.BLL/Manager/MKYBackgroundThread.cs create mode 100644 WCS.Model/ApiModel/MKYBackgroundThread/SysOrderRequest.cs create mode 100644 WCS.Model/ApiModel/MKYBackgroundThread/SysOrderResponse.cs diff --git a/WCS.BLL/DbModels/Task/CurrentTask.cs b/WCS.BLL/DbModels/Task/CurrentTask.cs index babd6f9..6924eb5 100644 --- a/WCS.BLL/DbModels/Task/CurrentTask.cs +++ b/WCS.BLL/DbModels/Task/CurrentTask.cs @@ -50,17 +50,14 @@ namespace WCS.BLL.DbModels /// /// 入库的库位表ID /// - [SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")] + [SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")] public int StoreId { get; set; } /// /// 入库的库位编码 /// - [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")] + [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")] public string StoreCode { get; set; } - - [Navigate(NavigateType.OneToOne, nameof(StoreId))] - public StoreInfo StoreInfo { get; set; } #endregion #region 任务属性 @@ -70,6 +67,10 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")] public int TaskID { get; set; } = 0; + ///真主键 + [SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] + public string ItemNo { get; set; } = string.Empty; + /// /// Guid /// @@ -85,7 +86,7 @@ namespace WCS.BLL.DbModels /// /// 出库单据号 /// - [SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")] + [SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] public string OrderNumber { get; set; } /// diff --git a/WCS.BLL/DbModels/Task/FinishedTask.cs b/WCS.BLL/DbModels/Task/FinishedTask.cs index d322da4..9127cd9 100644 --- a/WCS.BLL/DbModels/Task/FinishedTask.cs +++ b/WCS.BLL/DbModels/Task/FinishedTask.cs @@ -48,17 +48,14 @@ namespace WCS.BLL.DbModels /// /// 入库的库位表ID /// - [SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")] + [SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")] public int StoreId { get; set; } /// /// 入库的库位编码 /// - [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")] + [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")] public string StoreCode { get; set; } - - [Navigate(NavigateType.OneToOne, nameof(StoreId))] - public StoreInfo StoreInfo { get; set; } #endregion #region 任务属性 @@ -68,6 +65,10 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")] public int TaskID { get; set; } + ///真主键 + [SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] + public string ItemNo { get; set; } = string.Empty; + /// /// Guid /// @@ -83,7 +84,7 @@ namespace WCS.BLL.DbModels /// /// 出库单据号 /// - [SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")] + [SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] public string OrderNumber { get; set; } /// diff --git a/WCS.BLL/DbModels/Task/UploadedTask.cs b/WCS.BLL/DbModels/Task/UploadedTask.cs index 7d520e8..fee2a6d 100644 --- a/WCS.BLL/DbModels/Task/UploadedTask.cs +++ b/WCS.BLL/DbModels/Task/UploadedTask.cs @@ -49,17 +49,14 @@ namespace WCS.BLL.DbModels /// /// 入库的库位表ID /// - [SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")] + [SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")] public int StoreId { get; set; } /// /// 入库的库位编码 /// - [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")] + [SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")] public string StoreCode { get; set; } - - [Navigate(NavigateType.OneToOne, nameof(StoreId))] - public StoreInfo StoreInfo { get; set; } #endregion #region 任务属性 @@ -69,6 +66,10 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")] public int TaskID { get; set; } + ///真主键 + [SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] + public string ItemNo { get; set; } = string.Empty; + /// /// Guid /// @@ -84,7 +85,7 @@ namespace WCS.BLL.DbModels /// /// 出库单据号 /// - [SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")] + [SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")] public string OrderNumber { get; set; } /// diff --git a/WCS.BLL/HardWare/MXL4Shelf.cs b/WCS.BLL/HardWare/MXL4Shelf.cs index 3b6c6f3..9a286a9 100644 --- a/WCS.BLL/HardWare/MXL4Shelf.cs +++ b/WCS.BLL/HardWare/MXL4Shelf.cs @@ -45,7 +45,7 @@ namespace WCS.BLL.HardWare ModuleCode = module.ModuleCode, BoardId = module.BoardId, IsEnable = module.IsEnable, - CurrentMode = module.CurrentMode + CurrentMode = TaskModeEnum.待机模式 }); } ModulesStr = string.Join(";", MXL4Modules.Select(t => t.ModuleCode)); @@ -70,73 +70,129 @@ namespace WCS.BLL.HardWare await Task.Delay(2000); continue; } + + //查询属于本货架的任务 + var currentShelfTasks = DbHelp.db.Queryable() + .Where(t => t.ShelfId == this.ShelfId) + .Where(t => t.IsSended == false) + .OrderBy(t => t.CreateTime) + .ToList(); + //获取因为任务需要刷新的module + var haveTaskModules = currentShelfTasks.Select(t => t.ModuleId).Distinct().ToList(); + MXL4Modules.ForEach(t => + { + if (haveTaskModules.Contains(t.ModuleId)) + { t.IsNeedRefresh = true; } + }); + //查询是否有需要刷新的 var needRefreshModules = MXL4Modules.Where(t => t.IsNeedRefresh) .ToList(); foreach (var module in needRefreshModules) { - //查询当前是否有任务 - var currentTasks = DbHelp.db.Queryable() - .Where(t => t.ModuleId == module.ModuleId) - .Where(t => t.IsSended == false) - .OrderBy(t => t.CreateTime) - .ToList(); - //入库、出库、盘点等任务 - if (currentTasks != null && currentTasks.Count > 0) + try { - var firstTask = currentTasks.First(); - var taskMode = currentTasks.First().TaskMode; - #region 处理模组的模式 没有Continue - if (module.CurrentMode == TaskModeEnum.待机模式) + //查询当前是否有任务 + var currentTasks = currentShelfTasks.Where(t => t.ModuleId == module.ModuleId) + .OrderBy(t => t.CreateTime) + .ToList(); + //入库、出库、盘点等任务 + if (currentTasks != null && currentTasks.Count > 0) { - //进入对应模式 - switch (taskMode) + var firstTask = currentTasks.First(); + var taskMode = currentTasks.First().TaskMode; + #region 处理模组的模式 没有Continue + if (module.CurrentMode == TaskModeEnum.待机模式) { - case (TaskModeEnum.入库模式): - module.GoInInstoreMode(TcpCleint); - break; - case (TaskModeEnum.出库模式): - module.GoInOutstoreMode(TcpCleint); - break; - case (TaskModeEnum.盘点模式): - module.GoInStocktakingMode(TcpCleint); - break; - default: - break; + //进入对应模式 + switch (taskMode) + { + case (TaskModeEnum.入库模式): + module.GoInInstoreMode(TcpCleint); + break; + case (TaskModeEnum.出库模式): + module.GoInOutstoreMode(TcpCleint); + break; + case (TaskModeEnum.盘点模式): + module.GoInStocktakingMode(TcpCleint); + break; + default: + break; + } + //等待10ms这边将状态成功更新了来 + await Task.Delay(10); } - //等待10ms这边将状态成功更新了来 - await Task.Delay(10); - } - else - { - taskMode = module.CurrentMode; - } - #endregion - - //只显示当前模式的任务 - currentTasks = currentTasks.Where(t => t.TaskMode == taskMode).ToList(); - //这个分支应该很少跑到 有刷新必然有新任务 - if (currentTasks == null || currentTasks.Count == 0) - { - Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!"); - var tasks = DbHelp.db.Queryable() - .Where(t => t.ModuleId == module.ModuleId) - .Where(t => t.IsSended == true) - .Where(t => t.TaskMode == taskMode) - .OrderBy(t => t.CreateTime) - .ToList(); - if (tasks != null && tasks.Count > 0) - { - Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!有已发送的任务未完成故不处理!"); - module.IsNeedRefresh = false; - continue; - } - //退出对应模式到待机模式! 后续持续刷新数据! else { - Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!没有已发送未完成的任务!退出当前模式!"); + taskMode = module.CurrentMode; + } + #endregion + + //只显示当前模式的任务 + currentTasks = currentTasks.Where(t => t.TaskMode == taskMode).ToList(); + //这个分支应该很少跑到 有刷新必然有新任务 + if (currentTasks == null || currentTasks.Count == 0) + { + Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!"); + var tasks = DbHelp.db.Queryable() + .Where(t => t.ModuleId == module.ModuleId) + .Where(t => t.IsSended == true) + .Where(t => t.TaskMode == taskMode) + .OrderBy(t => t.CreateTime) + .ToList(); + if (tasks != null && tasks.Count > 0) + { + Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!有已发送的任务未完成故不处理!"); + module.IsNeedRefresh = false; + continue; + } + //退出对应模式到待机模式! 后续持续刷新数据! + else + { + Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!没有已发送未完成的任务!退出当前模式!"); + // 退出对应模式 + switch (taskMode) + { + case (TaskModeEnum.入库模式): + module.GoOutInstoreMode(TcpCleint); + break; + case (TaskModeEnum.出库模式): + module.GoOutOutstoreMode(TcpCleint); + break; + case (TaskModeEnum.盘点模式): + module.GoOutStocktakingMode(TcpCleint); + break; + default: + break; + } + continue; + } + } + //按照任务顺序给其发送数据 + foreach (var currentTask in currentTasks) + { + module.SendTaskId(currentTask.TaskID, TcpCleint); + module.SendMatCode(currentTask.MatCode, TcpCleint); + module.SendMatName(currentTask.MatName, TcpCleint); + module.SendMatSpec(currentTask.MatSpec, TcpCleint); + module.SendMatBatch(currentTask.MatBatch, TcpCleint); + module.SendMatQty(currentTask.Qty, TcpCleint); + + currentTask.IsSended = true; + DbHelp.db.Updateable(currentTask).ExecuteCommand(); + } + //发送完毕后就不刷新了 + module.IsNeedRefresh = false; + continue; + } + //不存在入库、出库、盘点等任务 应该变成待机 + else + { + //退出对应模式到待机模式! 后续持续刷新数据! + if (module.CurrentMode != TaskModeEnum.待机模式) + { // 退出对应模式 - switch (taskMode) + switch (module.CurrentMode) { case (TaskModeEnum.入库模式): module.GoOutInstoreMode(TcpCleint); @@ -152,57 +208,23 @@ namespace WCS.BLL.HardWare } continue; } - } - //按照任务顺序给其发送数据 - foreach (var currentTask in currentTasks) - { - module.SendTaskId(currentTask.TaskID, TcpCleint); - module.SendMatCode(currentTask.MatCode, TcpCleint); - module.SendMatName(currentTask.MatName, TcpCleint); - module.SendMatSpec(currentTask.MatSpec, TcpCleint); - module.SendMatBatch(currentTask.MatBatch, TcpCleint); - module.SendMatQty(currentTask.Qty, TcpCleint); - currentTask.IsSended = true; - DbHelp.db.Updateable(currentTask).ExecuteCommand(); + //向上层系统获取数据 + + //获取成功 有数据 绑定对应数据 + + //获取成功 无数据 + module.StandbyNoInfoDisplay(TcpCleint); + module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件 + //获取失败 跳过此次循环后继续获取 } - //发送完毕后就不刷新了 - module.IsNeedRefresh = false; - continue; } - //不存在入库、出库、盘点等任务 应该变成待机 - else + catch (Exception ex) { - //退出对应模式到待机模式! 后续持续刷新数据! - if (module.CurrentMode != TaskModeEnum.待机模式) - { - // 退出对应模式 - switch (module.CurrentMode) - { - case (TaskModeEnum.入库模式): - module.GoOutInstoreMode(TcpCleint); - break; - case (TaskModeEnum.出库模式): - module.GoOutOutstoreMode(TcpCleint); - break; - case (TaskModeEnum.盘点模式): - module.GoOutStocktakingMode(TcpCleint); - break; - default: - break; - } - continue; - } - //向上层系统获取数据 - - //获取成功 有数据 绑定对应数据 - - //获取成功 无数据 - module.StandbyNoInfoDisplay(TcpCleint); - module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件 - //获取失败 跳过此次循环后继续获取 + Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}"); } + } } catch (Exception ex) @@ -429,13 +451,14 @@ namespace WCS.BLL.HardWare .FirstOrDefault(); if (module != null) { + module.SetCurrentMode(TaskModeEnum.待机模式); module.IsNeedRefresh = true; } else { Logs.Write($"【回到待机模式】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!"); } - + //TO DO 所有退出后货架才待机 SetCurrentMode(TaskModeEnum.待机模式); } /// @@ -526,6 +549,7 @@ namespace WCS.BLL.HardWare StoreCode = task.StoreCode, TaskID = task.TaskID, Guid = task.Guid, + ItemNo = task.ItemNo, TaskMode = task.TaskMode, OrderNumber = task.OrderNumber, ButtonColor = task.ButtonColor, @@ -583,6 +607,7 @@ namespace WCS.BLL.HardWare StoreCode = task.StoreCode, TaskID = task.TaskID, Guid = task.Guid, + ItemNo = task.ItemNo, TaskMode = task.TaskMode, OrderNumber = task.OrderNumber, ButtonColor = task.ButtonColor, @@ -640,6 +665,7 @@ namespace WCS.BLL.HardWare StoreCode = task.StoreCode, TaskID = task.TaskID, Guid = task.Guid, + ItemNo = task.ItemNo, TaskMode = task.TaskMode, OrderNumber = task.OrderNumber, ButtonColor = task.ButtonColor, diff --git a/WCS.BLL/HardWare/MXL4ShelfModule.cs b/WCS.BLL/HardWare/MXL4ShelfModule.cs index 59d49bd..06239d6 100644 --- a/WCS.BLL/HardWare/MXL4ShelfModule.cs +++ b/WCS.BLL/HardWare/MXL4ShelfModule.cs @@ -87,7 +87,7 @@ namespace WCS.BLL.HardWare public string ModuleCode { get; set; } public int BoardId { get; set; } public bool IsEnable { get; set; } - public TaskModeEnum CurrentMode { get; set; } + public TaskModeEnum CurrentMode { get; set; } = TaskModeEnum.待机模式; public bool IsNeedRefresh { get; set; } = true; diff --git a/WCS.BLL/Manager/DbInit.cs b/WCS.BLL/Manager/DbInit.cs index dae313c..59a6c93 100644 --- a/WCS.BLL/Manager/DbInit.cs +++ b/WCS.BLL/Manager/DbInit.cs @@ -62,7 +62,7 @@ namespace WCS.BLL.Manager } //手动修改后台配置后再进行CodeFirst 数据库的生成、表的生成 //如果不配置此参数 每次启动都会持续几十秒才能成功启动后端 - if (LocalFile.Config.IsResetDBOrTable) + if (true) { #region 建库建表 只在表有变动时运行 DbHelp.db.DbMaintenance.CreateDatabase(); diff --git a/WCS.BLL/Manager/MKYBackgroundThread.cs b/WCS.BLL/Manager/MKYBackgroundThread.cs new file mode 100644 index 0000000..6513378 --- /dev/null +++ b/WCS.BLL/Manager/MKYBackgroundThread.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WCS.BLL.DbModels.Task; +using WCS.BLL.DbModels; +using WCS.BLL.HardWare; +using WCS.DAL.Db.AuthDb; +using WCS.DAL.Db; +using WCS.DAL; +using WCS.Model.ApiModel.InOutRecord; +using WCS.Model.ApiModel.MXBackgroundThread; +using WCS.Model; +using WCS.BLL.Tool; +using SqlSugar; +using WCS.BLL.Config; +using WCS.Model.ApiModel.MKYBackgroundThread; +using System.Text.RegularExpressions; +using System.Reflection; + +namespace WCS.BLL.Manager +{ + public static class MKYBackgroundThread + { + public static void InitBackgroundThread() + { + #region 调用WMS接口获取具体的库存列表并展示在液晶标签上 + Task.Run(() => + { + while (true) + { + //每5秒同步一次 + Thread.Sleep(5000); + try + { + + } + catch (Exception ex) + { + Logs.Write("【定时任务】刷新库存显示时发生异常!" + ex.Message); + } + } + }); + #endregion + + #region 定时任务:回传数据至WMS系统 + Task.Run(() => + { + while (true) + { + //回传数据的时间间隔 + Thread.Sleep(2000); + try + { + //获取已完成未提交的任务 + var finsishedTaks = DbHelp.db.Queryable() + .Where(t => t.FinishTime > DateTime.Now.AddDays(-1))//只上传1天内的 后续调整 + .OrderBy(t => t.FinishTime) + .ToList(); + //循环进行上传 + for (int i = 0; i < finsishedTaks.Count; i++) + { + var finishedTask = finsishedTaks[i]; + try + { + //////上传单据 + ////#region 上传单据 + ////var request = new SysOrderRequest() + ////{ + //// guid = finishedTask.Guid.ToString(), + //// itemNo = finishedTask.ItemNo, + //// matCode = finishedTask.MatCode, + //// matBatch = finishedTask.MatBatch, + //// matSN = finishedTask.MatSN, + //// orderNumber = finishedTask.OrderNumber, + //// orderType = (int)finishedTask.TaskMode, + //// storeCode = finishedTask.StoreCode, + //// qty = finishedTask.Qty, + ////}; + ////var result = ApiHelp.GetDataFromHttp(@"http://172.16.129.8:8989/ztwcs/stockBillBack", request, "POST", true); + ////if (result != null && (result.code == 200)) + ////{ + //// //上传成功 + //// var uploadedTask = new UploadededTask() + //// { + //// ShelfId = finishedTask.ShelfId, + //// ShelfCode = finishedTask.ShelfCode, + //// ModuleId = finishedTask.ModuleId, + //// ModuleCode = finishedTask.ModuleCode, + //// StoreId = finishedTask.StoreId, + //// StoreCode = finishedTask.StoreCode, + //// TaskID = finishedTask.TaskID, + //// ItemNo = finishedTask.ItemNo, + //// Guid = finishedTask.Guid, + //// TaskMode = finishedTask.TaskMode, + //// OrderNumber = finishedTask.OrderNumber, + //// ButtonColor = finishedTask.ButtonColor, + //// MatCode = finishedTask.MatCode, + //// MatName = finishedTask.MatName, + //// MatSpec = finishedTask.MatSpec, + //// MatBatch = finishedTask.MatBatch, + //// MatSN = finishedTask.MatSN, + //// Qty = finishedTask.Qty, + //// CreateTime = finishedTask.CreateTime, + //// FinishQty = finishedTask.FinishQty, + //// FinishTime = finishedTask.FinishTime, + //// UploadTime = DateTime.Now, + //// }; + //// DbHelp.db.Insertable(uploadedTask).ExecuteCommand(); + //// DbHelp.db.Deleteable(finishedTask).ExecuteCommand(); + ////} + ////#endregion + + //为了调试 + Random random = new Random(); + int number = random.Next(1 , 100); + if (number <= 30) + { + //上传成功 + var uploadedTask = new UploadededTask() + { + ShelfId = finishedTask.ShelfId, + ShelfCode = finishedTask.ShelfCode, + ModuleId = finishedTask.ModuleId, + ModuleCode = finishedTask.ModuleCode, + StoreId = finishedTask.StoreId, + StoreCode = finishedTask.StoreCode, + TaskID = finishedTask.TaskID, + ItemNo = finishedTask.ItemNo, + Guid = finishedTask.Guid, + TaskMode = finishedTask.TaskMode, + OrderNumber = finishedTask.OrderNumber, + ButtonColor = finishedTask.ButtonColor, + MatCode = finishedTask.MatCode, + MatName = finishedTask.MatName, + MatSpec = finishedTask.MatSpec, + MatBatch = finishedTask.MatBatch, + MatSN = finishedTask.MatSN, + Qty = finishedTask.Qty, + CreateTime = finishedTask.CreateTime, + FinishQty = finishedTask.FinishQty, + FinishTime = finishedTask.FinishTime, + UploadTime = DateTime.Now, + }; + DbHelp.db.Insertable(uploadedTask).ExecuteCommand(); + DbHelp.db.Deleteable(finishedTask).ExecuteCommand(); + } + + } + catch (Exception ex) + { + Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常," + ex.Message, LogsType.Info); + Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常" + ex.StackTrace, LogsType.Info); + } + Thread.Sleep(500); + } + } + catch (Exception e) + { + Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.Message, LogsType.Info); + Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.StackTrace, LogsType.Info); + } + } + }); + #endregion + + + + //#region 定时任务:监测警示灯关灯机制 + ////判断灯颜色和模式是否对应 + //Task.Run(() => + //{ + // while (true) + // { + // //间隔5秒查询一次 + // Thread.Sleep(5000); + // try + // { + // //待机模式未关灯 + // var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.待机模式 && t.LightColor != WarningLight.LightColorEnum.关闭) + // .Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5)) + // .ToList(); + // foreach (var shelf in shelves) + // { + // try + // { + // if (shelf is SmartShelf) + // { + // var smartShelf = (SmartShelf)shelf; + // if (smartShelf.IsWarning == false) + // { + // smartShelf?.WarningLight.CloseLight(smartShelf.TcpCleint); + // Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发送指令成功!"); + // } + // } + // } + // catch (Exception ex) + // { + // Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发生异常" + ex.Message); + // } + // } + + // //出库模式未亮灯 + // var outShelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.LightColor == WarningLight.LightColorEnum.关闭) + // .Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5)) + // .ToList(); + // foreach (var shelf in outShelves) + // { + // try + // { + // if (shelf is SmartShelf) + // { + // var smartShelf = (SmartShelf)shelf; + // smartShelf?.WarningLight.GreenLight(smartShelf.TcpCleint); + // Logs.Write($"【定时任务】:监测警示灯关灯机制,出库开灯【{shelf.ShelfCode}】发送指令成功!"); + // } + // } + // catch (Exception ex) + // { + // Logs.Write($"【定时任务】:监测警示灯关灯机制,出库开灯【{shelf.ShelfCode}】发生异常" + ex.Message); + // } + // } + // } + // catch (Exception ex) + // { + // Logs.Write("【定时任务】:监测警示灯关灯机制发生异常" + ex.Message); + // } + // } + //}); + //#endregion + } + } +} diff --git a/WCS.BLL/Services/Service/MXL4Service.cs b/WCS.BLL/Services/Service/MXL4Service.cs index 293ccec..79e66a8 100644 --- a/WCS.BLL/Services/Service/MXL4Service.cs +++ b/WCS.BLL/Services/Service/MXL4Service.cs @@ -39,15 +39,15 @@ namespace WCS.BLL.Services.Service var storeCodeList = request.List.Select(t => t.StoreCode) .Distinct() .ToList(); - var stores = DbHelp.db.Queryable() + var moduleInfo = DbHelp.db.Queryable() .LeftJoin((si, sti) => si.ShelfTypeId == sti.Id) - .Where((si, sti) => sti.ShelfTypeName == "液晶货架") - .Where((si, sti) => storeCodeList.Contains(si.StoreCode)) - .Select((st, sti) => st) + .Where((si, sti) => sti.ShelfTypeName == "液晶标签货架") + .Where((si, sti) => storeCodeList.Contains(si.ModuleCode)) + .Select((si, sti) => si) .ToList(); - if (stores.Count < storeCodeList.Count) + if (moduleInfo.Count < storeCodeList.Count) { - var storeCodesInDB = stores.Select(t => t.StoreCode).ToList(); + var storeCodesInDB = moduleInfo.Select(t => t.ModuleCode).ToList(); storeCodeList.RemoveAll(t => storeCodesInDB.Contains(t)); return new ResponseCommon { @@ -72,20 +72,36 @@ namespace WCS.BLL.Services.Service }; } + //获取taskId + var list = new List() { 1, 2, 3, 4, 5, 6, 7 }; + //已存在的taskID + var exsitIds = currenTasks.Select(t => t.TaskID) + .ToList(); + exsitIds.ForEach(t => + { + list.RemoveAll(l => l == t); + }); + var tasks = new List(); //生成任务数据 foreach (var orderDetail in request.List) { - var store = stores.Where(t => t.StoreCode == orderDetail.StoreCode).First(); + var taskId = list.First(); + list.RemoveAll(l => l == taskId); + + var module = moduleInfo.Where(t => t.ModuleCode == orderDetail.StoreCode).First(); var task = new CurrentTask() { - StoreId = store.Id, - StoreCode = store.StoreCode, - + ModuleId = module.Id, + ModuleCode = module.ModuleCode, + ShelfId = module.ShelfId, + ShelfCode = module.ShelfCode, Guid = orderDetail.Guid, + ItemNo = orderDetail.ItemNo, TaskMode = request.OrderType, OrderNumber = request.OrderNumber, - ButtonColor = request.Corlor, + TaskID = taskId, + ButtonColor = DbModels.Task.ButtonColorEnum.绿色, MatCode = orderDetail.MatCode, MatName = orderDetail.MatName, MatSpec = orderDetail.MatSpec, diff --git a/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderRequest.cs b/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderRequest.cs new file mode 100644 index 0000000..b513dd1 --- /dev/null +++ b/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderRequest.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WCS.Model.ApiModel.MKYBackgroundThread +{ + public class SysOrderRequest + { + public string itemNo { get; set; } + + + public string guid { get; set; } + + + public string matCode { get; set; } + + + public string matBatch { get; set; } + + + public string matSN { get; set; } + + + public string orderNumber { get; set; } + + + public int orderType { get; set; } + + + public string storeCode { get; set; } + + + public int qty { get; set; } + } +} diff --git a/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderResponse.cs b/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderResponse.cs new file mode 100644 index 0000000..35865b4 --- /dev/null +++ b/WCS.Model/ApiModel/MKYBackgroundThread/SysOrderResponse.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WCS.Model.ApiModel.MKYBackgroundThread +{ + public class SysOrderResponse + { + public int code { get; set; } + public string message { get; set; } + public object data { get; set; } + } +} diff --git a/WCS.Model/ApiModel/MXL4/SysOrderMXL4Request.cs b/WCS.Model/ApiModel/MXL4/SysOrderMXL4Request.cs index 56242eb..7d9ea43 100644 --- a/WCS.Model/ApiModel/MXL4/SysOrderMXL4Request.cs +++ b/WCS.Model/ApiModel/MXL4/SysOrderMXL4Request.cs @@ -11,7 +11,7 @@ namespace WCS.Model.ApiModel.MXL4 /// /// 按钮颜色 /// - public ButtonColorEnum Corlor { get; set; } + public string Corlor { get; set; } /// /// 任务单号 @@ -36,6 +36,11 @@ namespace WCS.Model.ApiModel.MXL4 /// public Guid Guid { get; set; } + /// + ///系统那边的主键 + /// + public string ItemNo { get; set; } + /// /// 库位编码 /// diff --git a/WCS.WebApi/Program.cs b/WCS.WebApi/Program.cs index 253dc48..6264b23 100644 --- a/WCS.WebApi/Program.cs +++ b/WCS.WebApi/Program.cs @@ -37,7 +37,8 @@ namespace WebApi ShelfManager.InitShelves(); //Ϣط߳ - WarningManager.StartWarningMessageThread(); + //WarningManager.StartWarningMessageThread(); + MKYBackgroundThread.InitBackgroundThread(); //Ѷ˾̨߳ if (LocalFile.Config.IsMx) @@ -73,7 +74,6 @@ namespace WebApi // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); - builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped();