[feat] 回刷数据。定时调度回刷数据时使用的Cron表达式,一般分钟或小时级作业,回刷历史数据时,可能每天只需要跑一次

This commit is contained in:
智能大石头 2025-04-14 11:04:21 +08:00
parent a981c85d14
commit 8b02319242
8 changed files with 56 additions and 12 deletions

View File

@ -793,6 +793,17 @@
<td>定时调度的Cron表达式</td>
</tr>
<tr>
<td>HistoryCron</td>
<td>回刷数据</td>
<td>String</td>
<td>50</td>
<td></td>
<td></td>
<td></td>
<td>定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次</td>
</tr>
<tr>
<td>Topic</td>
<td>主题</td>
@ -1037,13 +1048,13 @@
<tr>
<td>Data</td>
<td>数据</td>
<td>附加数据</td>
<td>String</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>Sql模板或C#模板</td>
<td>执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板</td>
</tr>
<tr>

View File

@ -67,6 +67,9 @@ public partial class Job : EntityBase<Job>
Cron = $"0 0 0/{step / 3600} * * ?";
else if (step % 60 == 0 && step / 60 < 60)
Cron = $"0 0/{step / 60} * * * ?";
// 默认按天刷历史数据
HistoryCron = "0 0 0 *";
}
var app = App;
@ -247,6 +250,19 @@ public partial class Job : EntityBase<Job>
var dt = cron.GetNext(time);
if (dt < next) next = dt;
}
// 如果下次时间属于历史则使用历史Cron以便快速前进
if (next < DateTime.Now)
{
var historyCron = HistoryCron;
if (!historyCron.IsNullOrEmpty())
{
var cron = new Cron(historyCron);
var next2 = cron.GetNext(time);
if (next2 < DateTime.Now) next = next2;
}
}
return next;
//return NewLife.Threading.Cron.GetNext(Cron.Split(";"), time);
}

View File

@ -86,6 +86,14 @@ public partial class Job
[BindColumn("Cron", "执行频次。定时调度的Cron表达式", "")]
public String Cron { get => _Cron; set { if (OnPropertyChanging("Cron", value)) { _Cron = value; OnPropertyChanged("Cron"); } } }
private String _HistoryCron;
/// <summary>回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次</summary>
[DisplayName("回刷数据")]
[Description("回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次")]
[DataObjectField(false, false, true, 50)]
[BindColumn("HistoryCron", "回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次", "")]
public String HistoryCron { get => _HistoryCron; set { if (OnPropertyChanging("HistoryCron", value)) { _HistoryCron = value; OnPropertyChanged("HistoryCron"); } } }
private String _Topic;
/// <summary>主题。消息调度时消费的主题</summary>
[DisplayName("主题")]
@ -278,11 +286,11 @@ public partial class Job
public DateTime LastTime { get => _LastTime; set { if (OnPropertyChanging("LastTime", value)) { _LastTime = value; OnPropertyChanged("LastTime"); } } }
private String _Data;
/// <summary>数据。Sql模板或C#模板</summary>
[DisplayName("数据")]
[Description("数据。Sql模板或C#模板")]
/// <summary>附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板</summary>
[DisplayName("附加数据")]
[Description("附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板")]
[DataObjectField(false, false, true, -1)]
[BindColumn("Data", "数据。Sql模板或C#模板", "")]
[BindColumn("Data", "附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板", "")]
public String Data { get => _Data; set { if (OnPropertyChanging("Data", value)) { _Data = value; OnPropertyChanged("Data"); } } }
private Int32 _CreateUserID;
@ -383,6 +391,7 @@ public partial class Job
"Enable" => _Enable,
"Mode" => _Mode,
"Cron" => _Cron,
"HistoryCron" => _HistoryCron,
"Topic" => _Topic,
"MessageCount" => _MessageCount,
"DataTime" => _DataTime,
@ -429,6 +438,7 @@ public partial class Job
case "Enable": _Enable = value.ToBoolean(); break;
case "Mode": _Mode = (JobModes)value.ToInt(); break;
case "Cron": _Cron = Convert.ToString(value); break;
case "HistoryCron": _HistoryCron = Convert.ToString(value); break;
case "Topic": _Topic = Convert.ToString(value); break;
case "MessageCount": _MessageCount = value.ToInt(); break;
case "DataTime": _DataTime = value.ToDateTime(); break;
@ -509,6 +519,9 @@ public partial class Job
/// <summary>执行频次。定时调度的Cron表达式</summary>
public static readonly Field Cron = FindByName("Cron");
/// <summary>回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次</summary>
public static readonly Field HistoryCron = FindByName("HistoryCron");
/// <summary>主题。消息调度时消费的主题</summary>
public static readonly Field Topic = FindByName("Topic");
@ -575,7 +588,7 @@ public partial class Job
/// <summary>最后时间。最后一次时间</summary>
public static readonly Field LastTime = FindByName("LastTime");
/// <summary>数据。Sql模板或C#模板</summary>
/// <summary>附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板</summary>
public static readonly Field Data = FindByName("Data");
/// <summary>创建人</summary>
@ -635,6 +648,9 @@ public partial class Job
/// <summary>执行频次。定时调度的Cron表达式</summary>
public const String Cron = "Cron";
/// <summary>回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次</summary>
public const String HistoryCron = "HistoryCron";
/// <summary>主题。消息调度时消费的主题</summary>
public const String Topic = "Topic";
@ -701,7 +717,7 @@ public partial class Job
/// <summary>最后时间。最后一次时间</summary>
public const String LastTime = "LastTime";
/// <summary>数据。Sql模板或C#模板</summary>
/// <summary>附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板</summary>
public const String Data = "Data";
/// <summary>创建人</summary>

View File

@ -127,6 +127,7 @@
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="Mode" DataType="Int32" Description="调度模式。定时调度只要达到时间片开头就可以跑,数据调度要求达到时间片末尾才可以跑" Type="JobModes" />
<Column Name="Cron" DataType="String" Description="执行频次。定时调度的Cron表达式" />
<Column Name="HistoryCron" DataType="String" Description="回刷数据。定时调度回刷数据时使用的Cron表达式一般分钟或小时级作业回刷历史数据时可能每天只需要跑一次" />
<Column Name="Topic" DataType="String" Description="主题。消息调度时消费的主题" />
<Column Name="MessageCount" DataType="Int32" Description="消息数" />
<Column Name="DataTime" DataType="DateTime" Description="数据时间。下一次处理数据的时间,默认从当前时间开始" />
@ -149,7 +150,7 @@
<Column Name="Speed" DataType="Int32" Description="速度" Category="统计" />
<Column Name="LastStatus" DataType="Int32" Description="最后状态。最后一次状态" Category="统计" Type="JobStatus" />
<Column Name="LastTime" DataType="DateTime" Description="最后时间。最后一次时间" Category="统计" />
<Column Name="Data" DataType="String" Length="-1" Description="数据。Sql模板或C#模板" />
<Column Name="Data" DataType="String" Length="-1" Description="附加数据。执行作业任务时附带的数据可以是Json配置也可以是Sql模板或C#模板" />
<Column Name="CreateUserID" DataType="Int32" Description="创建人" Category="扩展" />
<Column Name="CreateUser" DataType="String" Description="创建者" Category="扩展" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" Category="扩展" />

Binary file not shown.

View File

@ -29,7 +29,7 @@
<Content Include="favicon.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Redis" Version="6.1.2025.401" />
<PackageReference Include="NewLife.Redis" Version="6.1.2025.411" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AntJob.Data\AntJob.Data.csproj" />

View File

@ -44,7 +44,7 @@
<Content Include="favicon.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.4.2025.401" />
<PackageReference Include="NewLife.Cube.Core" Version="6.4.2025.403" />
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.3.2025.401" />
<PackageReference Include="NewLife.Stardust.Extensions" Version="3.3.2025.401" />
</ItemGroup>

View File

@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.4.2025.401" />
<PackageReference Include="NewLife.Cube.Core" Version="6.4.2025.403" />
</ItemGroup>
<ItemGroup>