chenhaozhe
4 天以前 e9a84a2ca945afa4693306045bc244973ebe9835
WebAPI/Service/GeTuiService.cs
@@ -9,6 +9,7 @@
using Newtonsoft.Json;
using com.igetui.api.openservice.igetui.template;
using com.igetui.api.openservice.igetui;
using System.Collections.Concurrent;
namespace WebAPI.Service
{
@@ -28,6 +29,9 @@
        // 推送服务实例
        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)
        {
@@ -38,33 +42,126 @@
            {
                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);
                    }
                }
            }
@@ -76,7 +173,7 @@
        }
        // 单推 使用通知消息模型
        private static void PushMessageToSingle(NotificationTemplate template, string ClientID)
        private static bool PushMessageToSingle(NotificationTemplate template, string ClientID)
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
@@ -100,6 +197,7 @@
                LogService.Write("-----------------------------------------------");
                LogService.Write("-----------------------------------------------");
                LogService.Write("----------------服务端返回结果:" + pushResult);
                return true;
            }
            catch (RequestException e)
            {
@@ -109,6 +207,7 @@
                LogService.Write("-----------------------------------------------");
                LogService.Write("-----------------------------------------------");
                LogService.Write("----------------服务端返回结果:" + pushResult);
                return false;
            }
        }