ContingencyManagementController.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using DotNetCore.CAP;
  2. using Hotline.Api.Filter;
  3. using Hotline.ContingencyManagement;
  4. using Hotline.Repository.SqlSugar.Extensions;
  5. using Hotline.Share.Dtos;
  6. using Hotline.Share.Dtos.ContingencyManagement;
  7. using Hotline.Share.Dtos.Order;
  8. using Hotline.Tools;
  9. using MapsterMapper;
  10. using Microsoft.AspNetCore.Mvc;
  11. using SqlSugar;
  12. using XF.Domain.Authentications;
  13. using XF.Domain.Exceptions;
  14. using XF.Domain.Repository;
  15. namespace Hotline.Api.Controllers
  16. {
  17. public class ContingencyManagementController : BaseController
  18. {
  19. private readonly IMapper _mapper;
  20. private readonly ISessionContext _sessionContext;
  21. private readonly IRepository<ContingencyManagementOrders> _contingencyManagementOrdersRepository;
  22. private readonly ICapPublisher _capPublisher;
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. /// <param name="mapper"></param>
  27. /// <param name="sessionContext"></param>
  28. /// <param name="contingencyManagementOrdersRepository"></param>
  29. /// <param name="capPublisher"></param>
  30. public ContingencyManagementController(IMapper mapper,
  31. ISessionContext sessionContext,
  32. IRepository<ContingencyManagementOrders> contingencyManagementOrdersRepository,
  33. ICapPublisher capPublisher)
  34. {
  35. _mapper = mapper;
  36. _sessionContext = sessionContext;
  37. _contingencyManagementOrdersRepository = contingencyManagementOrdersRepository;
  38. _capPublisher = capPublisher;
  39. }
  40. /// <summary>
  41. /// 应急数据查询
  42. /// </summary>
  43. /// <param name="dto"></param>
  44. /// <returns></returns>
  45. [HttpGet("getlist")]
  46. public async Task<PagedDto<ContingencyManagementOrdersDto>> GetList([FromQuery] ContingencyManagementPagedKeywordRequest dto)
  47. {
  48. var (total, items) = await _contingencyManagementOrdersRepository.Queryable()
  49. .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.ArrangeTitle.Contains(dto.Title))
  50. .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No.Contains(dto.No))
  51. .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName), p => p.HotspotSpliceName.Contains(dto.HotspotSpliceName))
  52. .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), p => p.AcceptType.Contains(dto.AcceptType))
  53. .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), p => p.SourceChannel.Contains(dto.SourceChannel))
  54. .WhereIF(dto.FiledStartTime.HasValue, p => p.FiledTime >= dto.FiledStartTime)
  55. .WhereIF(dto.FiledEndTime.HasValue, p => p.FiledTime <= dto.FiledEndTime)
  56. .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
  57. .WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
  58. .OrderByDescending(d => d.FiledTime)
  59. .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  60. return new PagedDto<ContingencyManagementOrdersDto>(total, _mapper.Map<IReadOnlyList<ContingencyManagementOrdersDto>>(items));
  61. }
  62. /// <summary>
  63. /// 应急数据查询--导出
  64. /// </summary>
  65. /// <param name="dto"></param>
  66. /// <returns></returns>
  67. [HttpPost("getlist_export")]
  68. [LogFilterAlpha("导出日志")]
  69. public async Task<FileStreamResult> GetListExport([FromBody] ExportExcelDto<ContingencyManagementPagedKeywordRequest> dto)
  70. {
  71. var query = _contingencyManagementOrdersRepository.Queryable()
  72. .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.Title), p => p.ArrangeTitle.Contains(dto.QueryDto.Title))
  73. .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.No), p => p.No.Contains(dto.QueryDto.No))
  74. .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.HotspotSpliceName), p => p.HotspotSpliceName.Contains(dto.QueryDto.HotspotSpliceName))
  75. .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.AcceptType), p => p.AcceptType.Contains(dto.QueryDto.AcceptType))
  76. .WhereIF(!string.IsNullOrEmpty(dto.QueryDto.SourceChannel), p => p.SourceChannel.Contains(dto.QueryDto.SourceChannel))
  77. .WhereIF(dto.QueryDto.FiledStartTime.HasValue, p => p.FiledTime >= dto.QueryDto.FiledStartTime)
  78. .WhereIF(dto.QueryDto.FiledEndTime.HasValue, p => p.FiledTime <= dto.QueryDto.FiledEndTime)
  79. .WhereIF(dto.QueryDto.StartTime.HasValue, p => p.CreationTime >= dto.QueryDto.StartTime)
  80. .WhereIF(dto.QueryDto.EndTime.HasValue, p => p.CreationTime <= dto.QueryDto.EndTime)
  81. .OrderByDescending(d => d.FiledTime);
  82. List<ContingencyManagementOrders> data;
  83. if (dto.IsExportAll)
  84. {
  85. data = await query.ToListAsync(HttpContext.RequestAborted);
  86. }
  87. else
  88. {
  89. var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
  90. data = items;
  91. }
  92. var dataDtos = _mapper.Map<ICollection<ContingencyManagementOrdersDto>>(data);
  93. dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<ContingencyManagementOrdersDto>(dto.ColumnInfos);
  94. var dtos = dataDtos
  95. .Select(stu => _mapper.Map(stu, typeof(ContingencyManagementOrdersDto), dynamicClass))
  96. .Cast<object>()
  97. .ToList();
  98. var stream = ExcelHelper.CreateStream(dtos);
  99. return ExcelStreamResult(stream, "应急清单数据");
  100. }
  101. /// <summary>
  102. /// 从新推送
  103. /// </summary>
  104. /// <param name="Id"></param>
  105. /// <returns></returns>
  106. [HttpGet("repush")]
  107. public async Task RePush(string Id)
  108. {
  109. var orderData = await _contingencyManagementOrdersRepository.GetAsync(p => p.Id == Id, HttpContext.RequestAborted);
  110. if (orderData == null)
  111. throw UserFriendlyException.SameMessage("查询失败");
  112. //推送消息
  113. var pushaData = _mapper.Map<ContingencyManagementOrdersDto>(orderData);
  114. pushaData.Id = orderData.Id;
  115. //推送消息
  116. await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagement,
  117. pushaData, Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagementState);
  118. }
  119. }
  120. }