| | |
| | | using Newtonsoft.Json; |
| | | using com.igetui.api.openservice.igetui.template; |
| | | using com.igetui.api.openservice.igetui; |
| | | using System.Collections.Concurrent; |
| | | |
| | | namespace WebAPI.Service |
| | | { |
| | |
| | | // 推送服务实例 |
| | | private static IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET); |
| | | |
| | | private static Pub_Class.ClsXt_SystemParameter oSystemParameter = new Pub_Class.ClsXt_SystemParameter(); |
| | | |
| | | |
| | | // 单条消息推送 |
| | | public static void PubishSingle(int HInterID) |
| | | { |
| | |
| | | { |
| | | JObject NameMsgKVP = new JObject(); |
| | | ds = oCN.RunProcReturn($@" |
| | | select * from h_v_OA_WorkLinkBillAllList where hmainid = {HInterID} |
| | | select |
| | | CASE WHEN a.HBillStatus <= 1 THEN '创建' WHEN a.HBillStatus = 2 THEN '已审核' WHEN a.HBillStatus = 3 THEN '已关闭' |
| | | WHEN a.HBillStatus = 4 THEN '已作废' WHEN a.HBillStatus = 9 THEN '已完成' ELSE '' END AS 单据状态, |
| | | a.HBillNo AS 单据号, a.HBillType AS 单据类型, CONVERT(varchar(10), a.HDate, 120) AS 日期, a.HRemark AS 表头备注, |
| | | a.HDeptID, |
| | | a.HSendMan AS 发送人, a.HReceiveMan AS 接收人, |
| | | a.HCopyMan AS 所有抄送人, a.HHasten AS 催促次数, a.HLevel AS 紧急程度, |
| | | a.HContext AS 主题, a.HDescription AS 内容, a.HSendType AS 发送类型, a.HEvaluateStatusID, |
| | | a.HCommDate AS 建议完成日期, |
| | | a.HRelationInterID AS 关联单据内码, a.HRelationEntryID AS 关联单据子内码, a.HRelationBillType AS 关联单据类型, |
| | | a.HRelationBillNo AS 关联单据号, a.HMaker AS 制单人, a.HMakeDate AS 制单日期, a.HChecker AS 审核人, |
| | | a.HCheckDate AS 审核日期, a.HUpDater AS 修改人, a.HUpDateDate AS 修改日期, a.HCloseMan AS 关闭人, |
| | | a.HCloseDate AS 关闭日期, a.HDeleteMan AS 作废人, a.HDeleteDate AS 作废日期, a.HBillType |
| | | from OA_WorkLinkBillMain a where HInterID = {HInterID} |
| | | select * from Gy_UserClientIdRelation |
| | | ", "h_v_OA_WorkLinkBillAllList"); |
| | | ", "OA_WorkLinkBillMain"); |
| | | NotificationTemplate template = null; |
| | | ConcurrentDictionary<string, List<string>> userClientIDDictionary = new ConcurrentDictionary<string, List<string>>(); |
| | | // 将用户设备关联表 收集为 Map |
| | | if (ds.Tables[1].Rows.Count > 0) |
| | | { |
| | | foreach (DataRow row in ds.Tables[1].Rows) |
| | | { |
| | | 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(ds.Tables[0].Rows.Count > 0) |
| | | { |
| | | 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() == "公共") |
| | | { |
| | | // 遍历 全推送 |
| | | foreach(DataRow row in ds.Tables[1].Rows) |
| | | string sReturn = ""; |
| | | if (oSystemParameter.ShowBill(ref sReturn) == true) |
| | | { |
| | | PushMessageToSingle(template, row["HClientID"].ToString()); |
| | | if (oSystemParameter.omodel.WMS_CampanyName == "华舟") |
| | | { |
| | | // 获取接收人和抄送人数组 |
| | | string HReceiveMan = ds.Tables[0].Rows[0]["接收人"].ToString(); |
| | | string[] HCopyManList = ds.Tables[0].Rows[0]["抄送人"].ToString().Split(','); |
| | | // 推送给接收人 和 抄送人 |
| | | |
| | | List<string> clientIDList = new List<string>(); |
| | | if (userClientIDDictionary.ContainsKey(HReceiveMan)) |
| | | { |
| | | clientIDList.AddRange(userClientIDDictionary[HReceiveMan]); |
| | | } |
| | | |
| | | foreach(string HCopyMan in HCopyManList) |
| | | { |
| | | // 接收人 和 抄送人相同时, 不重复发送 |
| | | if(HCopyMan == HReceiveMan) |
| | | { |
| | | continue; |
| | | } |
| | | if (userClientIDDictionary.ContainsKey(HCopyMan)) |
| | | { |
| | | clientIDList.AddRange(userClientIDDictionary[HCopyMan]); |
| | | } |
| | | } |
| | | |
| | | 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 // 单独推送 |
| | | { |
| | | // 获取接收人和抄送人数组 |
| | | string HReceiveMan = ds.Tables[0].Rows[0]["接收人"].ToString(); |
| | | string[] HCopyManList = ds.Tables[0].Rows[0]["抄送人"].ToString().Split(','); |
| | | // 推送给接收人 和 抄送人 |
| | | foreach (DataRow row in ds.Tables[1].Rows) |
| | | |
| | | List<string> clientIDList = new List<string>(); |
| | | if (userClientIDDictionary.ContainsKey(HReceiveMan)) |
| | | { |
| | | if(ds.Tables[0].Rows[0]["接收人"].ToString() == row["HUserName"].ToString() |
| | | || ds.Tables[0].Rows[0]["抄送接收人"].ToString() == row["HUserName"].ToString()) |
| | | PushMessageToSingle(template, row["HClientID"].ToString()); |
| | | clientIDList.AddRange(userClientIDDictionary[HReceiveMan]); |
| | | } |
| | | |
| | | foreach (string HCopyMan in HCopyManList) |
| | | { |
| | | if (userClientIDDictionary.ContainsKey(HCopyMan)) |
| | | { |
| | | clientIDList.AddRange(userClientIDDictionary[HCopyMan]); |
| | | } |
| | | } |
| | | |
| | | foreach (string clientID in clientIDList) |
| | | { |
| | | pushSuccess = PushMessageToSingle(template, clientID); |
| | | |
| | | } |
| | | } |
| | | |
| | | if(!pushSuccess) |
| | | { |
| | | // 个推 推送不成功(内网环境) 使用webSocket进行推送 |
| | | // TODO: 使用 rabbitMQ 实现消息队列 |
| | | // WebSocketServer.PushOne(HInterID); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | // 单推 使用通知消息模型 |
| | | private static void PushMessageToSingle(NotificationTemplate template, string ClientID) |
| | | private static bool PushMessageToSingle(NotificationTemplate template, string ClientID) |
| | | { |
| | | |
| | | IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET); |
| | |
| | | LogService.Write("-----------------------------------------------"); |
| | | LogService.Write("-----------------------------------------------"); |
| | | LogService.Write("----------------服务端返回结果:" + pushResult); |
| | | return true; |
| | | } |
| | | catch (RequestException e) |
| | | { |
| | |
| | | LogService.Write("-----------------------------------------------"); |
| | | LogService.Write("-----------------------------------------------"); |
| | | LogService.Write("----------------服务端返回结果:" + pushResult); |
| | | return false; |
| | | } |
| | | } |
| | | |