Преглед на файлове

自动延期系统设置判断

田爽 преди 6 месеца
родител
ревизия
46f8a05684
променени са 1 файла, в които са добавени 84 реда и са изтрити 79 реда
  1. 84 79
      src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

+ 84 - 79
src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

@@ -238,96 +238,101 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(EventNames.HotlineOrderAutomaticDelay)]
         public async Task AutomaticDelay(PublishAutomaticDelayDto dto, CancellationToken cancellationToken) 
         {
-            var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
-			var expiredTime = DateTime.Now.AddHours(1);
-			if (order != null && order.Status < EOrderStatus.Filed && order.ExpiredTime >= DateTime.Now)
-			{
-				if (order.ExpiredTime <= expiredTime)
+            var enabled = _systemSettingCacheManager.GetSetting(SettingConstants.EnabledAutomaticDelay)?.SettingValue[0];
+            if (bool.Parse(enabled))
+            {
+				var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+				var expiredTime = DateTime.Now.AddHours(1);
+				if (order != null && order.Status < EOrderStatus.Filed && order.ExpiredTime >= DateTime.Now)
 				{
-                    var delayAny= await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining).AnyAsync();
-                    if (!delayAny)
-                    {
-						var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.AutomaticDelayNum > 0).ToListAsync(cancellationToken);
-						var delay = new OrderDelay();
-						if (delays.Any())
+					if (order.ExpiredTime <= expiredTime)
+					{
+						var delayAny = await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining).AnyAsync();
+						if (!delayAny)
 						{
-							delay = delays.First();
-							delay.AfterDelay = (await _expireTime
-								.CalcEndTime(delay.BeforeDelay.Value, delay.DelayUnit, delay.DelayNum, order.AcceptTypeCode))?.EndTime; //todo
-							await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now,AfterDelay = delay.AfterDelay })
-								.Where(x => x.Id == delay.Id).ExecuteCommandAsync(cancellationToken);
-						}
-						else
-						{
-                            delay.OrderId = order.Id;
-							delay.EmployeeId = "";
-							delay.EmployeeName = "系统自动延期";
-							delay.ApplyOrgName = OrgSeedData.CenterName;
-							delay.ApplyOrgCode = OrgSeedData.CenterId;
-							delay.DelayApplyType = EDelayApplyType.LocalApply;
-							delay.BeforeDelay = order.ExpiredTime;
-							delay.DelayState = EDelayState.Pass;
-							delay.DelayReason = "系统自动延期";
-							delay.ApplyDelayTime = DateTime.Now;
-							delay.No = order.No;
-							delay.AutomaticDelayNum = 1;
-							delay.DelayNum = 1;
-							delay.DelayUnit = Share.Enums.Settings.ETimeType.WorkDay;
-							delay.IsProDelay = false;
-                            delay.CreatorOrgId = OrgSeedData.CenterId;
-							delay.CreatorOrgName = OrgSeedData.CenterName;
-							delay.CreatorName = "系统自动延期";
-							if (delay.BeforeDelay != null)
+							var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.AutomaticDelayNum > 0).ToListAsync(cancellationToken);
+							var delay = new OrderDelay();
+							if (delays.Any())
 							{
+								delay = delays.First();
 								delay.AfterDelay = (await _expireTime
 									.CalcEndTime(delay.BeforeDelay.Value, delay.DelayUnit, delay.DelayNum, order.AcceptTypeCode))?.EndTime; //todo
+								await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1, ApplyDelayTime = DateTime.Now, AfterDelay = delay.AfterDelay })
+									.Where(x => x.Id == delay.Id).ExecuteCommandAsync(cancellationToken);
 							}
-							await _orderDelayRepository.AddAsync(delay,false, cancellationToken);
-						}
-						//处理工单延期
-						await _orderApplication.DelayOrderExpiredTimeAsync(order.Id, delay.DelayNum,
-							delay.DelayUnit, delay.IsProDelay, cancellationToken);
-						//发送短信
-						var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
-						var steps = workflow.Steps.Where(x => x.Status == EWorkflowStepStatus.WaitForAccept || x.Status == EWorkflowStepStatus.WaitForHandle).ToList();
-						if (steps.Any())
-						{
-                            foreach (var step in steps)
-                            {
-	                            var setting = step.HandlerOrgId == OrgSeedData.CenterId ? SettingConstants.AutomaticDelayCenterRoles : SettingConstants.AutomaticDelayDepartmentRoles;
-	                            var roleIds = _systemSettingCacheManager.GetSetting(setting)?.SettingValue;
-	                            if (step.HandlerOrgId == OrgSeedData.CenterId && string.IsNullOrEmpty(step.RoleId))
-	                            {
-		                            roleIds.Add(step.RoleId);
-	                            }
-	                            var userList = await _userRepository.Queryable().Where(x => x.OrgId == step.HandlerOrgId && x.Roles.Any(r => roleIds.Contains(r.Name))).ToListAsync(cancellationToken);
-	                            foreach (var user in userList)
-	                            {
-		                            if (!string.IsNullOrEmpty(user.PhoneNo))
-		                            {
-			                            //发送短信
-			                            var messageDto = new Share.Dtos.Push.MessageDto
-			                            {
-				                            PushBusiness = EPushBusiness.AutomaticDelay,
-				                            ExternalId = order.Id,
-				                            OrderId = order.Id,
-				                            PushPlatform = EPushPlatform.Sms,
-				                            Remark = order.Title,
-				                            Name = user.Name,
-				                            TemplateCode = "1015",
-				                            Params = new List<string>() { order.No },
-				                            TelNumber = user.PhoneNo,
-			                            };
-			                            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
-		                            }
-	                            }
+							else
+							{
+								delay.OrderId = order.Id;
+								delay.EmployeeId = "";
+								delay.EmployeeName = "系统自动延期";
+								delay.ApplyOrgName = OrgSeedData.CenterName;
+								delay.ApplyOrgCode = OrgSeedData.CenterId;
+								delay.DelayApplyType = EDelayApplyType.LocalApply;
+								delay.BeforeDelay = order.ExpiredTime;
+								delay.DelayState = EDelayState.Pass;
+								delay.DelayReason = "系统自动延期";
+								delay.ApplyDelayTime = DateTime.Now;
+								delay.No = order.No;
+								delay.AutomaticDelayNum = 1;
+								delay.DelayNum = 1;
+								delay.DelayUnit = Share.Enums.Settings.ETimeType.WorkDay;
+								delay.IsProDelay = false;
+								delay.CreatorOrgId = OrgSeedData.CenterId;
+								delay.CreatorOrgName = OrgSeedData.CenterName;
+								delay.CreatorName = "系统自动延期";
+								if (delay.BeforeDelay != null)
+								{
+									delay.AfterDelay = (await _expireTime
+										.CalcEndTime(delay.BeforeDelay.Value, delay.DelayUnit, delay.DelayNum, order.AcceptTypeCode))?.EndTime; //todo
+								}
+								await _orderDelayRepository.AddAsync(delay, false, cancellationToken);
+							}
+							//处理工单延期
+							await _orderApplication.DelayOrderExpiredTimeAsync(order.Id, delay.DelayNum,
+								delay.DelayUnit, delay.IsProDelay, cancellationToken);
+							//发送短信
+							var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true, cancellationToken: cancellationToken);
+							var steps = workflow.Steps.Where(x => x.Status == EWorkflowStepStatus.WaitForAccept || x.Status == EWorkflowStepStatus.WaitForHandle).ToList();
+							if (steps.Any())
+							{
+								foreach (var step in steps)
+								{
+									var setting = step.HandlerOrgId == OrgSeedData.CenterId ? SettingConstants.AutomaticDelayCenterRoles : SettingConstants.AutomaticDelayDepartmentRoles;
+									var roleIds = _systemSettingCacheManager.GetSetting(setting)?.SettingValue;
+									if (step.HandlerOrgId == OrgSeedData.CenterId && string.IsNullOrEmpty(step.RoleId))
+									{
+										roleIds.Add(step.RoleId);
+									}
+									var userList = await _userRepository.Queryable().Where(x => x.OrgId == step.HandlerOrgId && x.Roles.Any(r => roleIds.Contains(r.Name))).ToListAsync(cancellationToken);
+									foreach (var user in userList)
+									{
+										if (!string.IsNullOrEmpty(user.PhoneNo))
+										{
+											//发送短信
+											var messageDto = new Share.Dtos.Push.MessageDto
+											{
+												PushBusiness = EPushBusiness.AutomaticDelay,
+												ExternalId = order.Id,
+												OrderId = order.Id,
+												PushPlatform = EPushPlatform.Sms,
+												Remark = order.Title,
+												Name = user.Name,
+												TemplateCode = "1015",
+												Params = new List<string>() { order.No },
+												TelNumber = user.PhoneNo,
+											};
+											await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+										}
+									}
+								}
 							}
 						}
 					}
+					order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+					_capPublisher.PublishDelay(order.ExpiredTime.Value - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = order.Id });
 				}
-                order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
-				_capPublisher.PublishDelay(order.ExpiredTime.Value - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = order.Id });
 			}
+		
 		}
 
         /// <summary>