| | |
| | | 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; |
| | | |
| | |
| | | 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(); |
| | | |
| | | // 注意:不再声明静态 IGtPush 字段,避免类型初始化异常 |
| | | |
| | |
| | | /// </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; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | | } |