田爽 hai 7 meses
pai
achega
1295d759b5

+ 66 - 44
src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

@@ -239,53 +239,75 @@ namespace Hotline.Application.Subscribers
             {
                 if (order.ExpiredTime >= expiredTime)
                 {
-                    var delays = await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.AutomaticDelayNum > 0).ToListAsync(cancellationToken);
-                    var delay = new OrderDelay();
-					if (delays.Any())
+                    var delayAny= await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining).AnyAsync();
+                    if (!delayAny)
                     {
-	                    delay = delays.First();
-                        await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay(){ AutomaticDelayNum = x.AutomaticDelayNum +1 })
-                            .Where(x=>x.Id == delay.Id).ExecuteCommandAsync(cancellationToken);
+						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();
+							await _orderDelayRepository.Updateable().SetColumns(x => new OrderDelay() { AutomaticDelayNum = x.AutomaticDelayNum + 1 })
+								.Where(x => x.Id == delay.Id).ExecuteCommandAsync(cancellationToken);
+						}
+						else
+						{
+							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;
+							await _orderDelayRepository.AddAsync(delay, 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 step = workflow.Steps.FirstOrDefault(x => x.Status != EWorkflowStepStatus.Handled);
+						if (step != null)
+						{
+							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.OrderUrge,
+										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.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;
-					}
-					//处理工单延期
-					await _orderApplication.DelayOrderExpiredTimeAsync(order.Id, delay.DelayNum,
-		                delay.DelayUnit, delay.IsProDelay, cancellationToken);
-                    //发送短信
-                    var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true);
-                    var step = workflow.Steps.FirstOrDefault(x => x.Status != EWorkflowStepStatus.Handled);
-                    if (step != null)
-                    {
-                        if (step.HandlerOrgId == OrgSeedData.CenterId)
-                        {
-
-                        }
-                        else
-                        {
-
-                        }
-                    }
-                    
-				}
-                else {
-					_capPublisher.PublishDelay(order.ExpiredTime.Value - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishNearlyExpiredTimeSmsDto() { OrderId = order.Id });
 				}
-
+                order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+				_capPublisher.PublishDelay(order.ExpiredTime.Value - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishNearlyExpiredTimeSmsDto() { OrderId = order.Id });
 			}
 		}
 

+ 19 - 1
src/Hotline/Settings/SettingConstants.cs

@@ -494,5 +494,23 @@ namespace Hotline.Settings
         /// 是否发送超期短信
         /// </summary>
         public const string IsSendOverTimeSms = "IsSendOverTimeSms";
-    }
+
+        #region 自动延期
+        /// <summary>
+        /// 是否开启自动延期
+        /// </summary>
+        public const string EnabledAutomaticDelay = "EnabledAutomaticDelay";
+
+		/// <summary>
+		/// 自动延期短信发送部门角色
+		/// </summary>
+		public const string AutomaticDelayDepartmentRoles = "AutomaticDelayDepartmentRoles";
+
+		/// <summary>
+		/// 自动延期短信发送中心角色
+		/// </summary>
+		public const string AutomaticDelayCenterRoles = "AutomaticDelayCenterRoles";
+
+		#endregion
+	}
 }