Exemple #1
0
        /// <summary>
        /// 发送提醒消息,以弹窗方式展现
        /// </summary>
        /// <param name="bstrReceiver">接受人</param>
        /// <param name="bstrTitle">标题</param>
        /// <param name="lDelayTime">弹窗显示时间,单位为ms</param>
        /// <param name="bstrMsg">消息内容</param>
        /// <returns>是否发送成功</returns>
        protected virtual bool SendNotify(string bstrReceiver, string bstrTitle, int lDelayTime, string bstrMsg)
        {
            try
            {
                if (IsClosed == true)
                {
                    return(true);
                }

                if (IsDebug == true)
                {
                    bstrReceiver = DebugRtx;
                }

                if (string.IsNullOrEmpty(bstrReceiver.Trim()) == false)
                {
                    RootObj.SendNotify(bstrReceiver, bstrTitle, lDelayTime, bstrMsg);
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void StartSendNotify()
        {
            userManager = RootObj.UserManager;
            //UserService userService = new UserService();
            var    userService = FormulaHelper.GetService <IUserService>();
            string msgSQL      = @" select * from S_E_RTXSynchNoticeAndTask where State='Wait'
                               union select * from {0}.dbo.S_E_RTXSynchNoticeAndTask where State='Wait'";

            msgSQL = string.Format(msgSQL, baseSqlHelper.DbName);
            DataTable msgDt   = workFlowHelper.ExecuteDataTable(msgSQL);
            var       msgRows = msgDt.Rows;
            //将本次同步的消息置为"Processing"
            var Ids = string.Empty;

            foreach (DataRow msgRow in msgRows)
            {
                Ids += msgRow["ID"].ToString() + ",";
            }
            if (!string.IsNullOrEmpty(Ids))
            {
                Ids = Ids.TrimEnd(',');
            }
            string updateSQL = @" update S_E_RTXSynchNoticeAndTask set State = 'Processing' where ID in ('" + Ids.Replace(",", "','") + "')";

            workFlowHelper.ExecuteNonQuery(updateSQL);
            baseSqlHelper.ExecuteNonQuery(updateSQL);

            //循环将BE用户信息同步至RTX
            foreach (DataRow msgRow in msgRows)
            {
                //主键ID
                var id = msgRow["ID"].ToString();
                //消息ID
                var taskOrMsgID = msgRow["TaskExecIDOrMsgID"].ToString();

                //标题
                var title = msgRow["Title"] == null ? "" : msgRow["Title"].ToString();
                //内容
                var content = msgRow["Content"] == null ? title : msgRow["Content"].ToString();
                //LinkURL
                var linkURL = msgRow["LinkURL"] == null ? "" : msgRow["LinkURL"].ToString();
                //OwnerUserID
                var userID = msgRow["OwnerUserID"].ToString();
                //系统名称
                UserInfo userInfo   = userService.GetUserInfoByID(userID);
                var      systemName = userInfo.Code;
                systemName = systemName.TrimEnd(' ').TrimStart(' ');

                if (!userManager.IsUserExist(systemName))   //判断用户是否存在于RTX
                {
                    //用户不存在记录异常信息
                    updateSQL = @" update S_E_RTXSynchNoticeAndTask set State = 'Fail' where ID='" + id + "'  ";
                    workFlowHelper.ExecuteNonQuery(updateSQL);
                    logSQL = @" insert into S_D_ModifyLog (ID,ConnName,TableName,ModifyMode,EntityKey,CurrentValue,OriginalValue
                               ,ModifyUserID,ModifyUserName,ModifyTime,ClientIP,UserHostAddress) 
                               Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')";
                    logSQL = string.Format(logSQL, FormulaHelper.CreateGuid(), "WorkFlow", "", "Added", "给用户" + systemName + "发送提醒失败(提醒ID:" + id + ")"
                                           , "失败时间:" + DateTime.Now, "失败详细信息:用户" + systemName + "不存在", "", "", DateTime.Now, "", "");
                    baseSqlHelper.ExecuteNonQuery(logSQL);
                    continue;
                }
                //创建日期
                var      strCreateDate = msgRow["CreateDate"].ToString();
                DateTime createdate    = Convert.ToDateTime(strCreateDate);
                //流程ID
                var insFlowID = msgRow["InsFlowID"] == null ? "" : msgRow["InsFlowID"].ToString();
                //FormID
                var formID = msgRow["FormID"] == null ? "" : msgRow["FormID"].ToString();
                //数据类型
                var dataType = msgRow["DataType"].ToString();

                if (dataType == "TASK") //任务
                {
                    //如果提醒信息未任务,则添加判断任务是否已经执行过的逻辑。
                    string    taskSql = @" select ExecTime from S_WF_InsTaskExec where ID = '" + taskOrMsgID + "' and ExecTime is null";
                    DataTable taskDt  = workFlowHelper.ExecuteDataTable(taskSql);
                    if (taskDt == null || taskDt.Rows.Count == 0)
                    {
                        updateSQL = @" update S_E_RTXSynchNoticeAndTask set State = 'Fail',ErrorMsg='任务已经被执行过了' where ID='" + id + "'  ";
                        workFlowHelper.ExecuteNonQuery(updateSQL);
                        logSQL = @" insert into S_D_ModifyLog (ID,ConnName,TableName,ModifyMode,EntityKey,CurrentValue,OriginalValue
                               ,ModifyUserID,ModifyUserName,ModifyTime,ClientIP,UserHostAddress) 
                               Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')";
                        logSQL = string.Format(logSQL, FormulaHelper.CreateGuid(), "WorkFlow", "", "Added", "给用户" + systemName + "发送任务(ID:" + id + ")失败"
                                               , "失败时间:" + DateTime.Now, "失败详细信息:任务已经被执行过了。", "", "", DateTime.Now, "", "");
                        baseSqlHelper.ExecuteNonQuery(logSQL);
                        continue;
                    }

                    if (linkURL.IndexOf("?") >= 0)
                    {
                        linkURL += "&ID=" + formID + "&TaskExecID=" + taskOrMsgID + "&TaskStatus=Processing";
                    }
                    else
                    {
                        linkURL += "?ID=" + formID + "&TaskExecID=" + taskOrMsgID + "&TaskStatus=Processing";
                    }
                }

                //添加WebAddress
                linkURL = webAddress + linkURL;
                //增加模拟登录
                if (!string.IsNullOrEmpty(linkURL))
                {
                    if (linkURL.IndexOf("?") >= 0)
                    {
                        linkURL += "&SystemName=" + systemName;
                    }
                    else
                    {
                        linkURL += "?SystemName=" + systemName;
                    }
                }
                //发送者
                var sendUserIDs     = msgRow["SendUserIDs"] == null ? "" : msgRow["SendUserIDs"].ToString();
                var senderUserNames = msgRow["SendUserNames"] == null ? "" : msgRow["SendUserNames"].ToString();

                //处理标题和内容
                title   = title.Replace("[", "");
                title   = title.Replace("]", "");
                content = content.Replace("[", "");
                content = content.Replace("]", "");
                if (title.Length > 14)
                {
                    title = title.Substring(0, 13) + "......";
                }
                if (content.Length > 34)
                {
                    content = content.Substring(0, 33) + "......";
                }

                //消息主体
                //string txtMsgContent = " 标  题:" + title + "\r\n概  要:" + content + "\r\n发送者:" + senderUserNames
                //       + "\r\n\r\n[查看详细|" + linkURL + "] ";
                string txtMsgContent = " 标  题:" + title + "\r\n概  要:" + content + "\r\n发送者:" + senderUserNames
                                       + "\r\n\r\n ";
                int servertime = Convert.ToInt32(strdelayTime);
                servertime = servertime * 1000;

                try
                {
                    if (dataType == "MSG")
                    {
                        RootObj.SendNotify(systemName, "消息提醒", servertime, txtMsgContent);
                    }
                    else
                    {
                        RootObj.SendNotify(systemName, "任务提醒", servertime, txtMsgContent);
                    }
                }
                catch (Exception exp)
                {
                    updateSQL = @" update S_E_RTXSynchNoticeAndTask set State = 'Fail' where ID='" + id + "'  ";
                    workFlowHelper.ExecuteNonQuery(updateSQL);
                    logSQL = @" insert into S_D_ModifyLog (ID,ConnName,TableName,ModifyMode,EntityKey,CurrentValue,OriginalValue
                               ,ModifyUserID,ModifyUserName,ModifyTime,ClientIP,UserHostAddress) 
                               Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')";
                    logSQL = string.Format(logSQL, FormulaHelper.CreateGuid(), "WorkFlow", "", "Added", "给用户" + systemName + "发送提醒失败(提醒ID(" + id + "))"
                                           , "失败时间:" + DateTime.Now, "失败详细信息:" + exp.Message.ToString(), "", "", DateTime.Now, "", "");
                    baseSqlHelper.ExecuteNonQuery(logSQL);
                    continue;
                }
                updateSQL = @" update S_E_RTXSynchNoticeAndTask set State = 'Finish',ExecTime='" + DateTime.Now + "' where ID='" + id + "'  ";
                workFlowHelper.ExecuteNonQuery(updateSQL);
            }
        }
Exemple #3
0
 /// <summary>
 /// 接收到RTX消息
 /// </summary>
 private void RecvMessageEvent(RTXSAPILib.IRTXSAPIMessage ms)
 {
     try
     {
         Rdata     = RootObj.CreateRTXSData();
         Rdata.XML = ms.Content;
         if (Rdata.XML != null)
         {
             string s1        = "Txt&gt;";
             string s2        = "&lt;/Txt";
             string content   = FindMatchStr(s1, s2, Rdata.XML);
             string groupName = Rdata.GetString("Title");
             long   mode      = Rdata.GetLong("Mode");
             string matchName = FindMatchStr("@", " ", Rdata.XML);
             if (matchName.Length > 0)
             {
                 string sendMsg = "时间:" + DateTime.Now + "\n";
                 if (mode == 4 && groupName != string.Empty && content != groupName)
                 {
                     sendMsg += "群名称:" + groupName + "\n";
                 }
                 sendMsg += "内容:" + content;
                 RootObj.SendNotify(matchName, ms.Sender + "@了你", Convert.ToInt32(Convert.ToDouble(tboxSysAlertTime.Text) * 1000), sendMsg);
             }
         }
         if (ms.Content.IndexOf("DisGroupId") != -1)
         {
             long groupID = Rdata.GetLong("DisGroupId");
             if (groupID == 10001)
             {
                 string s1        = "Txt&gt;";
                 string s2        = "&lt;/Txt";
                 string content   = FindMatchStr(s1, s2, Rdata.XML);
                 string receives  = ms.Sender + ";" + ms.Receivers;
                 string guid      = Rdata.GetString("Key");
                 string messageID = FindMatchStr("<Item Key=\"im_message_id\" Type=\"Buffer\">", "</Item>", Rdata.XML);
                 if (QADic.ContainsKey(content.Trim()))
                 {
                     if (alreadyRece.Contains(messageID))
                     {
                         return;
                     }
                     if (alreadyRece.Count >= 100)
                     {
                         alreadyRece.Clear();
                     }
                     alreadyRece.Add(messageID);
                     RootObj.SendIM(tboxRUser.Text, tboxRPSW.Text, receives, QADic[content], guid);
                 }
                 if (content.IndexOf("@小秘书 学习 问题:") != -1)
                 {
                     string question = FindMatchStr("@小秘书 学习 问题:", "回答:", content).Trim();
                     string answer   = FindMatchStr("回答:", s2, Rdata.XML);
                     if (question == "")
                     {
                         return;
                     }
                     else
                     {
                         if (QADic.Count <= 100)
                         {
                             if (QADic.ContainsKey(question))
                             {
                                 if (answer == QADic[question])
                                 {
                                     return;
                                 }
                                 RootObj.SendIM(tboxRUser.Text, tboxRPSW.Text, receives, "问题:" + question + "已经更新", guid);
                             }
                             QADic[question] = answer;
                         }
                         else
                         {
                             //学习的问题超过100个,人家脑子不大,不给你们记忆了嘛!!
                             RootObj.SendIM(tboxRUser.Text, tboxRPSW.Text, receives, "学习的问题超过100个,人家脑子不够用,不给你们记忆了嘛!!", guid);
                         }
                     }
                 }
             }
         }
     }
     catch (System.Exception ex)
     {
         WriteLog(ex.Message);
     }
 }