OrderDelayBatchReviewTaskCompetedHandler.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Hotline.BatchTask.Notifications;
  2. using Hotline.FlowEngine.Notifications;
  3. using MediatR;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Hotline.BatchTask;
  10. using Hotline.Share.Enums.BatchTask;
  11. using Hotline.Article;
  12. using Hotline.Orders;
  13. using Hotline.Share.Dtos.Article;
  14. using Hotline.Share.Enums.Article;
  15. using Hotline.Share.Enums.Order;
  16. using Microsoft.Extensions.Logging;
  17. using XF.Domain.Authentications;
  18. using XF.Domain.Repository;
  19. namespace Hotline.Application.OrderApp.Handlers.OrderDelayHandler;
  20. /// <summary>
  21. /// 延期批量审批任务执行完成
  22. /// </summary>
  23. public class OrderDelayBatchReviewTaskCompetedHandler : INotificationHandler<ApptaskCompletedNotify>
  24. {
  25. private readonly IRepository<Apptask> _apptaskRepository;
  26. private readonly IOrderDelayRepository _orderDelayRepository;
  27. private readonly ICircularRecordDomainService _circularRecordDomainService;
  28. private readonly ILogger<OrderDelayBatchReviewTaskCompetedHandler> _logger;
  29. public OrderDelayBatchReviewTaskCompetedHandler(
  30. IRepository<Apptask> apptaskRepository,
  31. IOrderDelayRepository orderDelayRepository,
  32. ICircularRecordDomainService circularRecordDomainService,
  33. ILogger<OrderDelayBatchReviewTaskCompetedHandler> logger)
  34. {
  35. _apptaskRepository = apptaskRepository;
  36. _orderDelayRepository = orderDelayRepository;
  37. _circularRecordDomainService = circularRecordDomainService;
  38. _logger = logger;
  39. }
  40. /// <summary>Handles a notification</summary>
  41. /// <param name="notification">The notification</param>
  42. /// <param name="cancellationToken">Cancellation token</param>
  43. public async Task Handle(ApptaskCompletedNotify notification, CancellationToken cancellationToken)
  44. {
  45. if (notification.ApptaskItem.TaskType is not ETaskType.OrderDelay) return;
  46. var apptask = await _apptaskRepository.Queryable()
  47. .Includes(d => d.ApptaskItems)
  48. .FirstAsync(d => d.Id == notification.ApptaskItem.ApptaskId, cancellationToken);
  49. _logger.LogInformation("批量延期审批任务执行完毕:{name}", apptask.Name);
  50. var unSuccessItems = apptask.ApptaskItems
  51. .Where(d => d.TaskStatus != ETaskStatus.Succeeded)
  52. .ToList();
  53. if (unSuccessItems.Count > 0)
  54. {
  55. // 回滚delay状态为待审批
  56. await _orderDelayRepository.Updateable()
  57. .SetColumns(d => d.DelayState == EDelayState.Examining)
  58. .Where(d => unSuccessItems.Select(x => x.BusinessId).Contains(d.Id))
  59. .ExecuteCommandAsync(cancellationToken);
  60. }
  61. await _circularRecordDomainService.AddCircularMessage(new AddCircularDto
  62. {
  63. Title = $"{apptask.Name} 执行完成",
  64. Content = $"总共:{apptask.ApptaskItems.Count}个任务,成功:{apptask.ApptaskItems.Count(d => d.TaskStatus == ETaskStatus.Succeeded)},失败:{apptask.ApptaskItems.Count(d => d.TaskStatus == ETaskStatus.Failed)}",
  65. CircularTypeId = "5",
  66. CircularTypeName = "系统消息",
  67. CircularType = ECircularType.Person,
  68. IsMustRead = false,
  69. SourceOrgId = apptask.CreatorId,
  70. SourceOrgName = apptask.CreatorName,
  71. CircularReadGroups = new List<CircularReadGroupDto>
  72. {
  73. new()
  74. {
  75. UserId = apptask.CreatorId,
  76. UserName = apptask.CreatorName
  77. }
  78. }
  79. }, cancellationToken);
  80. }
  81. }