From ce2524fdcb01ed09d38dae910538939a624c9fbd Mon Sep 17 00:00:00 2001 From: yangxinyu Date: Thu, 4 Dec 2025 18:40:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E5=88=97=E8=A1=A8=E6=97=A0=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=BA=E6=95=B0=E6=97=A0=E6=B3=95=E6=9F=A5=E5=88=B0=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/school/study/dao/CourseStatDao.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java index 8bf0a374..67fbfb3d 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/dao/CourseStatDao.java @@ -26,36 +26,34 @@ public class CourseStatDao extends BaseDao { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") // 资源名 - .append("c.content_name AS contentName, ") + .append("cc.content_name AS contentName, ") // 资源ID - .append("c.content_id AS contentId, ") + .append("cc.id AS contentId, ") // 完成人数(去重统计) .append("COUNT(DISTINCT c.aid) AS finishCount, ") //2025.11.27新增:资源类型 .append("cc.content_type AS contentType ") // 你的课程表名 - .append("FROM boe_study_course_item c ") + .append("FROM boe_course_content cc ") // 2025.11.27新增:连表 boe_course_content - .append("LEFT JOIN boe_course_content cc ON cc.id = c.content_id ") - .append("WHERE 1=1 ") - // 条件:已完成 - .append("AND c.status = 9 "); + .append("LEFT JOIN boe_study_course_item c ON cc.id = c.content_id AND c.status = 9 ") + .append("WHERE 1=1 "); List params = new ArrayList<>(); // courseId非空则过滤(参数化防注入) if (StringUtils.isNotBlank(courseId)) { - sql.append("AND c.course_id = ? "); + sql.append("AND cc.course_id = ? "); params.add(courseId); } // 25.12.1修改 新增:contentName模糊查询(粗略匹配) if (StringUtils.isNotBlank(contentName)) { // 实现“包含contentName”的模糊查询 - sql.append("AND c.content_name LIKE ? "); + sql.append("AND cc.content_name LIKE ? "); // 通配符%拼接在参数上防注入,表示“前后任意字符包含contentName” params.add("%" + contentName + "%"); } // 分组+排序+分页(聚合函数必须分组,排序参考第一个代码的desc id) - sql.append("GROUP BY c.content_id, c.content_name, cc.content_type ") - .append("ORDER BY c.content_id DESC ") + sql.append("GROUP BY cc.id, cc.content_name, cc.content_type ") + .append("ORDER BY cc.id DESC ") // MySQL分页:偏移量,每页条数 .append("LIMIT ?, ?"); // 补充分页参数(顺序:startIndex → pageSize)