From ecad98aa74a1284a036572fa364bcc352480149c Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期一, 11 五月 2026 08:01:35 +0800
Subject: [PATCH] 1.车间综合看板接口调整 2.报工记录子表和不良记录表写入报工人员,班组编码 3.修改调整定时任务写入到数据库,并实现消息推送
---
VueWebCoreApi/Quartz/HttpResultfulJob.cs | 150 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 112 insertions(+), 38 deletions(-)
diff --git a/VueWebCoreApi/Quartz/HttpResultfulJob.cs b/VueWebCoreApi/Quartz/HttpResultfulJob.cs
index c3aa4e5..5fecec2 100644
--- a/VueWebCoreApi/Quartz/HttpResultfulJob.cs
+++ b/VueWebCoreApi/Quartz/HttpResultfulJob.cs
@@ -12,83 +12,157 @@
using VueWebCoreApi.Extensions;
using VueWebCoreApi.SignalR;
using VueWebCoreApi.Tools;
+using static VueWebCoreApi.Quartz.HttpManager;
namespace VueWebCoreApi.Quartz
{
+ /// <summary>
+ /// 瀹氭椂浠诲姟鎵ц绫伙細Quartz鍒版椂闂村悗锛岃嚜鍔ㄨ繍琛岃繖涓被鐨凟xecute鏂规硶
+ /// 浣滅敤锛氬彂閫丠TTP璇锋眰銆佽褰曚换鍔℃棩蹇椼�佹帹閫佹墽琛岀粨鏋�
+ /// </summary>
public class HttpResultfulJob : IJob
{
- private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(ChatHub));
+ // 鏃ュ織璁板綍宸ュ叿锛坙og4net锛�
+ private readonly ILog _log = LogManager.GetLogger(Startup.repository.Name, typeof(ChatHub));
+ // SignalR 瀹炴椂鎺ㄩ�佸伐鍏凤紙缁欏墠绔帹閫佹秷鎭級
private readonly IHubContext<ChatHub, IChatClient> _hubContext;
+ // HttpClient 宸ュ巶锛氱敤浜庡彂閫� HTTP 璇锋眰
+ private readonly IHttpClientFactory _httpClientFactory;
+ // 鏁版嵁搴撲粨鍌細鐢ㄤ簬璁板綍浠诲姟杩愯鏃ュ織銆佹洿鏂版渶鍚庢墽琛屾椂闂�
+ private readonly QuartzRepository _quartzRepo;
- readonly IHttpClientFactory httpClientFactory;
/// <summary>
- /// 2020.05.31澧炲姞鏋勯�犳柟娉�
+ /// 鏋勯�犲嚱鏁帮細渚濊禆娉ㄥ叆锛堣嚜鍔ㄨ祴鍊兼墍鏈夐渶瑕佺殑鏈嶅姟锛�
/// </summary>
- /// <param name="serviceProvider"></param>
- /// <param name="httpClientFactory"></param>
- public HttpResultfulJob(IServiceProvider serviceProvider, IHttpClientFactory httpClientFactory, IHubContext<ChatHub, IChatClient> hubContext)
+ public HttpResultfulJob(IServiceProvider serviceProvider,
+ IHttpClientFactory httpClientFactory,
+ IHubContext<ChatHub, IChatClient> hubContext,
+ QuartzRepository quartzRepo)
{
- this.httpClientFactory = httpClientFactory;
+ _httpClientFactory = httpClientFactory;
_hubContext = hubContext;
- //serviceProvider.GetService()
+ _quartzRepo = quartzRepo;
}
+
+ /// <summary>
+ /// 銆愭牳蹇冩柟娉曘��
+ /// Quartz 璋冨害鍣ㄦ牴鎹� Cron 琛ㄨ揪寮忥紝鍒版椂闂村悗**鑷姩璋冪敤**杩欎釜鏂规硶
+ /// 浣滅敤锛氭墽琛屽叿浣撶殑浠诲姟閫昏緫锛堝彂閫丠TTP璇锋眰锛�
+ /// </summary>
public async Task Execute(IJobExecutionContext context)
{
- DateTime dateTime = DateTime.Now;
- TaskOptions taskOptions = context.GetTaskOptions();
- string httpMessage = "";
- AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger;
+ // 璁板綍浠诲姟寮�濮嬫墽琛屾椂闂�
+ var beginTime = DateTime.Now;
+ // 浠� Quartz 涓婁笅鏂囪幏鍙栧綋鍓嶈鎵ц鐨勪换鍔¢厤缃紙鍚嶇О銆佸垎缁勩�乁RL銆丆ron绛夛級
+ var taskOptions = context.GetTaskOptions();
+ // 瀛樺偍 HTTP 璇锋眰杩斿洖鐨勭粨鏋滀俊鎭�
+ string httpMessage = string.Empty;
+ HttpResult result = new HttpResult();
+
+ // ==========================================
+ // 绗竴姝ワ細鏍¢獙浠诲姟鏄惁瀛樺湪
+ // ==========================================
if (taskOptions == null)
{
- FileHelper.WriteFile(FileQuartz.LogPath + trigger.Group, $"{trigger.Name}.txt", "鏈埌鎵句綔涓氭垨鍙兘琚Щ闄�", true);
+ // 濡傛灉浠诲姟涓虹┖锛岃褰曢敊璇棩蹇楀埌鏁版嵁搴�
+ var trigger = context.Trigger;
+ await _quartzRepo.AddJobRunLogAsync(trigger.Key.Name, trigger.Key.Group, beginTime, DateTime.Now, "鏈壘鍒颁綔涓氭垨鍙兘琚Щ闄�", taskOptions.MessagePush, taskOptions.PushUserCode);
return;
}
- Console.WriteLine($"浣滀笟[{taskOptions.TaskName}]寮�濮�:{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")}");
+ // 绯荤粺鏃ュ織杈撳嚭锛氫换鍔″紑濮嬫墽琛�
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]寮�濮�:{beginTime:yyyy-MM-dd HH:mm:ss}");
+
+ // ==========================================
+ // 绗簩姝ワ細鏍¢獙浠诲姟鏄惁閰嶇疆浜嗚姹傚湴鍧�
+ // ==========================================
if (string.IsNullOrEmpty(taskOptions.ApiUrl) || taskOptions.ApiUrl == "/")
{
- FileHelper.WriteFile(FileQuartz.LogPath + trigger.Group, $"{trigger.Name}.txt", $"{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")}鏈厤缃畊rl,", true);
+ // 鏈厤缃瓵PI鍦板潃锛岃褰曟棩蹇�
+ await _quartzRepo.AddJobRunLogAsync(taskOptions.TaskName, taskOptions.GroupName, beginTime, DateTime.Now, "鏈厤缃甎RL", taskOptions.MessagePush, taskOptions.PushUserCode);
return;
}
-
+ // ==========================================
+ // 绗笁姝ワ細鍙戦�� HTTP 璇锋眰锛堟牳蹇冧笟鍔★級
+ // ==========================================
try
{
- Dictionary<string, string> header = new Dictionary<string, string>();
+ // 瀛樺偍璇锋眰澶达紙韬唤楠岃瘉淇℃伅锛�
+ var headers = new Dictionary<string, string>();
+ // 濡傛灉閰嶇疆浜� AuthKey 鍜� AuthValue锛屾坊鍔犲埌璇锋眰澶�
if (!string.IsNullOrEmpty(taskOptions.AuthKey) && !string.IsNullOrEmpty(taskOptions.AuthValue))
{
- header.Add(taskOptions.AuthKey.Trim(), taskOptions.AuthValue.Trim());
+ headers.Add(taskOptions.AuthKey.Trim(), taskOptions.AuthValue.Trim());
}
-
- httpMessage = await httpClientFactory.HttpSendAsync(taskOptions.RequestType?.ToLower() == "get" ? HttpMethod.Get : HttpMethod.Post, taskOptions.ApiUrl, header);
+ // 鍒ゆ柇璇锋眰鏂瑰紡锛欸ET 鎴� POST锛堥粯璁OST锛�
+ var method = taskOptions.RequestType?.ToLower() == "get" ? HttpMethod.Get : HttpMethod.Post;
+ // 璋冪敤宸ュ叿绫伙紝鍙戦�� HTTP 璇锋眰锛屽苟鑾峰彇杩斿洖缁撴灉
+ result = await _httpClientFactory.HttpSendAsync(method, taskOptions.ApiUrl, taskOptions.RequestParameters, headers);
}
catch (Exception ex)
{
- httpMessage = ex.Message;
+ // 濡傛灉璇锋眰寮傚父锛堢綉缁滈敊璇�佹帴鍙f姤閿欙級锛岃褰曞紓甯镐俊鎭�
+ result.ErrorMsg = ex.Message;
+ _log.Error($"浣滀笟[{taskOptions.TaskName}]鎵ц寮傚父:{ex.Message}", ex);
}
try
{
- string logContent = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}_{dateTime.ToString("yyyy-MM-dd HH:mm:ss")}_{(string.IsNullOrEmpty(httpMessage) ? "OK" : httpMessage)}\r\n";
- FileHelper.WriteFile(FileQuartz.LogPath + taskOptions.GroupName + "\\", $"{taskOptions.TaskName}.txt", logContent, true);
- //await _hubContext.Clients.All.SendAsync("SendMessage绯荤粺閫氱煡:"+$"鏈�鏂版秷鎭瘂DateTime.Now}");
- //await _hubContext.Clients.All.SendAll(logContent);
- //鏌ユ壘绯荤粺鐢ㄦ埛
- var sql = @"select usercode as code,username as name
- from TUser
- where is_delete='0' and enable='Y' and password='123'";
- var data = DapperHelper.selecttable(sql);
- var departmentIDs = data.AsEnumerable().Select(x => x.Field<string>("code")).ToList();//鑾峰彇鎺ㄩ�佷汉鍛樼紪鐮�
- var FindPublicBaseDic = UserIdsStore.Ids.Where(d => departmentIDs.Contains(d.Value)).Select(x => x.Key).ToList(); //鍖归厤宸茬粡鐧诲綍鐨勬帹閫佷汉鍛榗onnectionIds
- if (FindPublicBaseDic.Count > 0)
+ // 1. 鎶婃湰娆℃墽琛岃褰曞啓鍏� SQL Server 鏁版嵁搴擄紙浠诲姟杩愯鏃ュ織琛級
+ await _quartzRepo.AddJobRunLogAsync(taskOptions.TaskName, taskOptions.GroupName, beginTime, DateTime.Now,result.StatusCode==200?result.Content.ToString():result.ErrorMsg, taskOptions.MessagePush, taskOptions.PushUserCode);
+ // 2. 鏇存柊浠诲姟琛ㄤ腑鐨勩�愭渶鍚庢墽琛屾椂闂淬��
+ await _quartzRepo.UpdateTaskLastRunTimeAsync(taskOptions.TaskName, taskOptions.GroupName, beginTime);
+
+ // ==========================================
+ // 浠ヤ笅鏄� SignalR 瀹炴椂鎺ㄩ�侊紙缁欏墠绔〉闈㈠彂娑堟伅锛�
+ // ==========================================
+ //鍒ゆ柇璇锋眰鏄惁鎴愬姛
+ if (result.IsSuccess)
{
- //鎺ㄩ�佹寚瀹氱敤鎴�
- await _hubContext.Clients.Clients(FindPublicBaseDic).SendCustomUserMessage(logContent);
+ //鍐欏叆浠诲姟瀛愯〃
+ }
+ if (taskOptions.MessagePush == "N"||taskOptions.PushUserCode==null) //鏄惁闇�瑕佹帹閫�
+ {
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]鏃犻渶瑕佹帹閫佺殑鐢ㄦ埛锛岃烦杩嘢ignalR鎺ㄩ��");
+ return;
+ }
+ //姝ラ2锛氭彁鍙栫敤鎴风紪鐮侊紙鍘婚噸 + 绌哄�艰繃婊わ級
+ var departmentIDs = taskOptions.PushUserCode.Split(',').ToList();
+
+ if (departmentIDs.Count == 0)
+ {
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]鏌ヨ鍒扮殑鐢ㄦ埛缂栫爜涓虹┖锛岃烦杩嘢ignalR鎺ㄩ��");
+ return;
+ }
+ // 姝ラ3锛氳幏鍙栧湪绾跨敤鎴风殑杩炴帴ID锛堜娇鐢ㄧ嚎绋嬪畨鍏ㄦ柟娉曪級
+ var targetConnIds = UserIdsStore.GetConnectionIdsByUserCodes(departmentIDs);
+ if (targetConnIds.Count == 0)
+ {
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]鐩爣鐢ㄦ埛鍧囦笉鍦ㄧ嚎锛岃烦杩嘢ignalR鎺ㄩ��");
+ return;
+ }
+ // 姝ラ4锛氭瀯閫犳帹閫佹秷鎭紙鏍囧噯鍖栨牸寮忥級
+ var logContent = $"銆恵taskOptions.TaskName}銆戞墽琛岀粨鏋滐細{beginTime:yyyy-MM-dd HH:mm:ss} 鑷� {DateTime.Now:yyyy-MM-dd HH:mm:ss} | 缁撴灉锛歿(string.IsNullOrEmpty(httpMessage) ? "鎵ц鎴愬姛" : httpMessage)}";
+ // 姝ラ5锛氭壒閲忔帹閫侊紙澧炲姞瓒呮椂+寮傚父鎹曡幏锛�
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]寮�濮嬪悜[{targetConnIds.Count}]涓湪绾胯繛鎺ユ帹閫佹秷鎭細{logContent}");
+ // 璁剧疆鎺ㄩ�佽秴鏃舵椂闂达紙閬垮厤闀挎椂闂撮樆濉烇級
+ var pushTask = _hubContext.Clients.Clients(targetConnIds).SendCustomUserMessage(logContent);
+ if (await Task.WhenAny(pushTask, Task.Delay(5000)) == pushTask)
+ {
+ await pushTask; // 鎺ㄩ�佹垚鍔�
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]SignalR鎺ㄩ�佸畬鎴愶紝鐩爣杩炴帴鏁帮細{targetConnIds.Count}");
+ }
+ else
+ {
+ _log.Warn($"浣滀笟[{taskOptions.TaskName}]SignalR鎺ㄩ�佽秴鏃讹紙5绉掞級锛岀洰鏍囪繛鎺ユ暟锛歿targetConnIds.Count}");
}
}
- catch (Exception)
+ catch (Exception ex)
{
+ // 璁板綍鏃ュ織鍐欏叆鎴栨帹閫佸け璐ョ殑寮傚父
+ _log.Error($"浣滀笟[{taskOptions.TaskName}]鏃ュ織鍐欏叆/SignalR鎺ㄩ�佸紓甯�:{ex.Message}", ex);
}
- Console.WriteLine(trigger.FullName + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss") + " " + httpMessage);
- return;
+ // 绯荤粺鏃ュ織杈撳嚭锛氫换鍔℃墽琛岀粨鏉�
+ _log.Info($"浣滀笟[{taskOptions.TaskName}]缁撴潫:{DateTime.Now:yyyy-MM-dd HH:mm:ss} 缁撴灉:{result.ErrorMsg}");
}
}
}
--
Gitblit v1.9.3