using Rhea.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Minsun;
using FluentScheduler;
using Newtonsoft.Json;
using static Tiger.Model.TrigArgs;
using System.Reflection;
namespace Tiger.Business.MES
{
///
/// 任务相关
///
public partial class TskJob : ITskJob
{
///
/// 保存计划任务
///
///
///
public async Task SaveTskJob(TskParameter input)
{
var result = new ApiAction();
try
{
if (input.type == EveryType.Milliseconds && input.ToRunEvery<100)
{
result.IsSuccessed = false;
result.LocaleMsg = new($"时间是毫秒时,至少要大于100毫秒");
return result;
}
if (Biz.Db.Queryable().Any(x =>
(x.JobName != input.JobName && x.JobType == input.JobType) ||
(x.JobName == input.JobName && x.JobType != input.JobType)))
{
result.IsSuccessed = false;
result.LocaleMsg = new($"相同的类名不能有不同的任务名或者相同的任务名不能有不同的类名");
return result;
}
var _job = Biz.Db.Queryable().Where(x => x.JobName == input.JobName && x.JobType == input.JobType).First() ?? new()
{
JobName = input.JobName,
JobType = input.JobType,
AssemblyName = input.AssemblyName,
};
_job.Remark = input.Remark;
//计划任务参数
var Args = new TrigArgs()
{
ToRunOnceAtDt = input.ToRunOnceAtDt,
NowAddMinutes = input.NowAddMinutes,
ToRunEvery = input.ToRunEvery,
ToRunOnceIn = input.ToRunOnceIn,
NonReentrant = input.NonReentrant,
Type = input.type,
runType = input.runType,
Minutes = input.Minutes,
Hours = input.Hours,
Days = input.Days,
Interval = input.Interval,
ByInterval = input.ByInterval,
};
TSK_TRIG tskTrig = Biz.Db.Queryable().Where(x => x.JobId == _job.ID).First() ?? new()
{
JobId = _job.ID,
Status = TSK_TRIG.Statuss.Ready.GetValue(),
StartTime = DateTime.Now,
NumberOfRuns = 1,
};
tskTrig.LastRunTime = input.LastRunTime;
tskTrig.Args = JsonConvert.SerializeObject(Args);
var db = Biz.Db;
var dbTran = db.UseTran(() =>
{
var y = db.Storageable(_job)
.WhereColumns(t => new { t.JobName, t.JobType, t.GHOST_ROW })
.ToStorage();
y.AsInsertable.ExecuteCommand();
y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
var z = db.Storageable(tskTrig)
.WhereColumns(t => new { t.JobId, t.GHOST_ROW })
.ToStorage();
z.AsInsertable.ExecuteCommand();
z.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
result.IsSuccessed = false;
result.Message = $"保存计划任务异常";
}
}
catch (Exception ex)
{
result.CatchExceptionWithLog(ex, "保存计划任务异常");
}
return await Task.FromResult(result);
}
} //endClass
}