main
黄海 7 months ago
parent fa15d06bd5
commit 360aebf163

@ -106,13 +106,14 @@ public class YunXiaoController extends Controller {
public void LessonConstructionExportExcel() {
List<Record> list1 = ym.LessonConstructionInfoByStageSubject();
List<Record> list2 = ym.LessonConstructionInfoByStageSubjectBook();
List<Record> 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");
}

@ -27,7 +27,7 @@ public class YunXiaoModel {
*/
public Page<Record> matchSchoolNameList(int pageNum, int pageSize) {
SqlPara sqlPara = Db.getSqlPara("YunXiao.matchSchoolNameList");
Page<Record> page=Db.paginate(pageNum, pageSize, sqlPara);
Page<Record> page = Db.paginate(pageNum, pageSize, sqlPara);
return page;
}
@ -81,7 +81,8 @@ public class YunXiaoModel {
}
/**
* +
* +
*
* @return
*/
public List<Record> LessonConstructionInfoByStageSubject() {
@ -91,6 +92,7 @@ public class YunXiaoModel {
/**
* ++
*
* @return
*/
public List<Record> LessonConstructionInfoByStageSubjectBook() {
@ -100,6 +102,7 @@ public class YunXiaoModel {
/**
*
*
* @return
*/
public List<Record> LessonConstructionInfoByXzqh() {
@ -109,6 +112,7 @@ public class YunXiaoModel {
/**
* +
*
* @return
*/
public List<Record> LessonConstructionInfoByXzqhStage() {
@ -118,6 +122,7 @@ public class YunXiaoModel {
/**
* +
*
* @return
*/
public List<Record> LessonConstructionInfoByXzqhSchool() {
@ -129,4 +134,14 @@ public class YunXiaoModel {
SqlPara sqlPara = Db.getSqlPara("YunXiao.LessonConstructionInfo");
return Db.find(sqlPara);
}
/**
*
*
* @return
*/
public List<Record> previewRank() {
SqlPara sqlPara = Db.getSqlPara("YunXiao.previewRank");
return Db.find(sqlPara);
}
}

@ -17,7 +17,7 @@ public class YunXiaoExportExcelUtil {
* @param list1
* @param list2
*/
public void LessonConstructionExportExcel(String filePath, List<Record> list1, List<Record> list2) {
public void LessonConstructionExportExcel(String filePath, List<Record> list1, List<Record> list2, List<Record> 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);

@ -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
Loading…
Cancel
Save