/// <summary> /// 每次审核办理执行 /// </summary> /// <param name="input"></param> public void CompleteTask(CompleteTaskInput <UpdateQualityProblemInput> input) { var authInfo = _authInfoProvider.GetCurrent(); var userId = authInfo?.User?.Id; var task = _taskProvider.GetTask(input.Id); if (task.Assignee != userId.Value.ToString()) { throw new AppCoreException($"id:为{userId.Value}的用户不是任务【{task.NodeName}】的委托人"); } var processDefinition = _definitionProvder.Get(task.ProcessDefinitionId); var editableFields = ((UserTaskNode)processDefinition.GetNode(task.NodeUid)).GetEditableFields(); if (input.Data != null) { var project = input.Data.MapTo <QualityProblem>(); if (editableFields == null) { _problemRepository.Update(project, new System.Linq.Expressions.Expression <Func <QualityProblem, object> >[] { u => u.State, u => u.Mid, u => u.ProcessInstanceId }, false); } else { _problemRepository.Update(project, editableFields.ToArray()); } } if (!input.PreventCommit) { _taskProvider.Complete(input.Id, input.Comment); } }
public void CompleteTask(CompleteTaskInput <UpdateRecordInput> input) { NullableHelper.SetNull(input.Data); var authInfo = _authInfoProvider.GetCurrent(); var userId = authInfo?.User?.Id; var task = _taskProvider.GetTask(input.Id); if (task.Assignee != userId.Value.ToString()) { throw new AppCoreException($"id:为{userId.Value}的用户不是任务【{task.NodeName}】的委托人"); } var processDefinition = _definitionProvder.Get(task.ProcessDefinitionId); var editableFields = ((UserTaskNode)processDefinition.GetNode(task.NodeUid)).GetEditableFields(); if (input.Data != null) { var record = input.Data.MapTo <Record>(); var existing = _recordRepository.Get() .Include(u => u.Attachments) .Where(u => u.ProcessInstanceId == task.ProcessInstanceId).FirstOrDefault(); record.Id = existing.Id; if (existing == null) { throw new EntityException("RecordInstanceId", task.ProcessInstanceId, "Record", "不存在"); } if (editableFields == null) { _recordRepository.Update(record, existing, new System.Linq.Expressions.Expression <Func <Record, object> >[] { u => u.DataState, u => u.Mid, u => u.ProcessInstanceId, u => u.ProjectId }, false); } else { _recordRepository.Update(record, editableFields.ToArray()); } } if (!input.PreventCommit) { _taskProvider.Complete(input.Id, input.Comment); } }
public void CompleteTask(CompleteTaskInput input) { var authInfo = _authInfoProvider.GetCurrent(); var userId = authInfo?.User?.Id; var task = _taskProvider.GetTask(input.Id); if (task.Assignee != userId.Value.ToString()) { throw new AppCoreException($"id:为{userId.Value}的用户不是任务【{task.NodeName}】的委托人"); } if (input.FormContents.Count > 0) { _taskProvider.SetFields(input.Id, input.FormContents); } if (!input.PreventCommit) { _taskProvider.Complete(input.Id, input.Comment); } }
public void CompleteTask(CompleteTaskInput <UpdateProjectInput> input) { NullableHelper.SetNull(input.Data); var authInfo = _authInfoProvider.GetCurrent(); var userId = authInfo?.User?.Id; var task = _taskProvider.GetTask(input.Id); if (task.Assignee != userId.Value.ToString()) { throw new AppCoreException($"id:为{userId.Value}的用户不是任务【{task.NodeName}】的委托人"); } var processDefinition = _definitionProvder.Get(task.ProcessDefinitionId); var editableFields = ((UserTaskNode)processDefinition.GetNode(task.NodeUid)).GetEditableFields(); if (input.Data != null) { var project = input.Data.MapTo <Project>(); var existing = _projectRepository.Get() .Include(u => u.Location) .Include(u => u.Members) .Include(u => u.Units).ThenInclude(u => u.Members) .Include(u => u.Attachments) .Where(u => u.ProcessInstanceId == task.ProcessInstanceId).FirstOrDefault(); project.Id = existing.Id; if (existing == null) { throw new EntityException("ProjectInstanceId", task.ProcessInstanceId, "Project", "不存在"); } if (editableFields == null) { using (var transaction = _dbContextProvider.BeginTransaction()) { if (project.Location != null && project.Location.IsTransient()) { project.Location.ProjectId = project.Id; } _projectRepository.Update(project, existing, new System.Linq.Expressions.Expression <Func <Project, object> >[] { u => u.DataState, u => u.Mid, u => u.ProcessInstanceId, u => u.Units, u => u.No }, false); var addedUnits = project.Units.Except(existing.Units, u => u.Id).ToList(); var deletedUnits = existing.Units.Except(project.Units, u => u.Id).ToList(); var updatedUnits = project.Units.Intersect(existing.Units, u => u.Id).ToList(); foreach (var added in addedUnits) { _projectUnitRepository.Add(added); } foreach (var deleted in deletedUnits) { _projectUnitRepository.Delete(deleted); } foreach (var updated in updatedUnits) { var existed = existing.Units.Where(u => u.Id == updated.Id).FirstOrDefault(); _projectUnitRepository.Update(updated, existed, new Expression <Func <ProjectUnit, object> >[] { }, false); } transaction.Commit(); } } else { if (editableFields.Contains("Units")) { var addedUnits = project.Units.Except(existing.Units, u => u.Id).ToList(); var deletedUnits = existing.Units.Except(project.Units, u => u.Id).ToList(); var updatedUnits = project.Units.Intersect(existing.Units, u => u.Id).ToList(); foreach (var added in addedUnits) { _projectUnitRepository.Add(added); } foreach (var deleted in deletedUnits) { _projectUnitRepository.Delete(deleted); } foreach (var updated in updatedUnits) { var existed = existing.Units.Where(u => u.Id == updated.Id).FirstOrDefault(); _projectUnitRepository.Update(updated, existed, new Expression <Func <ProjectUnit, object> >[] { }, false); } editableFields.Remove("Units"); } _projectRepository.Update(project, editableFields.ToArray()); } } if (!input.PreventCommit) { _taskProvider.Complete(input.Id, input.Comment); } }
private void ExecutionLoop(ITaskProvider taskProvider, IRepository repository) { while (true) { status.CurrentTask = null; status.Status = ExecutionStatus.WaitingForTask; engine.SystemResources = systemResources; engine.Repository = wrapperFactory.CreateWrapper(repository); Task task; try { task = taskProvider.GetTask(); if(task == null) continue; } catch (TimeoutException) { (taskProvider as ITaskProviderChannel).Abort(); return; } var interval = taskProvider.QueryNotifyInterval(); using (new Timer( x => OnTimer((Tuple<ITaskProvider, Guid>) x), Tuple.Create(taskProvider, task.Id), TimeSpan.Zero, interval)) { status.CurrentTask = task; status.Status = ExecutionStatus.ProcessingTask; try { using (Perfomance.Trace("GeneralCore::StartExecution()").BindToTrace()) { engine.ExecuteTask(task); } ReportSuccess(taskProvider, task); } catch (TaskRejectedException) { ReportReject(taskProvider, task); } catch (TaskFailedException e) { ReportFailure(taskProvider, task, ErrorSource.Task, e.InnerException); } catch (Exception e) { ReportFailure(taskProvider, task, ErrorSource.Engine, e.InnerException); } } } }
public TaskDto GetTask(int taskId) { var task = _taskProvider.GetTask(taskId); return(ConvertToDto(task)); }