浏览代码

甄别明细

田爽 9 月之前
父节点
当前提交
df6a4e42df

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

@@ -1821,6 +1821,7 @@ public class OrderController : BaseController
             .Includes(d => d.VisitDetail)
             .Includes(d => d.Visit, v => v.Order)
             .Includes(d => d.Workflow)
+            .Includes(d=> d.ScreenDetail.Where(sd=>sd.AuditUserId  ==  _sessionContext.UserId).OrderByDescending(sd=>sd.AuditTime).Take(1).ToList())
             .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Visit.Order.Title.Contains(dto.Title!))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Visit.Order.No.Contains(dto.No!));
         if (dto.TabStatus is EScreenStatus.Apply)

+ 13 - 6
src/Hotline.Application/Handlers/FlowEngine/WorkflowEndHandler.cs

@@ -58,8 +58,9 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
     private readonly ICallApplication _callApplication;
     private readonly IOptionsSnapshot<CallCenterConfiguration> _callcenterOptions;
     private readonly ISessionContext _sessionContext;
+    private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
 
-    public WorkflowEndHandler(
+	public WorkflowEndHandler(
         IKnowledgeDomainService knowledgeDomainService,
         IOrderDomainService orderDomainService,
         IOrderApplication orderApplication,
@@ -87,7 +88,8 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
         IEnforcementApplication enforcementApplication,
         ICallApplication callApplication,
         IOptionsSnapshot<CallCenterConfiguration> callcenterOptions,
-        ISessionContext sessionContext)
+        ISessionContext sessionContext,
+        IRepository<OrderScreenDetail> orderScreenDetailRepository)
     {
         _knowledgeDomainService = knowledgeDomainService;
         _orderDomainService = orderDomainService;
@@ -116,7 +118,8 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
         _callApplication = callApplication;
         _callcenterOptions = callcenterOptions;
         _sessionContext = sessionContext;
-    }
+        _orderScreenDetailRepository = orderScreenDetailRepository;
+	}
 
     /// <summary>Handles a notification</summary>
     /// <param name="notification">The notification</param>
@@ -253,7 +256,7 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                     {
                         screen.Status = EScreenStatus.End;
                         screen.ReplyContent = workflow.ActualOpinion;
-                        await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
+                        //await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
                         var visitDetail =
                             await _orderVisitedDetailRepository.GetAsync(screen.VisitDetailId, cancellationToken);
                         if (visitDetail != null)
@@ -308,9 +311,13 @@ public class WorkflowEndHandler : INotificationHandler<EndWorkflowNotify>
                         await _orderRepository.OrderScreenRevisionVisit(screen.VisitId, true, cancellationToken);
                         screen.Status = EScreenStatus.Refuse;
                         screen.ReplyContent = workflow.ActualOpinion;
-                        await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
                     }
-                }
+                    screen.NewestAuditTime = DateTime.Now;
+					await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
+					OrderScreenDetail detail = new OrderScreenDetail();
+                    detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 1);
+                    await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
+				}
                 break;
             case WorkflowModuleConsts.OrderDelay:
                 var delay = await _orderDelayRepository.GetAsync(workflow.ExternalId, cancellationToken);

+ 10 - 3
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -45,8 +45,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
     private readonly IRepository<User> _userRepository;
     private readonly IMediator _mediator;
     private readonly IEnforcementApplication _enforcementApplication;
+    private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
 
-    public WorkflowNextHandler(
+	public WorkflowNextHandler(
         IOrderDomainService orderDomainService,
         IKnowledgeDomainService knowledgeDomainService,
         IOrderRepository orderRepository,
@@ -63,7 +64,8 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
         IOrderDelayRepository orderDelayRepository,
         IRepository<User> userRepository,
         IMediator mediator,
-        IEnforcementApplication enforcementApplication)
+        IEnforcementApplication enforcementApplication,
+        IRepository<OrderScreenDetail> orderScreenDetailRepository)
     {
         _orderDomainService = orderDomainService;
         _knowledgeDomainService = knowledgeDomainService;
@@ -82,7 +84,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
         _userRepository = userRepository;
         _mediator = mediator;
         _enforcementApplication = enforcementApplication;
-    }
+        _orderScreenDetailRepository = orderScreenDetailRepository;
+
+	}
 
     /// <summary>Handles a notification</summary>
     /// <param name="notification">The notification</param>
@@ -282,6 +286,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                     }
                 }
 
+                OrderScreenDetail detail = new OrderScreenDetail();
+                detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName,1);
+                await _orderScreenDetailRepository.AddAsync(detail,cancellationToken);
                 break;
             case WorkflowModuleConsts.OrderDelay:
                 var orderDelay = await _orderDelayRepository.Queryable().Includes(x => x.Order)

+ 16 - 5
src/Hotline.Application/Handlers/FlowEngine/WorkflowPreviousHandler.cs

@@ -15,6 +15,7 @@ using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
+using XF.Domain.Authentications;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Handlers.FlowEngine
@@ -32,8 +33,10 @@ namespace Hotline.Application.Handlers.FlowEngine
         private readonly ILogger<WorkflowPreviousHandler> _logger;
         private readonly IRepository<User> _userRepository;
         private readonly IMediator _mediator;
+        private readonly ISessionContext _sessionContext;
+        private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
 
-        public WorkflowPreviousHandler(
+		public WorkflowPreviousHandler(
             IOrderDomainService orderDomainService,
             IOrderRepository orderRepository,
             IOrderScreenRepository orderScreenRepository,
@@ -44,8 +47,10 @@ namespace Hotline.Application.Handlers.FlowEngine
             IMapper mapper,
             ILogger<WorkflowPreviousHandler> logger,
             IRepository<User> userRepository,
-            IMediator mediator
-            )
+            IMediator mediator,
+            ISessionContext sessionContext,
+            IRepository<OrderScreenDetail> orderScreenDetailRepository
+			)
         {
             _orderDomainService = orderDomainService;
             _orderRepository = orderRepository;
@@ -58,7 +63,9 @@ namespace Hotline.Application.Handlers.FlowEngine
             _mediator = mediator;
             _orderScreenRepository = orderScreenRepository;
             _orderDelayRepository = orderDelayRepository;
-        }
+            _sessionContext = sessionContext;
+            _orderScreenDetailRepository = orderScreenDetailRepository;
+		}
 
         /// <summary>Handles a notification</summary>
         /// <param name="notification">The notification</param>
@@ -162,9 +169,13 @@ namespace Hotline.Application.Handlers.FlowEngine
                     if (screen != null)
                     {
                         screen.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
+                        screen.SendBackTime = DateTime.Now;
                         await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
                     }
-                    break;
+                    OrderScreenDetail detail = new OrderScreenDetail();
+                    detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 2);
+                    await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
+					break;
                 case WorkflowModuleConsts.KnowledgeAdd:
                 case WorkflowModuleConsts.KnowledgeUpdate:
                 case WorkflowModuleConsts.KnowledgeDelete:

+ 58 - 0
src/Hotline.Share/Dtos/Order/OrderScreenDetailDto.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Order
+{
+	public class OrderScreenDetailDto
+	{
+		/// <summary>
+		/// 甄别Id
+		/// </summary>
+		public string ScreenId { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		public string? AuditUserName { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		public string? AuditUserId { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		public string? AuditOrgId { get; set; }
+
+		/// <summary>
+		/// 审批机构
+		/// </summary>
+		public string? AuditOrgName { get; set; }
+
+		/// <summary>
+		/// 审批时间
+		/// </summary>
+		public DateTime? AuditTime { get; set; }
+
+		/// <summary>
+		/// 审批类型   1 审批  2 退回
+		/// </summary>
+		public int AuditType { get; set; }
+
+
+		/// <summary>
+		/// 当前最新审批时间
+		/// </summary>
+		public DateTime? NewestAuditTime => AuditType == 1 ? AuditTime : null;
+
+
+		/// <summary>
+		/// 当前最新退回时间
+		/// </summary>
+		public DateTime? NewestBackTime => AuditType == 2 ? AuditTime : null;
+	}
+}

+ 15 - 0
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -138,6 +138,11 @@ namespace Hotline.Share.Dtos.Order
 
 		public WorkflowDto Workflow { get; set; }
 
+		/// <summary>
+		/// 甄别明细
+		/// </summary>
+		public List<OrderScreenDetailDto> ScreenDetail { get; set; }
+
 		/// <summary>
 		/// 回访明细id
 		/// </summary>
@@ -256,6 +261,16 @@ namespace Hotline.Share.Dtos.Order
 		/// 重提甄别
 		/// </summary>
 		public string ScreenSendBackApply => SendBackApplyNum > 0 ? "是" : "否";
+
+		/// <summary>
+		/// 甄别退回时间
+		/// </summary>
+		public DateTime? SendBackTime { get; set; }
+
+		/// <summary>
+		/// 甄别审批时间
+		/// </summary>
+		public DateTime? NewestAuditTime { get; set; }
 	}
 
 	public class PublishScreenDto {

+ 14 - 2
src/Hotline/Orders/OrderScreen.cs

@@ -54,9 +54,15 @@ namespace Hotline.Orders
         public Order Order { get; set; }
 
         /// <summary>
-        /// 甄别申请类型id
+        /// 回访
         /// </summary>
-        [SugarColumn(ColumnDescription = "甄别申请类型id")]
+        [Navigate(NavigateType.OneToMany, nameof(OrderScreenDetail.ScreenId), nameof(Id))]
+        public List<OrderScreenDetail> ScreenDetail { get; set; }
+
+		/// <summary>
+		/// 甄别申请类型id
+		/// </summary>
+		[SugarColumn(ColumnDescription = "甄别申请类型id")]
         public string? TypeDicId { get; set; }
 
         /// <summary>
@@ -157,5 +163,11 @@ namespace Hotline.Orders
         /// </summary>
         [SugarColumn(ColumnDescription = "甄别退回时间")]
         public DateTime? SendBackTime { get; set; }
+
+        /// <summary>
+        /// 甄别审批时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "甄别审批时间")]
+        public DateTime? NewestAuditTime { get; set; }
 	}
 }

+ 65 - 0
src/Hotline/Orders/OrderScreenDetail.cs

@@ -0,0 +1,65 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+	public class OrderScreenDetail : FullStateEntity
+	{
+		/// <summary>
+		/// 甄别Id
+		/// </summary>
+		[SugarColumn(ColumnDescription = "甄别Id")]
+		public string ScreenId { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批人")]
+		public string? AuditUserName { get; set; }
+
+		/// <summary>
+		/// 审批人
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批人id")]
+		public string? AuditUserId { get; set; }
+
+		/// <summary>
+		/// 审批机构ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批机构ID")]
+		public string? AuditOrgId { get; set; }
+
+		/// <summary>
+		/// 审批机构
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批机构")]
+		public string? AuditOrgName { get; set; }
+
+		/// <summary>
+		/// 审批时间
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批时间")]
+		public DateTime? AuditTime { get; set; }
+
+		/// <summary>
+		/// 审批类型   1 审批  2 退回
+		/// </summary>
+		[SugarColumn(ColumnDescription = "审批类型   1 审批  2 退回")]
+		public int AuditType { get; set; }
+
+		public void Audit(string userId, string userName, string userOrgId, string userOrgName,int auditType) {
+			AuditUserId = userId;
+			AuditUserName = userName;
+			AuditUserId = userOrgId;
+			AuditOrgId = userOrgName;
+			AuditTime = DateTime.Now;
+			AuditType = auditType;
+		}
+	}
+
+}