public WFTinsEntity CreateTaskIns(WFFinsEntity fins, WFTaskEntity taskEntity) { var taskSetting = GetTaskInfo(taskEntity); var tins = taskSetting.Init(fins, taskEntity); return(tins); }
public WFTaskSettingEntity GetTaskJobInfo(WFTaskEntity taskEntity) { var filter = TableFilter.New().Equals("id", taskEntity.ID); var settingEntity = DataAccess.Query(WFTaskSettingEntity.TableCode) .FixField("*").Where(filter).QueryFirst <WFTaskSettingEntity>(); return(settingEntity); }
public bool IsMultipleNextTask(WFTaskEntity preTask) { var filter = TableFilter.New().Equals("BEGINTASKID", preTask.ID); var links = DataAccess.Query(WFLinkEntity.TableCode) .FixField("*").Where(filter).QueryList <WFLinkEntity>().ToList(); return(links.Count > 1); }
public string GetBisData(string dataId, WFTaskEntity task) { Console.WriteLine($"业务案件{dataId}获取业务数据……"); //TODO:从远端获取业务数据 Dictionary <string, object> data = new Dictionary <string, object>(); data.Add("dataid", dataId); return(_JsonConverter.Serialize(data)); }
/// <summary> /// 判断是否匹配 {@.*} /// </summary> /// <param name="wFTaskEntity"></param> /// <returns></returns> public static bool HasTemplateInfo(this WFTaskEntity wFTaskEntity) { if (string.IsNullOrWhiteSpace(wFTaskEntity.Setting)) { return(false); } var reg = new Regex(regStr); return(reg.IsMatch(wFTaskEntity.Setting)); }
public BaseTask GetTaskInfo(WFTaskEntity taskEntity) { ETaskType taskType = taskEntity.Type; var taskInfo = Tasks.Where(t => (t as BaseTask).TaskType == taskType).FirstOrDefault() as BaseTask; if (taskInfo == null) { throw new Exception($"类型{taskType}没有实现"); } return(taskInfo); }
public WFTaskEntity[] GetPreTasks(WFTaskEntity nextTask) { var filter = TableFilter.New().Equals("ENDTASKID", nextTask.ID); var links = DataAccess.Query(WFLinkEntity.TableCode) .FixField("*").Where(filter).QueryList <WFLinkEntity>(); filter = TableFilter.New().In("ID", string.Join(',', links.Select(l => l.Begintaskid).ToArray())); var tasks = DataAccess.Query(WFTaskEntity.TableCode).FixField("*") .Where(filter).QueryList <WFTaskEntity>(); return(tasks.ToArray()); }
/// <summary> /// 获取变量 {@.*},并且用逗号隔开拼接到一起 /// </summary> /// <param name="wFTaskEntity"></param> /// <returns></returns> public static string GetTemplateInfo(this WFTaskEntity wFTaskEntity) { if (string.IsNullOrWhiteSpace(wFTaskEntity.Setting)) { return(string.Empty); } var reg = new Regex(regStr); string result = string.Empty; foreach (var item in reg.Matches(wFTaskEntity.Setting)) { result += item.ToString() + ","; } return(result.TrimEnd(',')); }
private string GetBisData(WFTaskEntity taskEntity, string dataId, string serviceId, string tinsId, out bool isMultipleNextTask) { //从远端获取数据的条件: //1、只有接下来有多个节点并且当前节点不等于并行节点,才会去远端获取数据 //2、当前节点的配置信息中用到的变量,则需要去远端解析 bool hasTemplateInfo = taskEntity.HasTemplateInfo(); isMultipleNextTask = _WFTask.IsMultipleNextTask(taskEntity) && taskEntity.Type != ETaskType.BingXing; string jsonData = string.Empty; if (isMultipleNextTask || hasTemplateInfo) { jsonData = _WFTask.GetTaskInfo(taskEntity).GetBisData(taskEntity, dataId, serviceId, hasTemplateInfo ? EAccessMessageType.GetVariable : EAccessMessageType.GetWorkflowServiceBisdata); } return(jsonData); }
/// <summary> /// 替换模板中的 {@.*}信息 /// </summary> /// <param name="taskEntity"></param> /// <param name="jsonData"></param> public static void ReplaceTemplateInfo(this WFTaskEntity taskEntity, string jsonData) { if (!string.IsNullOrWhiteSpace(taskEntity.Setting) && !string.IsNullOrWhiteSpace(jsonData)) { var reg = new Regex(regStr); // 匹配模板: "Exchange:{@Exchange},ServerName:{@sserverName}"; var obj = Newtonsoft.Json.JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JObject>(jsonData); foreach (var item in reg.Matches(taskEntity.Setting)) { var tmp = item.ToString(); if (obj.TryGetValue(tmp, StringComparison.CurrentCultureIgnoreCase, out JToken token)) { taskEntity.Setting = taskEntity.Setting.Replace(tmp, token.ToString()); } } } }
/// <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 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()); }
public override string GetBisData(WFTaskEntity taskEntity, string dataId, string serviceId, EAccessMessageType messageType) { //从tasksetting获取配置的远程对象代码,调取远方模型进行预算,返回结果 string jsonData = "{}"; if (!string.IsNullOrWhiteSpace(taskEntity.Setting)) { var finisid = this._WfFinsDal.GetIdByDataIdAndFlowId(dataId, taskEntity.Flowid); var tinsid = this._WftinsDal.GetIdByFinsIdAndTaskId(finisid, taskEntity.ID); var settingModel = _jsonConverter.Deserialize <ObjectSettingModel>(taskEntity.Setting); if (settingModel != null) { jsonData = _IAppAccessService.GetModelTaskBisdata(serviceId, dataId, settingModel.ObjectCode).GetAwaiter().GetResult(); } _WfTdataDal.Add(taskEntity.Flowid, finisid, taskEntity.ID, tinsid, jsonData); } return(jsonData); }
public int UpdateTemplate(WFFlowEntity flowEntity) { if (null == flowEntity) { throw new ArgumentException($"{nameof(flowEntity)} is not null"); } using (var trans = TransHelper.BeginTrans()) { foreach (var task in flowEntity?.Tasks ?? new List <WFTaskEntity>()) { var taskEntity = new WFTaskEntity(); taskEntity.State = task.State; if (task.State == EDBEntityState.Added) { taskEntity.Flowid = flowEntity.ID; taskEntity.Name = task.Name; } taskEntity.ID = task.ID; taskEntity.X = task.X; taskEntity.Y = task.Y; taskEntity.Type = task.Type; taskEntity.Name = task.Name; DataAccess.Update(taskEntity); } foreach (var link in flowEntity?.Links ?? new List <WFLinkEntity>()) { var linkEntity = new WFLinkEntity(); linkEntity.State = link.State; if (link.State == EDBEntityState.Added) { linkEntity.Flowid = flowEntity.ID; } linkEntity.ID = link.ID; linkEntity.Begintaskid = link.Begintaskid; linkEntity.Endtaskid = link.Endtaskid; var count = DataAccess.Update(linkEntity); } trans.Commit(); } return(1); }
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); }
/// <summary> /// 获取业务数据 /// </summary> public virtual string GetBisData(WFTaskEntity taskEntity, string dataId, string serviceId, EAccessMessageType messageType) { //调取远方模型进行,返回结果 string jsonData = string.Empty; //根据serviceId 和dataid 获取 finsid 和tinsid var finisid = this._WfFinsDal.GetIdByDataIdAndFlowId(dataId, taskEntity.Flowid); var tinsid = this._WftinsDal.GetIdByFinsIdAndTaskId(finisid, taskEntity.ID); if (messageType == EAccessMessageType.GetVariable) { jsonData = _IAppAccessService.GetVaribleTaskBisdata(serviceId, dataId, taskEntity.GetTemplateInfo()).GetAwaiter().GetResult(); } else { jsonData = _IAppAccessService.GetWorkflowServiceBisdata(serviceId, dataId).GetAwaiter().GetResult(); } _WfTdataDal.Add(taskEntity.Flowid, finisid, taskEntity.ID, tinsid, jsonData); return(jsonData); }
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); }
/// <summary> /// 执行具体任务 /// </summary> public virtual bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity) { //System.Console.WriteLine($"{taskEntity.Type}节点{tinsEntity.Taskname}开始执行……"); return(true); }
public override bool RunTask(WFTaskEntity taskEntity, WFFinsEntity fins, WFTinsEntity tinsEntity, WFTEventEntity mqEntity) { //结束节点不需要做具体任务 return(false); }
public override string GetBisData(WFTaskEntity taskEntity, string dataId, string serviceId, EAccessMessageType messageType) { //结束节点不用获取业务数据 return(string.Empty); }