Browse Source

215 信件状态新增其它状态

田爽 9 months ago
parent
commit
db9a42241a

+ 9 - 17
src/Hotline.Api/Controllers/CommonPController.cs

@@ -156,39 +156,31 @@ namespace Hotline.Api.Controllers
             //今日待办 tasksOkNum
             //var time = DateTime.Parse(tadayTime);
             //工单
-            var order = await _orderRepository.Queryable()
-                .Where(o => SqlFunc.JsonListObjectAny(o.HandlerUsers, "Key", _sessionContext.RequiredUserId) ||
-                            SqlFunc.JsonListObjectAny(o.HandlerOrgs, "Key", _sessionContext.RequiredOrgId))
-                .GroupBy(o => o.Id).MergeTable()
+            var order = await _orderRepository.Queryable(hasHandled: true)
+                .GroupBy(o => new { o.Id,o.Status }).MergeTable()
                 .Select(o => new
                 {
                     aboutExpire = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.NearlyExpiredTime!.Value && DateTime.Now < o.ExpiredTime!.Value,
                         1, 0)),
-                    havExpired = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.ExpiredTime!.Value, 1, 0)),
+                    havExpired = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.ExpiredTime!.Value && o.Status < EOrderStatus.Filed, 1, 0)),
                     countersignHandle = SqlFunc.AggregateSum(SqlFunc.IIF(o.CounterSignType.HasValue, 1, 0)),
                 }).FirstAsync();
             var aboutExpire = order?.aboutExpire ?? 0;
             var havExpired = order?.havExpired ?? 0;
             var countersignHandle = order?.countersignHandle ?? 0;
             //延期
-            var delay = await _orderDelayRepository.Queryable()
-                .Includes(x => x.Workflow)
-                .Where(x => SqlFunc.JsonListObjectAny(x.HandlerUsers, "Key", _sessionContext.RequiredUserId) ||
-                            SqlFunc.JsonListObjectAny(x.HandlerOrgs, "Key", _sessionContext.RequiredOrgId))
-                .Where(x => x.DelayState == EDelayState.Examining).CountAsync();
+            var delay = await _orderDelayRepository.Queryable(hasHandled: true)
+                .Where(d => d.DelayState == EDelayState.Examining).CountAsync();
             //甄别
-            var screenAudit = await _orderScreenRepository.Queryable()
-                .Includes(x => x.Workflow)
-                .Where(x => SqlFunc.JsonListObjectAny(x.HandlerUsers, "Key", _sessionContext.RequiredUserId) ||
-                            SqlFunc.JsonListObjectAny(x.HandlerOrgs, "Key", _sessionContext.RequiredOrgId))
-                .Where(x => x.Status == EScreenStatus.Apply)
+            var screenAudit = await _orderScreenRepository.Queryable(hasHandled: true)
+                .Where(d => d.Status == EScreenStatus.Apply)
                 .CountAsync();
-            var workTime = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
+            //var workTime = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
             var screenHandle = await _orderVisitedDetailRepository.Queryable(false, true)
                 .Includes(x => x.OrderVisit)
                 .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.Status < EScreenStatus.End && s.IsDeleted == false)
                 .Where((x, s) => s.Id == null)
-                .Where(x => x.OrderVisit.VisitTime < DateTime.Now && x.OrderVisit.VisitTime > workTime)
+                //.Where(x => x.OrderVisit.VisitTime < DateTime.Now && x.OrderVisit.VisitTime > workTime)
                 .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
                 .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" || SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||

+ 22 - 25
src/Hotline.Api/Controllers/OrderController.cs

@@ -2665,27 +2665,17 @@ public class OrderController : BaseController
         dto.RepeatableEventDetails = repeatables;
         if (!string.IsNullOrEmpty(dto.WorkflowId))
         {
-
             var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
                 cancellationToken: HttpContext.RequestAborted);
-            //  var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId).OrderByDescending(x => x.CreationTime).Select(x => x.Opinion).FirstOrDefault();
             var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId).MaxBy(d => d.CreationTime)?.Opinion ?? string.Empty;
-
-            dto.CenterOpinion = centerOpinion;//string.IsNullOrEmpty(centerOpinion) ? string.Empty : centerOpinion;
+            dto.CenterOpinion = centerOpinion;
             List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto { Remark = x.Remark, RemarkTime = x.CreationTime, RemarkUser = x.CreatorName }).ToList();
             dto.OrderRemarks = remarks;
-
-            var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
-            dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
-
-            //var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
-            //    cancellationToken: HttpContext.RequestAborted);
-            //var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId).OrderByDescending(x => x.CreationTime).Select(x => x.Opinion).First();
-            //dto.CenterOpinion = string.IsNullOrEmpty(centerOpinion) ? string.Empty : centerOpinion;
-            //var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
-            //dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
-            //List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto { Remark = x.Remark, RemarkTime = x.CreationTime, RemarkUser = x.CreatorName }).ToList();
-            //dto.OrderRemarks = remarks;
+            if (order.Status == EOrderStatus.SendBack || order.Status == EOrderStatus.SendBackAudit)
+            {
+				var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
+				dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
+			}
         }
 
         return dto;
@@ -3155,7 +3145,8 @@ public class OrderController : BaseController
         var order = await _orderRepository.GetAsync(d => d.WorkflowId == workflow.Id, HttpContext.RequestAborted);
         if (order is null)
             throw new UserFriendlyException($"工单未开启流程, workflowId: {workflow.Id}");
-        _mapper.Map(workflow, order);
+        order.UpdateHandlingStatus(workflow.IsInCountersign);
+		_mapper.Map(workflow, order);
         await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
     }
 
@@ -3697,14 +3688,16 @@ public class OrderController : BaseController
                     TraceId = currentStep.Id
                 };
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
-            }
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = EOrderStatus.SendBackAudit })
+	                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+			}
             else
             {
                 var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType,Status = EOrderStatus.SendBack })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -3715,7 +3708,7 @@ public class OrderController : BaseController
             var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
         }
@@ -3757,7 +3750,7 @@ public class OrderController : BaseController
                               flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
                 .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
             await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
@@ -3797,7 +3790,7 @@ public class OrderController : BaseController
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
                     .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -4144,7 +4137,7 @@ public class OrderController : BaseController
             //var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
             //	ETimeType.WorkDay,
             //	dto.TimeLimit.Value, order.AcceptTypeCode);
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType,Status = EOrderStatus.Special })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -4194,6 +4187,10 @@ public class OrderController : BaseController
                 //}
             }
         }
+        else {
+			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = EOrderStatus.SpecialAudit })
+				.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+		}
     }
 
     /// <summary>
@@ -4365,7 +4362,7 @@ public class OrderController : BaseController
             var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType,Status = EOrderStatus.Special })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -4467,7 +4464,7 @@ public class OrderController : BaseController
                 var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType,Status = EOrderStatus.Special })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 var orderDto = _mapper.Map<OrderDto>(order);
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/CancelHandler.cs

@@ -35,7 +35,8 @@ public class CancelHandler : INotificationHandler<CancelWorkflowNotify>
                 var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, cancellationToken: cancellationToken);
                 order.CheckIfFiled();
                 order.Cancel();
-                _mapper.Map(workflow, order);
+                order.UpdateHandlingStatus(workflow.IsInCountersign);
+				_mapper.Map(workflow, order);
                 await _orderRepository.UpdateAsync(order, cancellationToken);
                 break;
         }

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

@@ -151,8 +151,9 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
             case WorkflowModuleConsts.OrderHandle:
                 var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId,
                     withExtension: true, cancellationToken: cancellationToken);
-                //order.CheckIfFiled();
-                _mapper.Map(workflow, order);
+				//order.CheckIfFiled();
+				order.UpdateHandlingStatus(workflow.IsInCountersign);
+				_mapper.Map(workflow, order);
                 var now = DateTime.Now;
                 var handleDuration = order.CenterToOrgTime.HasValue && order.ActualHandleTime.HasValue
                     ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value,

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -108,7 +108,8 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                 var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, withHotspot: true,
                     withAcceptor: true, withExtension: true, cancellationToken: cancellationToken);
                 order.CheckIfFiled();
-                _mapper.Map(workflow, order);
+                order.UpdateHandlingStatus(workflow.IsInCountersign);
+				_mapper.Map(workflow, order);
 
                 //var expiredTimeChanged = false;
                 //if (data.FlowDirection.HasValue

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowPreviousHandler.cs

@@ -74,7 +74,8 @@ namespace Hotline.Application.Handlers.FlowEngine
                     var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, withHotspot: true, withAcceptor: true,
                         withExtension: true, cancellationToken: cancellationToken);
                     order.CheckIfFiled();
-                    _mapper.Map(workflow, order);
+                    order.UpdateHandlingStatus(workflow.IsInCountersign);
+					_mapper.Map(workflow, order);
                     if (notification.TargetStep.StepType is EStepType.Start)
                     {
                         order.Status = EOrderStatus.BackToUnAccept;

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowRecallHandler.cs

@@ -60,7 +60,8 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
             case WorkflowModuleConsts.OrderHandle:
                 var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, withHotspot: true, withAcceptor: true,
                     withExtension: true, cancellationToken: cancellationToken);
-                _mapper.Map(workflow, order);
+                order.UpdateHandlingStatus(workflow.IsInCountersign);
+				_mapper.Map(workflow, order);
                 if (notification.TargetStep.StepType is EStepType.Start)
                 {
                     //if (!bool.TryParse(

+ 3 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowStartHandler.cs

@@ -97,8 +97,9 @@ namespace Hotline.Application.Handlers.FlowEngine
                     var order = await _orderDomainService.GetOrderAsync(workflow.ExternalId, withHotspot: true, withAcceptor: true,
                         withExtension: true, cancellationToken);
                     order.CheckIfFiled();
-                    order.StartManageFlow();
-                    _mapper.Map(workflow, order);
+					//order.StartManageFlow();
+					order.UpdateHandlingStatus(workflow.IsInCountersign);
+					_mapper.Map(workflow, order);
                     await _orderRepository.UpdateAsync(order, cancellationToken);
 
                     var publishCallRecordDto = new PublishCallRecrodDto() { };

+ 4 - 4
src/Hotline.Application/Mappers/OrderMapperConfigs.cs

@@ -101,10 +101,10 @@ public class OrderMapperConfigs : IRegister
             .Ignore(d => d.AcceptorId)
             .Ignore(d => d.AcceptorName)
             .Ignore(d => d.AcceptorStaffNo)
-			.AfterMapping((s, d) =>
-            {
-                d.UpdateHandlingStatus(s.IsInCountersign);
-            })
+			//.AfterMapping((s, d) =>
+   //         {
+   //             d.UpdateHandlingStatus(s.IsInCountersign);
+   //         })
             ;
 
         config.ForType<Order, PublishDto>()

+ 32 - 2
src/Hotline.Share/Enums/Order/EOrderStatus.cs

@@ -36,10 +36,40 @@ public enum EOrderStatus
     [Description("办理中")]
     Handling = 100,
 
+	/// <summary>
+	/// 特提信件
+	/// </summary>
+	[Description("特提信件")]
+    Special = 101,
+
+    /// <summary>
+    /// 退回信件
+    /// </summary>
+    [Description("退回信件")]
+    SendBack = 102,
+
     /// <summary>
-    /// 会签中
+    /// 移交信件
     /// </summary>
-    [Description("会签中")]
+    [Description("移交信件")]
+    HandOver = 103,
+
+	/// <summary>
+	/// 特提审批中
+	/// </summary>
+	[Description("特提审批中")]
+	SpecialAudit = 105,
+
+	/// <summary>
+	/// 退回审批中
+	/// </summary>
+	[Description("退回审批中")]
+    SendBackAudit = 105,
+
+	/// <summary>
+	/// 会签中
+	/// </summary>
+	[Description("会签中")]
     Countersigning = 200,
 
     /// <summary>