数据模型

This commit is contained in:
大石头 2019-03-31 14:54:43 +08:00
parent eec9e389bf
commit 56fe305f7b
17 changed files with 4207 additions and 0 deletions

View File

@ -0,0 +1,66 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
<AssemblyTitle>星尘数据</AssemblyTitle>
<Description>星尘,轻量级服务框架。远程方法调用,服务自动注册和发现,负载均衡,动态伸缩,故障转移,性能监控。</Description>
<Copyright>版权所有(C) 新生命开发团队 2019</Copyright>
<Company>新生命开发团队</Company>
<Version>1.0.2019.0320</Version>
<FileVersion>1.0.2019.0320</FileVersion>
<AssemblyVersion>1.0.*</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Log\**" />
<EmbeddedResource Remove="Log\**" />
<None Remove="Log\**" />
</ItemGroup>
<ItemGroup>
<None Remove="Build.tt" />
</ItemGroup>
<ItemGroup>
<Content Include="Build.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Build.log</LastGenOutput>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AntJob\AntJob.csproj" />
</ItemGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net45'">
<Reference Include="NewLife.Core">
<HintPath>..\DLL\NewLife.Core.dll</HintPath>
</Reference>
<Reference Include="XCode">
<HintPath>..\DLL\XCode.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
<Reference Include="NewLife.Core">
<HintPath>..\DLL20\NewLife.Core.dll</HintPath>
</Reference>
<Reference Include="XCode">
<HintPath>..\DLL20\XCode.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Update="Build.log">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Build.tt</DependentUpon>
</None>
</ItemGroup>
</Project>

16
AntJob.Data/Build.tt Normal file
View File

@ -0,0 +1,16 @@
<#@ template language="C#" hostSpecific="true" debug="true" #>
<#@ assembly name="$(ProjectDir)\$(OutputPath)\NewLife.Core.dll" #>
<#@ assembly name="$(ProjectDir)\$(OutputPath)\XCode.dll" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="XCode.Code" #>
<#@ output extension=".log" #>
<#
// 设置当前工作目录
PathHelper.BaseDirectory = Host.ResolvePath(".");
// 导入模型文件并生成实体类,模型文件、输出目录、命名空间、连接名
EntityBuilder.Build();
//var tables = DAL.ImportFrom("Company.Project.xml");
//EntityBuilder.Build(tables);
#>

View File

@ -0,0 +1,10 @@
using XCode;
namespace AntJob.Data
{
/// <summary>实体基类</summary>
/// <typeparam name="TEntity"></typeparam>
public class EntityBase<TEntity> : Entity<TEntity> where TEntity : EntityBase<TEntity>, new()
{
}
}

View File

@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>作业</summary>
public partial class Job : EntityBase<Job>
{
#region
static Job()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.AppID);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<UserModule>();
Meta.Modules.Add<TimeModule>();
Meta.Modules.Add<IPModule>();
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 在新插入数据或者修改了指定字段时进行修正
// 处理当前已登录用户信息可以由UserModule过滤器代劳
/*var user = ManageProvider.User;
if (user != null)
{
if (isNew && !Dirtys[nameof(CreateUserID)) nameof(CreateUserID) = user.ID;
if (!Dirtys[nameof(UpdateUserID)]) nameof(UpdateUserID) = user.ID;
}*/
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
//if (isNew && !Dirtys[nameof(CreateIP)]) nameof(CreateIP) = ManageProvider.UserHost;
//if (!Dirtys[nameof(UpdateIP)]) nameof(UpdateIP) = ManageProvider.UserHost;
// 检查唯一索引
// CheckExist(isNew, __.AppID, __.Name);
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化Job[作业]数据……");
// var entity = new Job();
// entity.ID = 0;
// entity.AppID = 0;
// entity.Name = "abc";
// entity.DisplayName = "abc";
// entity.Mode = 0;
// entity.Topic = "abc";
// entity.MessageCount = 0;
// entity.Start = DateTime.Now;
// entity.End = DateTime.Now;
// entity.Step = 0;
// entity.MinStep = 0;
// entity.MaxStep = 0;
// entity.StepRate = 0;
// entity.BatchSize = 0;
// entity.Offset = 0;
// entity.MaxTask = 0;
// entity.MaxError = 0;
// entity.MaxRetry = 0;
// entity.MaxTime = 0;
// entity.MaxRetain = 0;
// entity.MaxIdle = 0;
// entity.ErrorDelay = 0;
// entity.Total = 0;
// entity.Success = 0;
// entity.Error = 0;
// entity.Times = 0;
// entity.Speed = 0;
// entity.FetchSpeed = 0;
// entity.Enable = true;
// entity.Description = "abc";
// entity.CreateUserID = 0;
// entity.CreateUser = "abc";
// entity.CreateTime = DateTime.Now;
// entity.CreateIP = "abc";
// entity.UpdateUserID = 0;
// entity.UpdateUser = "abc";
// entity.UpdateTime = DateTime.Now;
// entity.UpdateIP = "abc";
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化Job[作业]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
public App App { get { return Extends.Get(nameof(App), k => App.FindByID(AppID)); } }
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("应用")]
[Map(__.AppID, typeof(App), "ID")]
public String AppName { get { return App?.Name; } }
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static Job FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
/// <summary>根据应用、名称查找</summary>
/// <param name="appid">应用</param>
/// <param name="name">名称</param>
/// <returns>实体对象</returns>
public static Job FindByAppIDAndName(Int32 appid, String name)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.AppID == appid && e.Name == name);
return Find(_.AppID == appid & _.Name == name);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,790 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>作业</summary>
[Serializable]
[DataObject]
[Description("作业")]
[BindIndex("IU_Job_AppID_Name", true, "AppID,Name")]
[BindTable("Job", Description = "作业", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class Job : IJob
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private Int32 _AppID;
/// <summary>应用</summary>
[DisplayName("应用")]
[Description("应用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AppID", "应用", "")]
public Int32 AppID { get { return _AppID; } set { if (OnPropertyChanging(__.AppID, value)) { _AppID = value; OnPropertyChanged(__.AppID); } } }
private String _Name;
/// <summary>名称</summary>
[DisplayName("名称")]
[Description("名称")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Name", "名称", "", Master = true)]
public String Name { get { return _Name; } set { if (OnPropertyChanging(__.Name, value)) { _Name = value; OnPropertyChanged(__.Name); } } }
private String _DisplayName;
/// <summary>显示名</summary>
[DisplayName("显示名")]
[Description("显示名")]
[DataObjectField(false, false, true, 50)]
[BindColumn("DisplayName", "显示名", "")]
public String DisplayName { get { return _DisplayName; } set { if (OnPropertyChanging(__.DisplayName, value)) { _DisplayName = value; OnPropertyChanged(__.DisplayName); } } }
private JobModes _Mode;
/// <summary>调度模式</summary>
[DisplayName("调度模式")]
[Description("调度模式")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Mode", "调度模式", "")]
public JobModes Mode { get { return _Mode; } set { if (OnPropertyChanging(__.Mode, value)) { _Mode = value; OnPropertyChanged(__.Mode); } } }
private String _Topic;
/// <summary>主题。消息调度时消费的主题</summary>
[DisplayName("主题")]
[Description("主题。消息调度时消费的主题")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Topic", "主题。消息调度时消费的主题", "")]
public String Topic { get { return _Topic; } set { if (OnPropertyChanging(__.Topic, value)) { _Topic = value; OnPropertyChanged(__.Topic); } } }
private Int32 _MessageCount;
/// <summary>消息数</summary>
[DisplayName("消息数")]
[Description("消息数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MessageCount", "消息数", "")]
public Int32 MessageCount { get { return _MessageCount; } set { if (OnPropertyChanging(__.MessageCount, value)) { _MessageCount = value; OnPropertyChanged(__.MessageCount); } } }
private DateTime _Start;
/// <summary>开始。大于等于</summary>
[DisplayName("开始")]
[Description("开始。大于等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("Start", "开始。大于等于", "")]
public DateTime Start { get { return _Start; } set { if (OnPropertyChanging(__.Start, value)) { _Start = value; OnPropertyChanged(__.Start); } } }
private DateTime _End;
/// <summary>结束。小于,不等于</summary>
[DisplayName("结束")]
[Description("结束。小于,不等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("End", "结束。小于,不等于", "")]
public DateTime End { get { return _End; } set { if (OnPropertyChanging(__.End, value)) { _End = value; OnPropertyChanged(__.End); } } }
private Int32 _Step;
/// <summary>步进。最大区间大小,秒</summary>
[DisplayName("步进")]
[Description("步进。最大区间大小,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Step", "步进。最大区间大小,秒", "")]
public Int32 Step { get { return _Step; } set { if (OnPropertyChanging(__.Step, value)) { _Step = value; OnPropertyChanged(__.Step); } } }
private Int32 _MinStep;
/// <summary>最小步进。默认5秒</summary>
[DisplayName("最小步进")]
[Description("最小步进。默认5秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MinStep", "最小步进。默认5秒", "")]
public Int32 MinStep { get { return _MinStep; } set { if (OnPropertyChanging(__.MinStep, value)) { _MinStep = value; OnPropertyChanged(__.MinStep); } } }
private Int32 _MaxStep;
/// <summary>最大步进。默认3600秒</summary>
[DisplayName("最大步进")]
[Description("最大步进。默认3600秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxStep", "最大步进。默认3600秒", "")]
public Int32 MaxStep { get { return _MaxStep; } set { if (OnPropertyChanging(__.MaxStep, value)) { _MaxStep = value; OnPropertyChanged(__.MaxStep); } } }
private Int32 _StepRate;
/// <summary>步进率。动态调节步进时不能超过该比率百分位默认100%</summary>
[DisplayName("步进率")]
[Description("步进率。动态调节步进时不能超过该比率百分位默认100%")]
[DataObjectField(false, false, false, 0)]
[BindColumn("StepRate", "步进率。动态调节步进时不能超过该比率百分位默认100%", "")]
public Int32 StepRate { get { return _StepRate; } set { if (OnPropertyChanging(__.StepRate, value)) { _StepRate = value; OnPropertyChanged(__.StepRate); } } }
private Int32 _BatchSize;
/// <summary>批大小</summary>
[DisplayName("批大小")]
[Description("批大小")]
[DataObjectField(false, false, false, 0)]
[BindColumn("BatchSize", "批大小", "")]
public Int32 BatchSize { get { return _BatchSize; } set { if (OnPropertyChanging(__.BatchSize, value)) { _BatchSize = value; OnPropertyChanged(__.BatchSize); } } }
private Int32 _Offset;
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
[DisplayName("偏移")]
[Description("偏移。距离实时时间的秒数,部分业务不能跑到实时,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Offset", "偏移。距离实时时间的秒数,部分业务不能跑到实时,秒", "")]
public Int32 Offset { get { return _Offset; } set { if (OnPropertyChanging(__.Offset, value)) { _Offset = value; OnPropertyChanged(__.Offset); } } }
private Int32 _MaxTask;
/// <summary>并行。多任务并行处理</summary>
[DisplayName("并行")]
[Description("并行。多任务并行处理")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxTask", "并行。多任务并行处理", "")]
public Int32 MaxTask { get { return _MaxTask; } set { if (OnPropertyChanging(__.MaxTask, value)) { _MaxTask = value; OnPropertyChanged(__.MaxTask); } } }
private Int32 _MaxError;
/// <summary>最大错误。连续错误达到最大错误数时停止</summary>
[DisplayName("最大错误")]
[Description("最大错误。连续错误达到最大错误数时停止")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxError", "最大错误。连续错误达到最大错误数时停止", "")]
public Int32 MaxError { get { return _MaxError; } set { if (OnPropertyChanging(__.MaxError, value)) { _MaxError = value; OnPropertyChanged(__.MaxError); } } }
private Int32 _MaxRetry;
/// <summary>最大重试。默认10次超过该次数后将不再重试</summary>
[DisplayName("最大重试")]
[Description("最大重试。默认10次超过该次数后将不再重试")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxRetry", "最大重试。默认10次超过该次数后将不再重试", "")]
public Int32 MaxRetry { get { return _MaxRetry; } set { if (OnPropertyChanging(__.MaxRetry, value)) { _MaxRetry = value; OnPropertyChanged(__.MaxRetry); } } }
private Int32 _MaxTime;
/// <summary>最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器</summary>
[DisplayName("最大执行时间")]
[Description("最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxTime", "最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器", "")]
public Int32 MaxTime { get { return _MaxTime; } set { if (OnPropertyChanging(__.MaxTime, value)) { _MaxTime = value; OnPropertyChanged(__.MaxTime); } } }
private Int32 _MaxRetain;
/// <summary>保留。任务项保留天数超过天数的任务项将被删除默认3天</summary>
[DisplayName("保留")]
[Description("保留。任务项保留天数超过天数的任务项将被删除默认3天")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxRetain", "保留。任务项保留天数超过天数的任务项将被删除默认3天", "")]
public Int32 MaxRetain { get { return _MaxRetain; } set { if (OnPropertyChanging(__.MaxRetain, value)) { _MaxRetain = value; OnPropertyChanged(__.MaxRetain); } } }
private Int32 _MaxIdle;
/// <summary>最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警</summary>
[DisplayName("最大空闲时间")]
[Description("最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MaxIdle", "最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警", "")]
public Int32 MaxIdle { get { return _MaxIdle; } set { if (OnPropertyChanging(__.MaxIdle, value)) { _MaxIdle = value; OnPropertyChanged(__.MaxIdle); } } }
private Int32 _ErrorDelay;
/// <summary>错误延迟。默认60秒出错延迟后重新发放</summary>
[DisplayName("错误延迟")]
[Description("错误延迟。默认60秒出错延迟后重新发放")]
[DataObjectField(false, false, false, 0)]
[BindColumn("ErrorDelay", "错误延迟。默认60秒出错延迟后重新发放", "")]
public Int32 ErrorDelay { get { return _ErrorDelay; } set { if (OnPropertyChanging(__.ErrorDelay, value)) { _ErrorDelay = value; OnPropertyChanged(__.ErrorDelay); } } }
private Int64 _Total;
/// <summary>总数</summary>
[DisplayName("总数")]
[Description("总数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Total", "总数", "")]
public Int64 Total { get { return _Total; } set { if (OnPropertyChanging(__.Total, value)) { _Total = value; OnPropertyChanged(__.Total); } } }
private Int64 _Success;
/// <summary>成功</summary>
[DisplayName("成功")]
[Description("成功")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Success", "成功", "")]
public Int64 Success { get { return _Success; } set { if (OnPropertyChanging(__.Success, value)) { _Success = value; OnPropertyChanged(__.Success); } } }
private Int32 _Error;
/// <summary>错误</summary>
[DisplayName("错误")]
[Description("错误")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Error", "错误", "")]
public Int32 Error { get { return _Error; } set { if (OnPropertyChanging(__.Error, value)) { _Error = value; OnPropertyChanged(__.Error); } } }
private Int32 _Times;
/// <summary>次数</summary>
[DisplayName("次数")]
[Description("次数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Times", "次数", "")]
public Int32 Times { get { return _Times; } set { if (OnPropertyChanging(__.Times, value)) { _Times = value; OnPropertyChanged(__.Times); } } }
private Int32 _Speed;
/// <summary>速度</summary>
[DisplayName("速度")]
[Description("速度")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Speed", "速度", "")]
public Int32 Speed { get { return _Speed; } set { if (OnPropertyChanging(__.Speed, value)) { _Speed = value; OnPropertyChanged(__.Speed); } } }
private Int32 _FetchSpeed;
/// <summary>抽取速度</summary>
[DisplayName("抽取速度")]
[Description("抽取速度")]
[DataObjectField(false, false, false, 0)]
[BindColumn("FetchSpeed", "抽取速度", "")]
public Int32 FetchSpeed { get { return _FetchSpeed; } set { if (OnPropertyChanging(__.FetchSpeed, value)) { _FetchSpeed = value; OnPropertyChanged(__.FetchSpeed); } } }
private Boolean _Enable;
/// <summary>启用</summary>
[DisplayName("启用")]
[Description("启用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Enable", "启用", "")]
public Boolean Enable { get { return _Enable; } set { if (OnPropertyChanging(__.Enable, value)) { _Enable = value; OnPropertyChanged(__.Enable); } } }
private String _Description;
/// <summary>内容</summary>
[DisplayName("内容")]
[Description("内容")]
[DataObjectField(false, false, true, 2000)]
[BindColumn("Message", "内容", "")]
public String Description { get { return _Description; } set { if (OnPropertyChanging(__.Description, value)) { _Description = value; OnPropertyChanged(__.Description); } } }
private Int32 _CreateUserID;
/// <summary>创建者</summary>
[DisplayName("创建者")]
[Description("创建者")]
[DataObjectField(false, false, false, 0)]
[BindColumn("CreateUserID", "创建者", "")]
public Int32 CreateUserID { get { return _CreateUserID; } set { if (OnPropertyChanging(__.CreateUserID, value)) { _CreateUserID = value; OnPropertyChanged(__.CreateUserID); } } }
private String _CreateUser;
/// <summary>创建者</summary>
[DisplayName("创建者")]
[Description("创建者")]
[DataObjectField(false, false, true, 50)]
[BindColumn("CreateUser", "创建者", "")]
public String CreateUser { get { return _CreateUser; } set { if (OnPropertyChanging(__.CreateUser, value)) { _CreateUser = value; OnPropertyChanged(__.CreateUser); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private String _CreateIP;
/// <summary>创建地址</summary>
[DisplayName("创建地址")]
[Description("创建地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("CreateIP", "创建地址", "")]
public String CreateIP { get { return _CreateIP; } set { if (OnPropertyChanging(__.CreateIP, value)) { _CreateIP = value; OnPropertyChanged(__.CreateIP); } } }
private Int32 _UpdateUserID;
/// <summary>更新者</summary>
[DisplayName("更新者")]
[Description("更新者")]
[DataObjectField(false, false, false, 0)]
[BindColumn("UpdateUserID", "更新者", "")]
public Int32 UpdateUserID { get { return _UpdateUserID; } set { if (OnPropertyChanging(__.UpdateUserID, value)) { _UpdateUserID = value; OnPropertyChanged(__.UpdateUserID); } } }
private String _UpdateUser;
/// <summary>更新者</summary>
[DisplayName("更新者")]
[Description("更新者")]
[DataObjectField(false, false, true, 50)]
[BindColumn("UpdateUser", "更新者", "")]
public String UpdateUser { get { return _UpdateUser; } set { if (OnPropertyChanging(__.UpdateUser, value)) { _UpdateUser = value; OnPropertyChanged(__.UpdateUser); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
private String _UpdateIP;
/// <summary>更新地址</summary>
[DisplayName("更新地址")]
[Description("更新地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("UpdateIP", "更新地址", "")]
public String UpdateIP { get { return _UpdateIP; } set { if (OnPropertyChanging(__.UpdateIP, value)) { _UpdateIP = value; OnPropertyChanged(__.UpdateIP); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.AppID : return _AppID;
case __.Name : return _Name;
case __.DisplayName : return _DisplayName;
case __.Mode : return _Mode;
case __.Topic : return _Topic;
case __.MessageCount : return _MessageCount;
case __.Start : return _Start;
case __.End : return _End;
case __.Step : return _Step;
case __.MinStep : return _MinStep;
case __.MaxStep : return _MaxStep;
case __.StepRate : return _StepRate;
case __.BatchSize : return _BatchSize;
case __.Offset : return _Offset;
case __.MaxTask : return _MaxTask;
case __.MaxError : return _MaxError;
case __.MaxRetry : return _MaxRetry;
case __.MaxTime : return _MaxTime;
case __.MaxRetain : return _MaxRetain;
case __.MaxIdle : return _MaxIdle;
case __.ErrorDelay : return _ErrorDelay;
case __.Total : return _Total;
case __.Success : return _Success;
case __.Error : return _Error;
case __.Times : return _Times;
case __.Speed : return _Speed;
case __.FetchSpeed : return _FetchSpeed;
case __.Enable : return _Enable;
case __.Description : return _Description;
case __.CreateUserID : return _CreateUserID;
case __.CreateUser : return _CreateUser;
case __.CreateTime : return _CreateTime;
case __.CreateIP : return _CreateIP;
case __.UpdateUserID : return _UpdateUserID;
case __.UpdateUser : return _UpdateUser;
case __.UpdateTime : return _UpdateTime;
case __.UpdateIP : return _UpdateIP;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.AppID : _AppID = value.ToInt(); break;
case __.Name : _Name = Convert.ToString(value); break;
case __.DisplayName : _DisplayName = Convert.ToString(value); break;
case __.Mode : _Mode = (JobModes)value.ToInt(); break;
case __.Topic : _Topic = Convert.ToString(value); break;
case __.MessageCount : _MessageCount = value.ToInt(); break;
case __.Start : _Start = value.ToDateTime(); break;
case __.End : _End = value.ToDateTime(); break;
case __.Step : _Step = value.ToInt(); break;
case __.MinStep : _MinStep = value.ToInt(); break;
case __.MaxStep : _MaxStep = value.ToInt(); break;
case __.StepRate : _StepRate = value.ToInt(); break;
case __.BatchSize : _BatchSize = value.ToInt(); break;
case __.Offset : _Offset = value.ToInt(); break;
case __.MaxTask : _MaxTask = value.ToInt(); break;
case __.MaxError : _MaxError = value.ToInt(); break;
case __.MaxRetry : _MaxRetry = value.ToInt(); break;
case __.MaxTime : _MaxTime = value.ToInt(); break;
case __.MaxRetain : _MaxRetain = value.ToInt(); break;
case __.MaxIdle : _MaxIdle = value.ToInt(); break;
case __.ErrorDelay : _ErrorDelay = value.ToInt(); break;
case __.Total : _Total = value.ToLong(); break;
case __.Success : _Success = value.ToLong(); break;
case __.Error : _Error = value.ToInt(); break;
case __.Times : _Times = value.ToInt(); break;
case __.Speed : _Speed = value.ToInt(); break;
case __.FetchSpeed : _FetchSpeed = value.ToInt(); break;
case __.Enable : _Enable = value.ToBoolean(); break;
case __.Description : _Description = Convert.ToString(value); break;
case __.CreateUserID : _CreateUserID = value.ToInt(); break;
case __.CreateUser : _CreateUser = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.CreateIP : _CreateIP = Convert.ToString(value); break;
case __.UpdateUserID : _UpdateUserID = value.ToInt(); break;
case __.UpdateUser : _UpdateUser = Convert.ToString(value); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
case __.UpdateIP : _UpdateIP = Convert.ToString(value); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得作业字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>应用</summary>
public static readonly Field AppID = FindByName(__.AppID);
/// <summary>名称</summary>
public static readonly Field Name = FindByName(__.Name);
/// <summary>显示名</summary>
public static readonly Field DisplayName = FindByName(__.DisplayName);
/// <summary>调度模式</summary>
public static readonly Field Mode = FindByName(__.Mode);
/// <summary>主题。消息调度时消费的主题</summary>
public static readonly Field Topic = FindByName(__.Topic);
/// <summary>消息数</summary>
public static readonly Field MessageCount = FindByName(__.MessageCount);
/// <summary>开始。大于等于</summary>
public static readonly Field Start = FindByName(__.Start);
/// <summary>结束。小于,不等于</summary>
public static readonly Field End = FindByName(__.End);
/// <summary>步进。最大区间大小,秒</summary>
public static readonly Field Step = FindByName(__.Step);
/// <summary>最小步进。默认5秒</summary>
public static readonly Field MinStep = FindByName(__.MinStep);
/// <summary>最大步进。默认3600秒</summary>
public static readonly Field MaxStep = FindByName(__.MaxStep);
/// <summary>步进率。动态调节步进时不能超过该比率百分位默认100%</summary>
public static readonly Field StepRate = FindByName(__.StepRate);
/// <summary>批大小</summary>
public static readonly Field BatchSize = FindByName(__.BatchSize);
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
public static readonly Field Offset = FindByName(__.Offset);
/// <summary>并行。多任务并行处理</summary>
public static readonly Field MaxTask = FindByName(__.MaxTask);
/// <summary>最大错误。连续错误达到最大错误数时停止</summary>
public static readonly Field MaxError = FindByName(__.MaxError);
/// <summary>最大重试。默认10次超过该次数后将不再重试</summary>
public static readonly Field MaxRetry = FindByName(__.MaxRetry);
/// <summary>最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器</summary>
public static readonly Field MaxTime = FindByName(__.MaxTime);
/// <summary>保留。任务项保留天数超过天数的任务项将被删除默认3天</summary>
public static readonly Field MaxRetain = FindByName(__.MaxRetain);
/// <summary>最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警</summary>
public static readonly Field MaxIdle = FindByName(__.MaxIdle);
/// <summary>错误延迟。默认60秒出错延迟后重新发放</summary>
public static readonly Field ErrorDelay = FindByName(__.ErrorDelay);
/// <summary>总数</summary>
public static readonly Field Total = FindByName(__.Total);
/// <summary>成功</summary>
public static readonly Field Success = FindByName(__.Success);
/// <summary>错误</summary>
public static readonly Field Error = FindByName(__.Error);
/// <summary>次数</summary>
public static readonly Field Times = FindByName(__.Times);
/// <summary>速度</summary>
public static readonly Field Speed = FindByName(__.Speed);
/// <summary>抽取速度</summary>
public static readonly Field FetchSpeed = FindByName(__.FetchSpeed);
/// <summary>启用</summary>
public static readonly Field Enable = FindByName(__.Enable);
/// <summary>内容</summary>
public static readonly Field Description = FindByName(__.Description);
/// <summary>创建者</summary>
public static readonly Field CreateUserID = FindByName(__.CreateUserID);
/// <summary>创建者</summary>
public static readonly Field CreateUser = FindByName(__.CreateUser);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>创建地址</summary>
public static readonly Field CreateIP = FindByName(__.CreateIP);
/// <summary>更新者</summary>
public static readonly Field UpdateUserID = FindByName(__.UpdateUserID);
/// <summary>更新者</summary>
public static readonly Field UpdateUser = FindByName(__.UpdateUser);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
/// <summary>更新地址</summary>
public static readonly Field UpdateIP = FindByName(__.UpdateIP);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得作业字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>应用</summary>
public const String AppID = "AppID";
/// <summary>名称</summary>
public const String Name = "Name";
/// <summary>显示名</summary>
public const String DisplayName = "DisplayName";
/// <summary>调度模式</summary>
public const String Mode = "Mode";
/// <summary>主题。消息调度时消费的主题</summary>
public const String Topic = "Topic";
/// <summary>消息数</summary>
public const String MessageCount = "MessageCount";
/// <summary>开始。大于等于</summary>
public const String Start = "Start";
/// <summary>结束。小于,不等于</summary>
public const String End = "End";
/// <summary>步进。最大区间大小,秒</summary>
public const String Step = "Step";
/// <summary>最小步进。默认5秒</summary>
public const String MinStep = "MinStep";
/// <summary>最大步进。默认3600秒</summary>
public const String MaxStep = "MaxStep";
/// <summary>步进率。动态调节步进时不能超过该比率百分位默认100%</summary>
public const String StepRate = "StepRate";
/// <summary>批大小</summary>
public const String BatchSize = "BatchSize";
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
public const String Offset = "Offset";
/// <summary>并行。多任务并行处理</summary>
public const String MaxTask = "MaxTask";
/// <summary>最大错误。连续错误达到最大错误数时停止</summary>
public const String MaxError = "MaxError";
/// <summary>最大重试。默认10次超过该次数后将不再重试</summary>
public const String MaxRetry = "MaxRetry";
/// <summary>最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器</summary>
public const String MaxTime = "MaxTime";
/// <summary>保留。任务项保留天数超过天数的任务项将被删除默认3天</summary>
public const String MaxRetain = "MaxRetain";
/// <summary>最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警</summary>
public const String MaxIdle = "MaxIdle";
/// <summary>错误延迟。默认60秒出错延迟后重新发放</summary>
public const String ErrorDelay = "ErrorDelay";
/// <summary>总数</summary>
public const String Total = "Total";
/// <summary>成功</summary>
public const String Success = "Success";
/// <summary>错误</summary>
public const String Error = "Error";
/// <summary>次数</summary>
public const String Times = "Times";
/// <summary>速度</summary>
public const String Speed = "Speed";
/// <summary>抽取速度</summary>
public const String FetchSpeed = "FetchSpeed";
/// <summary>启用</summary>
public const String Enable = "Enable";
/// <summary>内容</summary>
public const String Description = "Description";
/// <summary>创建者</summary>
public const String CreateUserID = "CreateUserID";
/// <summary>创建者</summary>
public const String CreateUser = "CreateUser";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>创建地址</summary>
public const String CreateIP = "CreateIP";
/// <summary>更新者</summary>
public const String UpdateUserID = "UpdateUserID";
/// <summary>更新者</summary>
public const String UpdateUser = "UpdateUser";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
/// <summary>更新地址</summary>
public const String UpdateIP = "UpdateIP";
}
#endregion
}
/// <summary>作业接口</summary>
public partial interface IJob
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>应用</summary>
Int32 AppID { get; set; }
/// <summary>名称</summary>
String Name { get; set; }
/// <summary>显示名</summary>
String DisplayName { get; set; }
/// <summary>调度模式</summary>
JobModes Mode { get; set; }
/// <summary>主题。消息调度时消费的主题</summary>
String Topic { get; set; }
/// <summary>消息数</summary>
Int32 MessageCount { get; set; }
/// <summary>开始。大于等于</summary>
DateTime Start { get; set; }
/// <summary>结束。小于,不等于</summary>
DateTime End { get; set; }
/// <summary>步进。最大区间大小,秒</summary>
Int32 Step { get; set; }
/// <summary>最小步进。默认5秒</summary>
Int32 MinStep { get; set; }
/// <summary>最大步进。默认3600秒</summary>
Int32 MaxStep { get; set; }
/// <summary>步进率。动态调节步进时不能超过该比率百分位默认100%</summary>
Int32 StepRate { get; set; }
/// <summary>批大小</summary>
Int32 BatchSize { get; set; }
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
Int32 Offset { get; set; }
/// <summary>并行。多任务并行处理</summary>
Int32 MaxTask { get; set; }
/// <summary>最大错误。连续错误达到最大错误数时停止</summary>
Int32 MaxError { get; set; }
/// <summary>最大重试。默认10次超过该次数后将不再重试</summary>
Int32 MaxRetry { get; set; }
/// <summary>最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器</summary>
Int32 MaxTime { get; set; }
/// <summary>保留。任务项保留天数超过天数的任务项将被删除默认3天</summary>
Int32 MaxRetain { get; set; }
/// <summary>最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警</summary>
Int32 MaxIdle { get; set; }
/// <summary>错误延迟。默认60秒出错延迟后重新发放</summary>
Int32 ErrorDelay { get; set; }
/// <summary>总数</summary>
Int64 Total { get; set; }
/// <summary>成功</summary>
Int64 Success { get; set; }
/// <summary>错误</summary>
Int32 Error { get; set; }
/// <summary>次数</summary>
Int32 Times { get; set; }
/// <summary>速度</summary>
Int32 Speed { get; set; }
/// <summary>抽取速度</summary>
Int32 FetchSpeed { get; set; }
/// <summary>启用</summary>
Boolean Enable { get; set; }
/// <summary>内容</summary>
String Description { get; set; }
/// <summary>创建者</summary>
Int32 CreateUserID { get; set; }
/// <summary>创建者</summary>
String CreateUser { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>创建地址</summary>
String CreateIP { get; set; }
/// <summary>更新者</summary>
Int32 UpdateUserID { get; set; }
/// <summary>更新者</summary>
String UpdateUser { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
/// <summary>更新地址</summary>
String UpdateIP { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

View File

@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>作业日志</summary>
public partial class JobLog : EntityBase<JobLog>
{
#region
static JobLog()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.AppID);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<TimeModule>();
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 在新插入数据或者修改了指定字段时进行修正
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化JobLog[作业日志]数据……");
// var entity = new JobLog();
// entity.ID = 0;
// entity.AppID = 0;
// entity.JobID = 0;
// entity.LinkID = 0;
// entity.Client = "abc";
// entity.Start = DateTime.Now;
// entity.End = DateTime.Now;
// entity.Row = 0;
// entity.Step = 0;
// entity.BatchSize = 0;
// entity.Offset = 0;
// entity.Total = 0;
// entity.Success = 0;
// entity.Error = 0;
// entity.Times = 0;
// entity.Speed = 0;
// entity.FetchSpeed = 0;
// entity.Cost = 0;
// entity.FullCost = 0;
// entity.Status = 0;
// entity.MsgCount = 0;
// entity.Server = "abc";
// entity.ProcessID = 0;
// entity.ThreadID = 0;
// entity.Key = "abc";
// entity.Data = "abc";
// entity.Message = "abc";
// entity.CreateTime = DateTime.Now;
// entity.UpdateTime = DateTime.Now;
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化JobLog[作业日志]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
public App App { get { return Extends.Get(nameof(App), k => App.FindByID(AppID)); } }
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("应用")]
[Map(__.AppID, typeof(App), "ID")]
public String AppName { get { return App?.Name; } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
public Job Job { get { return Extends.Get(nameof(Job), k => Job.FindByID(JobID)); } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("作业")]
[Map(__.JobID, typeof(Job), "ID")]
public String JobName { get { return Job?.Name; } }
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static JobLog FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
/// <summary>根据应用、客户端、状态查找</summary>
/// <param name="appid">应用</param>
/// <param name="client">客户端</param>
/// <param name="status">状态</param>
/// <returns>实体列表</returns>
public static IList<JobLog> FindAllByAppIDAndClientAndStatus(Int32 appid, String client, Int32 status)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.AppID == appid && e.Client == client && e.Status == status);
return FindAll(_.AppID == appid & _.Client == client & _.Status == status);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,621 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>作业日志</summary>
[Serializable]
[DataObject]
[Description("作业日志")]
[BindIndex("IX_JobLog_JobID_Status_Start", false, "JobID,Status,Start")]
[BindIndex("IX_JobLog_AppID_Client_Status", false, "AppID,Client,Status")]
[BindIndex("IX_JobLog_JobID_CreateTime", false, "JobID,CreateTime")]
[BindTable("JobLog", Description = "作业日志", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class JobLog : IJobLog
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private Int32 _AppID;
/// <summary>应用</summary>
[DisplayName("应用")]
[Description("应用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AppID", "应用", "")]
public Int32 AppID { get { return _AppID; } set { if (OnPropertyChanging(__.AppID, value)) { _AppID = value; OnPropertyChanged(__.AppID); } } }
private Int32 _JobID;
/// <summary>作业</summary>
[DisplayName("作业")]
[Description("作业")]
[DataObjectField(false, false, false, 0)]
[BindColumn("JobID", "作业", "")]
public Int32 JobID { get { return _JobID; } set { if (OnPropertyChanging(__.JobID, value)) { _JobID = value; OnPropertyChanged(__.JobID); } } }
private Int32 _LinkID;
/// <summary>关联任务。消息作业关联的生产任务</summary>
[DisplayName("关联任务")]
[Description("关联任务。消息作业关联的生产任务")]
[DataObjectField(false, false, false, 0)]
[BindColumn("LinkID", "关联任务。消息作业关联的生产任务", "")]
public Int32 LinkID { get { return _LinkID; } set { if (OnPropertyChanging(__.LinkID, value)) { _LinkID = value; OnPropertyChanged(__.LinkID); } } }
private String _Client;
/// <summary>客户端。IP加进程</summary>
[DisplayName("客户端")]
[Description("客户端。IP加进程")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Client", "客户端。IP加进程", "")]
public String Client { get { return _Client; } set { if (OnPropertyChanging(__.Client, value)) { _Client = value; OnPropertyChanged(__.Client); } } }
private DateTime _Start;
/// <summary>开始。大于等于</summary>
[DisplayName("开始")]
[Description("开始。大于等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("Start", "开始。大于等于", "")]
public DateTime Start { get { return _Start; } set { if (OnPropertyChanging(__.Start, value)) { _Start = value; OnPropertyChanged(__.Start); } } }
private DateTime _End;
/// <summary>结束。小于,不等于</summary>
[DisplayName("结束")]
[Description("结束。小于,不等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("End", "结束。小于,不等于", "")]
public DateTime End { get { return _End; } set { if (OnPropertyChanging(__.End, value)) { _End = value; OnPropertyChanged(__.End); } } }
private Int32 _Row;
/// <summary>行。分页起始行</summary>
[DisplayName("行")]
[Description("行。分页起始行")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Row", "行。分页起始行", "")]
public Int32 Row { get { return _Row; } set { if (OnPropertyChanging(__.Row, value)) { _Row = value; OnPropertyChanged(__.Row); } } }
private Int32 _Step;
/// <summary>步进。最大区间大小,秒</summary>
[DisplayName("步进")]
[Description("步进。最大区间大小,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Step", "步进。最大区间大小,秒", "")]
public Int32 Step { get { return _Step; } set { if (OnPropertyChanging(__.Step, value)) { _Step = value; OnPropertyChanged(__.Step); } } }
private Int32 _BatchSize;
/// <summary>批大小</summary>
[DisplayName("批大小")]
[Description("批大小")]
[DataObjectField(false, false, false, 0)]
[BindColumn("BatchSize", "批大小", "")]
public Int32 BatchSize { get { return _BatchSize; } set { if (OnPropertyChanging(__.BatchSize, value)) { _BatchSize = value; OnPropertyChanged(__.BatchSize); } } }
private Int32 _Offset;
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
[DisplayName("偏移")]
[Description("偏移。距离实时时间的秒数,部分业务不能跑到实时,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Offset", "偏移。距离实时时间的秒数,部分业务不能跑到实时,秒", "")]
public Int32 Offset { get { return _Offset; } set { if (OnPropertyChanging(__.Offset, value)) { _Offset = value; OnPropertyChanged(__.Offset); } } }
private Int32 _Total;
/// <summary>总数</summary>
[DisplayName("总数")]
[Description("总数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Total", "总数", "")]
public Int32 Total { get { return _Total; } set { if (OnPropertyChanging(__.Total, value)) { _Total = value; OnPropertyChanged(__.Total); } } }
private Int32 _Success;
/// <summary>成功</summary>
[DisplayName("成功")]
[Description("成功")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Success", "成功", "")]
public Int32 Success { get { return _Success; } set { if (OnPropertyChanging(__.Success, value)) { _Success = value; OnPropertyChanged(__.Success); } } }
private Int32 _Error;
/// <summary>错误</summary>
[DisplayName("错误")]
[Description("错误")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Error", "错误", "")]
public Int32 Error { get { return _Error; } set { if (OnPropertyChanging(__.Error, value)) { _Error = value; OnPropertyChanged(__.Error); } } }
private Int32 _Times;
/// <summary>次数</summary>
[DisplayName("次数")]
[Description("次数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Times", "次数", "")]
public Int32 Times { get { return _Times; } set { if (OnPropertyChanging(__.Times, value)) { _Times = value; OnPropertyChanged(__.Times); } } }
private Int32 _Speed;
/// <summary>速度</summary>
[DisplayName("速度")]
[Description("速度")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Speed", "速度", "")]
public Int32 Speed { get { return _Speed; } set { if (OnPropertyChanging(__.Speed, value)) { _Speed = value; OnPropertyChanged(__.Speed); } } }
private Int32 _FetchSpeed;
/// <summary>抽取速度</summary>
[DisplayName("抽取速度")]
[Description("抽取速度")]
[DataObjectField(false, false, false, 0)]
[BindColumn("FetchSpeed", "抽取速度", "")]
public Int32 FetchSpeed { get { return _FetchSpeed; } set { if (OnPropertyChanging(__.FetchSpeed, value)) { _FetchSpeed = value; OnPropertyChanged(__.FetchSpeed); } } }
private Int32 _Cost;
/// <summary>耗时。秒</summary>
[DisplayName("耗时")]
[Description("耗时。秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Cost", "耗时。秒", "")]
public Int32 Cost { get { return _Cost; } set { if (OnPropertyChanging(__.Cost, value)) { _Cost = value; OnPropertyChanged(__.Cost); } } }
private Int32 _FullCost;
/// <summary>全部耗时。秒,从任务发放到执行完成的时间</summary>
[DisplayName("全部耗时")]
[Description("全部耗时。秒,从任务发放到执行完成的时间")]
[DataObjectField(false, false, false, 0)]
[BindColumn("FullCost", "全部耗时。秒,从任务发放到执行完成的时间", "")]
public Int32 FullCost { get { return _FullCost; } set { if (OnPropertyChanging(__.FullCost, value)) { _FullCost = value; OnPropertyChanged(__.FullCost); } } }
private JobStatus _Status;
/// <summary>状态</summary>
[DisplayName("状态")]
[Description("状态")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Status", "状态", "")]
public JobStatus Status { get { return _Status; } set { if (OnPropertyChanging(__.Status, value)) { _Status = value; OnPropertyChanged(__.Status); } } }
private Int32 _MsgCount;
/// <summary>消费消息数</summary>
[DisplayName("消费消息数")]
[Description("消费消息数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MsgCount", "消费消息数", "")]
public Int32 MsgCount { get { return _MsgCount; } set { if (OnPropertyChanging(__.MsgCount, value)) { _MsgCount = value; OnPropertyChanged(__.MsgCount); } } }
private String _Server;
/// <summary>服务器</summary>
[DisplayName("服务器")]
[Description("服务器")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Server", "服务器", "")]
public String Server { get { return _Server; } set { if (OnPropertyChanging(__.Server, value)) { _Server = value; OnPropertyChanged(__.Server); } } }
private Int32 _ProcessID;
/// <summary>进程</summary>
[DisplayName("进程")]
[Description("进程")]
[DataObjectField(false, false, false, 0)]
[BindColumn("ProcessID", "进程", "")]
public Int32 ProcessID { get { return _ProcessID; } set { if (OnPropertyChanging(__.ProcessID, value)) { _ProcessID = value; OnPropertyChanged(__.ProcessID); } } }
private Int32 _ThreadID;
/// <summary>线程</summary>
[DisplayName("线程")]
[Description("线程")]
[DataObjectField(false, false, false, 0)]
[BindColumn("ThreadID", "线程", "")]
public Int32 ThreadID { get { return _ThreadID; } set { if (OnPropertyChanging(__.ThreadID, value)) { _ThreadID = value; OnPropertyChanged(__.ThreadID); } } }
private String _Key;
/// <summary>最后键</summary>
[DisplayName("最后键")]
[Description("最后键")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Key", "最后键", "")]
public String Key { get { return _Key; } set { if (OnPropertyChanging(__.Key, value)) { _Key = value; OnPropertyChanged(__.Key); } } }
private String _Data;
/// <summary>数据。可以是Json数据比如StatID</summary>
[DisplayName("数据")]
[Description("数据。可以是Json数据比如StatID")]
[DataObjectField(false, false, true, 8000)]
[BindColumn("Data", "数据。可以是Json数据比如StatID", "")]
public String Data { get { return _Data; } set { if (OnPropertyChanging(__.Data, value)) { _Data = value; OnPropertyChanged(__.Data); } } }
private String _Message;
/// <summary>备注</summary>
[DisplayName("备注")]
[Description("备注")]
[DataObjectField(false, false, true, 2000)]
[BindColumn("Message", "备注", "")]
public String Message { get { return _Message; } set { if (OnPropertyChanging(__.Message, value)) { _Message = value; OnPropertyChanged(__.Message); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.AppID : return _AppID;
case __.JobID : return _JobID;
case __.LinkID : return _LinkID;
case __.Client : return _Client;
case __.Start : return _Start;
case __.End : return _End;
case __.Row : return _Row;
case __.Step : return _Step;
case __.BatchSize : return _BatchSize;
case __.Offset : return _Offset;
case __.Total : return _Total;
case __.Success : return _Success;
case __.Error : return _Error;
case __.Times : return _Times;
case __.Speed : return _Speed;
case __.FetchSpeed : return _FetchSpeed;
case __.Cost : return _Cost;
case __.FullCost : return _FullCost;
case __.Status : return _Status;
case __.MsgCount : return _MsgCount;
case __.Server : return _Server;
case __.ProcessID : return _ProcessID;
case __.ThreadID : return _ThreadID;
case __.Key : return _Key;
case __.Data : return _Data;
case __.Message : return _Message;
case __.CreateTime : return _CreateTime;
case __.UpdateTime : return _UpdateTime;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.AppID : _AppID = value.ToInt(); break;
case __.JobID : _JobID = value.ToInt(); break;
case __.LinkID : _LinkID = value.ToInt(); break;
case __.Client : _Client = Convert.ToString(value); break;
case __.Start : _Start = value.ToDateTime(); break;
case __.End : _End = value.ToDateTime(); break;
case __.Row : _Row = value.ToInt(); break;
case __.Step : _Step = value.ToInt(); break;
case __.BatchSize : _BatchSize = value.ToInt(); break;
case __.Offset : _Offset = value.ToInt(); break;
case __.Total : _Total = value.ToInt(); break;
case __.Success : _Success = value.ToInt(); break;
case __.Error : _Error = value.ToInt(); break;
case __.Times : _Times = value.ToInt(); break;
case __.Speed : _Speed = value.ToInt(); break;
case __.FetchSpeed : _FetchSpeed = value.ToInt(); break;
case __.Cost : _Cost = value.ToInt(); break;
case __.FullCost : _FullCost = value.ToInt(); break;
case __.Status : _Status = (JobStatus)value.ToInt(); break;
case __.MsgCount : _MsgCount = value.ToInt(); break;
case __.Server : _Server = Convert.ToString(value); break;
case __.ProcessID : _ProcessID = value.ToInt(); break;
case __.ThreadID : _ThreadID = value.ToInt(); break;
case __.Key : _Key = Convert.ToString(value); break;
case __.Data : _Data = Convert.ToString(value); break;
case __.Message : _Message = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得作业日志字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>应用</summary>
public static readonly Field AppID = FindByName(__.AppID);
/// <summary>作业</summary>
public static readonly Field JobID = FindByName(__.JobID);
/// <summary>关联任务。消息作业关联的生产任务</summary>
public static readonly Field LinkID = FindByName(__.LinkID);
/// <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 End = FindByName(__.End);
/// <summary>行。分页起始行</summary>
public static readonly Field Row = FindByName(__.Row);
/// <summary>步进。最大区间大小,秒</summary>
public static readonly Field Step = FindByName(__.Step);
/// <summary>批大小</summary>
public static readonly Field BatchSize = FindByName(__.BatchSize);
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
public static readonly Field Offset = FindByName(__.Offset);
/// <summary>总数</summary>
public static readonly Field Total = FindByName(__.Total);
/// <summary>成功</summary>
public static readonly Field Success = FindByName(__.Success);
/// <summary>错误</summary>
public static readonly Field Error = FindByName(__.Error);
/// <summary>次数</summary>
public static readonly Field Times = FindByName(__.Times);
/// <summary>速度</summary>
public static readonly Field Speed = FindByName(__.Speed);
/// <summary>抽取速度</summary>
public static readonly Field FetchSpeed = FindByName(__.FetchSpeed);
/// <summary>耗时。秒</summary>
public static readonly Field Cost = FindByName(__.Cost);
/// <summary>全部耗时。秒,从任务发放到执行完成的时间</summary>
public static readonly Field FullCost = FindByName(__.FullCost);
/// <summary>状态</summary>
public static readonly Field Status = FindByName(__.Status);
/// <summary>消费消息数</summary>
public static readonly Field MsgCount = FindByName(__.MsgCount);
/// <summary>服务器</summary>
public static readonly Field Server = FindByName(__.Server);
/// <summary>进程</summary>
public static readonly Field ProcessID = FindByName(__.ProcessID);
/// <summary>线程</summary>
public static readonly Field ThreadID = FindByName(__.ThreadID);
/// <summary>最后键</summary>
public static readonly Field Key = FindByName(__.Key);
/// <summary>数据。可以是Json数据比如StatID</summary>
public static readonly Field Data = FindByName(__.Data);
/// <summary>备注</summary>
public static readonly Field Message = FindByName(__.Message);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得作业日志字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>应用</summary>
public const String AppID = "AppID";
/// <summary>作业</summary>
public const String JobID = "JobID";
/// <summary>关联任务。消息作业关联的生产任务</summary>
public const String LinkID = "LinkID";
/// <summary>客户端。IP加进程</summary>
public const String Client = "Client";
/// <summary>开始。大于等于</summary>
public const String Start = "Start";
/// <summary>结束。小于,不等于</summary>
public const String End = "End";
/// <summary>行。分页起始行</summary>
public const String Row = "Row";
/// <summary>步进。最大区间大小,秒</summary>
public const String Step = "Step";
/// <summary>批大小</summary>
public const String BatchSize = "BatchSize";
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
public const String Offset = "Offset";
/// <summary>总数</summary>
public const String Total = "Total";
/// <summary>成功</summary>
public const String Success = "Success";
/// <summary>错误</summary>
public const String Error = "Error";
/// <summary>次数</summary>
public const String Times = "Times";
/// <summary>速度</summary>
public const String Speed = "Speed";
/// <summary>抽取速度</summary>
public const String FetchSpeed = "FetchSpeed";
/// <summary>耗时。秒</summary>
public const String Cost = "Cost";
/// <summary>全部耗时。秒,从任务发放到执行完成的时间</summary>
public const String FullCost = "FullCost";
/// <summary>状态</summary>
public const String Status = "Status";
/// <summary>消费消息数</summary>
public const String MsgCount = "MsgCount";
/// <summary>服务器</summary>
public const String Server = "Server";
/// <summary>进程</summary>
public const String ProcessID = "ProcessID";
/// <summary>线程</summary>
public const String ThreadID = "ThreadID";
/// <summary>最后键</summary>
public const String Key = "Key";
/// <summary>数据。可以是Json数据比如StatID</summary>
public const String Data = "Data";
/// <summary>备注</summary>
public const String Message = "Message";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
}
#endregion
}
/// <summary>作业日志接口</summary>
public partial interface IJobLog
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>应用</summary>
Int32 AppID { get; set; }
/// <summary>作业</summary>
Int32 JobID { get; set; }
/// <summary>关联任务。消息作业关联的生产任务</summary>
Int32 LinkID { get; set; }
/// <summary>客户端。IP加进程</summary>
String Client { get; set; }
/// <summary>开始。大于等于</summary>
DateTime Start { get; set; }
/// <summary>结束。小于,不等于</summary>
DateTime End { get; set; }
/// <summary>行。分页起始行</summary>
Int32 Row { get; set; }
/// <summary>步进。最大区间大小,秒</summary>
Int32 Step { get; set; }
/// <summary>批大小</summary>
Int32 BatchSize { get; set; }
/// <summary>偏移。距离实时时间的秒数,部分业务不能跑到实时,秒</summary>
Int32 Offset { get; set; }
/// <summary>总数</summary>
Int32 Total { get; set; }
/// <summary>成功</summary>
Int32 Success { get; set; }
/// <summary>错误</summary>
Int32 Error { get; set; }
/// <summary>次数</summary>
Int32 Times { get; set; }
/// <summary>速度</summary>
Int32 Speed { get; set; }
/// <summary>抽取速度</summary>
Int32 FetchSpeed { get; set; }
/// <summary>耗时。秒</summary>
Int32 Cost { get; set; }
/// <summary>全部耗时。秒,从任务发放到执行完成的时间</summary>
Int32 FullCost { get; set; }
/// <summary>状态</summary>
JobStatus Status { get; set; }
/// <summary>消费消息数</summary>
Int32 MsgCount { get; set; }
/// <summary>服务器</summary>
String Server { get; set; }
/// <summary>进程</summary>
Int32 ProcessID { get; set; }
/// <summary>线程</summary>
Int32 ThreadID { get; set; }
/// <summary>最后键</summary>
String Key { get; set; }
/// <summary>数据。可以是Json数据比如StatID</summary>
String Data { get; set; }
/// <summary>备注</summary>
String Message { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

View File

@ -0,0 +1,207 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>作业错误</summary>
public partial class JobError : EntityBase<JobError>
{
#region
static JobError()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.AppID);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<TimeModule>();
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 在新插入数据或者修改了指定字段时进行修正
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化JobError[作业错误]数据……");
// var entity = new JobError();
// entity.ID = 0;
// entity.AppID = 0;
// entity.JobID = 0;
// entity.JobLogID = 0;
// entity.Client = "abc";
// entity.Start = DateTime.Now;
// entity.End = DateTime.Now;
// entity.Row = 0;
// entity.Step = 0;
// entity.BatchSize = 0;
// entity.Key = "abc";
// entity.Data = "abc";
// entity.Server = "abc";
// entity.ProcessID = 0;
// entity.ThreadID = 0;
// entity.ErrorCode = "abc";
// entity.Message = "abc";
// entity.CreateTime = DateTime.Now;
// entity.UpdateTime = DateTime.Now;
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化JobError[作业错误]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
public App App { get { return Extends.Get(nameof(App), k => App.FindByID(AppID)); } }
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("应用")]
[Map(__.AppID, typeof(App), "ID")]
public String AppName { get { return App?.Name; } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
public Job Job { get { return Extends.Get(nameof(Job), k => Job.FindByID(JobID)); } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("作业")]
[Map(__.JobID, typeof(Job), "ID")]
public String JobName { get { return Job?.Name; } }
/// <summary>作业项</summary>
[XmlIgnore]
//[ScriptIgnore]
public JobLog JobLog { get { return Extends.Get(nameof(JobLog), k => JobLog.FindByID(JobLogID)); } }
/// <summary>作业项</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("作业项")]
[Map(__.JobLogID, typeof(JobLog), "ID")]
public Int32 JobLogID { get { return JobLog != null ? JobLog.ID : 0; } }
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static JobError FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
/// <summary>根据编号、应用查找</summary>
/// <param name="id">编号</param>
/// <param name="appid">应用</param>
/// <returns>实体列表</returns>
public static IList<JobError> FindAllByIDAndAppID(Int32 id, Int32 appid)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.ID == id && e.AppID == appid);
return FindAll(_.ID == id & _.AppID == appid);
}
/// <summary>根据编号、作业查找</summary>
/// <param name="id">编号</param>
/// <param name="jobid">作业</param>
/// <returns>实体列表</returns>
public static IList<JobError> FindAllByIDAndJobID(Int32 id, Int32 jobid)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.ID == id && e.JobID == jobid);
return FindAll(_.ID == id & _.JobID == jobid);
}
/// <summary>根据数据键查找</summary>
/// <param name="key">数据键</param>
/// <returns>实体列表</returns>
public static IList<JobError> FindAllByKey(String key)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.Key == key);
return FindAll(_.Key == key);
}
/// <summary>根据错误码查找</summary>
/// <param name="errorcode">错误码</param>
/// <returns>实体列表</returns>
public static IList<JobError> FindAllByErrorCode(String errorcode)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.ErrorCode == errorcode);
return FindAll(_.ErrorCode == errorcode);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,432 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>作业错误</summary>
[Serializable]
[DataObject]
[Description("作业错误")]
[BindIndex("IX_JobError_AppID_ID", false, "AppID,ID")]
[BindIndex("IX_JobError_JobID_ID", false, "JobID,ID")]
[BindIndex("IX_JobError_Key", false, "Key")]
[BindIndex("IX_JobError_ErrorCode", false, "ErrorCode")]
[BindTable("JobError", Description = "作业错误", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class JobError : IJobError
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private Int32 _AppID;
/// <summary>应用</summary>
[DisplayName("应用")]
[Description("应用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AppID", "应用", "")]
public Int32 AppID { get { return _AppID; } set { if (OnPropertyChanging(__.AppID, value)) { _AppID = value; OnPropertyChanged(__.AppID); } } }
private Int32 _JobID;
/// <summary>作业</summary>
[DisplayName("作业")]
[Description("作业")]
[DataObjectField(false, false, false, 0)]
[BindColumn("JobID", "作业", "")]
public Int32 JobID { get { return _JobID; } set { if (OnPropertyChanging(__.JobID, value)) { _JobID = value; OnPropertyChanged(__.JobID); } } }
private Int32 _JobLogID;
/// <summary>作业项</summary>
[DisplayName("作业项")]
[Description("作业项")]
[DataObjectField(false, false, false, 0)]
[BindColumn("JobLogID", "作业项", "")]
public Int32 JobLogID { get { return _JobLogID; } set { if (OnPropertyChanging(__.JobLogID, value)) { _JobLogID = value; OnPropertyChanged(__.JobLogID); } } }
private String _Client;
/// <summary>客户端。IP加进程</summary>
[DisplayName("客户端")]
[Description("客户端。IP加进程")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Client", "客户端。IP加进程", "")]
public String Client { get { return _Client; } set { if (OnPropertyChanging(__.Client, value)) { _Client = value; OnPropertyChanged(__.Client); } } }
private DateTime _Start;
/// <summary>开始。大于等于</summary>
[DisplayName("开始")]
[Description("开始。大于等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("Start", "开始。大于等于", "")]
public DateTime Start { get { return _Start; } set { if (OnPropertyChanging(__.Start, value)) { _Start = value; OnPropertyChanged(__.Start); } } }
private DateTime _End;
/// <summary>结束。小于,不等于</summary>
[DisplayName("结束")]
[Description("结束。小于,不等于")]
[DataObjectField(false, false, true, 0)]
[BindColumn("End", "结束。小于,不等于", "")]
public DateTime End { get { return _End; } set { if (OnPropertyChanging(__.End, value)) { _End = value; OnPropertyChanged(__.End); } } }
private Int32 _Row;
/// <summary>行。分页起始行</summary>
[DisplayName("行")]
[Description("行。分页起始行")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Row", "行。分页起始行", "")]
public Int32 Row { get { return _Row; } set { if (OnPropertyChanging(__.Row, value)) { _Row = value; OnPropertyChanged(__.Row); } } }
private Int32 _Step;
/// <summary>步进。最大区间大小,秒</summary>
[DisplayName("步进")]
[Description("步进。最大区间大小,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Step", "步进。最大区间大小,秒", "")]
public Int32 Step { get { return _Step; } set { if (OnPropertyChanging(__.Step, value)) { _Step = value; OnPropertyChanged(__.Step); } } }
private Int32 _BatchSize;
/// <summary>批大小</summary>
[DisplayName("批大小")]
[Description("批大小")]
[DataObjectField(false, false, false, 0)]
[BindColumn("BatchSize", "批大小", "")]
public Int32 BatchSize { get { return _BatchSize; } set { if (OnPropertyChanging(__.BatchSize, value)) { _BatchSize = value; OnPropertyChanged(__.BatchSize); } } }
private String _Key;
/// <summary>数据键</summary>
[DisplayName("数据键")]
[Description("数据键")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Key", "数据键", "")]
public String Key { get { return _Key; } set { if (OnPropertyChanging(__.Key, value)) { _Key = value; OnPropertyChanged(__.Key); } } }
private String _Data;
/// <summary>数据</summary>
[DisplayName("数据")]
[Description("数据")]
[DataObjectField(false, false, true, 2000)]
[BindColumn("Data", "数据", "")]
public String Data { get { return _Data; } set { if (OnPropertyChanging(__.Data, value)) { _Data = value; OnPropertyChanged(__.Data); } } }
private String _Server;
/// <summary>服务器</summary>
[DisplayName("服务器")]
[Description("服务器")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Server", "服务器", "")]
public String Server { get { return _Server; } set { if (OnPropertyChanging(__.Server, value)) { _Server = value; OnPropertyChanged(__.Server); } } }
private Int32 _ProcessID;
/// <summary>进程</summary>
[DisplayName("进程")]
[Description("进程")]
[DataObjectField(false, false, false, 0)]
[BindColumn("ProcessID", "进程", "")]
public Int32 ProcessID { get { return _ProcessID; } set { if (OnPropertyChanging(__.ProcessID, value)) { _ProcessID = value; OnPropertyChanged(__.ProcessID); } } }
private Int32 _ThreadID;
/// <summary>线程</summary>
[DisplayName("线程")]
[Description("线程")]
[DataObjectField(false, false, false, 0)]
[BindColumn("ThreadID", "线程", "")]
public Int32 ThreadID { get { return _ThreadID; } set { if (OnPropertyChanging(__.ThreadID, value)) { _ThreadID = value; OnPropertyChanged(__.ThreadID); } } }
private String _ErrorCode;
/// <summary>错误码</summary>
[DisplayName("错误码")]
[Description("错误码")]
[DataObjectField(false, false, true, 50)]
[BindColumn("ErrorCode", "错误码", "")]
public String ErrorCode { get { return _ErrorCode; } set { if (OnPropertyChanging(__.ErrorCode, value)) { _ErrorCode = value; OnPropertyChanged(__.ErrorCode); } } }
private String _Message;
/// <summary>内容</summary>
[DisplayName("内容")]
[Description("内容")]
[DataObjectField(false, false, true, 2000)]
[BindColumn("Message", "内容", "")]
public String Message { get { return _Message; } set { if (OnPropertyChanging(__.Message, value)) { _Message = value; OnPropertyChanged(__.Message); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.AppID : return _AppID;
case __.JobID : return _JobID;
case __.JobLogID : return _JobLogID;
case __.Client : return _Client;
case __.Start : return _Start;
case __.End : return _End;
case __.Row : return _Row;
case __.Step : return _Step;
case __.BatchSize : return _BatchSize;
case __.Key : return _Key;
case __.Data : return _Data;
case __.Server : return _Server;
case __.ProcessID : return _ProcessID;
case __.ThreadID : return _ThreadID;
case __.ErrorCode : return _ErrorCode;
case __.Message : return _Message;
case __.CreateTime : return _CreateTime;
case __.UpdateTime : return _UpdateTime;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.AppID : _AppID = value.ToInt(); break;
case __.JobID : _JobID = value.ToInt(); break;
case __.JobLogID : _JobLogID = value.ToInt(); break;
case __.Client : _Client = Convert.ToString(value); break;
case __.Start : _Start = value.ToDateTime(); break;
case __.End : _End = value.ToDateTime(); break;
case __.Row : _Row = value.ToInt(); break;
case __.Step : _Step = value.ToInt(); break;
case __.BatchSize : _BatchSize = value.ToInt(); break;
case __.Key : _Key = Convert.ToString(value); break;
case __.Data : _Data = Convert.ToString(value); break;
case __.Server : _Server = Convert.ToString(value); break;
case __.ProcessID : _ProcessID = value.ToInt(); break;
case __.ThreadID : _ThreadID = value.ToInt(); break;
case __.ErrorCode : _ErrorCode = Convert.ToString(value); break;
case __.Message : _Message = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得作业错误字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>应用</summary>
public static readonly Field AppID = FindByName(__.AppID);
/// <summary>作业</summary>
public static readonly Field JobID = FindByName(__.JobID);
/// <summary>作业项</summary>
public static readonly Field JobLogID = FindByName(__.JobLogID);
/// <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 End = FindByName(__.End);
/// <summary>行。分页起始行</summary>
public static readonly Field Row = FindByName(__.Row);
/// <summary>步进。最大区间大小,秒</summary>
public static readonly Field Step = FindByName(__.Step);
/// <summary>批大小</summary>
public static readonly Field BatchSize = FindByName(__.BatchSize);
/// <summary>数据键</summary>
public static readonly Field Key = FindByName(__.Key);
/// <summary>数据</summary>
public static readonly Field Data = FindByName(__.Data);
/// <summary>服务器</summary>
public static readonly Field Server = FindByName(__.Server);
/// <summary>进程</summary>
public static readonly Field ProcessID = FindByName(__.ProcessID);
/// <summary>线程</summary>
public static readonly Field ThreadID = FindByName(__.ThreadID);
/// <summary>错误码</summary>
public static readonly Field ErrorCode = FindByName(__.ErrorCode);
/// <summary>内容</summary>
public static readonly Field Message = FindByName(__.Message);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得作业错误字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>应用</summary>
public const String AppID = "AppID";
/// <summary>作业</summary>
public const String JobID = "JobID";
/// <summary>作业项</summary>
public const String JobLogID = "JobLogID";
/// <summary>客户端。IP加进程</summary>
public const String Client = "Client";
/// <summary>开始。大于等于</summary>
public const String Start = "Start";
/// <summary>结束。小于,不等于</summary>
public const String End = "End";
/// <summary>行。分页起始行</summary>
public const String Row = "Row";
/// <summary>步进。最大区间大小,秒</summary>
public const String Step = "Step";
/// <summary>批大小</summary>
public const String BatchSize = "BatchSize";
/// <summary>数据键</summary>
public const String Key = "Key";
/// <summary>数据</summary>
public const String Data = "Data";
/// <summary>服务器</summary>
public const String Server = "Server";
/// <summary>进程</summary>
public const String ProcessID = "ProcessID";
/// <summary>线程</summary>
public const String ThreadID = "ThreadID";
/// <summary>错误码</summary>
public const String ErrorCode = "ErrorCode";
/// <summary>内容</summary>
public const String Message = "Message";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
}
#endregion
}
/// <summary>作业错误接口</summary>
public partial interface IJobError
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>应用</summary>
Int32 AppID { get; set; }
/// <summary>作业</summary>
Int32 JobID { get; set; }
/// <summary>作业项</summary>
Int32 JobLogID { get; set; }
/// <summary>客户端。IP加进程</summary>
String Client { get; set; }
/// <summary>开始。大于等于</summary>
DateTime Start { get; set; }
/// <summary>结束。小于,不等于</summary>
DateTime End { get; set; }
/// <summary>行。分页起始行</summary>
Int32 Row { get; set; }
/// <summary>步进。最大区间大小,秒</summary>
Int32 Step { get; set; }
/// <summary>批大小</summary>
Int32 BatchSize { get; set; }
/// <summary>数据键</summary>
String Key { get; set; }
/// <summary>数据</summary>
String Data { get; set; }
/// <summary>服务器</summary>
String Server { get; set; }
/// <summary>进程</summary>
Int32 ProcessID { get; set; }
/// <summary>线程</summary>
Int32 ThreadID { get; set; }
/// <summary>错误码</summary>
String ErrorCode { get; set; }
/// <summary>内容</summary>
String Message { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

View File

@ -0,0 +1,177 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>应用在线。各应用多实例在线</summary>
public partial class AppOnline : EntityBase<AppOnline>
{
#region
static AppOnline()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.AppID);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<TimeModule>();
Meta.Modules.Add<IPModule>();
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 在新插入数据或者修改了指定字段时进行修正
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
//if (isNew && !Dirtys[nameof(CreateIP)]) nameof(CreateIP) = ManageProvider.UserHost;
//if (!Dirtys[nameof(UpdateIP)]) nameof(UpdateIP) = ManageProvider.UserHost;
// 检查唯一索引
// CheckExist(isNew, __.Instance);
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化AppOnline[应用在线]数据……");
// var entity = new AppOnline();
// entity.ID = 0;
// entity.AppID = 0;
// entity.Instance = "abc";
// entity.Client = "abc";
// entity.Name = "abc";
// entity.Version = "abc";
// entity.Server = "abc";
// entity.Logs = 0;
// entity.Total = 0;
// entity.Success = 0;
// entity.Error = 0;
// entity.Cost = 0;
// entity.Speed = 0;
// entity.LastKey = "abc";
// entity.CreateTime = DateTime.Now;
// entity.CreateIP = "abc";
// entity.UpdateTime = DateTime.Now;
// entity.UpdateIP = "abc";
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化AppOnline[应用在线]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
public App App { get { return Extends.Get(nameof(App), k => App.FindByID(AppID)); } }
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("应用")]
[Map(__.AppID, typeof(App), "ID")]
public String AppName { get { return App?.Name; } }
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static AppOnline FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
/// <summary>根据实例查找</summary>
/// <param name="instance">实例</param>
/// <returns>实体对象</returns>
public static AppOnline FindByInstance(String instance)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.Instance == instance);
return Find(_.Instance == instance);
}
/// <summary>根据客户端查找</summary>
/// <param name="client">客户端</param>
/// <returns>实体列表</returns>
public static IList<AppOnline> FindAllByClient(String client)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.Client == client);
return FindAll(_.Client == client);
}
/// <summary>根据应用查找</summary>
/// <param name="appid">应用</param>
/// <returns>实体列表</returns>
public static IList<AppOnline> FindAllByAppID(Int32 appid)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.AppID == appid);
return FindAll(_.AppID == appid);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,412 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>应用在线。各应用多实例在线</summary>
[Serializable]
[DataObject]
[Description("应用在线。各应用多实例在线")]
[BindIndex("IU_AppOnline_Instance", true, "Instance")]
[BindIndex("IX_AppOnline_Client", false, "Client")]
[BindIndex("IX_AppOnline_AppID", false, "AppID")]
[BindTable("AppOnline", Description = "应用在线。各应用多实例在线", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class AppOnline : IAppOnline
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private Int32 _AppID;
/// <summary>应用</summary>
[DisplayName("应用")]
[Description("应用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AppID", "应用", "")]
public Int32 AppID { get { return _AppID; } set { if (OnPropertyChanging(__.AppID, value)) { _AppID = value; OnPropertyChanged(__.AppID); } } }
private String _Instance;
/// <summary>实例。IP加端口</summary>
[DisplayName("实例")]
[Description("实例。IP加端口")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Instance", "实例。IP加端口", "")]
public String Instance { get { return _Instance; } set { if (OnPropertyChanging(__.Instance, value)) { _Instance = value; OnPropertyChanged(__.Instance); } } }
private String _Client;
/// <summary>客户端。IP加进程</summary>
[DisplayName("客户端")]
[Description("客户端。IP加进程")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Client", "客户端。IP加进程", "")]
public String Client { get { return _Client; } set { if (OnPropertyChanging(__.Client, value)) { _Client = value; OnPropertyChanged(__.Client); } } }
private String _Name;
/// <summary>名称。机器名称</summary>
[DisplayName("名称")]
[Description("名称。机器名称")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Name", "名称。机器名称", "", Master = true)]
public String Name { get { return _Name; } set { if (OnPropertyChanging(__.Name, value)) { _Name = value; OnPropertyChanged(__.Name); } } }
private String _Version;
/// <summary>版本。客户端</summary>
[DisplayName("版本")]
[Description("版本。客户端")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Version", "版本。客户端", "")]
public String Version { get { return _Version; } set { if (OnPropertyChanging(__.Version, value)) { _Version = value; OnPropertyChanged(__.Version); } } }
private String _Server;
/// <summary>服务端。客户端登录到哪个服务端IP加端口</summary>
[DisplayName("服务端")]
[Description("服务端。客户端登录到哪个服务端IP加端口")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Server", "服务端。客户端登录到哪个服务端IP加端口", "")]
public String Server { get { return _Server; } set { if (OnPropertyChanging(__.Server, value)) { _Server = value; OnPropertyChanged(__.Server); } } }
private Int32 _Logs;
/// <summary>任务数</summary>
[DisplayName("任务数")]
[Description("任务数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Logs", "任务数", "")]
public Int32 Logs { get { return _Logs; } set { if (OnPropertyChanging(__.Logs, value)) { _Logs = value; OnPropertyChanged(__.Logs); } } }
private Int64 _Total;
/// <summary>总数</summary>
[DisplayName("总数")]
[Description("总数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Total", "总数", "")]
public Int64 Total { get { return _Total; } set { if (OnPropertyChanging(__.Total, value)) { _Total = value; OnPropertyChanged(__.Total); } } }
private Int64 _Success;
/// <summary>成功</summary>
[DisplayName("成功")]
[Description("成功")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Success", "成功", "")]
public Int64 Success { get { return _Success; } set { if (OnPropertyChanging(__.Success, value)) { _Success = value; OnPropertyChanged(__.Success); } } }
private Int64 _Error;
/// <summary>错误</summary>
[DisplayName("错误")]
[Description("错误")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Error", "错误", "")]
public Int64 Error { get { return _Error; } set { if (OnPropertyChanging(__.Error, value)) { _Error = value; OnPropertyChanged(__.Error); } } }
private Int64 _Cost;
/// <summary>耗时。总耗时,秒</summary>
[DisplayName("耗时")]
[Description("耗时。总耗时,秒")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Cost", "耗时。总耗时,秒", "")]
public Int64 Cost { get { return _Cost; } set { if (OnPropertyChanging(__.Cost, value)) { _Cost = value; OnPropertyChanged(__.Cost); } } }
private Int64 _Speed;
/// <summary>速度。每秒处理数</summary>
[DisplayName("速度")]
[Description("速度。每秒处理数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Speed", "速度。每秒处理数", "")]
public Int64 Speed { get { return _Speed; } set { if (OnPropertyChanging(__.Speed, value)) { _Speed = value; OnPropertyChanged(__.Speed); } } }
private String _LastKey;
/// <summary>最后键</summary>
[DisplayName("最后键")]
[Description("最后键")]
[DataObjectField(false, false, true, 50)]
[BindColumn("LastKey", "最后键", "")]
public String LastKey { get { return _LastKey; } set { if (OnPropertyChanging(__.LastKey, value)) { _LastKey = value; OnPropertyChanged(__.LastKey); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private String _CreateIP;
/// <summary>创建地址</summary>
[DisplayName("创建地址")]
[Description("创建地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("CreateIP", "创建地址", "")]
public String CreateIP { get { return _CreateIP; } set { if (OnPropertyChanging(__.CreateIP, value)) { _CreateIP = value; OnPropertyChanged(__.CreateIP); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
private String _UpdateIP;
/// <summary>更新地址</summary>
[DisplayName("更新地址")]
[Description("更新地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("UpdateIP", "更新地址", "")]
public String UpdateIP { get { return _UpdateIP; } set { if (OnPropertyChanging(__.UpdateIP, value)) { _UpdateIP = value; OnPropertyChanged(__.UpdateIP); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.AppID : return _AppID;
case __.Instance : return _Instance;
case __.Client : return _Client;
case __.Name : return _Name;
case __.Version : return _Version;
case __.Server : return _Server;
case __.Logs : return _Logs;
case __.Total : return _Total;
case __.Success : return _Success;
case __.Error : return _Error;
case __.Cost : return _Cost;
case __.Speed : return _Speed;
case __.LastKey : return _LastKey;
case __.CreateTime : return _CreateTime;
case __.CreateIP : return _CreateIP;
case __.UpdateTime : return _UpdateTime;
case __.UpdateIP : return _UpdateIP;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.AppID : _AppID = value.ToInt(); break;
case __.Instance : _Instance = Convert.ToString(value); break;
case __.Client : _Client = Convert.ToString(value); break;
case __.Name : _Name = Convert.ToString(value); break;
case __.Version : _Version = Convert.ToString(value); break;
case __.Server : _Server = Convert.ToString(value); break;
case __.Logs : _Logs = value.ToInt(); break;
case __.Total : _Total = value.ToLong(); break;
case __.Success : _Success = value.ToLong(); break;
case __.Error : _Error = value.ToLong(); break;
case __.Cost : _Cost = value.ToLong(); break;
case __.Speed : _Speed = value.ToLong(); break;
case __.LastKey : _LastKey = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.CreateIP : _CreateIP = Convert.ToString(value); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
case __.UpdateIP : _UpdateIP = Convert.ToString(value); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得应用在线字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>应用</summary>
public static readonly Field AppID = FindByName(__.AppID);
/// <summary>实例。IP加端口</summary>
public static readonly Field Instance = FindByName(__.Instance);
/// <summary>客户端。IP加进程</summary>
public static readonly Field Client = FindByName(__.Client);
/// <summary>名称。机器名称</summary>
public static readonly Field Name = FindByName(__.Name);
/// <summary>版本。客户端</summary>
public static readonly Field Version = FindByName(__.Version);
/// <summary>服务端。客户端登录到哪个服务端IP加端口</summary>
public static readonly Field Server = FindByName(__.Server);
/// <summary>任务数</summary>
public static readonly Field Logs = FindByName(__.Logs);
/// <summary>总数</summary>
public static readonly Field Total = FindByName(__.Total);
/// <summary>成功</summary>
public static readonly Field Success = FindByName(__.Success);
/// <summary>错误</summary>
public static readonly Field Error = FindByName(__.Error);
/// <summary>耗时。总耗时,秒</summary>
public static readonly Field Cost = FindByName(__.Cost);
/// <summary>速度。每秒处理数</summary>
public static readonly Field Speed = FindByName(__.Speed);
/// <summary>最后键</summary>
public static readonly Field LastKey = FindByName(__.LastKey);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>创建地址</summary>
public static readonly Field CreateIP = FindByName(__.CreateIP);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
/// <summary>更新地址</summary>
public static readonly Field UpdateIP = FindByName(__.UpdateIP);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得应用在线字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>应用</summary>
public const String AppID = "AppID";
/// <summary>实例。IP加端口</summary>
public const String Instance = "Instance";
/// <summary>客户端。IP加进程</summary>
public const String Client = "Client";
/// <summary>名称。机器名称</summary>
public const String Name = "Name";
/// <summary>版本。客户端</summary>
public const String Version = "Version";
/// <summary>服务端。客户端登录到哪个服务端IP加端口</summary>
public const String Server = "Server";
/// <summary>任务数</summary>
public const String Logs = "Logs";
/// <summary>总数</summary>
public const String Total = "Total";
/// <summary>成功</summary>
public const String Success = "Success";
/// <summary>错误</summary>
public const String Error = "Error";
/// <summary>耗时。总耗时,秒</summary>
public const String Cost = "Cost";
/// <summary>速度。每秒处理数</summary>
public const String Speed = "Speed";
/// <summary>最后键</summary>
public const String LastKey = "LastKey";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>创建地址</summary>
public const String CreateIP = "CreateIP";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
/// <summary>更新地址</summary>
public const String UpdateIP = "UpdateIP";
}
#endregion
}
/// <summary>应用在线。各应用多实例在线接口</summary>
public partial interface IAppOnline
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>应用</summary>
Int32 AppID { get; set; }
/// <summary>实例。IP加端口</summary>
String Instance { get; set; }
/// <summary>客户端。IP加进程</summary>
String Client { get; set; }
/// <summary>名称。机器名称</summary>
String Name { get; set; }
/// <summary>版本。客户端</summary>
String Version { get; set; }
/// <summary>服务端。客户端登录到哪个服务端IP加端口</summary>
String Server { get; set; }
/// <summary>任务数</summary>
Int32 Logs { get; set; }
/// <summary>总数</summary>
Int64 Total { get; set; }
/// <summary>成功</summary>
Int64 Success { get; set; }
/// <summary>错误</summary>
Int64 Error { get; set; }
/// <summary>耗时。总耗时,秒</summary>
Int64 Cost { get; set; }
/// <summary>速度。每秒处理数</summary>
Int64 Speed { get; set; }
/// <summary>最后键</summary>
String LastKey { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>创建地址</summary>
String CreateIP { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
/// <summary>更新地址</summary>
String UpdateIP { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

View File

@ -0,0 +1,138 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理</summary>
public partial class AppMessage : EntityBase<AppMessage>
{
#region
static AppMessage()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.AppID);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<TimeModule>();
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 在新插入数据或者修改了指定字段时进行修正
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化AppMessage[应用消息]数据……");
// var entity = new AppMessage();
// entity.ID = 0;
// entity.AppID = 0;
// entity.JobID = 0;
// entity.Topic = "abc";
// entity.Data = "abc";
// entity.CreateTime = DateTime.Now;
// entity.UpdateTime = DateTime.Now;
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化AppMessage[应用消息]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
public App App { get { return Extends.Get(nameof(App), k => App.FindByID(AppID)); } }
/// <summary>应用</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("应用")]
[Map(__.AppID, typeof(App), "ID")]
public String AppName { get { return App?.Name; } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
public Job Job { get { return Extends.Get(nameof(Job), k => Job.FindByID(JobID)); } }
/// <summary>作业</summary>
[XmlIgnore]
//[ScriptIgnore]
[DisplayName("作业")]
[Map(__.JobID, typeof(Job), "ID")]
public String JobName { get { return Job?.Name; } }
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static AppMessage FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,202 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理</summary>
[Serializable]
[DataObject]
[Description("应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理")]
[BindIndex("IX_AppMessage_AppID_Topic_UpdateTime", false, "AppID,Topic,UpdateTime")]
[BindIndex("IX_AppMessage_UpdateTime", false, "UpdateTime")]
[BindTable("AppMessage", Description = "应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class AppMessage : IAppMessage
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private Int32 _AppID;
/// <summary>应用</summary>
[DisplayName("应用")]
[Description("应用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AppID", "应用", "")]
public Int32 AppID { get { return _AppID; } set { if (OnPropertyChanging(__.AppID, value)) { _AppID = value; OnPropertyChanged(__.AppID); } } }
private Int32 _JobID;
/// <summary>作业。生产消息的作业</summary>
[DisplayName("作业")]
[Description("作业。生产消息的作业")]
[DataObjectField(false, false, false, 0)]
[BindColumn("JobID", "作业。生产消息的作业", "")]
public Int32 JobID { get { return _JobID; } set { if (OnPropertyChanging(__.JobID, value)) { _JobID = value; OnPropertyChanged(__.JobID); } } }
private String _Topic;
/// <summary>主题。区分作业下多种消息</summary>
[DisplayName("主题")]
[Description("主题。区分作业下多种消息")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Topic", "主题。区分作业下多种消息", "")]
public String Topic { get { return _Topic; } set { if (OnPropertyChanging(__.Topic, value)) { _Topic = value; OnPropertyChanged(__.Topic); } } }
private String _Data;
/// <summary>数据。可以是Json数据比如StatID</summary>
[DisplayName("数据")]
[Description("数据。可以是Json数据比如StatID")]
[DataObjectField(false, false, true, 2000)]
[BindColumn("Data", "数据。可以是Json数据比如StatID", "")]
public String Data { get { return _Data; } set { if (OnPropertyChanging(__.Data, value)) { _Data = value; OnPropertyChanged(__.Data); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.AppID : return _AppID;
case __.JobID : return _JobID;
case __.Topic : return _Topic;
case __.Data : return _Data;
case __.CreateTime : return _CreateTime;
case __.UpdateTime : return _UpdateTime;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.AppID : _AppID = value.ToInt(); break;
case __.JobID : _JobID = value.ToInt(); break;
case __.Topic : _Topic = Convert.ToString(value); break;
case __.Data : _Data = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得应用消息字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>应用</summary>
public static readonly Field AppID = FindByName(__.AppID);
/// <summary>作业。生产消息的作业</summary>
public static readonly Field JobID = FindByName(__.JobID);
/// <summary>主题。区分作业下多种消息</summary>
public static readonly Field Topic = FindByName(__.Topic);
/// <summary>数据。可以是Json数据比如StatID</summary>
public static readonly Field Data = FindByName(__.Data);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得应用消息字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>应用</summary>
public const String AppID = "AppID";
/// <summary>作业。生产消息的作业</summary>
public const String JobID = "JobID";
/// <summary>主题。区分作业下多种消息</summary>
public const String Topic = "Topic";
/// <summary>数据。可以是Json数据比如StatID</summary>
public const String Data = "Data";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
}
#endregion
}
/// <summary>应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理接口</summary>
public partial interface IAppMessage
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>应用</summary>
Int32 AppID { get; set; }
/// <summary>作业。生产消息的作业</summary>
Int32 JobID { get; set; }
/// <summary>主题。区分作业下多种消息</summary>
String Topic { get; set; }
/// <summary>数据。可以是Json数据比如StatID</summary>
String Data { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

View File

@ -0,0 +1,163 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using NewLife.Model;
using NewLife.Reflection;
using NewLife.Threading;
using NewLife.Web;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
using XCode.Membership;
namespace AntJob.Data.Entity
{
/// <summary>应用系统。数据作业隶属于某个应用</summary>
public partial class App : EntityBase<App>
{
#region
static App()
{
// 累加字段
//var df = Meta.Factory.AdditionalFields;
//df.Add(__.JobCount);
// 过滤器 UserModule、TimeModule、IPModule
Meta.Modules.Add<UserModule>();
Meta.Modules.Add<TimeModule>();
Meta.Modules.Add<IPModule>();
// 单对象缓存
var sc = Meta.SingleCache;
sc.FindSlaveKeyMethod = k => Find(__.Name, k);
sc.GetSlaveKeyMethod = e => e.Name;
}
/// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
/// <param name="isNew">是否插入</param>
public override void Valid(Boolean isNew)
{
// 如果没有脏数据,则不需要进行任何处理
if (!HasDirty) return;
// 这里验证参数范围,建议抛出参数异常,指定参数名,前端用户界面可以捕获参数异常并聚焦到对应的参数输入框
if (Name.IsNullOrEmpty()) throw new ArgumentNullException(nameof(Name), "名称不能为空!");
// 在新插入数据或者修改了指定字段时进行修正
// 处理当前已登录用户信息可以由UserModule过滤器代劳
/*var user = ManageProvider.User;
if (user != null)
{
if (isNew && !Dirtys[nameof(CreateUserID)) nameof(CreateUserID) = user.ID;
if (!Dirtys[nameof(UpdateUserID)]) nameof(UpdateUserID) = user.ID;
}*/
//if (isNew && !Dirtys[nameof(CreateTime)]) nameof(CreateTime) = DateTime.Now;
//if (!Dirtys[nameof(UpdateTime)]) nameof(UpdateTime) = DateTime.Now;
//if (isNew && !Dirtys[nameof(CreateIP)]) nameof(CreateIP) = ManageProvider.UserHost;
//if (!Dirtys[nameof(UpdateIP)]) nameof(UpdateIP) = ManageProvider.UserHost;
// 检查唯一索引
// CheckExist(isNew, __.Name);
}
///// <summary>首次连接数据库时初始化数据,仅用于实体类重载,用户不应该调用该方法</summary>
//[EditorBrowsable(EditorBrowsableState.Never)]
//protected override void InitData()
//{
// // InitData一般用于当数据表没有数据时添加一些默认数据该实体类的任何第一次数据库操作都会触发该方法默认异步调用
// if (Meta.Session.Count > 0) return;
// if (XTrace.Debug) XTrace.WriteLine("开始初始化App[应用系统]数据……");
// var entity = new App();
// entity.ID = 0;
// entity.Name = "abc";
// entity.DisplayName = "abc";
// entity.Secret = "abc";
// entity.Category = "abc";
// entity.Version = "abc";
// entity.Enable = true;
// entity.JobCount = 0;
// entity.MessageCount = 0;
// entity.Remark = "abc";
// entity.CreateUserID = 0;
// entity.CreateUser = "abc";
// entity.CreateTime = DateTime.Now;
// entity.CreateIP = "abc";
// entity.UpdateUserID = 0;
// entity.UpdateUser = "abc";
// entity.UpdateTime = DateTime.Now;
// entity.UpdateIP = "abc";
// entity.Insert();
// if (XTrace.Debug) XTrace.WriteLine("完成初始化App[应用系统]数据!");
//}
///// <summary>已重载。基类先调用Valid(true)验证数据然后在事务保护内调用OnInsert</summary>
///// <returns></returns>
//public override Int32 Insert()
//{
// return base.Insert();
//}
///// <summary>已重载。在事务保护范围内处理业务位于Valid之后</summary>
///// <returns></returns>
//protected override Int32 OnDelete()
//{
// return base.OnDelete();
//}
#endregion
#region
#endregion
#region
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static App FindByID(Int32 id)
{
if (id <= 0) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.ID == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.ID == id);
}
/// <summary>根据名称查找</summary>
/// <param name="name">名称</param>
/// <returns>实体对象</returns>
public static App FindByName(String name)
{
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.Name == name);
// 单对象缓存
//return Meta.SingleCache.GetItemWithSlaveKey(name) as App;
return Find(_.Name == name);
}
#endregion
#region
#endregion
#region
#endregion
}
}

View File

@ -0,0 +1,410 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using XCode;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace AntJob.Data.Entity
{
/// <summary>应用系统。数据作业隶属于某个应用</summary>
[Serializable]
[DataObject]
[Description("应用系统。数据作业隶属于某个应用")]
[BindIndex("IU_App_Name", true, "Name")]
[BindTable("App", Description = "应用系统。数据作业隶属于某个应用", ConnName = "Ant", DbType = DatabaseType.None)]
public partial class App : IApp
{
#region
private Int32 _ID;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("ID", "编号", "")]
public Int32 ID { get { return _ID; } set { if (OnPropertyChanging(__.ID, value)) { _ID = value; OnPropertyChanged(__.ID); } } }
private String _Name;
/// <summary>名称</summary>
[DisplayName("名称")]
[Description("名称")]
[DataObjectField(false, false, false, 50)]
[BindColumn("Name", "名称", "", Master = true)]
public String Name { get { return _Name; } set { if (OnPropertyChanging(__.Name, value)) { _Name = value; OnPropertyChanged(__.Name); } } }
private String _DisplayName;
/// <summary>显示名</summary>
[DisplayName("显示名")]
[Description("显示名")]
[DataObjectField(false, false, true, 50)]
[BindColumn("DisplayName", "显示名", "")]
public String DisplayName { get { return _DisplayName; } set { if (OnPropertyChanging(__.DisplayName, value)) { _DisplayName = value; OnPropertyChanged(__.DisplayName); } } }
private String _Secret;
/// <summary>密钥</summary>
[DisplayName("密钥")]
[Description("密钥")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Secret", "密钥", "")]
public String Secret { get { return _Secret; } set { if (OnPropertyChanging(__.Secret, value)) { _Secret = value; OnPropertyChanged(__.Secret); } } }
private String _Category;
/// <summary>类别</summary>
[DisplayName("类别")]
[Description("类别")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Category", "类别", "")]
public String Category { get { return _Category; } set { if (OnPropertyChanging(__.Category, value)) { _Category = value; OnPropertyChanged(__.Category); } } }
private String _Version;
/// <summary>版本</summary>
[DisplayName("版本")]
[Description("版本")]
[DataObjectField(false, false, true, 50)]
[BindColumn("Version", "版本", "")]
public String Version { get { return _Version; } set { if (OnPropertyChanging(__.Version, value)) { _Version = value; OnPropertyChanged(__.Version); } } }
private Boolean _Enable;
/// <summary>启用</summary>
[DisplayName("启用")]
[Description("启用")]
[DataObjectField(false, false, false, 0)]
[BindColumn("Enable", "启用", "")]
public Boolean Enable { get { return _Enable; } set { if (OnPropertyChanging(__.Enable, value)) { _Enable = value; OnPropertyChanged(__.Enable); } } }
private Int32 _JobCount;
/// <summary>作业数</summary>
[DisplayName("作业数")]
[Description("作业数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("JobCount", "作业数", "")]
public Int32 JobCount { get { return _JobCount; } set { if (OnPropertyChanging(__.JobCount, value)) { _JobCount = value; OnPropertyChanged(__.JobCount); } } }
private Int32 _MessageCount;
/// <summary>消息数</summary>
[DisplayName("消息数")]
[Description("消息数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MessageCount", "消息数", "")]
public Int32 MessageCount { get { return _MessageCount; } set { if (OnPropertyChanging(__.MessageCount, value)) { _MessageCount = value; OnPropertyChanged(__.MessageCount); } } }
private String _Remark;
/// <summary>内容</summary>
[DisplayName("内容")]
[Description("内容")]
[DataObjectField(false, false, true, 500)]
[BindColumn("Remark", "内容", "")]
public String Remark { get { return _Remark; } set { if (OnPropertyChanging(__.Remark, value)) { _Remark = value; OnPropertyChanged(__.Remark); } } }
private Int32 _CreateUserID;
/// <summary>创建者</summary>
[DisplayName("创建者")]
[Description("创建者")]
[DataObjectField(false, false, false, 0)]
[BindColumn("CreateUserID", "创建者", "")]
public Int32 CreateUserID { get { return _CreateUserID; } set { if (OnPropertyChanging(__.CreateUserID, value)) { _CreateUserID = value; OnPropertyChanged(__.CreateUserID); } } }
private String _CreateUser;
/// <summary>创建者</summary>
[DisplayName("创建者")]
[Description("创建者")]
[DataObjectField(false, false, true, 50)]
[BindColumn("CreateUser", "创建者", "")]
public String CreateUser { get { return _CreateUser; } set { if (OnPropertyChanging(__.CreateUser, value)) { _CreateUser = value; OnPropertyChanged(__.CreateUser); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get { return _CreateTime; } set { if (OnPropertyChanging(__.CreateTime, value)) { _CreateTime = value; OnPropertyChanged(__.CreateTime); } } }
private String _CreateIP;
/// <summary>创建地址</summary>
[DisplayName("创建地址")]
[Description("创建地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("CreateIP", "创建地址", "")]
public String CreateIP { get { return _CreateIP; } set { if (OnPropertyChanging(__.CreateIP, value)) { _CreateIP = value; OnPropertyChanged(__.CreateIP); } } }
private Int32 _UpdateUserID;
/// <summary>更新者</summary>
[DisplayName("更新者")]
[Description("更新者")]
[DataObjectField(false, false, false, 0)]
[BindColumn("UpdateUserID", "更新者", "")]
public Int32 UpdateUserID { get { return _UpdateUserID; } set { if (OnPropertyChanging(__.UpdateUserID, value)) { _UpdateUserID = value; OnPropertyChanged(__.UpdateUserID); } } }
private String _UpdateUser;
/// <summary>更新者</summary>
[DisplayName("更新者")]
[Description("更新者")]
[DataObjectField(false, false, true, 50)]
[BindColumn("UpdateUser", "更新者", "")]
public String UpdateUser { get { return _UpdateUser; } set { if (OnPropertyChanging(__.UpdateUser, value)) { _UpdateUser = value; OnPropertyChanged(__.UpdateUser); } } }
private DateTime _UpdateTime;
/// <summary>更新时间</summary>
[DisplayName("更新时间")]
[Description("更新时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("UpdateTime", "更新时间", "")]
public DateTime UpdateTime { get { return _UpdateTime; } set { if (OnPropertyChanging(__.UpdateTime, value)) { _UpdateTime = value; OnPropertyChanged(__.UpdateTime); } } }
private String _UpdateIP;
/// <summary>更新地址</summary>
[DisplayName("更新地址")]
[Description("更新地址")]
[DataObjectField(false, false, true, 50)]
[BindColumn("UpdateIP", "更新地址", "")]
public String UpdateIP { get { return _UpdateIP; } set { if (OnPropertyChanging(__.UpdateIP, value)) { _UpdateIP = value; OnPropertyChanged(__.UpdateIP); } } }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object this[String name]
{
get
{
switch (name)
{
case __.ID : return _ID;
case __.Name : return _Name;
case __.DisplayName : return _DisplayName;
case __.Secret : return _Secret;
case __.Category : return _Category;
case __.Version : return _Version;
case __.Enable : return _Enable;
case __.JobCount : return _JobCount;
case __.MessageCount : return _MessageCount;
case __.Remark : return _Remark;
case __.CreateUserID : return _CreateUserID;
case __.CreateUser : return _CreateUser;
case __.CreateTime : return _CreateTime;
case __.CreateIP : return _CreateIP;
case __.UpdateUserID : return _UpdateUserID;
case __.UpdateUser : return _UpdateUser;
case __.UpdateTime : return _UpdateTime;
case __.UpdateIP : return _UpdateIP;
default: return base[name];
}
}
set
{
switch (name)
{
case __.ID : _ID = value.ToInt(); break;
case __.Name : _Name = Convert.ToString(value); break;
case __.DisplayName : _DisplayName = Convert.ToString(value); break;
case __.Secret : _Secret = Convert.ToString(value); break;
case __.Category : _Category = Convert.ToString(value); break;
case __.Version : _Version = Convert.ToString(value); break;
case __.Enable : _Enable = value.ToBoolean(); break;
case __.JobCount : _JobCount = value.ToInt(); break;
case __.MessageCount : _MessageCount = value.ToInt(); break;
case __.Remark : _Remark = Convert.ToString(value); break;
case __.CreateUserID : _CreateUserID = value.ToInt(); break;
case __.CreateUser : _CreateUser = Convert.ToString(value); break;
case __.CreateTime : _CreateTime = value.ToDateTime(); break;
case __.CreateIP : _CreateIP = Convert.ToString(value); break;
case __.UpdateUserID : _UpdateUserID = value.ToInt(); break;
case __.UpdateUser : _UpdateUser = Convert.ToString(value); break;
case __.UpdateTime : _UpdateTime = value.ToDateTime(); break;
case __.UpdateIP : _UpdateIP = Convert.ToString(value); break;
default: base[name] = value; break;
}
}
}
#endregion
#region
/// <summary>取得应用系统字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field ID = FindByName(__.ID);
/// <summary>名称</summary>
public static readonly Field Name = FindByName(__.Name);
/// <summary>显示名</summary>
public static readonly Field DisplayName = FindByName(__.DisplayName);
/// <summary>密钥</summary>
public static readonly Field Secret = FindByName(__.Secret);
/// <summary>类别</summary>
public static readonly Field Category = FindByName(__.Category);
/// <summary>版本</summary>
public static readonly Field Version = FindByName(__.Version);
/// <summary>启用</summary>
public static readonly Field Enable = FindByName(__.Enable);
/// <summary>作业数</summary>
public static readonly Field JobCount = FindByName(__.JobCount);
/// <summary>消息数</summary>
public static readonly Field MessageCount = FindByName(__.MessageCount);
/// <summary>内容</summary>
public static readonly Field Remark = FindByName(__.Remark);
/// <summary>创建者</summary>
public static readonly Field CreateUserID = FindByName(__.CreateUserID);
/// <summary>创建者</summary>
public static readonly Field CreateUser = FindByName(__.CreateUser);
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName(__.CreateTime);
/// <summary>创建地址</summary>
public static readonly Field CreateIP = FindByName(__.CreateIP);
/// <summary>更新者</summary>
public static readonly Field UpdateUserID = FindByName(__.UpdateUserID);
/// <summary>更新者</summary>
public static readonly Field UpdateUser = FindByName(__.UpdateUser);
/// <summary>更新时间</summary>
public static readonly Field UpdateTime = FindByName(__.UpdateTime);
/// <summary>更新地址</summary>
public static readonly Field UpdateIP = FindByName(__.UpdateIP);
static Field FindByName(String name) { return Meta.Table.FindByName(name); }
}
/// <summary>取得应用系统字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String ID = "ID";
/// <summary>名称</summary>
public const String Name = "Name";
/// <summary>显示名</summary>
public const String DisplayName = "DisplayName";
/// <summary>密钥</summary>
public const String Secret = "Secret";
/// <summary>类别</summary>
public const String Category = "Category";
/// <summary>版本</summary>
public const String Version = "Version";
/// <summary>启用</summary>
public const String Enable = "Enable";
/// <summary>作业数</summary>
public const String JobCount = "JobCount";
/// <summary>消息数</summary>
public const String MessageCount = "MessageCount";
/// <summary>内容</summary>
public const String Remark = "Remark";
/// <summary>创建者</summary>
public const String CreateUserID = "CreateUserID";
/// <summary>创建者</summary>
public const String CreateUser = "CreateUser";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
/// <summary>创建地址</summary>
public const String CreateIP = "CreateIP";
/// <summary>更新者</summary>
public const String UpdateUserID = "UpdateUserID";
/// <summary>更新者</summary>
public const String UpdateUser = "UpdateUser";
/// <summary>更新时间</summary>
public const String UpdateTime = "UpdateTime";
/// <summary>更新地址</summary>
public const String UpdateIP = "UpdateIP";
}
#endregion
}
/// <summary>应用系统。数据作业隶属于某个应用接口</summary>
public partial interface IApp
{
#region
/// <summary>编号</summary>
Int32 ID { get; set; }
/// <summary>名称</summary>
String Name { get; set; }
/// <summary>显示名</summary>
String DisplayName { get; set; }
/// <summary>密钥</summary>
String Secret { get; set; }
/// <summary>类别</summary>
String Category { get; set; }
/// <summary>版本</summary>
String Version { get; set; }
/// <summary>启用</summary>
Boolean Enable { get; set; }
/// <summary>作业数</summary>
Int32 JobCount { get; set; }
/// <summary>消息数</summary>
Int32 MessageCount { get; set; }
/// <summary>内容</summary>
String Remark { get; set; }
/// <summary>创建者</summary>
Int32 CreateUserID { get; set; }
/// <summary>创建者</summary>
String CreateUser { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>创建地址</summary>
String CreateIP { get; set; }
/// <summary>更新者</summary>
Int32 UpdateUserID { get; set; }
/// <summary>更新者</summary>
String UpdateUser { get; set; }
/// <summary>更新时间</summary>
DateTime UpdateTime { get; set; }
/// <summary>更新地址</summary>
String UpdateIP { get; set; }
#endregion
#region /
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
Object this[String name] { get; set; }
#endregion
}
}

24
AntJob.Data/JobStatus.cs Normal file
View File

@ -0,0 +1,24 @@
namespace AntJob.Data
{
/// <summary>作业状态</summary>
public enum JobStatus
{
/// <summary>就绪</summary>
= 0,
/// <summary>抽取中</summary>
= 1,
/// <summary>处理中</summary>
= 2,
/// <summary>错误</summary>
= 3,
/// <summary>已完成</summary>
= 4,
/// <summary>已取消</summary>
= 5,
}
}

182
AntJob.Data/Model.xml Normal file
View File

@ -0,0 +1,182 @@
<?xml version="1.0" encoding="utf-8"?>
<Tables Version="9.11.7018.41220" Output="Entity" NameSpace="AntJob.Data.Entity" ConnName="Ant" BaseClass="EntityBase">
<Table Name="App" Description="应用系统。数据作业隶属于某个应用">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名称" />
<Column Name="DisplayName" DataType="String" Description="显示名" />
<Column Name="Secret" DataType="String" Description="密钥" />
<Column Name="Category" DataType="String" Description="类别" />
<Column Name="Version" DataType="String" Description="版本" />
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="JobCount" DataType="Int32" Description="作业数" />
<Column Name="MessageCount" DataType="Int32" Description="消息数" />
<Column Name="Remark" DataType="String" Length="500" Description="内容" />
<Column Name="CreateUserID" DataType="Int32" Description="创建者" />
<Column Name="CreateUser" DataType="String" Description="创建者" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="CreateIP" DataType="String" Description="创建地址" />
<Column Name="UpdateUserID" DataType="Int32" Description="更新者" />
<Column Name="UpdateUser" DataType="String" Description="更新者" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
<Column Name="UpdateIP" DataType="String" Description="更新地址" />
</Columns>
<Indexes>
<Index Columns="Name" Unique="True" />
</Indexes>
</Table>
<Table Name="AppOnline" Description="应用在线。各应用多实例在线">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="AppID" DataType="Int32" Description="应用" />
<Column Name="Instance" DataType="String" Description="实例。IP加端口" />
<Column Name="Client" DataType="String" Description="客户端。IP加进程" />
<Column Name="Name" DataType="String" Master="True" Description="名称。机器名称" />
<Column Name="Version" DataType="String" Description="版本。客户端" />
<Column Name="Server" DataType="String" Description="服务端。客户端登录到哪个服务端IP加端口" />
<Column Name="Logs" DataType="Int32" Description="任务数" />
<Column Name="Total" DataType="Int64" Description="总数" />
<Column Name="Success" DataType="Int64" Description="成功" />
<Column Name="Error" DataType="Int64" Description="错误" />
<Column Name="Cost" DataType="Int64" Description="耗时。总耗时,秒" />
<Column Name="Speed" DataType="Int64" Description="速度。每秒处理数" />
<Column Name="LastKey" DataType="String" Description="最后键" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="CreateIP" DataType="String" Description="创建地址" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
<Column Name="UpdateIP" DataType="String" Description="更新地址" />
</Columns>
<Indexes>
<Index Columns="Instance" Unique="True" />
<Index Columns="Client" />
<Index Columns="AppID" />
</Indexes>
</Table>
<Table Name="Job" Description="作业">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="AppID" DataType="Int32" Description="应用" />
<Column Name="Name" DataType="String" Master="True" Description="名称" />
<Column Name="DisplayName" DataType="String" Description="显示名" />
<Column Name="Mode" DataType="Int32" Description="调度模式" Type="JobModes" />
<Column Name="Topic" DataType="String" Description="主题。消息调度时消费的主题" />
<Column Name="MessageCount" DataType="Int32" Description="消息数" />
<Column Name="Start" DataType="DateTime" Description="开始。大于等于" />
<Column Name="End" DataType="DateTime" Description="结束。小于,不等于" />
<Column Name="Step" DataType="Int32" Description="步进。最大区间大小,秒" />
<Column Name="MinStep" DataType="Int32" Description="最小步进。默认5秒" />
<Column Name="MaxStep" DataType="Int32" Description="最大步进。默认3600秒" />
<Column Name="StepRate" DataType="Int32" Description="步进率。动态调节步进时不能超过该比率百分位默认100%" />
<Column Name="BatchSize" DataType="Int32" Description="批大小" />
<Column Name="Offset" DataType="Int32" Description="偏移。距离实时时间的秒数,部分业务不能跑到实时,秒" />
<Column Name="MaxTask" DataType="Int32" Description="并行。多任务并行处理" />
<Column Name="MaxError" DataType="Int32" Description="最大错误。连续错误达到最大错误数时停止" />
<Column Name="MaxRetry" DataType="Int32" Description="最大重试。默认10次超过该次数后将不再重试" />
<Column Name="MaxTime" DataType="Int32" Description="最大执行时间。默认600秒超过该时间则认为执行器故障将会把该任务分配给其它执行器" />
<Column Name="MaxRetain" DataType="Int32" Description="保留。任务项保留天数超过天数的任务项将被删除默认3天" />
<Column Name="MaxIdle" DataType="Int32" Description="最大空闲时间。默认3600秒超过该时间不更新则认为应用程序故障系统触发告警" />
<Column Name="ErrorDelay" DataType="Int32" Description="错误延迟。默认60秒出错延迟后重新发放" />
<Column Name="Total" DataType="Int64" Description="总数" />
<Column Name="Success" DataType="Int64" Description="成功" />
<Column Name="Error" DataType="Int32" Description="错误" />
<Column Name="Times" DataType="Int32" Description="次数" />
<Column Name="Speed" DataType="Int32" Description="速度" />
<Column Name="FetchSpeed" DataType="Int32" Description="抽取速度" />
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="Description" ColumnName="Message" DataType="String" Length="2000" Description="内容" />
<Column Name="CreateUserID" DataType="Int32" Description="创建者" />
<Column Name="CreateUser" DataType="String" Description="创建者" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="CreateIP" DataType="String" Description="创建地址" />
<Column Name="UpdateUserID" DataType="Int32" Description="更新者" />
<Column Name="UpdateUser" DataType="String" Description="更新者" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
<Column Name="UpdateIP" DataType="String" Description="更新地址" />
</Columns>
<Indexes>
<Index Columns="AppID,Name" Unique="True" />
</Indexes>
</Table>
<Table Name="JobLog" Description="作业日志">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="AppID" DataType="Int32" Description="应用" />
<Column Name="JobID" DataType="Int32" Description="作业" />
<Column Name="LinkID" DataType="Int32" Description="关联任务。消息作业关联的生产任务" />
<Column Name="Client" DataType="String" Description="客户端。IP加进程" />
<Column Name="Start" DataType="DateTime" Description="开始。大于等于" />
<Column Name="End" DataType="DateTime" Description="结束。小于,不等于" />
<Column Name="Row" DataType="Int32" Description="行。分页起始行" />
<Column Name="Step" DataType="Int32" Description="步进。最大区间大小,秒" />
<Column Name="BatchSize" DataType="Int32" Description="批大小" />
<Column Name="Offset" DataType="Int32" Description="偏移。距离实时时间的秒数,部分业务不能跑到实时,秒" />
<Column Name="Total" DataType="Int32" Description="总数" />
<Column Name="Success" DataType="Int32" Description="成功" />
<Column Name="Error" DataType="Int32" Description="错误" />
<Column Name="Times" DataType="Int32" Description="次数" />
<Column Name="Speed" DataType="Int32" Description="速度" />
<Column Name="FetchSpeed" DataType="Int32" Description="抽取速度" />
<Column Name="Cost" DataType="Int32" Description="耗时。秒" />
<Column Name="FullCost" DataType="Int32" Description="全部耗时。秒,从任务发放到执行完成的时间" />
<Column Name="Status" DataType="Int32" Description="状态" Type="JobStatus" />
<Column Name="MsgCount" DataType="Int32" Description="消费消息数" />
<Column Name="Server" DataType="String" Description="服务器" />
<Column Name="ProcessID" DataType="Int32" Description="进程" />
<Column Name="ThreadID" DataType="Int32" Description="线程" />
<Column Name="Key" DataType="String" Description="最后键" />
<Column Name="Data" DataType="String" Length="8000" Description="数据。可以是Json数据比如StatID" />
<Column Name="Message" DataType="String" Length="2000" Description="备注" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
</Columns>
<Indexes>
<Index Columns="JobID,Status,Start" />
<Index Columns="AppID,Client,Status" />
<Index Columns="JobID,CreateTime" />
</Indexes>
</Table>
<Table Name="JobError" Description="作业错误">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="AppID" DataType="Int32" Description="应用" />
<Column Name="JobID" DataType="Int32" Description="作业" />
<Column Name="JobLogID" DataType="Int32" Description="作业项" />
<Column Name="Client" DataType="String" Description="客户端。IP加进程" />
<Column Name="Start" DataType="DateTime" Description="开始。大于等于" />
<Column Name="End" DataType="DateTime" Description="结束。小于,不等于" />
<Column Name="Row" DataType="Int32" Description="行。分页起始行" />
<Column Name="Step" DataType="Int32" Description="步进。最大区间大小,秒" />
<Column Name="BatchSize" DataType="Int32" Description="批大小" />
<Column Name="Key" DataType="String" Description="数据键" />
<Column Name="Data" DataType="String" Length="2000" Description="数据" />
<Column Name="Server" DataType="String" Description="服务器" />
<Column Name="ProcessID" DataType="Int32" Description="进程" />
<Column Name="ThreadID" DataType="Int32" Description="线程" />
<Column Name="ErrorCode" DataType="String" Description="错误码" />
<Column Name="Message" DataType="String" Length="2000" Description="内容" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
</Columns>
<Indexes>
<Index Columns="AppID,ID" />
<Index Columns="JobID,ID" />
<Index Columns="Key" />
<Index Columns="ErrorCode" />
</Indexes>
</Table>
<Table Name="AppMessage" Description="应用消息。消息调度,某些作业负责生产消息,供其它作业进行消费处理">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="AppID" DataType="Int32" Description="应用" />
<Column Name="JobID" DataType="Int32" Description="作业。生产消息的作业" />
<Column Name="Topic" DataType="String" Description="主题。区分作业下多种消息" />
<Column Name="Data" DataType="String" Length="2000" Description="数据。可以是Json数据比如StatID" />
<Column Name="CreateTime" DataType="DateTime" Description="创建时间" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新时间" />
</Columns>
<Indexes>
<Index Columns="AppID,Topic,UpdateTime" />
<Index Columns="UpdateTime" />
</Indexes>
</Table>
</Tables>