コード例 #1
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);
        }
コード例 #2
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);
        }
コード例 #3
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);
        }
コード例 #4
0
ファイル: WFTask.cs プロジェクト: liuyuedeyv/ScheduleEngine
        public WFTaskEntity[] GetNextTasks(WFTaskEntity preTask, WFTinsEntity tinsEntity, string bisJsonData)
        {
            var filter = TableFilter.New().Equals("BEGINTASKID", preTask.ID);
            var links  = DataAccess.Query(WFLinkEntity.TableCode)
                         .FixField("*").Where(filter).QueryList <WFLinkEntity>().ToList();

            if (preTask.Type != ETaskType.BingXing && links.Count() > 1)
            {
                var dataList = new List <WFJsonDataEntity>();
                dataList.Add(_JsonConverter.Deserialize <WFJsonDataEntity>(bisJsonData));
                foreach (var link in links.OrderByDescending(l => l.Priority))
                {
                    bool hitRule = false;
                    if (string.IsNullOrWhiteSpace(link.Filter))
                    {
                        hitRule = true;
                    }
                    else
                    {
                        var conditionFilter = _JsonConverter.Deserialize <TableFilter>(link.Filter);
                        hitRule = dataList.QueryDynamic(conditionFilter).Count() == 1;
                    }
                    if (hitRule)
                    {
                        links = new List <WFLinkEntity>();
                        links.Add(link);
                        break;
                    }
                }
            }

            if (links.Count() == 1)
            {
                filter = TableFilter.New().Equals("ID", string.Join(',', links.Select(l => l.Endtaskid).ToArray()));
            }
            else
            {
                filter = TableFilter.New().In("ID", string.Join(',', links.Select(l => l.Endtaskid).ToArray()));
            }
            var tasks = DataAccess.Query(WFTaskEntity.TableCode).FixField("*")
                        .Where(filter).QueryList <WFTaskEntity>();

            return(tasks.ToArray());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public WFFinsEntity GetWFFinsExecInfo(string finsId)
        {
            var col = this._dataAccess.Query(WFFinsEntity.TableCode)
                      .FixField("*")
                      .Where(TableFilter.New().Equals("ID", finsId))
                      .Query <WFFinsEntity>();

            if (!col.Data.Any())
            {
                throw  new Exception($"{finsId}数据不存在");
            }
            var en = col.Data.FirstOrDefault();

            en.WfFlow  = this._workFlowTemplate.GetWFTemplate(en.Flowid);
            en.TaskIns = _WorkFlowInstance.GetTinsList(finsId);

            TableFilter tf       = TableFilter.New().Equals("FINSID", en.ID);
            var         eventArr = this._wftEventRepository.GetList(tf);//查询异步回调信息

            en.LinkIns = new List <WFLinkEntity>();
            for (int i = 0; i < en.TaskIns.Count; i++)
            {
                WFTinsEntity startTIns = en.TaskIns[i];
                if (startTIns.Edate.ToString("yyyy-MM-dd") == "0001-01-01")//#如果没有结束时间
                {
                    //TODOWHP 待完善	on 2020-03-28 09:41:14
                    //eventArr.Data.All(o=>o.Tinsid=en.ID)
                }
            }

            foreach (WFLinkEntity link in en.WfFlow.Links)
            {
                if (en.TaskIns.Any(o => o.Taskid == link.Begintaskid) && en.TaskIns.Any(o => o.Taskid == link.Endtaskid))
                {
                    en.LinkIns.Add(link);
                }
            }



            return(en);
        }
コード例 #7
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);
 }
コード例 #8
0
 public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
 {
     //结束节点不需要做具体任务
     return(false);
 }
コード例 #9
0
        /// <summary>
        /// 执行具体任务
        /// </summary>
        public virtual bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
        {
            //System.Console.WriteLine($"{taskEntity.Type}节点{tinsEntity.Taskname}开始执行……");

            return(true);
        }