searchTags调整

This commit is contained in:
670788339
2025-10-29 15:40:58 +08:00
parent 8c02b77724
commit 0819502afa
4 changed files with 85 additions and 8 deletions

View File

@@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@@ -45,7 +46,7 @@ public class CourseTagApi extends ApiBaseController {
* @param courseTagQueryDto
* @return
*/
@RequestMapping(value="/page",method= {RequestMethod.GET,RequestMethod.POST})
/* @RequestMapping(value="/page",method= {RequestMethod.GET,RequestMethod.POST})
public JsonResponse<PageList<CourseTag>> find(Pagination pager, CourseTagQueryDto courseTagQueryDto){
List<IFieldFilter> filters=new ArrayList<IFieldFilter>();
OrderCondition order = null;
@@ -79,18 +80,20 @@ public class CourseTagApi extends ApiBaseController {
PageList<CourseTag> list=courseTagService.query(pager.getPageIndex(),pager.getPageSize(),filters,order);
return success(list);
}
*/
/**
* 修改指定id的课程标签的公共属性
* @param id
* @param isPublic
* @return
*/
/*
@RequestMapping(value="/changePublicStatus",method= RequestMethod.POST)
public JsonResponse<Void> changePublicStatus(Long id,Boolean isPublic){
courseTagService.changePublicStatus(id,isPublic);
return success(null);
}
*/
/**
* 修改指定id的课程标签的热点属性
@@ -98,17 +101,18 @@ public class CourseTagApi extends ApiBaseController {
* @param isHot
* @return
*/
@RequestMapping(value="/changeHotStatus",method= RequestMethod.POST)
/* @RequestMapping(value="/changeHotStatus",method= RequestMethod.POST)
public JsonResponse<Void> changeHotStatus(Long id,Boolean isHot){
courseTagService.changeHotStatus(id,isHot);
return success(null);
}
}*/
/**
* 分页查询指定id的标签关联的所有课程
* @param courseTagQueryDto
* @return
*/
/*
@RequestMapping(value="/showCourseByTag",method= RequestMethod.POST)
public JsonResponse<PageList<CourseTagRelationDto>> showCourseByTag(Pagination pager, CourseTagQueryDto courseTagQueryDto){
PageList<CourseTagRelationDto> list=null;
@@ -119,11 +123,13 @@ public class CourseTagApi extends ApiBaseController {
}
return success(list);
}
*/
/**
* 解除指定id的课程和某个标签之间的关联关系
* @return
*/
/*
@RequestMapping(value="/unbind",method= RequestMethod.POST)
public JsonResponse<Void> unbindCourseTagRelation(CourseTagRelationDto courseTagRelationDto){
if (courseTagRelationDto!=null){
@@ -132,15 +138,19 @@ public class CourseTagApi extends ApiBaseController {
}
return error("解绑失败!");
}
*/
/**
* 模糊检索标签
* @return 符合检索条件的所有公共标签
*/
@RequestMapping(value="/searchTags",method= RequestMethod.POST)
public JsonResponse<List<CourseTag>> searchTags(String tagName){
public JsonResponse<List<CourseTag>> searchTags(String tagName,String typeId ,HttpServletRequest request){
CurrentUser cuser = getCurrent();
String aid = cuser.getAccountId();
if (StringUtils.isNotBlank(tagName)){
List<CourseTag> courseTagList = courseTagService.searchTags(tagName);
List<CourseTag> courseTagList = courseTagService.searchTags(tagName,aid,typeId);
return success(courseTagList);
}
return error("服务器端异常!");

View File

@@ -104,4 +104,66 @@ public class CourseTagDao extends BaseDao<CourseTag> {
CourseTag courseTag = this.findOne((FieldFilters.eq("tag_name", tagName)));
return courseTag;
}
public List<CourseTag> 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 ");
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();
}
}

View File

@@ -65,7 +65,7 @@ public interface ICourseTagService {
* @param tagName
* @return 符合检索条件的所有公共标签
*/
List<CourseTag> searchTags(String tagName);
List<CourseTag> searchTags(String tagName,String userId,String typeId);
/**
* 创建新标签,并与当前课程绑定

View File

@@ -164,7 +164,6 @@ public class CourseTagServiceImpl implements ICourseTagService {
* @param tagName
* @return 符合检索条件的所有公共标签
*/
@Override
public List<CourseTag> searchTags(String tagName){
QueryBuilder query=QueryBuilder.from(CourseTag.class);
List<IFieldFilter> filters = new ArrayList<>();
@@ -176,6 +175,12 @@ public class CourseTagServiceImpl implements ICourseTagService {
return courseTagList;
}
@Override
public List<CourseTag> searchTags(String tagName,String userId,String typeId){
List<CourseTag> tagList = courseTagDao.searchTags(tagName,userId,typeId);
return tagList;
}
/**
* 创建新标签,并与指定课程绑定
* @param courseTagRelationDto