mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-11 20:06:51 +08:00
searchTags调整
This commit is contained in:
@@ -149,6 +149,7 @@ public class CourseTagApi extends ApiBaseController {
|
|||||||
|
|
||||||
CurrentUser cuser = getCurrent();
|
CurrentUser cuser = getCurrent();
|
||||||
String aid = cuser.getAccountId();
|
String aid = cuser.getAccountId();
|
||||||
|
log.info(" searchTags aid = " + aid);
|
||||||
if (StringUtils.isNotBlank(tagName)){
|
if (StringUtils.isNotBlank(tagName)){
|
||||||
List<CourseTag> courseTagList = courseTagService.searchTags(tagName,aid,typeId);
|
List<CourseTag> courseTagList = courseTagService.searchTags(tagName,aid,typeId);
|
||||||
return success(courseTagList);
|
return success(courseTagList);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.xboe.core.orm.IQuery;
|
|||||||
import com.xboe.module.course.entity.Course;
|
import com.xboe.module.course.entity.Course;
|
||||||
import com.xboe.module.course.entity.CourseFile;
|
import com.xboe.module.course.entity.CourseFile;
|
||||||
import com.xboe.module.course.entity.CourseTag;
|
import com.xboe.module.course.entity.CourseTag;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Repository;
|
|||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
import javax.persistence.PersistenceContext;
|
import javax.persistence.PersistenceContext;
|
||||||
import javax.persistence.Query;
|
import javax.persistence.Query;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,6 +26,8 @@ import java.util.List;
|
|||||||
* @author:zhengge@oracle.com
|
* @author:zhengge@oracle.com
|
||||||
* @since:2025/7/2516:50
|
* @since:2025/7/2516:50
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Repository
|
@Repository
|
||||||
public class CourseTagDao extends BaseDao<CourseTag> {
|
public class CourseTagDao extends BaseDao<CourseTag> {
|
||||||
@PersistenceContext
|
@PersistenceContext
|
||||||
@@ -105,65 +109,88 @@ public class CourseTagDao extends BaseDao<CourseTag> {
|
|||||||
return courseTag;
|
return courseTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CourseTag> searchTags(String tagName, String userId, String typeId) {
|
public PageList<CourseTag> getList() {
|
||||||
StringBuilder sql = new StringBuilder();
|
log.info("------- getList ----------- ");
|
||||||
sql.append("SELECT id, tag_name, sys_create_time ");
|
String sql = "select * from boe_course_tag order by sys_create_time desc limit 10";
|
||||||
sql.append("FROM ( ");
|
javax.persistence.Query query = entityManager.createNativeQuery(sql, CourseTag.class);
|
||||||
sql.append(" -- 第一个查询:非公开标签 ");
|
log.info("------- getList -----------getResultList = " + query.getResultList() );
|
||||||
sql.append(" SELECT id, tag_name, sys_create_time ");
|
PageList<CourseTag> pageList = new PageList<>();
|
||||||
sql.append(" FROM boe_course_tag ");
|
pageList.setCount(query.getResultList().size());
|
||||||
sql.append(" WHERE deleted = 0 AND is_public = 0 ");
|
pageList.setPageSize(1);
|
||||||
|
pageList.setList(query.getResultList());
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(tagName)) {
|
return pageList;
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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, 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user