|
@@ -1,4 +1,5 @@
|
|
-using Hotline.File;
|
|
|
|
|
|
+using Dm;
|
|
|
|
+using Hotline.File;
|
|
using Hotline.FlowEngine.Definitions;
|
|
using Hotline.FlowEngine.Definitions;
|
|
using Hotline.FlowEngine.Notifications;
|
|
using Hotline.FlowEngine.Notifications;
|
|
using Hotline.FlowEngine.WorkflowModules;
|
|
using Hotline.FlowEngine.WorkflowModules;
|
|
@@ -571,11 +572,22 @@ namespace Hotline.FlowEngine.Workflows
|
|
}
|
|
}
|
|
|
|
|
|
//update trace
|
|
//update trace
|
|
- var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep,
|
|
|
|
- applicantId, applicantName,
|
|
|
|
|
|
+ //var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep,
|
|
|
|
+ // applicantId, applicantName,
|
|
|
|
+ // applicantOrgId, applicantOrgName,
|
|
|
|
+ // applicantOrgAreaCode, applicantOrgAreaName,
|
|
|
|
+ // applicantIsCenter, cancellationToken);
|
|
|
|
+ var trace = workflow.Traces.First(t => t.StepId == currentStep.Id);
|
|
|
|
+ _mapper.Map(dto, trace);
|
|
|
|
+
|
|
|
|
+ //HandleTrace(trace, dto.Opinion, current);
|
|
|
|
+
|
|
|
|
+ trace.Handle(applicantId, applicantName,
|
|
applicantOrgId, applicantOrgName,
|
|
applicantOrgId, applicantOrgName,
|
|
applicantOrgAreaCode, applicantOrgAreaName,
|
|
applicantOrgAreaCode, applicantOrgAreaName,
|
|
- applicantIsCenter, cancellationToken);
|
|
|
|
|
|
+ applicantIsCenter, dto.Opinion);
|
|
|
|
+
|
|
|
|
+ //await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
|
|
|
|
|
|
//复制上一个节点为待接办
|
|
//复制上一个节点为待接办
|
|
var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
|
|
var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
|
|
@@ -959,14 +971,14 @@ namespace Hotline.FlowEngine.Workflows
|
|
/// </summary>
|
|
/// </summary>
|
|
public async Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine,
|
|
public async Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine,
|
|
FlowAssignInfo flowAssignInfo, DateTime? expiredTime,
|
|
FlowAssignInfo flowAssignInfo, DateTime? expiredTime,
|
|
- ISessionContext current, CancellationToken cancellationToken)
|
|
|
|
|
|
+ CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
|
|
var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
|
|
if (targetStep is null)
|
|
if (targetStep is null)
|
|
throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
|
|
throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
|
|
|
|
|
|
//update uncompleted traces
|
|
//update uncompleted traces
|
|
- await RecallTraceAsync(workflow.Id, dto.Opinion, current, cancellationToken);
|
|
|
|
|
|
+ //await RecallTraceAsync(workflow.Traces, dto.Opinion, _sessionContext, cancellationToken);
|
|
|
|
|
|
var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
|
|
var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
|
|
EWorkflowTraceType.Recall, expiredTime, cancellationToken);
|
|
EWorkflowTraceType.Recall, expiredTime, cancellationToken);
|
|
@@ -982,10 +994,10 @@ namespace Hotline.FlowEngine.Workflows
|
|
public async Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
|
|
public async Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
//todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
|
|
//todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
|
|
- var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
|
|
|
|
|
|
+ var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true,
|
|
cancellationToken: cancellationToken);
|
|
cancellationToken: cancellationToken);
|
|
//update uncompleted traces
|
|
//update uncompleted traces
|
|
- await RecallTraceAsync(workflow.Id, opinion, current, cancellationToken);
|
|
|
|
|
|
+ await RecallTraceAsync(workflow.Traces, opinion, current, cancellationToken);
|
|
|
|
|
|
var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
|
|
workflow.Steps.RemoveAll(d => true);
|
|
workflow.Steps.RemoveAll(d => true);
|
|
@@ -1886,27 +1898,24 @@ namespace Hotline.FlowEngine.Workflows
|
|
// await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
|
|
// await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
|
|
//}
|
|
//}
|
|
|
|
|
|
- private void HandleTrace(WorkflowTrace trace, string opinion, ISessionContext current)
|
|
|
|
- {
|
|
|
|
- trace.Handle(
|
|
|
|
- current.RequiredUserId, current.UserName,
|
|
|
|
- current.RequiredOrgId, current.OrgName,
|
|
|
|
- current.OrgAreaCode, current.OrgAreaName,
|
|
|
|
- current.OrgIsCenter, opinion);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private async Task RecallTraceAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
|
|
|
|
|
|
+ private async Task RecallTraceAsync(List<WorkflowTrace> traces, string opinion, ISessionContext current, CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
//未办理的traces
|
|
//未办理的traces
|
|
- var uncompleteTraces =
|
|
|
|
- await _workflowTraceRepository.QueryAsync(d =>
|
|
|
|
- d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
|
|
|
|
|
|
+ //var uncompleteTraces =
|
|
|
|
+ // await _workflowTraceRepository.QueryAsync(d =>
|
|
|
|
+ // d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
|
|
|
|
+
|
|
|
|
+ var uncompleteTraces = traces.Where(d => d.Status != EWorkflowStepStatus.Handled).ToList();
|
|
|
|
|
|
if (uncompleteTraces.Any())
|
|
if (uncompleteTraces.Any())
|
|
{
|
|
{
|
|
foreach (var trace in uncompleteTraces)
|
|
foreach (var trace in uncompleteTraces)
|
|
{
|
|
{
|
|
- HandleTrace(trace, opinion, current);
|
|
|
|
|
|
+ trace.Handle(
|
|
|
|
+ current.RequiredUserId, current.UserName,
|
|
|
|
+ current.RequiredOrgId, current.OrgName,
|
|
|
|
+ current.OrgAreaCode, current.OrgAreaName,
|
|
|
|
+ current.OrgIsCenter, opinion);
|
|
}
|
|
}
|
|
|
|
|
|
await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
|
|
await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
|
|
@@ -2021,6 +2030,24 @@ namespace Hotline.FlowEngine.Workflows
|
|
DateTime? expiredTime, CancellationToken cancellationToken)
|
|
DateTime? expiredTime, CancellationToken cancellationToken)
|
|
{
|
|
{
|
|
var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
|
|
var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
|
|
|
|
+ var updateTraces = new List<WorkflowTrace>();
|
|
|
|
+
|
|
|
|
+ //update uncomplete traces
|
|
|
|
+ var uncompleteTraces = workflow.Traces.Where(d => d.Status != EWorkflowStepStatus.Handled).ToList();
|
|
|
|
+ if (uncompleteTraces.Any())
|
|
|
|
+ {
|
|
|
|
+ foreach (var trace in uncompleteTraces)
|
|
|
|
+ {
|
|
|
|
+ trace.Handle(
|
|
|
|
+ _sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
|
+ _sessionContext.RequiredOrgId, _sessionContext.OrgName,
|
|
|
|
+ _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
|
|
|
|
+ _sessionContext.OrgIsCenter, dto.Opinion);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
|
|
|
|
+ updateTraces.AddRange(uncompleteTraces);
|
|
|
|
+ }
|
|
|
|
|
|
//get targetStep's previous
|
|
//get targetStep's previous
|
|
WorkflowStep? targetPrevStep = null;
|
|
WorkflowStep? targetPrevStep = null;
|
|
@@ -2043,10 +2070,17 @@ namespace Hotline.FlowEngine.Workflows
|
|
|
|
|
|
//更新快照对应节点状态
|
|
//更新快照对应节点状态
|
|
var stepIds = removeSteps.Select(d => d.Id).ToList();
|
|
var stepIds = removeSteps.Select(d => d.Id).ToList();
|
|
- var updateTraces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
|
|
|
|
- await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByRecall, cancellationToken);
|
|
|
|
|
|
+ var traces = workflow.Traces.Where(d => stepIds.Contains(d.StepId)).ToList();
|
|
|
|
+ //await UpdateTracesStateAsync(updateTraces, EWorkflowTraceState.StepRemoveByRecall, cancellationToken);
|
|
|
|
+ foreach (var trace in traces)
|
|
|
|
+ {
|
|
|
|
+ trace.TraceState = EWorkflowTraceState.StepRemoveByRecall;
|
|
|
|
+ }
|
|
|
|
+ updateTraces.AddRange(traces);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ await _workflowTraceRepository.UpdateRangeAsync(updateTraces, cancellationToken);
|
|
|
|
+
|
|
workflow.EndCountersign();
|
|
workflow.EndCountersign();
|
|
workflow.ResetOption();
|
|
workflow.ResetOption();
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|
|
if (workflow.Status is EWorkflowStatus.Completed)
|