/// <summary>修改记录</summary> /// <param name="param">TaskWorkInfo 实例的详细信息</param> public void Update(TaskWorkInfo param) { if (string.IsNullOrEmpty(param.Id)) { param.Id = this.GetIdByTaskCode(param.ApplicationId, param.TaskCode); } // 删除原始 this.Delete(param.Id); // 插入新的数据 }
/// <summary>添加记录</summary> /// <param name="param">TaskWorkInfo 实例的详细信息</param> public void Insert(TaskWorkInfo param) { IList <TaskWorkItemInfo> list = param.GetTaskWorkItems(); // 接收者信息 foreach (TaskWorkItemInfo item in list) { IStorageNode storageNode = storageStrategy.GetStorageNode("Node", item.ReceiverId); this.ibatisMappers[storageNode.Name].Insert(StringHelper.ToProcedurePrefix(string.Format("{0}_Insert", this.tableName)), item); } }
/// <summary>删除记录</summary> /// <param name="applicationId">应用系统的标识</param> /// <param name="taskCode">任务编码</param> /// <param name="receiverIds">任务接收人标识</param> public void DeleteByTaskCode(string applicationId, string taskCode, string receiverIds) { TaskWorkInfo param = this.FindOneByTaskCode(applicationId, taskCode); if (param != null) { if (dictionary.ContainsKey(param.Id)) { dictionary.Remove(param.Id); } this.provider.DeleteByTaskCode(applicationId, taskCode, receiverIds); } }
// ------------------------------------------------------- // 保存 添加 修改 删除 // ------------------------------------------------------- #region 函数:Save(TaskWorkInfo param) /// <summary>保存记录</summary> /// <param name="param">TaskWorkInfo 实例详细信息</param> /// <returns>TaskWorkInfo 实例详细信息</returns> public TaskWorkInfo Save(TaskWorkInfo param) { if (!this.IsExistTaskCode(param.ApplicationId, param.TaskCode)) { this.Insert(param); } else { param.Id = this.GetIdsByTaskCodes(param.ApplicationId, param.TaskCode); this.Update(param); } return(param); }
/// <summary>发送通知</summary> /// <param name="task">任务信息</param> /// <param name="receiverIds">接收者</param> /// <param name="options">选项</param> public int Send(TaskWorkInfo task, string receiverIds, string options) { JsonData data = JsonMapper.ToObject(options); string payload = data.GetValue("payload", "{}"); string title = data.GetValue("title", task.Tags); string content = data.GetValue("content", task.Title); // 推送消息 IGtPush push = new IGtPush(this.Host, this.AppKey, this.MasterSecret); ListMessage message = new ListMessage(); // 用户当前不在线时,是否离线存储 (可选) message.IsOffline = true; // 离线有效时间,单位为毫秒,可选 message.OfflineExpireTime = 1000 * 3600 * 12; // 判断是否客户端是否wifi环境下推送,1为在WIFI环境下,0为不限制网络环境。 message.PushNetWorkType = 0; // 拼装透传内容 string transmissionContent = "{\"title\":\"" + title + "\",\"content\":\"" + content + "\",\"payload\":" + payload + "}"; message.Data = GetTransmissionTemplate(transmissionContent, this.AppId, this.AppKey); IList <string> clientList = MembershipManagement.Instance.AccountBindingService.FindAllBindingObjectIds(receiverIds, "Getui"); // 设置接收者 List <Target> targetList = new List <Target>(); foreach (var item in clientList) { Target target1 = new Target(); target1.appId = this.AppId; target1.clientId = item; targetList.Add(target1); } string contentId = push.getContentId(message); string result = push.pushMessageToList(contentId, targetList); return(0); }
/// <summary>接收数据</summary> /// <returns></returns> public override IMessageObject Receive() { // 阻塞方式 IMessageObject data = null; lock (lockObject) { if (queue == null) { this.queue = this.GetQueueInstance(); } try { data = new TaskWorkInfo(); // 如果消息队列为空时, 将会导致无限期占用线程, 设置等待10秒钟Receive()函数无响应,则返回空值。 Message message = queue.Receive(new TimeSpan(0, 0, 10)); XmlDocument doc = new XmlDocument(); doc.LoadXml(message.Body.ToString()); data.Deserialize(doc.DocumentElement); return(data); } catch (MessageQueueException messageQueueException) { if (messageQueueException.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout) { // 等待10秒钟Receive()函数无响应,则返回空值。 return(null); } throw; } catch { this.Close(); throw; } } }
// ------------------------------------------------------- // 查询 // ------------------------------------------------------- #region 函数:FindOne(string id) /// <summary>查询某条记录</summary> /// <param name="id">任务标识</param> /// <returns>返回一个 TaskWorkInfo 实例的详细信息</returns> public TaskWorkInfo FindOne(string id) { TaskWorkInfo param = null; if (dictionary.ContainsKey(id)) { param = dictionary[id]; } else { param = provider.FindOne(id); if (param != null) { dictionary.Add(param.Id, param); } } return(param); }
/// <summary>修改记录</summary> /// <param name="param">TaskWorkInfo 实例的详细信息</param> public void Update(TaskWorkInfo param) { Dictionary <string, object> args = new Dictionary <string, object>(); if (string.IsNullOrEmpty(param.Id)) { param.Id = GetIdsByTaskCodes(param.ApplicationId, param.TaskCode); } args.Add("Id", param.Id); args.Add("ApplicationId", param.ApplicationId); args.Add("TaskCode", param.TaskCode); try { this.ibatisMapper.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted); this.ibatisMapper.Update(StringHelper.ToProcedurePrefix(string.Format("{0}_Update", this.tableName)), param); // 删除旧的分配人员数据 this.ibatisMapper.Delete(StringHelper.ToProcedurePrefix(string.Format("{0}_Receiver_DeleteByTaskCode", this.tableName)), args); // 添加新的分配人员数据 foreach (TaskWorkReceiverInfo item in param.ReceiverGroup) { item.TaskId = param.Id; this.ibatisMapper.Insert(StringHelper.ToProcedurePrefix(string.Format("{0}_Receiver_Insert", this.tableName)), item); } this.ibatisMapper.CommitTransaction(); } catch { this.ibatisMapper.RollBackTransaction(); throw; } }
// ------------------------------------------------------- // 查询 // ------------------------------------------------------- #region 函数:FindOne(string id) /// <summary>查询某条记录</summary> /// <param name="id">TaskWorkInfo Id号</param> /// <returns>返回一个 TaskWorkInfo 实例的详细信息</returns> public TaskWorkInfo FindOne(string id) { TaskWorkInfo param = null; Dictionary <string, object> args = new Dictionary <string, object>(); args.Add("Id", id); foreach (KeyValuePair <string, ISqlMapper> entity in this.ibatisMappers) { ISqlMapper ibatisMapper = entity.Value; param = ibatisMapper.QueryForObject <TaskWorkInfo>(StringHelper.ToProcedurePrefix(string.Format("{0}_FindOne", this.tableName)), args); if (param != null) { return(param); } } return(null); }
public void TestSend() { var applicationId = "00000000-0000-0000-0000-000000000001"; var taskCode = DigitalNumberContext.Generate("Key_Guid"); var notificationOptions = ""; TasksContext.Instance.TaskWorkService.Send(applicationId, taskCode, "4", string.Format("test-send-id-{0}", taskCode), DateTime.Now.ToString(), "测试", "00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002"); TaskWorkInfo result = TasksContext.Instance.TaskWorkService.FindOneByTaskCode(applicationId, taskCode); Assert.IsNotNull(result); // 发送带提醒功能的 taskCode = DigitalNumberContext.Generate("Key_Guid"); TasksContext.Instance.TaskWorkService.Send(applicationId, taskCode, "4", string.Format("test-send-id-{0}", taskCode), DateTime.Now.ToString(), "测试", "00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002", notificationOptions); result = TasksContext.Instance.TaskWorkService.FindOneByTaskCode(applicationId, taskCode); Assert.IsNotNull(result); }
/// <summary>发送通知</summary> /// <param name="task">任务信息</param> /// <param name="receiverIds">接收者</param> /// <param name="options">选项</param> public int Send(TaskWorkInfo task, string receiverIds, string options) { JsonData data = JsonMapper.ToObject(options); string validationType = data["validationType"].ToString(); string[] keys = receiverIds.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string key in keys) { if (!string.IsNullOrEmpty(key)) { IAccountInfo account = MembershipManagement.Instance.AccountService[key]; if (account != null && !string.IsNullOrEmpty(account.CertifiedMobile)) { SMSContext.Instance.SMSService.Send(key, account.CertifiedMobile, validationType); } } } return(0); }
public void TestNotification() { string applicationId = "00000000-0000-0000-0000-000000000001"; string taskCode = StringHelper.ToGuid(); // 发送人标识 string senderId = "00000000-0000-0000-0000-000000000001"; // 接收人标识 string receiverId = "00000000-0000-0000-0000-000000100000"; TaskWorkInfo task = new TaskWorkInfo(); task.Id = StringHelper.ToGuid(); task.ApplicationId = applicationId; task.TaskCode = taskCode; task.Title = "测试通知"; task.Content = "{Url}"; task.Type = "4"; task.Tags = "测试"; task.SenderId = senderId; if (!string.IsNullOrEmpty(receiverId)) { task.AddReceiver(receiverId); } task.CreateDate = DateTime.Now; // string notificationOptions = "{\"SMS\":{\"validationType\":\"用户注册\"},\"Getui\":{}}"; string notificationOptions = "{\"Getui\":{}}"; TasksContext.Instance.TaskWorkService.Notification(task, receiverId, notificationOptions); }
// ------------------------------------------------------- // 添加 删除 修改 // ------------------------------------------------------- #region 函数:Save(TaskWorkInfo param) /// <summary>保存记录</summary> /// <param name="param"> 实例<see cref="TaskWorkInfo"/>详细信息</param> /// <returns>TaskWorkInfo 实例详细信息</returns> public TaskWorkInfo Save(TaskWorkInfo param) { if (string.IsNullOrEmpty(param.ApplicationId)) { throw new ArgumentException("没有应用标识信息,请填写此任务所属的应用标识。"); } if (string.IsNullOrEmpty(param.TaskCode)) { throw new ArgumentException("没有任务编码信息,请填写此任务的编码。"); } if (string.IsNullOrEmpty(param.Title)) { throw new ArgumentException("没有任务标题信息,请填写此任务的标题。"); } if (param.ReceiverGroup.Count == 0) { throw new ArgumentException("没有任何接收人数据,请确认此任务信息的接收人数据。"); } if (string.IsNullOrEmpty(param.Id)) { param.Id = StringHelper.ToGuid(); } // 设置待办信息内容 param.Content = param.Content.Trim(); if (param.Content.IndexOf("http://") == 0 || param.Content.IndexOf("https://") == 0) { // 内容为完整的Url地址的数据不处理。 } else { string prefixTargetUrl = TasksConfigurationView.Instance.PrefixTargetUrl; if (!string.IsNullOrEmpty(prefixTargetUrl)) { prefixTargetUrl = prefixTargetUrl.TrimEnd(new char[] { '/' }); // 第一个字符不为 / 。 if (param.Content.IndexOf("/") != 0) { param.Content = "/" + param.Content; } param.Content = prefixTargetUrl + param.Content; } } param = StringHelper.ToSafeXSS <TaskWorkInfo>(param); // 如果消息队列可用,则将数据发送到队列。 if (TasksConfigurationView.Instance.MessageQueueMode == "ON" && queue.Enabled) { queue.Send(param); return(param); } else { return(this.provider.Save(param)); } }
private string Process(string securityToken, string xml, string actionType) { try { /* * * Xml数据示例 * * <?xml version="1.0" encoding="utf-8"?> * * <root> * <task> * <taskCode>T00001</taskCode> * <title>Some Title</title> * <url>http://www.google.com</url> * <category>Document</category> * <senderId>administrator</senderId> * <receiver>0#test1,1#test2#2008-1-1 08:08:08</receiver> * <createDate>2008-01-01</createDate> * </task> * <task> * <taskCode>T00002</taskCode> * <title>Some Title</title> * <url>http://www.google.com</url> * <category>Document</category> * <senderId>administrator</senderId> * <receiver>0#test1,1#test2#2008-1-1 08:08:08</receiver> * <createDate>2008-01-01</createDate> * </task> * </root> * * (*) 接收者信息说明 格式:{0}#{1}#{2} , {0}代表代办状态 1 完成 0 未完成, {1}相关的帐号, {2}{任务完成时间} * * * */ string result = null; string applicationId = SecurityTokenManager.Authenticate(securityToken); TaskWorkInfo param = null; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlNodeList list = doc.GetElementsByTagName("ajaxStorage")[0].ChildNodes; foreach (XmlNode item in list) { param = new TaskWorkInfo(applicationId); param.Deserialize((XmlElement)item); if (param.ReceiverGroup.Count == 0) { result += string.Format("任务【{0}】没有指派给任何用户请重新设置,", param.TaskCode); } else { if (actionType == "发送" && TasksContext.Instance.TaskService.IsExistTaskCode(param.ApplicationId, param.TaskCode)) { result += string.Format("发送失败(任务【{0}】已存在),", param.TaskCode); } else if (actionType == "更新" && !TasksContext.Instance.TaskService.IsExistTaskCode(param.ApplicationId, param.TaskCode)) { result += string.Format("更新失败(任务【{0}】不存在),", param.TaskCode); } else { param = TasksContext.Instance.TaskService.Save(param); if (param == null) { result += string.Format("任务【{0}】" + actionType + "失败请重新" + actionType + ",", param.TaskCode); } } } } if (string.IsNullOrEmpty(result)) { return("任务全部" + actionType + "成功。"); } else { return(result.TrimEnd(new char[] { ',' }) + "。"); } } catch (Exception ex) { return(string.Format("SecurityToken:{0}\r\nXml:{1}\r\nException:{2}", securityToken, xml, ex.ToString())); } }
/// <summary>发送通知</summary> /// <param name="task">任务信息</param> /// <param name="receiverIds">接收者</param> /// <param name="options">选项</param> public int Send(TaskWorkInfo task, string receiverIds, string options) { return(0); }
public void TestSave() { string taskCode = DigitalNumberContext.Generate("Key_Guid"); string id = DigitalNumberContext.Generate("Key_Guid"); if (TasksContext.Instance.TaskWorkService.IsExist(id)) { throw new Exception("任务已存在, 测试失败."); } // ------------------------------------------------------- // 新增任务 // ------------------------------------------------------- TaskWorkInfo param = new TaskWorkInfo(); param.Id = id; param.ApplicationId = appKey; param.TaskCode = taskCode; param.Title = string.Format("测试任务 - 编号{0}", taskCode); param.Content = DateTime.Now.ToString(); param.Type = "1"; param.Tags = "测试"; param.SenderId = "00000000-0000-0000-0000-000000000001"; param.AddReceiver("00000000-0000-0000-0000-000000000001"); param.AddReceiver("00000000-0000-0000-0000-000000000002"); param.AddReceiver("00000000-0000-0000-0000-000000000003"); param.AddReceiver("00000000-0000-0000-0000-000000000004"); param.CreateDate = DateTime.Now; param = TasksContext.Instance.TaskWorkService.Save(param); // ------------------------------------------------------- // 修改任务 // ------------------------------------------------------- Assert.AreNotEqual(param.Content, "http://localhost/api/test/"); param.Content = "http://localhost/api/test/"; param = TasksContext.Instance.TaskWorkService.Save(param); param = TasksContext.Instance.TaskWorkService.FindOne(id); Assert.AreEqual(param.Content, "http://localhost/api/test/"); // ------------------------------------------------------- // 清理 // ------------------------------------------------------- if (TasksContext.Instance.TaskWorkService.IsExist(id)) { TasksContext.Instance.TaskWorkService.Delete(id); } param = TasksContext.Instance.TaskWorkService.FindOne(id); Assert.IsNull(param); }
// ------------------------------------------------------- // 保存 删除 // ------------------------------------------------------- #region 函数:Save(XmlDocument doc) /// <summary>保存记录</summary> /// <param name="doc">Xml 文档对象</param> /// <returns>返回操作结果</returns> public string Send(XmlDocument doc) { TaskWorkInfo param = new TaskWorkInfo(); param = (TaskWorkInfo)AjaxUtil.Deserialize(param, doc); XmlNodeList nodes = doc.SelectNodes("/request/receivers/receiver"); IAccountInfo account = MembershipManagement.Instance.AccountService[param.SenderId]; if (account == null) { // 如果默认状态下没有填写发送者标识(SenderId), 则根据填写的发送者的登录名信息查找相关标识信息. XmlNode senderNode = doc.SelectSingleNode("/request/sender/loginName"); if (senderNode == null) { return("{\"message\":{\"returnCode\":1,\"value\":\"未找到发送人信息【id:" + param.SenderId + "】。\"}}"); } else { account = MembershipManagement.Instance.AccountService.FindOneByLoginName(senderNode.InnerText); if (account == null) { return("{\"message\":{\"returnCode\":1,\"value\":\"未找到发送人信息【loginName:" + senderNode.InnerText + "】。\"}}"); } else { param.SenderId = account.Id; } } } foreach (XmlNode node in nodes) { if (node.SelectSingleNode("id") != null) { account = MembershipManagement.Instance.AccountService[node.SelectSingleNode("id").InnerText]; if (account == null) { return("{\"message\":{\"returnCode\":1,\"value\":\"未找到接收人信息【id:" + node.SelectSingleNode("id").InnerText + "】。\"}}"); } } else if (node.SelectSingleNode("loginName") != null) { account = MembershipManagement.Instance.AccountService.FindOneByLoginName(node.SelectSingleNode("loginName").InnerText); if (account == null) { return("{\"message\":{\"returnCode\":1,\"value\":\"未找到接收人信息,【loginName:" + node.SelectSingleNode("loginName").InnerText + "】。\"}}"); } } else { account = null; return("{\"message\":{\"returnCode\":1,\"value\":\"未找到接收人标识的参数。\"}}"); } if (node.SelectSingleNode("isFinished") == null) { param.AddReceiver(account.Id); } else { int isFinished = Convert.ToInt32(node.SelectSingleNode("isFinished").InnerText); DateTime finishTime = new DateTime(2000, 1, 1); if (isFinished == 1) { if (node.SelectSingleNode("finishTime") == null) { return("{\"message\":{\"returnCode\":1,\"value\":\"" + account.Name + "已完成的,但是未找到完成时间。\"}}"); } finishTime = Convert.ToDateTime(node.SelectSingleNode("finishTime").InnerText); } param.AddReceiver(account.Id, false, isFinished, finishTime); } } if (param.ReceiverGroup.Count == 0) { return("{\"message\":{\"returnCode\":1,\"value\":\"必须填写接收人信息。\"}}"); } if (string.IsNullOrEmpty(param.Title)) { return("{\"message\":{\"returnCode\":1,\"value\":\"必须填写标题信息。\"}}"); } this.service.Save(param); return("{\"message\":{\"returnCode\":0,\"value\":\"发送成功。\"}}"); }