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/SignalR/UserIdsStore.cs | 90 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 88 insertions(+), 2 deletions(-)
diff --git a/VueWebCoreApi/SignalR/UserIdsStore.cs b/VueWebCoreApi/SignalR/UserIdsStore.cs
index 4090d89..518f115 100644
--- a/VueWebCoreApi/SignalR/UserIdsStore.cs
+++ b/VueWebCoreApi/SignalR/UserIdsStore.cs
@@ -6,10 +6,96 @@
namespace VueWebCoreApi.SignalR
{
/// <summary>
- /// 鐢ㄦ埛id闆嗗悎
+ /// 鐢ㄦ埛杩炴帴ID涓庣敤鎴风紪鐮佹槧灏勫瓨鍌紙绾跨▼瀹夊叏鐗堬級
+ /// 瑙e喅澶氱嚎绋嬪苟鍙戣鍐欏鑷寸殑瀛楀吀鏁版嵁閿欎贡闂
/// </summary>
public static class UserIdsStore
{
- public static Dictionary<string, string> Ids = new Dictionary<string, string>();
+ // 鏇挎崲涓虹嚎绋嬪畨鍏ㄧ殑骞跺彂瀛楀吀
+ private static readonly Dictionary<string, string> _ids = new Dictionary<string, string>();
+ // 鍔犻攣淇濊瘉瀛楀吀鎿嶄綔鐨勫師瀛愭�э紙姣擟oncurrentDictionary鏇寸伒娲绘帶鍒舵壒閲忔搷浣滐級
+ private static readonly object _lockObj = new object();
+
+ /// <summary>
+ /// 瀵瑰鏆撮湶鐨勮繛鎺ユ槧灏勶紙鍙锛岄伩鍏嶅閮ㄧ洿鎺ヤ慨鏀癸級
+ /// </summary>
+ public static IReadOnlyDictionary<string, string> Ids
+ {
+ get
+ {
+ lock (_lockObj)
+ {
+ // 杩斿洖鏂板瓧鍏革紝閬垮厤澶栭儴鎷垮埌寮曠敤鍚庝慨鏀�
+ return new Dictionary<string, string>(_ids);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 娣诲姞/鏇存柊鐢ㄦ埛杩炴帴锛堝師瀛愭搷浣滐級
+ /// </summary>
+ /// <param name="connectionId">SignalR杩炴帴ID</param>
+ /// <param name="userCode">鐢ㄦ埛缂栫爜</param>
+ public static void AddOrUpdateUser(string connectionId, string userCode)
+ {
+ if (string.IsNullOrEmpty(connectionId) || string.IsNullOrEmpty(userCode))
+ throw new ArgumentNullException("杩炴帴ID鍜岀敤鎴风紪鐮佷笉鑳戒负绌�");
+
+ lock (_lockObj)
+ {
+ // 鍏堢Щ闄よ鐢ㄦ埛鐨勬棫杩炴帴锛堜竴涓敤鎴峰彧淇濈暀鏈�鏂扮殑杩炴帴锛�
+ var oldConnIds = _ids.Where(kv => kv.Value == userCode).Select(kv => kv.Key).ToList();
+ foreach (var oldConnId in oldConnIds)
+ {
+ _ids.Remove(oldConnId);
+ }
+ // 娣诲姞鏂拌繛鎺ワ紙瑕嗙洊鍚屽悕connectionId锛岄伩鍏嶉噸澶嶏級
+ if (_ids.ContainsKey(connectionId))
+ {
+ _ids[connectionId] = userCode;
+ }
+ else
+ {
+ _ids.Add(connectionId, userCode);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 绉婚櫎鎸囧畾杩炴帴ID鐨勬槧灏�
+ /// </summary>
+ /// <param name="connectionId">SignalR杩炴帴ID</param>
+ public static void RemoveUser(string connectionId)
+ {
+ if (string.IsNullOrEmpty(connectionId))
+ return;
+
+ lock (_lockObj)
+ {
+ if (_ids.ContainsKey(connectionId))
+ {
+ _ids.Remove(connectionId);
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鏍规嵁鐢ㄦ埛缂栫爜鑾峰彇鎵�鏈夊湪绾胯繛鎺D锛堜竴涓敤鎴峰彲鑳藉绔櫥褰曟椂杩斿洖澶氫釜锛�
+ /// </summary>
+ /// <param name="userCodes">鐢ㄦ埛缂栫爜鍒楄〃</param>
+ /// <returns>杩炴帴ID鍒楄〃</returns>
+ public static List<string> GetConnectionIdsByUserCodes(List<string> userCodes)
+ {
+ if (userCodes == null || userCodes.Count == 0)
+ return new List<string>();
+
+ lock (_lockObj)
+ {
+ return _ids.Where(kv => userCodes.Contains(kv.Value))
+ .Select(kv => kv.Key)
+ .Distinct() // 鍘婚噸锛岄伩鍏嶉噸澶嶆帹閫�
+ .ToList();
+ }
+ }
}
}
--
Gitblit v1.9.3