xf 1 year ago
parent
commit
e85d4da1c8
1 changed files with 46 additions and 18 deletions
  1. 46 18
      src/Hotline.Api/Controllers/WorkflowController.cs

+ 46 - 18
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -455,24 +455,52 @@ public class WorkflowController : BaseController
         return _mapper.Map<WorkflowDto>(workflow);
     }
 
-    ///// <summary>
-    ///// 查询被督办/催办部门
-    ///// </summary>
-    ///// <param name="workflowId"></param>
-    ///// <returns></returns>
-    //[HttpGet("{workflowId}/urge")]
-    //public async Task<IReadOnlyList<IdName>> GetUrgeOrgs(string workflowId)
-    //{
-    //    var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
-    //    var stepBoxes = workflow.StepBoxes.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End).ToList();
-    //    var steps = stepBoxes.SelectMany(d => d.Steps);
-
-    //    var orgs = new List<IdName>();
-    //    foreach (var step in steps)
-    //    {
-    //        var orgCode = step.OrgCode ?? step.AcceptOrgCode;
-    //    }
-    //}
+    /// <summary>
+    /// 查询被督办/催办部门
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpGet("{workflowId}/urge")]
+    public async Task<IReadOnlyList<IdName>> GetUrgeOrgs(string workflowId)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: HttpContext.RequestAborted);
+        var stepBoxes = workflow.StepBoxes.Where(d => d.StepType != EStepType.Start && d.StepType != EStepType.End).ToList();
+        var steps = stepBoxes.SelectMany(d => d.Steps);
+
+        var orgs = new List<IdName>();
+        foreach (var step in steps)
+        {
+            var orgCode = step.OrgCode ?? step.AcceptOrgCode;
+            var orgName = step.OrgName ?? step.AcceptOrgName;
+            if (string.IsNullOrEmpty(orgCode))
+            {
+                switch (step.HandlerType)
+                {
+                    case EHandlerType.Role:
+                    case EHandlerType.AssignUser:
+                        //todo
+                        var users = await _userRepository.Queryable()
+                            .Includes(d => d.Organization)
+                            .Where(d => step.Handlers.Select(x => x.Id).Contains(d.Id))
+                            .ToListAsync(HttpContext.RequestAborted);
+                        orgs.AddRange(users.Select(d => new IdName(d.OrgCode, d.Organization.OrgName)));
+                        break;
+                    case EHandlerType.OrgLevel:
+                    case EHandlerType.OrgType:
+                    case EHandlerType.AssignOrg:
+                        orgs.AddRange(step.Handlers);
+                        break;
+                    default:
+                        throw new ArgumentOutOfRangeException();
+                }
+            }
+            else
+            {
+                orgs.Add(new IdName(orgCode, orgName));
+            }
+        }
+        return orgs.DistinctBy(d=>d.Id).ToList();
+    }
 
     [HttpGet("base-data")]
     public async Task<dynamic> BaseData()