BiKnowledgeController.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Hotline.KnowledgeBase;
  2. using Hotline.Share.Dtos.Knowledge;
  3. using Hotline.Share.Dtos;
  4. using Hotline.Share.Enums.KnowledgeBase;
  5. using Microsoft.AspNetCore.Mvc;
  6. using SqlSugar;
  7. using Hotline.Settings;
  8. using Hotline.Repository.SqlSugar.Extensions;
  9. using XF.Domain.Exceptions;
  10. using Hotline.Orders;
  11. using Hotline.Share.Dtos.Order;
  12. using Hotline.Share.Requests;
  13. using Hotline.Tools;
  14. using MapsterMapper;
  15. using Org.BouncyCastle.Utilities;
  16. namespace Hotline.Api.Controllers.Bi
  17. {
  18. public class BiKnowledgeController : BaseController
  19. {
  20. private readonly IKnowledgeRepository _knowledgeRepository;
  21. private readonly IMapper _mapper;
  22. public BiKnowledgeController(IKnowledgeRepository knowledgeRepository, IMapper mapper)
  23. {
  24. _knowledgeRepository = knowledgeRepository;
  25. _mapper = mapper;
  26. }
  27. /// <summary>
  28. ///知识库数据统计
  29. /// </summary>
  30. /// <param name="dto"></param>
  31. /// <returns></returns>
  32. [HttpGet("data_list")]
  33. public async Task<PagedDto<KnowledgeBiDataListVo>> DataList([FromQuery] KnowledgeBiDataListDto dto)
  34. {
  35. if (!dto.CreationTimeStart.HasValue || !dto.CreationTimeEnd.HasValue)
  36. throw UserFriendlyException.SameMessage("请选择时间!");
  37. var query = _knowledgeRepository.DataList(dto, HttpContext.RequestAborted);
  38. switch (dto.SortField)
  39. {
  40. case "addNum":
  41. query = dto.SortRule == 0 ? query.OrderBy(x => x.AddNum) : query.OrderByDescending(x => x.AddNum);
  42. break;
  43. case "deleteNum":
  44. query = dto.SortRule == 0 ? query.OrderBy(x => x.DeleteNum) : query.OrderByDescending(x => x.DeleteNum);
  45. break;
  46. case "sendBackNum":
  47. query = dto.SortRule == 0 ? query.OrderBy(x => x.SendBackNum) : query.OrderByDescending(x => x.SendBackNum);
  48. break;
  49. case "passNum":
  50. query = dto.SortRule == 0 ? query.OrderBy(x => x.PassNum) : query.OrderByDescending(x => x.PassNum);
  51. break;
  52. case "publicNum":
  53. query = dto.SortRule == 0 ? query.OrderBy(x => x.PublicNum) : query.OrderByDescending(x => x.PublicNum);
  54. break;
  55. }
  56. var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
  57. var Total = new KnowledgeBiDataListVo
  58. {
  59. OrgName = "合计",
  60. OrgId = "0",
  61. OrgType = null,
  62. AddNum = items.Select(x => x.AddNum).Sum(),
  63. DeleteNum = items.Select(x => x.DeleteNum).Sum(),
  64. SendBackNum = items.Select(x => x.SendBackNum).Sum(),
  65. PassNum = items.Select(x => x.PassNum).Sum(),
  66. PublicNum = items.Select(x => x.PublicNum).Sum(),
  67. };
  68. items.Add(Total);
  69. return new PagedDto<KnowledgeBiDataListVo>(total, items);
  70. }
  71. /// <summary>
  72. /// 知识库数据统计导出
  73. /// </summary>
  74. /// <returns></returns>
  75. [HttpPost("data_list/_export")]
  76. public async Task<FileStreamResult> DataList([FromBody] ExportExcelDto<KnowledgeBiDataListDto> dto)
  77. {
  78. if (!dto.QueryDto.CreationTimeStart.HasValue || !dto.QueryDto.CreationTimeEnd.HasValue)
  79. throw UserFriendlyException.SameMessage("请选择时间!");
  80. var query = _knowledgeRepository.DataList(dto.QueryDto, HttpContext.RequestAborted);
  81. List<KnowledgeBiDataListVo> data;
  82. if (dto.IsExportAll)
  83. {
  84. data = await query.ToListAsync(HttpContext.RequestAborted);
  85. }
  86. else
  87. {
  88. var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
  89. data = items;
  90. }
  91. data.Add(new KnowledgeBiDataListVo
  92. {
  93. OrgName = "合计",
  94. OrgId = "0",
  95. OrgType = null,
  96. AddNum = data.Select(x => x.AddNum).Sum(),
  97. DeleteNum = data.Select(x => x.DeleteNum).Sum(),
  98. SendBackNum = data.Select(x => x.SendBackNum).Sum(),
  99. PassNum = data.Select(x => x.PassNum).Sum(),
  100. PublicNum = data.Select(x => x.PublicNum).Sum(),
  101. });
  102. dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<KnowledgeBiDataListVo>(dto.ColumnInfos);
  103. var dtos = data
  104. .Select(stu => _mapper.Map(stu, typeof(KnowledgeBiDataListVo), dynamicClass))
  105. .Cast<object>()
  106. .ToList();
  107. var stream = ExcelHelper.CreateStream(dtos);
  108. return ExcelStreamResult(stream, "知识库数据统计");
  109. }
  110. }
  111. }