|
@@ -3413,6 +3413,105 @@ public class OrderController : BaseController
|
|
|
await _workflowDomainService.NextAsync(dto, cancellationToken: HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 批量审批甄别
|
|
|
+ /// </summary>
|
|
|
+ [HttpPost("screen/batch_audit")]
|
|
|
+ [LogFilter("批量审批甄别")]
|
|
|
+ public async Task<string> BatchAuditScreen([FromBody] BatchScreenNextFlowDto dto)
|
|
|
+ {
|
|
|
+ var result = new StringBuilder();
|
|
|
+ var fail = 0;
|
|
|
+ var success = 0;
|
|
|
+ var workflow = dto.NextWorkflow;
|
|
|
+ foreach (var item in dto.ScreenId)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var screen = await _orderScreenRepository.Queryable().Includes(x => x.Order).Where(x => x.Id == item)
|
|
|
+ .FirstAsync(HttpContext.RequestAborted);
|
|
|
+ workflow.WorkflowId = screen.WorkflowId;
|
|
|
+ var workflowEntuty = await _workflowDomainService.GetWorkflowAsync(workflow.WorkflowId, withDefine: true, withSteps: true,
|
|
|
+ cancellationToken: HttpContext.RequestAborted);
|
|
|
+ var currentStep = workflowEntuty.Steps.FirstOrDefault(d =>
|
|
|
+ d.Status == EWorkflowStepStatus.WaitForAccept || d.Status == EWorkflowStepStatus.WaitForHandle);
|
|
|
+
|
|
|
+ NextStepsWithOpinionDto<NextStepOption> next = null;
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ next = await _workflowApplication.GetNextStepsAsync(screen.WorkflowId, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ catch (UserFriendlyException e)
|
|
|
+ {
|
|
|
+ if (e.Message.Contains("未找到对应节点"))
|
|
|
+ {
|
|
|
+ result.Append("无权审核:" + screen.No);
|
|
|
+ fail++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (next == null) continue;
|
|
|
+
|
|
|
+ if (!screen.Order.IsProvince)
|
|
|
+ {
|
|
|
+ if (next.Steps.Any(x => x.Value == "省审批"))
|
|
|
+ {
|
|
|
+ next.Steps.Remove(next.Steps.First(x => x.Value == "省审批"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!_sessionContext.OrgIsCenter && currentStep.Name != "中心初审")
|
|
|
+ {
|
|
|
+ if (next.Steps.Any(x => x.Value == "中心终审"))
|
|
|
+ {
|
|
|
+ next.Steps.Remove(next.Steps.First(x => x.Value == "中心终审"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ workflow.StepId = next.StepId;
|
|
|
+ workflow.ReviewResult = dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed;
|
|
|
+
|
|
|
+ if (workflow.ReviewResult == EReviewResult.Approval)
|
|
|
+ {
|
|
|
+ var isBatch = next.Steps.Where(x => x.Value == workflow.NextStepName).Any();
|
|
|
+ if (isBatch)
|
|
|
+ {
|
|
|
+ var step = next.Steps.Where(x => x.Value == workflow.NextStepName).FirstOrDefault();
|
|
|
+ workflow.NextStepCode = step.Key;
|
|
|
+ workflow.NextStepName = step.Value;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ result.Append("无权审核:" + screen.No);
|
|
|
+ fail++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ await _workflowDomainService.NextAsync(workflow, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var reject = workflow.Adapt<RejectDto>();
|
|
|
+ await _workflowApplication.RejectAsync(reject, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ success++;
|
|
|
+ }
|
|
|
+ catch (UserFriendlyException e)
|
|
|
+ {
|
|
|
+ result.Append(e.Message);
|
|
|
+ fail++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $"总共: {dto.ScreenId.Length}, 成功: {success}, 失败: {fail}, 失败原因: {result.ToString()}";
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 甄别审批退回(返回前一节点)
|
|
|
/// </summary>
|