Tiger.Api/Controllers/Test/TestController.B.cs
@@ -116,7 +116,7 @@ ApiAction response = new(); try { response = response.GetResponse(await DI.Resolve<IU9C_MES>().GetBasItem(action.Data)); response = response.GetResponse(DI.Resolve<IU9C_MES>().GetBasItem(action.Data)); } catch (System.Exception ex) { Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustSn.cs
@@ -1,5 +1,5 @@ using Rhea.Common; using Sundial; using FluentScheduler; using System; using System.Collections.Generic; using System.Linq; @@ -15,39 +15,53 @@ /// <summary> /// 从U9C获取客户条码信息 /// </summary> public class U9C_ME_GetCustSn : TigerJobBase, ITigerJob public class U9C_ME_GetCustSn : TigerJobBase, ITJob { public string Id { get; set; } = Guid.NewGuid().ToString("N"); public string Tag { get; set; } = "U9C_ME_GetCustSn Interface Job"; public string Name { get; set; } = "U9C_ME_GetCustSn Interface Job"; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) public string Tag { get; set; } public string Name { get; set; } public U9C_ME_GetCustSn() { Logger.Scheduler.Info(context.Trigger.ConvertToMonitor()); Id = Guid.NewGuid().ToString("N"); Tag = "U9C_ME_GetCustSn Interface Job"; GetJob(typeof(U9C_ME_GetCustSn).Name); Name = Job.JobName; } public void Execute() { Logger.Scheduler.Info($"进入计划调度(名称:{Name})...\r\n"); try { var _lastRunTime = Biz.SysParam["GetCustBar_LastTime", "Interface_LastRun"].PARAM_VALUE; var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-30) : Convert.ToDateTime(_lastRunTime); if ((DateTime.Now - LastRunTime).TotalMinutes > 30) Schedule = JobManager.GetSchedule(Name); StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_ME_GetCustSn).Name); TskJobInput tskJobInput = CheckIFCanGo(); if (tskJobInput.result) { GetCustBarcodeInput input = new GetCustBarcodeInput { startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = LastRunTime.AddMinutes(30).ToString("yyyy-MM-dd HH:mm:ss") }; var result = await DI.Resolve<IU9C_MES>().GetCustBarCode(input); var result = DI.Resolve<IU9C_MES>().GetCustBarCode(tskJobInput.input); if (!result.IsSuccessed) { Logger.Scheduler.Error($"获取客户条码信息异常:{result.Message}"); msg = $"获取客户条码信息异常:{result.Message}"; Logger.Scheduler.Error(msg); status = "Failed"; } else { msg = $"从U9C获取客户条码信息成功:{result.Message}"; Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); } } //SaveLog(context, "从U9C获取客户条码信息成功"); SaveFluentSchedulerLog(status, $"{msg}"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成,返回信息:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "获取客户条码信息异常"); SaveFluentSchedulerLog("Failed", ex.Message); } await Task.CompletedTask; } } } Tiger.Business.MES/Task/Jobs.U9C_ME_GetCustomer.cs
@@ -1,5 +1,5 @@ using Rhea.Common; using Sundial; using FluentScheduler; using System; using System.Collections.Generic; using System.Linq; @@ -15,39 +15,53 @@ /// <summary> /// 从U9C获取客户信息 /// </summary> public class U9C_MES_GetCustomer : TigerJobBase, ITigerJob public class U9C_MES_GetCustomer : TigerJobBase, ITJob { public string Id { get; set; } = Guid.NewGuid().ToString("N"); public string Tag { get; set; } = "U9C_MES_GetCustomer Interface Job"; public string Name { get; set; } = "U9C_MES_GetCustomer Interface Job"; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) public string Tag { get; set; } public string Name { get; set; } public U9C_MES_GetCustomer() { Logger.Scheduler.Info(context.Trigger.ConvertToMonitor()); Id = Guid.NewGuid().ToString("N"); Tag = "U9C_MES_GetCustomer Interface Job"; GetJob(typeof(U9C_MES_GetCustomer).Name); Name = Job.JobName; } public void Execute() { Logger.Scheduler.Info($"进入计划调度(名称:{Name})...\r\n"); try { var _lastRunTime = Biz.SysParam["GetCust_LastRun", "Interface_LastRun"].PARAM_VALUE; var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddDays(-1) : Convert.ToDateTime(_lastRunTime); if ((DateTime.Now - LastRunTime).TotalDays > 1) Schedule = JobManager.GetSchedule(Name); StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_MES_GetCustomer).Name); TskJobInput tskJobInput = CheckIFCanGo(); if (tskJobInput.result) { GetCustomerInput input = new GetCustomerInput { startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = LastRunTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss") }; var result = await DI.Resolve<IU9C_MES>().GetCustomer(input); var result = DI.Resolve<IU9C_MES>().GetCustomer(tskJobInput.input); if (!result.IsSuccessed) { Logger.Scheduler.Error($"获取客户信息异常:{result.Message}"); msg = $"获取客户信息异常:{result.Message}"; Logger.Scheduler.Error(msg); status = "Failed"; } else { msg = $"从U9C获取客户信息成功:{result.Message}"; Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); } } //SaveLog(context, "从U9C获取客户信息成功"); SaveFluentSchedulerLog(status, $"{msg}"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成,返回信息:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "获取客户信息异常"); SaveFluentSchedulerLog("Failed", ex.Message); } await Task.CompletedTask; } } } Tiger.Business.MES/Task/Jobs.U9C_ME_GetItem.cs
@@ -1,5 +1,5 @@ using Rhea.Common; using Sundial; using FluentScheduler; using System; using System.Collections.Generic; using System.Linq; @@ -15,39 +15,54 @@ /// <summary> /// 从U9C获取物料信息 /// </summary> public class U9C_MES_GetItem : TigerJobBase, ITigerJob public class U9C_MES_GetItem : TigerJobBase, ITJob { public string Id { get; set; } = Guid.NewGuid().ToString("N"); public string Tag { get; set; } = "U9C_MES_GetItem Interface Job"; public string Name { get; set; } = "U9C_MES_GetItem Interface Job"; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) public U9C_MES_GetItem() { Logger.Scheduler.Info(context.Trigger.ConvertToMonitor()); Id = Guid.NewGuid().ToString("N"); Tag = "U9C_MES_GetItem Interface Job"; GetJob(typeof(U9C_MES_GetItem).Name); Name = Job.JobName; } public void Execute() { Logger.Scheduler.Info($"进入计划调度(名称:{Name})...\r\n"); try { var _lastRunTime = Biz.SysParam["GetItem_LastRun", "Interface_LastRun"].PARAM_VALUE; var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddDays(-1) : Convert.ToDateTime(_lastRunTime); if ((DateTime.Now - LastRunTime).TotalDays > 1) Schedule = JobManager.GetSchedule(Name); StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_MES_GetItem).Name); TskJobInput tskJobInput = CheckIFCanGo(); if (tskJobInput.result) { GetBasItemInput input = new GetBasItemInput { startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = LastRunTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss") }; var result = await DI.Resolve<IU9C_MES>().GetBasItem(input); var result = DI.Resolve<IU9C_MES>().GetBasItem(tskJobInput.input); if (!result.IsSuccessed) { Logger.Scheduler.Error($"获取物料信息异常:{result.Message}"); msg = $"获取物料信息异常:{result.Message}"; Logger.Scheduler.Error(msg); status = "Failed"; } else { msg = $"从U9C获取物料信息成功:{result.Message}"; Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); } } //SaveLog(context, "从U9C获取物料信息成功"); SaveFluentSchedulerLog(status, $"{msg}"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成,返回信息:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "获取物料信息异常"); SaveFluentSchedulerLog("Failed", ex.Message); } await Task.CompletedTask; } } } Tiger.Business.MES/Task/Jobs.U9C_ME_GetSupplier.cs
@@ -1,11 +1,12 @@ using Rhea.Common; using Sundial; using FluentScheduler; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Minsun; @@ -15,39 +16,54 @@ /// <summary> /// 从U9C获取供应商信息 /// </summary> public class U9C_ME_GetSupplier : TigerJobBase, ITigerJob public class U9C_ME_GetSupplier : TigerJobBase, ITJob { public string Id { get; set; } = Guid.NewGuid().ToString("N"); public string Tag { get; set; } = "U9C_ME_GetSupplier Interface Job"; public string Name { get; set; } = "U9C_ME_GetSupplier Interface Job"; public string Tag { get; set; } public string Name { get; set; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) public U9C_ME_GetSupplier() { Logger.Scheduler.Info(context.Trigger.ConvertToMonitor()); Id = Guid.NewGuid().ToString("N"); Tag = "U9C_ME_GetSupplier Interface Job"; GetJob(typeof(U9C_ME_GetSupplier).Name); Name = Job.JobName; } public void Execute() { Logger.Scheduler.Info($"进入计划调度(名称:{Name})...\r\n"); try { var _lastRunTime = Biz.SysParam["Vender_LastTime", "Interface_LastRun"].PARAM_VALUE; var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddDays(-1) : Convert.ToDateTime(_lastRunTime); if ((DateTime.Now - LastRunTime).TotalDays > 1) Schedule = JobManager.GetSchedule(Name); StartTime = DateTime.Now; string msg = ""; string status = "Successed"; GetJob(typeof(U9C_ME_GetSupplier).Name); TskJobInput tskJobInput = CheckIFCanGo(); if (tskJobInput.result) { GetSupplierInput input = new GetSupplierInput { startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = LastRunTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss") }; var result = await DI.Resolve<IU9C_MES>().GetSupplier(input); var result = DI.Resolve<IU9C_MES>().GetSupplier(tskJobInput.input); if (!result.IsSuccessed) { Logger.Scheduler.Error($"获取供应商信息异常:{result.Message}"); msg = $"获取供应商信息异常:{result.Message}"; Logger.Scheduler.Error(msg); status = "Failed"; } else { msg = $"从U9C获取供应商信息成功:{result.Message}"; Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); } } //SaveLog(context, "从U9C获取供应商信息成功"); SaveFluentSchedulerLog(status, $"{msg}"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成,返回信息:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "获取供应商信息异常"); SaveFluentSchedulerLog("Failed", ex.Message); } await Task.CompletedTask; } } } Tiger.Business.MES/Task/Jobs.U9C_ME_GetWo.cs
@@ -5,11 +5,14 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Minsun; using FluentScheduler; using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; using Sundial; using Microsoft.IdentityModel.Tokens; using Tiger.Model.Entitys.MES.Position; namespace Tiger.Business.MES { @@ -66,11 +69,13 @@ { public string Id { get; set; } public string Tag { get; set; } public string Name { get; set; } = typeof(fU9C_MES_GetWo).Name; public string Name { get; set; } public fU9C_MES_GetWo() { Id = Guid.NewGuid().ToString("N"); Tag = "U9C_MES_GetWo Interface Job"; GetJob(typeof(fU9C_MES_GetWo).Name); Name = Job.JobName; } public void Execute() @@ -78,37 +83,34 @@ Logger.Scheduler.Info($"进入计划调度(名称:{Name})...\r\n"); try { Schedule = JobManager.GetSchedule(Name); StartTime = DateTime.Now; string msg = ""; string status = "Successed"; var _lastRunTime = Biz.SysParam["GetWo_LastRun", "Interface_LastRun"].PARAM_VALUE; var LastRunTime = string.IsNullOrEmpty(_lastRunTime) ? DateTime.Now.AddMinutes(-10) : Convert.ToDateTime(_lastRunTime); StartTime = DateTime.Now; if ((DateTime.Now - LastRunTime).TotalMinutes > 10) GetJob(typeof(fU9C_MES_GetWo).Name); TskJobInput tskJobInput = CheckIFCanGo(); if (tskJobInput.result) { GetWoInput input = new GetWoInput var result = DI.Resolve<IU9C_MES>().GetU9CBasWo(tskJobInput.input); if (!result.IsSuccessed) { startTime = LastRunTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = LastRunTime.AddMinutes(10).ToString("yyyy-MM-dd HH:mm:ss") }; //var result = DI.Resolve<IU9C_MES>().GetU9CBasWo(input); //if (!result.IsSuccessed) //{ // msg = $"获取工单信息异常:{result.Message}"; // Logger.Scheduler.Error(msg); // status = "Failed"; //} //else //{ // msg = $"从U9C获取工单信息成功:{result.Message}"; //} msg = $"获取工单信息异常:{result.Message}"; Logger.Scheduler.Error(msg); status = "Failed"; } else { msg = $"从U9C获取工单信息成功:{result.Message}"; Trig.LastRunTime = (tskJobInput.input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? Trig.LastRunTime : tskJobInput.input.endTime.ToDateTime(); } } SaveFluentSchedulerLog(Name, status, $"{msg}"); SaveFluentSchedulerLog(status, $"{msg}"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成,返回信息:{msg}\r\n"); } catch (System.Exception ex) { Logger.Scheduler.Fatal(ex, "获取工单信息异常"); SaveFluentSchedulerLog(Name, "Failed", ex.Message); SaveFluentSchedulerLog("Failed", ex.Message); } } }//endClass @@ -147,7 +149,7 @@ // Logger.Scheduler.Error($"获取工单信息异常:{result.Message}"); // } //} SaveFluentSchedulerLog(Name, status, "测试任务成功"); SaveFluentSchedulerLog(status, "测试任务成功"); Logger.Scheduler.Info($"计划调度(名称:{Name})完成\r\n"); } catch (System.Exception ex) Tiger.Business.MES/Task/TskJob.cs
@@ -30,8 +30,23 @@ var result = new ApiAction(); try { var _job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == input.JobType).First()??new() { JobName = input.JobType, if (input.type == EveryType.Milliseconds && input.ToRunEvery<100) { result.IsSuccessed = false; result.LocaleMsg = new($"时间是毫秒时,至少要大于100毫秒"); return result; } if (Biz.Db.Queryable<TSK_JOB>().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<TSK_JOB>().Where(x => x.JobName == input.JobName && x.JobType == input.JobType).First() ?? new() { JobName = input.JobName, JobType = input.JobType, AssemblyName = input.AssemblyName, }; @@ -58,13 +73,14 @@ 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.GHOST_ROW }) .WhereColumns(t => new { t.JobName, t.JobType, t.GHOST_ROW }) .ToStorage(); y.AsInsertable.ExecuteCommand(); y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); Tiger.Business.MES/iERP/U9C_MES.cs
@@ -26,7 +26,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<ApiAction> GetBasItem(GetBasItemInput input) public ApiAction GetBasItem(U9C_MES_Input input) { var action = new ApiAction(); Logger.Scheduler.Info($"物料信息开始同步。。。数据检查进行中。。。"); @@ -83,12 +83,8 @@ } } Logger.Scheduler.Info($"物料信息存入实体中,总数:[{items.Count}]"); db = Biz.Db; var LastRun = await db.Queryable<SYS_PARAM>().Where(q => q.PRMG_CODE == "Interface_LastRun" && q.PARAM_CODE == "GetItem_LastRun").SingleAsync(); LastRun.PARAM_VALUE = (input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? LastRun.PARAM_VALUE : input.endTime; var dbTran = db.UseTran(() => { db.Storageable(LastRun, "U9C_MES_GetItem").ExecuteCommand(); if (items.Any()) { if (items.Count > 150) @@ -309,14 +305,14 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public async Task<ApiAction> GetCustomer(GetCustomerInput input) public ApiAction GetCustomer(U9C_MES_Input input) { var action = new ApiAction(); Logger.Scheduler.Info($"客户信息开始同步。。。数据检查进行中。。。"); Logger.Scheduler.Info($"{input.triggerDetail}"); DbClient db = Biz.DataSource["YadaU9C"].Client; var list = db.Queryable<dynamic>().AS("mes_Customer").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList(); var orgs = await Biz.Db.Queryable<SYS_ORGANIZATION>().ToListAsync(); var orgs = Biz.Db.Queryable<SYS_ORGANIZATION>().ToList(); List<BAS_CUSTOMER> items = new(); if (list != null && list.Count > 0) { @@ -388,14 +384,14 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<ApiAction> GetSupplier(GetSupplierInput input) public ApiAction GetSupplier(U9C_MES_Input input) { var action = new ApiAction(); Logger.Scheduler.Info($"供应商信息开始同步。。。数据检查进行中。。。"); Logger.Scheduler.Info($"{input.triggerDetail}"); DbClient db = Biz.DataSource["YadaU9C"].Client; var list = db.Queryable<dynamic>().AS("mes_Supplier").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList(); var orgs = await Biz.Db.Queryable<SYS_ORGANIZATION>().ToListAsync(); var orgs = Biz.Db.Queryable<SYS_ORGANIZATION>().ToList(); List<BAS_SUPPLIER> items = new(); if (list != null && list.Count > 0) { @@ -464,7 +460,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<ApiAction> GetCustBarCode(GetCustBarcodeInput input) public ApiAction GetCustBarCode(U9C_MES_Input input) { var action = new ApiAction(); Logger.Scheduler.Info($"客户条码信息开始同步。。。数据检查进行中。。。"); @@ -483,7 +479,7 @@ { if (di["MoDoc"] != null) { var _MES_WO = await Biz.Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == di["MoDoc"].ToString()).FirstAsync(); var _MES_WO = Biz.Db.Queryable<BIZ_MES_WO>().Where(x => x.ORDER_NO == di["MoDoc"].ToString()).First(); MES_CUST_SN snItem = new() { CUST_CODE = _MES_WO?.CUST_CODE ?? "", @@ -540,7 +536,7 @@ return action; } public ApiAction GetU9CBasWo(GetWoInput input) public ApiAction GetU9CBasWo(U9C_MES_Input input) { var action = new ApiAction(); Logger.Scheduler.Info($"工单信息开始同步。。。数据检查进行中。。。"); @@ -594,11 +590,8 @@ } Logger.Scheduler.Info($"工单信息存入实体中,总数:[{items.Count}]"); db = Biz.Db; var LastRun = db.Queryable<SYS_PARAM>().Where(q => q.PRMG_CODE == "Interface_LastRun" && q.PARAM_CODE == "GetWo_LastRun").Single(); LastRun.PARAM_VALUE = (input.endTime.ToDateTime() - DateTime.Now).TotalMinutes > 0 ? LastRun.PARAM_VALUE : input.endTime; var dbTran = db.UseTran(() => { db.Storageable(LastRun, "U9C_MES_GetWo").ExecuteCommand(); if (items.Any()) { if (items.Count > 150) Tiger.Business/Services/Base/InterfaceServiceNew.cs
@@ -6,6 +6,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Threading; @@ -324,14 +325,22 @@ { JobManager.AddJob<TJob>((s) => GenerateSchedule(jobParam.Args, s.WithName(jobParam.JobName))); string guid = Guid.NewGuid().ToString("N"); TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobParam.JobName).First() ?? new() if (Biz.Db.Queryable<TSK_JOB>().Any(x => (x.JobName != jobParam.JobName && x.JobType == jobParam.DataType) || (x.JobName == jobParam.JobName && x.JobType != jobParam.DataType))) { apiAction.IsSuccessed = false; apiAction.LocaleMsg = new($"相同的类名不能有不同的任务名或者相同的任务名不能有不同的类名"); return apiAction; } TSK_JOB job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == jobParam.JobName && x.JobType == jobParam.DataType).First() ?? new() { ID = guid, Remark = jobParam.Remark, JobType = jobParam.JobName, AssemblyName = jobParam.AssemblyName, JobName = jobParam.JobName, }; job.Remark = jobParam.Remark; job.JobType = jobParam.DataType; job.AssemblyName = jobParam.AssemblyName; job.JobName = jobParam.JobName; var trigger = Biz.Db.Queryable<TSK_TRIG>().Where(x => x.JobId == job.ID).First() ?? new TSK_TRIG() { JobId = guid, @@ -345,7 +354,7 @@ var dbTran = db.UseTran(() => { var y = db.Storageable(job) .WhereColumns(t => new { t.JobName, t.GHOST_ROW }) .WhereColumns(t => new { t.JobName,t.JobType, t.GHOST_ROW }) .ToStorage(); y.AsInsertable.ExecuteCommand(); y.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); @@ -409,7 +418,7 @@ var jobs = Biz.Db.Queryable<TSK_JOB>().IncludesAllFirstLayer().ToList(); foreach (var job in jobs) { if (job.JobName == "fU9C_MES_GetWo" || job.JobName == "fTest") //if (job.JobName == "fU9C_MES_GetWo" || job.JobName == "fTest") { Type type = Type.GetType($"{job.AssemblyName}.{job.JobType},{job.AssemblyName}", throwOnError: true); dynamic _type = Activator.CreateInstance(type); @@ -437,7 +446,7 @@ /// <returns></returns> private Schedule Schedule<TJob>(TJob entity, string JobName, Registry registry) where TJob : class, ITJob { return registry.Schedule<TJob>().WithName(typeof(TJob).Name); return registry.Schedule<TJob>().WithName(JobName); } /// <summary> Tiger.Business/Services/Base/TigerJobBase.cs
@@ -1,8 +1,11 @@ using Rhea.Common; using FluentScheduler; using Newtonsoft.Json; using Rhea.Common; using Sundial; using System; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Entitys.MES.Position; namespace Tiger.Business { @@ -11,6 +14,10 @@ /// </summary> public class TigerJobBase { public static Schedule Schedule; public static TSK_JOB Job = new TSK_JOB(); public static TSK_TRIG Trig = new TSK_TRIG(); public static TrigArgs Args = new TrigArgs(); /// <summary> /// 开始时间 /// </summary> @@ -54,16 +61,14 @@ /// <param name="JobName"></param> /// <param name="remark"></param> /// <returns></returns> public static ApiAction SaveFluentSchedulerLog(string JobName,string status, string remark) public static ApiAction SaveFluentSchedulerLog(string status, string remark) { ApiAction action = new ApiAction(); var job = Biz.Db.Queryable<TSK_JOB>().Where(x => x.JobName == JobName).IncludesAllFirstLayer().First(); var trig = job.Triggers?[0]; if (trig != null) if (Trig != null) { trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now-StartTime).TotalMilliseconds); trig.StartTime = StartTime; trig.EndTime = DateTime.Now; Trig.ElapsedTime = (long)Math.Ceiling((DateTime.Now-StartTime).TotalMilliseconds); Trig.StartTime = StartTime; Trig.EndTime = DateTime.Now; } else { action.IsSuccessed = false; @@ -73,14 +78,14 @@ } var logentity = new TSK_LOG { JobId = job.ID, AssemblyName = job.AssemblyName, Args = trig.Args, 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, StartTime = Trig.StartTime, EndTime = Trig.EndTime, ElapsedTime = Trig.ElapsedTime, Remark = remark }; @@ -88,16 +93,112 @@ //保存到数据库 var dbTran = db.UseTran(() => { db.Updateable(trig, "System_Job").UpdateColumns(q => new { q.StartTime, q.ElapsedTime,q.UpdatedTime,q.UPDATE_USER}).ExecuteCommand(); db.Updateable(Trig, "System_Job").UpdateColumns(q => new { q.StartTime,q.LastRunTime, 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"); Logger.Scheduler.Info($"计划调度(名称:{Job.JobName})作业日志保存到数据库完成\r\n"); return action; } /// <summary> /// 获取任务 /// </summary> public static void GetJob(string jobType) { Job = Biz.Db.Queryable<TSK_JOB>().Where(q => q.JobType == jobType).IncludesAllFirstLayer().First(); Args = JsonConvert.DeserializeObject<TrigArgs>(Job.Triggers[0].Args); Trig = Job.Triggers[0]; } /// <summary> /// 判断时间,返回是否可以继续工作任务 /// </summary> /// <returns></returns> public static TskJobInput CheckIFCanGo() { TskJobInput tskJobInput = new TskJobInput(); var dateTime = DateTime.Now; //按时间类型来运行 switch (Args.Type) { case TrigArgs.EveryType.Milliseconds: dateTime = Trig.LastRunTime ?? DateTime.Now.AddMilliseconds(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalMilliseconds > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddMilliseconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Seconds: dateTime = Trig.LastRunTime ?? DateTime.Now.AddSeconds(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalSeconds > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddSeconds(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Minutes: dateTime = Trig.LastRunTime ?? DateTime.Now.AddMinutes(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalMinutes > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddMinutes(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Hours: dateTime = Trig.LastRunTime ?? DateTime.Now.AddHours(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalHours > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddHours(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Days: dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Weeks: dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-7); tskJobInput.result = (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * 7; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Weekdays: dateTime = Trig.LastRunTime ?? DateTime.Now.AddDays(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery; tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddDays(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; case TrigArgs.EveryType.Months: dateTime = Trig.LastRunTime ?? DateTime.Now.AddMonths(-Args.ToRunEvery); tskJobInput.result = (DateTime.Now - dateTime).TotalDays > Args.ToRunEvery * DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); tskJobInput.input = new() { startTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime = dateTime.AddMonths(Args.ToRunEvery).ToString("yyyy-MM-dd HH:mm:ss"), }; break; } return tskJobInput; } } } Tiger.IBusiness.MES/iERP/IU9C_MES.cs
@@ -11,11 +11,11 @@ { public interface IU9C_MES { public Task<ApiAction> GetBasItem(GetBasItemInput input); public Task<ApiAction> GetCustomer(GetCustomerInput input); public Task<ApiAction> GetSupplier(GetSupplierInput input); public ApiAction GetBasItem(U9C_MES_Input input); public ApiAction GetCustomer(U9C_MES_Input input); public ApiAction GetSupplier(U9C_MES_Input input); public Task<ApiAction> GetBasWo(GetWoInput input); public Task<ApiAction> GetCustBarCode(GetCustBarcodeInput input); public ApiAction GetU9CBasWo(GetWoInput input); public ApiAction GetCustBarCode(U9C_MES_Input input); public ApiAction GetU9CBasWo(U9C_MES_Input input); } } Tiger.Model.Net/Entitys/MES/ParameterEntity/TskParameter.cs
@@ -15,6 +15,7 @@ public string Remark { get; set; } public string NonReentrant { get; set; } public DateTime ToRunOnceAtDt { get; set; } public DateTime LastRunTime { get; set; } public TrigArgs.RunType runType { get; set; } public TrigArgs.EveryType type { get; set; } public int NowAddMinutes { get; set; } //上面时间加多少分钟,表示延迟多少分钟运行 @@ -24,4 +25,10 @@ public int Hours { get; set; } public int Days { get; set; } } public class TskJobInput { public bool result { get; set; } public U9C_MES_Input input { get; set; } } } Tiger.Model.Net/Entitys/MES/ParameterEntity/U9C_MES_Input.cs
@@ -11,6 +11,7 @@ public string startTime { get; set; } public string endTime { get; set; } public string triggerDetail { get; set; } public DateTime LastRunTime { get; set; } } public class GetBasItemInput : U9C_MES_Input