diff --git a/Tools/CirculateTool/StartCirculation.cs b/Tools/CirculateTool/StartCirculation.cs index 17730ce..3c36bee 100644 --- a/Tools/CirculateTool/StartCirculation.cs +++ b/Tools/CirculateTool/StartCirculation.cs @@ -59,6 +59,8 @@ public class StartCirculation break; } } + /* 执行按时执行的任务 ---- 方法内判断,若没有此类方法则不会执行 */ + StartTimeTask(); } /// @@ -104,8 +106,6 @@ public class StartCirculation } } - /* 执行按时执行的任务 ---- 方法内判断,若没有此类方法则不会执行 */ - StartTimeTask(); } /// diff --git a/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs b/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs index 11128bf..04ea1a1 100644 --- a/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs +++ b/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs @@ -14,43 +14,17 @@ public class DataClear(ClearData clearData) /// 定时清理无用数据, ---- 每隔10分钟清理一次 /// /// - [CirculationTime(["10:11","10:12"], "数据清理")] + [CirculationTime(["14:34"], "数据清理")] public void ClearDataCirculate() { try { - // 清理接口接收记录表 -- 保留多少天 - int apiAcceptCount = clearData.ClearApiAcceptData(30); - ConsoleLog.Tip(apiAcceptCount > 0, $"[数据清理]接口接收记录:{apiAcceptCount}"); - // 清理日志文件 -- 清理多少天之前 - int logCount = clearData.ClearLogFile(60); + int logCount = clearData.ClearLogFile(100); ConsoleLog.Tip(logCount > 0, $"[数据清理]日志文件:{logCount}"); - // 清理接口请求记录表 -- 保留多少天 - int apiRequestCount = clearData.ClearApiRequestData(30); - ConsoleLog.Tip(apiRequestCount > 0, $"[数据清理]接口请求记录:{apiRequestCount}"); - - // 清理WCS任务备份表 -- 保留多少天 - int apiWcsTaskCount = clearData.ClearWcsTaskData(30); - ConsoleLog.Tip(apiWcsTaskCount > 0, $"[数据清理]WCS任务备份记录:{apiWcsTaskCount}"); - - // 清理WMS任务表 -- 保留多少天 - int apiWmsTaskCount = clearData.ClearWmsTaskData(30); - ConsoleLog.Tip(apiWmsTaskCount > 0, $"[数据清理]WMS任务记录:{apiWmsTaskCount}"); - - // 清理电子标签任务 - int clearElTagCount = clearData.ClearElTagTaskData(30); - ConsoleLog.Tip(clearElTagCount > 0, $"[数据清理]电子标签任务记录:{apiWmsTaskCount}"); - - /// 清理箱式线任务 - int clearConveyTaskCount = clearData.ClearConveyTaskData(30); - ConsoleLog.Tip(clearConveyTaskCount > 0, $"[数据清理]箱式线任务记录:{apiWmsTaskCount}"); - - // 清理扫码记录表 -- 保留多少天 - int clearScanRecord = clearData.ClearScanRecordData(15); - ConsoleLog.Tip(clearScanRecord > 0, $"[数据清理]清理扫码记录:{clearScanRecord}"); - + // 清理数据库 + clearData.ClearDataBase(); } catch (Exception ex) { diff --git a/WcsMain/Business/CommonAction/ClearData.cs b/WcsMain/Business/CommonAction/ClearData.cs index 113704a..47b2c30 100644 --- a/WcsMain/Business/CommonAction/ClearData.cs +++ b/WcsMain/Business/CommonAction/ClearData.cs @@ -1,6 +1,10 @@ using WcsMain.ExtendMethod; using WcsMain.DataBase.Dao; using WcsMain.WcsAttribute.AutoFacAttribute; +using System.Reflection; +using SqlSugar; +using WcsMain.WcsAttribute.Clear; +using WcsMain.Common; namespace WcsMain.Business.CommonAction; @@ -11,6 +15,37 @@ namespace WcsMain.Business.CommonAction; public class ClearData(AppWmsTaskDao wmsTaskDao, AppWcsTaskDao wcsTaskDao, AppApiRequestDao apiRequestDao, AppApiAcceptDao apiAcceptDao, AppElTagTaskDao elTagTaskDao, AppConveyTaskDao conveyTaskDao, AppScanRecordDao scanRecordDao) { + /// + /// 扫描清理数据库 + /// + public void ClearDataBase() + { + var assembly = Assembly.GetExecutingAssembly(); + var types = assembly.GetTypes(); + if (types.Length == 0) return; + foreach (Type type in types) + { + var sqlSuagarTableAttribute = type.GetCustomAttribute(); + if (sqlSuagarTableAttribute == null) continue; + var clearTableAttribute = type.GetCustomAttribute(); + if(clearTableAttribute == null) continue; + var tableName = sqlSuagarTableAttribute.TableName; // 表名 + var timeColumn = clearTableAttribute.TimeColumn; // 时间字段 + var saveDays = clearTableAttribute.SaveDays; // 需要保存的天数 + try + { + int deleteCount = CommonTool.DbServe.Deleteable().AS($"{tableName}").Where($"{timeColumn} < '{DateTime.Now.AddDays(-saveDays)}'").ExecuteCommand(); // 删除超过一定天数的记录 + ConsoleLog.Info(deleteCount > 0, $"清除表:{tableName},保留:{saveDays} 天,清除记录数目:{deleteCount}"); + } + catch(Exception e) + { + ConsoleLog.Exception($"【异常】尝试清除指定表的记录失败,表名:{tableName},异常信息:{e.Message}"); + } + } + + } + + /* 定时清除 WMS 任务表 */ /// diff --git a/WcsMain/DataBase/TableEntity/AppApiAccept.cs b/WcsMain/DataBase/TableEntity/AppApiAccept.cs index 73f66c0..81d4cd6 100644 --- a/WcsMain/DataBase/TableEntity/AppApiAccept.cs +++ b/WcsMain/DataBase/TableEntity/AppApiAccept.cs @@ -1,6 +1,7 @@ using System.Text; using System.Text.Json.Serialization; using SqlSugar; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -8,6 +9,7 @@ namespace WcsMain.DataBase.TableEntity; /// 接口接收记录表 /// [SugarTable("tbl_app_api_accept")] +[ClearTable("request_time", 30)] public class AppApiAccept { /// diff --git a/WcsMain/DataBase/TableEntity/AppApiRequest.cs b/WcsMain/DataBase/TableEntity/AppApiRequest.cs index 519f2e0..4aa98a2 100644 --- a/WcsMain/DataBase/TableEntity/AppApiRequest.cs +++ b/WcsMain/DataBase/TableEntity/AppApiRequest.cs @@ -1,5 +1,6 @@ using System.Text.Json.Serialization; using SqlSugar; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -7,6 +8,7 @@ namespace WcsMain.DataBase.TableEntity; /// 接口请求类,存放请求的信息 /// [SugarTable("tbl_app_api_request")] +[ClearTable("request_time", 30)] public class AppApiRequest { /// diff --git a/WcsMain/DataBase/TableEntity/AppConveyTask.cs b/WcsMain/DataBase/TableEntity/AppConveyTask.cs index 1a36dfc..5ca683c 100644 --- a/WcsMain/DataBase/TableEntity/AppConveyTask.cs +++ b/WcsMain/DataBase/TableEntity/AppConveyTask.cs @@ -1,5 +1,6 @@ using SqlSugar; using System.Text.Json.Serialization; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -7,6 +8,7 @@ namespace WcsMain.DataBase.TableEntity; /// 输送线任务表 /// [SugarTable("tbl_app_convey_task")] +[ClearTable("create_time", 30)] public class AppConveyTask { /// diff --git a/WcsMain/DataBase/TableEntity/AppElTagTask.cs b/WcsMain/DataBase/TableEntity/AppElTagTask.cs index 84ad4cf..f5a0573 100644 --- a/WcsMain/DataBase/TableEntity/AppElTagTask.cs +++ b/WcsMain/DataBase/TableEntity/AppElTagTask.cs @@ -1,9 +1,11 @@ using SqlSugar; using System.Text.Json.Serialization; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; [SugarTable("tbl_app_eltag_task")] +[ClearTable("create_time", 30)] public class AppElTagTask { /// diff --git a/WcsMain/DataBase/TableEntity/AppScanRecord.cs b/WcsMain/DataBase/TableEntity/AppScanRecord.cs index 3987824..5680cd1 100644 --- a/WcsMain/DataBase/TableEntity/AppScanRecord.cs +++ b/WcsMain/DataBase/TableEntity/AppScanRecord.cs @@ -1,5 +1,6 @@ using SqlSugar; using System.Text.Json.Serialization; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -7,6 +8,7 @@ namespace WcsMain.DataBase.TableEntity; /// 扫码记录 /// [SugarTable("tbl_app_scan_record")] +[ClearTable("scan_time", 15)] public class AppScanRecord { /// diff --git a/WcsMain/DataBase/TableEntity/AppWcsTask.cs b/WcsMain/DataBase/TableEntity/AppWcsTask.cs index 8285659..5625624 100644 --- a/WcsMain/DataBase/TableEntity/AppWcsTask.cs +++ b/WcsMain/DataBase/TableEntity/AppWcsTask.cs @@ -1,5 +1,6 @@ using System.Text.Json.Serialization; using SqlSugar; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -8,6 +9,7 @@ namespace WcsMain.DataBase.TableEntity; /// Wcs任务表 /// [SugarTable("tbl_app_wcs_task")] +[ClearTable("create_time", 30)] public class AppWcsTask { diff --git a/WcsMain/DataBase/TableEntity/AppWcsTaskBak.cs b/WcsMain/DataBase/TableEntity/AppWcsTaskBak.cs new file mode 100644 index 0000000..a7aef90 --- /dev/null +++ b/WcsMain/DataBase/TableEntity/AppWcsTaskBak.cs @@ -0,0 +1,170 @@ +using SqlSugar; +using System.Text.Json.Serialization; +using WcsMain.WcsAttribute.Clear; + +namespace WcsMain.DataBase.TableEntity; + + +/// +/// tbl_app_wcs_task_bak +/// Wcs任务表 ---- 备份表 +/// +[SugarTable("tbl_app_wcs_task_bak")] +[ClearTable("create_time", 30)] +public class AppWcsTaskBak +{ + + /// + /// Plc任务号 + /// + [SugarColumn(IsPrimaryKey = true, ColumnName = "plc_id")] + [JsonPropertyName("plcId")] + public int? PlcId { get; set; } + + /// + /// 下一个任务号,若没有下一个任务则此处是默认值 + /// + [SugarColumn(ColumnName = "next_plc_id")] + [JsonPropertyName("nextPlcId")] + public int? NextPlcId { get; set; } + + /// + /// 任务号 + /// + [SugarColumn(ColumnName = "task_id")] + [JsonPropertyName("taskId")] + public string? TaskId { get; set; } + + + /// + /// 任务类别 + /// + [SugarColumn(ColumnName = "task_category")] + [JsonPropertyName("taskCategory")] + public int? TaskCategory { get; set; } + + + /// + /// 任务类型 + /// + [SugarColumn(ColumnName = "task_type")] + [JsonPropertyName("taskType")] + public int? TaskType { get; set; } + + /// + /// 任务排序 + /// 999表示最后一个任务 + /// + [SugarColumn(ColumnName = "task_sort")] + [JsonPropertyName("taskSort")] + public int? TaskSort { get; set; } + + /// + /// 任务状态 + /// + [SugarColumn(ColumnName = "task_status")] + [JsonPropertyName("taskStatus")] + public int? TaskStatus { get; set; } + + /// + /// 任务优先级 + /// + [SugarColumn(ColumnName = "priority")] + [JsonPropertyName("priority")] + public int? Priority { get; set; } + + /// + /// 任务起点 + /// + [SugarColumn(ColumnName = "origin")] + [JsonPropertyName("origin")] + public string? Origin { get; set; } + + /// + /// 任务终点 + /// + [SugarColumn(ColumnName = "destination")] + [JsonPropertyName("destination")] + public string? Destination { get; set; } + + + /// + /// Wms创建时间 + /// + [SugarColumn(ColumnName = "wms_time")] + [JsonPropertyName("wmsTime")] + public DateTime? WmsTime { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "create_time")] + [JsonPropertyName("createTime")] + public DateTime? CreateTime { get; set; } + + /// + /// 写入PLC的载具编号 + /// + [SugarColumn(ColumnName = "plc_vehicle_no")] + [JsonPropertyName("plcVehicleNo")] + public int? PlcVehicleNo { get; set; } + + /// + /// 载具编号 + /// + [SugarColumn(ColumnName = "vehicle_no")] + [JsonPropertyName("vehicleNo")] + public string? VehicleNo { get; set; } + + /// + /// 载具尺寸 + /// + [SugarColumn(ColumnName = "vehicle_size")] + [JsonPropertyName("vehicleSize")] + public int? VehicleSize { get; set; } + + /// + /// 重量 + /// + [SugarColumn(ColumnName = "weight")] + [JsonPropertyName("weight")] + public decimal? Weight { get; set; } + + + /// + /// 任务创建人 + /// + [SugarColumn(ColumnName = "create_person")] + [JsonPropertyName("createPerson")] + public string? CreatePerson { get; set; } + + + /// + /// 开始时间 + /// + [SugarColumn(ColumnName = "start_time")] + [JsonPropertyName("startTime")] + public DateTime? StartTime { get; set; } + + /// + /// 完成时间 + /// + [SugarColumn(ColumnName = "complete_time")] + [JsonPropertyName("completeTime")] + public DateTime? CompleteTime { get; set; } + + /// + /// 备注信息 + /// + [SugarColumn(ColumnName = "remark")] + [JsonPropertyName("remark")] + public string? Remark { get; set; } + + + + public override string ToString() + { + return $"任务号:{TaskId},Plc任务号:{PlcId}"; + } + +} \ No newline at end of file diff --git a/WcsMain/DataBase/TableEntity/AppWmsTask.cs b/WcsMain/DataBase/TableEntity/AppWmsTask.cs index 13ae70e..25bc98a 100644 --- a/WcsMain/DataBase/TableEntity/AppWmsTask.cs +++ b/WcsMain/DataBase/TableEntity/AppWmsTask.cs @@ -1,5 +1,6 @@ using System.Text.Json.Serialization; using SqlSugar; +using WcsMain.WcsAttribute.Clear; namespace WcsMain.DataBase.TableEntity; @@ -8,6 +9,7 @@ namespace WcsMain.DataBase.TableEntity; /// wms任务表 /// [SugarTable("tbl_app_wms_task")] +[ClearTable("create_time", 30)] public class AppWmsTask { /// diff --git a/WcsMain/Plugins/WcsCirculation.cs b/WcsMain/Plugins/WcsCirculation.cs index 960ec7d..886d7e3 100644 --- a/WcsMain/Plugins/WcsCirculation.cs +++ b/WcsMain/Plugins/WcsCirculation.cs @@ -51,8 +51,6 @@ public class WcsCirculation(IComponentContext componentContext) : StartCirculati /* END */ } } - /* 执行按时执行的任务 ---- 方法内判断,若没有此类方法则不会执行 */ - StartTimeTask(); } diff --git a/WcsMain/WcsAttribute/Clear/ClearTableAttribute.cs b/WcsMain/WcsAttribute/Clear/ClearTableAttribute.cs new file mode 100644 index 0000000..7b48b16 --- /dev/null +++ b/WcsMain/WcsAttribute/Clear/ClearTableAttribute.cs @@ -0,0 +1,22 @@ +namespace WcsMain.WcsAttribute.Clear; + +/// +/// 加上此特性用于标记自动清除的数据库表 +/// +[AttributeUsage(AttributeTargets.Class)] +public class ClearTableAttribute(string timeColumn, int saveDays) : Attribute +{ + /// + /// 时间列名 + /// + public string TimeColumn { get; set; } = timeColumn; + + /// + /// 保存天数 + /// + public int SaveDays { get; set; } = saveDays; + + + + +}