diff --git a/schoolNewsServ/.bin/mysql/sql/createTableCourse.sql b/schoolNewsServ/.bin/mysql/sql/createTableCourse.sql index 1ed6292..42829fd 100644 --- a/schoolNewsServ/.bin/mysql/sql/createTableCourse.sql +++ b/schoolNewsServ/.bin/mysql/sql/createTableCourse.sql @@ -60,6 +60,10 @@ CREATE TABLE `tb_course_tag` ( `tag_id` VARCHAR(50) NOT NULL COMMENT '标签ID', `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', + `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_course_tag` (`course_id`, `tag_id`), KEY `idx_course` (`course_id`), diff --git a/schoolNewsServ/.bin/mysql/sql/createTableLearning.sql b/schoolNewsServ/.bin/mysql/sql/createTableLearning.sql index 378ecfb..d310191 100644 --- a/schoolNewsServ/.bin/mysql/sql/createTableLearning.sql +++ b/schoolNewsServ/.bin/mysql/sql/createTableLearning.sql @@ -31,6 +31,10 @@ CREATE TABLE `tb_task_resource` ( `order_num` INT(4) DEFAULT 0 COMMENT '排序号', `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', + `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_task_resource` (`task_id`, `resource_id`), KEY `idx_task` (`task_id`), @@ -47,6 +51,10 @@ CREATE TABLE `tb_task_course` ( `order_num` INT(4) DEFAULT 0 COMMENT '排序号', `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', + `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_task_course` (`task_id`, `course_id`), KEY `idx_task` (`task_id`), @@ -65,7 +73,10 @@ CREATE TABLE `tb_task_user` ( `complete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间', `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_task_user` (`task_id`, `user_id`), KEY `idx_task` (`task_id`), @@ -86,8 +97,12 @@ CREATE TABLE `tb_learning_record` ( `is_complete` TINYINT(1) DEFAULT 0 COMMENT '是否完成', `complete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间', `last_learn_time` TIMESTAMP NULL DEFAULT NULL COMMENT '最后学习时间', + `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_resource` (`resource_type`, `resource_id`), @@ -105,8 +120,12 @@ CREATE TABLE `tb_learning_statistics` ( `resource_count` INT(11) DEFAULT 0 COMMENT '学习资源数量', `course_count` INT(11) DEFAULT 0 COMMENT '学习课程数量', `complete_count` INT(11) DEFAULT 0 COMMENT '完成数量', + `creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者', + `updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_date` (`user_id`, `stat_date`), KEY `idx_user` (`user_id`), diff --git a/schoolNewsServ/.bin/mysql/sql/initMenuData.sql b/schoolNewsServ/.bin/mysql/sql/initMenuData.sql index 685bb49..d88e711 100644 --- a/schoolNewsServ/.bin/mysql/sql/initMenuData.sql +++ b/schoolNewsServ/.bin/mysql/sql/initMenuData.sql @@ -119,7 +119,7 @@ INSERT INTO `tb_sys_menu` (id, menu_id, name, parent_id, url, component, icon, o -- 学习管理 ('5000', 'menu_admin_study_manage', '学习管理', NULL, '', '', 'el-icon-reading', 5, 1, '', '1', now()), -('5002', 'menu_admin_task_publish', '任务发布', 'menu_admin_study_manage', '/admin/manage/study/task-publish', 'admin/manage/study/TaskPublishView', 'el-icon-s-order', 2, 1, 'NavigationLayout', '1', now()), +('5002', 'menu_admin_task_manage', '任务管理', 'menu_admin_study_manage', '/admin/manage/study/task-manage', 'admin/manage/study/TaskManageView', 'el-icon-s-order', 2, 1, 'NavigationLayout', '1', now()), ('5003', 'menu_admin_study_records', '学习记录', 'menu_admin_study_manage', '/admin/manage/study/study-records', 'admin/manage/study/StudyRecordsView', 'el-icon-document', 3, 1, 'NavigationLayout', '1', now()), ('5004', 'menu_admin_course_manage', '课程管理', 'menu_admin_study_manage', '/admin/manage/study/course', 'admin/manage/study/CourseManagementView', 'el-icon-video-play', 4, 1, 'NavigationLayout', '1', now()), -- 智能体管理 @@ -174,7 +174,7 @@ INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, creat ('216', 'perm_news_manage', 'menu_admin_column', '1', now()), ('217', 'perm_news_manage', 'menu_admin_content', '1', now()), ('218', 'perm_study_manage', 'menu_admin_study_manage', '1', now()), -('220', 'perm_study_manage', 'menu_admin_task_publish', '1', now()), +('220', 'perm_study_manage', 'menu_admin_task_manage', '1', now()), ('221', 'perm_study_manage', 'menu_admin_study_records', '1', now()), ('222', 'perm_study_manage', 'menu_admin_course_manage', '1', now()), ('223', 'perm_ai_manage', 'menu_admin_ai_manage', '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 6ba7941..3dc9109 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 @@ -5,6 +5,7 @@ import org.xyzh.common.core.page.PageParam; import org.xyzh.common.core.page.PageRequest; import org.xyzh.common.dto.study.TbCourse; import org.xyzh.common.dto.study.TbCourseChapter; +import org.xyzh.common.dto.study.TbCourseNode; import org.xyzh.common.vo.CourseVO; import java.util.List; @@ -56,12 +57,12 @@ public interface CourseService { /** * @description 更新课程 - * @param course 课程信息 - * @return ResultDomain 更新结果 + * @param courseVO 课程信息 + * @return ResultDomain 更新结果 * @author yslg * @since 2025-10-15 */ - ResultDomain updateCourse(TbCourse course); + ResultDomain updateCourse(CourseVO courseVO); /** * @description 删除课程 @@ -80,7 +81,7 @@ public interface CourseService { * @author yslg * @since 2025-10-15 */ - ResultDomain updateCourseStatus(String courseID, Integer status); + ResultDomain updateCourseStatus(TbCourse course); /** * @description 增加课程浏览次数 @@ -156,4 +157,31 @@ public interface CourseService { * @since 2025-10-15 */ ResultDomain updateChapterOrder(String chapterID, Integer orderNum); + + /** + * @description 创建课程章节节点 + * @param node 课程章节节点 + * @return ResultDomain 创建结果 + * @author yslg + * @since 2025-10-22 + */ + ResultDomain createChapterNode(TbCourseNode node); + + /** + * @description 更新课程章节节点 + * @param node 课程章节节点 + * @return ResultDomain 更新结果 + * @author yslg + * @since 2025-10-22 + */ + ResultDomain updateChapterNode(TbCourseNode node); + + /** + * @description 删除课程章节节点 + * @param nodeID 节点ID + * @return ResultDomain 删除结果 + * @author yslg + * @since 2025-10-22 + */ + ResultDomain deleteChapterNode(String nodeID); } 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 bf59ef3..09498d0 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 @@ -1,8 +1,11 @@ package org.xyzh.api.study.task; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbLearningTask; import org.xyzh.common.dto.study.TbTaskUser; +import org.xyzh.common.vo.TaskItemVO; +import org.xyzh.common.vo.TaskVO; import org.xyzh.common.dto.study.TbTaskCourse; import org.xyzh.common.dto.study.TbTaskResource; @@ -26,6 +29,16 @@ public interface LearningTaskService { */ ResultDomain getTaskList(TbLearningTask filter); + /** + * @description 获取学习任务列表分页 + * @param filter 过滤条件 + * @param pageParam 分页参数 + * @return ResultDomain 任务列表 + * @author yslg + * @since 2025-10-15 + */ + ResultDomain getTaskPage(TbLearningTask filter, PageParam pageParam); + /** * @description 根据ID获取任务详情 * @param taskID 任务ID @@ -33,7 +46,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain getTaskById(String taskID); + ResultDomain getTaskById(String taskID); /** * @description 创建学习任务 @@ -42,7 +55,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain createTask(TbLearningTask task); + ResultDomain createTask(TaskVO taskVO); /** * @description 更新学习任务 @@ -51,7 +64,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain updateTask(TbLearningTask task); + ResultDomain updateTask(TaskVO taskVO); /** * @description 删除学习任务 @@ -74,6 +87,8 @@ public interface LearningTaskService { // ----------------任务用户相关-------------------------------- + ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam); + /** * @description 获取任务用户列表 * @param taskID 任务ID @@ -81,7 +96,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain getTaskUsers(String taskID); + ResultDomain getTaskUsers(String taskID); /** * @description 添加任务用户 @@ -90,7 +105,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain addTaskUser(TbTaskUser taskUser); + ResultDomain addTaskUser(String taskID, List userIDs); /** * @description 批量添加任务用户 @@ -111,7 +126,7 @@ public interface LearningTaskService { * @author yslg * @since 2025-10-15 */ - ResultDomain removeTaskUser(String taskID, String userID); + ResultDomain removeTaskUser(String taskID, List userIDs); /** * @description 更新任务用户状态 diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java index bb457a0..58fbf6b 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/user/UserService.java @@ -9,6 +9,7 @@ import org.xyzh.common.dto.user.TbSysUserDeptRole; import org.xyzh.common.dto.user.TbSysUserInfo; import org.xyzh.common.vo.UserDeptRoleVO; import org.xyzh.common.vo.UserVO; +import org.xyzh.common.core.page.PageParam; /** * @description UserRemoteService.java文件描述 用户远程服务接口 @@ -73,6 +74,16 @@ public interface UserService { */ ResultDomain getUserByFilter(TbSysUser filter); + /** + * @description 获取用户列表分页 + * @param filter 过滤条件 + * @param pageParam 分页参数 + * @return ResultDomain 用户列表 + * @author yslg + * @since 2025-10-09 + */ + ResultDomain getUserPage(TbSysUser filter, PageParam pageParam); + /** * @description 创建用户 * @param user 用户对象 diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourse.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourse.java index 5bcf0bb..1db3734 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourse.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourse.java @@ -1,6 +1,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; +import java.util.Date; /** * @description 课程表 @@ -77,6 +78,21 @@ public class TbCourse extends BaseDTO { * @description 更新者 */ private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getCourseID() { return courseID; @@ -182,6 +198,22 @@ public class TbCourse extends BaseDTO { this.updater = updater; } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + @Override public String toString() { return "TbCourse{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseChapter.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseChapter.java index 9b65f09..dbb3f6f 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseChapter.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseChapter.java @@ -1,6 +1,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; +import java.util.Date; /** * @description 课程章节表 @@ -69,6 +70,21 @@ public class TbCourseChapter extends BaseDTO { * @description 更新者 */ private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getChapterID() { return chapterID; @@ -166,6 +182,22 @@ public class TbCourseChapter extends BaseDTO { this.updater = updater; } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + @Override public String toString() { return "TbCourseChapter{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseNode.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseNode.java index a49b25e..321aae0 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseNode.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseNode.java @@ -1,6 +1,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; +import java.util.Date; /** * @description 学习节点表 @@ -69,6 +70,21 @@ public class TbCourseNode extends BaseDTO { * @description 更新者 */ private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getNodeID() { return nodeID; @@ -166,6 +182,22 @@ public class TbCourseNode extends BaseDTO { this.updater = updater; } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + @Override public String toString() { return "TbCourseNode{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseTag.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseTag.java index 366ce78..9f09081 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseTag.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbCourseTag.java @@ -1,5 +1,7 @@ package org.xyzh.common.dto.study; +import java.util.Date; + import org.xyzh.common.dto.BaseDTO; /** @@ -28,6 +30,14 @@ public class TbCourseTag extends BaseDTO { */ private String creator; + private String updater; + + private Date updateTime; + + private Date deleteTime; + + private boolean deleted; + public String getCourseID() { return courseID; } @@ -52,6 +62,40 @@ public class TbCourseTag extends BaseDTO { this.creator = creator; } + + + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + @Override public String toString() { return "TbCourseTag{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningRecord.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningRecord.java index f7b285d..4c76940 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningRecord.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningRecord.java @@ -59,6 +59,31 @@ public class TbLearningRecord extends BaseDTO { * @description 最后学习时间 */ private Date lastLearnTime; + + /** + * @description 创建者 + */ + private String creator; + + /** + * @description 更新者 + */ + private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getUserID() { return userID; @@ -132,6 +157,38 @@ public class TbLearningRecord extends BaseDTO { this.lastLearnTime = lastLearnTime; } + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + @Override public String toString() { return "TbLearningRecord{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningStatistics.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningStatistics.java index 534a60d..c6533d5 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningStatistics.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningStatistics.java @@ -43,6 +43,36 @@ public class TbLearningStatistics extends BaseDTO { * @description 完成数量 */ private Integer completeCount; + + /** + * @description 创建者 + */ + private String creator; + + /** + * @description 更新者 + */ + private String updater; + + /** + * @description 创建时间 + */ + private Date createTime; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getUserID() { return userID; @@ -92,6 +122,47 @@ public class TbLearningStatistics extends BaseDTO { this.completeCount = completeCount; } + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + @Override public String toString() { return "TbLearningStatistics{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningTask.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningTask.java index ffd0c54..cfe6d61 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningTask.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbLearningTask.java @@ -2,6 +2,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; import java.util.Date; +import java.lang.Boolean; /** * @description 学习任务表 @@ -53,6 +54,21 @@ public class TbLearningTask extends BaseDTO { * @description 更新者 */ private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getTaskID() { return taskID; @@ -118,6 +134,23 @@ public class TbLearningTask extends BaseDTO { this.updater = updater; } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + @Override public String toString() { return "TbLearningTask{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskCourse.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskCourse.java index 9e76b3a..68353fe 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskCourse.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskCourse.java @@ -1,6 +1,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; +import java.util.Date; /** * @description 任务课程关联表 @@ -37,6 +38,26 @@ public class TbTaskCourse extends BaseDTO { * @description 创建者 */ private String creator; + + /** + * @description 更新者 + */ + private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getTaskID() { return taskID; @@ -78,6 +99,30 @@ public class TbTaskCourse extends BaseDTO { this.creator = creator; } + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + @Override public String toString() { return "TbTaskCourse{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskResource.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskResource.java index 91d26d2..d5d4dbc 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskResource.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskResource.java @@ -1,6 +1,7 @@ package org.xyzh.common.dto.study; import org.xyzh.common.dto.BaseDTO; +import java.util.Date; /** * @description 任务资源关联表 @@ -37,6 +38,26 @@ public class TbTaskResource extends BaseDTO { * @description 创建者 */ private String creator; + + /** + * @description 更新者 + */ + private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getTaskID() { return taskID; @@ -78,6 +99,32 @@ public class TbTaskResource extends BaseDTO { this.creator = creator; } + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + + @Override public String toString() { return "TbTaskResource{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskUser.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskUser.java index cdb7ede..8e286ce 100644 --- a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskUser.java +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/dto/study/TbTaskUser.java @@ -49,6 +49,26 @@ public class TbTaskUser extends BaseDTO { * @description 创建者 */ private String creator; + + /** + * @description 更新者 + */ + private String updater; + + /** + * @description 更新时间 + */ + private Date updateTime; + + /** + * @description 删除时间 + */ + private Date deleteTime; + + /** + * @description 是否删除 + */ + private Boolean deleted; public String getTaskID() { return taskID; @@ -106,6 +126,31 @@ public class TbTaskUser extends BaseDTO { this.creator = creator; } + public String getUpdater() { + return updater; + } + + public void setUpdater(String updater) { + this.updater = updater; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getDeleteTime() { + return deleteTime; + } + + public void setDeleteTime(Date deleteTime) { + this.deleteTime = deleteTime; + } + + @Override public String toString() { return "TbTaskUser{" + diff --git a/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskItemVO.java b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskItemVO.java new file mode 100644 index 0000000..f9a0c84 --- /dev/null +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskItemVO.java @@ -0,0 +1,147 @@ +package org.xyzh.common.vo; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.xyzh.common.dto.study.TbLearningTask; +import org.xyzh.common.dto.study.TbTaskCourse; +import org.xyzh.common.dto.study.TbTaskResource; +import org.xyzh.common.dto.study.TbTaskUser; + +public class TaskItemVO extends TbLearningTask { + + private String courseID; + private String courseName; + private String resourceID; + private String resourceName; + private String userID; + private String username; + private Boolean required; + private Integer orderNum; + private Integer status; + private BigDecimal progress; + private Date completeTime; + + + + public TaskItemVO() { + } + + public TaskItemVO(TbTaskCourse taskCourse) { + this.courseID = taskCourse.getCourseID(); + this.setTaskID(taskCourse.getTaskID()); + this.orderNum = taskCourse.getOrderNum(); + this.required = taskCourse.getRequired(); + } + public TaskItemVO(TbTaskResource taskResource) { + this.resourceID = taskResource.getResourceID(); + this.setTaskID(taskResource.getTaskID()); + this.required = taskResource.getRequired(); + this.orderNum = taskResource.getOrderNum(); + + } + public TaskItemVO(TbTaskUser taskUser) { + this.userID = taskUser.getUserID(); + this.setTaskID(taskUser.getTaskID()); + this.status = taskUser.getStatus(); + this.progress = taskUser.getProgress(); + this.completeTime = taskUser.getCompleteTime(); + } + + public String getCourseID() { + return courseID; + } + public void setCourseID(String courseID) { + this.courseID = courseID; + } + public String getCourseName() { + return courseName; + } + public void setCourseName(String courseName) { + this.courseName = courseName; + } + public String getResourceID() { + return resourceID; + } + public void setResourceID(String resourceID) { + this.resourceID = resourceID; + } + public String getResourceName() { + return resourceName; + } + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + public String getUserID() { + return userID; + } + public void setUserID(String userID) { + this.userID = userID; + } + public String getUsername() { + return username; + } + public void setUsername(String userName) { + this.username = userName; + } + + public Boolean getRequired() { + return required; + } + public void setRequired(Boolean required) { + this.required = required; + } + public Integer getOrderNum() { + return orderNum; + } + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public TbTaskCourse toTaskCourse() { + TbTaskCourse taskCourse = new TbTaskCourse(); + taskCourse.setCourseID(courseID); + taskCourse.setTaskID(getTaskID()); + taskCourse.setCreateTime(getCreateTime()); + taskCourse.setCreator(getCreator()); + return taskCourse; + } + public TbTaskResource toTaskResource() { + TbTaskResource taskResource = new TbTaskResource(); + taskResource.setResourceID(resourceID); + taskResource.setTaskID(getTaskID()); + taskResource.setCreateTime(getCreateTime()); + taskResource.setCreator(getCreator()); + return taskResource; + } + public TbTaskUser toTaskUser() { + TbTaskUser taskUser = new TbTaskUser(); + taskUser.setUserID(userID); + taskUser.setTaskID(getTaskID()); + taskUser.setCreateTime(getCreateTime()); + taskUser.setCreator(getCreator()); + return taskUser; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } + public BigDecimal getProgress() { + return progress; + } + public void setProgress(BigDecimal progress) { + this.progress = progress; + } + public Date getCompleteTime() { + return completeTime; + } + public void setCompleteTime(Date completeTime) { + this.completeTime = completeTime; + } + + +} 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 new file mode 100644 index 0000000..2d85c0e --- /dev/null +++ b/schoolNewsServ/common/common-dto/src/main/java/org/xyzh/common/vo/TaskVO.java @@ -0,0 +1,81 @@ +package org.xyzh.common.vo; + +import org.xyzh.common.dto.BaseDTO; +import org.xyzh.common.dto.study.TbLearningTask; +import org.xyzh.common.dto.study.TbTaskCourse; +import org.xyzh.common.dto.study.TbTaskResource; +import org.xyzh.common.dto.study.TbTaskUser; + +import java.util.List; +import java.util.stream.Collectors; + +public class TaskVO extends BaseDTO{ + private static final long serialVersionUID = 1L; + + private TbLearningTask learningTask; + private List taskCourses; + private List taskResources; + private List taskUsers; + + public TbLearningTask getLearningTask() { + return learningTask; + } + public void setLearningTask(TbLearningTask learningTask) { + this.learningTask = learningTask; + } + public List getTaskCourses() { + return taskCourses; + } + public void setTaskCourses(List taskCourses) { + this.taskCourses = taskCourses; + } + public List getTaskResources() { + return taskResources; + } + public void setTaskResources(List taskResources) { + this.taskResources = taskResources; + } + public List getTaskUsers() { + return taskUsers; + } + public void setTaskUsers(List taskUsers) { + this.taskUsers = taskUsers; + } + + public List toTaskCourses() { + return getTaskCourses().stream().map(TaskItemVO::toTaskCourse).collect(Collectors.toList()); + } + public List toTaskResources() { + return getTaskResources().stream().map(TaskItemVO::toTaskResource).collect(Collectors.toList()); + } + public List toTaskUsers() { + return getTaskUsers().stream().map(TaskItemVO::toTaskUser).collect(Collectors.toList()); + } + + public void setTaskCourseList(List taskCourses) { + if (taskCourses == null) { + return; + } + this.taskCourses = taskCourses.stream().map(item -> { + return new TaskItemVO(item); + }).collect(Collectors.toList()); + } + public void setTaskResourceList(List taskResources) { + if (taskResources == null) { + return; + } + this.taskResources = taskResources.stream().map(item -> { + return new TaskItemVO(item); + }).collect(Collectors.toList()); + } + public void setTaskUserList(List taskUsers) { + if (taskUsers == null) { + return; + } + this.taskUsers = taskUsers.stream().map(item -> { + return new TaskItemVO(item); + }).collect(Collectors.toList()); + } + + +} diff --git a/schoolNewsServ/news/src/main/java/org/xyzh/news/controller/ResourceController.java b/schoolNewsServ/news/src/main/java/org/xyzh/news/controller/ResourceController.java index fc89180..4d5d8c7 100644 --- a/schoolNewsServ/news/src/main/java/org/xyzh/news/controller/ResourceController.java +++ b/schoolNewsServ/news/src/main/java/org/xyzh/news/controller/ResourceController.java @@ -37,7 +37,7 @@ public class ResourceController { * 获取资源列表 */ @GetMapping("/list") - public ResultDomain getResourceList(@RequestParam("filter") TbResource filter) { + public ResultDomain getResourceList(TbResource filter) { return resourceService.getResourceList(filter); } 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 2816642..7a61d20 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 @@ -9,6 +9,7 @@ import org.xyzh.common.core.domain.ResultDomain; import org.xyzh.common.core.page.PageRequest; import org.xyzh.common.dto.study.TbCourse; import org.xyzh.common.dto.study.TbCourseChapter; +import org.xyzh.common.dto.study.TbCourseNode; import org.xyzh.common.vo.ChapterVO; import org.xyzh.common.vo.CourseVO; import org.springframework.web.bind.annotation.PostMapping; @@ -63,11 +64,11 @@ public class CourseController { } /** - * 更新课程 + * 更新课程基本信息 */ @PutMapping("/course") - public ResultDomain updateCourse(@RequestBody TbCourse course) { - return courseService.updateCourse(course); + public ResultDomain updateCourse(@RequestBody CourseVO courseVO) { + return courseService.updateCourse(courseVO); } /** @@ -78,14 +79,68 @@ public class CourseController { return courseService.deleteCourse(courseID); } + /** + * @description 创建课程章节 + * @param chapter 课程章节 + * @return ResultDomain 创建结果 + * @author yslg + * @since 2025-10-22 + */ + @PostMapping("/course/chapter") + public ResultDomain createChapter(@RequestBody TbCourseChapter chapter) { + return courseService.createChapter(chapter); + } + + /** + * 更新课程章节 + */ + @PutMapping("/course/chapter") + public ResultDomain updateChapter(@RequestBody TbCourseChapter chapter) { + return courseService.updateChapter(chapter); + } + + /** + * 删除课程章节 + */ + @DeleteMapping("/course/chapter/{chapterID}") + public ResultDomain deleteChapter(@PathVariable String chapterID) { + return courseService.deleteChapter(chapterID); + } + + /** + * @description 创建课程章节节点 + * @param node 课程章节节点 + * @return ResultDomain 创建结果 + * @author yslg + * @since 2025-10-22 + */ + @PostMapping("/course/chapter/node") + public ResultDomain createChapterNode(@RequestBody TbCourseNode node) { + return courseService.createChapterNode(node); + } + + /** + * 更新课程章节节点 + */ + @PutMapping("/course/chapter/node") + public ResultDomain updateChapterNode(@RequestBody TbCourseNode node) { + return courseService.updateChapterNode(node); + } + + /** + * 删除课程章节节点 + */ + @DeleteMapping("/course/chapter/node/{nodeID}") + public ResultDomain deleteChapterNode(@PathVariable String nodeID) { + return courseService.deleteChapterNode(nodeID); + } + /** * 更新课程状态 */ - @PutMapping("/{courseID}/status") - public ResultDomain updateCourseStatus( - @PathVariable String courseID, - @RequestParam Integer status) { - return courseService.updateCourseStatus(courseID, status); + @PutMapping("/course/status") + public ResultDomain updateCourseStatus(@RequestBody TbCourse course) { + return courseService.updateCourseStatus(course); } /** 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 cb629c3..049a1dc 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 @@ -1,15 +1,25 @@ package org.xyzh.study.controller; +import java.util.List; +import java.util.Map; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.xyzh.api.study.task.LearningTaskService; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.core.page.PageParam; +import org.xyzh.common.core.page.PageRequest; import org.xyzh.common.dto.study.TbLearningTask; import org.xyzh.common.dto.study.TbTaskUser; +import org.xyzh.common.vo.TaskItemVO; +import org.xyzh.common.vo.TaskVO; 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; + /** * @description 学习任务控制器 @@ -19,7 +29,7 @@ import org.xyzh.common.dto.study.TbTaskResource; * @since 2025-10-15 */ @RestController -@RequestMapping("/study/task") +@RequestMapping("/study/tasks") public class LearningTaskController { private static final Logger logger = LoggerFactory.getLogger(LearningTaskController.class); @@ -34,63 +44,84 @@ public class LearningTaskController { return learningTaskService.getTaskList(filter); } + /** + * 获取任务列表分页 + */ + @PostMapping("/page") + public ResultDomain getTaskPage(@RequestBody PageRequest pageRequest) { + TbLearningTask filter = pageRequest.getFilter(); + PageParam pageParam = pageRequest.getPageParam(); + return learningTaskService.getTaskPage(filter, pageParam); + } + /** * 根据ID获取任务详情 */ @GetMapping("/{taskID}") - public ResultDomain getTaskById(@PathVariable String taskID) { + public ResultDomain getTaskById(@PathVariable("taskID") String taskID) { return learningTaskService.getTaskById(taskID); } /** * 创建任务 */ - @PostMapping("/create") - public ResultDomain createTask(@RequestBody TbLearningTask task) { - return learningTaskService.createTask(task); + @PostMapping("/task") + public ResultDomain createTask(@RequestBody TaskVO taskVO) { + return learningTaskService.createTask(taskVO); } /** * 更新任务 */ - @PutMapping("/update") - public ResultDomain updateTask(@RequestBody TbLearningTask task) { - return learningTaskService.updateTask(task); + @PutMapping("/task") + public ResultDomain updateTask(@RequestBody TaskVO taskVO) { + return learningTaskService.updateTask(taskVO); } /** * 删除任务 */ - @DeleteMapping("/{taskID}") - public ResultDomain deleteTask(@PathVariable String taskID) { + @DeleteMapping("/task") + public ResultDomain deleteTask(@PathVariable("taskID") String taskID) { return learningTaskService.deleteTask(taskID); } /** * 更新任务状态 */ - @PutMapping("/{taskID}/status") - public ResultDomain updateTaskStatus( - @PathVariable String taskID, - @RequestParam Integer status) { - return learningTaskService.updateTaskStatus(taskID, status); + @PutMapping("/status") + public ResultDomain updateTaskStatus(@RequestBody TbLearningTask task) { + return learningTaskService.updateTaskStatus(task.getTaskID(), task.getStatus()); } /** * 获取任务用户列表 */ @GetMapping("/{taskID}/users") - public ResultDomain getTaskUsers(@PathVariable String taskID) { + public ResultDomain getTaskUsers(@PathVariable("taskID") String taskID) { return learningTaskService.getTaskUsers(taskID); } + /** + * 批量添加任务用户 + */ + @PostMapping("/{taskID}/users") + public ResultDomain addTaskUser(@PathVariable("taskID") String taskID, @RequestBody Map> map) { + List userIDs = map.get("userIDs"); + return learningTaskService.addTaskUser(taskID, userIDs); + } + + @DeleteMapping("/{taskID}/users") + public ResultDomain removeTaskUser(@PathVariable("taskID") String taskID, @RequestBody Map> map) { + List userIDs = map.get("userIDs"); + return learningTaskService.removeTaskUser(taskID, userIDs); + } + /** * 分配任务给用户 */ @PostMapping("/{taskID}/assign") - public ResultDomain assignTaskToUser( - @PathVariable String taskID, - @RequestParam String userID) { + public ResultDomain assignTaskToUser(@PathVariable("taskID") String taskID, @RequestParam String userID) { return null; // return learningTaskService.assignTaskToUser(taskID, userID); } @@ -99,70 +130,19 @@ public class LearningTaskController { * 从用户移除任务 */ @DeleteMapping("/{taskID}/user/{userID}") - public ResultDomain removeTaskFromUser( - @PathVariable String taskID, - @PathVariable String userID) { + public ResultDomain removeTaskFromUser(@PathVariable("taskID") String taskID, @PathVariable("userID") String userID) { return null; // return learningTaskService.removeTaskFromUser(taskID, userID); } /** - * 获取任务课程列表 + * 用户获取个人任务列表(用户视角) */ - @GetMapping("/{taskID}/courses") - public ResultDomain getTaskCourses(@PathVariable String taskID) { - return learningTaskService.getTaskCourses(taskID); - } - - /** - * 添加课程到任务 - */ - @PostMapping("/{taskID}/course") - public ResultDomain addCourseToTask( - @PathVariable String taskID, - @RequestParam String courseID) { - return null; - // return learningTaskService.addCourseToTask(taskID, courseID); - } - - /** - * 从任务移除课程 - */ - @DeleteMapping("/{taskID}/course/{courseID}") - public ResultDomain removeCourseFromTask( - @PathVariable String taskID, - @PathVariable String courseID) { - return null; - // return learningTaskService.removeCourseFromTask(taskID, courseID); - } - - /** - * 获取任务资源列表 - */ - @GetMapping("/{taskID}/resources") - public ResultDomain getTaskResources(@PathVariable String taskID) { - return learningTaskService.getTaskResources(taskID); - } - - /** - * 添加资源到任务 - */ - @PostMapping("/{taskID}/resource") - public ResultDomain addResourceToTask( - @PathVariable String taskID, - @RequestParam String resourceID) { - return null; - // return learningTaskService.addResourceToTask(taskID, resourceID); - } - - /** - * 从任务移除资源 - */ - @DeleteMapping("/{taskID}/resource/{resourceID}") - public ResultDomain removeResourceFromTask( - @PathVariable String taskID, - @PathVariable String resourceID) { - return null; - // return learningTaskService.removeResourceFromTask(taskID, resourceID); + @PostMapping("/users/page") + public ResultDomain getUserTaskPage(@RequestBody PageRequest pageRequest) { + TaskItemVO filter = pageRequest.getFilter(); + PageParam pageParam = pageRequest.getPageParam(); + return learningTaskService.getUserTaskPage(filter, pageParam); } + } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java index dd179ae..4b23127 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbLearningTask; +import org.xyzh.common.vo.TaskItemVO; import java.util.List; @@ -155,6 +156,8 @@ public interface LearningTaskMapper extends BaseMapper { */ List selectLearningTasksPage(@Param("filter") TbLearningTask filter, @Param("pageParam") PageParam pageParam); + List selectUserLearningTasksPage(@Param("filter") TaskItemVO filter, @Param("pageParam") PageParam pageParam); + /** * @description 统计学习任务总数 * @param filter 过滤条件 diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskCourseMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskCourseMapper.java index b8c9960..71d13c6 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskCourseMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskCourseMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbTaskCourse; +import org.xyzh.common.vo.TaskItemVO; import java.util.List; @@ -45,6 +46,8 @@ public interface TaskCourseMapper extends BaseMapper { */ List selectByTaskId(@Param("taskId") String taskId); + List selectTaskItemByTaskId(@Param("taskId") String taskId); + /** * @description 根据课程ID查询任务关联列表 * @param courseId 课程ID diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskResourceMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskResourceMapper.java index 70b9a79..f3412cb 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskResourceMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskResourceMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbTaskResource; +import org.xyzh.common.vo.TaskItemVO; import java.util.List; @@ -45,6 +46,15 @@ public interface TaskResourceMapper extends BaseMapper { */ List selectByTaskId(@Param("taskId") String taskId); + /** + * @description 根据任务ID查询任务资源关联列表 + * @param taskId 任务ID + * @return List 任务资源关联列表 + * @author yslg + * @since 2025-10-15 + */ + List selectTaskItemByTaskId(@Param("taskId") String taskId); + /** * @description 根据资源ID查询任务关联列表 * @param resourceId 资源ID diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java index 337c973..4a3eada 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/TaskUserMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.study.TbTaskUser; +import org.xyzh.common.vo.TaskItemVO; import java.util.List; @@ -45,6 +46,7 @@ public interface TaskUserMapper extends BaseMapper { */ List selectByTaskId(@Param("taskId") String taskId); + List selectTaskItemByTaskId(@Param("taskId") String taskId); /** * @description 根据用户ID查询任务关联列表 * @param userId 用户ID @@ -103,15 +105,6 @@ public interface TaskUserMapper extends BaseMapper { */ int insertTaskUser(TbTaskUser taskUser); - /** - * @description 更新任务用户关联 - * @param taskUser 任务用户关联 - * @return int 影响行数 - * @author yslg - * @since 2025-10-15 - */ - int updateTaskUser(TbTaskUser taskUser); - /** * @description 删除任务用户关联 * @param taskUser 任务用户关联 @@ -137,7 +130,7 @@ public interface TaskUserMapper extends BaseMapper { * @author yslg * @since 2025-10-15 */ - int batchDeleteTaskUsers(@Param("ids") List ids); + int batchDeleteTaskUsers(@Param("taskId") String taskId, @Param("userIds") List userIds); /** * @description 根据任务ID批量删除用户关联 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 64e779e..2ca54b1 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 @@ -2,8 +2,11 @@ package org.xyzh.study.service.impl; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -55,8 +58,10 @@ public class SCCourseServiceImpl implements SCCourseService { @Override public ResultDomain getCourseList(TbCourse filter) { - // TODO: 实现获取课程列表 - return null; + ResultDomain resultDomain = new ResultDomain<>(); + List courses = courseMapper.selectCourses(filter); + resultDomain.success("获取课程列表成功", courses); + return resultDomain; } @Override @@ -174,21 +179,248 @@ public class SCCourseServiceImpl implements SCCourseService { } @Override - public ResultDomain updateCourse(TbCourse course) { - // TODO: 实现更新课程 - return null; + public ResultDomain updateCourse(CourseVO courseVO) { + ResultDomain resultDomain = new ResultDomain<>(); + + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + + TbCourse course = courseVO.getCourse(); + String courseID = course.getCourseID(); + + if (courseID == null || courseID.isEmpty()) { + resultDomain.fail("课程ID不能为空"); + return resultDomain; + } + + // 1. 更新课程基本信息 + course.setUpdater(user.getID()); + course.setUpdateTime(new Date()); + courseMapper.updateCourse(course); + + // 2. 处理章节和节点 + List newChapterVOs = courseVO.getCourseChapters(); + if (newChapterVOs == null) { + newChapterVOs = new ArrayList<>(); + } + + // 获取数据库中现有的章节 + TbCourseChapter filter = new TbCourseChapter(); + filter.setCourseID(courseID); + List existingChapters = courseChapterMapper.selectCourseChapters(filter); + Map existingChapterMap = existingChapters.stream() + .collect(Collectors.toMap(TbCourseChapter::getChapterID, chapter -> chapter)); + + // 获取数据库中现有的节点 + List existingChapterIDs = existingChapters.stream() + .map(TbCourseChapter::getChapterID) + .collect(Collectors.toList()); + + Map> existingNodesMap = new HashMap<>(); + if (!existingChapterIDs.isEmpty()) { + List existingNodes = courseNodeMapper.selectCourseNodesByChapterIDs(existingChapterIDs); + existingNodesMap = existingNodes.stream() + .collect(Collectors.groupingBy(TbCourseNode::getChapterID)); + } + + // 收集新的章节ID和节点 + List chaptersToInsert = new ArrayList<>(); + List chaptersToUpdate = new ArrayList<>(); + List nodesToInsert = new ArrayList<>(); + List nodesToUpdate = new ArrayList<>(); + + Set newChapterIDs = new HashSet<>(); + Date now = new Date(); + + // 遍历新的章节 + for (int i = 0; i < newChapterVOs.size(); i++) { + ChapterVO chapterVO = newChapterVOs.get(i); + TbCourseChapter chapter = chapterVO.getChapter(); + String chapterID = chapter.getChapterID(); + + chapter.setCourseID(courseID); + chapter.setOrderNum(i); + + // 判断是新增还是更新 + if (chapterID == null || chapterID.isEmpty() || !existingChapterMap.containsKey(chapterID)) { + // 新增章节 + chapterID = IDUtils.generateID(); + chapter.setID(IDUtils.generateID()); + chapter.setChapterID(chapterID); + chapter.setCreator(user.getID()); + chapter.setCreateTime(now); + chaptersToInsert.add(chapter); + } else { + // 更新章节 + chapter.setID(existingChapterMap.get(chapterID).getID()); + chapter.setUpdater(user.getID()); + chapter.setUpdateTime(now); + chaptersToUpdate.add(chapter); + } + + newChapterIDs.add(chapterID); + + // 处理该章节的节点 + List newNodes = chapterVO.getNodes(); + if (newNodes == null) { + newNodes = new ArrayList<>(); + } + + List existingNodesForChapter = existingNodesMap.getOrDefault(chapterID, new ArrayList<>()); + Map existingNodeMap = existingNodesForChapter.stream() + .collect(Collectors.toMap(TbCourseNode::getNodeID, node -> node)); + + Set newNodeIDs = new HashSet<>(); + + // 遍历新的节点 + for (int j = 0; j < newNodes.size(); j++) { + TbCourseNode node = newNodes.get(j); + String nodeID = node.getNodeID(); + + node.setChapterID(chapterID); + node.setOrderNum(j); + + // 判断是新增还是更新 + if (nodeID == null || nodeID.isEmpty() || !existingNodeMap.containsKey(nodeID)) { + // 新增节点 + nodeID = IDUtils.generateID(); + node.setID(IDUtils.generateID()); + node.setNodeID(nodeID); + node.setCreator(user.getID()); + node.setCreateTime(now); + nodesToInsert.add(node); + } else { + // 更新节点 + node.setID(existingNodeMap.get(nodeID).getID()); + node.setUpdater(user.getID()); + node.setUpdateTime(now); + nodesToUpdate.add(node); + } + + newNodeIDs.add(nodeID); + } + + // 找出要删除的节点 + List nodeIDsToDelete = existingNodeMap.keySet().stream() + .filter(id -> !newNodeIDs.contains(id)) + .collect(Collectors.toList()); + + if (!nodeIDsToDelete.isEmpty()) { + courseNodeMapper.batchDeleteCourseNodes(nodeIDsToDelete); + } + } + + // 找出要删除的章节 + List chapterIDsToDelete = existingChapterMap.keySet().stream() + .filter(id -> !newChapterIDs.contains(id)) + .collect(Collectors.toList()); + + // 删除章节及其节点 + if (!chapterIDsToDelete.isEmpty()) { + for (String chapterId : chapterIDsToDelete) { + courseNodeMapper.deleteByChapterId(chapterId); + } + courseChapterMapper.batchDeleteCourseChapters(chapterIDsToDelete); + } + + // 执行批量插入和更新 + if (!chaptersToInsert.isEmpty()) { + courseChapterMapper.batchInsertCourseChapters(chaptersToInsert); + } + + if (!chaptersToUpdate.isEmpty()) { + for (TbCourseChapter chapter : chaptersToUpdate) { + courseChapterMapper.updateCourseChapter(chapter); + } + } + + if (!nodesToInsert.isEmpty()) { + courseNodeMapper.batchInsertCourseNodes(nodesToInsert); + } + + if (!nodesToUpdate.isEmpty()) { + for (TbCourseNode node : nodesToUpdate) { + courseNodeMapper.updateCourseNode(node); + } + } + + // 3. 处理标签 + List newTags = courseVO.getCourseTags(); + if (newTags == null) { + newTags = new ArrayList<>(); + } + + // 获取现有标签 + List existingTags = courseTagMapper.selectByCourseId(courseID); + Map existingTagMap = existingTags.stream() + .collect(Collectors.toMap(TbCourseTag::getTagID, tag -> tag)); + + Set newTagIDs = new HashSet<>(); + List tagsToInsert = new ArrayList<>(); + + // 处理新标签 + for (TbCourseTag tag : newTags) { + String tagID = tag.getTagID(); + + if (tagID == null || tagID.isEmpty() || !existingTagMap.containsKey(tagID)) { + // 新增标签 + tag.setID(IDUtils.generateID()); + tag.setCourseID(courseID); + tag.setCreator(user.getID()); + tag.setCreateTime(now); + tagsToInsert.add(tag); + } else { + newTagIDs.add(tagID); + } + } + + // 找出要删除的标签 + List tagIDsToDelete = existingTagMap.keySet().stream() + .filter(id -> !newTagIDs.contains(id)) + .collect(Collectors.toList()); + + if (!tagIDsToDelete.isEmpty()) { + courseTagMapper.batchDeleteCourseTags(tagIDsToDelete); + } + + if (!tagsToInsert.isEmpty()) { + courseTagMapper.batchInsertCourseTags(tagsToInsert); + } + + resultDomain.success("更新课程成功", courseVO); + return resultDomain; } @Override public ResultDomain deleteCourse(String courseID) { - // TODO: 实现删除课程 - return null; + ResultDomain resultDomain = new ResultDomain<>(); + TbCourse course = new TbCourse(); + course.setCourseID(courseID); + int result = courseMapper.deleteCourse(course); + if (result > 0) { + resultDomain.success("删除课程成功", true); + return resultDomain; + } else { + resultDomain.fail("删除课程失败"); + return resultDomain; + } } @Override - public ResultDomain updateCourseStatus(String courseID, Integer status) { - // TODO: 实现更新课程状态 - return null; + public ResultDomain updateCourseStatus(TbCourse course) { + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseMapper.updateCourse(course); + if (result > 0) { + resultDomain.success("更新课程状态成功", course); + return resultDomain; + } + else { + resultDomain.fail("更新课程状态失败"); + return resultDomain; + } } @Override @@ -217,20 +449,43 @@ public class SCCourseServiceImpl implements SCCourseService { @Override public ResultDomain createChapter(TbCourseChapter chapter) { - // TODO: 实现创建课程章节 - return null; + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseChapterMapper.insertCourseChapter(chapter); + if (result > 0) { + resultDomain.success("创建课程章节成功", chapter); + return resultDomain; + } else { + resultDomain.fail("创建课程章节失败"); + return resultDomain; + } } @Override public ResultDomain updateChapter(TbCourseChapter chapter) { - // TODO: 实现更新课程章节 - return null; + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseChapterMapper.updateCourseChapter(chapter); + if (result > 0) { + resultDomain.success("更新课程章节成功", chapter); + return resultDomain; + } else { + resultDomain.fail("更新课程章节失败"); + return resultDomain; + } } @Override public ResultDomain deleteChapter(String chapterID) { - // TODO: 实现删除课程章节 - return null; + ResultDomain resultDomain = new ResultDomain<>(); + TbCourseChapter chapter = new TbCourseChapter(); + chapter.setChapterID(chapterID); + int result = courseChapterMapper.deleteCourseChapter(chapter); + if (result > 0) { + resultDomain.success("删除课程章节成功", true); + return resultDomain; + } else { + resultDomain.fail("删除课程章节失败"); + return resultDomain; + } } @Override @@ -238,4 +493,46 @@ public class SCCourseServiceImpl implements SCCourseService { // TODO: 实现更新章节排序 return null; } + + @Override + public ResultDomain createChapterNode(TbCourseNode node) { + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseNodeMapper.insertCourseNode(node); + if (result > 0) { + resultDomain.success("创建课程章节节点成功", node); + return resultDomain; + }else{ + resultDomain.fail("创建课程章节节点失败"); + return resultDomain; + } + + } + + @Override + public ResultDomain updateChapterNode(TbCourseNode node) { + ResultDomain resultDomain = new ResultDomain<>(); + int result = courseNodeMapper.updateCourseNode(node); + if (result > 0) { + resultDomain.success("更新课程章节节点成功", node); + return resultDomain; + }else{ + resultDomain.fail("更新课程章节节点失败"); + return resultDomain; + } + } + + @Override + public ResultDomain deleteChapterNode(String nodeID) { + ResultDomain resultDomain = new ResultDomain<>(); + TbCourseNode node = new TbCourseNode(); + node.setNodeID(nodeID); + int result = courseNodeMapper.deleteCourseNode(node); + if (result > 0) { + resultDomain.success("删除课程章节节点成功", true); + return resultDomain; + } else { + resultDomain.fail("删除课程章节节点失败"); + return resultDomain; + } + } } 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 c24f265..c4b5db2 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 @@ -1,19 +1,32 @@ package org.xyzh.study.service.impl; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.xyzh.common.core.domain.ResultDomain; +import org.xyzh.common.core.page.PageDomain; +import org.xyzh.common.core.page.PageParam; +import org.xyzh.common.dto.user.TbSysUser; +import org.xyzh.common.utils.IDUtils; import org.xyzh.common.dto.study.TbLearningTask; import org.xyzh.common.dto.study.TbTaskUser; import org.xyzh.common.dto.study.TbTaskCourse; import org.xyzh.common.dto.study.TbTaskResource; +import org.xyzh.common.vo.TaskItemVO; +import org.xyzh.common.vo.TaskVO; import org.xyzh.study.mapper.LearningTaskMapper; import org.xyzh.study.mapper.TaskUserMapper; +import org.xyzh.system.utils.LoginUtil; import org.xyzh.study.mapper.TaskCourseMapper; import org.xyzh.study.mapper.TaskResourceMapper; import org.xyzh.api.study.task.LearningTaskService; @@ -55,9 +68,31 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain addTaskUser(TbTaskUser taskUser) { - // TODO Auto-generated method stub - return null; + public ResultDomain addTaskUser(String taskID, List userIDs) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + List taskUsers = new ArrayList<>(); + for (String userID : userIDs) { + TbTaskUser taskUser = new TbTaskUser(); + taskUser.setID(IDUtils.generateID()); + taskUser.setTaskID(taskID); + taskUser.setUserID(userID); + taskUser.setCreator(user.getID()); + taskUser.setCreateTime(new Date()); + taskUsers.add(taskUser); + } + int result = taskUserMapper.batchInsertTaskUsers(taskUsers); + if (result > 0) { + resultDomain.success("添加任务用户成功", taskUsers); + return resultDomain; + } else { + resultDomain.fail("添加任务用户失败"); + return resultDomain; + } } @Override @@ -67,9 +102,255 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain createTask(TbLearningTask task) { - // TODO Auto-generated method stub - return null; + public ResultDomain getTaskPage(TbLearningTask filter, PageParam pageParam) { + ResultDomain resultDomain = new ResultDomain<>(); + List taskList = learningTaskMapper.selectLearningTasksPage(filter, pageParam); + long total = learningTaskMapper.countLearningTasks(filter); + pageParam.setTotalElements(total); + pageParam.setTotalPages((int) Math.ceil((double) total / pageParam.getPageSize())); + PageDomain pageDomain = new PageDomain<>(); + pageDomain.setDataList(taskList); + pageDomain.setPageParam(pageParam); + resultDomain.success("获取任务列表分页成功", pageDomain); + return resultDomain; + } + + @Override + public ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + filter.setUserID(user.getID()); + List taskList = learningTaskMapper.selectUserLearningTasksPage(filter, pageParam); + long total = learningTaskMapper.countLearningTasks(filter); + pageParam.setTotalElements(total); + pageParam.setTotalPages((int) Math.ceil((double) total / pageParam.getPageSize())); + PageDomain pageDomain = new PageDomain<>(); + pageDomain.setDataList(taskList); + pageDomain.setPageParam(pageParam); + resultDomain.success("获取任务列表分页成功", pageDomain); + return resultDomain; + } + + @Override + public ResultDomain createTask(TaskVO taskVO) { + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser currentUser = LoginUtil.getCurrentUser(); + String taskID = IDUtils.generateID(); + Date now = new Date(); + // 创建任务 + TbLearningTask learningTask = taskVO.getLearningTask(); + learningTask.setCreator(currentUser.getID()); + learningTask.setID(IDUtils.generateID()); + learningTask.setTaskID(taskID); + learningTask.setCreateTime(now); + learningTaskMapper.insertLearningTask(learningTask); + // 绑定课程 + List taskCourses = taskVO.toTaskCourses(); + taskCourses.forEach(item -> { + item.setTaskID(taskID); + item.setCreator(currentUser.getID()); + item.setCreateTime(now); + }); + taskCourseMapper.batchInsertTaskCourses(taskCourses); + // 绑定资源 + List taskResources = taskVO.toTaskResources(); + taskResources.forEach(item -> { + item.setTaskID(taskID); + item.setCreator(currentUser.getID()); + item.setCreateTime(now); + }); + taskResourceMapper.batchInsertTaskResources(taskResources); + // 绑定用户 + List taskUsers = taskVO.toTaskUsers(); + taskUsers.forEach(item -> { + item.setTaskID(taskID); + item.setCreator(currentUser.getID()); + item.setCreateTime(now); + }); + taskUserMapper.batchInsertTaskUsers(taskUsers); + + resultDomain.success("创建任务成功", taskVO); + return resultDomain; + } + + @Override + public ResultDomain updateTask(TaskVO taskVO) { + ResultDomain resultDomain = new ResultDomain<>(); + + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + + TbLearningTask task = taskVO.getLearningTask(); + String taskID = task.getTaskID(); + + if (taskID == null || taskID.isEmpty()) { + resultDomain.fail("任务ID不能为空"); + return resultDomain; + } + + Date now = new Date(); + + // 1. 更新任务基本信息 + task.setUpdater(user.getID()); + task.setUpdateTime(now); + learningTaskMapper.updateLearningTask(task); + + // 2. 处理任务课程关联 + List newCourseItems = taskVO.getTaskCourses(); + if (newCourseItems == null) { + newCourseItems = new ArrayList<>(); + } + + // 获取现有的课程关联 + List existingCourses = taskCourseMapper.selectByTaskId(taskID); + Map existingCourseMap = existingCourses.stream() + .collect(Collectors.toMap(TbTaskCourse::getCourseID, course -> course)); + + Set newCourseIDs = new HashSet<>(); + List coursesToInsert = new ArrayList<>(); + + // 处理新的课程关联 + for (TaskItemVO item : newCourseItems) { + String courseID = item.getCourseID(); + if (courseID == null || courseID.isEmpty()) { + continue; + } + + newCourseIDs.add(courseID); + + // 如果不存在,则新增 + if (!existingCourseMap.containsKey(courseID)) { + TbTaskCourse taskCourse = new TbTaskCourse(); + taskCourse.setID(IDUtils.generateID()); + taskCourse.setTaskID(taskID); + taskCourse.setCourseID(courseID); + taskCourse.setCreator(user.getID()); + taskCourse.setCreateTime(now); + coursesToInsert.add(taskCourse); + } + } + + // 找出要删除的课程关联 + List courseIDsToDelete = existingCourseMap.values().stream() + .filter(course -> !newCourseIDs.contains(course.getCourseID())) + .map(TbTaskCourse::getID) + .collect(Collectors.toList()); + + if (!courseIDsToDelete.isEmpty()) { + taskCourseMapper.batchDeleteTaskCourses(courseIDsToDelete); + } + + if (!coursesToInsert.isEmpty()) { + taskCourseMapper.batchInsertTaskCourses(coursesToInsert); + } + + // 3. 处理任务资源关联 + List newResourceItems = taskVO.getTaskResources(); + if (newResourceItems == null) { + newResourceItems = new ArrayList<>(); + } + + // 获取现有的资源关联 + List existingResources = taskResourceMapper.selectByTaskId(taskID); + Map existingResourceMap = existingResources.stream() + .collect(Collectors.toMap(TbTaskResource::getResourceID, resource -> resource)); + + Set newResourceIDs = new HashSet<>(); + List resourcesToInsert = new ArrayList<>(); + + // 处理新的资源关联 + for (TaskItemVO item : newResourceItems) { + String resourceID = item.getResourceID(); + if (resourceID == null || resourceID.isEmpty()) { + continue; + } + + newResourceIDs.add(resourceID); + + // 如果不存在,则新增 + if (!existingResourceMap.containsKey(resourceID)) { + TbTaskResource taskResource = new TbTaskResource(); + taskResource.setID(IDUtils.generateID()); + taskResource.setTaskID(taskID); + taskResource.setResourceID(resourceID); + taskResource.setCreator(user.getID()); + taskResource.setCreateTime(now); + resourcesToInsert.add(taskResource); + } + } + + // 找出要删除的资源关联 + List resourceIDsToDelete = existingResourceMap.values().stream() + .filter(resource -> !newResourceIDs.contains(resource.getResourceID())) + .map(TbTaskResource::getID) + .collect(Collectors.toList()); + + if (!resourceIDsToDelete.isEmpty()) { + taskResourceMapper.batchDeleteTaskResources(resourceIDsToDelete); + } + + if (!resourcesToInsert.isEmpty()) { + taskResourceMapper.batchInsertTaskResources(resourcesToInsert); + } + + // 4. 处理任务用户关联 + List newUserItems = taskVO.getTaskUsers(); + if (newUserItems == null) { + newUserItems = new ArrayList<>(); + } + + // 获取现有的用户关联 + List existingUsers = taskUserMapper.selectByTaskId(taskID); + Map existingUserMap = existingUsers.stream() + .collect(Collectors.toMap(TbTaskUser::getUserID, taskUser -> taskUser)); + + Set newUserIDs = new HashSet<>(); + List usersToInsert = new ArrayList<>(); + + // 处理新的用户关联 + for (TaskItemVO item : newUserItems) { + String userID = item.getUserID(); + if (userID == null || userID.isEmpty()) { + continue; + } + + newUserIDs.add(userID); + + // 如果不存在,则新增 + if (!existingUserMap.containsKey(userID)) { + TbTaskUser taskUser = new TbTaskUser(); + taskUser.setID(IDUtils.generateID()); + taskUser.setTaskID(taskID); + taskUser.setUserID(userID); + taskUser.setCreator(user.getID()); + taskUser.setCreateTime(now); + usersToInsert.add(taskUser); + } + } + + // 找出要删除的用户关联 + List userIDsToDelete = existingUserMap.values().stream() + .filter(taskUser -> !newUserIDs.contains(taskUser.getUserID())) + .map(TbTaskUser::getID) + .collect(Collectors.toList()); + + if (!userIDsToDelete.isEmpty()) { + taskUserMapper.batchDeleteTaskUsers(taskID, userIDsToDelete); + } + + if (!usersToInsert.isEmpty()) { + taskUserMapper.batchInsertTaskUsers(usersToInsert); + } + + resultDomain.success("更新任务成功", taskVO); + return resultDomain; } @Override @@ -79,9 +360,23 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain getTaskById(String taskID) { - // TODO Auto-generated method stub - return null; + public ResultDomain getTaskById(String taskID) { + ResultDomain resultDomain = new ResultDomain<>(); + TaskVO taskVO = new TaskVO(); + TbLearningTask task = learningTaskMapper.selectByTaskId(taskID); + if (task == null) { + resultDomain.fail("任务不存在"); + return resultDomain; + } + List taskCourses = taskCourseMapper.selectTaskItemByTaskId(taskID); + List taskResources = taskResourceMapper.selectTaskItemByTaskId(taskID); + List taskUsers = taskUserMapper.selectTaskItemByTaskId(taskID); + taskVO.setLearningTask(task); + taskVO.setTaskCourses(taskCourses); + taskVO.setTaskResources(taskResources); + taskVO.setTaskUsers(taskUsers); + resultDomain.success("获取任务详情成功", taskVO); + return resultDomain; } @Override @@ -103,9 +398,11 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain getTaskUsers(String taskID) { - // TODO Auto-generated method stub - return null; + public ResultDomain getTaskUsers(String taskID) { + ResultDomain resultDomain = new ResultDomain<>(); + List taskUsers = taskUserMapper.selectTaskItemByTaskId(taskID); + resultDomain.success("获取任务用户列表成功", taskUsers); + return resultDomain; } @Override @@ -121,21 +418,45 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain removeTaskUser(String taskID, String userID) { - // TODO Auto-generated method stub - return null; - } + public ResultDomain removeTaskUser(String taskID, List userIDs) { - @Override - public ResultDomain updateTask(TbLearningTask task) { - // TODO Auto-generated method stub - return null; + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + int result = taskUserMapper.batchDeleteTaskUsers(taskID, userIDs); + if (result > 0) { + resultDomain.success("移除任务用户成功", true); + return resultDomain; + } else { + resultDomain.fail("移除任务用户失败"); + return resultDomain; + } } @Override public ResultDomain updateTaskStatus(String taskID, Integer status) { - // TODO Auto-generated method stub - return null; + ResultDomain resultDomain = new ResultDomain<>(); + TbSysUser user = LoginUtil.getCurrentUser(); + if (user == null) { + resultDomain.fail("请先登录"); + return resultDomain; + } + TbLearningTask task = new TbLearningTask(); + task.setUpdater(user.getID()); + task.setUpdateTime(new Date()); + task.setTaskID(taskID); + task.setStatus(status); + int result = learningTaskMapper.updateLearningTask(task); + if (result > 0) { + resultDomain.success("更新任务状态成功", task); + return resultDomain; + } else { + resultDomain.fail("更新任务状态失败"); + return resultDomain; + } } @Override diff --git a/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml index 8ca7a99..d65c582 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/CourseMapper.xml @@ -50,29 +50,32 @@ - - - AND course_id = #{filter.courseID} + + deleted = 0 + + + AND course_id = #{filter.courseID} + - - - AND name LIKE CONCAT('%', #{filter.name}, '%') - - - AND teacher LIKE CONCAT('%', #{filter.teacher}, '%') - - - AND status = #{filter.status} - - - AND order_num = #{filter.orderNum} - - - AND creator = #{filter.creator} - - - AND create_time = #{filter.createTime} - + + AND name LIKE CONCAT('%', #{filter.name}, '%') + + + AND teacher LIKE CONCAT('%', #{filter.teacher}, '%') + + + AND status = #{filter.status} + + + AND order_num = #{filter.orderNum} + + + AND creator = #{filter.creator} + + + AND create_time = #{filter.createTime} + + @@ -189,9 +192,6 @@ UPDATE tb_course - - course_id = #{courseID}, - name = #{name}, @@ -235,13 +235,13 @@ deleted = #{deleted}, - WHERE id = #{id} + WHERE course_id = #{courseID} DELETE FROM tb_course - WHERE id = #{id} + WHERE course_id = #{courseID} diff --git a/schoolNewsServ/study/src/main/resources/mapper/CourseNodeMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/CourseNodeMapper.xml index 9dad5bc..86362d0 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/CourseNodeMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/CourseNodeMapper.xml @@ -225,8 +225,7 @@ - - SELECT FROM tb_course_node @@ -235,5 +234,6 @@ #{chapterID} AND deleted = 0 + ORDER BY order_num ASC, create_time ASC diff --git a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml index 399e347..a023de2 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml @@ -41,6 +41,21 @@ + + + deleted = 0 + + AND task_id = #{taskID} + + + AND name LIKE CONCAT('%', #{filter.name}, '%') + + + AND status = #{filter.status} + + + + + + @@ -214,7 +241,7 @@ diff --git a/schoolNewsServ/study/src/main/resources/mapper/TaskCourseMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/TaskCourseMapper.xml index 3792249..886e733 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/TaskCourseMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/TaskCourseMapper.xml @@ -13,6 +13,24 @@ + + + + + + + + + + + + + + + + + + id, task_id, course_id, required, order_num, creator, create_time @@ -50,7 +68,6 @@ WHERE id = #{relationId} - + + + + + + SELECT @@ -151,6 +175,16 @@ ORDER BY create_time DESC + + + UPDATE tb_sys_user