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