BiQualityController.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using Hotline.Share.Dtos.Order;
  2. using Hotline.Share.Dtos;
  3. using Hotline.Share.Requests;
  4. using MapsterMapper;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Hotline.Application.Quality;
  7. using Hotline.Repository.SqlSugar.Extensions;
  8. using Hotline.Share.Dtos.Quality;
  9. using Hotline.Tools;
  10. using Hotline.Quality;
  11. using Hotline.Share.Enums.Quality;
  12. using Hotline.Caching.Services;
  13. using Hotline.Settings;
  14. using Hotline.Share.Enums.FlowEngine;
  15. using Hotline.Share.Enums.Order;
  16. using XF.Utility.EnumExtensions;
  17. using Hotline.Caching.Interfaces;
  18. using Hotline.Users;
  19. using XF.Domain.Repository;
  20. namespace Hotline.Api.Controllers.Bi
  21. {
  22. public class BiQualityController : BaseController
  23. {
  24. private readonly IMapper _mapper;
  25. private readonly IQualityApplication _qualityApplication;
  26. private readonly IQualityRepository _qualityRepository;
  27. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  28. private readonly IRepository<User> _userRepository;
  29. public BiQualityController(
  30. IMapper mapper,
  31. IQualityApplication qualityApplication,
  32. IQualityRepository qualityRepository,
  33. ISystemSettingCacheManager systemSettingCacheManager,
  34. IRepository<User> userRepository
  35. )
  36. {
  37. _mapper = mapper;
  38. _qualityApplication = qualityApplication;
  39. _qualityRepository = qualityRepository;
  40. _systemSettingCacheManager = systemSettingCacheManager;
  41. _userRepository = userRepository;
  42. }
  43. /// <summary>
  44. /// 坐席质检分析
  45. /// </summary>
  46. /// <param name="dto"></param>
  47. /// <returns></returns>
  48. [HttpGet("seats_quality_analyse")]
  49. public async Task<PagedDto<SeatsQualityAnalyseDto>> SeatsQualityAnalyse([FromQuery] PagedKeywordRequest dto)
  50. {
  51. var (total, items) = await _qualityApplication.SeatsQualityAnalyse(dto, HttpContext.RequestAborted).ToPagedListAsync(dto, HttpContext.RequestAborted);
  52. return new PagedDto<SeatsQualityAnalyseDto>(total, _mapper.Map<IReadOnlyList<SeatsQualityAnalyseDto>>(items));
  53. }
  54. /// <summary>
  55. /// 坐席质检分析导出
  56. /// </summary>
  57. /// <param name="dto"></param>
  58. /// <returns></returns>
  59. [HttpPost("seats_quality_analyse/export")]
  60. public async Task<FileStreamResult> SeatsQualityAnalyseExport([FromBody] ExportExcelDto<PagedKeywordRequest> dto)
  61. {
  62. var query = _qualityApplication.SeatsQualityAnalyse(dto.QueryDto, HttpContext.RequestAborted);
  63. List<Hotline.Quality.Quality> lists;
  64. if (dto.IsExportAll)
  65. {
  66. lists = await query.ToListAsync(HttpContext.RequestAborted);
  67. }
  68. else
  69. {
  70. var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
  71. lists = items;
  72. }
  73. var listDtos = _mapper.Map<ICollection<SeatsQualityAnalyseDto>>(lists);
  74. dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
  75. var dtos = listDtos
  76. .Select(stu => _mapper.Map(stu, typeof(SeatsQualityAnalyseDto), dynamicClass))
  77. .Cast<object>()
  78. .ToList();
  79. var stream = ExcelHelper.CreateStream(dtos);
  80. return ExcelStreamResult(stream, "坐席质检分析");
  81. }
  82. #region 质检工作分析
  83. /// <summary>
  84. /// 质检工单概览
  85. /// </summary>
  86. /// <param name="dto"></param>
  87. /// <returns></returns>
  88. [HttpGet("quality_order_overview")]
  89. public async Task<List<QualityOrderOverviewDto>> QualityOrderOverview([FromQuery] QualityWorkAnalysisRequest dto)
  90. {
  91. var allOrderNum = await _qualityRepository.Queryable().Where(x => x.Source == EQualitySource.Accepted && x.QualityTime >= dto.StartTime && x.QualityTime <= dto.EndTime && x.State == EQualityState.End).CountAsync();
  92. var items = await _qualityApplication.QualityOrderOverview(dto,allOrderNum, HttpContext.RequestAborted).ToListAsync(HttpContext.RequestAborted);
  93. return items;
  94. }
  95. /// <summary>
  96. /// 质检工单概览导出
  97. /// </summary>
  98. /// <param name="dto"></param>
  99. /// <returns></returns>
  100. [HttpPost("quality_order_overview/export")]
  101. public async Task<FileStreamResult> QualityOrderOverviewExport([FromBody] ExportExcelDto<QualityWorkAnalysisRequest> dto)
  102. {
  103. var allOrderNum = await _qualityRepository.Queryable().Where(x => x.Source == EQualitySource.Accepted && x.QualityTime >= dto.QueryDto.StartTime && x.QualityTime <= dto.QueryDto.EndTime && x.State == EQualityState.End).CountAsync();
  104. var query = _qualityApplication.QualityOrderOverview(dto.QueryDto, allOrderNum, HttpContext.RequestAborted);
  105. List<QualityOrderOverviewDto> listDtos;
  106. listDtos = await query.ToListAsync(HttpContext.RequestAborted);
  107. //var listDtos = _mapper.Map<ICollection<SeatsQualityAnalyseDto>>(lists);
  108. dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
  109. var dtos = listDtos
  110. .Select(stu => _mapper.Map(stu, typeof(QualityOrderOverviewDto), dynamicClass))
  111. .Cast<object>()
  112. .ToList();
  113. var stream = ExcelHelper.CreateStream(dtos);
  114. return ExcelStreamResult(stream, "质检工单概览");
  115. }
  116. /// <summary>
  117. /// 坐席质检分值分析
  118. /// </summary>
  119. /// <param name="dto"></param>
  120. /// <returns></returns>
  121. [HttpGet("seats_quality_grade_analyse")]
  122. public async Task<SeatsQualityGradeAnalyseDto> SeatsQualityGradeAnalyse([FromQuery] QualityWorkAnalysisRequest dto)
  123. {
  124. var temps = await _qualityApplication.SeatsQualityGradeAnalyse(dto, HttpContext.RequestAborted).ToListAsync(HttpContext.RequestAborted);
  125. var temp = new SeatsQualityGradeAnalyseDto()
  126. {
  127. NinetyGrade = temps.Sum(x => x.NinetyGrade),
  128. EightyGrade = temps.Sum(x => x.EightyGrade),
  129. SeventyGrade = temps.Sum(x => x.SeventyGrade),
  130. SixtyGrade = temps.Sum(x => x.SixtyGrade),
  131. FiftyGrade = temps.Sum(x => x.FiftyGrade)
  132. };
  133. return temp;
  134. }
  135. /// <summary>
  136. /// 质检分值分析/坐席质检工单分析
  137. /// </summary>
  138. /// <param name="dto"></param>
  139. /// <returns></returns>
  140. [HttpGet("month_quality_grade")]
  141. public async Task<List<MonthQualityGradeDto>> MonthQualityGrade([FromQuery] QualityWorkAnalysisRequest dto)
  142. {
  143. var items = await _qualityApplication.MonthQualityGrade(dto, HttpContext.RequestAborted);
  144. return items;
  145. }
  146. /// <summary>
  147. /// 列表页面基础数据
  148. /// </summary>
  149. /// <returns></returns>
  150. [HttpGet("quality_work/base")]
  151. public async Task<object> QualityWorkBaseData()
  152. {
  153. var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RoleZuoXi);
  154. var roles = setting?.SettingValue.ToList();
  155. var users = await _userRepository.Queryable()
  156. .Includes(d => d.Organization)
  157. .Includes(d => d.Roles)
  158. .Where(d => d.Roles.Any(x => roles.Contains(x.Name)))
  159. .Select(x => new Kv {
  160. Key = x.Id,
  161. Value = x.Name
  162. })
  163. .ToListAsync(HttpContext.RequestAborted);
  164. var rsp = new
  165. {
  166. Seats = users
  167. };
  168. return rsp;
  169. }
  170. #endregion
  171. }
  172. }