Ejemplo n.º 1
0
        private int Run(WFTEventEntity eventEntity)
        {
            var taskEntity  = _WFTask.GetTaskById(eventEntity.Taskid);
            var taskSetting = _WFTask.GetTaskInfo(taskEntity);
            var tinsEntity  = _WFTask.GetTinsById(eventEntity.Tinsid);
            var fins        = _WorkFlowIns.GetFlowInstance(eventEntity.Finsid);
            var bisJsonData = GetBisData(taskEntity, eventEntity.Dataid, fins.ServiceId, eventEntity.Tinsid, out bool isMultipleNextTask);

            if (isMultipleNextTask && string.IsNullOrWhiteSpace(bisJsonData))
            {
                throw new Exception("获取远端数据异常,请检查远端应用是否正常 ");
            }
            taskEntity.ReplaceTemplateInfo(bisJsonData);
            using (var tran = TransHelper.BeginTrans())
            {
                //1、执行具体任务,并更新信息
                var continueRun = taskSetting.RunTask(taskEntity, fins, tinsEntity, eventEntity);

                eventEntity.State       = EDBEntityState.Modified;
                eventEntity.Status      = 1;
                eventEntity.ProcessDate = DateTime.Now;
                _DataAccess.Update(eventEntity);

                if (continueRun)
                {
                    //2、更新任务实例
                    tinsEntity.State = EDBEntityState.Modified;
                    tinsEntity.Edate = DateTime.Now;
                    _DataAccess.Update(tinsEntity);

                    //3、生成下一个节点任务实例、并执行流转
                    var nextTasks = _WFTask.GetNextTasks(taskEntity, tinsEntity, bisJsonData);
                    //如果下一个节点是聚合节点,则需要加锁,防止与回调冲突。默认等待10S
                    if (nextTasks.Length == 1 && nextTasks[0].Type == ETaskType.JuHe)
                    {
                        var lockKey = $"{MutexConfig.WORKFLOWLOCKPRE}{fins.Dataid}";
                        var success = ExeWithLock(lockKey, MutexConfig.WORKFLOWLOCKTIMEOUT, () =>
                        {
                            ExeNextTask(fins, nextTasks);
                            tran.Commit();
                        });
                        if (!success)
                        {
                            throw new Exception($"未获取独占锁,请重试,dataid:{fins.Dataid }");
                        }
                    }
                    else
                    {
                        ExeNextTask(fins, nextTasks);
                        tran.Commit();
                    }
                }
                else
                {
                    tran.Commit();
                }
            }
            return(1);
        }
Ejemplo n.º 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);
        }
        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);
        }
Ejemplo n.º 4
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);
 }
Ejemplo n.º 5
0
 public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
 {
     //结束节点不需要做具体任务
     return(false);
 }
Ejemplo n.º 6
0
        /// <summary>
        /// 执行具体任务
        /// </summary>
        public virtual bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity)
        {
            //System.Console.WriteLine($"{taskEntity.Type}节点{tinsEntity.Taskname}开始执行……");

            return(true);
        }