目标类型(增删改查)

总目标,分目标目标对应的内容(增删改查)--删除有限定
课程目标的查询(按id查)
课程删除功能暂未完成
更新了数据库表objective_contents和objectives_type
master
Alan 6 months ago
parent 0505cdae76
commit fa04f59888
  1. 239
      sql/teaching2.0.sql
  2. 3
      src/main/java/com/teaching/backend/common/ErrorCode.java
  3. 2
      src/main/java/com/teaching/backend/common/ResultUtils.java
  4. 14
      src/main/java/com/teaching/backend/controller/courses/CourseObjectivesController.java
  5. 11
      src/main/java/com/teaching/backend/controller/courses/CoursesController.java
  6. 50
      src/main/java/com/teaching/backend/controller/courses/ObjectiveContentsController.java
  7. 69
      src/main/java/com/teaching/backend/controller/courses/ObjectivesTypeController.java
  8. 45
      src/main/java/com/teaching/backend/exception/GlobalExceptionHandler.java
  9. 4
      src/main/java/com/teaching/backend/mapper/courses/CourseObjectivesMapper.java
  10. 16
      src/main/java/com/teaching/backend/mapper/courses/ObjectiveContentsMapper.java
  11. 17
      src/main/java/com/teaching/backend/mapper/courses/ObjectivesTypeMapper.java
  12. 20
      src/main/java/com/teaching/backend/model/dto/courses/CourseObjectivesDTO.java
  13. 8
      src/main/java/com/teaching/backend/model/dto/courses/CoursesDTO.java
  14. 4
      src/main/java/com/teaching/backend/model/entity/courses/CourseObjectives.java
  15. 40
      src/main/java/com/teaching/backend/model/entity/courses/ObjectiveContents.java
  16. 38
      src/main/java/com/teaching/backend/model/entity/courses/ObjectivesType.java
  17. 2
      src/main/java/com/teaching/backend/model/query/PageQuery.java
  18. 26
      src/main/java/com/teaching/backend/model/vo/CourseObjectivesTreeVO.java
  19. 20
      src/main/java/com/teaching/backend/service/courses/ICourseObjectivesService.java
  20. 3
      src/main/java/com/teaching/backend/service/courses/ICoursesService.java
  21. 18
      src/main/java/com/teaching/backend/service/courses/IObjectiveContentsService.java
  22. 16
      src/main/java/com/teaching/backend/service/courses/IObjectivesTypeService.java
  23. 150
      src/main/java/com/teaching/backend/service/impl/courses/CourseObjectivesServiceImpl.java
  24. 42
      src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java
  25. 21
      src/main/java/com/teaching/backend/service/impl/courses/ObjectiveContentsServiceImpl.java
  26. 20
      src/main/java/com/teaching/backend/service/impl/courses/ObjectivesTypeServiceImpl.java
  27. 12
      src/main/resources/application.yml
  28. 13
      src/main/resources/mapper/CourseObjectivesMapper.xml
  29. 2
      src/main/resources/mapper/CoursesMapper.xml
  30. 5
      src/main/resources/mapper/ObjectiveContentsMapper.xml
  31. 5
      src/main/resources/mapper/ObjectivesTypeMapper.xml

@ -0,0 +1,239 @@
/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 8.0.12 : Database - teaching_db
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`teaching_db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `teaching_db`;
/*Table structure for table `course_objectives` */
DROP TABLE IF EXISTS `course_objectives`;
CREATE TABLE `course_objectives` (
`id` varchar(36) NOT NULL COMMENT '内部编号',
`create_time` datetime DEFAULT NULL COMMENT '创建日期',
`update_time` datetime DEFAULT NULL COMMENT '更新日期',
`pid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '父级节点 默认0没有',
`has_child` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '是否有子节点 添加子节点变1,默认0没有',
`name` varchar(200) DEFAULT NULL COMMENT '目标名称',
`type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '目标类型',
`course_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '课程id',
`requireid` varchar(32) DEFAULT NULL COMMENT '毕业要求id',
`temp` text COMMENT '毕业要求',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `course_objectives` */
insert into `course_objectives`(`id`,`create_time`,`update_time`,`pid`,`has_child`,`name`,`type`,`course_id`,`requireid`,`temp`) values ('3e42492c201d2a9378be5af2edc92b47','2024-06-06 16:17:39',NULL,'0','0','近代史纲要课程总体目标',NULL,'d8d7bb93f100164659cac44ef2c4f55a',NULL,NULL),('43f2c4b4a10a47784e50e772b9d10457','2024-05-31 17:39:13',NULL,'0','0','测试课程课程总体目标',NULL,'6f5de6dd8c8d5d9d02a63c8444b9d5bb',NULL,NULL),('503dc084653ffd003cb404b62266dc7c','2024-06-06 15:58:43',NULL,'da6e7283befa8965dae0f0f39ea7f24e','0','知识目标','c126ef1a66733ab7a4ba12aba0eb7f82',NULL,NULL,NULL),('53b27c94fe8af02ac8b23d9be9a2e329','2024-06-03 11:32:19',NULL,'da6e7283befa8965dae0f0f39ea7f24e','0','思政目标','71f73bd999f678bcbbdb101e23277feb',NULL,NULL,NULL),('7a302cd72d653647778840b42f4e076a','2024-06-03 10:43:13',NULL,'0','0','软件构造课程总体目标',NULL,'ee2447b4463a5ad3f47e1744d912a824',NULL,NULL),('aa839ff1345a04f95b4efcca02494cab','2024-06-06 16:45:22',NULL,'0','0','毛概课程总体目标',NULL,'72e1ad71bb855ba328f8c17964697354',NULL,NULL),('b41fa8332f39cca11d35635bd9fac720','2024-05-31 11:24:33',NULL,'0','0','计算机导论课程总体目标',NULL,'2fa0fd63262230639d2c45a3acd9045c',NULL,NULL),('c84dc451086f7938c28a4f757957f415','2024-06-06 15:58:19',NULL,'da6e7283befa8965dae0f0f39ea7f24e','0','价值目标','410fc58cd757cd248941af1bea6888e5',NULL,NULL,NULL),('d452f583115465d067a1719458690b95','2024-05-31 11:16:37',NULL,'0','0','计算机组成原理总体目标',NULL,'36c34a4225526dd20ee3840da61d3701',NULL,NULL),('da6e7283befa8965dae0f0f39ea7f24e','2024-05-31 20:49:52','2024-06-06 15:58:43','0','1','离散数学及其应用课程总体目标',NULL,'de3100cad98f76be3176dd39aa748a9e',NULL,NULL);
/*Table structure for table `courses` */
DROP TABLE IF EXISTS `courses`;
CREATE TABLE `courses` (
`id` varchar(36) NOT NULL COMMENT '内部编号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`img` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '课程封面',
`category` varchar(50) DEFAULT NULL COMMENT '课程类别',
`nature` varchar(50) DEFAULT NULL COMMENT '课程性质',
`name` varchar(100) DEFAULT NULL COMMENT '课程名称',
`code` varchar(50) DEFAULT NULL COMMENT '课程编码',
`semester` varchar(50) DEFAULT NULL COMMENT '开课学期',
`credit` decimal(5,2) DEFAULT NULL COMMENT '课程学分',
`classhours` int(11) DEFAULT NULL COMMENT '课程学时',
`theoryhours` int(11) DEFAULT NULL COMMENT '理论学时',
`practicehours` int(11) DEFAULT NULL COMMENT '实践学时',
`experimenthours` int(11) DEFAULT NULL COMMENT '实验学时',
`otherhours` int(11) DEFAULT NULL COMMENT '其他学时',
`weeks` int(11) DEFAULT NULL COMMENT '上课周数',
`assessmenttype` varchar(32) DEFAULT NULL COMMENT '考核类型',
`assessmentway` varchar(32) DEFAULT NULL COMMENT '考核方式',
`teacher` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '负责教师',
`teachermethod` text COMMENT '教学方法',
`teacherway` text COMMENT '教学方式',
`description` text COMMENT '课程简介',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `courses` */
insert into `courses`(`id`,`create_time`,`update_time`,`img`,`category`,`nature`,`name`,`code`,`semester`,`credit`,`classhours`,`theoryhours`,`practicehours`,`experimenthours`,`otherhours`,`weeks`,`assessmenttype`,`assessmentway`,`teacher`,`teachermethod`,`teacherway`,`description`) values ('2fa0fd63262230639d2c45a3acd9045c','2024-05-30 20:58:34',NULL,'','1','1','计算机导论12','111007',NULL,'4.50',64,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110339','暂定','线下授课',NULL),('36c34a4225526dd20ee3840da61d3701','2024-05-28 20:58:36',NULL,'','1','1','计算机组成原理','111006',NULL,'4.00',64,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110339','暂定','线下授课',NULL),('6f5de6dd8c8d5d9d02a63c8444b9d5bb','2024-05-26 20:58:40',NULL,'','1','1','测试课程','111008',NULL,'4.00',64,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110339','暂定','线下授课',NULL),('72e1ad71bb855ba328f8c17964697354','2024-06-06 16:45:22',NULL,'http://teaching-edu123.oss-cn-beijing.aliyuncs.com/KdxGCt8rKbruw3zEDTdkA.jpg','1','1','毛概','111012',NULL,'3.60',48,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334','暂定','线下授课',NULL),('8721e6864387eb99b04692f125ac0a9f','2024-05-27 20:58:43',NULL,'','1','1','SQLServer数据库教程','111004',NULL,'4.00',0,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110327','暂定111','线下机房授课',NULL),('90ce365ae4e362f616776550e04ae0b4','2024-05-24 20:58:48',NULL,'','1','1','JavaEE','111002',NULL,'4.00',0,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110327','暂定','线下机房授课',NULL),('a2ba84374d86e85208c5906a96ea8205','2024-05-24 20:58:48',NULL,'https://teaching-edu123.oss-cn-beijing.aliyuncs.com/Borovets_ZH-CN5914681811_UHD.jpg','1','1','JavaWeb','111003',NULL,'4.00',0,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110327','暂定','线下机房授课',NULL),('d511d26df8de551bc85ce765089771b4','2024-05-24 20:58:48',NULL,'','1','1','高级编程','111001',NULL,'4.00',0,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334,2140110327','暂定','线下机房授课',NULL),('d8d7bb93f100164659cac44ef2c4f55a','2024-06-06 16:17:39',NULL,'','1','1','近代史纲要','111011',NULL,'2.60',48,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334','暂定','线下授课',NULL),('de3100cad98f76be3176dd39aa748a9e','2024-05-31 20:49:52',NULL,'http://teaching-edu123.oss-cn-beijing.aliyuncs.com/E96JlmbPeqvzVcPvg43Lb.jpg','1','1','离散数学及其应用','111009',NULL,'2.00',64,NULL,NULL,NULL,NULL,NULL,'1','1','2140110334','暂定','线下授课',NULL);
/*Table structure for table `filetable` */
DROP TABLE IF EXISTS `filetable`;
CREATE TABLE `filetable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`course_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `filetable` */
insert into `filetable`(`id`,`course_id`,`file_name`,`file_path`) values (1,'1','1f88e9df6f0b4412b0eb067ad057adb5.mp4','video/1f88e9df6f0b4412b0eb067ad057adb5.mp4'),(2,'2','bda16852b6944ae08cfcc70597f8dbb6.md','others/bda16852b6944ae08cfcc70597f8dbb6.md'),(3,'3','4c0dbc0ad84344bc8ba3431346cc7078.md','others/4c0dbc0ad84344bc8ba3431346cc7078.md');
/*Table structure for table `objective_contents` */
DROP TABLE IF EXISTS `objective_contents`;
CREATE TABLE `objective_contents` (
`id` varchar(32) NOT NULL,
`objective_id` varchar(32) DEFAULT NULL COMMENT '对应的目标id',
`content` text COMMENT '内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `objective_contents` */
insert into `objective_contents`(`id`,`objective_id`,`content`) values ('3f85eb79c29be4a15c729d98b17676a5','c84dc451086f7938c28a4f757957f415','价值目标3'),('406c85c99bd2d4b9f624ca3a67c3ce66','53b27c94fe8af02ac8b23d9be9a2e329','思政目标2'),('4ad5a1f0f584e35e7af6ef5142773990','503dc084653ffd003cb404b62266dc7c','知识目标1'),('4b4458cd64b0a1e21b54191a89e9f83d','c84dc451086f7938c28a4f757957f415','价值目标2'),('53d9d78b41051696314c0b1c0efa5313','503dc084653ffd003cb404b62266dc7c','知识目标3'),('6689ed187bcbd36309510a21ea492225','da6e7283befa8965dae0f0f39ea7f24e','总目标3'),('979e59083e81f28145e1162069ffebb8','c84dc451086f7938c28a4f757957f415','价值目标1'),('9efcc83089e6de9945499876d1a6235a','da6e7283befa8965dae0f0f39ea7f24e','总目标1'),('c6b3fc522a5479e28cd3f0c9b971a871','53b27c94fe8af02ac8b23d9be9a2e329','思政目标3'),('dc31075d57f371970c5af09fd534a9af','da6e7283befa8965dae0f0f39ea7f24e','总目标2'),('eca937e6f047e3b6b06d67c5b4a9beff','53b27c94fe8af02ac8b23d9be9a2e329','思政目标1'),('ffde482fac55e6dec5b60f6c6208d42c','503dc084653ffd003cb404b62266dc7c','知识目标2');
/*Table structure for table `objectives_type` */
DROP TABLE IF EXISTS `objectives_type`;
CREATE TABLE `objectives_type` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`type_name` varchar(50) DEFAULT NULL COMMENT '类型名称',
PRIMARY KEY (`id`),
UNIQUE KEY `type_name` (`type_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `objectives_type` */
insert into `objectives_type`(`id`,`type_name`) values ('410fc58cd757cd248941af1bea6888e5','价值目标'),('71f73bd999f678bcbbdb101e23277feb','思政目标'),('c126ef1a66733ab7a4ba12aba0eb7f82','知识目标'),('2350f69ef928cd2949e7fc05b05bd0c3','素质目标');
/*Table structure for table `se_course_favour` */
DROP TABLE IF EXISTS `se_course_favour`;
CREATE TABLE `se_course_favour` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '课程id',
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_course_favour` */
insert into `se_course_favour`(`id`,`course_id`,`user_id`) values ('1796378327262564353','a2ba84374d86e85208c5906a96ea8205','2'),('1796454599099658242','36c34a4225526dd20ee3840da61d3701','2'),('1796789887730647041','2fa0fd63262230639d2c45a3acd9045c','2'),('1797497056650289154','d511d26df8de551bc85ce765089771b4','1'),('1797499380101767170','d511d26df8de551bc85ce765089771b4','2'),('1798221492412149761','d511d26df8de551bc85ce765089771b4','5'),('1798621775654993922','d511d26df8de551bc85ce765089771b4','8'),('1798632199670714369','de3100cad98f76be3176dd39aa748a9e','2');
/*Table structure for table `se_course_thumb` */
DROP TABLE IF EXISTS `se_course_thumb`;
CREATE TABLE `se_course_thumb` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_course_thumb` */
insert into `se_course_thumb`(`id`,`course_id`,`user_id`) values ('1796343958854623233','2','1'),('1796344002215337985','2','2'),('1796362250491191298','1','2'),('1796437673614974977','6','2'),('1796445964822847489','7','4');
/*Table structure for table `se_know_favour` */
DROP TABLE IF EXISTS `se_know_favour`;
CREATE TABLE `se_know_favour` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`know_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_know_favour` */
insert into `se_know_favour`(`id`,`course_id`,`know_id`,`user_id`) values ('1796378889450295297','1','2','3');
/*Table structure for table `se_know_thumb` */
DROP TABLE IF EXISTS `se_know_thumb`;
CREATE TABLE `se_know_thumb` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`know_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_know_thumb` */
insert into `se_know_thumb`(`id`,`course_id`,`know_id`,`user_id`) values ('1796347057337982977','1','2','2'),('1796347303317135361','2','2','3'),('1796347343968329730','2','3','3'),('1796347380697849857','1','3','3');
/*Table structure for table `se_resource_favour` */
DROP TABLE IF EXISTS `se_resource_favour`;
CREATE TABLE `se_resource_favour` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`resource_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_resource_favour` */
insert into `se_resource_favour`(`id`,`course_id`,`resource_id`,`user_id`) values ('1796379012112715778','1','2','3');
/*Table structure for table `se_resource_thumb` */
DROP TABLE IF EXISTS `se_resource_thumb`;
CREATE TABLE `se_resource_thumb` (
`id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`course_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`resource_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*Data for the table `se_resource_thumb` */
insert into `se_resource_thumb`(`id`,`course_id`,`resource_id`,`user_id`) values ('1796366535710904322','2','1','1');
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`userAccount` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号',
`userPassword` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码',
`userName` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户昵称',
`userAvatar` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户头像',
`userRole` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'user' COMMENT '用户角色:user/admin/ban',
`createTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`isDelete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1793257199111405570 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户';
/*Data for the table `user` */
insert into `user`(`id`,`userAccount`,`userPassword`,`userName`,`userAvatar`,`userRole`,`createTime`,`updateTime`,`isDelete`) values (1793257199111405569,'youhang','84fccf8fe96cab775b23698a9c9b7eaa','游航',NULL,'admin','2024-05-22 20:26:48','2024-05-22 20:27:53',0);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

@ -8,11 +8,12 @@ package com.teaching.backend.common;
*/
public enum ErrorCode {
SUCCESS(0, "ok"),
SUCCESS(200, "ok"),
PARAMS_ERROR(40000, "请求参数错误"),
NOT_LOGIN_ERROR(40100, "未登录"),
NO_AUTH_ERROR(40101, "无权限"),
NOT_FOUND_ERROR(40400, "请求数据不存在"),
CONTENT_EXISTS(41000, "内容存在"),
FORBIDDEN_ERROR(40300, "禁止访问"),
PARAMS_ILLEGAL(42000, "请求参数违法"),

@ -16,7 +16,7 @@ public class ResultUtils {
* @return
*/
public static <T> BaseResponse<T> success(T data) {
return new BaseResponse<>(0, data, "ok");
return new BaseResponse<>(200, data, "ok");
}
/**

@ -7,6 +7,7 @@ import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.mapper.courses.CourseObjectivesMapper;
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.vo.CourseObjectivesTreeVO;
import com.teaching.backend.service.courses.ICourseObjectivesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
@ -49,6 +51,11 @@ public class CourseObjectivesController {
return ResultUtils.success(data);
}
/**
* 禁止修改课程编码和名称
* @param courseObjectivesDTO
* @return
*/
@ApiOperation("编辑分项目标")
@PutMapping
public BaseResponse<String> updateCourseObjectives(@RequestBody CourseObjectivesDTO courseObjectivesDTO){
@ -60,5 +67,12 @@ public class CourseObjectivesController {
return ResultUtils.success("编辑成功");
}
@ApiOperation("查询课程目标内容")
@GetMapping("/list/{id}")
public BaseResponse<List<CourseObjectivesTreeVO>> queryCourseObjectivesTree(@PathVariable String id){
List<CourseObjectivesTreeVO> courseObjectivesTreeVO = courseObjectivesService.queryCourseObjectivesTree(id);
return ResultUtils.success(courseObjectivesTreeVO);
}
}

@ -69,11 +69,12 @@ public class CoursesController {
}
//TODO:删除功能暂未完善,数据表缺失
@ApiOperation("根据ids批量删除课程")
@DeleteMapping("/{ids}")
public BaseResponse<String> deleteCourses(@PathVariable List<String> ids){
System.out.println(ids);
coursesService.removeBatchByIds(ids);
@ApiOperation("根据id删除课程")
@DeleteMapping("/{id}")
public BaseResponse deleteCourses(@PathVariable String id){
System.out.println(id);
coursesService.deleteBatchByIds(id);
// coursesService.removeBatchByIds(ids);
return ResultUtils.success("删除成功");
}

@ -0,0 +1,50 @@
package com.teaching.backend.controller.courses;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import com.teaching.backend.service.courses.IObjectiveContentsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@RestController
@RequestMapping("/objective_contents")
@Api(tags = "目标内容接口")
public class ObjectiveContentsController {
@Autowired
IObjectiveContentsService objectiveContentsService;
@ApiOperation("添加目标内容")
@PostMapping("/addcontent")
public BaseResponse<String> saveContent(@RequestBody ObjectiveContents objectiveContents){
objectiveContentsService.save(objectiveContents);
return ResultUtils.success("添加成功");
}
@ApiOperation("删除目标内容")
@DeleteMapping("/{id}")
public BaseResponse<String> deleteContent(@PathVariable String id){
objectiveContentsService.removeById(id);
return ResultUtils.success("删除成功");
}
@ApiOperation("修改目标内容")
@PutMapping("/update")
public BaseResponse<String> updateContent(@RequestBody ObjectiveContents objectiveContents){
objectiveContentsService.updateById(objectiveContents);
return ResultUtils.success("修改成功");
}
}

@ -0,0 +1,69 @@
package com.teaching.backend.controller.courses;
import cn.hutool.core.bean.BeanUtil;
import com.teaching.backend.common.BaseResponse;
import com.teaching.backend.common.ResultUtils;
import com.teaching.backend.model.dto.courses.CoursesDTO;
import com.teaching.backend.model.dto.courses.PageDTO;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.courses.ObjectivesType;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.CoursesVO;
import com.teaching.backend.service.courses.ICoursesService;
import com.teaching.backend.service.courses.IObjectivesTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@RestController
@RequestMapping("/objectives_type")
@Api(tags = "项目目标类型管理接口")
public class ObjectivesTypeController {
@Autowired
IObjectivesTypeService objectivesTypeService;
@ApiOperation("新增目标类型")
@PostMapping("/addobjectives")
public BaseResponse<String> saveObjectives(@RequestBody ObjectivesType objectivesType){
objectivesTypeService.save(objectivesType);
return ResultUtils.success("添加成功");
}
@ApiOperation("删除目标类型")
@DeleteMapping("/deleteobjectives/{id}")
public BaseResponse<String> deleteObjectives(@PathVariable String id){
objectivesTypeService.removeById(id);
return ResultUtils.success("删除成功");
}
@ApiOperation("修改目标类型")
@PutMapping
public BaseResponse<String> updateObjectives(@RequestBody ObjectivesType objectivesType){
objectivesTypeService.updateById(objectivesType);
return ResultUtils.success("修改成功");
}
@ApiOperation("列表显示目标类型")
@GetMapping("/list")
public BaseResponse<List<ObjectivesType>> ObjectivesList(){
List<ObjectivesType> list = objectivesTypeService.list();
return ResultUtils.success(list);
}
}

@ -0,0 +1,45 @@
package com.teaching.backend.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getCode(), ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
// 其他异常处理器可以按需添加
public static class ErrorResponse {
private int code;
private String message;
public ErrorResponse(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
}

@ -2,6 +2,9 @@ package com.teaching.backend.mapper.courses;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.vo.CourseObjectivesTreeVO;
import java.util.List;
/**
* <p>
@ -13,4 +16,5 @@ import com.teaching.backend.model.entity.courses.CourseObjectives;
*/
public interface CourseObjectivesMapper extends BaseMapper<CourseObjectives> {
List<CourseObjectivesTreeVO> selectTreeNodes(String courseObjectivesId);
}

@ -0,0 +1,16 @@
package com.teaching.backend.mapper.courses;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zjh
* @since 2024-06-05
*/
public interface ObjectiveContentsMapper extends BaseMapper<ObjectiveContents> {
}

@ -0,0 +1,17 @@
package com.teaching.backend.mapper.courses;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.teaching.backend.model.entity.courses.ObjectivesType;
/**
* <p>
* Mapper 接口
* </p>
*
* @author zjh
* @since 2024-06-05
*/
public interface ObjectivesTypeMapper extends BaseMapper<ObjectivesType> {
}

@ -1,12 +1,16 @@
package com.teaching.backend.model.dto.courses;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@ApiModel(description = "分项目标参数实体")
public class CourseObjectivesDTO {
public class CourseObjectivesDTO implements Serializable {
/**
* 内部编号
*/
@ -19,16 +23,10 @@ public class CourseObjectivesDTO {
@ApiModelProperty(value = "分项目标名称",required = true)
private String name;
/**
* 分项目标类型 思政1 知识2素质3价值4
* 分项目标类型 思政 知识素质价值
*/
@ApiModelProperty(value = "分项目标类型 思政1 知识2、素质3、价值4",required = true)
@ApiModelProperty(value = "分项目标类型",required = true)
private String type;
/**
* 分项目标描述
*/
@ApiModelProperty(value = "分项目标内容",required = true)
private String content;
/**
* 父节点
*/
@ -36,4 +34,8 @@ public class CourseObjectivesDTO {
private String pid;
}

@ -34,13 +34,13 @@ public class CoursesDTO {
/**
* 课程类别 专业教育 通识教育
*/
@ApiModelProperty(value = "课程类别:专业教育 通识教育",required = true)
@ApiModelProperty(value = "课程类别:专业教育1 通识教育2",required = true)
private String category;
/**
* 课程性质 必修选修任修
*/
@ApiModelProperty(value = "课程性质:必修,选修,任修",required = true)
@ApiModelProperty(value = "课程性质:必修1 选修2 任修3",required = true)
private String nature;
/**
@ -71,13 +71,13 @@ public class CoursesDTO {
/**
* 考核类型 考试 考查
*/
@ApiModelProperty(value = "考核类型:考试 考查",required = true)
@ApiModelProperty(value = "考核类型:考试1 考查2",required = true)
private String assessmenttype;
/**
* 考核方式 开卷 闭卷 其他
*/
@ApiModelProperty(value = "考核方式:开卷 闭卷 其他",required = true)
@ApiModelProperty(value = "考核方式:开卷1 闭卷2 其他3",required = true)
private String assessmentway;
/**

@ -52,11 +52,9 @@ public class CourseObjectives implements Serializable {
@ApiModelProperty(value = "目标类型")
private String type;
@ApiModelProperty(value = "目标内容")
private String content;
@ApiModelProperty(value = "课程id")
private String courseid;
private String courseId;
@ApiModelProperty(value = "毕业要求id")
private String requireid;

@ -0,0 +1,40 @@
package com.teaching.backend.model.entity.courses;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("objective_contents")
@ApiModel(value="ObjectiveContents对象", description="")
public class ObjectiveContents implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
@ApiModelProperty(value = "对应的目标id",required = true)
private String objectiveId;
@ApiModelProperty(value = "内容",required = true)
private String content;
}

@ -0,0 +1,38 @@
package com.teaching.backend.model.entity.courses;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("objectives_type")
@ApiModel(value="ObjectivesType对象", description="")
public class ObjectivesType implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value = "类型编码,不用输入,使用雪花算法生成")
private String id;
@ApiModelProperty(value = "类型名称",required = true)
private String typeName;
}

@ -12,7 +12,7 @@ import lombok.Data;
public class PageQuery {
@ApiModelProperty("页码")
private Integer pageNo = 1;
@ApiModelProperty("页码")
@ApiModelProperty("每页数量")
private Integer pageSize = 10;
@ApiModelProperty("排序字段")
private String sortBy;

@ -0,0 +1,26 @@
package com.teaching.backend.model.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ApiModel(description = "课程目标参数实体")
public class CourseObjectivesTreeVO extends CourseObjectives implements Serializable {
@ApiModelProperty(value = "目标内容列表")
private List<ObjectiveContents> contents;
@ApiModelProperty(value = "课程目标")
private List<CourseObjectivesTreeVO> courseObjectivesTrees;
}

@ -3,6 +3,9 @@ package com.teaching.backend.service.courses;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.vo.CourseObjectivesTreeVO;
import java.util.List;
/**
* <p>
@ -14,7 +17,24 @@ import com.teaching.backend.model.entity.courses.CourseObjectives;
*/
public interface ICourseObjectivesService extends IService<CourseObjectives> {
/**
* 添加课程目标
* @param courseObjectivesDTO
* @return
*/
String addObjectives(CourseObjectivesDTO courseObjectivesDTO);
/**
* 删除课程目标
* @param id
* @return
*/
String deleteObjectives(String id);
/**
* 查询课程目标以及相关内容
* @param id
* @return
*/
List<CourseObjectivesTreeVO> queryCourseObjectivesTree(String id);
}

@ -8,6 +8,8 @@ import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.CoursesVO;
import java.util.List;
/**
* <p>
@ -24,4 +26,5 @@ public interface ICoursesService extends IService<Courses> {
PageDTO<CoursesVO> queryCourses(CourseQuery courseQuery, String teacherId);
void deleteBatchByIds(String id);
}

@ -0,0 +1,18 @@
package com.teaching.backend.service.courses;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import com.teaching.backend.model.vo.CourseObjectivesTreeVO;
/**
* <p>
* 服务类
* </p>
*
* @author zjh
* @since 2024-06-05
*/
public interface IObjectiveContentsService extends IService<ObjectiveContents> {
}

@ -0,0 +1,16 @@
package com.teaching.backend.service.courses;
import com.baomidou.mybatisplus.extension.service.IService;
import com.teaching.backend.model.entity.courses.ObjectivesType;
/**
* <p>
* 服务类
* </p>
*
* @author zjh
* @since 2024-06-05
*/
public interface IObjectivesTypeService extends IService<ObjectivesType> {
}

@ -6,13 +6,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.exception.BusinessException;
import com.teaching.backend.mapper.courses.CourseObjectivesMapper;
import com.teaching.backend.mapper.courses.ObjectiveContentsMapper;
import com.teaching.backend.model.dto.courses.CourseObjectivesDTO;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import com.teaching.backend.model.vo.CourseObjectivesTreeVO;
import com.teaching.backend.service.courses.ICourseObjectivesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
@ -29,6 +35,9 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
@Autowired
CourseObjectivesMapper courseObjectivesMapper;
@Autowired
ObjectiveContentsMapper objectiveContentsMapper;
@Override
public String addObjectives(CourseObjectivesDTO courseObjectivesDTO) {
String pid = courseObjectivesDTO.getPid();
@ -37,58 +46,137 @@ public class CourseObjectivesServiceImpl extends ServiceImpl<CourseObjectivesMap
}
String hasChild = courseObjectivesMapper.selectById(pid).getHasChild();
String type = courseObjectivesDTO.getType();
if (hasChild.equals("0") && !type.equals("1")){
if (hasChild.equals("0") && !type.equals("71f73bd999f678bcbbdb101e23277feb")){
throw new BusinessException(ErrorCode.PARAMS_ILLEGAL,"请在添加完思政目标以后再添加此类型目标!");
}
//判断是否已经添加过思政目标
// TODO:思政目标能不能有多个??
if (courseObjectivesDTO.getType().equals("1")){
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(CourseObjectives::getPid, pid)
.eq(CourseObjectives::getType, "1");
Long count = courseObjectivesMapper.selectCount(queryWrapper);
if (count>0){
throw new BusinessException(ErrorCode.OPERATION_ERROR,"思政目标已存在,禁止重复添加!");
}
//判断是否已经添加过该类型的目标
//每个类型的目标只能有一个
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(CourseObjectives::getPid, pid)
.eq(CourseObjectives::getType, type);
Long count = courseObjectivesMapper.selectCount(queryWrapper);
if (count>0){
throw new BusinessException(ErrorCode.CONTENT_EXISTS,"该类型的目标已存在,禁止重复添加!");
}
//往表里面写分项目标
CourseObjectives courseObjectives = new CourseObjectives();
BeanUtil.copyProperties(courseObjectivesDTO,courseObjectives);
courseObjectives.setCreateTime(LocalDateTime.now());
courseObjectivesMapper.insert(courseObjectives);
CourseObjectives courseObjectivesNew = new CourseObjectives();
BeanUtil.copyProperties(courseObjectivesDTO,courseObjectivesNew);
courseObjectivesNew.setCreateTime(LocalDateTime.now());
courseObjectivesMapper.insert(courseObjectivesNew);
//插入数据以后要把总体目标那边的haschild改成1
CourseObjectives objectives = courseObjectivesMapper.selectById(pid);
objectives.setHasChild("1");
courseObjectivesMapper.updateById(objectives);
CourseObjectives courseObjectivesOld = courseObjectivesMapper.selectById(pid);
courseObjectivesOld.setUpdateTime(LocalDateTime.now());
courseObjectivesOld.setHasChild("1");
courseObjectivesMapper.updateById(courseObjectivesOld);
return "添加成功";
}
/**
* 删除课程目标
* 首先检查是不是思政目标如果是思政目标就要看此时的总目标下面有没有别的分项目标了如果有不准删除
* 如果此时只有分项目标检查分项目标下面有没有内容如果有禁止删除
* 删除分项目标也要检查下面有没有内容
* @param id
* @return
*/
@Override
public String deleteObjectives(String id) {
final String SI_ZHENG_TYPE="71f73bd999f678bcbbdb101e23277feb";
CourseObjectives courseObjectives = courseObjectivesMapper.selectById(id);
if (courseObjectives == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);
}
String type = courseObjectives.getType();
String pid = courseObjectives.getPid();
if (type.equals("1")){
if (SI_ZHENG_TYPE.equals(type)){
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CourseObjectives::getPid, pid);
Long count = courseObjectivesMapper.selectCount(queryWrapper);
if (count==1){
courseObjectivesMapper.deleteById(id);
CourseObjectives courseObjectives1 = courseObjectivesMapper.selectById(pid);
courseObjectives1.setHasChild("0");
courseObjectivesMapper.updateById(courseObjectives1);
return "删除成功";
Long count1 = courseObjectivesMapper.selectCount(queryWrapper);
if (count1==1){
Long count2 = getCount(id);
if (count2==0)
{
// 删除操作和更新父目标状态
deleteObjectiveAndUpdateParent(id, pid);
return "删除成功";
}
else {
throw new BusinessException(ErrorCode.CONTENT_EXISTS, "请删除该目标下的内容后,再删除该目标");
}
}
else
{
throw new BusinessException(ErrorCode.OPERATION_ERROR, "请删除其他类型的分目标后再来删除思政目标");
throw new BusinessException(ErrorCode.OPERATION_ERROR, "请删除其他类型的分目标后再来删除思政目标");
}
}
else {
courseObjectivesMapper.deleteById(id);
return "删除成功";
Long count3 = getCount(id);
if (count3==0){
courseObjectivesMapper.deleteById(id);
return "删除成功";
}
else {
throw new BusinessException(ErrorCode.CONTENT_EXISTS, "请删除该目标下的内容后,再删除该目标");
}
}
}
private Long getCount(String id) {
LambdaQueryWrapper<ObjectiveContents> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ObjectiveContents::getObjectiveId, id);
Long count = objectiveContentsMapper.selectCount(queryWrapper);
return count;
}
private void deleteObjectiveAndUpdateParent(String id, String pid) {
courseObjectivesMapper.deleteById(id);
CourseObjectives parentObjective = courseObjectivesMapper.selectById(pid);
parentObjective.setHasChild("0");
courseObjectivesMapper.updateById(parentObjective);
}
@Override
public List<CourseObjectivesTreeVO> queryCourseObjectivesTree(String id) {
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CourseObjectives::getCourseId, id);
CourseObjectives courseObjectives = courseObjectivesMapper.selectOne(queryWrapper);
String courseObjectivesId = courseObjectives.getId();
List<CourseObjectivesTreeVO> objectives = courseObjectivesMapper.selectTreeNodes(courseObjectivesId);
Map<String, CourseObjectivesTreeVO> map = new HashMap<>();
for (CourseObjectivesTreeVO objective : objectives) {
map.put(objective.getId(), objective);
}
// 构建树结构
List<CourseObjectivesTreeVO> roots = new ArrayList<>();
for (CourseObjectivesTreeVO objective : objectives) {
if ("0".equals(objective.getPid())) {
roots.add(objective);
} else {
CourseObjectivesTreeVO parent = map.get(objective.getPid());
if (parent != null) {
if (parent.getCourseObjectivesTrees() == null) {
parent.setCourseObjectivesTrees(new ArrayList<>());
}
parent.getCourseObjectivesTrees().add(objective);
}
}
// 填充内容
List<ObjectiveContents> contents = fetchContentsForObjective(objective.getId());
objective.setContents(contents);
}
return roots;
}
// 获取目标的内容列表
private List<ObjectiveContents> fetchContentsForObjective(String objectiveId) {
LambdaQueryWrapper<ObjectiveContents> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ObjectiveContents::getObjectiveId, objectiveId);
List<ObjectiveContents> contents = objectiveContentsMapper.selectList(queryWrapper);
return contents;
}
}

@ -1,6 +1,7 @@
package com.teaching.backend.service.impl.courses;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -8,10 +9,12 @@ import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.exception.BusinessException;
import com.teaching.backend.mapper.courses.CourseObjectivesMapper;
import com.teaching.backend.mapper.courses.CoursesMapper;
import com.teaching.backend.mapper.courses.ObjectiveContentsMapper;
import com.teaching.backend.model.dto.courses.CoursesDTO;
import com.teaching.backend.model.dto.courses.PageDTO;
import com.teaching.backend.model.entity.courses.CourseObjectives;
import com.teaching.backend.model.entity.courses.Courses;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import com.teaching.backend.model.query.CourseQuery;
import com.teaching.backend.model.vo.CoursesVO;
import com.teaching.backend.service.courses.ICoursesService;
@ -21,23 +24,26 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* 服务实现类
* 服务实现类
* </p>
*
* @author zjh
* @since 2024-05-30
*/
@Service
public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses>implements ICoursesService {
public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> implements ICoursesService {
@Autowired
CoursesMapper coursesMapper;
@Autowired
CourseObjectivesMapper courseObjectivesMapper;
@Autowired
ObjectiveContentsMapper objectiveContentsMapper;
@Override
@Transactional
@ -54,17 +60,17 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses>imple
QueryWrapper<Courses> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code);
Long count = coursesMapper.selectCount(queryWrapper);
if(count==0){
if (count == 0) {
int insert = coursesMapper.insert(courses);
if (insert>0){
if (insert > 0) {
Courses courses1 = coursesMapper.selectOne(queryWrapper);
courseObjectives.setCourseid(courses1.getId());
courseObjectives.setCourseId(courses1.getId());
courseObjectives.setCreateTime(courses1.getCreateTime());
courseObjectives.setName(courses1.getName()+"课程总体目标");
courseObjectives.setName(courses1.getName() + "课程总体目标");
courseObjectivesMapper.insert(courseObjectives);
}
return "添加成功";
}else {
} else {
throw new BusinessException(ErrorCode.OPERATION_ERROR, "这个课程已经存在了!请联系系统相关人员为您导入课程数据!");
}
@ -85,7 +91,27 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses>imple
.page(page);
return PageDTO.of(p,CoursesVO.class);
return PageDTO.of(p, CoursesVO.class);
}
@Override
// @Transactional
public void deleteBatchByIds(String id) {
LambdaQueryWrapper<CourseObjectives> queryWrapper = new LambdaQueryWrapper<CourseObjectives>().eq(CourseObjectives::getCourseId, id);
CourseObjectives courseObjectives = courseObjectivesMapper.selectOne(queryWrapper);
String objectivesId = courseObjectives.getId();
LambdaQueryWrapper<ObjectiveContents> queryWrapper2 = new LambdaQueryWrapper<ObjectiveContents>().eq(ObjectiveContents::getObjectiveId, objectivesId);
Long count = objectiveContentsMapper.selectCount(queryWrapper2);
if (courseObjectives.getHasChild().equals("1")) {
throw new BusinessException(ErrorCode.CONTENT_EXISTS, "该课程已有分项目标,禁止删除");
}
if (!count.equals(0)){
throw new BusinessException(ErrorCode.CONTENT_EXISTS, "总目标下面还有内容,禁止删除");
}
else {
coursesMapper.deleteById(id);
courseObjectivesMapper.deleteById(courseObjectives.getId());
}
}

@ -0,0 +1,21 @@
package com.teaching.backend.service.impl.courses;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.mapper.courses.ObjectiveContentsMapper;
import com.teaching.backend.model.entity.courses.ObjectiveContents;
import com.teaching.backend.service.courses.IObjectiveContentsService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@Service
public class ObjectiveContentsServiceImpl extends ServiceImpl<ObjectiveContentsMapper, ObjectiveContents> implements IObjectiveContentsService {
}

@ -0,0 +1,20 @@
package com.teaching.backend.service.impl.courses;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.mapper.courses.ObjectivesTypeMapper;
import com.teaching.backend.model.entity.courses.ObjectivesType;
import com.teaching.backend.service.courses.IObjectivesTypeService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author zjh
* @since 2024-06-05
*/
@Service
public class ObjectivesTypeServiceImpl extends ServiceImpl<ObjectivesTypeMapper, ObjectivesType> implements IObjectivesTypeService {
}

@ -18,7 +18,17 @@ mybatis:
- classpath:dao/*.xml
- classpath*:com/**/mapper/*.xml
# 接口文档配置
knife4j:
enable: true
openapi:
title: ""
version: 1.0
group:
default:
api-rule: package
api-rule-resources:
- com.teaching.backend.controller
# 接口文档配置
knife4j:
enable: true

@ -1,5 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="edu.huanghuai.mapper.CourseObjectivesMapper">
<mapper namespace="com.teaching.backend.mapper.courses.CourseObjectivesMapper">
<select id="selectTreeNodes" resultType="com.teaching.backend.model.vo.CourseObjectivesTreeVO"
parameterType="string">
with recursive t1 as (
select * from course_objectives where id=#{courseObjectivesId}
union all
select t2.* from course_objectives t2 inner join t1 on t1.id = t2.pid
)
select * from t1
order by t1.pid
</select>
</mapper>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="edu.huanghuai.mapper.CoursesMapper">
<mapper namespace="com.teaching.backend.mapper.courses.CoursesMapper">
</mapper>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.teaching.backend.mapper.courses.ObjectiveContentsMapper">
</mapper>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.teaching.backend.mapper.courses.ObjectivesTypeMapper">
</mapper>
Loading…
Cancel
Save