From 6945b30828cb9ad463d1b6baad7e5ababbed5c25 Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Mon, 17 Nov 2025 20:41:07 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=A0=87=E7=AD=BE=E8=A7=A3=E7=BB=91?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=8F=91=E5=B8=83=E8=AF=BE=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/service/ICourseService.java | 2 ++ .../service/impl/CourseServiceImpl.java | 6 ++++++ .../xboe/module/course/vo/RePublishVo.java | 14 ++++++++++++++ .../study/api/StudySignupRpcController.java | 19 ++++++++++++++++++- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 servers/boe-server-all/src/main/java/com/xboe/module/course/vo/RePublishVo.java diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java index 80cd8997..6175a104 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseService.java @@ -348,5 +348,7 @@ public interface ICourseService { Boolean getCourseTip(String aid); + void rePublish(String courseId); + // void getPhpCourseData(); } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java index ad682ae6..7cbe7b7f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java @@ -2116,4 +2116,10 @@ public class CourseServiceImpl implements ICourseService { } return true; //用户需要提示 } + + @Override + public void rePublish(String courseId) { + Course c = courseDao.get(courseId); + publishUtil.fullTextPublish(c); + } } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/RePublishVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/RePublishVo.java new file mode 100644 index 00000000..18594572 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/vo/RePublishVo.java @@ -0,0 +1,14 @@ +package com.xboe.module.course.vo; + +import lombok.Data; + +/** + * @date 2025/11/17 + */ +@Data +public class RePublishVo { + /** + * 课程id + * */ + private String courseId; +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudySignupRpcController.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudySignupRpcController.java index 293d3346..9c9214f7 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudySignupRpcController.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudySignupRpcController.java @@ -4,6 +4,8 @@ import com.xboe.common.beans.IdName; import com.xboe.common.beans.KeyValue; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; +import com.xboe.module.course.service.ICourseService; +import com.xboe.module.course.vo.RePublishVo; import com.xboe.school.study.dto.BatchSignup; import com.xboe.school.study.entity.StudySignup; import com.xboe.school.study.service.IStudySignupService; @@ -32,7 +34,8 @@ public class StudySignupRpcController extends ApiBaseController { @Resource IStudySignupService signupService; - + @Resource + ICourseService courseService; /** * 批量添加学员 * @@ -106,4 +109,18 @@ public class StudySignupRpcController extends ApiBaseController { return StringUtils.isBlank(string); } + @PostMapping("/rePublish") + public JsonResponse rePublish(@RequestBody RePublishVo vo) { + if(vo==null || StringUtils.isBlank(vo.getCourseId())) { + return error("未指定id"); + } + try { + courseService.rePublish(vo.getCourseId()); + } catch (Exception e) { + log.error("解绑重新发布", e); + return error("解绑重新发布失败,请与管理员联系", e.getMessage()); + } + return success(true); + } + } From 7fd02ac25f6294ca562f5d3d2f00444c0eff2f46 Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Tue, 18 Nov 2025 17:56:38 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xboe/module/course/api/CourseManageApi.java | 7 +++++-- .../module/course/service/impl/CourseTagServiceImpl.java | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java index 7f62af7d..063aa49a 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseManageApi.java @@ -298,6 +298,7 @@ public class CourseManageApi extends ApiBaseController{ @PostMapping("/save") @AutoLog(module = "课程",action = "保存课程基本信息",info = "") public JsonResponse saveCourseFull(@RequestBody CourseFullDto dto, HttpServletRequest request){ + log.info("-------- 保存课程的全部信息 ------- 课程信息 = {} " , dto.getCourse()); if(dto.getCourse()==null){ return badRequest("无课程信息"); } @@ -319,6 +320,7 @@ public class CourseManageApi extends ApiBaseController{ //填充必要的信息 try { log.info("-------- 标签相关开始 ------- 课程ID = {} " , dto.getCourse().getId()); + log.info("-------- 标签相关开始 ------- 课程TAG = {} " , dto.getCourse().getTags()); CurrentUser userInfo = getCurrent(); Course oldCourse = StringUtils.isBlank(dto.getCourse().getId()) ? null : courseService.get(dto.getCourse().getId()); log.info("-------- 标签相关 ------- oldtags = {} " , oldCourse.getTags()); @@ -327,15 +329,16 @@ public class CourseManageApi extends ApiBaseController{ // 检查每个元素是否为纯数字 for (String tag : tagArray) { if (!tag.matches("\\d+")) { // 使用正则表达式检查是否为纯数字 - log.info("-------- 不是纯数字 ------- tag = {} " , tag); + log.info("-------- 不是纯数字 -------oldtags tag = {} " , tag); oldCourse.setTags(null); // 兼容 break; } } } log.info("-------- 标签相关 updateTags ------- oldtags = {} " , oldCourse.getTags()); + log.info("-------- 标签相关 updateTags ------- newtags = {} " , dto.getCourse().getTags()); tagService.updateTags(oldCourse,dto.getCourse(),userInfo); - log.info("-------- 标签相关结束 -------"); + log.info("-------- 标签相关结束 ------newtags = {} " , dto.getCourse().getTags()); if(StringUtils.isBlank(dto.getCourse().getId())) { //只有在第一次添加保存时才会这样 diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseTagServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseTagServiceImpl.java index 744f3456..8f7f6418 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseTagServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseTagServiceImpl.java @@ -410,10 +410,12 @@ public class CourseTagServiceImpl implements ICourseTagService { log.info(" --- 标签修改 --- 用户信息 userInfo = {} " , userInfo); // 获取新旧课程的标签ID列表 + log.info(" --- 旧标签1 oldTagIds = {} " , oldCourse.getTags()); + log.info(" --- 新修改1 newTagIds = {} " , newCourse.getTags()); List oldTagIds = getTagIdsFromCourse(oldCourse); List newTagIds = getTagIdsFromCourse(newCourse); - log.info(" --- 旧标签 oldTagIds = {} " , oldTagIds); - log.info(" --- 新修改 newTagIds = {} " , newTagIds); + log.info(" --- 旧标签2 oldTagIds = {} " , oldTagIds); + log.info(" --- 新修改2 newTagIds = {} " , newTagIds); if (oldCourse == null || oldTagIds.isEmpty()) { // 新增课程 - 处理所有新标签 handleNewCourseTags(newCourse, newTagIds, userInfo); From a6335abcc7524f0bd8ac1c3f025817d56db717b4 Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Tue, 18 Nov 2025 18:17:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E6=8F=90=E5=AE=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../course/service/impl/CourseServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java index 7cbe7b7f..feb21711 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java @@ -1028,13 +1028,12 @@ public class CourseServiceImpl implements ICourseService { }*/ if (!nowCourse.getSysVersion().equals(c.getSysVersion())) { - log.warn("乐观锁冲突 - 课程ID: {}, 期望版本: {}, 实际版本: {}", + log.warn(" - 课程ID: {}, 期望版本: {}, 实际版本: {}", c.getId(), c.getSysVersion(), nowCourse.getSysVersion()); -// throw new RuntimeException("数据已被其他用户修改,请刷新页面后重试"); // 基本无概率同时修改同一课程 如有 以最后提交为准 c.setSysVersion(courseDao.getVersion(c.getId())); } - + log.info("-------- 课程保存 update ------- tag = {} " , c.getTags()); courseDao.update(c); c.setSysVersion(courseDao.getVersion(c.getId())); full.getCourse().setSysVersion(c.getSysVersion()); @@ -1132,6 +1131,13 @@ public class CourseServiceImpl implements ICourseService { Course c = full.getCourse();//当前的课程信息 c.setPublished(true); c.setPublishTime(LocalDateTime.now()); + Course nowCourse = courseDao.get(c.getId()); + if (!nowCourse.getSysVersion().equals(c.getSysVersion())) { + log.warn(" - 课程ID: {}, 期望版本: {}, 实际版本: {}", + c.getId(), c.getSysVersion(), nowCourse.getSysVersion()); + // 基本无概率同时修改同一课程 如有 以最后提交为准 + c.setSysVersion(courseDao.getVersion(c.getId())); + } courseDao.update(c); // 兼容处理,记录下删除的关联数据 From 0b9db10c04f89413b5fdbd52512ac0917f8aab0f Mon Sep 17 00:00:00 2001 From: 670788339 <670788339@qq.com> Date: Wed, 19 Nov 2025 10:51:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E9=87=8F=E6=97=B6=E4=BC=9A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CoursePortalApi.java | 17 ++++++++++++----- .../service/impl/CourseServiceImpl.java | 5 ----- .../xboe/school/study/api/StudyCourseApi.java | 19 +++++++++++++------ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java index 02b27b68..34d1e825 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CoursePortalApi.java @@ -13,10 +13,7 @@ import com.xboe.module.course.dto.CourseTeacherDto; import com.xboe.module.course.dto.RankingDto; import com.xboe.module.course.dto.TeacherCourseDto; import com.xboe.module.course.entity.*; -import com.xboe.module.course.service.ICourseContentService; -import com.xboe.module.course.service.ICourseSectionService; -import com.xboe.module.course.service.ICourseService; -import com.xboe.module.course.service.ICourseTeacherService; +import com.xboe.module.course.service.*; import com.xboe.module.course.vo.CourseStudyVo; import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.teacher.entity.Teacher; @@ -33,6 +30,7 @@ import com.xboe.system.user.entity.User; import com.xboe.system.user.service.IUserService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; @@ -97,6 +95,8 @@ public class CoursePortalApi extends ApiBaseController{ @Autowired StringRedisTemplate redisTemplate; + @Resource + private ICourseTagService courseTagService; /** * 根据多个课程id返回对应的课程的图片.返回结果如下, @@ -261,7 +261,14 @@ public class CoursePortalApi extends ApiBaseController{ if(course==null || course.getDeleted()){ return badRequest("课程不存在或已被删除"); } - rs.put("course",course); + Course course1 = new Course(); + BeanUtils.copyProperties(course,course1); + if (StringUtils.isNotBlank(course.getTags()) && course.getTags().matches("[0-9,]+")) { + List tagList = courseTagService.getTagsByIds(course.getTags()); + String tags = tagList.stream().map(CourseTag::getTagName).collect(Collectors.joining(",")); + course1.setTags(tags); + } + rs.put("course",course1); List courseCrowdList = courseService.findCrowdByCourseId(id); if(crowd!=null && crowd) { diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java index 7cbe7b7f..a0ea4497 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseServiceImpl.java @@ -893,11 +893,6 @@ public class CourseServiceImpl implements ICourseService { public Course getAddView(String id) { Course c = courseDao.get(id); courseDao.updateFieldById(id, "views", c.getViews() + 1); - if (StringUtils.isNotBlank(c.getTags()) && c.getTags().matches("[0-9,]+")) { - List tagList = courseTagService.getTagsByIds(c.getTags()); - String tags = tagList.stream().map(CourseTag::getTagName).collect(Collectors.joining(",")); - c.setTags(tags); - } return c; } diff --git a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java index 92adc0d2..33429e75 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/school/study/api/StudyCourseApi.java @@ -14,12 +14,15 @@ import com.boe.feign.api.infrastructure.entity.CommonSearchVo; import com.boe.feign.api.infrastructure.entity.Dict; import com.xboe.api.ThirdApi; import com.xboe.constants.CacheName; +import com.xboe.module.course.entity.*; +import com.xboe.module.course.service.ICourseTagService; import com.xboe.module.course.vo.TeacherVo; import com.xboe.module.usergroup.service.IUserGroupService; import com.xboe.school.study.dao.StudyCourseDao; import com.xboe.school.vo.StudyTimeVo; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; @@ -36,11 +39,6 @@ import com.xboe.common.utils.StringUtil; import com.xboe.core.CurrentUser; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; -import com.xboe.module.course.entity.Course; -import com.xboe.module.course.entity.CourseContent; -import com.xboe.module.course.entity.CourseCrowd; -import com.xboe.module.course.entity.CourseSection; -import com.xboe.module.course.entity.CourseTeacher; import com.xboe.module.course.service.ICourseContentService; import com.xboe.module.course.service.ICourseSectionService; import com.xboe.module.course.service.ICourseService; @@ -102,6 +100,8 @@ public class StudyCourseApi extends ApiBaseController{ @Autowired StringRedisTemplate redisTemplate; + @Resource + private ICourseTagService courseTagService; /** * 用于查询课程的学习记录 @@ -169,7 +169,14 @@ public class StudyCourseApi extends ApiBaseController{ if(course==null || course.getDeleted()){ return badRequest("课程不存在或已被删除"); } - rs.put("course",course); + Course course1 = new Course(); + BeanUtils.copyProperties(course,course1); + if (StringUtils.isNotBlank(course.getTags()) && course.getTags().matches("[0-9,]+")) { + List tagList = courseTagService.getTagsByIds(course.getTags()); + String tags = tagList.stream().map(CourseTag::getTagName).collect(Collectors.joining(",")); + course1.setTags(tags); + } + rs.put("course",course1); List courseCrowdList = courseService.findCrowdByCourseId(cid); if(crowd!=null && crowd) {