serv-学习任务

This commit is contained in:
2025-10-23 18:57:25 +08:00
parent 5449e5b5ff
commit 042209b98d
13 changed files with 122 additions and 23 deletions

View File

@@ -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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('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()), ('118', 'perm_ai_manage', 'menu_ai_assistant', '1', now()),
('119', 'perm_default', 'menu_user_dropdown', '1', now()), ('119', 'perm_default', 'menu_user_dropdown', '1', now()),
('120', 'perm_news_article_add', 'menu_article_add', '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()),
-- 后端管理菜单权限关联 -- 后端管理菜单权限关联

View File

@@ -90,7 +90,7 @@ public interface CourseService {
* @author yslg * @author yslg
* @since 2025-10-15 * @since 2025-10-15
*/ */
ResultDomain<TbCourse> incrementViewCount(String courseID); ResultDomain<Boolean> incrementViewCount(String courseID);
/** /**
* @description 增加课程学习人数 * @description 增加课程学习人数

View File

@@ -140,6 +140,15 @@ public interface LearningTaskService {
*/ */
ResultDomain<TbTaskUser> updateTaskUserStatus(String taskID, String userID, Integer status, java.math.BigDecimal progress); ResultDomain<TbTaskUser> updateTaskUserStatus(String taskID, String userID, Integer status, java.math.BigDecimal progress);
/**
* @description 获取用户整体学习进度
* @param userID 用户ID
* @return ResultDomain<TaskVO> 学习进度
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TaskVO> getUserProgress(String userID);
// ----------------任务课程相关-------------------------------- // ----------------任务课程相关--------------------------------
/** /**

View File

@@ -16,6 +16,11 @@ public class TaskVO extends BaseDTO{
private List<TaskItemVO> taskCourses; private List<TaskItemVO> taskCourses;
private List<TaskItemVO> taskResources; private List<TaskItemVO> taskResources;
private List<TaskItemVO> taskUsers; private List<TaskItemVO> taskUsers;
private Integer totalTaskNum;
private Integer completedTaskNum;
private Integer learningTaskNum;
private Integer notStartTaskNum;
private Integer taskStatus;
public TbLearningTask getLearningTask() { public TbLearningTask getLearningTask() {
return learningTask; return learningTask;
@@ -41,7 +46,37 @@ public class TaskVO extends BaseDTO{
public void setTaskUsers(List<TaskItemVO> taskUsers) { public void setTaskUsers(List<TaskItemVO> taskUsers) {
this.taskUsers = 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<TbTaskCourse> toTaskCourses() { public List<TbTaskCourse> toTaskCourses() {
return getTaskCourses().stream().map(TaskItemVO::toTaskCourse).collect(Collectors.toList()); return getTaskCourses().stream().map(TaskItemVO::toTaskCourse).collect(Collectors.toList());
} }

View File

@@ -75,7 +75,7 @@ public class CourseController {
* 删除课程 * 删除课程
*/ */
@DeleteMapping("/course") @DeleteMapping("/course")
public ResultDomain<Boolean> deleteCourse(@PathVariable String courseID) { public ResultDomain<Boolean> deleteCourse(@PathVariable("courseID") String courseID) {
return courseService.deleteCourse(courseID); return courseService.deleteCourse(courseID);
} }
@@ -103,7 +103,7 @@ public class CourseController {
* 删除课程章节 * 删除课程章节
*/ */
@DeleteMapping("/course/chapter/{chapterID}") @DeleteMapping("/course/chapter/{chapterID}")
public ResultDomain<Boolean> deleteChapter(@PathVariable String chapterID) { public ResultDomain<Boolean> deleteChapter(@PathVariable("chapterID") String chapterID) {
return courseService.deleteChapter(chapterID); return courseService.deleteChapter(chapterID);
} }
@@ -131,7 +131,7 @@ public class CourseController {
* 删除课程章节节点 * 删除课程章节节点
*/ */
@DeleteMapping("/course/chapter/node/{nodeID}") @DeleteMapping("/course/chapter/node/{nodeID}")
public ResultDomain<Boolean> deleteChapterNode(@PathVariable String nodeID) { public ResultDomain<Boolean> deleteChapterNode(@PathVariable("nodeID") String nodeID) {
return courseService.deleteChapterNode(nodeID); return courseService.deleteChapterNode(nodeID);
} }
@@ -147,7 +147,7 @@ public class CourseController {
* 增加课程浏览次数 * 增加课程浏览次数
*/ */
@PostMapping("/{courseID}/view") @PostMapping("/{courseID}/view")
public ResultDomain<TbCourse> incrementViewCount(@PathVariable String courseID) { public ResultDomain<Boolean> incrementViewCount(@PathVariable("courseID") String courseID) {
return courseService.incrementViewCount(courseID); return courseService.incrementViewCount(courseID);
} }
@@ -155,7 +155,7 @@ public class CourseController {
* 增加课程学习人数 * 增加课程学习人数
*/ */
@PostMapping("/{courseID}/learn") @PostMapping("/{courseID}/learn")
public ResultDomain<TbCourse> incrementLearnCount(@PathVariable String courseID) { public ResultDomain<TbCourse> incrementLearnCount(@PathVariable("courseID") String courseID) {
return courseService.incrementLearnCount(courseID); return courseService.incrementLearnCount(courseID);
} }

View File

@@ -29,8 +29,8 @@ public class LearningRecordController {
@GetMapping("/list") @GetMapping("/list")
public ResultDomain<TbLearningRecord> getLearningRecords( public ResultDomain<TbLearningRecord> getLearningRecords(
@RequestParam(required = false) String userID, @RequestParam(required = false) String userID,
@RequestParam(required = false) String courseID, @RequestParam(required = false) String resourceType,
@RequestParam(required = false) String taskID) { @RequestParam(required = false) String resourceID) {
return null; return null;
// return learningRecordService.getLearningRecords(userID, courseID, taskID); // return learningRecordService.getLearningRecords(userID, courseID, taskID);
} }
@@ -57,7 +57,7 @@ public class LearningRecordController {
* 删除学习记录 * 删除学习记录
*/ */
@DeleteMapping("/{recordID}") @DeleteMapping("/{recordID}")
public ResultDomain<Boolean> deleteLearningRecord(@PathVariable String recordID) { public ResultDomain<Boolean> deleteLearningRecord(@PathVariable("recordID") String recordID) {
return null; return null;
// return learningRecordService.deleteLearningRecord(recordID); // return learningRecordService.deleteLearningRecord(recordID);
} }
@@ -66,7 +66,7 @@ public class LearningRecordController {
* 根据ID获取学习记录 * 根据ID获取学习记录
*/ */
@GetMapping("/{recordID}") @GetMapping("/{recordID}")
public ResultDomain<TbLearningRecord> getRecordById(@PathVariable String recordID) { public ResultDomain<TbLearningRecord> getRecordById(@PathVariable("recordID") String recordID) {
return null; return null;
// return learningRecordService.getRecordById(recordID); // return learningRecordService.getRecordById(recordID);
} }
@@ -76,7 +76,7 @@ public class LearningRecordController {
*/ */
@PutMapping("/{recordID}/progress") @PutMapping("/{recordID}/progress")
public ResultDomain<TbLearningRecord> updateLearningProgress( public ResultDomain<TbLearningRecord> updateLearningProgress(
@PathVariable String recordID, @PathVariable("recordID") String recordID,
@RequestParam Integer progress) { @RequestParam Integer progress) {
return null; return null;
// return learningRecordService.updateLearningProgress(recordID, progress); // return learningRecordService.updateLearningProgress(recordID, progress);
@@ -86,7 +86,7 @@ public class LearningRecordController {
* 完成学习 * 完成学习
*/ */
@PostMapping("/{recordID}/complete") @PostMapping("/{recordID}/complete")
public ResultDomain<TbLearningRecord> completeLearning(@PathVariable String recordID) { public ResultDomain<TbLearningRecord> completeLearning(@PathVariable("recordID") String recordID) {
return null; return null;
// return learningRecordService.completeLearning(recordID); // return learningRecordService.completeLearning(recordID);
} }

View File

@@ -19,6 +19,9 @@ import org.xyzh.common.dto.study.TbTaskCourse;
import org.xyzh.common.dto.study.TbTaskResource; import org.xyzh.common.dto.study.TbTaskResource;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; 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); return learningTaskService.getUserTaskPage(filter, pageParam);
} }
/**
* 用户整体学习进度
*/
@PostMapping("/user/progress/{userID}")
public ResultDomain<TaskVO> getUserProgress(@PathVariable("userID") String userID) {
return learningTaskService.getUserProgress(userID);
}
} }

View File

@@ -172,4 +172,13 @@ public interface CourseMapper extends BaseMapper<TbCourse> {
* @since 2025-10-15 * @since 2025-10-15
*/ */
long countCourses(@Param("filter") TbCourse filter); long countCourses(@Param("filter") TbCourse filter);
/**
* @description 增加课程浏览次数
* @param courseID 课程ID
* @return int 影响行数
* @author yslg
* @since 2025-10-15
*/
int incrementViewCount(@Param("courseID") String courseID);
} }

View File

@@ -424,9 +424,16 @@ public class SCCourseServiceImpl implements SCCourseService {
} }
@Override @Override
public ResultDomain<TbCourse> incrementViewCount(String courseID) { public ResultDomain<Boolean> incrementViewCount(String courseID) {
// TODO: 实现增加课程浏览次数 ResultDomain<Boolean> resultDomain = new ResultDomain<>();
return null; int result = courseMapper.incrementViewCount(courseID);
if (result > 0) {
resultDomain.success("增加课程浏览次数成功", true);
return resultDomain;
} else {
resultDomain.fail("增加课程浏览次数失败");
return resultDomain;
}
} }
@Override @Override

View File

@@ -466,5 +466,20 @@ public class SCLearningTaskServiceImpl implements LearningTaskService {
return null; return null;
} }
@Override
public ResultDomain<TaskVO> getUserProgress(String userID) {
ResultDomain<TaskVO> resultDomain = new ResultDomain<>();
TaskVO taskVO = new TaskVO();
TbTaskUser fliter = new TbTaskUser();
fliter.setUserID(userID);
// 获取用户所有任务关联
List<TbTaskUser> 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;
}
} }

View File

@@ -287,4 +287,9 @@
<include refid="Filter_Clause" /> <include refid="Filter_Clause" />
</select> </select>
</mapper> <update id="incrementViewCount">
UPDATE tb_course
SET view_count = view_count + 1
WHERE course_id = #{courseID} AND deleted = 0
</update>
</mapper>

View File

@@ -180,7 +180,7 @@
SELECT SELECT
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
FROM tb_sys_user FROM tb_sys_user
<include refid="Where_Clause"/> <include refid="Filter_Clause"/>
ORDER BY create_time DESC ORDER BY create_time DESC
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset} LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
</select> </select>

View File

@@ -28,7 +28,7 @@ public class UserCollectionController {
*/ */
@GetMapping("/user/{userID}") @GetMapping("/user/{userID}")
public ResultDomain<TbUserCollection> getUserCollections( public ResultDomain<TbUserCollection> getUserCollections(
@PathVariable String userID, @PathVariable("userID") String userID,
@RequestParam(required = false) Integer resourceType, @RequestParam(required = false) Integer resourceType,
@RequestParam(required = false) String resourceID) { @RequestParam(required = false) String resourceID) {
return userCollectionService.getUserCollections(userID, resourceType); return userCollectionService.getUserCollections(userID, resourceType);
@@ -69,7 +69,7 @@ public class UserCollectionController {
*/ */
@GetMapping("/count/{userID}") @GetMapping("/count/{userID}")
public ResultDomain<Integer> getCollectionCount( public ResultDomain<Integer> getCollectionCount(
@PathVariable String userID, @PathVariable("userID") String userID,
@RequestParam(required = false) Integer resourceType, @RequestParam(required = false) Integer resourceType,
@RequestParam(required = false) String resourceID) { @RequestParam(required = false) String resourceID) {
return userCollectionService.getCollectionCount(userID, resourceType, resourceID); return userCollectionService.getCollectionCount(userID, resourceType, resourceID);