From c7c92a31733477533670fd570316ebf83451a448 Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Wed, 29 Oct 2025 15:58:01 +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/api/CourseTagApi.java | 1 + .../xboe/module/course/dao/CourseTagDao.java | 139 +++++++++++------- 2 files changed, 84 insertions(+), 56 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseTagApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseTagApi.java index e8263cc1..a34e9f5c 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseTagApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseTagApi.java @@ -149,6 +149,7 @@ public class CourseTagApi extends ApiBaseController { CurrentUser cuser = getCurrent(); String aid = cuser.getAccountId(); + log.info(" searchTags aid = " + aid); if (StringUtils.isNotBlank(tagName)){ List courseTagList = courseTagService.searchTags(tagName,aid,typeId); return success(courseTagList); 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 306690ea..1ca058d6 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 @@ -10,6 +10,7 @@ import com.xboe.core.orm.IQuery; import com.xboe.module.course.entity.Course; import com.xboe.module.course.entity.CourseFile; import com.xboe.module.course.entity.CourseTag; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Repository; @@ -17,6 +18,7 @@ import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; +import java.util.ArrayList; import java.util.List; /** @@ -24,6 +26,8 @@ import java.util.List; * @author:zhengge@oracle.com * @since:2025/7/2516:50 */ + +@Slf4j @Repository public class CourseTagDao extends BaseDao { @PersistenceContext @@ -105,65 +109,88 @@ public class CourseTagDao extends BaseDao { return courseTag; } - public List searchTags(String tagName, String userId, String typeId) { - StringBuilder sql = new StringBuilder(); - sql.append("SELECT id, tag_name, sys_create_time "); - sql.append("FROM ( "); - sql.append(" -- 第一个查询:非公开标签 "); - sql.append(" SELECT id, tag_name, sys_create_time "); - sql.append(" FROM boe_course_tag "); - sql.append(" WHERE deleted = 0 AND is_public = 0 "); + public PageList getList() { + log.info("------- getList ----------- "); + String sql = "select * from boe_course_tag order by sys_create_time desc limit 10"; + javax.persistence.Query query = entityManager.createNativeQuery(sql, CourseTag.class); + log.info("------- getList -----------getResultList = " + query.getResultList() ); + PageList pageList = new PageList<>(); + pageList.setCount(query.getResultList().size()); + pageList.setPageSize(1); + pageList.setList(query.getResultList()); - if (StringUtils.isNotBlank(tagName)) { - sql.append(" AND tag_name LIKE '%").append(tagName).append("%' "); - } - - sql.append(" UNION ALL "); - sql.append(" -- 第二个查询:公开标签 "); - 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 "); - sql.append(" AND r.sys_create_aid = ? "); - - if (StringUtils.isNotBlank(tagName)) { - sql.append(" AND t.tag_name LIKE '%").append(tagName).append("%' "); - } - - 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)) { - sql.append(" -- 第一排序:指定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, "); - } - - sql.append(" -- 第二排序:按创建时间倒序 "); - sql.append(" sys_create_time DESC"); - - javax.persistence.Query query = entityManager.createNativeQuery(sql.toString(), CourseTag.class); - query.setParameter(1, Long.valueOf(userId)); - - // 如果typeId不为空,设置额外的参数 - if (StringUtils.isNotBlank(typeId)) { - query.setParameter(2, Long.valueOf(typeId)); - query.setParameter(3, Long.valueOf(typeId)); - query.setParameter(4, Long.valueOf(typeId)); - } - - return query.getResultList(); + return pageList; } + public List searchTags(String tagName, String userId, String typeId) { + StringBuilder sql = new StringBuilder(); + List parameters = new ArrayList<>(); + + sql.append("SELECT id, tag_name, sys_create_time "); + 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 "); + + 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 "); + 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(); +} + + }