Przeglądaj źródła

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

Dun.Jason 1 rok temu
rodzic
commit
9fc87ba1b8

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

@@ -2379,7 +2379,9 @@ public class OrderController : BaseController
                     ApplyOrgId = applyOrg.Id,
                     ApplyOrgName = applyOrg.Name,
                     SendBackOrgId = sendBackOrg.Id,
-                    SendBackOrgName = sendBackOrg.Name
+                    SendBackOrgName = sendBackOrg.Name,
+                    WorkflowOrgId = _sessionContext.RequiredOrgId,
+                    WorkflowUserId = _sessionContext.RequiredUserId
                 };
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
@@ -2398,7 +2400,7 @@ public class OrderController : BaseController
 	[HttpPost("order_previous_audit")]
 	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("退回拒绝,请填写审批拒绝原因");
 		//验证是否存在退回
 		var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
@@ -2411,12 +2413,13 @@ public class OrderController : BaseController
 		sendBack.AuditId = _sessionContext.UserId;
 		sendBack.AuditUser = _sessionContext.UserName;
 		sendBack.AuditTime = DateTime.Now;
-		await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
+
 		//执行退回
 		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>

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

@@ -28,7 +28,7 @@ namespace Hotline.Application.Bigscreen
 			}
 			var call24 = await _callRepository.Queryable()
 				.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()
 				.GroupBy(x => x.time)
@@ -42,7 +42,11 @@ namespace Hotline.Application.Bigscreen
 			var call24List = (from t1 in timeList
 				join t2 in call24 on t1 equals t2.Time into t1_t2
 				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;
 		}
 
@@ -50,7 +54,7 @@ namespace Hotline.Application.Bigscreen
 		{
 			var callTop10 = await _callRepository.Queryable()
 				.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)
 				.Select(x => new
@@ -65,7 +69,7 @@ namespace Hotline.Application.Bigscreen
 		{
 			var callList = await _callRepository.Queryable()
 				.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
 				{
@@ -88,7 +92,7 @@ namespace Hotline.Application.Bigscreen
 			}
 			var callAverage = await _callRepository.Queryable()
 				.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()
 				.GroupBy(x => x.time)
@@ -103,8 +107,14 @@ namespace Hotline.Application.Bigscreen
 			var callAverageList = (from t1 in timeList
 				join t2 in callAverage on t1 equals t2.Time into t1_t2
 				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);
 
         /// <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>
         /// 撤回至发起人节点

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

@@ -55,7 +55,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     private readonly IMapper _mapper;
     private readonly IFileRepository _fileRepository;
 
-    public WorkflowApplication(
+	public WorkflowApplication(
         IDefinitionDomainService definitionDomainService,
         IWorkflowDomainService workflowDomainService,
         IOrderDomainService orderDomainService,
@@ -72,7 +72,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         ITimeLimitDomainService timeLimitDomainService,
         ISessionContext sessionContext,
         IMapper mapper,
-        IFileRepository fileRepository
+		IFileRepository fileRepository
     )
     {
         _definitionDomainService = definitionDomainService;
@@ -140,7 +140,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         var workflow = await _workflowDomainService.CreateWorkflowAsync(wfModule, dto.Title,
             _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,
             new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) });
@@ -236,13 +236,25 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     {
         var workflow =
             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>
-    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 =
             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>
-		public string? AuditOpinion { get; set; }
+		public string? AuditContent { get; set; }
 
 	}
 	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.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
+using Hotline.Users;
 using XF.Domain.Entities;
 
 namespace Hotline.FlowEngine.Workflows
@@ -49,11 +50,11 @@ namespace Hotline.FlowEngine.Workflows
         Task NextAsync(Workflow workflow, WorkflowStep currentStep, NextWorkflowDto dto, StepDefine nextStepDefine,
             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>
         /// 撤回(返回到之前任意节点)

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

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

@@ -87,5 +87,17 @@ namespace Hotline.Orders
 		/// </summary>
 		[SugarColumn(ColumnDescription = "退回部门名称")]
 		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; }
 	}
 }