diff --git a/schoolNewsServ/.bin/mysql/sql/initMenuData.sql b/schoolNewsServ/.bin/mysql/sql/initMenuData.sql index d88e711..8c6dafd 100644 --- a/schoolNewsServ/.bin/mysql/sql/initMenuData.sql +++ b/schoolNewsServ/.bin/mysql/sql/initMenuData.sql @@ -71,7 +71,9 @@ INSERT INTO `tb_sys_menu` (id, menu_id, name, parent_id, url, component, icon, o ('300', 'menu_study_plan', '学习计划', NULL, '/study-plan', 'study-plan/StudyPlanView', 'el-icon-reading', 3, 1, 'NavigationLayout', '1', now()), ('301', 'menu_study_tasks', '学习任务', 'menu_study_plan', '/study-plan/tasks', 'study-plan/StudyTasksView', 'el-icon-s-order', 1, 1, 'NavigationLayout', '1', now()), ('302', 'menu_course_center', '课程中心', 'menu_study_plan', '/study-plan/course', 'study-plan/CourseCenterView', 'el-icon-video-play', 2, 1, 'NavigationLayout', '1', now()), - +('303', 'menu_task_detail', '任务详情', 'menu_study_plan', '/study-plan/task-detail', 'study-plan/LearningTaskDetailView', 'el-icon-document', 3, 3, 'BlankLayout', '1', now()), +('304', 'menu_course_detail', '课程详情', 'menu_study_plan', '/study-plan/course-detail', 'study-plan/CourseDetailView', 'el-icon-video-play', 4, 3, 'BlankLayout', '1', now()), +('305', 'menu_course_study', '课程学习', 'menu_study_plan', '/study-plan/course-study', 'study-plan/CourseStudyView', 'el-icon-video-play', 5, 3, 'BlankLayout', '1', now()), ('400', 'menu_user_dropdown', '用户下拉菜单', NULL, '', '', 'el-icon-user', 4, 0, 'NavigationLayout', '1', now()), -- 个人中心 ('401', 'menu_user_center', '个人中心', 'menu_user_dropdown', '/user-center', 'user-center/UserCenterView', 'el-icon-user', 4, 1, 'NavigationLayout', '1', now()), @@ -107,9 +109,10 @@ INSERT INTO `tb_sys_menu` (id, menu_id, name, parent_id, url, component, icon, o ('3002', 'menu_admin_article', '文章管理', 'menu_admin_resource_manage', '/admin/manage/resource/article', 'admin/manage/resource/ArticleManagementView', 'el-icon-document', 2, 1, 'NavigationLayout', '1', now()), ('3003', 'menu_admin_data_records', '数据记录', 'menu_admin_resource_manage', '/admin/manage/resource/data-records', 'admin/manage/resource/DataRecordsView', 'el-icon-data-line', 3, 1, 'NavigationLayout', '1', now()), + -- 文章相关 ('3010', 'menu_article_add', '文章添加', 'menu_admin_article', '/article/add', 'article/ArticleAddView', 'el-icon-plus', 1, 3, 'NavigationLayout', '1', now()), - +('3011', 'menu_article_show', '文章展示', 'menu_admin_article', '/article/show', 'article/ArticleShowView', 'el-icon-document', 2, 3, 'NavigationLayout', '1', now()), -- 运营管理 ('4000', 'menu_admin_content_manage', '运营管理', NULL, '', '', 'el-icon-s-operation', 4, 1, '', '1', now()), ('4001', 'menu_admin_banner', 'Banner管理', 'menu_admin_content_manage', '/admin/manage/content/banner', 'admin/manage/content/BannerManagementView', 'el-icon-picture', 1, 1, 'NavigationLayout', '1', now()), @@ -153,6 +156,10 @@ INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, creat ('118', 'perm_ai_manage', 'menu_ai_assistant', '1', now()), ('119', 'perm_default', 'menu_user_dropdown', '1', now()), ('120', 'perm_news_article_add', 'menu_article_add', '1', now()), +('121', 'perm_default', 'menu_task_detail', '1', now()), +('122', 'perm_default', 'menu_course_detail', '1', now()), +('123', 'perm_default', 'menu_course_study', '1', now()), +('124', 'perm_default', 'menu_article_show', '1', now()), -- 后端管理菜单权限关联 diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/course/CourseService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/course/CourseService.java index 3dc9109..344561b 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/course/CourseService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/course/CourseService.java @@ -90,7 +90,7 @@ public interface CourseService { * @author yslg * @since 2025-10-15 */ - ResultDomain incrementViewCount(String courseID); + ResultDomain incrementViewCount(String courseID); /** * @description 增加课程学习人数 diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java index 09498d0..ba5798b 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java @@ -140,6 +140,15 @@ public interface LearningTaskService { */ ResultDomain updateTaskUserStatus(String taskID, String userID, Integer status, java.math.BigDecimal progress); + /** + * @description 获取用户整体学习进度 + * @param userID 用户ID + * @return ResultDomain 学习进度 + * @author yslg + * @since 2025-10-15 + */ + ResultDomain getUserProgress(String userID); + // ----------------任务课程相关-------------------------------- /** diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskVO.java index 2d85c0e..69aed09 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskVO.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskVO.java @@ -16,6 +16,11 @@ public class TaskVO extends BaseDTO{ private List taskCourses; private List taskResources; private List taskUsers; + private Integer totalTaskNum; + private Integer completedTaskNum; + private Integer learningTaskNum; + private Integer notStartTaskNum; + private Integer taskStatus; public TbLearningTask getLearningTask() { return learningTask; @@ -41,7 +46,37 @@ public class TaskVO extends BaseDTO{ public void setTaskUsers(List taskUsers) { this.taskUsers = taskUsers; } - + + public Integer getTotalTaskNum() { + return totalTaskNum; + } + public void setTotalTaskNum(Integer totalTaskNum) { + this.totalTaskNum = totalTaskNum; + } + public Integer getCompletedTaskNum() { + return completedTaskNum; + } + public void setCompletedTaskNum(Integer completedTaskNum) { + this.completedTaskNum = completedTaskNum; + } + public Integer getLearningTaskNum() { + return learningTaskNum; + } + public void setLearningTaskNum(Integer learningTaskNum) { + this.learningTaskNum = learningTaskNum; + } + public Integer getNotStartTaskNum() { + return notStartTaskNum; + } + public void setNotStartTaskNum(Integer notStartTaskNum) { + this.notStartTaskNum = notStartTaskNum; + } + public Integer getTaskStatus() { + return taskStatus; + } + public void setTaskStatus(Integer taskStatus) { + this.taskStatus = taskStatus; + } public List toTaskCourses() { return getTaskCourses().stream().map(TaskItemVO::toTaskCourse).collect(Collectors.toList()); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseController.java index 7a61d20..6b741e3 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseController.java @@ -75,7 +75,7 @@ public class CourseController { * 删除课程 */ @DeleteMapping("/course") - public ResultDomain deleteCourse(@PathVariable String courseID) { + public ResultDomain deleteCourse(@PathVariable("courseID") String courseID) { return courseService.deleteCourse(courseID); } @@ -103,7 +103,7 @@ public class CourseController { * 删除课程章节 */ @DeleteMapping("/course/chapter/{chapterID}") - public ResultDomain deleteChapter(@PathVariable String chapterID) { + public ResultDomain deleteChapter(@PathVariable("chapterID") String chapterID) { return courseService.deleteChapter(chapterID); } @@ -131,7 +131,7 @@ public class CourseController { * 删除课程章节节点 */ @DeleteMapping("/course/chapter/node/{nodeID}") - public ResultDomain deleteChapterNode(@PathVariable String nodeID) { + public ResultDomain deleteChapterNode(@PathVariable("nodeID") String nodeID) { return courseService.deleteChapterNode(nodeID); } @@ -147,7 +147,7 @@ public class CourseController { * 增加课程浏览次数 */ @PostMapping("/{courseID}/view") - public ResultDomain incrementViewCount(@PathVariable String courseID) { + public ResultDomain incrementViewCount(@PathVariable("courseID") String courseID) { return courseService.incrementViewCount(courseID); } @@ -155,7 +155,7 @@ public class CourseController { * 增加课程学习人数 */ @PostMapping("/{courseID}/learn") - public ResultDomain incrementLearnCount(@PathVariable String courseID) { + public ResultDomain incrementLearnCount(@PathVariable("courseID") String courseID) { return courseService.incrementLearnCount(courseID); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java index e6f468f..147c283 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningRecordController.java @@ -29,8 +29,8 @@ public class LearningRecordController { @GetMapping("/list") public ResultDomain getLearningRecords( @RequestParam(required = false) String userID, - @RequestParam(required = false) String courseID, - @RequestParam(required = false) String taskID) { + @RequestParam(required = false) String resourceType, + @RequestParam(required = false) String resourceID) { return null; // return learningRecordService.getLearningRecords(userID, courseID, taskID); } @@ -57,7 +57,7 @@ public class LearningRecordController { * 删除学习记录 */ @DeleteMapping("/{recordID}") - public ResultDomain deleteLearningRecord(@PathVariable String recordID) { + public ResultDomain deleteLearningRecord(@PathVariable("recordID") String recordID) { return null; // return learningRecordService.deleteLearningRecord(recordID); } @@ -66,7 +66,7 @@ public class LearningRecordController { * 根据ID获取学习记录 */ @GetMapping("/{recordID}") - public ResultDomain getRecordById(@PathVariable String recordID) { + public ResultDomain getRecordById(@PathVariable("recordID") String recordID) { return null; // return learningRecordService.getRecordById(recordID); } @@ -76,7 +76,7 @@ public class LearningRecordController { */ @PutMapping("/{recordID}/progress") public ResultDomain updateLearningProgress( - @PathVariable String recordID, + @PathVariable("recordID") String recordID, @RequestParam Integer progress) { return null; // return learningRecordService.updateLearningProgress(recordID, progress); @@ -86,7 +86,7 @@ public class LearningRecordController { * 完成学习 */ @PostMapping("/{recordID}/complete") - public ResultDomain completeLearning(@PathVariable String recordID) { + public ResultDomain completeLearning(@PathVariable("recordID") String recordID) { return null; // return learningRecordService.completeLearning(recordID); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java index 049a1dc..ab00c7a 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java @@ -19,6 +19,9 @@ import org.xyzh.common.dto.study.TbTaskCourse; import org.xyzh.common.dto.study.TbTaskResource; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + /** @@ -145,4 +148,13 @@ public class LearningTaskController { return learningTaskService.getUserTaskPage(filter, pageParam); } + + /** + * 用户整体学习进度 + */ + @PostMapping("/user/progress/{userID}") + public ResultDomain getUserProgress(@PathVariable("userID") String userID) { + return learningTaskService.getUserProgress(userID); + } + } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/CourseMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/CourseMapper.java index 4eff49a..92fc3b1 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/CourseMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/CourseMapper.java @@ -172,4 +172,13 @@ public interface CourseMapper extends BaseMapper { * @since 2025-10-15 */ long countCourses(@Param("filter") TbCourse filter); + + /** + * @description 增加课程浏览次数 + * @param courseID 课程ID + * @return int 影响行数 + * @author yslg + * @since 2025-10-15 + */ + int incrementViewCount(@Param("courseID") String courseID); } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCCourseServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCCourseServiceImpl.java index 2ca54b1..b159ee9 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCCourseServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCCourseServiceImpl.java @@ -424,9 +424,16 @@ public class SCCourseServiceImpl implements SCCourseService { } @Override - public ResultDomain incrementViewCount(String courseID) { - // TODO: 实现增加课程浏览次数 - return null; + public ResultDomain incrementViewCount(String courseID) { + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseMapper.incrementViewCount(courseID); + if (result > 0) { + resultDomain.success("增加课程浏览次数成功", true); + return resultDomain; + } else { + resultDomain.fail("增加课程浏览次数失败"); + return resultDomain; + } } @Override diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java index c4b5db2..b35a2b9 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java @@ -466,5 +466,20 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { return null; } - + @Override + public ResultDomain getUserProgress(String userID) { + ResultDomain resultDomain = new ResultDomain<>(); + TaskVO taskVO = new TaskVO(); + + TbTaskUser fliter = new TbTaskUser(); + fliter.setUserID(userID); + // 获取用户所有任务关联 + List taskUsers = taskUserMapper.selectTaskUsers(fliter); + taskVO.setCompletedTaskNum((int) taskUsers.stream().filter(item -> item.getStatus() == 2).count()); + taskVO.setLearningTaskNum((int) taskUsers.stream().filter(item -> item.getStatus() == 1).count()); + taskVO.setNotStartTaskNum((int) taskUsers.stream().filter(item -> item.getStatus() == 0).count()); + taskVO.setTotalTaskNum(taskUsers.size()); + resultDomain.success("获取用户整体学习进度成功", taskVO); + return resultDomain; + } } diff --git a/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml index d65c582..772fab2 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml @@ -287,4 +287,9 @@ - + + UPDATE tb_course + SET view_count = view_count + 1 + WHERE course_id = #{courseID} AND deleted = 0 + + \ No newline at end of file diff --git a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml index 48ead14..a31ad96 100644 --- a/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml +++ b/schoolNewsServ/system/src/main/resources/mapper/UserMapper.xml @@ -180,7 +180,7 @@ SELECT FROM tb_sys_user - + ORDER BY create_time DESC LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset} diff --git a/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserCollectionController.java b/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserCollectionController.java index 2d32b87..ce63ea1 100644 --- a/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserCollectionController.java +++ b/schoolNewsServ/usercenter/src/main/java/org/xyzh/usercenter/controller/UserCollectionController.java @@ -28,7 +28,7 @@ public class UserCollectionController { */ @GetMapping("/user/{userID}") public ResultDomain getUserCollections( - @PathVariable String userID, + @PathVariable("userID") String userID, @RequestParam(required = false) Integer resourceType, @RequestParam(required = false) String resourceID) { return userCollectionService.getUserCollections(userID, resourceType); @@ -69,7 +69,7 @@ public class UserCollectionController { */ @GetMapping("/count/{userID}") public ResultDomain getCollectionCount( - @PathVariable String userID, + @PathVariable("userID") String userID, @RequestParam(required = false) Integer resourceType, @RequestParam(required = false) String resourceID) { return userCollectionService.getCollectionCount(userID, resourceType, resourceID);