diff --git a/src/main/java/com/dsideal/QingLong/YunXiao/Controller/YunXiaoController.java b/src/main/java/com/dsideal/QingLong/YunXiao/Controller/YunXiaoController.java index ca6bb7f0..1d7fade6 100644 --- a/src/main/java/com/dsideal/QingLong/YunXiao/Controller/YunXiaoController.java +++ b/src/main/java/com/dsideal/QingLong/YunXiao/Controller/YunXiaoController.java @@ -106,13 +106,14 @@ public class YunXiaoController extends Controller { public void LessonConstructionExportExcel() { List list1 = ym.LessonConstructionInfoByStageSubject(); List list2 = ym.LessonConstructionInfoByStageSubjectBook(); + List list3 = ym.previewRank(); YunXiaoExportExcelUtil exporter = new YunXiaoExportExcelUtil(); //获取系统临时目录 String tmpDir = System.getProperty("java.io.tmpdir"); //使用guid生成一个临时文件名,然后拼接到tmpDir后面,生成完整的临时文件路径 String tmpFile = tmpDir + File.separator + UUID.randomUUID() + ".xlsx"; - exporter.LessonConstructionExportExcel(tmpFile, list1, list2); + exporter.LessonConstructionExportExcel(tmpFile, list1, list2, list3); //提供下载 renderFile(new File(tmpFile), "课程建设情况报表.xlsx"); } @@ -133,7 +134,7 @@ public class YunXiaoController extends Controller { String tmpDir = System.getProperty("java.io.tmpdir"); //使用guid生成一个临时文件名,然后拼接到tmpDir后面,生成完整的临时文件路径 String tmpFile = tmpDir + File.separator + UUID.randomUUID() + ".xlsx"; - exporter.LessonConstructionInfoByXzqhSchool(tmpFile, list1, list2, list3,list4); + exporter.LessonConstructionInfoByXzqhSchool(tmpFile, list1, list2, list3, list4); //提供下载 renderFile(new File(tmpFile), "【区域+学校】课程建设情况报表.xlsx"); } diff --git a/src/main/java/com/dsideal/QingLong/YunXiao/Model/YunXiaoModel.java b/src/main/java/com/dsideal/QingLong/YunXiao/Model/YunXiaoModel.java index 8ba342e8..d0eb7bf9 100644 --- a/src/main/java/com/dsideal/QingLong/YunXiao/Model/YunXiaoModel.java +++ b/src/main/java/com/dsideal/QingLong/YunXiao/Model/YunXiaoModel.java @@ -27,7 +27,7 @@ public class YunXiaoModel { */ public Page matchSchoolNameList(int pageNum, int pageSize) { SqlPara sqlPara = Db.getSqlPara("YunXiao.matchSchoolNameList"); - Page page=Db.paginate(pageNum, pageSize, sqlPara); + Page page = Db.paginate(pageNum, pageSize, sqlPara); return page; } @@ -81,7 +81,8 @@ public class YunXiaoModel { } /** - * 按学段+学科进行统计 + * 按学段+学科进行统计 + * * @return */ public List LessonConstructionInfoByStageSubject() { @@ -91,6 +92,7 @@ public class YunXiaoModel { /** * 按学段+学科+册进行统计 + * * @return */ public List LessonConstructionInfoByStageSubjectBook() { @@ -100,6 +102,7 @@ public class YunXiaoModel { /** * 按行政区划进行统计 + * * @return */ public List LessonConstructionInfoByXzqh() { @@ -109,6 +112,7 @@ public class YunXiaoModel { /** * 每个区域+学段录制了多少个课程 + * * @return */ public List LessonConstructionInfoByXzqhStage() { @@ -118,6 +122,7 @@ public class YunXiaoModel { /** * 每个区域+学校录制了多少个课程 + * * @return */ public List LessonConstructionInfoByXzqhSchool() { @@ -129,4 +134,14 @@ public class YunXiaoModel { SqlPara sqlPara = Db.getSqlPara("YunXiao.LessonConstructionInfo"); return Db.find(sqlPara); } + + /** + * 学习数量排行 + * + * @return + */ + public List previewRank() { + SqlPara sqlPara = Db.getSqlPara("YunXiao.previewRank"); + return Db.find(sqlPara); + } } diff --git a/src/main/java/com/dsideal/QingLong/YunXiao/Util/YunXiaoExportExcelUtil.java b/src/main/java/com/dsideal/QingLong/YunXiao/Util/YunXiaoExportExcelUtil.java index b2685304..3dd59f0e 100644 --- a/src/main/java/com/dsideal/QingLong/YunXiao/Util/YunXiaoExportExcelUtil.java +++ b/src/main/java/com/dsideal/QingLong/YunXiao/Util/YunXiaoExportExcelUtil.java @@ -17,7 +17,7 @@ public class YunXiaoExportExcelUtil { * @param list1 * @param list2 */ - public void LessonConstructionExportExcel(String filePath, List list1, List list2) { + public void LessonConstructionExportExcel(String filePath, List list1, List list2, List list3) { try (XSSFWorkbook workbook = new XSSFWorkbook()) { // 创建样式 CellStyle headerStyle = createHeaderStyle(workbook); @@ -86,6 +86,50 @@ public class YunXiaoExportExcelUtil { // 建设数量 createCell(row, 3, record.getStr("lesson_count"), dataStyle); } + + + //第三个 Sheet + XSSFSheet sheet3 = workbook.createSheet("课程受欢迎排行榜"); + // 设置列宽 + sheet3.setColumnWidth(0, 4000); // 学段 + sheet3.setColumnWidth(1, 8000); // 科目名称 + sheet3.setColumnWidth(2, 5000); // 排名 + sheet3.setColumnWidth(3, 5000); // 观看次数 + sheet3.setColumnWidth(4, 8000); // 学校名称 + sheet3.setColumnWidth(5, 5000); // 教师姓名 + sheet3.setColumnWidth(6, 10000); // 课程名称 + // 创建表头 + headerRow = sheet3.createRow(0); + headerRow.setHeight((short) (28 * 20)); + String[] headers3 = { + "学段", "科目名称", "排名", "观看次数", "学校名称", "教师姓名", "课程名称" + }; + for (int i = 0; i < headers3.length; i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(headers3[i]); + cell.setCellStyle(headerStyle); + } + rowNum = 1; + // 填充数据 + for (Record record : list3) { + Row row = sheet3.createRow(rowNum++); + row.setHeight((short) (28 * 20)); + // 学段 + createCell(row, 0, record.getStr("stage_name"), dataStyle); + // 科目名称 + createCell(row, 1, record.getStr("subject_name"), dataStyle); + // 排名 + createCell(row, 2, record.getStr("rank"), dataStyle); + // 观看次数 + createCell(row, 3, record.getStr("preview_count"), dataStyle); + + // 学校名称 + createCell(row, 4, record.getStr("teacher_school_name"), dataStyle); + // 教师姓名 + createCell(row, 5, record.getStr("teacher_name"), dataStyle); + // 课程名称 + createCell(row, 6, record.getStr("lesson_name"), dataStyle); + } // 保存文件 try (FileOutputStream fileOut = new FileOutputStream(filePath)) { workbook.write(fileOut); diff --git a/src/main/resources/Sql/YunXiao.sql b/src/main/resources/Sql/YunXiao.sql index 8fcc8052..49c742a2 100644 --- a/src/main/resources/Sql/YunXiao.sql +++ b/src/main/resources/Sql/YunXiao.sql @@ -56,4 +56,38 @@ inner join t_crawler_subject as t4 on t1.subject_id=t4.subject_id where t2.match_type in (1,2,3) order by t2.gather_regionc,t2.organization_name,t4.subject_name,t1.teacher_name #end + -- 按预览进行排名 + #sql("previewRank") + WITH ranked_lessons AS ( + SELECT + stage_id, + subject_id, + lesson_id, + lesson_name, + teacher_name, + teacher_school_name, + preview_count, + -- 在每个 stage_id, subject_id 分组内按 preview_count 排序 + ROW_NUMBER() OVER ( + PARTITION BY stage_id, subject_id + ORDER BY preview_count DESC + ) as rank + FROM t_crawler_lesson + ) + SELECT + r.*, + s.stage_name, + sub.subject_name + FROM ranked_lessons r + -- 关联学段表获取学段名称 + LEFT JOIN t_crawler_stage s ON r.stage_id = s.stage_id + -- 关联学科表获取学科名称 + LEFT JOIN t_crawler_subject sub ON r.subject_id = sub.subject_id + AND r.stage_id = sub.stage_id + WHERE rank <= 10 -- 只获取前10名 + ORDER BY + stage_id, + subject_id, + preview_count DESC; + #end #end \ No newline at end of file