服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2025-02-22 fb726bc28268c7efb73629f6ae12b25232a18538
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
using System;
using SqlSugar;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using Tiger.Model.Extensions;
 
namespace Tiger.Model
{
    /// <summary>
    /// 实体:任务触发器
    /// </summary>
    [Description("Primary:ID")]
    [Serializable]
    [SugarTable("TSK_TRIG")]
    public class TSK_TRIG : DbEntityWithAuth
    {
        #region 构造函数
        /// <summary>
        /// 实体:任务触发器
        /// </summary>
        public TSK_TRIG() {}
        #endregion
 
        #region 公共属性
        /// <summary>
        /// 作业 Id
        /// </summary>
        public string JobId { get; set; }
        /// <summary>
        /// 作业触发器类型,存储的是类型的 FullName
        /// </summary>
        public string TriggerType { get; set; }
        /// <summary>
        /// 作业触发器类型所在程序集,存储的是程序集 Name
        /// </summary>
        public string AssemblyName { get; set; }
        /// <summary>
        /// 作业触发器参数,运行时将反序列化为 object[] 类型并作为构造函数参数
        /// </summary>
        public string Args { get; set; }
        /// <summary>
        /// 描述信息
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 作业触发器状态(0Backlog积压,起始时间大于当前时间|1Ready就绪|2Running正在运行|3Pause暂停|4Blocked阻塞,本该执行但是没有执行|5ErrorToReady由失败进入就绪,运行错误当并未超出最大错误数,进入下一轮就绪|6Archived归档,结束时间小于当前时间|7Panic崩溃,错误次数超出了最大错误数|8Overrun超限,运行次数超出了最大限制|9Unoccupied无触发时间,下一次执行时间为null|10NotStart初始化时末启动|11Unknown未知作业触发器,作业触发器运行时类型为null|12Unhandled未知作业处理程序,作业处理程序类型运行时类型为null)
        /// </summary>
        public int Status { get; set; } = 1;
        /// <summary>
        /// 起始时间
        /// </summary>
        public DateTime? StartTime { get; set; } = DateTime.MinValue;
        /// <summary>
        /// 结束时间
        /// </summary>
        public DateTime? EndTime { get; set; } = DateTime.MinValue;
        /// <summary>
        /// 最后运行时间
        /// </summary>
        public DateTime? LastRunTime { get; set; } = DateTime.MinValue;
        /// <summary>
        /// 下一次运行时间
        /// </summary>
        public DateTime? NextRunTime { get; set; } = DateTime.MinValue;
        /// <summary>
        /// 触发次数
        /// </summary>
        public long NumberOfRuns { get; set; } = 0;
        /// <summary>
        /// 最大触发次数,0: 不限制,n: N 次
        /// </summary>
        public long MaxNumberOfRuns { get; set; } = 0;
        /// <summary>
        /// 出错次数
        /// </summary>
        public long NumberOfErrors { get; set; } = 0;
        /// <summary>
        /// 最大出错次数,0:不限制,n: N 次
        /// </summary>
        public long MaxNumberOfErrors { get; set; } = 0;
        /// <summary>
        /// 重试次数
        /// </summary>
        public int NumRetries { get; set; } = 0;
        /// <summary>
        /// 重试间隔时间,毫秒单位
        /// </summary>
        public int RetryTimeout { get; set; } = 1000;
        /// <summary>
        /// 是否立即启动
        /// </summary>
        public bool StartNow { get; set; } = true;
        /// <summary>
        /// 是否启动时执行一次
        /// </summary>
        public bool RunOnStart { get; set; } = false;
        /// <summary>
        /// 是否在启动时重置最大触发次数等于一次的作业
        /// </summary>
        public bool ResetOnlyOnce { get; set; } = true;
        /// <summary>
        /// 本次执行返回结果
        /// </summary>
        public string Result { get; set; }
        /// <summary>
        /// 本次执行耗时,单位 ms
        /// </summary>
        public long ElapsedTime { get; set; } = 0;
        /// <summary>
        /// 作业触发器更新时间
        /// </summary>
        public DateTime UpdatedTime { get; set; } = DateTime.MinValue;
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
        #endregion
 
        #region 虚拟属性
        //例子
        [SugarColumn(IsIgnore = true)]
        public string StatusStr => Status.GetEnum<Statuss>().GetName();
 
        #endregion
 
        #region 外键属性
        /*例子
        //一对一外键导航
        [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是TSK_TRIG类里面的外键ID字段
        public ClassA ClassA { get; set; } //不能赋值只能是null
        //一对多外键导航
        [Navigate(NavigateType.OneToMany, nameof(ClassA.TSK_TRIGId))]//ClassA表中的TSK_TRIGId
        public List<ClassA> ClassAList { get; set; }//注意禁止给books手动赋值
        //多对多外键导航
        [Navigate(typeof(MappingClass), nameof(MappingClass.TSK_TRIGId), nameof(MappingClass.ClassAId))]//注意顺序
        public List<ClassA> ClassAList { get; set; } //只能是null不能赋默认值
        */
        #endregion
 
        #region 枚举变量
        /// <summary>
        /// 作业触发器状态(0Backlog积压,起始时间大于当前时间|1Ready就绪|2Running正在运行|3Pause暂停|4Blocked阻塞,本该执行但是没有执行|5ErrorToReady由失败进入就绪,运行错误当并未超出最大错误数,进入下一轮就绪|6Archived归档,结束时间小于当前时间|7Panic崩溃,错误次数超出了最大错误数|8Overrun超限,运行次数超出了最大限制|9Unoccupied无触发时间,下一次执行时间为null|10NotStart初始化时末启动|11Unknown未知作业触发器,作业触发器运行时类型为null|12Unhandled未知作业处理程序,作业处理程序类型运行时类型为null)
        /// </summary>
        public enum Statuss
        {
            [Description("积压,起始时间大于当前时间")]
            Backlog,
            [Description("就绪")]
            Ready,
            [Description("正在运行")]
            Running,
            [Description("暂停")]
            Pause,
            [Description("阻塞,本该执行但是没有执行")]
            Blocked,
            [Description("由失败进入就绪,运行错误当并未超出最大错误数,进入下一轮就绪")]
            ErrorToReady,
            [Description("归档,结束时间小于当前时间")]
            Archived,
            [Description("崩溃,错误次数超出了最大错误数")]
            Panic,
            [Description("超限,运行次数超出了最大限制")]
            Overrun,
            [Description("无触发时间,下一次执行时间为null")]
            Unoccupied,
            [Description("初始化时末启动")]
            NotStart,
            [Description("未知作业触发器,作业触发器运行时类型为null")]
            Unknown,
            [Description("未知作业处理程序,作业处理程序类型运行时类型为null")]
            Unhandled,
            [Description("停止")]
            Stop,
        }
        #endregion
 
        #region 公共方法
 
        #endregion
 
    }//endClass
 
 
    public class TrigArgs
    {
        public DateTime ToRunOnceAtDt { get; set; } //上面要运行的时间
        public int NowAddMinutes { get; set; } //上面时间加多少分钟,表示延迟多少分钟运行
        public int ToRunEvery { get; set; } //每隔多少运行一回
        public int ToRunOnceIn { get; set; } //在多少后运行一次
        public string NonReentrant { get; set; } //Y不重复,N重复。就是是否跟之前的还没运行完的计划同时运行。
        public EveryType Type { get; set; } //时间类型
        public RunType runType { get; set; } //运行类型
        public Int64 Milliseconds { get; set; } 
        public int Seconds { get; set; }
        public int Minutes { get; set; }
        public int Hours { get; set; }
        public int Days { get; set; }
        public int Weekday { get; set; }
        public double Interval { get; set; }
        public string ByInterval { get; set; }
 
        public enum EveryType
        {
            [Description("毫秒")]
            Milliseconds,
            [Description("秒")]
            Seconds,
            [Description("分钟")]
            Minutes,
            [Description("小时")]
            Hours,
            [Description("天")]
            Days,
            [Description("周")]
            Weeks,
            [Description("星期几")]
            Weekdays,
            [Description("月")]
            Months,
        }
 
        public enum RunType
        {
            [Description("马上运行")]
            ToRunNow,
            [Description("在(T)运行")]
            ToRunOnceAt,
            [Description("隔(T)运行")]
            ToRunEvery,
            [Description("(T)后运行")]
            ToRunOnceIn,
        }
    }
}