From f52bacd52cbc8f8250766d2910e638a8bf4dbcc8 Mon Sep 17 00:00:00 2001 From: hwh <332078369@qq.com> Date: 星期六, 22 六月 2024 16:59:12 +0800 Subject: [PATCH] 调用内部代码的定时任务 --- Wms/Utility/Job/SchedulerCenter.cs | 7 + Wms/Utility/Entity/LogModel.cs | 2 Wms/Utility/Job/HttpJob.cs | 2 Wms/Utility/Job/JobBase.cs | 38 +++++---- Wms/Model/ModelVm/JobVm.cs | 19 ++++ Wms/Utility/Utility.csproj | 1 Wms/Utility/Job/InternalMethodJob.cs | 93 +++++++++++++++++++++++ Wms/Wms/Controllers/JobController.cs | 19 ++-- Wms/Utility/Job/Constant.cs | 4 + Wms/Utility/Entity/ScheduleEntity.cs | 14 +++ 10 files changed, 173 insertions(+), 26 deletions(-) diff --git a/Wms/Model/ModelVm/JobVm.cs b/Wms/Model/ModelVm/JobVm.cs new file mode 100644 index 0000000..30900fe --- /dev/null +++ b/Wms/Model/ModelVm/JobVm.cs @@ -0,0 +1,19 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace Model.ModelVm +{ + public class JobVm + { + /// <summary> + /// 浠诲姟鍚嶇О + /// </summary> + public string Name { get; set; } + /// <summary> + /// 浠诲姟缁� + /// </summary> + public string Group { get; set; } + } +} diff --git a/Wms/Utility/Entity/LogModel.cs b/Wms/Utility/Entity/LogModel.cs index 606ed9d..9becb8f 100644 --- a/Wms/Utility/Entity/LogModel.cs +++ b/Wms/Utility/Entity/LogModel.cs @@ -4,7 +4,7 @@ namespace Utility.Entity { - public abstract class LogModel + public class LogModel { /// <summary> /// 寮�濮嬫墽琛屾椂闂� diff --git a/Wms/Utility/Entity/ScheduleEntity.cs b/Wms/Utility/Entity/ScheduleEntity.cs index cebe9a5..f83e83b 100644 --- a/Wms/Utility/Entity/ScheduleEntity.cs +++ b/Wms/Utility/Entity/ScheduleEntity.cs @@ -68,6 +68,20 @@ public RequestTypeEnum RequestType { get; set; } = RequestTypeEnum.Post; #endregion + #region 鍐呯疆鏂规硶 + /// <summary> + /// 绫诲悕 + /// </summary> + public string ClassName { get; set; } + /// <summary> + /// 鏂规硶鍚� + /// </summary> + public string MethodName { get; set; } + /// <summary> + /// 鍙傛暟 + /// </summary> + public string MethodParameters { get; set; } + #endregion } public class ModifyJobInput diff --git a/Wms/Utility/Job/Constant.cs b/Wms/Utility/Job/Constant.cs index 454e8f0..11b482a 100644 --- a/Wms/Utility/Job/Constant.cs +++ b/Wms/Utility/Job/Constant.cs @@ -57,5 +57,9 @@ public static string Payload = "Payload"; public static string BuiltIn = "BuiltIn"; + + public const string CLASSNAME = "ClassName"; + public const string METHODNAME = "MethodName"; + public const string METHODPARAMETERS = "MethodParameters"; } } diff --git a/Wms/Utility/Job/HttpJob.cs b/Wms/Utility/Job/HttpJob.cs index 90a8381..d43c323 100644 --- a/Wms/Utility/Job/HttpJob.cs +++ b/Wms/Utility/Job/HttpJob.cs @@ -15,7 +15,7 @@ { public class HttpJob : JobBase<LogUrlModel>, IJob { - public HttpJob(ILogger logger) : base(new LogUrlModel(), logger) + public HttpJob() : base(new LogUrlModel()) { } public override async Task NextExecute(IJobExecutionContext context) diff --git a/Wms/Utility/Job/InternalMethodJob.cs b/Wms/Utility/Job/InternalMethodJob.cs new file mode 100644 index 0000000..454c46b --- /dev/null +++ b/Wms/Utility/Job/InternalMethodJob.cs @@ -0,0 +1,93 @@ +锘縰sing Autofac; +using AutoMapper; +using Newtonsoft.Json; +using Quartz; +using Serilog; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Utility.Entity; + +namespace Utility.Job +{ + public class InternalMethodJob : JobBase<LogModel>, IJob + { + + public InternalMethodJob() : base(new LogModel()) + { + + } + + public override async Task NextExecute(IJobExecutionContext context) + { + // 鑾峰彇鐩稿叧鍙傛暟 + var className = context.JobDetail.JobDataMap.GetString(Constant.CLASSNAME)?.Trim(); + var methodName = context.JobDetail.JobDataMap.GetString(Constant.METHODNAME)?.Trim(); + var methodParameters = context.JobDetail.JobDataMap.GetString(Constant.METHODPARAMETERS); + + try + { + /// 鍔犺浇 WMS.BLL 绫诲簱 + Assembly assembly = Assembly.LoadFrom("bin\\Debug\\netcoreapp3.1\\WMS.BLL.dll"); + + // 鑾峰彇 WMS.BLL鐨勭被鍨� + Type classType = assembly.GetType("WMS.BLL." + className); + + if (classType == null) + { + throw new TypeLoadException($"鎵句笉鍒拌绫诲瀷{className}"); + } + #region 瀹瑰櫒鍒涘缓绀轰緥 鏈夋姤閿欐悶涓嶅畾鎶界┖鍐嶅紕 + + //var builder = new ContainerBuilder(); + + //// 娉ㄥ唽闇�瑕佺殑鏈嶅姟鍜岀被鍨� + //builder.RegisterAssemblyTypes(Assembly.Load("WMS.IDAL"), Assembly.Load("WMS.DAL"), Assembly.Load("WMS.IBLL"), + // Assembly.Load("WMS.BLL")); + //builder.RegisterType<Mapper>().As<IMapper>(); + + //// 浣跨敤 Autofac 瀹瑰櫒鏉ヨВ鏋愮被鐨勫疄渚� + //var scope = builder.Build(); + + //var instance = scope.Resolve(classType); + #endregion + + // 鍒涘缓瀹炰緥锛堝鏋滄柟娉曟槸瀹炰緥鏂规硶锛� 鏃犳敞鍏� 蹇呴』鏈夌┖鍙傛暟鐨勬瀯閫犲嚱鏁� + object instance = Activator.CreateInstance(classType); + + // 鑾峰彇鏂规硶淇℃伅 + MethodInfo methodInfo = classType.GetMethod(methodName); + + if (methodInfo == null) + { + throw new ArgumentException($"鎵句笉鍒拌鏂规硶{methodName}"); + } + + // 璋冪敤鏂规硶 + object result = null; + if (methodInfo.GetParameters().Length == 0) + { + // 鏃犲弬鏂规硶 + result = methodInfo.Invoke(instance, null); + } + else + { + // 鏈夊弬鏂规硶 + var parameters = JsonConvert.DeserializeObject<object[]>(methodParameters); // 瑙f瀽鏂规硶鍙傛暟 + result = await (Task<object>)methodInfo.Invoke(instance, parameters); + } + + // 澶勭悊鏂规硶鎵ц缁撴灉 + LogInfo.Result = JsonConvert.SerializeObject(result); + } + catch (Exception ex) + { + LogInfo.ErrorMsg = ex.Message; + context.JobDetail.JobDataMap[Constant.EXCEPTION] = $"<div class='err-time'>{LogInfo.BeginTime}</div>{JsonConvert.SerializeObject(LogInfo)}"; + } + //_logger.Error(ex, $"鎵ц鏂规硶鏃跺嚭閿� {methodName}: {ex.Message}"); + } + } +} diff --git a/Wms/Utility/Job/JobBase.cs b/Wms/Utility/Job/JobBase.cs index d6ba708..be14f99 100644 --- a/Wms/Utility/Job/JobBase.cs +++ b/Wms/Utility/Job/JobBase.cs @@ -19,11 +19,9 @@ protected Stopwatch stopwatch = new Stopwatch(); protected T LogInfo { get; private set; } - private ILogger _logger; - public JobBase(T logInfo,ILogger logger) + public JobBase(T logInfo) { LogInfo = logInfo; - _logger = logger; } public async Task Execute(IJobExecutionContext context) @@ -36,7 +34,15 @@ return; } //璁板綍鎵ц娆℃暟 - var runNumber = context.JobDetail.JobDataMap.GetLong(Constant.RUNNUMBER); + long runNumber = 0; + try + { + runNumber = context.JobDetail.JobDataMap.GetLong(Constant.RUNNUMBER); + } + catch (Exception) + { + + } context.JobDetail.JobDataMap[Constant.RUNNUMBER] = ++runNumber; var logs = context.JobDetail.JobDataMap[Constant.LOGLIST] as List<string> ?? new List<string>(); @@ -75,19 +81,19 @@ public abstract Task NextExecute(IJobExecutionContext context); - public async Task WarningAsync(string title, string msg) - { - _logger.Warning(msg); - } + //public async Task WarningAsync(string title, string msg) + //{ + // _logger.Warning(msg); + //} - public async Task InformationAsync(string title, string msg) - { - _logger.Information(msg); - } + //public async Task InformationAsync(string title, string msg) + //{ + // _logger.Information(msg); + //} - public async Task ErrorAsync(string title, Exception ex, string msg) - { - _logger.Error(ex, msg); - } + //public async Task ErrorAsync(string title, Exception ex, string msg) + //{ + // _logger.Error(ex, msg); + //} } } diff --git a/Wms/Utility/Job/SchedulerCenter.cs b/Wms/Utility/Job/SchedulerCenter.cs index 73f3642..8ee31a7 100644 --- a/Wms/Utility/Job/SchedulerCenter.cs +++ b/Wms/Utility/Job/SchedulerCenter.cs @@ -143,6 +143,13 @@ httpDir.Add(Constant.REQUESTPARAMETERS, entity.RequestParameters); httpDir.Add(Constant.REQUESTTYPE, ((int)entity.RequestType).ToString()); } + else if (entity.JobType == JobTypeEnum.BuiltIn) + { + jobConfigurator = JobBuilder.Create<InternalMethodJob>(); + httpDir.Add(Constant.CLASSNAME, entity.ClassName); + httpDir.Add(Constant.METHODNAME, entity.MethodName); + httpDir.Add(Constant.METHODPARAMETERS, entity.MethodParameters); + } // 瀹氫箟杩欎釜宸ヤ綔锛屽苟灏嗗叾缁戝畾鍒版垜浠殑IJob瀹炵幇绫� IJobDetail job = jobConfigurator diff --git a/Wms/Utility/Utility.csproj b/Wms/Utility/Utility.csproj index 92ea9bb..2b5c558 100644 --- a/Wms/Utility/Utility.csproj +++ b/Wms/Utility/Utility.csproj @@ -14,6 +14,7 @@ <ItemGroup> <PackageReference Include="Autofac" Version="8.0.0" /> + <PackageReference Include="AutoMapper" Version="12.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.32" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" /> diff --git a/Wms/Wms/Controllers/JobController.cs b/Wms/Wms/Controllers/JobController.cs index f42da03..e7f8e2e 100644 --- a/Wms/Wms/Controllers/JobController.cs +++ b/Wms/Wms/Controllers/JobController.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Utility.Entity; using Utility; +using Model.ModelVm; namespace Wms.Controllers { @@ -50,7 +51,7 @@ /// </summary> /// <returns></returns> [HttpPost] - public async Task<string> StopJob([FromBody] JobKey job) + public async Task<string> StopJob(JobVm job) { return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name); } @@ -60,7 +61,7 @@ /// </summary> /// <returns></returns> [HttpPost] - public async Task<string> RemoveJob([FromBody] JobKey job) + public async Task<string> RemoveJob(JobVm job) { return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name, true); } @@ -70,7 +71,7 @@ /// </summary> /// <returns></returns> [HttpPost] - public async Task<string> ResumeJob([FromBody] JobKey job) + public async Task<string> ResumeJob(JobVm job) { return await scheduler.ResumeJobAsync(job.Group, job.Name); } @@ -80,7 +81,7 @@ /// </summary> /// <returns></returns> [HttpPost] - public async Task<ScheduleEntity> QueryJob([FromBody] JobKey job) + public async Task<ScheduleEntity> QueryJob(JobVm job) { return await scheduler.QueryJobAsync(job.Group, job.Name); } @@ -106,9 +107,10 @@ /// <param name="job"></param> /// <returns></returns> [HttpPost] - public async Task<bool> TriggerJob([FromBody] JobKey job) + public async Task<bool> TriggerJob(JobVm job) { - await scheduler.TriggerJobAsync(job); + JobKey modKey = new JobKey(job.Name, job.Group); + await scheduler.TriggerJobAsync(modKey); return true; } @@ -118,9 +120,10 @@ /// <param name="jobKey"></param> /// <returns></returns> [HttpPost] - public async Task<List<string>> GetJobLogs([FromBody] JobKey jobKey) + public async Task<List<string>> GetJobLogs(JobVm job) { - var logs = await scheduler.GetJobLogsAsync(jobKey); + JobKey modKey = new JobKey(job.Name, job.Group); + var logs = await scheduler.GetJobLogsAsync(modKey); logs?.Reverse(); return logs; } -- Gitblit v1.8.0