瀏覽代碼

197 【中心待办件】新增特定角色可以协助处理工单的功能

田爽 10 月之前
父節點
當前提交
43ed4e0e33

+ 12 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -3205,7 +3205,18 @@ public class OrderController : BaseController
             dto.StartTimeEnd = dto.StartTimeEnd.Value.AddDays(1).AddSeconds(-1);
 
         var (total, items) = await _orderRepository.Queryable()
-			//.Where(d => d.Workflow.Steps.Any(s => s.Status < EWorkflowStepStatus.Handled && s.HandlerOrgId == OrgSeedData.CenterId))
+            //.LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
+            //.Where((d, step) =>
+            // ((string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)) ||
+            //  (!string.IsNullOrEmpty(d.WorkflowId) &&
+            //   ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
+            //    (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
+            //    (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId))) &&
+            //   ( step.Status != EWorkflowStepStatus.Handled )
+            //  )))
+            //.Where(d => d.Workflow.Steps.Any(s => s.Status < EWorkflowStepStatus.Handled && s.HandlerOrgId == OrgSeedData.CenterId))
+            .LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
+            .Where((d,step)=>step.HandlerOrgId == OrgSeedData.CenterId)
             .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
             .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No!.Contains(dto.No!))

+ 19 - 7
src/Hotline.Api/Controllers/TestController.cs

@@ -587,8 +587,8 @@ public class TestController : BaseController
 
         var workflowIds = orders.Select(d => d.WorkflowId).ToList();
         var workflows = await _workflowRepository.Queryable()
-            .Includes(d=>d.Steps)
-            .Includes(d=>d.Traces)
+            .Includes(d=>d.Steps, x=>x.WorkflowTrace)
+            //.Includes(d=>d.Traces)
             .Where(d => workflowIds.Contains(d.Id))
             .ToListAsync(HttpContext.RequestAborted);
 
@@ -613,11 +613,23 @@ public class TestController : BaseController
                 : 0;
             order.File(now, handleDuration, fileDuration, allDuration);
 
-            var endTrace = workflow.Traces.FirstOrDefault(d => d.StepType == EStepType.End);
-            if(endTrace is null) continue;
-            var trace = workflow.Traces.FirstOrDefault(d => d.Id == endTrace.PrevStepId);
-            if(trace is null) continue;
+            var endStep = workflow.Steps.FirstOrDefault(d => d.StepType == EStepType.End);
+            //var endTrace = workflow.Steps.FirstOrDefault(d => d.WorkflowTrace.StepType == EStepType.End)?.WorkflowTrace;
+            if (endStep is null)
+            {
+                _logger.LogWarning($"endStep 为空, orderNo:{order.No}");
+                continue;
+            }
 
+            var step = workflow.Steps.FirstOrDefault(d => d.Id == endStep.PrevStepId);
+            //var trace = workflow.Steps.FirstOrDefault(d => d.WorkflowTrace.Id == endTrace.PrevStepId)?.WorkflowTrace;
+            if (step is null)
+            {
+                _logger.LogWarning($"step 为空, orderNo:{order.No}");
+                continue;
+            }
+
+            var trace = step.WorkflowTrace;
             order.FileUserId = trace.HandlerId;
             order.FileUserName = trace.HandlerName;
             order.FileUserOrgId = trace.HandlerOrgId;
@@ -645,12 +657,12 @@ public class TestController : BaseController
             updateOrders.Add(order);
 
             //var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, cancellationToken); //由CallAccept改为OtherAccept
-            var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept == order.CallId, HttpContext.RequestAborted);
             var orderFlowDto = new OrderFlowDto
             {
                 Order = _mapper.Map<OrderDto>(order),
                 WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
             };
+            var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept == order.CallId, HttpContext.RequestAborted);
             if (callRecord != null)
             {
                 orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);

+ 1 - 1
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -190,7 +190,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var startTrace = _mapper.Map<WorkflowTrace>(startStep);
         startTrace.StepId = startStep.Id;
         startTrace.TraceType = EWorkflowTraceType.Normal;
-        _mapper.Map(dto, startTrace);
+        //_mapper.Map(dto, startTrace);
         await _workflowTraceRepository.AddAsync(startTrace, cancellationToken);
         workflow.Traces.Add(startTrace);
         startStep.WorkflowTrace = startTrace;

+ 1 - 0
src/Hotline/Orders/Order.cs

@@ -664,6 +664,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 归档意见
         /// </summary>
+        [SugarColumn(ColumnDataType = "varchar(2000)")]
         public string? FileOpinion { get; set; }
 
         #endregion