/// <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); } }
/// <summary> /// 接收到RTX消息 /// </summary> private void RecvMessageEvent(RTXSAPILib.IRTXSAPIMessage ms) { try { Rdata = RootObj.CreateRTXSData(); Rdata.XML = ms.Content; if (Rdata.XML != null) { string s1 = "Txt>"; string s2 = "</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>"; string s2 = "</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); } }