1
llj
13 小时以前 4c2d6fc7aeb7fe0cc44b2735514d47ff2ace18fa
WebAPI/Service/WebSocketServer.cs
File was renamed from WebAPI/WebSocketServer.cs
@@ -125,12 +125,11 @@
                JArray dataTableJArray = JArray.Parse(JsonConvert.SerializeObject(ds.Tables[0]));
                foreach (JToken row in dataTableJArray)
                {
                    // 提前获取并处理行数据(避免重复访问 row["列名"],且处理 null)
                    string receiver = row["接收人"]?.ToString() ?? string.Empty; // 为 null 时返回空字符串
                    string ccUsers = row["所有抄送人"]?.ToString() ?? string.Empty;
                    string sendType = row["发送类型"]?.ToString() ?? string.Empty;
                    // 跳过无效数据行(三列均为空时,无需处理)
                    // 跳过无效数据行
                    if (string.IsNullOrEmpty(receiver) && string.IsNullOrEmpty(ccUsers) && string.IsNullOrEmpty(sendType))
                        continue;
@@ -161,7 +160,7 @@
                    {
                        // 封装 websocket 信息
                        dictOne.Key.Send(new JObject{ 
                            ["Type"]="Message",
                            ["Type"]="MessageNoRead",
                            ["Content"]= NameMsgKVP[dictOne.Value.ToString()].ToString()
                        }.ToString());
                    }
@@ -208,5 +207,68 @@
                }
            }
        }
        // 单条数据推送公开语句
        public static void PushOne(int HInterID)
        {
            SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
            DataSet ds = new DataSet();
            try
            {
                JObject NameMsgKVP = new JObject();
                ds = oCN.RunProcReturn($"select * from h_v_OA_WorkLinkBillAllList where hmainid = {HInterID}", "h_v_OA_WorkLinkBillAllList");
                // 判断广播还是私发 ,统计数据
                JArray dataTableJArray = JArray.Parse(JsonConvert.SerializeObject(ds.Tables[0]));
                foreach (JToken row in dataTableJArray)
                {
                    string receiver = row["接收人"]?.ToString() ?? string.Empty; // 为 null 时返回空字符串
                    string ccUsers = row["抄送接收人"]?.ToString() ?? string.Empty;
                    string sendType = row["发送类型"]?.ToString() ?? string.Empty;
                    // 跳过无效数据行
                    if (string.IsNullOrEmpty(receiver) && string.IsNullOrEmpty(ccUsers) && string.IsNullOrEmpty(sendType))
                        continue;
                    foreach (var dictOne in _NameConnectionDict)
                    {
                        string UName = dictOne.Value.Split('_')[1];
                        // 将接收人 抄送人 获取 广播的消息添加到消息缓存
                        if (string.Equals(row["接收人"].ToString(), UName)
                            || row["抄送接收人"].ToString().Contains(UName)
                            || string.Equals(row["发送类型"].ToString(), "公共"))
                        {
                            string dictOneVal = dictOne.Value.ToString();
                            if (NameMsgKVP[dictOneVal] == null)
                            {
                                NameMsgKVP[dictOneVal] = new JArray();
                            }
                            var jArray = NameMsgKVP[dictOneVal] as JArray;
                            jArray.Add(row);
                        }
                    }
                }
                // 根据用户ID分发到不同的客户端
                foreach (var dictOne in _NameConnectionDict)
                {
                    if (NameMsgKVP[dictOne.Value.ToString()] != null)
                    {
                        // 封装 websocket 信息
                        dictOne.Key.Send(new JObject
                        {
                            ["Type"] = "Message",
                            ["Content"] = NameMsgKVP[dictOne.Value.ToString()].ToString()
                        }.ToString());
                    }
                }
                LogService.Write("消息推送完成...");
            }
            catch (Exception ex)
            {
                LogService.Write(ex.ToString());
                return;
            }
        }
    }
}