From 448bc0f1e4ba4df083cfb830ee98b68e23740ce5 Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Wed, 29 Oct 2025 16:29:15 +0800 Subject: [PATCH] =?UTF-8?q?searchTags=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xboe/module/course/dao/CourseTagDao.java | 122 +++++++++--------- 1 file changed, 59 insertions(+), 63 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseTagDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseTagDao.java index aa8d6b3b..2a5249f5 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseTagDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/dao/CourseTagDao.java @@ -122,73 +122,69 @@ public class CourseTagDao extends BaseDao { return pageList; } - public List searchTags(String tagName, String userId, String typeId) { - StringBuilder sql = new StringBuilder(); - List parameters = new ArrayList<>(); + public List searchTags(String tagName, String userId, String typeId) { + StringBuilder sql = new StringBuilder(); + List parameters = new ArrayList<>(); - sql.append("SELECT id, tag_name "); - sql.append("FROM ( "); - // 第一个查询:非公开标签 - sql.append(" SELECT id, tag_name, sys_create_time "); - sql.append(" FROM boe_course_tag "); - sql.append(" WHERE deleted = 0 AND is_public = 0 "); + // 查询所有必要字段,保持两个UNION查询字段一致 + sql.append("SELECT id, tag_name, sys_create_time, is_public, is_hot, last_set_hot_time, deleted, sys_create_aid, sys_update_aid, sys_update_time "); + sql.append("FROM ( "); + sql.append(" SELECT id, tag_name, sys_create_time, is_public, is_hot, last_set_hot_time, deleted, sys_create_aid, sys_update_aid, sys_update_time "); + sql.append(" FROM boe_course_tag "); + sql.append(" WHERE deleted = 0 AND is_public = 0 "); - if (StringUtils.isNotBlank(tagName)) { - sql.append(" AND tag_name LIKE ? "); - parameters.add("%" + tagName + "%"); + if (StringUtils.isNotBlank(tagName)) { + sql.append(" AND tag_name LIKE ? "); + parameters.add("%" + tagName + "%"); + } + + sql.append(" UNION ALL "); + sql.append(" SELECT t.id, t.tag_name, t.sys_create_time, t.is_public, t.is_hot, t.last_set_hot_time, t.deleted, t.sys_create_aid, t.sys_update_aid, t.sys_update_time "); + sql.append(" FROM boe_course_tag_relation r "); + sql.append(" INNER JOIN boe_course_tag t ON r.tag_id = t.id "); + sql.append(" WHERE r.deleted = 0 AND t.deleted = 0 AND t.is_public = 1 "); + + if (StringUtils.isNotBlank(userId)) { + sql.append(" AND r.sys_create_aid = ? "); + parameters.add(Long.valueOf(userId)); + } + + if (StringUtils.isNotBlank(tagName)) { + sql.append(" AND t.tag_name LIKE ? "); + parameters.add("%" + tagName + "%"); + } + + // 保留GROUP BY以避免重复数据,但确保SELECT字段与GROUP BY字段一致 + sql.append(" GROUP BY t.id, t.tag_name, t.sys_create_time, t.is_public, t.is_hot, t.last_set_hot_time, t.deleted, t.sys_create_aid, t.sys_update_aid, t.sys_update_time "); + sql.append(") AS all_tags "); + sql.append("ORDER BY "); + + if (StringUtils.isNotBlank(typeId)) { + sql.append(" CASE WHEN id IN ( "); + sql.append(" SELECT tag_id "); + sql.append(" FROM boe_course_type_tag_relation "); + sql.append(" WHERE deleted = 0 "); + sql.append(" AND (sys_type1 = ? "); + sql.append(" OR sys_type2 = ? "); + sql.append(" OR sys_type3 = ?) "); + sql.append(" GROUP BY tag_id "); // 内部查询仍需要GROUP BY + sql.append(" ) THEN 0 ELSE 1 END, "); + parameters.add(Long.valueOf(typeId)); + parameters.add(Long.valueOf(typeId)); + parameters.add(Long.valueOf(typeId)); + } + + sql.append(" sys_create_time DESC"); + + javax.persistence.Query query = entityManager.createNativeQuery(sql.toString(), CourseTag.class); + + for (int i = 0; i < parameters.size(); i++) { + query.setParameter(i + 1, parameters.get(i)); + } + + return query.getResultList(); } - sql.append(" UNION ALL "); - // 第二个查询:公开标签 - sql.append(" SELECT t.id, t.tag_name, t.sys_create_time "); - sql.append(" FROM boe_course_tag_relation r "); - sql.append(" INNER JOIN boe_course_tag t ON r.tag_id = t.id "); - sql.append(" WHERE r.deleted = 0 AND t.deleted = 0 AND t.is_public = 1 "); - - if (StringUtils.isNotBlank(userId)) { - sql.append(" AND r.sys_create_aid = ? "); - parameters.add(Long.valueOf(userId)); - } - - if (StringUtils.isNotBlank(tagName)) { - sql.append(" AND t.tag_name LIKE ? "); - parameters.add("%" + tagName + "%"); - } - - sql.append(" GROUP BY t.id, t.tag_name, t.sys_create_time "); - sql.append(") AS all_tags "); - sql.append("ORDER BY "); - - // 根据typeId参数决定是否执行特殊排序 - if (StringUtils.isNotBlank(typeId)) { - // 第一排序:指定tag_id在前列 - sql.append(" CASE WHEN id IN ( "); - sql.append(" SELECT tag_id "); - sql.append(" FROM boe_course_type_tag_relation "); - sql.append(" WHERE deleted = 0 "); - sql.append(" AND (sys_type1 = ? "); - sql.append(" OR sys_type2 = ? "); - sql.append(" OR sys_type3 = ?) "); - sql.append(" GROUP BY tag_id "); - sql.append(" ) THEN 0 ELSE 1 END, "); - - parameters.add(Long.valueOf(typeId)); - parameters.add(Long.valueOf(typeId)); - parameters.add(Long.valueOf(typeId)); - } - - // 第二排序:按创建时间倒序 - sql.append(" sys_create_time DESC"); - - javax.persistence.Query query = entityManager.createNativeQuery(sql.toString(), CourseTag.class); - - // 设置所有参数 - for (int i = 0; i < parameters.size(); i++) { - query.setParameter(i + 1, parameters.get(i)); - } - - return query.getResultList(); -}