Compare commits

..

9 Commits

Author SHA1 Message Date
王卓煜
967bf09659 标签管理切换绑定的业务 2025-09-28 11:26:43 +08:00
王卓煜
3cc653e121 标签管理修复创建标签使用次数+1 2025-09-28 11:24:35 +08:00
王卓煜
300d38f974 标签管理测试环境没有boe_new数据库 2025-09-25 11:21:48 +08:00
王卓煜
fa9d80d4a5 标签关联课程下面展示标签 2025-09-19 17:27:22 +08:00
王卓煜
fb9377d0fa 标签管理关联课程数+1 2025-09-18 13:21:13 +08:00
王卓煜
2da2112993 标签管理选择标签没有进行关联,以及热点标签超过十个没有判断 2025-09-18 09:44:51 +08:00
王卓煜
29a296577d 标签管理解绑标签 2025-09-16 13:54:00 +08:00
王卓煜
d0ed822189 标签管理缺失tags字段 2025-09-15 14:14:20 +08:00
王卓煜
06015e90c7 标签管理 2025-09-12 15:25:31 +08:00
8 changed files with 115 additions and 155 deletions

View File

@@ -412,8 +412,24 @@ public class CourseFullTextApi extends ApiBaseController{
}
}
}
// 获取课程对应的标签
for (CourseFullText c : coursePageList.getList()){
String tags = c.getTags();
String[] split = tags.split(",",0);
List<String> courseTagIds = new ArrayList<>();
for (String tagId : split) {
courseTagIds.add(tagId);
}
List<CourseTag> courseTags = courseTagService.getTagsByTagIds(courseTagIds);
List<Map<String,Object>> tagList = new ArrayList<>();
for (CourseTag courseTag : courseTags) {
Map<String,Object> tag = new HashMap<>();
tag.put("tagName", courseTag.getTagName());
tag.put("id", courseTag.getId());
tagList.add(tag);
}
c.setTagList(tagList);
}
return success(coursePageList);
}catch(Exception e) {
log.error("课程全文检索错误",e);

View File

@@ -99,9 +99,8 @@ public class CourseTagApi extends ApiBaseController {
* @return
*/
@RequestMapping(value="/changeHotStatus",method= RequestMethod.POST)
public JsonResponse<Void> changeHotStatus(Long id,Boolean isHot){
courseTagService.changeHotStatus(id,isHot);
return success(null);
public JsonResponse<Boolean> changeHotStatus(Long id,Boolean isHot){
return courseTagService.changeHotStatus(id,isHot);
}
/**

View File

@@ -113,4 +113,12 @@ public class CourseTagRelationDao extends BaseDao<CourseTagRelation> {
.collect(Collectors.toList());
return new PageList<CourseTagRelationDto>(list,totalresults!=null?totalresults.size():0);
}
public boolean countHotTags() {
String sql = "SELECT COUNT(*) FROM boe_course_tag WHERE is_hot = 1";
Query query = entityManager.createNativeQuery(sql);
Object result = query.getSingleResult();
long count = Long.parseLong(result.toString());
return count >= 10;
}
}

View File

@@ -1,6 +1,5 @@
package com.xboe.module.course.dto;
import com.xboe.module.course.entity.CourseTag;
import lombok.Data;
import java.util.List;
@@ -142,5 +141,4 @@ public class CourseQueryDto {
private String userId;
private String tags;
}

View File

@@ -343,6 +343,4 @@ public interface ICourseService {
List<Course> findByIds(List<String> courseIds);
void deletedStudyResourceBatchByCourseIdAndType(String courseId,Integer courseType);
void getPhpCourseData();
}

View File

@@ -2,16 +2,10 @@ package com.xboe.module.course.service;
import com.xboe.common.OrderCondition;
import com.xboe.common.PageList;
import com.xboe.core.CurrentUser;
import com.xboe.core.JsonResponse;
import com.xboe.core.orm.IFieldFilter;
import com.xboe.module.article.entity.Article;
import com.xboe.module.course.dto.CourseTagQueryDto;
import com.xboe.module.course.dto.CourseTagRelationDto;
import com.xboe.module.course.entity.CourseTag;
import com.xboe.module.course.entity.CourseTagRelation;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
@@ -48,11 +42,12 @@ public interface ICourseTagService {
/**
* 修改指定id的课程标签的热点属性
*
* @param id
* @param isHot
* @return
*/
void changeHotStatus(Long id,Boolean isHot);
JsonResponse<Boolean> changeHotStatus(Long id, Boolean isHot);
/**
* 解除指定id的课程和某个标签之间的关联关系
@@ -89,4 +84,8 @@ public interface ICourseTagService {
List<CourseTag> getTagsByIds(String id);
CourseTag getTagByName(String tagName);
void bindTag(String id, String tags);
List<CourseTag> getTagsByTagIds(List<String> courseTagIds);
}

View File

@@ -16,21 +16,12 @@ import javax.annotation.Resource;
import javax.management.Query;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.xboe.api.ThirdApi;
import com.xboe.core.orm.*;
import com.xboe.module.course.dto.CourseTagRelationDto;
import com.xboe.module.course.entity.*;
import com.xboe.module.course.service.ICourseTagService;
import com.xboe.school.study.dao.StudyCourseDao;
import com.xboe.school.study.entity.StudyCourse;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.HttpClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
@@ -63,6 +54,12 @@ import com.xboe.module.course.dao.CourseUpdateLogDao;
import com.xboe.module.course.dto.CourseFullDto;
import com.xboe.module.course.dto.CourseQueryDto;
import com.xboe.module.course.dto.RankingDto;
import com.xboe.module.course.entity.Course;
import com.xboe.module.course.entity.CourseCrowd;
import com.xboe.module.course.entity.CourseHRBPAudit;
import com.xboe.module.course.entity.CourseSection;
import com.xboe.module.course.entity.CourseTeacher;
import com.xboe.module.course.entity.CourseUpdateLog;
import com.xboe.module.course.service.ICourseFullTextSearch;
import com.xboe.module.course.service.ICourseService;
import com.xboe.module.interaction.service.ICourseGradeService;
@@ -129,6 +126,8 @@ public class CourseServiceImpl implements ICourseService {
@Resource
RestHighLevelClient restHighLevelClient;
/**
* 生成过滤条件
@@ -494,7 +493,7 @@ public class CourseServiceImpl implements ICourseService {
String sql = "SELECT DISTINCT\n" +
"rt.course_id\n" +
"FROM\n" +
"boe_new.student s INNER JOIN boe_new.router_task rt on s.pid=rt.router_id inner join boe_course c on c.id=rt.course_id\n" +
"boe.student s INNER JOIN boe.router_task rt on s.pid=rt.router_id inner join boe_course c on c.id=rt.course_id\n" +
"\n" +
"WHERE\n" +
"\n" +
@@ -517,7 +516,7 @@ public class CourseServiceImpl implements ICourseService {
String sql = "SELECT DISTINCT\n" +
"pt.course_id\n" +
"FROM\n" +
"boe_new.student s INNER JOIN boe_new.project_task pt on s.pid=pt.project_id inner join boe_course c on c.id=pt.course_id\n" +
"boe.student s INNER JOIN boe.project_task pt on s.pid=pt.project_id inner join boe_course c on c.id=pt.course_id\n" +
"\n" +
"WHERE\n" +
"\n" +
@@ -574,8 +573,8 @@ public class CourseServiceImpl implements ICourseService {
String sql = "SELECT DISTINCT\n" +
"\tc.id \n" +
"FROM\n" +
"\tboe_new.student s\n" +
"\tINNER JOIN boe_new.grow_task gt ON s.pid = gt.grow_id\n" +
"\tboe.student s\n" +
"\tINNER JOIN boe.grow_task gt ON s.pid = gt.grow_id\n" +
"\tINNER JOIN boe_course c ON gt.course_id = c.id \n" +
"WHERE\n" +
"\ts.type = 14 \n" +
@@ -981,6 +980,7 @@ public class CourseServiceImpl implements ICourseService {
Course c = full.getCourse();//当前的课程信息
Course nowCourse = courseDao.get(c.getId());//修改之前的课程信息
StringBuffer stringBuffer = new StringBuffer("[");
//追加日志内容
appendUpdateLog(stringBuffer, nowCourse, c);
@@ -998,21 +998,6 @@ public class CourseServiceImpl implements ICourseService {
if (c.getVisible() == null) {
c.setVisible(true);
}
if (c.getTags() != null && !c.getTags().isEmpty()){
CourseTagRelationDto courseTagRelationDto = new CourseTagRelationDto();
courseTagRelationDto.setCourseId(c.getId());
courseTagRelationDto.setSysType1(c.getSysType1());
courseTagRelationDto.setSysType2(c.getSysType2());
courseTagRelationDto.setSysType3(c.getSysType3());
String tags = c.getTags();
List<CourseTag> tagList = courseTagService.getTagsByIds(tags);
if (ObjectUtil.isNotEmpty(tagList)){
for (CourseTag tag : tagList) {
courseTagRelationDto.setTagName(tag.getTagName());
courseTagService.createTag(courseTagRelationDto);
}
}
}
courseDao.update(c);
c.setSysVersion(courseDao.getVersion(c.getId()));
full.getCourse().setSysVersion(c.getSysVersion());
@@ -1039,7 +1024,9 @@ public class CourseServiceImpl implements ICourseService {
publishUtil.removeByDocId(c.getFullTextId());
}
// 添加课程对应的标签
String tags = full.getCourse().getTags();
courseTagService.bindTag(c.getId(), tags);
}
@Override
@@ -2014,108 +2001,7 @@ public class CourseServiceImpl implements ICourseService {
return courseDao.findListByHql("Select new Course(id,studys,score) from Course where id in(?1)", ids);
}
private class Result{
private Boolean success;
private Data data;
private class Data{
private List<Map<String,Object>> result;
public List<Map<String, Object>> getResult() {
return result;
}
public void setResult(List<Map<String, Object>> result) {
this.result = result;
}
}
public void setData(Data data) {
this.data = data;
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public Data getData() {
return data;
}
}
@Override
public void getPhpCourseData() {
HttpRequest request = HttpUtil.createGet("https://u.boe.com/api/b1/new-employee/course-list");
HttpResponse response = request.execute();
String body = response.body();
Result result = JSON.parseObject(body,Result.class);
log.info("php课程数据获取成功");
List<Map<String,Object>> phpCourseDataList = result.getData().getResult();
for (Map<String, Object> phpCourseData : phpCourseDataList){
log.info("开始同步数据:"+phpCourseData.get("course_name"));
}
List<Map<String,Object>> phpStudyCourseList = null;
// 查询数据库中是否存在php课程数据
for (int i = 0; i < phpCourseDataList.size(); i++) {
// 查询php的课程数据在数据库中是否已经存在
String phpCourseName = (String) phpCourseDataList.get(i).get("course_name");
Boolean exist = isCourseName(phpCourseName,"");
if (!exist){
log.info(phpCourseName+"不存在,开始同步");
Course newCourse = new Course();
// 设置学习人数
int studys = Integer.parseInt(phpCourseDataList.get(i).get("learned_number").toString());
newCourse.setStudys(studys);
// 设置系统版本
int version = Integer.parseInt(phpCourseDataList.get(i).get("version").toString());
newCourse.setSysVersion(version);
// 设置电脑端还是手机端可见
int pcDevice = Integer.parseInt(phpCourseDataList.get(i).get("is_display_pc").toString());
int mobileDevice = Integer.parseInt(phpCourseDataList.get(i).get("is_display_mobile").toString());
if (pcDevice == 1 && mobileDevice == 1){
newCourse.setDevice(3);
} else if (pcDevice == 0 && mobileDevice == 1) {
newCourse.setDevice(2);
}else if(pcDevice == 1 && mobileDevice == 0){
newCourse.setDevice(1);
}
// 判断是否按照顺序学习
int orderStudy = Integer.parseInt(phpCourseDataList.get(i).get("mod_type").toString());
newCourse.setOrderStudy(orderStudy == 1 ? true : false);
// 设置课程简介
String summary = (String) phpCourseDataList.get(i).get("course_desc_nohtml");
newCourse.setSummary(summary);
// 设置课程类型
int courseType = Integer.parseInt(phpCourseDataList.get(i).get("course_type").toString());
newCourse.setType(courseType == 0 ? 20 : 30);
// 设置学习时长
int courseTime = Integer.parseInt(phpCourseDataList.get(i).get("course_period").toString());
newCourse.setStudyTime(courseTime);
// 设置课程封面
newCourse.setCoverImg("https://u.boe.com/pc/images/bgimg/course.png");
newCourse.setName(phpCourseName);
newCourse.setStatus(5);
newCourse.setComments(0);
newCourse.setDeleted(false);
newCourse.setEnabled(true);
newCourse.setFavorites(0);
newCourse.setIsTop(false);
newCourse.setViews(0);
newCourse.setPraises(0);
newCourse.setTrampleCount(0);
newCourse.setShares(0);
newCourse.setScore(0f);
courseDao.save(newCourse);
}else {
log.info(phpCourseName+"存在");
}
}
}
@Override
public void deletedStudyResourceBatchByCourseIdAndType(String courseId, Integer courseType) {
DeleteByQueryRequest request = new DeleteByQueryRequest("new_study_resource");

View File

@@ -2,6 +2,7 @@ package com.xboe.module.course.service.impl;
import com.xboe.common.OrderCondition;
import com.xboe.common.PageList;
import com.xboe.core.JsonResponse;
import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.IFieldFilter;
import com.xboe.core.orm.QueryBuilder;
@@ -14,7 +15,6 @@ import com.xboe.module.course.entity.Course;
import com.xboe.module.course.entity.CourseTag;
import com.xboe.module.course.entity.CourseTagRelation;
import com.xboe.module.course.entity.CourseTypeTagRelation;
import com.xboe.module.course.service.ICourseService;
import com.xboe.module.course.service.ICourseTagService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -40,7 +40,6 @@ public class CourseTagServiceImpl implements ICourseTagService {
PublishCourseUtil publishUtil;
@Resource
private CourseTagRelationDao courseTagRelationDao;
@Resource
private CourseTypeTagRelationDao courseTypeTagRelationDao;
@Resource
@@ -106,18 +105,32 @@ public class CourseTagServiceImpl implements ICourseTagService {
/**
* 修改指定id的课程标签的热点属性
*
* @param id
* @param isHot
* @return
*/
@Override
public void changeHotStatus(Long id, Boolean isHot) {
public JsonResponse<Boolean> changeHotStatus(Long id, Boolean isHot) {
// 当标签切换为热点标签时才会判断,超过十个热点标签则禁止设置
JsonResponse<Boolean> objectJsonResponse = new JsonResponse<>();
if (isHot){
if (courseTagRelationDao.countHotTags()){
objectJsonResponse.setStatus(400);
objectJsonResponse.setMessage("超过十个热点标签,无法进行设置");
objectJsonResponse.setResult(false);
return objectJsonResponse;
}
}
CourseTag courseTag = courseTagDao.findOne(FieldFilters.eq("id", String.valueOf(id)));
if (courseTag!=null){
courseTag.setIsHot(isHot);
courseTag.setLastSetHotTime(isHot?LocalDateTime.now():null);
courseTagDao.update(courseTag);
}
objectJsonResponse.setStatus(200);
objectJsonResponse.setMessage("修改成功");
return objectJsonResponse;
}
/**
@@ -197,13 +210,13 @@ public class CourseTagServiceImpl implements ICourseTagService {
courseTag.setTagName(tagName);
courseTag.setIsPublic(false);
courseTag.setIsHot(false);
courseTag.setUseCount(1);
courseTag.setUseCount(0);
courseTagDao.save(courseTag);
//新建一条标签和课程的关联关系
CourseTagRelation courseTagRelation = new CourseTagRelation();
courseTagRelation.setTagId(Long.valueOf(courseTag.getId()));
courseTagRelation.setCourseId(courseId);
courseTagRelationDao.save(courseTagRelation);
// //新建一条标签和课程的关联关系
// CourseTagRelation courseTagRelation = new CourseTagRelation();
// courseTagRelation.setTagId(Long.valueOf(courseTag.getId()));
// courseTagRelation.setCourseId(courseId);
// courseTagRelationDao.save(courseTagRelation);
}else {//1.2 否则修改标签
courseTag=courseTagList.get(0);
// 当同一标签被3个及以上课管创建时默认开启这个标签的公共化
@@ -243,6 +256,49 @@ public class CourseTagServiceImpl implements ICourseTagService {
return courseTag;
}
@Override
public List<CourseTag> getTagsByTagIds(List<String> courseTagIds) {
List<CourseTag> courseTagList = courseTagDao.findList(FieldFilters.in("id", courseTagIds));
return courseTagList;
}
@Override
public void bindTag(String id, String tags) {
// 将tags转换为数组
String[] tagIds = tags.split(",");
List<Long> tagIdList = new ArrayList<>();
for (String tagId : tagIds){
tagIdList.add(Long.valueOf(tagId));
}
for (Long tagId : tagIdList){
QueryBuilder courseTagQuery=QueryBuilder.from(CourseTag.class);
List<IFieldFilter> courseTagFilters = new ArrayList<>();
courseTagFilters.add(FieldFilters.eq("id",tagId.toString()));//精确匹配
courseTagQuery.addFilters(courseTagFilters);
//修改该标签关联课程数
CourseTag courseTag = courseTagDao.findOne(FieldFilters.eq("id", String.valueOf(tagId)));
if (courseTag!=null){
//更新该标签的关联课程数量
courseTag.setUseCount(courseTag.getUseCount()+1);
courseTagDao.saveOrUpdate(courseTag);
}
// 查询课程是否绑定了标签
QueryBuilder query=QueryBuilder.from(CourseTagRelation.class);
List<IFieldFilter> filters = new ArrayList<>();
filters.add(FieldFilters.eq("courseId",Long.valueOf(id)));
filters.add(FieldFilters.eq("tagId",Long.valueOf(tagId)));
query.addFilters(filters);
List<CourseTagRelation> courseTagRelationList = courseTagRelationDao.findList(query.builder());
// 如果没有绑定标签,那么就进行绑定
if (courseTagRelationList==null || courseTagRelationList.size()==0){
CourseTagRelation courseTagRelation = new CourseTagRelation();
courseTagRelation.setTagId(Long.valueOf(tagId));
courseTagRelation.setCourseId(Long.valueOf(id));
courseTagRelationDao.save(courseTagRelation);
}
}
}
@Override
public CourseTag getTagByName(String tagName) {
CourseTag courseTag = courseTagDao.getTagByName(tagName);