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