using Hotline.KnowledgeBase;
using Hotline.Share.Dtos.Knowledge;
using Hotline.Share.Dtos;
using Hotline.Share.Enums.KnowledgeBase;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Hotline.Settings;
using Hotline.Repository.SqlSugar.Extensions;
using XF.Domain.Exceptions;
using Hotline.Orders;
using Hotline.Share.Dtos.Order;
using Hotline.Share.Requests;
using Hotline.Tools;
using MapsterMapper;
using Org.BouncyCastle.Utilities;
namespace Hotline.Api.Controllers.Bi
{
public class BiKnowledgeController : BaseController
{
private readonly IKnowledgeRepository _knowledgeRepository;
private readonly IMapper _mapper;
public BiKnowledgeController(IKnowledgeRepository knowledgeRepository, IMapper mapper)
{
_knowledgeRepository = knowledgeRepository;
_mapper = mapper;
}
///
///知识库数据统计
///
///
///
[HttpGet("data_list")]
public async Task> DataList([FromQuery] KnowledgeBiDataListDto dto)
{
if (!dto.CreationTimeStart.HasValue || !dto.CreationTimeEnd.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
dto.CreationTimeEnd = dto.CreationTimeEnd.Value.AddDays(1).AddSeconds(-1);
var query = _knowledgeRepository.DataList(dto, HttpContext.RequestAborted);
switch (dto.SortField)
{
case "addNum":
query = dto.SortRule == 0 ? query.OrderBy(x => x.AddNum) : query.OrderByDescending(x => x.AddNum);
break;
case "deleteNum":
query = dto.SortRule == 0 ? query.OrderBy(x => x.DeleteNum) : query.OrderByDescending(x => x.DeleteNum);
break;
case "sendBackNum":
query = dto.SortRule == 0 ? query.OrderBy(x => x.SendBackNum) : query.OrderByDescending(x => x.SendBackNum);
break;
case "passNum":
query = dto.SortRule == 0 ? query.OrderBy(x => x.PassNum) : query.OrderByDescending(x => x.PassNum);
break;
case "publicNum":
query = dto.SortRule == 0 ? query.OrderBy(x => x.PublicNum) : query.OrderByDescending(x => x.PublicNum);
break;
}
var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
var Total = new KnowledgeBiDataListVo
{
OrgName = "合计",
OrgId = "0",
OrgType = null,
AddNum = items.Select(x => x.AddNum).Sum(),
DeleteNum = items.Select(x => x.DeleteNum).Sum(),
SendBackNum = items.Select(x => x.SendBackNum).Sum(),
PassNum = items.Select(x => x.PassNum).Sum(),
PublicNum = items.Select(x => x.PublicNum).Sum(),
};
items.Add(Total);
return new PagedDto(total, items);
}
///
/// 知识库数据统计导出
///
///
[HttpPost("data_list/_export")]
public async Task DataList([FromBody] ExportExcelDto dto)
{
if (!dto.QueryDto.CreationTimeStart.HasValue || !dto.QueryDto.CreationTimeEnd.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
dto.QueryDto.CreationTimeEnd = dto.QueryDto.CreationTimeEnd.Value.AddDays(1).AddSeconds(-1);
var query = _knowledgeRepository.DataList(dto.QueryDto, HttpContext.RequestAborted);
List data;
if (dto.IsExportAll)
{
data = await query.ToListAsync(HttpContext.RequestAborted);
}
else
{
var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
data = items;
}
data.Add(new KnowledgeBiDataListVo
{
OrgName = "合计",
OrgId = "0",
OrgType = null,
AddNum = data.Select(x => x.AddNum).Sum(),
DeleteNum = data.Select(x => x.DeleteNum).Sum(),
SendBackNum = data.Select(x => x.SendBackNum).Sum(),
PassNum = data.Select(x => x.PassNum).Sum(),
PublicNum = data.Select(x => x.PublicNum).Sum(),
});
dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
var dtos = data
.Select(stu => _mapper.Map(stu, typeof(KnowledgeBiDataListVo), dynamicClass))
.Cast