/// <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);
            }
        }
Example #3
0
        /// <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);
        }
Example #5
0
        /// <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;
                }
            }
        }
Example #7
0
        // -------------------------------------------------------
        // 查询
        // -------------------------------------------------------

        #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);
        }
Example #11
0
        /// <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);
        }
Example #13
0
        // -------------------------------------------------------
        // 添加 删除 修改
        // -------------------------------------------------------

        #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));
            }
        }
Example #14
0
        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()));
            }
        }
Example #15
0
 /// <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\":\"发送成功。\"}}");
        }