Эх сурвалжийг харах

Merge branch 'master' of http://git.12345lm.cn/Fengwo/hotline

Dun.Jason 1 жил өмнө
parent
commit
9fc87ba1b8

+ 7 - 4
src/Hotline.Api/Controllers/OrderController.cs

@@ -2379,7 +2379,9 @@ public class OrderController : BaseController
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgName = applyOrg.Name,
                     ApplyOrgName = applyOrg.Name,
                     SendBackOrgId = sendBackOrg.Id,
                     SendBackOrgId = sendBackOrg.Id,
-                    SendBackOrgName = sendBackOrg.Name
+                    SendBackOrgName = sendBackOrg.Name,
+                    WorkflowOrgId = _sessionContext.RequiredOrgId,
+                    WorkflowUserId = _sessionContext.RequiredUserId
                 };
                 };
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
             }
@@ -2398,7 +2400,7 @@ public class OrderController : BaseController
 	[HttpPost("order_previous_audit")]
 	[HttpPost("order_previous_audit")]
 	public async Task Audit([FromBody] AuditSendBackDto dto)
 	public async Task Audit([FromBody] AuditSendBackDto dto)
 	{
 	{
-		if (dto.State == ESendBackAuditState.Refuse && string.IsNullOrEmpty(dto.AuditOpinion))
+		if (dto.State == ESendBackAuditState.Refuse && string.IsNullOrEmpty(dto.AuditContent))
 			throw UserFriendlyException.SameMessage("退回拒绝,请填写审批拒绝原因");
 			throw UserFriendlyException.SameMessage("退回拒绝,请填写审批拒绝原因");
 		//验证是否存在退回
 		//验证是否存在退回
 		var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
 		var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
@@ -2411,12 +2413,13 @@ public class OrderController : BaseController
 		sendBack.AuditId = _sessionContext.UserId;
 		sendBack.AuditId = _sessionContext.UserId;
 		sendBack.AuditUser = _sessionContext.UserName;
 		sendBack.AuditUser = _sessionContext.UserName;
 		sendBack.AuditTime = DateTime.Now;
 		sendBack.AuditTime = DateTime.Now;
-		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
+
 		//执行退回
 		//执行退回
 		if (sendBack.State ==  ESendBackAuditState.End)
 		if (sendBack.State ==  ESendBackAuditState.End)
 		{
 		{
-			await _workflowApplication.PreviousAsync(sendBack.SendBackData, HttpContext.RequestAborted);
+			await _workflowApplication.OrderPreviousAsync(sendBack.SendBackData,sendBack.WorkflowUserId, HttpContext.RequestAborted);
 		}
 		}
+		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
 	}
 	}
     
     
     /// <summary>
     /// <summary>

+ 17 - 7
src/Hotline.Application/Bigscreen/SeatStateDataService.cs

@@ -28,7 +28,7 @@ namespace Hotline.Application.Bigscreen
 			}
 			}
 			var call24 = await _callRepository.Queryable()
 			var call24 = await _callRepository.Queryable()
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
-					//&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
+					&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
 				)
 				)
 				.Select(x => new { time = x.CreatedTime.ToString("hh"), x.CallDirection }).MergeTable()
 				.Select(x => new { time = x.CreatedTime.ToString("hh"), x.CallDirection }).MergeTable()
 				.GroupBy(x => x.time)
 				.GroupBy(x => x.time)
@@ -42,7 +42,11 @@ namespace Hotline.Application.Bigscreen
 			var call24List = (from t1 in timeList
 			var call24List = (from t1 in timeList
 				join t2 in call24 on t1 equals t2.Time into t1_t2
 				join t2 in call24 on t1 equals t2.Time into t1_t2
 				from item in t1_t2.DefaultIfEmpty()
 				from item in t1_t2.DefaultIfEmpty()
-				select new { Time = t1 + ":00", In = t1_t2.Select(x => x.In).FirstOrDefault(), Out = t1_t2.Select(x => x.Out).FirstOrDefault() }).ToList();
+				select new { 
+					Time = t1 + ":00",
+					In = t1_t2.Select(x => x.In).FirstOrDefault() ,
+					Out = t1_t2.Select(x => x.Out).FirstOrDefault() 
+				}).ToList();
 			return call24List;
 			return call24List;
 		}
 		}
 
 
@@ -50,7 +54,7 @@ namespace Hotline.Application.Bigscreen
 		{
 		{
 			var callTop10 = await _callRepository.Queryable()
 			var callTop10 = await _callRepository.Queryable()
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
-					//&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
+					&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
 				)
 				)
 				.GroupBy(x => x.UserName)
 				.GroupBy(x => x.UserName)
 				.Select(x => new
 				.Select(x => new
@@ -65,7 +69,7 @@ namespace Hotline.Application.Bigscreen
 		{
 		{
 			var callList = await _callRepository.Queryable()
 			var callList = await _callRepository.Queryable()
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
-					//&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
+					&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
 				)
 				)
 				.Select(x => new
 				.Select(x => new
 				{
 				{
@@ -88,7 +92,7 @@ namespace Hotline.Application.Bigscreen
 			}
 			}
 			var callAverage = await _callRepository.Queryable()
 			var callAverage = await _callRepository.Queryable()
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
 				.Where(x => x.CreatedTime.ToString("yyyy-MM-dd") == now
-					//&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
+					&& x.CallOrderType == Share.Enums.CallCenter.ECallOrderType.Order
 				)
 				)
 				.Select(x => new { time = x.CreatedTime.ToString("hh"), x.CallDirection }).MergeTable()
 				.Select(x => new { time = x.CreatedTime.ToString("hh"), x.CallDirection }).MergeTable()
 				.GroupBy(x => x.time)
 				.GroupBy(x => x.time)
@@ -103,8 +107,14 @@ namespace Hotline.Application.Bigscreen
 			var callAverageList = (from t1 in timeList
 			var callAverageList = (from t1 in timeList
 				join t2 in callAverage on t1 equals t2.Time into t1_t2
 				join t2 in callAverage on t1 equals t2.Time into t1_t2
 				from item in t1_t2.DefaultIfEmpty()
 				from item in t1_t2.DefaultIfEmpty()
-				select new { Time = t1 + ":00", In = t1_t2.Select(x => x.In).FirstOrDefault(), InAverag = t1_t2.Select(x => x.InAverag).FirstOrDefault(), Out = t1_t2.Select(x => x.Out).FirstOrDefault(), OutAverag = t1_t2.Select(x => x.OutAverag).FirstOrDefault() }).ToList();
-			return callAverage;
+				select new {
+					Time = t1 + ":00",
+					In = t1_t2.Select(x => x.In).FirstOrDefault(),
+					InAverag = t1_t2.Select(x => x.InAverag).FirstOrDefault(),
+					Out = t1_t2.Select(x => x.Out).FirstOrDefault(),
+					OutAverag = t1_t2.Select(x => x.OutAverag).FirstOrDefault() 
+				}).ToList();
+			return callAverageList;
 		}
 		}
 
 
 
 

+ 7 - 2
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -29,9 +29,14 @@ namespace Hotline.Application.FlowEngine
         Task PreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken);
         Task PreviousAsync(PreviousWorkflowDto dto, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
-        /// 撤回至任意节点
+        /// 工单退回(返回前一节点)
         /// </summary>
         /// </summary>
-        Task RecallAsync(RecallDto dto, CancellationToken cancellationToken);
+        Task OrderPreviousAsync(PreviousWorkflowDto dto, string UserId, CancellationToken cancellationToken);
+
+		/// <summary>
+		/// 撤回至任意节点
+		/// </summary>
+		Task RecallAsync(RecallDto dto, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// 撤回至发起人节点
         /// 撤回至发起人节点

+ 18 - 6
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -55,7 +55,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     private readonly IMapper _mapper;
     private readonly IMapper _mapper;
     private readonly IFileRepository _fileRepository;
     private readonly IFileRepository _fileRepository;
 
 
-    public WorkflowApplication(
+	public WorkflowApplication(
         IDefinitionDomainService definitionDomainService,
         IDefinitionDomainService definitionDomainService,
         IWorkflowDomainService workflowDomainService,
         IWorkflowDomainService workflowDomainService,
         IOrderDomainService orderDomainService,
         IOrderDomainService orderDomainService,
@@ -72,7 +72,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         ITimeLimitDomainService timeLimitDomainService,
         ITimeLimitDomainService timeLimitDomainService,
         ISessionContext sessionContext,
         ISessionContext sessionContext,
         IMapper mapper,
         IMapper mapper,
-        IFileRepository fileRepository
+		IFileRepository fileRepository
     )
     )
     {
     {
         _definitionDomainService = definitionDomainService;
         _definitionDomainService = definitionDomainService;
@@ -140,7 +140,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
 
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
             _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, externalId, expiredTimeConfig?.TimeText,
             _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, externalId, expiredTimeConfig?.TimeText,
-            expiredTimeConfig?.Count, expiredTimeConfig?.TimeType, expiredTimeConfig?.ExpiredTime,expiredTimeConfig.NearlyExpiredTime, cancellationToken);
+            expiredTimeConfig?.Count, expiredTimeConfig?.TimeType, expiredTimeConfig?.ExpiredTime,expiredTimeConfig?.NearlyExpiredTime, cancellationToken);
 
 
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto,
         var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto,
             new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) });
             new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) });
@@ -236,13 +236,25 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     {
     {
         var workflow =
         var workflow =
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
-        await _workflowDomainService.PreviousAsync(workflow, dto, cancellationToken);
+        User user = await _userRepository.Queryable().Includes(x => x.Organization).Where(x=> x.Id == _sessionContext.RequiredUserId).FirstAsync();
+		await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
     }
     }
 
 
     /// <summary>
     /// <summary>
-    /// 撤回至任意节点
+    /// 工单退回(返回前一节点)
     /// </summary>
     /// </summary>
-    public async Task RecallAsync(RecallDto dto, CancellationToken cancellationToken)
+    public async Task OrderPreviousAsync(PreviousWorkflowDto dto, string UserId, CancellationToken cancellationToken)
+    {
+	    var workflow =
+		    await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
+        User user = await _userRepository.Queryable().Includes(x=>x.Organization).Where(x => x.Id == UserId).FirstAsync();
+		await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
+    }
+
+	/// <summary>
+	/// 撤回至任意节点
+	/// </summary>
+	public async Task RecallAsync(RecallDto dto, CancellationToken cancellationToken)
     {
     {
         var workflow =
         var workflow =
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: cancellationToken);
             await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, cancellationToken: cancellationToken);

+ 1 - 1
src/Hotline.Share/Dtos/Order/SendBackDto.cs

@@ -23,7 +23,7 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// <summary>
 		/// 审核意见
 		/// 审核意见
 		/// </summary>
 		/// </summary>
-		public string? AuditOpinion { get; set; }
+		public string? AuditContent { get; set; }
 
 
 	}
 	}
 	public class SendBackDto : SendBackBaseDto
 	public class SendBackDto : SendBackBaseDto

+ 6 - 5
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -5,6 +5,7 @@ using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
 using Hotline.Share.Enums.Settings;
+using Hotline.Users;
 using XF.Domain.Entities;
 using XF.Domain.Entities;
 
 
 namespace Hotline.FlowEngine.Workflows
 namespace Hotline.FlowEngine.Workflows
@@ -49,11 +50,11 @@ namespace Hotline.FlowEngine.Workflows
         Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
         Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
             FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
             FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken);
 
 
-        /// <summary>
-        /// 退回(返回前一节点)
-        /// </summary>
-        /// <returns></returns>
-        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken);
+		/// <summary>
+		/// 退回(返回前一节点)
+		/// </summary>
+		/// <returns></returns>
+        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User user, CancellationToken cancellationToken);
 
 
         /// <summary>
         /// <summary>
         /// 撤回(返回到之前任意节点)
         /// 撤回(返回到之前任意节点)

+ 15 - 14
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -9,6 +9,7 @@ using Hotline.Share.Dtos.FlowEngine.Definition;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
 using Hotline.Share.Enums.Settings;
+using Hotline.Users;
 using MapsterMapper;
 using MapsterMapper;
 using MediatR;
 using MediatR;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging;
@@ -32,8 +33,9 @@ namespace Hotline.FlowEngine.Workflows
         private readonly IMediator _mediator;
         private readonly IMediator _mediator;
         private readonly ILogger<WorkflowDomainService> _logger;
         private readonly ILogger<WorkflowDomainService> _logger;
         private readonly IFileRepository _fileRepository;
         private readonly IFileRepository _fileRepository;
+        private readonly IRepository<User> _userRepository;
 
 
-        public WorkflowDomainService(
+		public WorkflowDomainService(
             IWorkflowRepository workflowRepository,
             IWorkflowRepository workflowRepository,
             IRepository<WorkflowStep> workflowStepRepository,
             IRepository<WorkflowStep> workflowStepRepository,
             IRepository<WorkflowTrace> workflowTraceRepository,
             IRepository<WorkflowTrace> workflowTraceRepository,
@@ -43,7 +45,7 @@ namespace Hotline.FlowEngine.Workflows
             IMapper mapper,
             IMapper mapper,
             IMediator mediator,
             IMediator mediator,
             ILogger<WorkflowDomainService> logger,
             ILogger<WorkflowDomainService> logger,
-            IFileRepository fileRepository)
+			IFileRepository fileRepository)
         {
         {
             _workflowRepository = workflowRepository;
             _workflowRepository = workflowRepository;
             _workflowStepRepository = workflowStepRepository;
             _workflowStepRepository = workflowStepRepository;
@@ -55,7 +57,7 @@ namespace Hotline.FlowEngine.Workflows
             _mediator = mediator;
             _mediator = mediator;
             _logger = logger;
             _logger = logger;
             _fileRepository = fileRepository;
             _fileRepository = fileRepository;
-        }
+		}
 
 
         public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
         public async Task<Workflow> CreateWorkflowAsync(WorkflowModule wfModule, string title, string userId,
             string userCode,
             string userCode,
@@ -273,7 +275,7 @@ namespace Hotline.FlowEngine.Workflows
         public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto,
         public async Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto,
             StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
             StepDefine nextStepDefine, FlowAssignInfo flowAssignInfo, CancellationToken cancellationToken)
         {
         {
-            ValidatePermission(workflow);
+            ValidatePermission(workflow,_sessionContext.RequiredOrgId,_sessionContext.RequiredUserId);
             CheckWhetherRunnable(workflow.Status);
             CheckWhetherRunnable(workflow.Status);
 
 
             #region 办理当前节点
             #region 办理当前节点
@@ -457,15 +459,14 @@ namespace Hotline.FlowEngine.Workflows
         /// 退回(返回前一节点)
         /// 退回(返回前一节点)
         /// </summary>
         /// </summary>
         /// <returns></returns>
         /// <returns></returns>
-        public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, CancellationToken cancellationToken)
+        public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User user, CancellationToken cancellationToken)
         {
         {
-            ValidatePermission(workflow);
+            ValidatePermission(workflow, user.OrgId, user.Id);
             CheckWhetherRunnable(workflow.Status);
             CheckWhetherRunnable(workflow.Status);
             if (workflow.IsInCountersign)
             if (workflow.IsInCountersign)
                 throw UserFriendlyException.SameMessage("会签流程不支持退回");
                 throw UserFriendlyException.SameMessage("会签流程不支持退回");
 
 
-            var currentStep = GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
-                _sessionContext.RequiredUserId);
+            var currentStep = GetUnHandleStep(workflow.Steps, user.OrgId, user.Id);
 
 
             if (currentStep.StepType is EStepType.Start)
             if (currentStep.StepType is EStepType.Start)
                 throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
                 throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
@@ -494,13 +495,13 @@ namespace Hotline.FlowEngine.Workflows
 
 
             //更新当前办理节点信息
             //更新当前办理节点信息
             workflow.UpdateWorkflowCurrentStepInfo(false,
             workflow.UpdateWorkflowCurrentStepInfo(false,
-                _sessionContext.RequiredUserId, _sessionContext.UserName,
-                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
+	            user.Id, user.Name,
+	            user.Organization.Id, user.Organization.Name,
+	            user.Organization.AreaCode, user.Organization.AreaName,
                 nextStep: newPrevStep);
                 nextStep: newPrevStep);
 
 
             //更新流程可办理对象
             //更新流程可办理对象
-            workflow.UpdatePreviousHandlers(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, newPrevStep);
+            workflow.UpdatePreviousHandlers(user.Id, user.OrgId, newPrevStep);
 
 
             //orgToCenter会触发重新计算期满时间,1.无需审核按当前时间进行计算 2.需审核按审核通过时间计算
             //orgToCenter会触发重新计算期满时间,1.无需审核按当前时间进行计算 2.需审核按审核通过时间计算
             var isOrgToCenter = prevStep.BusinessType is EBusinessType.Send && prevStep.IsOrigin;
             var isOrgToCenter = prevStep.BusinessType is EBusinessType.Send && prevStep.IsOrigin;
@@ -1478,9 +1479,9 @@ namespace Hotline.FlowEngine.Workflows
                 throw UserFriendlyException.SameMessage("当前流程状态不可继续流转");
                 throw UserFriendlyException.SameMessage("当前流程状态不可继续流转");
         }
         }
 
 
-        private void ValidatePermission(Workflow workflow)
+        private void ValidatePermission(Workflow workflow, string OrgId, string UserId)
         {
         {
-            if (!workflow.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId))
+            if (!workflow.CanHandle(UserId, OrgId))
                 throw UserFriendlyException.SameMessage("无办理权限");
                 throw UserFriendlyException.SameMessage("无办理权限");
         }
         }
 
 

+ 12 - 0
src/Hotline/Orders/OrderSendBackAudit.cs

@@ -87,5 +87,17 @@ namespace Hotline.Orders
 		/// </summary>
 		/// </summary>
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		public string SendBackOrgName { get; set; }
 		public string SendBackOrgName { get; set; }
+
+		/// <summary>
+		/// 流程退回发起部门ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "流程退回发起部门ID")]
+		public string WorkflowOrgId { get; set; }
+
+		/// <summary>
+		/// 流程退回发起用户ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "流程退回发起用户ID")]
+		public string WorkflowUserId { get; set; }
 	}
 	}
 }
 }