diff --git a/Tools/CirculateTool/Entity/TimeTask.cs b/Tools/CirculateTool/Entity/TimeTask.cs
index 8fcb68d..9e7818a 100644
--- a/Tools/CirculateTool/Entity/TimeTask.cs
+++ b/Tools/CirculateTool/Entity/TimeTask.cs
@@ -9,7 +9,7 @@ namespace CirculateTool.Entity;
///
/// 按时执行的任务的定时类
///
-internal class TimeTask
+public class TimeTask
{
///
/// 执行任务的时间
diff --git a/Tools/CirculateTool/StartCirculation.cs b/Tools/CirculateTool/StartCirculation.cs
index d4483c5..17730ce 100644
--- a/Tools/CirculateTool/StartCirculation.cs
+++ b/Tools/CirculateTool/StartCirculation.cs
@@ -19,7 +19,7 @@ public class StartCirculation
///
/// 指定时间执行的方法类
///
- private static List _timeTasks = [];
+ protected static List _timeTasks = [];
///
/// 触发的异常
@@ -146,24 +146,25 @@ public class StartCirculation
{
if(_timeTasks.Count == 0) return;
CancellationTokenSource cts = new();
- PeriodicTimer timer = new(new TimeSpan(0, 0, 0, 10, 0));
+ PeriodicTimer timer = new(new TimeSpan(0, 0, 0, 1, 0));
while (await timer.WaitForNextTickAsync(cts.Token))
{
string timeStr = DateTime.Now.ToString("HH:mm");
List taskList = [];
- taskList.Add(Task.Factory.StartNew(() =>
+ foreach (var task in _timeTasks)
{
- foreach (var task in _timeTasks)
+ taskList.Add(Task.Factory.StartNew(() =>
{
if (task.ExecuteTime != timeStr)
{
task.IsRun = false; // 当时刻不匹配时,重置任务状态
+ return;
}
if (task.ExecuteTime == timeStr && !task.IsRun) // 当时间匹配且任务未执行时,执行任务
{
try
{
- task.Action?.Invoke();
+ task.Action!();
task.IsRun = true;
}
catch (Exception ex)
@@ -171,8 +172,8 @@ public class StartCirculation
ExceptionHandler?.Invoke(task.Description ?? task.Action!.Method.Name, ex);
}
}
- }
- }));
+ }));
+ }
Task.WaitAll([.. taskList]);
}
}
diff --git a/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs b/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs
index 601e7e2..11128bf 100644
--- a/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs
+++ b/WcsMain/Business/CirculationTask/CommonCirculation/DataClear.cs
@@ -14,8 +14,8 @@ public class DataClear(ClearData clearData)
/// 定时清理无用数据, ---- 每隔10分钟清理一次
///
///
- [Circulation("数据清理", 1000 * 60 * 30)]
- public bool ClearDataCirculate()
+ [CirculationTime(["10:11","10:12"], "数据清理")]
+ public void ClearDataCirculate()
{
try
{
@@ -56,10 +56,6 @@ public class DataClear(ClearData clearData)
{
ConsoleLog.Exception($"【数据清理】线程发生异常,异常信息:{ex}");
}
-
-
-
- return true;
}
}
\ No newline at end of file
diff --git a/WcsMain/Plugins/WcsCirculation.cs b/WcsMain/Plugins/WcsCirculation.cs
index 6036563..960ec7d 100644
--- a/WcsMain/Plugins/WcsCirculation.cs
+++ b/WcsMain/Plugins/WcsCirculation.cs
@@ -22,14 +22,37 @@ public class WcsCirculation(IComponentContext componentContext) : StartCirculati
var attributes = method.GetCustomAttributes(false);
foreach (var attribute in attributes)
{
- if (attribute is not CirculationAttribute needDurable) continue;
- string methodDescription = needDurable.MethodDescription ?? $"{type.Name}.{method.Name}";
- instance ??= CreateInstance(type);
- bool Action() => (bool)(method.Invoke(instance, []) ?? false);
- StartTask(Action, methodDescription, needDurable.CirculationTime);
- break;
+ if (attribute == default) continue;
+ /* 定时执行的任务 */
+ if (attribute is CirculationAttribute needDurable)
+ {
+ string methodDescription = needDurable.MethodDescription ?? $"{type.Name}.{method.Name}";
+ instance ??= CreateInstance(type);
+ bool Action() => (bool)(method.Invoke(instance, []) ?? false);
+ StartTask(Action, methodDescription, needDurable.CirculationTime);
+ break;
+ }
+ /* 每天指定时间执行 */
+ if (attribute is CirculationTimeAttribute timeCirculate)
+ {
+ string methodDescription = timeCirculate.MethodDescription ?? $"{type.Name}.{method.Name}";
+ instance ??= CreateInstance(type);
+ foreach (var time in timeCirculate.Times)
+ {
+ _timeTasks.Add(new CirculateTool.Entity.TimeTask
+ {
+ ExecuteTime = time,
+ Action = new Action(() => method.Invoke(instance, [])),
+ Description = methodDescription,
+ IsRun = false
+ });
+ }
+ }
+ /* END */
}
}
+ /* 执行按时执行的任务 ---- 方法内判断,若没有此类方法则不会执行 */
+ StartTimeTask();
}