增强数据时间Time的概念,替代旧版的Start
This commit is contained in:
parent
fd3ec697fb
commit
1b1797b054
|
@ -900,7 +900,7 @@
|
|||
|
||||
<tr>
|
||||
<td>Start</td>
|
||||
<td>开始</td>
|
||||
<td>数据时间</td>
|
||||
<td>DateTime</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
|
@ -1302,7 +1302,7 @@
|
|||
|
||||
<tr>
|
||||
<td>Start</td>
|
||||
<td>开始</td>
|
||||
<td>数据时间</td>
|
||||
<td>DateTime</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
|
@ -1616,7 +1616,7 @@
|
|||
|
||||
<tr>
|
||||
<td>Start</td>
|
||||
<td>开始</td>
|
||||
<td>数据时间</td>
|
||||
<td>DateTime</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
|
|
|
@ -212,7 +212,7 @@ public partial class Job : EntityBase<Job>
|
|||
{
|
||||
case JobModes.Data:
|
||||
case JobModes.Time:
|
||||
return Start.Year > 2000 && Step > 0;
|
||||
return Time.Year > 2000 && Step > 0;
|
||||
case JobModes.Message:
|
||||
return Topic.IsNullOrEmpty();
|
||||
default:
|
||||
|
@ -230,14 +230,14 @@ public partial class Job : EntityBase<Job>
|
|||
{
|
||||
if (days < 0)
|
||||
{
|
||||
Start = DateTime.MinValue;
|
||||
Time = DateTime.MinValue;
|
||||
|
||||
if (stime > DateTime.MinValue)
|
||||
Start = stime;
|
||||
Time = stime;
|
||||
End = etime;
|
||||
}
|
||||
else
|
||||
Start = DateTime.Now.Date.AddDays(-days);
|
||||
Time = DateTime.Now.Date.AddDays(-days);
|
||||
|
||||
Save();
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ public partial class Job : EntityBase<Job>
|
|||
{
|
||||
// 如果禁用,仅返回最简单的字段
|
||||
// 缺少开始时间赋值,会导致客户端启动校验失败,Job没有启用的状态下服务器报错无法正常启动
|
||||
if (!Enable) return new JobModel { Name = Name, Enable = Enable, Start = Start };
|
||||
if (!Enable) return new JobModel { Name = Name, Enable = Enable, Time = Time };
|
||||
|
||||
return new JobModel
|
||||
{
|
||||
|
@ -284,7 +284,7 @@ public partial class Job : EntityBase<Job>
|
|||
ClassName = ClassName,
|
||||
Enable = Enable,
|
||||
|
||||
Start = Start,
|
||||
Time = Time,
|
||||
End = End,
|
||||
Cron = Cron,
|
||||
Topic = Topic,
|
||||
|
|
|
@ -94,13 +94,13 @@ public partial class Job
|
|||
[BindColumn("MessageCount", "消息数", "")]
|
||||
public Int32 MessageCount { get => _MessageCount; set { if (OnPropertyChanging("MessageCount", value)) { _MessageCount = value; OnPropertyChanged("MessageCount"); } } }
|
||||
|
||||
private DateTime _Start;
|
||||
/// <summary>开始。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
[DisplayName("开始")]
|
||||
[Description("开始。从该时间开始调度作业任务,默认不设置时从当前时间开始")]
|
||||
private DateTime _Time;
|
||||
/// <summary>数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
[DisplayName("数据时间")]
|
||||
[Description("数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始")]
|
||||
[DataObjectField(false, false, true, 0)]
|
||||
[BindColumn("Start", "开始。从该时间开始调度作业任务,默认不设置时从当前时间开始", "")]
|
||||
public DateTime Start { get => _Start; set { if (OnPropertyChanging("Start", value)) { _Start = value; OnPropertyChanged("Start"); } } }
|
||||
[BindColumn("Start", "数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始", "")]
|
||||
public DateTime Time { get => _Time; set { if (OnPropertyChanging("Time", value)) { _Time = value; OnPropertyChanged("Time"); } } }
|
||||
|
||||
private DateTime _End;
|
||||
/// <summary>结束。到该时间停止调度作业,默认不设置时永不停止</summary>
|
||||
|
@ -369,7 +369,7 @@ public partial class Job
|
|||
"Cron" => _Cron,
|
||||
"Topic" => _Topic,
|
||||
"MessageCount" => _MessageCount,
|
||||
"Start" => _Start,
|
||||
"Time" => _Time,
|
||||
"End" => _End,
|
||||
"Step" => _Step,
|
||||
"BatchSize" => _BatchSize,
|
||||
|
@ -415,7 +415,7 @@ public partial class Job
|
|||
case "Cron": _Cron = Convert.ToString(value); break;
|
||||
case "Topic": _Topic = Convert.ToString(value); break;
|
||||
case "MessageCount": _MessageCount = value.ToInt(); break;
|
||||
case "Start": _Start = value.ToDateTime(); break;
|
||||
case "Time": _Time = value.ToDateTime(); break;
|
||||
case "End": _End = value.ToDateTime(); break;
|
||||
case "Step": _Step = value.ToInt(); break;
|
||||
case "BatchSize": _BatchSize = value.ToInt(); break;
|
||||
|
@ -494,8 +494,8 @@ public partial class Job
|
|||
/// <summary>消息数</summary>
|
||||
public static readonly Field MessageCount = FindByName("MessageCount");
|
||||
|
||||
/// <summary>开始。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
public static readonly Field Start = FindByName("Start");
|
||||
/// <summary>数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
public static readonly Field Time = FindByName("Time");
|
||||
|
||||
/// <summary>结束。到该时间停止调度作业,默认不设置时永不停止</summary>
|
||||
public static readonly Field End = FindByName("End");
|
||||
|
@ -620,8 +620,8 @@ public partial class Job
|
|||
/// <summary>消息数</summary>
|
||||
public const String MessageCount = "MessageCount";
|
||||
|
||||
/// <summary>开始。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
public const String Start = "Start";
|
||||
/// <summary>数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始</summary>
|
||||
public const String Time = "Time";
|
||||
|
||||
/// <summary>结束。到该时间停止调度作业,默认不设置时永不停止</summary>
|
||||
public const String End = "End";
|
||||
|
|
|
@ -92,19 +92,6 @@ public partial class JobTask : EntityBase<JobTask>
|
|||
return FindAll(_.JobID == jobid & _.CreateTime < createTime, _.CreateTime.Desc(), null, 0, 1).FirstOrDefault();
|
||||
}
|
||||
|
||||
/// <summary>根据作业、状态、开始查找</summary>
|
||||
/// <param name="jobId">作业</param>
|
||||
/// <param name="status">状态</param>
|
||||
/// <param name="start">开始</param>
|
||||
/// <returns>实体列表</returns>
|
||||
public static IList<JobTask> FindAllByJobIDAndStatusAndStart(Int32 jobId, JobStatus status, DateTime start)
|
||||
{
|
||||
// 实体缓存
|
||||
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.JobID == jobId && e.Status == status && e.Start == start);
|
||||
|
||||
return FindAll(_.JobID == jobId & _.Status == status & _.Start == start);
|
||||
}
|
||||
|
||||
/// <summary>根据应用、客户端、状态查找</summary>
|
||||
/// <param name="appId">应用</param>
|
||||
/// <param name="client">客户端</param>
|
||||
|
@ -117,6 +104,19 @@ public partial class JobTask : EntityBase<JobTask>
|
|||
|
||||
return FindAll(_.AppID == appId & _.Client == client & _.Status == status);
|
||||
}
|
||||
|
||||
/// <summary>根据作业、状态、数据时间查找</summary>
|
||||
/// <param name="jobId">作业</param>
|
||||
/// <param name="status">状态</param>
|
||||
/// <param name="time">数据时间</param>
|
||||
/// <returns>实体列表</returns>
|
||||
public static IList<JobTask> FindAllByJobIDAndStatusAndTime(Int32 jobId, JobStatus status, DateTime time)
|
||||
{
|
||||
// 实体缓存
|
||||
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.JobID == jobId && e.Status == status && e.Time == time);
|
||||
|
||||
return FindAll(_.JobID == jobId & _.Status == status & _.Time == time);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 高级查询
|
||||
|
@ -141,7 +141,7 @@ public partial class JobTask : EntityBase<JobTask>
|
|||
if (status >= JobStatus.就绪) exp &= _.Status == status;
|
||||
if (!client.IsNullOrEmpty()) exp &= _.Client == client;
|
||||
if (!key.IsNullOrEmpty()) exp &= _.Data.Contains(key) | _.Message.Contains(key) | _.Key == key;
|
||||
exp &= _.Start.Between(start, end);
|
||||
exp &= _.Time.Between(start, end);
|
||||
|
||||
return FindAll(exp, p);
|
||||
}
|
||||
|
@ -199,8 +199,7 @@ public partial class JobTask : EntityBase<JobTask>
|
|||
{
|
||||
ID = ID,
|
||||
|
||||
Time = Start,
|
||||
Start = Start,
|
||||
Time = Time,
|
||||
End = End,
|
||||
//Offset = Offset,
|
||||
//Step = Step,
|
||||
|
|
|
@ -56,13 +56,13 @@ public partial class JobTask
|
|||
[BindColumn("Client", "客户端。IP加进程", "")]
|
||||
public String Client { get => _Client; set { if (OnPropertyChanging("Client", value)) { _Client = value; OnPropertyChanged("Client"); } } }
|
||||
|
||||
private DateTime _Start;
|
||||
/// <summary>开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
[DisplayName("开始")]
|
||||
[Description("开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用")]
|
||||
private DateTime _Time;
|
||||
/// <summary>数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
[DisplayName("数据时间")]
|
||||
[Description("数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用")]
|
||||
[DataObjectField(false, false, true, 0)]
|
||||
[BindColumn("Start", "开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用", "", Master = true)]
|
||||
public DateTime Start { get => _Start; set { if (OnPropertyChanging("Start", value)) { _Start = value; OnPropertyChanged("Start"); } } }
|
||||
[BindColumn("Start", "数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用", "", Master = true)]
|
||||
public DateTime Time { get => _Time; set { if (OnPropertyChanging("Time", value)) { _Time = value; OnPropertyChanged("Time"); } } }
|
||||
|
||||
private DateTime _End;
|
||||
/// <summary>结束。小于不等于,数据调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
|
@ -250,7 +250,7 @@ public partial class JobTask
|
|||
"AppID" => _AppID,
|
||||
"JobID" => _JobID,
|
||||
"Client" => _Client,
|
||||
"Start" => _Start,
|
||||
"Time" => _Time,
|
||||
"End" => _End,
|
||||
"BatchSize" => _BatchSize,
|
||||
"Total" => _Total,
|
||||
|
@ -282,7 +282,7 @@ public partial class JobTask
|
|||
case "AppID": _AppID = value.ToInt(); break;
|
||||
case "JobID": _JobID = value.ToInt(); break;
|
||||
case "Client": _Client = Convert.ToString(value); break;
|
||||
case "Start": _Start = value.ToDateTime(); break;
|
||||
case "Time": _Time = value.ToDateTime(); break;
|
||||
case "End": _End = value.ToDateTime(); break;
|
||||
case "BatchSize": _BatchSize = value.ToInt(); break;
|
||||
case "Total": _Total = value.ToInt(); break;
|
||||
|
@ -345,8 +345,8 @@ public partial class JobTask
|
|||
/// <summary>客户端。IP加进程</summary>
|
||||
public static readonly Field Client = FindByName("Client");
|
||||
|
||||
/// <summary>开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public static readonly Field Start = FindByName("Start");
|
||||
/// <summary>数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public static readonly Field Time = FindByName("Time");
|
||||
|
||||
/// <summary>结束。小于不等于,数据调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public static readonly Field End = FindByName("End");
|
||||
|
@ -429,8 +429,8 @@ public partial class JobTask
|
|||
/// <summary>客户端。IP加进程</summary>
|
||||
public const String Client = "Client";
|
||||
|
||||
/// <summary>开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public const String Start = "Start";
|
||||
/// <summary>数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public const String Time = "Time";
|
||||
|
||||
/// <summary>结束。小于不等于,数据调度到达该时间点后触发(可能有偏移量),消息调度不适用</summary>
|
||||
public const String End = "End";
|
||||
|
|
|
@ -116,7 +116,7 @@ public partial class JobError : EntityBase<JobError>
|
|||
if (jobid > 0) exp &= _.JobID == jobid;
|
||||
if (!client.IsNullOrEmpty()) exp &= _.Client == client;
|
||||
if (!key.IsNullOrEmpty()) exp &= _.Message.Contains(key);
|
||||
exp &= _.Start.Between(start, end);
|
||||
exp &= _.Time.Between(start, end);
|
||||
|
||||
return FindAll(exp, p);
|
||||
}
|
||||
|
|
|
@ -63,13 +63,13 @@ public partial class JobError
|
|||
[BindColumn("Client", "客户端。IP加进程", "")]
|
||||
public String Client { get => _Client; set { if (OnPropertyChanging("Client", value)) { _Client = value; OnPropertyChanged("Client"); } } }
|
||||
|
||||
private DateTime _Start;
|
||||
/// <summary>开始。大于等于</summary>
|
||||
[DisplayName("开始")]
|
||||
[Description("开始。大于等于")]
|
||||
private DateTime _Time;
|
||||
/// <summary>数据时间。大于等于</summary>
|
||||
[DisplayName("数据时间")]
|
||||
[Description("数据时间。大于等于")]
|
||||
[DataObjectField(false, false, true, 0)]
|
||||
[BindColumn("Start", "开始。大于等于", "")]
|
||||
public DateTime Start { get => _Start; set { if (OnPropertyChanging("Start", value)) { _Start = value; OnPropertyChanged("Start"); } } }
|
||||
[BindColumn("Start", "数据时间。大于等于", "")]
|
||||
public DateTime Time { get => _Time; set { if (OnPropertyChanging("Time", value)) { _Time = value; OnPropertyChanged("Time"); } } }
|
||||
|
||||
private DateTime _End;
|
||||
/// <summary>结束。小于,不等于</summary>
|
||||
|
@ -170,7 +170,7 @@ public partial class JobError
|
|||
"JobID" => _JobID,
|
||||
"TaskID" => _TaskID,
|
||||
"Client" => _Client,
|
||||
"Start" => _Start,
|
||||
"Time" => _Time,
|
||||
"End" => _End,
|
||||
"Data" => _Data,
|
||||
"Server" => _Server,
|
||||
|
@ -192,7 +192,7 @@ public partial class JobError
|
|||
case "JobID": _JobID = value.ToInt(); break;
|
||||
case "TaskID": _TaskID = value.ToInt(); break;
|
||||
case "Client": _Client = Convert.ToString(value); break;
|
||||
case "Start": _Start = value.ToDateTime(); break;
|
||||
case "Time": _Time = value.ToDateTime(); break;
|
||||
case "End": _End = value.ToDateTime(); break;
|
||||
case "Data": _Data = Convert.ToString(value); break;
|
||||
case "Server": _Server = Convert.ToString(value); break;
|
||||
|
@ -232,7 +232,7 @@ public partial class JobError
|
|||
|
||||
/// <summary>作业项</summary>
|
||||
[Map(nameof(TaskID), typeof(JobTask), "ID")]
|
||||
public String TaskStart => Task?.ToString();
|
||||
public String TaskTime => Task?.ToString();
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -255,8 +255,8 @@ public partial class JobError
|
|||
/// <summary>客户端。IP加进程</summary>
|
||||
public static readonly Field Client = FindByName("Client");
|
||||
|
||||
/// <summary>开始。大于等于</summary>
|
||||
public static readonly Field Start = FindByName("Start");
|
||||
/// <summary>数据时间。大于等于</summary>
|
||||
public static readonly Field Time = FindByName("Time");
|
||||
|
||||
/// <summary>结束。小于,不等于</summary>
|
||||
public static readonly Field End = FindByName("End");
|
||||
|
@ -309,8 +309,8 @@ public partial class JobError
|
|||
/// <summary>客户端。IP加进程</summary>
|
||||
public const String Client = "Client";
|
||||
|
||||
/// <summary>开始。大于等于</summary>
|
||||
public const String Start = "Start";
|
||||
/// <summary>数据时间。大于等于</summary>
|
||||
public const String Time = "Time";
|
||||
|
||||
/// <summary>结束。小于,不等于</summary>
|
||||
public const String End = "End";
|
||||
|
|
|
@ -143,7 +143,7 @@
|
|||
<Column Name="Cron" DataType="String" Description="执行频次。定时调度的Cron表达式" />
|
||||
<Column Name="Topic" DataType="String" Description="主题。消息调度时消费的主题" />
|
||||
<Column Name="MessageCount" DataType="Int32" Description="消息数" />
|
||||
<Column Name="Start" DataType="DateTime" Description="开始。从该时间开始调度作业任务,默认不设置时从当前时间开始" />
|
||||
<Column Name="Time" ColumnName="Start" DataType="DateTime" Description="数据时间。从该时间开始调度作业任务,默认不设置时从当前时间开始" />
|
||||
<Column Name="End" DataType="DateTime" Description="结束。到该时间停止调度作业,默认不设置时永不停止" />
|
||||
<Column Name="Step" DataType="Int32" Description="步进。切分任务的时间区间,秒" />
|
||||
<Column Name="BatchSize" DataType="Int32" Description="批大小。数据调度每次抽取数据的分页大小,或消息调度每次处理的消息数,定时调度不适用" />
|
||||
|
@ -185,7 +185,7 @@
|
|||
<Column Name="AppID" DataType="Int32" Map="App@ID@$" Description="应用" />
|
||||
<Column Name="JobID" DataType="Int32" Map="Job@ID@$" Description="作业" />
|
||||
<Column Name="Client" DataType="String" Description="客户端。IP加进程" />
|
||||
<Column Name="Start" DataType="DateTime" Master="True" Description="开始。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用" />
|
||||
<Column Name="Time" ColumnName="Start" DataType="DateTime" Master="True" Description="数据时间。大于等于,定时调度到达该时间点后触发(可能有偏移量),消息调度不适用" />
|
||||
<Column Name="End" DataType="DateTime" Description="结束。小于不等于,数据调度到达该时间点后触发(可能有偏移量),消息调度不适用" />
|
||||
<Column Name="BatchSize" DataType="Int32" Description="批大小。数据调度每次抽取数据的分页大小,或消息调度每次处理的消息数,定时调度不适用" />
|
||||
<Column Name="Total" DataType="Int32" Description="总数。任务处理的总数据,例如数据调度抽取得到的总行数,定时调度默认1" />
|
||||
|
@ -221,7 +221,7 @@
|
|||
<Column Name="JobID" DataType="Int32" Map="Job@ID@$" Description="作业" />
|
||||
<Column Name="TaskID" DataType="Int32" Map="JobTask@ID@$" Description="作业项" />
|
||||
<Column Name="Client" DataType="String" Description="客户端。IP加进程" />
|
||||
<Column Name="Start" DataType="DateTime" Description="开始。大于等于" />
|
||||
<Column Name="Time" ColumnName="Start" DataType="DateTime" Description="数据时间。大于等于" />
|
||||
<Column Name="End" DataType="DateTime" Description="结束。小于,不等于" />
|
||||
<Column Name="Data" DataType="String" Length="2000" Description="数据" />
|
||||
<Column Name="Server" DataType="String" Description="服务器" />
|
||||
|
|
|
@ -89,7 +89,7 @@ public abstract class DataHandler : Handler
|
|||
if (job.Step == 0) job.Step = 30;
|
||||
|
||||
// 获取最小时间
|
||||
if (job.Start.Year < 2000) throw new InvalidOperationException("数据任务必须设置开始时间");
|
||||
if (job.Time.Year < 2000) throw new InvalidOperationException("数据任务必须设置开始时间");
|
||||
|
||||
return base.Start();
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ public class JobService
|
|||
AppID = app.ID,
|
||||
Name = item.Name,
|
||||
Enable = item.Enable,
|
||||
Start = item.Start,
|
||||
Time = item.Time,
|
||||
End = item.End,
|
||||
Offset = item.Offset,
|
||||
Step = item.Step,
|
||||
|
@ -92,6 +92,7 @@ public class JobService
|
|||
// 应用停止发放作业
|
||||
app = App.FindByID(app.ID) ?? app;
|
||||
if (!app.Enable) return [];
|
||||
|
||||
var job = app.Jobs.FirstOrDefault(e => e.Name == jobName);
|
||||
|
||||
// 全局锁,确保单个作业只有一个线程在分配作业
|
||||
|
@ -104,7 +105,7 @@ public class JobService
|
|||
job = Job.FindByAppIDAndName(app.ID, jobName);
|
||||
|
||||
if (job == null) throw new XException($"应用[{app.ID}/{app.Name}]下未找到作业[{jobName}]");
|
||||
if (job.Step == 0 || job.Start.Year <= 2000) throw new XException("作业[{0}/{1}]未设置开始时间或步进", job.ID, job.Name);
|
||||
if (job.Step == 0 || job.Time.Year <= 2000) throw new XException("作业[{0}/{1}]未设置开始时间或步进", job.ID, job.Name);
|
||||
|
||||
var online = _appService.GetOnline(app, ip);
|
||||
|
||||
|
@ -133,7 +134,7 @@ public class JobService
|
|||
default:
|
||||
{
|
||||
// 如果能够切片,则查询数据库后进入,避免缓存导致重复
|
||||
if (TrySplit(job, job.Start, job.Step, out var end))
|
||||
if (TrySplit(job, job.Time, job.Step, out var end))
|
||||
{
|
||||
// 申请任务前,不能再查数据库,那样子会导致多线程脏读,从而出现多客户端分到相同任务的情况
|
||||
//jb = Job.FindByKey(jb.ID);
|
||||
|
@ -366,7 +367,7 @@ public class JobService
|
|||
AppID = job.AppID,
|
||||
JobID = job.ID,
|
||||
TaskID = task.ID,
|
||||
Start = task.Start,
|
||||
Time = task.Time,
|
||||
End = task.End,
|
||||
Data = task.Data,
|
||||
|
||||
|
@ -426,7 +427,7 @@ public class JobService
|
|||
//using var ck = cache.AcquireLock($"Job:{ID}", 5_000);
|
||||
|
||||
using var ts = Job.Meta.CreateTrans();
|
||||
var start = job.Start;
|
||||
var start = job.Time;
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
if (!TrySplit(job, start, step, out var end)) break;
|
||||
|
@ -436,7 +437,7 @@ public class JobService
|
|||
{
|
||||
AppID = job.AppID,
|
||||
JobID = job.ID,
|
||||
Start = start,
|
||||
Time = start,
|
||||
End = end,
|
||||
BatchSize = job.BatchSize,
|
||||
|
||||
|
@ -467,7 +468,7 @@ public class JobService
|
|||
}
|
||||
|
||||
// 更新任务
|
||||
job.Start = end;
|
||||
job.Time = end;
|
||||
start = end;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ public class AppController : EntityController<App>
|
|||
var jobs = Job.FindAllByAppID2(appid);
|
||||
foreach (var job in jobs)
|
||||
{
|
||||
job.Start = new DateTime(now.Year, now.Month, 1);
|
||||
job.Time = new DateTime(now.Year, now.Month, 1);
|
||||
job.ResetOther();
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
{
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("AppName"))">应用</a></th>
|
||||
}
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Start"))" title="@Job._.Start.Description">开始时间</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Start"))" title="@Job._.Time.Description">开始时间</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("End"))" title="@Job._.End.Description">结束</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Step"))" title="@Job._.Step.Description">步进</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("BatchSize"))" title="@Job._.BatchSize.Description">批大小</a></th>
|
||||
|
@ -54,8 +54,8 @@
|
|||
<tbody>
|
||||
@foreach (var entity in Model)
|
||||
{
|
||||
var st = entity.Start.ToFullString("");
|
||||
if (entity.Start.Date == DateTime.Now.Date) { st = entity.Start.ToString("HH:mm:ss"); }
|
||||
var st = entity.Time.ToFullString("");
|
||||
if (entity.Time.Date == DateTime.Now.Date) { st = entity.Time.ToString("HH:mm:ss"); }
|
||||
if (entity.Mode == JobModes.Message) { st = $"{entity.Topic}/{entity.MessageCount}"; }
|
||||
|
||||
var ut = entity.UpdateTime.ToFullString("");
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
}
|
||||
<th class="text-center hidden-md hidden-sm hidden-xs"><a href="@Html.Raw(page.GetSortUrl("ID"))">编号</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("TaskID"))">任务</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Start"))" title="@JobTask._.Start.Description">开始</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Time"))" title="@JobTask._.Time.Description">开始</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("End"))" title="@JobTask._.End.Description">结束</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("Client"))" title="@JobTask._.Client.Description">客户端</a></th>
|
||||
<th class="text-center"><a href="@Html.Raw(page.GetSortUrl("BatchSize"))" title="@JobTask._.BatchSize.Description">批大小</a></th>
|
||||
|
@ -77,7 +77,7 @@
|
|||
}
|
||||
<td class="text-center hidden-md hidden-sm hidden-xs">@entity.ID</td>
|
||||
<td class="text-center"><a href="Job?ID=@entity.JobID">@entity.JobName</a></td>
|
||||
<td>@entity.Start.ToFullString("")</td>
|
||||
<td>@entity.Time.ToFullString("")</td>
|
||||
<td>@entity.End.ToString("HH:mm:ss")</td>
|
||||
<td>@entity.Client</td>
|
||||
<td class="text-right">@entity.BatchSize.ToString("n0")</td>
|
||||
|
|
|
@ -14,8 +14,8 @@ public interface IJob
|
|||
/// <summary>是否启用</summary>
|
||||
Boolean Enable { get; set; }
|
||||
|
||||
/// <summary>开始。大于等于该时间,定时作业和数据作业使用</summary>
|
||||
DateTime Start { get; set; }
|
||||
/// <summary>数据时间。定时调度的执行时间点,或者数据调度的开始时间</summary>
|
||||
DateTime Time { get; set; }
|
||||
|
||||
/// <summary>结束。小于该时间,数据作业使用</summary>
|
||||
DateTime End { get; set; }
|
||||
|
|
|
@ -19,9 +19,9 @@ public partial class JobModel
|
|||
[XmlAttribute]
|
||||
public Boolean Enable { get; set; }
|
||||
|
||||
/// <summary>开始。大于等于</summary>
|
||||
/// <summary>数据时间。定时调度的执行时间点,或者数据调度的开始时间</summary>
|
||||
[XmlAttribute]
|
||||
public DateTime Start { get; set; }
|
||||
public DateTime Time { get; set; }
|
||||
|
||||
/// <summary>结束。小于</summary>
|
||||
[XmlAttribute]
|
||||
|
|
|
@ -10,9 +10,6 @@ public partial class TaskModel : ITask
|
|||
/// <summary>数据时间。定时调度的执行时间点,或者数据调度的开始时间</summary>
|
||||
public DateTime Time { get; set; }
|
||||
|
||||
/// <summary>开始。大于等于</summary>
|
||||
public DateTime Start { get; set; }
|
||||
|
||||
/// <summary>结束。小于,不等于</summary>
|
||||
public DateTime End { get; set; }
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ public abstract class Handler : IExtend, ITracerFeature, ILogFeature
|
|||
var now = DateTime.Now;
|
||||
var job = new JobModel
|
||||
{
|
||||
Start = new DateTime(now.Year, now.Month, 1),
|
||||
Time = new DateTime(now.Year, now.Month, 1),
|
||||
Step = 30,
|
||||
Offset = 15,
|
||||
Mode = JobModes.Time,
|
||||
|
@ -84,7 +84,7 @@ public abstract class Handler : IExtend, ITracerFeature, ILogFeature
|
|||
|
||||
var msg = "开始工作";
|
||||
var job = Job;
|
||||
if (job != null) msg += $" {job.Enable} 区间({job.Start.ToFullString("")}, {job.End.ToFullString("")}) Offset={job.Offset} Step={job.Step} MaxTask={job.MaxTask}";
|
||||
if (job != null) msg += $" {job.Enable} 区间({job.Time.ToFullString("")}, {job.End.ToFullString("")}) Offset={job.Offset} Step={job.Step} MaxTask={job.MaxTask}";
|
||||
|
||||
using var span = Tracer?.NewSpan($"job:{Name}:Start", msg);
|
||||
WriteLog(msg);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using NewLife;
|
||||
using AntJob.Data;
|
||||
using NewLife;
|
||||
|
||||
namespace AntJob.Handlers;
|
||||
|
||||
|
@ -15,7 +16,7 @@ public class CSharpHandler : Handler
|
|||
/// <summary>实例化</summary>
|
||||
public CSharpHandler()
|
||||
{
|
||||
//Mode = JobModes.CSharp;
|
||||
Mode = JobModes.CSharp;
|
||||
|
||||
var job = Job;
|
||||
job.BatchSize = 8;
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<PublishProtocol>FileSystem</PublishProtocol>
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Any CPU</Platform>
|
||||
<TargetFramework>net45</TargetFramework>
|
||||
<PublishDir>..\Bin\</PublishDir>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -4,7 +4,6 @@ using System.Reflection;
|
|||
using AntJob.Data;
|
||||
using AntJob.Models;
|
||||
using NewLife;
|
||||
using NewLife.Log;
|
||||
using NewLife.Net;
|
||||
using NewLife.Reflection;
|
||||
using NewLife.Remoting;
|
||||
|
@ -33,15 +32,7 @@ public class AntClient : ApiClient
|
|||
/// <summary>实例化</summary>
|
||||
public AntClient()
|
||||
{
|
||||
//Log = XTrace.Log;
|
||||
|
||||
//StatPeriod = 60;
|
||||
ShowError = true;
|
||||
|
||||
#if DEBUG
|
||||
EncoderLog = Log;
|
||||
StatPeriod = 10;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>实例化</summary>
|
||||
|
|
|
@ -43,7 +43,7 @@ public class FileJobProvider : JobProvider
|
|||
var df = job?.Job;
|
||||
if (df != null) model.Copy(df);
|
||||
|
||||
if (model.Start.Year <= 2000) model.Start = DateTime.Now.Date;
|
||||
if (model.Time.Year <= 2000) model.Time = DateTime.Now.Date;
|
||||
if (model.Step <= 0) model.Step = 30;
|
||||
if (model.BatchSize <= 0) model.BatchSize = 10000;
|
||||
if (model.MaxTask <= 0) model.MaxTask = Environment.ProcessorCount;
|
||||
|
@ -108,7 +108,7 @@ public class FileJobProvider : JobProvider
|
|||
var step = job.Step;
|
||||
if (step <= 0) step = 30;
|
||||
|
||||
var start = job.Start;
|
||||
var start = job.Time;
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
// 开始时间和结束时间是否越界
|
||||
|
@ -128,7 +128,7 @@ public class FileJobProvider : JobProvider
|
|||
if (start >= end) break;
|
||||
|
||||
// 切分新任务
|
||||
var set = new TaskModel
|
||||
var task = new TaskModel
|
||||
{
|
||||
Time = start,
|
||||
End = end,
|
||||
|
@ -138,10 +138,10 @@ public class FileJobProvider : JobProvider
|
|||
};
|
||||
|
||||
// 更新任务
|
||||
job.Start = end;
|
||||
job.Time = end;
|
||||
start = end;
|
||||
|
||||
list.Add(set);
|
||||
list.Add(task);
|
||||
}
|
||||
|
||||
if (list.Count > 0)
|
||||
|
|
|
@ -158,9 +158,6 @@ public class NetworkJobProvider : JobProvider
|
|||
#endregion
|
||||
|
||||
#region 报告状态
|
||||
//private static readonly String _MachineName = Environment.MachineName;
|
||||
//private static readonly Int32 _ProcessID = Process.GetCurrentProcess().Id;
|
||||
|
||||
/// <summary>报告进度,每个任务多次调用</summary>
|
||||
/// <param name="ctx">上下文</param>
|
||||
public override void Report(JobContext ctx)
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
v4版本是对v3版本的重构,主要是为了解决v3版本的一些问题,以及提供更多的功能。
|
||||
v4版本亮点:
|
||||
1. []新增Http接入,由AntWeb提供调度服务,无需部署AntServer,满足轻量级项目需要。(进行中,等NewLife.Remoting提供WebsocketClient)
|
||||
2. []增强定时调度,支持指定Cron表达式,逐步替代Start+Step的恒定间隔定时调度
|
||||
2. [x]增强定时调度,支持指定Cron表达式,逐步替代Start+Step的恒定间隔定时调度
|
||||
3. []提前生成任务,提前下发给执行器,到时间后马上执行,提高任务执行时间精度
|
||||
4. []支持任务主动延迟,任务在执行中发现数据条件未满足时,可以向调度中心请求延迟一段时间后再执行,增加执行次数但不增加错误次数
|
||||
5. []扩充调度模式,常态化部署AntAgent,正式把Sql调度和C#调度加入主线,将来增加数据抽取和数据推送等多种调度模式
|
||||
|
@ -107,14 +107,14 @@ namespace HisAgent
|
|||
{
|
||||
// 今天零点开始,每10秒一次
|
||||
var job = Job;
|
||||
job.Start = DateTime.Today;
|
||||
job.Time = DateTime.Today;
|
||||
job.Step = 10;
|
||||
}
|
||||
|
||||
protected override Int32 Execute(JobContext ctx)
|
||||
{
|
||||
// 当前任务时间
|
||||
var time = ctx.Task.Start;
|
||||
var time = ctx.Task.Time;
|
||||
WriteLog("新生命蚂蚁调度系统!当前任务时间:{0}", time);
|
||||
|
||||
// 成功处理数据量
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace HisAgent
|
|||
public BuildPatient()
|
||||
{
|
||||
var job = Job;
|
||||
job.Start = DateTime.Today;
|
||||
job.Time = DateTime.Today;
|
||||
job.Step = 15;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace HisAgent
|
|||
public BuildWill()
|
||||
{
|
||||
var job = Job;
|
||||
job.Start = DateTime.Today;
|
||||
job.Time = DateTime.Today;
|
||||
job.Step = 30;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ internal class HelloJob : Handler
|
|||
{
|
||||
// 今天零点开始,每10秒一次
|
||||
var job = Job;
|
||||
job.Start = DateTime.Today;
|
||||
job.Time = DateTime.Today;
|
||||
job.Step = 10;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue