ExamReportingTqesService.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using YBEE.EQM.Core;
  2. namespace YBEE.EQM.Application;
  3. /// <summary>
  4. /// TQES报表服务
  5. /// </summary>
  6. /// <param name="tqesSqlRep"></param>
  7. /// <param name="examPlanRep"></param>
  8. /// <param name="exportExcelService"></param>
  9. public class ExamReportingTqesService(ISqlRepository<TqesDbContextLocator> tqesSqlRep, IRepository<ExamPlan> examPlanRep, IExportExcelService exportExcelService) : IExamReportingTqesService, ITransient
  10. {
  11. /// <summary>
  12. /// 根据监测计划ID导出全区优势薄弱
  13. /// </summary>
  14. /// <param name="examPlanId"></param>
  15. /// <returns></returns>
  16. public async Task<(string, byte[])> ExportTotalAdvWeak(int examPlanId)
  17. {
  18. var examPlan = examPlanRep.Include(t => t.Semester).FirstOrDefault(t => t.Id == examPlanId) ?? throw Oops.Oh(ErrorCode.E2001, "监测计划");
  19. // 临时存放目录
  20. string fileRoot = Path.Combine(FileUtil.GetTempFileRoot(), $"{Guid.NewGuid()}");
  21. Directory.CreateDirectory(fileRoot);
  22. string filePath = Path.Combine(fileRoot, $"{examPlan.Name}-优势薄弱");
  23. Directory.CreateDirectory(filePath);
  24. try
  25. {
  26. var semester = examPlan.Semester;
  27. // 存储过程参数
  28. var p = new
  29. {
  30. startYear = semester.BeginYear,
  31. endYear = semester.EndYear,
  32. semesterTypeID = (int)semester.SemesterType,
  33. schoolTypeID = (int)examPlan.EducationStage - 1
  34. };
  35. #region 优势薄弱
  36. // 优势薄弱
  37. var items = await tqesSqlRep.SqlQueriesAsync<ExamReportingTqesAdvWeakDto>("EXECUTE [ir].[USP_RS_PJS_School_AdvWeak] @startYear, @endYear, @semesterTypeID, @schoolTypeID", p);
  38. // 定义EXCEL列
  39. List<ExportExcelColDto<ExamReportingTqesAdvWeakDto>> cols1 =
  40. [
  41. new() { Name = "序号", Width = 6, GetCellValue = (r) => r.RowNum },
  42. new() { Name = "城乡类别", Width = 10, GetCellValue = (r) => r.UrbanRuralTypeName },
  43. new() { Name = "学校名称", Width = 20, GetCellValue = (r) => r.SchoolName, Align = ExportExcelCellAlign.LEFT },
  44. new() { Name = "优势学科", Width = 38, GetCellValue = (r) => r.AdvCourseName, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  45. new() { Name = "数量", Width = 6, GetCellValue = (r) => r.AdvCourseCount },
  46. new() { Name = "优势班级", Width = 55, GetCellValue = (r) => r.AdvClassCourseName, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  47. new() { Name = "数量", Width = 6, GetCellValue = (r) => r.AdvClassCourseCount },
  48. new() { Name = "薄弱学科", Width = 38, GetCellValue = (r) => r.WeakCourseName, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  49. new() { Name = "数量", Width = 6, GetCellValue = (r) => r.WeakCourseCount },
  50. new() { Name = "薄弱班级", Width = 55, GetCellValue = (r) => r.WeakClassCourseName, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  51. new() { Name = "数量", Width = 6, GetCellValue = (r) => r.WeakClassCourseCount },
  52. ];
  53. var e1 = exportExcelService.ExportExcel(new ExportExcelDto<ExamReportingTqesAdvWeakDto>()
  54. {
  55. IsXlsx = true,
  56. Title = $"{examPlan.FullName}优势薄弱学科",
  57. Columns = cols1,
  58. Items = items,
  59. IncludeExportTime = false,
  60. NotSetRowHeight = true,
  61. });
  62. await File.WriteAllBytesAsync(Path.Combine(filePath, $"{examPlan.EducationStage.GetDescription()}-优势薄弱学科.xlsx"), e1);
  63. #endregion
  64. #region 优势薄弱(近两期对比)
  65. // 优势薄弱(近两期对比)
  66. var citems = await tqesSqlRep.SqlQueriesAsync<ExamReportingTqesAdvWeakCompareDto>("EXECUTE [ir].[USP_RS_PJS_School_DE_AdvWeak] @startYear, @endYear, @semesterTypeID, @schoolTypeID", p);
  67. // 定义EXCEL列
  68. List<ExportExcelColDto<ExamReportingTqesAdvWeakCompareDto>> cols2 =
  69. [
  70. new() { Name = "序号", Width = 6, GetCellValue = (r) => r.RowNum },
  71. new() { Name = "城乡类别", Width = 10, GetCellValue = (r) => r.UrbanRuralTypeName },
  72. new() { Name = "学校名称", Width = 20, GetCellValue = (r) => r.SchoolName, Align = ExportExcelCellAlign.LEFT },
  73. new() { Name = "年级学科获得改进", Width = 38, GetCellValue = (r) => r.GradeImpr, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  74. new() { Name = "年级学科继续关注", Width = 38, GetCellValue = (r) => r.GradeAttn, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  75. new() { Name = "班级学科获得改进", Width = 55, GetCellValue = (r) => r.ClassImpr, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  76. new() { Name = "班级学科继续关注", Width = 55, GetCellValue = (r) => r.ClassAttn, Align = ExportExcelCellAlign.LEFT, WrapText = true },
  77. ];
  78. var e2 = exportExcelService.ExportExcel(new ExportExcelDto<ExamReportingTqesAdvWeakCompareDto>()
  79. {
  80. IsXlsx = true,
  81. Title = $"{examPlan.FullName}优势薄弱学科(最近两期对比)",
  82. Columns = cols2,
  83. Items = citems,
  84. IncludeExportTime = false,
  85. NotSetRowHeight = true,
  86. });
  87. await File.WriteAllBytesAsync(Path.Combine(filePath, $"{examPlan.EducationStage.GetDescription()}-优势薄弱学科(最近两期对比).xlsx"), e2);
  88. #endregion
  89. string outFileName = $"{examPlan.Name}-优势薄弱-{DateTime.Now.Ticks}.zip";
  90. string outFilePath = Path.Combine(fileRoot, outFileName);
  91. ICSharpCode.SharpZipLib.Zip.FastZip zip = new();
  92. zip.CreateZip(outFilePath, filePath, true, string.Empty);
  93. var retBytes = await File.ReadAllBytesAsync(outFilePath);
  94. return (outFileName, retBytes);
  95. }
  96. catch (Exception ex)
  97. {
  98. throw new Exception("导出错误", ex);
  99. }
  100. finally
  101. {
  102. Directory.Delete(fileRoot, true);
  103. }
  104. }
  105. }