Browse Source

二次办理统计

田爽 11 months ago
parent
commit
b2866cf9e0

+ 43 - 8
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1992,7 +1992,7 @@ namespace Hotline.Api.Controllers.Bi
              {
                  OrgCode = d.OrgCode,
                  // OrderCountNum = 0,//总量
-                 YBOrderCountNum = 0,//已办
+                 YBOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status >= EWorkflowStepStatus.Handled, 1, 0)),//已办
                  ZBOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status < EWorkflowStepStatus.Handled, 1, 0)),// 0,//在办
                  Archived = 0,
                  ToBeArchived = 0,
@@ -2228,6 +2228,9 @@ namespace Hotline.Api.Controllers.Bi
             switch (dto.StatisticsType)
             {
                 case EStatisticsType.YBOrderCountNum:
+                    //工单
+                    stye = "0";
+                    break;
                 case EStatisticsType.ToBeArchived:
                 case EStatisticsType.Archived:
                 case EStatisticsType.YBOverdue:
@@ -2273,6 +2276,41 @@ namespace Hotline.Api.Controllers.Bi
                 default:
                     break;
             }
+            #region 工单已办
+            if (stye == "0")
+            {
+                var ybQuery = _orderRepository.Queryable()
+                                  .Where(it => it.CreationTime >= dto.StartDate && it.CreationTime <= dto.EndDate && it.Status > EOrderStatus.WaitForAccept)
+                                  .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
+                                  .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                                 .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, it => it.Status >= EOrderStatus.Filed)//已办
+                                 .Select(it => new SelectOrderId { Id = it.Id })
+                                 .MergeTable();
+
+                var hqybquery = _workflowStepHandleRepository.Queryable()
+                  .LeftJoin<WorkflowTrace>((x, o) => x.WorkflowStepId == o.StepId)
+                  .LeftJoin<Order>((x, o, p) => o.WorkflowId == p.WorkflowId)
+                  .Where((x, o, p) => o.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartDate && o.CreationTime <= dto.EndDate)
+                  .WhereIF(dto.OrgCode == "001", (x, o, p) => x.OrgId == dto.OrgCode)
+                  .WhereIF(dto.OrgCode != "001", (x, o, p) => x.OrgId.StartsWith(dto.OrgCode))
+                  .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, (x, o, p) => o.Status >= EWorkflowStepStatus.Handled && o.CountersignPosition > ECountersignPosition.None)//会签已办
+                   .Select((x, o, p) => new SelectOrderId { Id = p.Id })
+                  .MergeTable();
+
+                var queryData = await _orderRepository.OrderListUnionAll(ybQuery, hqybquery)
+                        .LeftJoin<Order>((x, o) => x.Id == o.Id)
+                         .Select((x, o) => new { o })
+                        .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
+
+                var dtos = queryData.Select(d =>
+                {
+                    var dto = _mapper.Map<OrderDto>(d.o);
+                    return dto;
+                }).ToList();
+
+                return new PagedDto<OrderDto>(total, dtos);
+            }
+            #endregion
 
             #region 工单
             if (stye == "1")
@@ -2282,12 +2320,9 @@ namespace Hotline.Api.Controllers.Bi
                           .Where(it => it.CreationTime >= dto.StartDate && it.CreationTime <= dto.EndDate && it.Status > EOrderStatus.WaitForAccept)
                           .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
                           .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
-                         .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, it => it.Status >= EOrderStatus.Filed)//已办
-                           .WhereIF(dto.StatisticsType == EStatisticsType.ZBOrderCountNum, it => it.Status < EOrderStatus.Filed)//在办
                            .WhereIF(dto.StatisticsType == EStatisticsType.Archived, it => it.Status >= EOrderStatus.Filed)//已归档
                             .WhereIF(dto.StatisticsType == EStatisticsType.ToBeArchived, it => it.Status < EOrderStatus.WaitForAccept)//待归档--没得待归档数据
                            .WhereIF(dto.StatisticsType == EStatisticsType.YBOverdue, it => it.Status >= EOrderStatus.Filed && it.ActualHandleTime > it.ExpiredTime)//已办超期
-                           .WhereIF(dto.StatisticsType == EStatisticsType.ZBOverdue, it => it.Status < EOrderStatus.Filed && it.ExpiredTime < SqlFunc.GetDate())//待办超期
                            .OrderByDescending(it => it.CreationTime)
                            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
                 return new PagedDto<OrderDto>(totalOrder, _mapper.Map<IReadOnlyList<OrderDto>>(items));
@@ -2329,7 +2364,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Where((x, o) => x.CreationTime >= dto.StartDate && x.CreationTime <= dto.EndDate)
                 .WhereIF(dto.OrgCode == "001", (x, o) => x.ApplyOrgCode == dto.OrgCode)
                 .WhereIF(dto.OrgCode != "001", (x, o) => x.ApplyOrgCode.StartsWith(dto.OrgCode))
-              .WhereIF(dto.StatisticsType == EStatisticsType.OrderDelayCount, (x, o) => x.DelayState== EDelayState.Pass)//延期次数
+              .WhereIF(dto.StatisticsType == EStatisticsType.OrderDelayCount, (x, o) => x.DelayState == EDelayState.Pass)//延期次数
                 .OrderByDescending((x, o) => o.CreationTime)
                 .Select((x, o) => new { o })
                 .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
@@ -2761,7 +2796,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Where((x, w, wfsh, su) => x.CreationTime <= dto.EndTime.Value)
                 .GroupBy((x, w, wfsh, su) => x.WorkflowId)
                 .Having((x, w, wfsh, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-                .Select((x, w, wfsh, su) => new { Id = x.WorkflowId , CreationTime = SqlFunc.AggregateMin(wfsh.CreationTime) })
+                .Select((x, w, wfsh, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(wfsh.CreationTime) })
                 .MergeTable()
                 .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
                 .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
@@ -2833,12 +2868,12 @@ namespace Hotline.Api.Controllers.Bi
                        .Where((x, w, wfsh, su) => x.CreationTime <= dto.EndTime.Value)
                        .GroupBy((x, w, wfsh, su) => x.WorkflowId)
                        .Having((x, w, wfsh, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-						.Select((x, w, wfsh, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(wfsh.CreationTime) })
+                        .Select((x, w, wfsh, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(wfsh.CreationTime) })
                        .MergeTable()
                        .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
                        .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
                        .LeftJoin<WorkflowStepHandler>((a, wt, wf, wsh) => wt.StepId == wsh.WorkflowStepId && wsh.CreationTime == a.CreationTime)
-					   .InnerJoin<SchedulingUser>((a, wt, wf, wsh, su) => wsh.UserId == su.UserId)
+                       .InnerJoin<SchedulingUser>((a, wt, wf, wsh, su) => wsh.UserId == su.UserId)
                        .Where((a, wt, wf, wsh, su) => su.UserId == dto.UserId)
                        .GroupBy((a, wt, wf, wsh, su) => wf.ExternalId)
                        .Select((a, wt, wf, wsh, su) => new { Id = wf.ExternalId })

+ 8 - 3
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -50,7 +50,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
     private readonly IKnowledgeWorkFlowRepository _knowledgeWorkFlowRepository;
     private readonly IRepository<TrCallRecord> _trCallRecordRepository;
     private readonly IQualityApplication _qualityApplication;
-    private readonly IEnforcementApplication _enforcementApplication; 
+    private readonly IEnforcementApplication _enforcementApplication;
     private readonly ISessionContext _sessionContext;
 
     public WorkflowEndHandler(
@@ -163,7 +163,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                 order.FileUserOrgName = notification.Trace.HandlerOrgName;
 
                 //记录冗余归档数据
-                if(notification.Workflow.Steps.Any(x => x.BusinessType == Share.Enums.FlowEngine.EBusinessType.Send))
+                if (notification.Workflow.Steps.Any(x => x.BusinessType == Share.Enums.FlowEngine.EBusinessType.Send))
                 {
                     order.FileUserRole = EFileUserType.Dispatch;
                 }
@@ -175,7 +175,10 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                 {
                     order.FileUserRole = EFileUserType.Org;
                 }
-                               
+
+                //是否已解决
+                order.IsResolved = notification.External.IsResolved;
+
                 await _orderRepository.UpdateAsync(order, cancellationToken);
                 var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, cancellationToken);
                 var orderFlowDto = new OrderFlowDto
@@ -187,6 +190,8 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                 {
                     orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
                 }
+                //这里需要判断是否是警情退回
+                orderFlowDto.IsNonPoliceReturn = notification.External.IsPoliceReturn;
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
                 //写入质检  针对受理之后直接结束的工单
                 await _qualityApplication.AddQualityAsync(EQualitySource.Accepted, order.Id, cancellationToken);

+ 10 - 1
src/Hotline.Share/Dtos/FlowEngine/BasicWorkflowDto.cs

@@ -63,11 +63,20 @@ public class BasicWorkflowDto : EndWorkflowDto
     /// 审核结果(非审批流程无意义)
     /// </summary>
     public EReviewResult ReviewResult { get; set; }
-
 }
 
 public class External
 {
     public int? TimeLimit { get; set; }
     public ETimeType? TimeLimitUnit { get; set; }
+
+    /// <summary>
+    /// 警情退回
+    /// </summary>
+    public bool IsPoliceReturn { get; set; }
+
+    /// <summary>
+    /// 部门是否解决
+    /// </summary>
+    public bool IsResolved { get; set; }
 }

+ 6 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -436,6 +436,12 @@ namespace Hotline.Share.Dtos.Order
 
         public string IsProvinceText => IsProvince ? "省工单" : "市工单";
 
+        /// <summary>
+        /// 部门是否解决
+        /// </summary>
+        public bool IsResolved { get; set; }
+        public string IsResolvedText => IsResolved ? "已解决" : "未解决";
+
     }
 
     public class UpdateOrderDto : AddOrderDto

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderFlowDto.cs

@@ -34,5 +34,10 @@ namespace Hotline.Share.Dtos.Order
         public int HandlerOrgLevel { get; set; }
 
         public TrCallDto? TrCallRecordDto { get; set; }
+
+        /// <summary>
+        /// 非警情退回
+        /// </summary>
+        public bool IsNonPoliceReturn { get; set; }
     }
 }

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.72</Version>
+    <Version>1.0.73</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 1 - 1
src/Hotline/FlowEngine/Notifications/WorkflowNotify.cs

@@ -36,7 +36,7 @@ public record RedoNotify(Workflow Workflow, RecallDto Dto, bool IsOrgToCenter) :
 ///// </summary>
 //public record RejectNotify(Workflow Workflow, BasicWorkflowDto Dto) : INotification;
 
-public record EndWorkflowNotify(Workflow Workflow, WorkflowTrace Trace) : INotification;
+public record EndWorkflowNotify(Workflow Workflow, WorkflowTrace Trace, External External) : INotification;
 
 public record TerminalWorkflowNotify(Workflow Workflow) : INotification;
 

+ 2 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -104,7 +104,7 @@ namespace Hotline.FlowEngine.Workflows
             ISessionContext current, CancellationToken cancellationToken)
         {
             //1. 创建first节点 (和trace)2.办理开始节点 
-            
+
             if (firstStepDefine.StepType is EStepType.End)
             {
                 //firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
@@ -1196,7 +1196,7 @@ namespace Hotline.FlowEngine.Workflows
 
             await _workflowRepository.UpdateAsync(workflow, cancellationToken);
 
-            await _mediator.Publish(new EndWorkflowNotify(workflow, endTrace), cancellationToken);
+            await _mediator.Publish(new EndWorkflowNotify(workflow, endTrace, dto.External), cancellationToken);
 
             return endTrace;
         }

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

@@ -728,6 +728,12 @@ namespace Hotline.Orders
         /// 是否行政执法类
         /// </summary>
         public bool? IsEnforcementOrder { get; set; }
+
+        /// <summary>
+        /// 部门是否解决
+        /// </summary>
+        [SugarColumn(DefaultValue = "f")]
+        public bool IsResolved { get; set; }
     }
 
 	public partial class Order