using System.Data; using DocumentFormat.OpenXml.Office2010.Excel; using Infrastructure; using Infrastructure.Extensions; using JetBrains.Annotations; using Microsoft.Extensions.Configuration; using Moq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.SS.Formula.Functions; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.BaseApp.WFTask.Response; using OpenAuth.App.FormScheme; using OpenAuth.App.FormScheme.Response; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; namespace OpenAuth.App.BaseApp.WFTask { public class WFTaskApp : SqlSugarBaseApp { ISqlSugarClient client; private readonly FormSchemeApp _formSchemeApp; private readonly WFProcessApp _processApp; private WFSchemeInfoApp _schemeInfoApp; private readonly IConfiguration _configuration; public WFTaskApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, FormSchemeApp formSchemeApp, WFProcessApp processApp, WFSchemeInfoApp schemeInfoAppApp, IConfiguration configuration ) : base(unitWork, repository, auth) { client = base.Repository.AsSugarClient(); _formSchemeApp = formSchemeApp; _processApp = processApp; _schemeInfoApp = schemeInfoAppApp; _configuration = configuration; } #region 任务 /// /// 获取我的代办任务列表 /// /// 分页参数 /// 查询参数 /// 是否允许批量审核 /// public async Task>> GetMyUncompletedPageList(PageReq pageReq, WFProcessSearchDto searchParams, string category, bool isBatchAudit = false) { RefAsync totalCount = 0; var userId = _auth.GetUserId(); var expression = Expressionable.Create() //.And(t => t.UserId == userId) .And(t => t.State == 1) .And(t => t.Type != 2) .AndIF(!string.IsNullOrEmpty(searchParams.Keyword), t => t.ProcessTitle.Contains(searchParams.Keyword) || t.UnitName.Contains(searchParams.Keyword)) .AndIF(!string.IsNullOrEmpty(searchParams.Code), t => t.ProcessCode == searchParams.Code) .AndIF(searchParams.StartDate != null && searchParams.EndDate != null, t => t.CreateDate >= searchParams.StartDate && t.CreateDate <= searchParams.EndDate) .AndIF(isBatchAudit, t => t.IsBatchAudit == 1); var list = await client.Queryable() .Where(expression.ToExpression()) .LeftJoin((t, u) => t.Id == u.TaskId && u.UserId == userId) .Where((t, u) => u.UserId == userId || t.UserId == userId) .LeftJoin((t, u, p) => t.ProcessId == p.Id) .LeftJoin((t, u, p, s) => p.SchemeId == s.Id) .LeftJoin((t, u, p, s, i) => s.SchemeInfoId == i.Id) .WhereIF(!string.IsNullOrEmpty(category), (t, u, p, s, i) => i.Category == category) .OrderByDescending((t, u, p, s, i) => t.CreateDate) .Select((t, u, p, s, i) => new Repository.Domain.WFTask() { Id = t.Id.SelectAll(), SchemeContent = s.Content, InstanceInfo = p.InstanceInfo }) .ToPageListAsync(pageReq.page, pageReq.limit, totalCount); // 遍历补充信息 foreach (var wfTask in list) { // 获取表单数据 var unitId = wfTask.UnitId; // 当前节点id //var process = await _processApp.GetEntity(wfTask.ProcessId); //var scheme = await _schemeInfoApp.GetSchemeEntity(process.SchemeId); //var content = (JObject)JsonConvert.DeserializeObject(scheme.Content); var content = (JObject)JsonConvert.DeserializeObject(wfTask.SchemeContent); var wfData = (JArray)content["wfData"]; // var instanceInfo = wfTask.InstanceInfo; var processId = instanceInfo.pkeyValue; var pkey = instanceInfo.pkey; foreach (var jToken in wfData) { var id = jToken["id"]?.ToString(); if (id != null && id.Equals(unitId)) { var first = jToken; // fromVersion 为 schemeId var formVersion = first["formVerison"]?.ToString(); if (!string.IsNullOrEmpty(formVersion)) { var authFields = (JArray)jToken["authFields"]; var showFields = new Dictionary(); foreach (var authField in authFields) { var label = authField["label"].ToString(); var field = authField["field"].ToString(); var fieldName = authField["fieldName"]?.ToString(); if (authField["upShow"].ToBool().Equals(true)) { showFields.Add(field, new ExtendInfo() { Field = field, Label = label, FieldName = fieldName }); } } var sql = "select "; var selectFields = ""; foreach (var showField in showFields) { selectFields += $"\"{showField.Value.FieldName}\"" + " as " + showField.Value.Field + ","; } selectFields = selectFields.TrimEnd(','); var formScheme = await _formSchemeApp.GetScheme(formVersion); FormSchemeNewModel formSchemeModel = formScheme.Scheme.ToObject(); FormDbTableInfo mainTable = formSchemeModel.Db.Find(t => t.Type == "main"); sql += selectFields + $" FROM \"{mainTable.Name}\" t where \"{pkey}\" = @Id"; var dataList = await client.Ado.GetDataTableAsync(sql, new { Id = processId }); // 实现一个新的查询方法 // var dataList = await _formSchemeApp.GetFormDataNew(formVersion, "Id", processId); // var data = dataList.FirstOrDefault().Value; // 实际只有一行数据 foreach (DataRow dataRow in dataList.Rows) { foreach (var showField in showFields) { var field = showField.Key; var value = dataRow[field]; showField.Value.Value = value; } } wfTask.ExtendInfo = showFields.Values; } } } wfTask.SchemeContent = null; wfTask.InstanceInfo = null; } return new PageInfo> { Items = list, Total = totalCount }; } /// /// 获取我的已办任务列表 /// /// 分页参数 /// 查询参数 /// public async Task>> GetMyCompletedPageList(PageReq pageReq, WFProcessSearchDto searchParams, string category) { RefAsync totalCount = 0; var userId = _auth.GetUserId(); var queryable = client.Queryable() .LeftJoin((t, t1) => t.Id == t1.TaskId) .LeftJoin((t, t1, t2) => t.ProcessId == t2.Id) .LeftJoin((t, t1, t2, t3) => t2.SchemeId == t3.Id) .LeftJoin((t, t1, t2, t3, t4) => t3.SchemeInfoId == t4.Id); var exp = Expressionable.Create() .And((t, t1) => t1.IsLast == 1) .And((t, t1) => t.State == 3 || t.State == 5) .And((t, t1) => t.Type == 1 || t.Type == 3 || t.Type == 5 || t.Type == 6||t.Type==7) .And((t, t1) => t.UserId == userId || t1.UserId == userId) .AndIF(!string.IsNullOrEmpty(searchParams.Keyword), (t, t1) => t.ProcessTitle.Contains(searchParams.Keyword) || t.UnitName.Contains(searchParams.Keyword)) .AndIF(!string.IsNullOrEmpty(searchParams.Code), (t, t1) => t.ProcessCode == searchParams.Code) .AndIF(searchParams.StartDate != null && searchParams.EndDate != null, (t, t1) => t.CreateDate >= searchParams.StartDate && t.CreateDate <= searchParams.EndDate) .ToExpression(); var list = await queryable.Where(exp) .WhereIF(!string.IsNullOrEmpty(category), (t, t1, t2, t3, t4) => t4.Category == category).Select( (t, t1, t2, t3, t4) => new Repository.Domain.WFTask() { Id = t.Id, Type = t.Type, ProcessTitle = t.ProcessTitle, ProcessCode = t.ProcessCode, ProcessId = t.ProcessId, ChildProcessId = t.ChildProcessId, ProcessUserId = t.ProcessUserId, ProcessUserName = t.ProcessUserName, Token = t.Token, UnitId = t.UnitId, UnitName = t.UnitName, PrevUnitId = t.PrevUnitId, PrevUnitName = t.PrevUnitName, PrevToken = t.PrevToken, UserId = t.UserId, UserName = t.UserName, UserDepartmentId = t.UserDepartmentId, UserCompanyId = t.UserCompanyId, State = t.State, IsAgree = t.IsAgree, IsLast = t.IsLast, Sort = t.Sort, TimeoutAction = t.TimeoutAction, TimeoutNotice = t.TimeoutNotice, TimeoutInterval = t.TimeoutInterval, TimeoutStrategy = t.TimeoutStrategy, CreateUserId = t.CreateUserId, CreateUserName = t.CreateUserName, IsUrge = t.IsUrge, UrgeTime = t.UrgeTime, FirstId = t.FirstId, IsBatchAudit = t.IsBatchAudit, IsReject = t.IsReject, PrevTaskId = t.PrevTaskId, UpdateTaskId = t.UpdateTaskId, IsCancel = t1.IsCancel, CreateDate = t1.CreateDate, OperationName = t1.OperationName, MakeUserId = t1.UserId, IsFinished = t2.IsFinished }).ToPageListAsync(pageReq.page, pageReq.limit, totalCount); return new PageInfo> { Items = list, Total = totalCount }; } /// /// 获取可撤回的任务 /// /// 分页参数 /// 查询参数 /// public PageInfo> GetRetractPageList(PageReq pageReq, WFProcessSearchDto searchParams, string category) { int totalCount = 0; var userId = _auth.GetUserId(); var query = client.Queryable() .Where(t => t.IsLast == 1) .Where(t => t.State == 3 || t.State == 5) .Where(t => t.Type == 1 || t.Type == 3 || t.Type == 5 || t.Type == 6 || t.Type == 7) .Where(t => t.CreateDate != null) .WhereIF(!string.IsNullOrEmpty(searchParams.Keyword), t => t.ProcessTitle.Contains(searchParams.Keyword) || t.UnitName.Contains(searchParams.Keyword)) .WhereIF(!string.IsNullOrEmpty(searchParams.Code), t => t.ProcessCode == searchParams.Code) .WhereIF(searchParams.StartDate != null && searchParams.EndDate != null, t => t.CreateDate >= searchParams.StartDate && t.CreateDate <= searchParams.EndDate) .Select(t => new { index2 = SqlFunc.RowNumber($"{t.CreateDate} desc ", t.ProcessId), ProcessTitle = t.ProcessTitle, UnitId = t.UnitId, Id = t.Id, ProcessId = t.ProcessId, UnitName = t.UnitName, UserId = t.UserId, UserName = t.UserName, State = t.State, CreateDate = t.CreateDate, Type = t.Type, ProcessCode = t.ProcessCode }) .MergeTable() .Where(it => it.index2 == 1) .Where(r => r.UserId == userId) .OrderByDescending(r => r.CreateDate) .Select(r => new { r.Id, r.ProcessTitle, r.ProcessId, r.UnitId, r.UnitName, r.UserId, r.UserName, r.State, r.CreateDate, r.Type, r.ProcessCode, }); var result = query.ToPageList(pageReq.page, pageReq.limit); totalCount = query.Count(); return new PageInfo> { Items = result, Total = totalCount }; } /// /// 获取我的传阅任务列表 /// /// 分页参数 /// 查询参数 /// public async Task>> GetMyReadPageList(PageReq pageReq, WFProcessSearchDto searchParams, string category) { RefAsync totalCount = 0; var userId = _auth.GetUserId(); var expression = Expressionable.Create() .And(t => t.UserId == userId) .And(t => t.Type == 2) .AndIF(!string.IsNullOrEmpty(searchParams.Keyword), t => t.ProcessTitle.Contains(searchParams.Keyword) || t.UnitName.Contains(searchParams.Keyword)) .AndIF(!string.IsNullOrEmpty(searchParams.Code), t => t.ProcessCode == searchParams.Code) .AndIF(searchParams.StartDate != null && searchParams.EndDate != null, t => t.CreateDate >= searchParams.StartDate && t.CreateDate <= searchParams.EndDate); var list = await client.Queryable() .Where(expression.ToExpression()) .LeftJoin((t, p) => t.ProcessId == p.Id) .LeftJoin((t, p, s) => p.SchemeId == s.Id) .LeftJoin((t, p, s, i) => s.SchemeInfoId == i.Id) .WhereIF(!string.IsNullOrEmpty(category), (t, p, s, i) => i.Category == category) .OrderByDescending((t, p, s, i) => t.CreateDate) .ToPageListAsync(pageReq.page, pageReq.limit, totalCount); return new PageInfo> { Items = list, Total = totalCount }; } /// /// 获取我的委托任务列表 /// /// 分页参数 /// 查询参数 /// public async Task>> GetMyDelegatePageList(PageReq pageReq, WFProcessSearchDto searchParams, string category) { RefAsync totalCount = 0; var pageInfo = new PageInfo>(); string userId = _auth.GetUserId(); DateTime datetime = DateTime.Now; var expression = Expressionable.Create(); var delegateList = await client.Queryable() .Where(t => t.ToUserId == userId && t.BeginDate >= datetime && t.EndDate <= datetime && t.Type == 0) .ToListAsync(); if (delegateList.Count == 0) { pageInfo.Total = 0; return pageInfo; } foreach (var item in delegateList) { var relationList = await client.Queryable() .Where(a => a.DelegateRuleId == item.Id).ToListAsync(); string relation = ""; foreach (var relationItem in relationList) { relation += $"'{relationItem.SchemeInfoId}'"; } expression = expression.Or(t => t.UserId == item.CreateUserId && relation.Contains("'" + t.ProcessCode + "'")); } var exp = Expressionable.Create() .And(t => t.UserId != userId) .And(t => t.State == 1) .And(t => t.Type != 2) .AndIF(!string.IsNullOrEmpty(searchParams.Keyword), t => t.ProcessTitle.Contains(searchParams.Keyword) || t.UnitName.Contains(searchParams.Keyword)) .AndIF(!string.IsNullOrEmpty(searchParams.Code), t => t.ProcessCode == searchParams.Code) .AndIF(searchParams.StartDate != null && searchParams.EndDate != null, t => t.CreateDate >= searchParams.StartDate && t.CreateDate <= searchParams.EndDate); exp = exp.And(expression.ToExpression()); var list = await client.Queryable() .Where(expression.ToExpression()) .LeftJoin((t, p) => t.ProcessId == p.Id) .LeftJoin((t, p, s) => p.SchemeId == s.Id) .LeftJoin((t, p, s, i) => s.SchemeInfoId == i.Id) .WhereIF(!string.IsNullOrEmpty(category), (t, p, s, i) => i.Category == category) .OrderByDescending((t, p, s, i) => t.CreateDate) .ToPageListAsync(pageReq.page, pageReq.limit, totalCount); return new PageInfo> { Items = list, Total = totalCount }; } /// /// 获取流程任务实体 /// /// 密钥 /// 用户id /// public async Task GetEntityByToken(string token, string userId) { return await base.Repository.GetFirstAsync(t => t.Token == token && t.UserId == userId && t.State == 1); } /// /// 获取流程任务实体 /// /// 主键 /// public Repository.Domain.WFTask GetEntity(string keyValue) { return base.Repository.GetFirst(a => a.Id == keyValue); } /// /// 获取任务关联的用户 /// /// 主键 /// public List GetUsers(string keyValue) { List users = new List(); var us = client.Queryable().Where(r => r.TaskId == keyValue).ToList(); if (us.Count > 0) { users = us.Select(r => r.UserId).ToList(); } return users; } /// /// 获取任务列表 /// /// 流程实例主键 /// 任务类型 /// 上一个任务Id值 /// public async Task> GetList(string processId, int type, string prevTaskId) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && t.Type == type && t.PrevTaskId == prevTaskId); } /// /// 获取任务列表 /// /// 流程实例主键 /// 上一个任务token值 /// public async Task> GetList(string processId, string prevToken) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && t.PrevToken == prevToken); } /// /// 获取未完成的任务 /// /// 流程进程主键 /// public async Task> GetUnFinishTaskList(string processId) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && t.State == 1 && (t.Type == 1 || t.Type == 2 || t.Type == 3 || t.Type == 4 || t.Type == 5 || t.Type == 6||t.Type==7)); } /// /// 获取等待任务列表(用于网关判断是否所有支路都执行完毕) /// /// 流程实例Id /// 流程单元节点Id /// public async Task> GetAwaitTaskList(string processId, string unitId) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && t.UnitId == unitId && t.Type == 21 && t.State == 1); } /// /// 获取最近的任务 /// /// 流程实例Id /// 流程单元节点Id /// public async Task> GetLastTaskList(string processId, string unitId) { return await client.Queryable() .Where(t => t.ProcessId == processId && t.UnitId == unitId && t.IsLast == 1 && (t.Type == 1 || t.Type == 3 || t.Type == 4 || t.Type == 5||t.Type==7)) .OrderBy(t => t.Sort) .ToListAsync(); } /// /// 获取最近的不是驳回产生的任务 /// /// 流程实例Id /// 流程单元节点Id /// public Task GetLastNotRejectTask(string processId, string unitId) { return null; } /// /// 获取最近的完成任务 /// /// 流程实例Id /// 流程单元节点Id /// public async Task> GetLastFinishTaskList(string processId, string unitId) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && t.UnitId == unitId && (t.Type == 1||t.Type==7) && t.IsLast == 1 && t.State == 3); } /// /// 获取完成任务 /// /// 流程实例Id /// public async Task> GetFinishTaskList(string processId, List ids) { return await base.Repository.GetListAsync(t => t.ProcessId == processId && !ids.Contains(t.Id)); } /// /// 获取节点任务的最大人数 /// /// 流程实例Id /// 流程单元节点Id /// public Task GetTaskUserMaxNum(string processId, string unitId) { return null; } /// /// 保存任务 /// /// 任务日志 public async Task> Add(Repository.Domain.WFTask wfTaskEntity) { wfTaskEntity.CreateDate = DateTime.Now; wfTaskEntity.CreateUserId = _auth.GetUserId(); wfTaskEntity.CreateUserName = _auth.GetUserName(); wfTaskEntity.Id = Guid.NewGuid().ToString(); wfTaskEntity.IsLast = 1; var flag = await base.Repository.InsertAsync(wfTaskEntity); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 更新任务状态 /// /// /// /// public async Task> Update(string processId, string unitId) { var flag = await base.Repository.UpdateSetColumnsTrueAsync(a => new Repository.Domain.WFTask { IsLast = 0 }, a => a.ProcessId == processId && a.UnitId == unitId); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 更新任务 /// /// 任务日志 public Response Update(Repository.Domain.WFTask wfTaskEntity) { var flag = base.Repository.Update(wfTaskEntity); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 关闭任务 /// /// 流程主键 /// 任务令牌 /// 任务id(除去该任务不关闭) /// public async Task> CloseTask(string processId, string token, string taskId = "") { var expression = Expressionable.Create() .And(t => t.ProcessId == processId && t.Token == token) .AndIF(!string.IsNullOrEmpty(taskId), t => t.Id != taskId).ToExpression(); var flag = await base.Repository.UpdateSetColumnsTrueAsync(t => new Repository.Domain.WFTask { State = 4 }, expression); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 关闭任务 /// /// 流程进程 /// 单元节点id /// 任务类型 /// 任务id /// public async Task> CloseTask(string processId, string unitId, int type, string taskId) { var flag = await base.Repository.UpdateSetColumnsTrueAsync( t => new Repository.Domain.WFTask { State = 4, UpdateTaskId = taskId }, t => t.ProcessId == processId && t.UnitId == unitId && t.Type == type); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 打开任务 /// /// 流程进程 /// 单元节点id /// 任务类型 /// 任务id /// public async Task> OpenTask(string processId, string unitId, int type, string taskId) { var flag = await base.Repository.UpdateSetColumnsTrueAsync( t => new Repository.Domain.WFTask { State = 1, UpdateTaskId = taskId }, t => t.ProcessId == processId && t.UnitId == unitId && t.Type == type); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 删除任务 /// /// 流程进程 /// public async Task> Delete(string processId) { var flag = await base.Repository.DeleteAsync(t => t.ProcessId == processId); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 删除任务 /// /// 流程进程 /// 来源任务ID /// public async Task> Delete(string processId, string prevTaskId) { var flag = await base.Repository.DeleteAsync(t => t.ProcessId == processId && t.PrevTaskId == prevTaskId); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 删除任务 /// /// 任务主键 /// public async Task> DeleteByFirstId(string id) { var flag = await base.Repository.DeleteAsync(t => t.FirstId == id); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 作废任务 /// /// 流程进程 /// public async Task> VirtualDelete(string processId) { var flag = await base.Repository.UpdateSetColumnsTrueAsync(t => new Repository.Domain.WFTask { State = 7 }, t => t.ProcessId == processId && t.State == 1); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } #endregion #region 日志 /// /// 获取流程进程的任务处理日志 /// /// 流程进程主键 /// public async Task> GetLogList(string processId) { return await client.Queryable().Where(a => a.ProcessId == processId).OrderBy(r => r.CreateDate) .ToListAsync(); } /// /// 获取任务日志列表 /// /// 流程实例Id /// 流程单元节点Id /// public async Task> GetLogList(string processId, string unitId) { return await client.Queryable().Where(a => a.ProcessId == processId && a.UnitId == unitId) .OrderByDescending(t => t.CreateDate).ToListAsync(); } /// /// 获取任务日志列表 /// /// 任务Id /// public async Task GetLogEntity(string taskId) { return await client.Queryable().Where(t => t.TaskId == taskId).FirstAsync(); } /// /// 更新任务日志状态为不是最近处理的 /// /// /// /// public async Task> UpdateLog(string processId, string unitId) { var userId = _auth.GetUserId(); var count = await client.Updateable() .SetColumns(a => new WFTaskLog() { IsLast = 0 }) .Where(a => a.ProcessId == processId && a.UnitId == unitId && a.IsLast == 1 && a.UserId == userId) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 关闭任务日志撤销 /// /// 流程主键 /// 任务主键 /// public async Task> CloseTaskLogCancel(string processId, string taskId) { var count = await client.Updateable() .SetColumns(a => new WFTaskLog() { IsCancel = 0 }) .Where(a => a.ProcessId == processId && a.TaskId == taskId) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 关闭任务日志撤销 /// /// 流程任务Id /// public async Task> CloseTaskLogCancel(string taskId) { var count = await client.Updateable() .SetColumns(a => new WFTaskLog() { IsCancel = 0 }) .Where(a => a.TaskId == taskId) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 保存任务日志 /// /// 任务日志 public async Task> AddLog(WFTaskLog wfTaskLogEntity) { wfTaskLogEntity.CreateDate = DateTime.Now; wfTaskLogEntity.UserId = _auth.GetUserId(); wfTaskLogEntity.UserName = _auth.GetUserNickName(); wfTaskLogEntity.Id = Guid.NewGuid().ToString(); var count = await client.Insertable(wfTaskLogEntity).ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 删除任务日志 /// /// 流程进程 /// public async Task> DeleteLog(string processId) { var count = await client.Deleteable() .Where(a => a.ProcessId == processId) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 删除任务日志 /// /// 流程进程 /// 来源任务密钥 /// public async Task> DeleteLog(string processId, string taskId) { var count = await client.Deleteable() .Where(a => a.ProcessId == processId && a.TaskId == taskId && a.IsLast == 1) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } /// /// 删除任务日志 /// /// 任务主键 /// public async Task> DeleteLogByTaskId(string taskId) { var count = await client.Deleteable() .Where(a => a.TaskId == taskId) .ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } #endregion public Repository.Domain.WFTask GetNodeByProcessId(string id) { return Repository.GetFirst(a => a.ProcessId == id); } public void OriginalAdd(Repository.Domain.WFTask node) { Repository.AsInsertable(node).IgnoreColumnsNull().ExecuteCommand(); } } }