From 7ca0d964d2df19bf56e8a8a96f34f26a139b078d Mon Sep 17 00:00:00 2001
From: zrg <z1873@LAPTOP-EAVL132E>
Date: 星期五, 27 二月 2026 15:23:57 +0800
Subject: [PATCH] 增加异常工艺参数预警通知

---
 DingDingMsg/.vs/DingDingMsg/v16/.suo                                       |    0 
 DingDingMsg/.vs/DingDingMsg/DesignTimeBuild/.dtbcache.v2                   |    0 
 DingDingMsg/MesMessage/bin/Debug/MesMessage.pdb                            |    0 
 DingDingMsg/MesMessage/obj/Debug/DesignTimeResolveAssemblyReferences.cache |    0 
 DingDingMsg/MesMessage/obj/Debug/MesMessage.csproj.GenerateResource.cache  |    0 
 DingDingMsg/MesMessage/MesMessageList.Designer.cs                          |    8 +-
 DingDingMsg/MesMessage/MesMessageList.cs                                   |   56 +++++++++++++-
 DingDingMsg/MesMessage/obj/Debug/MesMessage.pdb                            |    0 
 DingDingMsg/MesMessage/GeTuiService.cs                                     |  150 +++++++++++++++++++++++++++----------
 9 files changed, 165 insertions(+), 49 deletions(-)

diff --git a/DingDingMsg/.vs/DingDingMsg/DesignTimeBuild/.dtbcache.v2 b/DingDingMsg/.vs/DingDingMsg/DesignTimeBuild/.dtbcache.v2
index a1e2bdd..4a186fe 100644
--- a/DingDingMsg/.vs/DingDingMsg/DesignTimeBuild/.dtbcache.v2
+++ b/DingDingMsg/.vs/DingDingMsg/DesignTimeBuild/.dtbcache.v2
Binary files differ
diff --git a/DingDingMsg/.vs/DingDingMsg/v16/.suo b/DingDingMsg/.vs/DingDingMsg/v16/.suo
index edc3de6..1e32136 100644
--- a/DingDingMsg/.vs/DingDingMsg/v16/.suo
+++ b/DingDingMsg/.vs/DingDingMsg/v16/.suo
Binary files differ
diff --git a/DingDingMsg/MesMessage/GeTuiService.cs b/DingDingMsg/MesMessage/GeTuiService.cs
index 3988dcf..75713f7 100644
--- a/DingDingMsg/MesMessage/GeTuiService.cs
+++ b/DingDingMsg/MesMessage/GeTuiService.cs
@@ -2,7 +2,9 @@
 using com.igetui.api.openservice.igetui;
 using com.igetui.api.openservice.igetui.template;
 using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Data;
 
@@ -15,6 +17,8 @@
         private static readonly string APPID = "X3I10VqaROAH8C7ElIc1L5";
         private static readonly string APPKEY = "V425beWn5K65BcOYKTcXx8";
         private static readonly string MASTERSECRET = "LOXAgRbXS98NxHKUXmlJQ";
+        static DBHelper oCN = new DBHelper();
+        static DataSet ds = new DataSet();
 
         // 娉ㄦ剰锛氫笉鍐嶅0鏄庨潤鎬� IGtPush 瀛楁锛岄伩鍏嶇被鍨嬪垵濮嬪寲寮傚父
 
@@ -23,61 +27,112 @@
         /// </summary>
         public static void PubishSingle(int HInterID)
         {
+
+
             try
             {
-                DataSet ds = new DataSet();
-                DBHelper oCN = new DBHelper();
+                JObject NameMsgKVP = new JObject();
                 ds = oCN.RunProcReturn($@"
-                    select * from h_v_OA_WorkLinkBillAllList where hmainid = {HInterID};
+                    select * from h_v_OA_WorkLinkBillAllList where hmainid = {HInterID}
                     select * from Gy_UserClientIdRelation
                 ", "h_v_OA_WorkLinkBillAllList");
-
-                if (ds.Tables[0].Rows.Count == 0) return;
-
-                DataRow billRow = ds.Tables[0].Rows[0];
-                string title = billRow["涓婚"].ToString();
-                string content = billRow["鍐呭"].ToString();
-                string sendType = billRow["鍙戦�佺被鍨�"].ToString();
-                string receiver = billRow["鎺ユ敹浜�"].ToString();
-                string ccReceiver = billRow["鎶勯�佹帴鏀朵汉"].ToString();
-
-                // 鍒涘缓閫氱煡妯℃澘
-                var template = GetNotificationTemplate(
-                    title,
-                    content,
-                    "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillQuery",
-                    "0"
-                );
-
-                bool anySuccess = false;
-
-                // 閬嶅巻鎵�鏈夊鎴风ID
-                foreach (DataRow userRow in ds.Tables[1].Rows)
+                NotificationTemplate template = null;
+                ConcurrentDictionary<string, List<string>> userClientIDDictionary = new ConcurrentDictionary<string, List<string>>();
+                // 灏嗙敤鎴疯澶囧叧鑱旇〃 鏀堕泦涓� Map
+                if (ds.Tables[1].Rows.Count > 0)
                 {
-                    string userName = userRow["HUserName"].ToString();
-                    string clientId = userRow["HClientID"].ToString();
-
-                    bool needPush = sendType == "鍏叡" ||
-                                    userName == receiver ||
-                                    userName == ccReceiver;
-
-                    if (needPush)
+                    foreach (DataRow row in ds.Tables[1].Rows)
                     {
-                        bool success = PushMessageToSingle(template, clientId);
-                        if (success) anySuccess = true;
+                        if (userClientIDDictionary.ContainsKey(row["HUserName"].ToString()))
+                        {
+                            userClientIDDictionary[row["HUserName"].ToString()].Add(row["HClientID"].ToString());
+                        }
+                        else
+                        {
+                            userClientIDDictionary.TryAdd(row["HUserName"].ToString(), new List<string>() { row["HClientID"].ToString() });
+                        }
                     }
                 }
-
-                if (!anySuccess)
+                if (ds.Tables[0].Rows.Count > 0)
                 {
-                    // 鎺ㄩ�佸け璐ワ紝澶囩敤鏂规锛氫娇鐢� RabbitMQ 鎴� WebSocket
-                    DBHelper.CustomWriteLog("涓帹鎺ㄩ�佸け璐ワ紙鍙兘鍐呯綉鍘熷洜锛夛紝灏濊瘯澶囩敤鏂规", DateTime.Now.ToString("yyyy-MM-dd"));
-                    // WebSocketServer.PushOne(HInterID);
+                    string title = ds.Tables[0].Rows[0]["涓婚"].ToString();
+                    string content = ds.Tables[0].Rows[0]["鍐呭"].ToString();
+                    template = GetNotificationTemplate(title, content, "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillQuery", "0"); // 璺宠浆鍒板伐浣滆仈绯诲崟鏌ヨ椤甸潰
+
+                    bool pushSuccess = false;
+                    // 骞挎挱
+                    if (ds.Tables[0].Rows[0]["鍙戦�佺被鍨�"].ToString() == "鍏叡")
+                    {
+                        string rule = GetSystemRule();
+                        if (rule == "鍗庤垷")
+                        {
+                            // 鎺ㄩ�佺粰鎺ユ敹浜� 鍜� 鎶勯�佷汉
+                            foreach (DataRow row in ds.Tables[0].Rows)
+                            {
+                                List<string> clientIDList = new List<string>();
+                                if (userClientIDDictionary.ContainsKey(row["鎺ユ敹浜�"].ToString()))
+                                {
+                                    clientIDList = userClientIDDictionary[row["鎺ユ敹浜�"].ToString()];
+                                }
+                                else if (userClientIDDictionary.ContainsKey(row["鎶勯�佹帴鏀朵汉"].ToString()))
+                                {
+                                    clientIDList = userClientIDDictionary[row["鎶勯�佹帴鏀朵汉"].ToString()];
+                                }
+
+
+                                foreach (string clientID in clientIDList)
+                                {
+                                    pushSuccess = PushMessageToSingle(template, clientID);
+
+                                }
+                            }
+                        }
+                        else
+                        {
+                            // 閬嶅巻 鍏ㄦ帹閫�
+                            foreach (DataRow row in ds.Tables[1].Rows)
+                            {
+                                pushSuccess = PushMessageToSingle(template, row["HClientID"].ToString());
+                            }
+                        }
+                    }
+                    else // 鍗曠嫭鎺ㄩ��
+                    {
+                        // 鎺ㄩ�佺粰鎺ユ敹浜� 鍜� 鎶勯�佷汉
+                        foreach (DataRow row in ds.Tables[0].Rows)
+                        {
+                            List<string> clientIDList = new List<string>();
+                            if (userClientIDDictionary.ContainsKey(row["鎺ユ敹浜�"].ToString()))
+                            {
+                                clientIDList = userClientIDDictionary[row["鎺ユ敹浜�"].ToString()];
+                            }
+                            else if (userClientIDDictionary.ContainsKey(row["鎶勯�佹帴鏀朵汉"].ToString()))
+
+                            {
+                                clientIDList = userClientIDDictionary[row["鎶勯�佹帴鏀朵汉"].ToString()];
+                            }
+
+
+                            foreach (string clientID in clientIDList)
+                            {
+                                pushSuccess = PushMessageToSingle(template, clientID);
+
+                            }
+                        }
+                    }
+
+                    if (!pushSuccess)
+                    {
+                        // 涓帹 鎺ㄩ�佷笉鎴愬姛(鍐呯綉鐜) 浣跨敤webSocket杩涜鎺ㄩ��
+                        // TODO: 浣跨敤 rabbitMQ 瀹炵幇娑堟伅闃熷垪
+                        // WebSocketServer.PushOne(HInterID);
+                    }
                 }
             }
             catch (Exception ex)
             {
-                DBHelper.CustomWriteLog($"PubishSingle 寮傚父: {ex}", DateTime.Now.ToString("yyyy-MM-dd"));
+                DBHelper.CustomWriteLog(ex.ToString(), DateTime.Now.ToString("yyyy-MM-dd"));
+                return;
             }
         }
 
@@ -150,5 +205,18 @@
 
             return template;
         }
+
+        /// <summary>
+        /// 鑾峰彇绯荤粺鍙傛暟 OA_AndengFlowRule_XT 鐨勫��
+        /// </summary>
+        private static string GetSystemRule()
+        {
+            string sql = "select HValue from xt_SystemParameter where HKey='WMS_CampanyName'";
+            DataSet ds = oCN.RunProcReturn(sql, "xt_SystemParameter");
+            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
+                return ds.Tables[0].Rows[0]["HValue"].ToString();
+            return null;
+        }
+
     }
 }
\ No newline at end of file
diff --git a/DingDingMsg/MesMessage/MesMessageList.Designer.cs b/DingDingMsg/MesMessage/MesMessageList.Designer.cs
index abdb9bc..ed522e3 100644
--- a/DingDingMsg/MesMessage/MesMessageList.Designer.cs
+++ b/DingDingMsg/MesMessage/MesMessageList.Designer.cs
@@ -43,16 +43,16 @@
             // 
             // button1
             // 
-            this.button1.Location = new System.Drawing.Point(132, 82);
+            this.button1.Location = new System.Drawing.Point(96, 79);
             this.button1.Name = "button1";
-            this.button1.Size = new System.Drawing.Size(123, 44);
+            this.button1.Size = new System.Drawing.Size(176, 46);
             this.button1.TabIndex = 0;
             this.button1.Text = "瀹夌伅鍛煎彨杩愯涓�";
             this.button1.UseVisualStyleBackColor = true;
             // 
             // timer2
             // 
-            this.timer2.Interval = 300000;
+            this.timer2.Interval = 60000;
             this.timer2.Tick += new System.EventHandler(this.Timer1_Tick);
             // 
             // MesMessageList
@@ -62,7 +62,7 @@
             this.ClientSize = new System.Drawing.Size(424, 226);
             this.Controls.Add(this.button1);
             this.Name = "MesMessageList";
-            this.Text = "Form1";
+            this.Text = "瀹夌伅鍛煎彨";
             this.ResumeLayout(false);
 
         }
diff --git a/DingDingMsg/MesMessage/MesMessageList.cs b/DingDingMsg/MesMessage/MesMessageList.cs
index b707021..2b65617 100644
--- a/DingDingMsg/MesMessage/MesMessageList.cs
+++ b/DingDingMsg/MesMessage/MesMessageList.cs
@@ -145,14 +145,14 @@
                     return;
                 }
 
-                #region 寮傚父宸ヨ壓鍙傛暟棰勮锛堟瘡 5 鍒嗛挓鎵ц涓�娆★紝浣嗗畾鏃跺櫒涓�1鍒嗛挓锛屾墍浠ュ唴閮ㄥ垽鏂椂闂村樊锛�
+                #region 寮傚父宸ヨ壓鍙傛暟棰勮锛堟瘡 1 鍒嗛挓鎵ц涓�娆★紝浣嗗畾鏃跺櫒涓�1鍒嗛挓锛屾墍浠ュ唴閮ㄥ垽鏂椂闂村樊锛�
                 DBHelper.CustomWriteLog("寮�濮嬭繘鍏ユ墽琛屽惊鐜� :", DateTime.Now.ToString("yyyy-MM-dd"));
              
                 #endregion
 
                 #region 寮傚父宸ヨ壓鍙傛暟棰勮澶勭悊锛堟瘡鍒嗛挓鎵ц锛�
-                // 鏌ヨ鍑鸿鏇存柊鐨勫紓甯稿弬鏁帮紙鏈�杩�5鍒嗛挓鍐呯殑鏈彂閫佹暟鎹級
-                string Sql = "select HItemID from Sb_EquipMentCollectionTechParam_ERR where HCreateTime>=DATEADD(minute, - 4, GETDATE()) AND HSendFlag = 0";
+                // 鏌ヨ鍑鸿鏇存柊鐨勫紓甯稿弬鏁帮紙鏈�杩�1鍒嗛挓鍐呯殑鏈彂閫佹暟鎹級
+                string Sql = "select HItemID from Sb_EquipMentCollectionTechParam_ERR where HCreateTime>=DATEADD(minute, - 1, GETDATE()) AND HSendFlag = 0";
                 DBHelper.CustomWriteLog("鏌ヨ鍑哄紓甯哥殑鍙傛暟:" + Sql, DateTime.Now.ToString("yyyy-MM-dd"));
                 DataSet dsErr = oCN.RunProcReturn(Sql, "Sb_EquipMentCollectionTechParam_ERR");
                 if (dsErr != null && dsErr.Tables[0].Rows.Count > 0)
@@ -242,7 +242,55 @@
                     }
                     else if (rule == "APP")
                     {
-                        
+                        // 鏌ヨ鍑鸿鍙戜俊鎭殑寮傚父鍙傛暟
+                        string newSql = @"SELECT 宸ュ簭鍚嶇О, STUFF((
+                                            SELECT DISTINCT '; ' + 璁惧缂栫爜 + ' - ' + 宸ヨ壓鍙傛暟鍚嶇О + ' - 鏁伴噰鍊�: ' + CAST(鏁伴噰鍊� AS VARCHAR(10)) 
+                                                   + ' - 涓婇檺鍊�: ' + CAST(涓婇檺鍊� AS VARCHAR(10)) + ' - 涓嬮檺鍊�: ' + CAST(涓嬮檺鍊� AS VARCHAR(10))  
+                                            FROM h_v_Sb_EquipMentCollectionTechParam_ERRList AS InnerTable  
+                                            WHERE InnerTable.宸ュ簭鍚嶇О = OuterTable.宸ュ簭鍚嶇О  
+                                              AND 鍙戠幇寮傚父鏃堕棿 >= DATEADD(minute, -1, GETDATE())
+                                            FOR XML PATH('')), 1, 2, '') AS 鍐呭  
+                                          FROM h_v_Sb_EquipMentCollectionTechParam_ERRList AS OuterTable  
+                                          GROUP BY 宸ュ簭鍚嶇О";
+
+                        DataSet dsContent = oCN.RunProcReturn(newSql, "h_v_Sb_EquipMentCollectionTechParam_ERRList");
+
+                        for (int j = 0; j < dsContent.Tables[0].Rows.Count; j++)
+                        {
+                            DBHelper.CustomWriteLog("寮傚父鍐呭鏁伴噺   " + dsContent.Tables[0].Rows.Count, DateTime.Now.ToString("yyyy-MM-dd"));
+                            string HContext = dsContent.Tables[0].Rows[j]["鍐呭"].ToString();
+                            string HDeptName = dsContent.Tables[0].Rows[j]["宸ュ簭鍚嶇О"].ToString();
+                            if (!string.IsNullOrEmpty(HContext) && HContext.ToLower() != "null")
+                            {
+                                // 鏌ヨ鍑鸿鍙戦�佺殑浜�
+                                string newSql1 = $@"select a.HDingDingUserID 閽夐拤id, a.Czymc 鎺ユ敹浜� 
+                                                from Gy_Czygl a 
+                                                left join System_UserGroupInfo b on a.Czybm = b.UserId
+                                                left join System_UserGroup c on b.GroupId = c.GroupID  
+                                                where c.GroupName = '{HDeptName}宸ヨ壓寮傚父棰勮鎺ユ敹浜�'";                             
+                                DataSet dsUsers = oCN.RunProcReturn(newSql1, "Gy_Czygl");
+                                if (dsUsers.Tables[0].Rows.Count > 0)
+                                {
+
+                                    for (int i = 0; i < dsUsers.Tables[0].Rows.Count; i++)
+                                    {
+                                        string HName = dsUsers.Tables[0].Rows[i]["閽夐拤id"].ToString();
+
+                                        var ds = oCN.RunProcReturn($"exec h_p_OA_WorkLinkBill_TechParam_ERR_Create '{HContext}','{HName}'", "h_p_OA_WorkLinkBill_TechParam_ERR_Create");
+                                        if (ds != null && ds.Tables[0].Rows.Count > 0)
+                                        {
+                                            // 绗竴姝ワ細鍏堣幏鍙栧瓧绗︿覆骞跺垽鏂槸鍚︿负"0"锛屾槸鍒欑洿鎺ヨ烦杩�
+                                            int newHInterID = int.Parse(ds.Tables[0].Rows[0]["HInterID"].ToString());
+                                            if (newHInterID != 0)
+                                            {
+                                                DBHelper.CustomWriteLog($"鎵ц娑堟伅鎺ㄩ��...{newHInterID}", DateTime.Now.ToString("yyyy-MM-dd"));
+                                                GeTuiService.PubishSingle(newHInterID); // 鍚屾鏂规硶锛岃嫢鑰楁椂杈冮暱鍙�冭檻寮傛浼樺寲
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
                     }
                 }
                 #endregion
diff --git a/DingDingMsg/MesMessage/bin/Debug/MesMessage.pdb b/DingDingMsg/MesMessage/bin/Debug/MesMessage.pdb
index 8457bab..37b883c 100644
--- a/DingDingMsg/MesMessage/bin/Debug/MesMessage.pdb
+++ b/DingDingMsg/MesMessage/bin/Debug/MesMessage.pdb
Binary files differ
diff --git a/DingDingMsg/MesMessage/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/DingDingMsg/MesMessage/obj/Debug/DesignTimeResolveAssemblyReferences.cache
new file mode 100644
index 0000000..1078187
--- /dev/null
+++ b/DingDingMsg/MesMessage/obj/Debug/DesignTimeResolveAssemblyReferences.cache
Binary files differ
diff --git a/DingDingMsg/MesMessage/obj/Debug/MesMessage.csproj.GenerateResource.cache b/DingDingMsg/MesMessage/obj/Debug/MesMessage.csproj.GenerateResource.cache
index 5476785..24fbbee 100644
--- a/DingDingMsg/MesMessage/obj/Debug/MesMessage.csproj.GenerateResource.cache
+++ b/DingDingMsg/MesMessage/obj/Debug/MesMessage.csproj.GenerateResource.cache
Binary files differ
diff --git a/DingDingMsg/MesMessage/obj/Debug/MesMessage.pdb b/DingDingMsg/MesMessage/obj/Debug/MesMessage.pdb
index 8457bab..37b883c 100644
--- a/DingDingMsg/MesMessage/obj/Debug/MesMessage.pdb
+++ b/DingDingMsg/MesMessage/obj/Debug/MesMessage.pdb
Binary files differ

--
Gitblit v1.9.1