Ver código fonte

增加批量审批甄别

tangjiang 1 semana atrás
pai
commit
07ec320576

+ 99 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -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>

+ 27 - 9
src/Hotline.Share/Dtos/FlowEngine/Workflow/NextWorkflowDto.cs

@@ -29,15 +29,33 @@ public class NextWorkflowDto<TData>
     public NextWorkflowDto Workflow { get; set; }
 }
 
-public class OrderScreenNextWorkflowDto : NextWorkflowDto {
+public class OrderScreenNextWorkflowDto : NextWorkflowDto
+{
+
+    /// <summary>
+    /// 省附件
+    /// </summary>
+    public List<FileDto> ProvinceFiles { get; set; } = new();
 
-	/// <summary>
-	/// 省附件
-	/// </summary>
-	public List<FileDto> ProvinceFiles { get; set; } = new();
+    /// <summary>
+    /// 甄别申请id
+    /// </summary>
+    public string ScreenId { get; set; }
+}
 
-	/// <summary>
-	/// 甄别申请id
-	/// </summary>
-	public string ScreenId { get; set; } 
+public class BatchScreenNextFlowDto
+{
+    /// <summary>
+    /// 省附件
+    /// </summary>
+    public List<FileDto> ProvinceFiles { get; set; } = new();
+
+    public string[] ScreenId { get; set; }
+
+    public NextWorkflowDto NextWorkflow { get; set; }
+
+    /// <summary>
+    /// 是否通过
+    /// </summary>
+    public bool IsPass { get; set; }
 }