using Rhea.Common;
using Sundial;
using System;
using Tiger.IBusiness;
using Tiger.Model;
namespace Tiger.Business
{
///
/// 作业基类
///
public class TigerJobBase
{
///
/// 开始时间
///
public static DateTime StartTime { get; set; }
///
/// 保存日志
///
public static ApiAction SaveLog(JobExecutingContext context,string remark) {
ApiAction action = new ApiAction();
Type type = Type.GetType(context.JobDetail.JobType, throwOnError: true);
var job = Biz.Db.Queryable().Where(x=>x.JobName == context.JobId && x.JobType == type.Name).First();
var logentity = new TSK_LOG {
JobId = job.ID,
TriggerType =context.JobDetail.JobType,
AssemblyName = context.JobDetail.AssemblyName,
Args = context.Trigger.Args,
Operation = context.Trigger.Status.ToString(),
Status = "Successed",
StartTime = StartTime,
EndTime = context.Trigger.EndTime,
ElapsedTime = context.Trigger.ElapsedTime,
Remark = remark
};
var db = Business.Biz.Db;
//保存到数据库
var dbTran = db.UseTran(() =>
{
db.Insertable(logentity).ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"作业保存到数据库异常");
}
return action;
}
///
/// 保存日志
///
///
///
///
public static ApiAction SaveFluentSchedulerLog(string JobName,string status, string remark)
{
ApiAction action = new ApiAction();
var job = Biz.Db.Queryable().Where(x => x.JobName == JobName).IncludesAllFirstLayer().First();
var trig = job.Triggers?[0];
if (trig != null)
{
trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now-StartTime).TotalMilliseconds);
trig.StartTime = StartTime;
trig.EndTime = DateTime.Now;
}
else {
action.IsSuccessed = false;
action.LocaleMsg = new($"工作任务不存在");
Logger.Scheduler.Error("工作任务不存在\r\n");
return action;
}
var logentity = new TSK_LOG
{
JobId = job.ID,
AssemblyName = job.AssemblyName,
Args = trig.Args,
//Operation = job.Triggers?[0].Status.ToString(),
Status = status, //job.Triggers?[0].Status.ToString(),
StartTime = trig.StartTime,
EndTime = trig.EndTime,
ElapsedTime = trig.ElapsedTime,
Remark = remark
};
var db = Business.Biz.Db;
//保存到数据库
var dbTran = db.UseTran(() =>
{
db.Updateable(trig, "System_Job").UpdateColumns(q => new { q.StartTime, q.ElapsedTime,q.UpdatedTime,q.UPDATE_USER}).ExecuteCommand();
db.Insertable(logentity).ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"作业日志保存到数据库异常");
}
Logger.Scheduler.Info($"计划调度(名称:{JobName})作业日志保存到数据库完成\r\n");
return action;
}
}
}