|
@@ -239,53 +239,75 @@ namespace Hotline.Application.Subscribers
|
|
{
|
|
{
|
|
if (order.ExpiredTime >= expiredTime)
|
|
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 });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|