mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-08 02:16:49 +08:00
searchTags调整
This commit is contained in:
@@ -122,73 +122,69 @@ public class CourseTagDao extends BaseDao<CourseTag> {
|
||||
return pageList;
|
||||
}
|
||||
|
||||
public List<CourseTag> searchTags(String tagName, String userId, String typeId) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> parameters = new ArrayList<>();
|
||||
public List<CourseTag> searchTags(String tagName, String userId, String typeId) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
List<Object> 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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user