Example #1
0
        public WFTinsEntity CreateTaskIns(WFFinsEntity fins, WFTaskEntity taskEntity)
        {
            var taskSetting = GetTaskInfo(taskEntity);
            var tins        = taskSetting.Init(fins, taskEntity);

            return(tins);
        }
Example #2
0
        public override void CreateJob(WFFinsEntity fins, WFTinsEntity tinsEntity, bool needWaitCallback)
        {
            //Console.WriteLine($"结束节点{tinsEntity.Taskname}开始执行……");

            //不用为结束节点创建待执行任务
            fins.State  = EDBEntityState.Modified;
            fins.Status = (int)EFlowStatus.Completed;
            fins.Edate  = DateTime.Now;
            _DataAccess.Update(fins);
        }
Example #3
0
        public WFFinsEntity CreatFlowInstance(string serviceId, string flowId, string dataId, string name)
        {
            WFFinsEntity fins = new WFFinsEntity();

            fins.Add();
            fins.ServiceId = serviceId;
            fins.Flowid    = flowId;
            fins.Dataid    = dataId;
            fins.Name      = string.IsNullOrEmpty(name)?dataId:name;
            fins.Cdate     = DateTime.Now;
            fins.Status    = (int)EFlowStatus.Starting;
            _DataAccess.Update(fins);
            return(fins);
        }
Example #4
0
        /// <summary>
        /// 流转到下一步
        /// </summary>
        public virtual void CreateJob(WFFinsEntity fins, WFTinsEntity tinsEntity, bool needWaitCallback)
        {
            //插入MQ,流程监控启动
            WFTEventEntity nextEntity = new WFTEventEntity();

            nextEntity.Add();
            nextEntity.Flowid       = tinsEntity.Flowid;
            nextEntity.Finsid       = tinsEntity.Finsid;
            nextEntity.Taskid       = tinsEntity.Taskid;
            nextEntity.Dataid       = fins.Dataid;
            nextEntity.Tinsid       = tinsEntity.ID;
            nextEntity.Status       = 0;
            nextEntity.Waitcallback = needWaitCallback ? 1 : 0;
            nextEntity.Cdate        = System.DateTime.Now;

            _DataAccess.Update(nextEntity);
        }
Example #5
0
        /// <summary>
        /// 初始任务节点程实例信息
        /// </summary>
        public virtual WFTinsEntity Init(WFFinsEntity fins, WFTaskEntity taskEntity)
        {
            WFTinsEntity tins = new WFTinsEntity();

            tins.Add();
            tins.Finsid   = fins.ID;
            tins.Flowid   = taskEntity.Flowid;
            tins.Taskid   = taskEntity.ID;
            tins.Taskname = taskEntity.Name;
            tins.Sdate    = System.DateTime.Now;
            if (taskEntity.Type == ETaskType.End || taskEntity.Type == ETaskType.Start)
            {
                tins.Edate = System.DateTime.Now;
            }
            _DataAccess.Update(tins);

            return(tins);
        }
        public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity enventEntity)
        {
            // 根据tasksetting 节点的配置信息读取要发送到的远端地址
            //可以是多个地址
            if (!string.IsNullOrWhiteSpace(taskEntity.Setting))
            {
                var list = _jsonConverter.Deserialize <List <SendHttpModel> >(taskEntity.Setting);
                if (list != null)
                {
                    Dictionary <string, string> dicPostdata = null;
                    foreach (var item in list)
                    {
                        //Console.WriteLine($"发送数据到远端{item.Url}");

                        dicPostdata = new Dictionary <string, string>();
                        dicPostdata.Add("callbackTag", enventEntity.ID);
                        dicPostdata.Add("customTag", item.CustomTag);
                        dicPostdata.Add("dataId", enventEntity.Dataid);
                        var content    = new FormUrlEncodedContent(dicPostdata);
                        var httpClient = _httpClientFactory.CreateClient();
                        try
                        {
                            var response = httpClient.PostAsync(item.Url, content).GetAwaiter().GetResult();
                            if (response.IsSuccessStatusCode)
                            {
                                response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                            }
                            else
                            {
                                var a = "";
                            }
                        }
                        catch (HttpRequestException ex)
                        {
                            throw new HttpRequestException($"{ex.Message},RunTask url:{item.Url} content:{_jsonConverter.Serialize(dicPostdata) }");
                        }
                    }
                    return(false);
                }
            }
            return(true);
        }
Example #7
0
        /// <summary>
        /// 执行下一个节点任务
        /// </summary>
        /// <param name="fins"></param>
        /// <param name="nextTasks"></param>
        private void ExeNextTask(WFFinsEntity fins, WFTaskEntity[] nextTasks)
        {
            foreach (var nextTask in nextTasks)
            {
                bool parallelCompleted = true;

                if (nextTask.Type == ETaskType.JuHe)
                {
                    //判断上游节点是否全部完成
                    var preTasks = _WFTask.GetPreTasks(nextTask);
                    var tins     = _WFTask.GetTinssById(fins.ID, preTasks.Select(t => t.ID).ToArray());
                    parallelCompleted = preTasks.Count() == tins.Count() && tins.Where(t => t.Edate == DateTime.MinValue).Count() == 0;
                }
                if (parallelCompleted)
                {
                    var tinsNext    = _WFTask.CreateTaskIns(fins, nextTask);
                    var taskSetting = _WFTask.GetTaskInfo(nextTask);
                    taskSetting.CreateJob(fins, tinsNext, IsNeedCallback(nextTask.Type));
                }
            }
        }
Example #8
0
 public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity enventEntity)
 {
     //TODO:发送数据到MQ
     // 根据tasksetting 节点的配置信息读取要发送到的远端地址
     //可以是多个地址
     if (!string.IsNullOrWhiteSpace(taskEntity.Setting))
     {
         var obj = _JsonConverter.Deserialize <SendMQModel>(taskEntity.Setting);
         if (obj != null)
         {
             var dicPostdata = new Dictionary <string, string>();
             dicPostdata.Add("callbackTag", enventEntity.ID);
             dicPostdata.Add("customTag", obj.CustomTag);
             dicPostdata.Add("dataId", enventEntity.Dataid);
             byte[] body = System.Text.Encoding.UTF8.GetBytes(_JsonConverter.Serialize(dicPostdata));
             _ChannelService.SendMsg(model =>
             {
                 model.BasicPublish(obj.Exchange, obj.RoutingKey ?? "", body, "");
             }, obj.ServerName);
         }
     }
     return(false);
 }
Example #9
0
 public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
 {
     //结束节点不需要做具体任务
     return(false);
 }
Example #10
0
        /// <summary>
        /// 执行具体任务
        /// </summary>
        public virtual bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
        {
            //System.Console.WriteLine($"{taskEntity.Type}节点{tinsEntity.Taskname}开始执行……");

            return(true);
        }