|
@@ -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>
|