瀏覽代碼

1.添加学科、学习阶段实体类;
2.添加新增实体类对应的数据仓库及数据服务类和实现类;
3.修改配置文件。

Yumin 6 年之前
父節點
當前提交
06a0421434

+ 4 - 1
src/main/java/cn/minbb/edu/controller/rest/CourseController.java

@@ -3,6 +3,7 @@ package cn.minbb.edu.controller.rest;
 import cn.minbb.edu.data.ResponseResult;
 import cn.minbb.edu.model.Course;
 import cn.minbb.edu.service.CourseService;
+import cn.minbb.edu.service.SubjectService;
 import cn.minbb.edu.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -15,11 +16,13 @@ public class CourseController {
 
     private UserService userService;
     private CourseService courseService;
+    private SubjectService subjectService;
 
     @Autowired
-    public CourseController(UserService userService, CourseService courseService) {
+    public CourseController(UserService userService, CourseService courseService, SubjectService subjectService) {
         this.userService = userService;
         this.courseService = courseService;
+        this.subjectService = subjectService;
     }
 
     @GetMapping("")

+ 29 - 0
src/main/java/cn/minbb/edu/controller/rest/StageController.java

@@ -0,0 +1,29 @@
+package cn.minbb.edu.controller.rest;
+
+import cn.minbb.edu.data.ResponseResult;
+import cn.minbb.edu.model.Stage;
+import cn.minbb.edu.service.StageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("app/stage")
+public class StageController {
+
+    private StageService stageService;
+
+    @Autowired
+    public StageController(StageService stageService) {
+        this.stageService = stageService;
+    }
+
+    @PostMapping("all")
+    public ResponseResult<Stage> subjectAll() {
+        List<Stage> stageList = stageService.findAll();
+        return ResponseResult.ok(true).code(1).message("").dataset(stageList);
+    }
+}

+ 52 - 0
src/main/java/cn/minbb/edu/controller/rest/SubjectController.java

@@ -0,0 +1,52 @@
+package cn.minbb.edu.controller.rest;
+
+import cn.minbb.edu.data.ResponseResult;
+import cn.minbb.edu.model.Subject;
+import cn.minbb.edu.service.CourseService;
+import cn.minbb.edu.service.SubjectService;
+import cn.minbb.edu.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("app/subject")
+public class SubjectController {
+
+    private UserService userService;
+    private CourseService courseService;
+    private SubjectService subjectService;
+
+    @Autowired
+    public SubjectController(UserService userService, CourseService courseService, SubjectService subjectService) {
+        this.userService = userService;
+        this.courseService = courseService;
+        this.subjectService = subjectService;
+    }
+
+    @PostMapping("")
+    public ResponseResult<Subject> subject(@RequestBody Map<String, Integer> idMap) {
+        Integer id = idMap.get("id");
+        if (null == id) {
+            return ResponseResult.ok(false).code(-1).message("ID不能为空").dataNone();
+        } else {
+            Subject subject = subjectService.findOneById(id);
+            subject.setCourseList(courseService.findAllBySubjectId(id));
+            return ResponseResult.ok(true).code(1).message("").data(subject);
+        }
+    }
+
+    @PostMapping("all")
+    public ResponseResult<Subject> subjectAll() {
+        List<Subject> subjectList = subjectService.findAll();
+        for (Subject subject : subjectList) {
+            subject.setCourseList(courseService.findAllBySubjectId(subject.getId()));
+        }
+        return ResponseResult.ok(true).code(1).message("").dataset(subjectList);
+    }
+}

+ 11 - 1
src/main/java/cn/minbb/edu/controller/web/CourseController.java

@@ -1,8 +1,10 @@
 package cn.minbb.edu.controller.web;
 
 import cn.minbb.edu.model.Course;
+import cn.minbb.edu.model.Subject;
 import cn.minbb.edu.model.User;
 import cn.minbb.edu.service.CourseService;
+import cn.minbb.edu.service.SubjectService;
 import cn.minbb.edu.service.UserService;
 import cn.minbb.edu.storage.FileService;
 import cn.minbb.edu.storage.StorageProperties;
@@ -26,17 +28,20 @@ public class CourseController {
 
     private UserService userService;
     private CourseService courseService;
+    private SubjectService subjectService;
     private FileService fileService;
 
     @Autowired
-    public CourseController(UserService userService, CourseService courseService, FileService fileService) {
+    public CourseController(UserService userService, CourseService courseService, SubjectService subjectService, FileService fileService) {
         this.userService = userService;
         this.courseService = courseService;
+        this.subjectService = subjectService;
         this.fileService = fileService;
     }
 
     @GetMapping(value = "create")
     public ModelAndView courseCreatePage(ModelAndView modelAndView, HttpServletRequest request) {
+        modelAndView.addObject("subjectList", subjectService.findAll());
         modelAndView.setViewName("course-create");
         return modelAndView;
     }
@@ -44,6 +49,7 @@ public class CourseController {
     @PostMapping(value = "create")
     public ModelAndView courseCreate(
             @RequestParam("name") String name,
+            @RequestParam("subject") String subjectName,
             @RequestParam("introduction") String introduction,
             @RequestParam("remark") String remark,
             @RequestParam("cover") MultipartFile cover,
@@ -60,6 +66,8 @@ public class CourseController {
                 String videoFilenameStore = filenamePrefix + videoFilename.substring(videoFilename.lastIndexOf("."));
                 fileService.storeToFolder(cover, coverFilenameStore, StorageProperties.Folder.IMAGES);
                 fileService.storeToFolder(video, videoFilenameStore, StorageProperties.Folder.VIDEOS);
+                // 查询学科
+                Subject subject = subjectService.findOneByName(subjectName);
                 Course course = new Course();
                 course.setName(name);
                 course.setIntroduction(introduction);
@@ -67,6 +75,8 @@ public class CourseController {
                 course.setCover(Const.STORAGE_HOST + "images/" + coverFilenameStore);
                 course.setVideo(Const.STORAGE_HOST + "videos/" + videoFilenameStore);
                 course.setTeacherId(userId);
+                if (null != subject) course.setSubjectId(subject.getId());
+                else course.setSubjectId(0);
                 courseService.save(course);
             }
         }

+ 5 - 0
src/main/java/cn/minbb/edu/model/Course.java

@@ -49,6 +49,11 @@ public class Course implements Serializable {
     @Column(name = "remark", columnDefinition = "VARCHAR(255) COMMENT '备注'")
     private String remark;
 
+    @Getter
+    @Setter
+    @Column(name = "subject_id", nullable = false, columnDefinition = "INT COMMENT '关联学科'")
+    private Integer subjectId;
+
     @Getter
     @Setter
     @Column(name = "teacher_id", nullable = false, columnDefinition = "INT COMMENT '关联用户(教师)'")

+ 38 - 0
src/main/java/cn/minbb/edu/model/Stage.java

@@ -0,0 +1,38 @@
+package cn.minbb.edu.model;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "stage")
+@NoArgsConstructor
+public class Stage implements Serializable {
+
+    @Getter
+    @Setter
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false, columnDefinition = "INT COMMENT '学习阶段实体'")
+    private Integer id;
+
+    @Getter
+    @Setter
+    @Column(name = "name", nullable = false, columnDefinition = "VARCHAR(32) COMMENT '阶段名称'")
+    private String name;
+
+    @Getter
+    @Setter
+    @Column(name = "created_at", columnDefinition = "DATETIME COMMENT '创建时间'")
+    @CreationTimestamp
+    private Date createdAt;
+
+    public Stage(String name) {
+        this.name = name;
+    }
+}

+ 44 - 0
src/main/java/cn/minbb/edu/model/Subject.java

@@ -0,0 +1,44 @@
+package cn.minbb.edu.model;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Entity
+@Table(name = "subject")
+@NoArgsConstructor
+public class Subject implements Serializable {
+
+    @Getter
+    @Setter
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false, columnDefinition = "INT COMMENT '学科实体'")
+    private Integer id;
+
+    @Getter
+    @Setter
+    @Column(name = "name", nullable = false, columnDefinition = "VARCHAR(32) COMMENT '学科名称'")
+    private String name;
+
+    @Getter
+    @Setter
+    @Column(name = "created_at", columnDefinition = "DATETIME COMMENT '创建时间'")
+    @CreationTimestamp
+    private Date createdAt;
+
+    @Getter
+    @Setter
+    @Transient
+    private List<Course> courseList;
+
+    public Subject(String name) {
+        this.name = name;
+    }
+}

+ 14 - 0
src/main/java/cn/minbb/edu/model/User.java

@@ -91,6 +91,20 @@ public class User implements UserDetails {
     )
     private Set<UserRole> userRoleSet;
 
+    @Getter
+    @Setter
+    @ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
+    @JoinTable(name = "user_subject",
+            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
+            inverseJoinColumns = {@JoinColumn(name = "subject_id", referencedColumnName = "id")}
+    )
+    private List<Subject> userSubjectList;
+
+    @Getter
+    @Setter
+    @Column(name = "stage_id", columnDefinition = "INT COMMENT '关联学习阶段'")
+    private Integer stageId;
+
     @Getter
     @Setter
     @Column(name = "is_account_non_expired", nullable = false, columnDefinition = "TINYINT DEFAULT '1' COMMENT '帐户未过期'")

+ 7 - 0
src/main/java/cn/minbb/edu/model/repository/StageRepository.java

@@ -0,0 +1,7 @@
+package cn.minbb.edu.model.repository;
+
+import cn.minbb.edu.model.Stage;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface StageRepository extends JpaRepository<Stage, Integer> {
+}

+ 7 - 0
src/main/java/cn/minbb/edu/model/repository/SubjectRepository.java

@@ -0,0 +1,7 @@
+package cn.minbb.edu.model.repository;
+
+import cn.minbb.edu.model.Subject;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface SubjectRepository extends JpaRepository<Subject, Integer> {
+}

+ 2 - 0
src/main/java/cn/minbb/edu/service/CourseService.java

@@ -12,4 +12,6 @@ public interface CourseService {
     List<Course> findAll();
 
     List<Course> findAllByUserId(Integer userId);
+
+    List<Course> findAllBySubjectId(Integer subjectId);
 }

+ 15 - 0
src/main/java/cn/minbb/edu/service/StageService.java

@@ -0,0 +1,15 @@
+package cn.minbb.edu.service;
+
+import cn.minbb.edu.model.Stage;
+
+import java.util.List;
+
+public interface StageService {
+    Stage save(Stage stage);
+
+    Stage findOneById(Integer id);
+
+    Stage findOneByName(String name);
+
+    List<Stage> findAll();
+}

+ 15 - 0
src/main/java/cn/minbb/edu/service/SubjectService.java

@@ -0,0 +1,15 @@
+package cn.minbb.edu.service;
+
+import cn.minbb.edu.model.Subject;
+
+import java.util.List;
+
+public interface SubjectService {
+    Subject save(Subject subject);
+
+    Subject findOneById(Integer id);
+
+    Subject findOneByName(String name);
+
+    List<Subject> findAll();
+}

+ 7 - 0
src/main/java/cn/minbb/edu/service/impl/CourseServiceImpl.java

@@ -45,4 +45,11 @@ public class CourseServiceImpl implements CourseService {
         course.setTeacherId(userId);
         return courseRepository.findAll(Example.of(course), SortTools.createdAtDown());
     }
+
+    @Override
+    public List<Course> findAllBySubjectId(Integer subjectId) {
+        Course course = new Course(true);
+        course.setSubjectId(subjectId);
+        return courseRepository.findAll(Example.of(course), SortTools.createdAtDown());
+    }
 }

+ 44 - 0
src/main/java/cn/minbb/edu/service/impl/StageServiceImpl.java

@@ -0,0 +1,44 @@
+package cn.minbb.edu.service.impl;
+
+import cn.minbb.edu.model.Stage;
+import cn.minbb.edu.model.repository.StageRepository;
+import cn.minbb.edu.service.StageService;
+import cn.minbb.edu.util.SortTools;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class StageServiceImpl implements StageService {
+
+    private StageRepository stageRepository;
+
+    @Autowired
+    public StageServiceImpl(StageRepository stageRepository) {
+        this.stageRepository = stageRepository;
+    }
+
+    @Override
+    public Stage save(Stage stage) {
+        return stageRepository.save(stage);
+    }
+
+    @Override
+    public Stage findOneById(Integer id) {
+        Stage stage = new Stage();
+        stage.setId(id);
+        return stageRepository.findOne(Example.of(stage)).orElse(null);
+    }
+
+    @Override
+    public Stage findOneByName(String name) {
+        return stageRepository.findOne(Example.of(new Stage(name))).orElse(null);
+    }
+
+    @Override
+    public List<Stage> findAll() {
+        return stageRepository.findAll(SortTools.createdAtDown());
+    }
+}

+ 44 - 0
src/main/java/cn/minbb/edu/service/impl/SubjectServiceImpl.java

@@ -0,0 +1,44 @@
+package cn.minbb.edu.service.impl;
+
+import cn.minbb.edu.model.Subject;
+import cn.minbb.edu.model.repository.SubjectRepository;
+import cn.minbb.edu.service.SubjectService;
+import cn.minbb.edu.util.SortTools;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class SubjectServiceImpl implements SubjectService {
+
+    private SubjectRepository subjectRepository;
+
+    @Autowired
+    public SubjectServiceImpl(SubjectRepository subjectRepository) {
+        this.subjectRepository = subjectRepository;
+    }
+
+    @Override
+    public Subject save(Subject subject) {
+        return subjectRepository.save(subject);
+    }
+
+    @Override
+    public Subject findOneById(Integer id) {
+        Subject subject = new Subject();
+        subject.setId(id);
+        return subjectRepository.findOne(Example.of(subject)).orElse(null);
+    }
+
+    @Override
+    public Subject findOneByName(String name) {
+        return subjectRepository.findOne(Example.of(new Subject(name))).orElse(null);
+    }
+
+    @Override
+    public List<Subject> findAll() {
+        return subjectRepository.findAll(SortTools.createdAtDown());
+    }
+}

+ 4 - 1
src/main/java/cn/minbb/edu/task/InitDataRunner.java

@@ -4,6 +4,7 @@ import cn.minbb.edu.model.Banner;
 import cn.minbb.edu.model.UserRole;
 import cn.minbb.edu.service.BannerService;
 import cn.minbb.edu.service.CourseService;
+import cn.minbb.edu.service.SubjectService;
 import cn.minbb.edu.service.UserRoleService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -23,11 +24,13 @@ public class InitDataRunner implements ApplicationRunner {
     private UserRoleService userRoleService;
     private CourseService courseService;
     private BannerService bannerService;
+    private SubjectService subjectService;
 
-    public InitDataRunner(UserRoleService userRoleService, CourseService courseService, BannerService bannerService) {
+    public InitDataRunner(UserRoleService userRoleService, CourseService courseService, BannerService bannerService, SubjectService subjectService) {
         this.userRoleService = userRoleService;
         this.courseService = courseService;
         this.bannerService = bannerService;
+        this.subjectService = subjectService;
     }
 
     @Override

+ 3 - 3
src/main/resources/application-pro.properties

@@ -1,6 +1,6 @@
 # Éú²ú»·¾³
 server.servlet.context-path=/
 # MySQL
-spring.datasource.url=jdbc:mysql://www.minbb.cn:3306/edu?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
-spring.datasource.username=Yumin
-spring.datasource.password=Wang19970305
+spring.datasource.url=jdbc:mysql://cdb-cwewa25q.bj.tencentcdb.com:10139/edu?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
+spring.datasource.username=zzuli
+spring.datasource.password=zzuli123

+ 11 - 3
src/main/resources/templates/course-create.html

@@ -22,9 +22,17 @@
             <div class="col-md-12">
                 <h4 class="mb-3">课程信息</h4>
                 <form method="post" action="/course/create" enctype="multipart/form-data">
-                    <div class="mb-3">
-                        <label for="name">课程名称</label>
-                        <input class="form-control" id="name" name="name" type="text" placeholder="不超过六十个字" required autofocus/>
+                    <div class="row">
+                        <div class="col-sm-12 col-md-8 mb-3">
+                            <label for="name">课程名称</label>
+                            <input class="form-control" id="name" name="name" type="text" placeholder="不超过六十个字" required autofocus/>
+                        </div>
+                        <div class="col-sm-12 col-md-4 mb-3">
+                            <label for="subject">所属学科</label>
+                            <select class="form-control" id="subject" name="subject" required style="height: 33px;">
+                                <option th:each="subject : ${subjectList}" th:text="${subject.getName()}"></option>
+                            </select>
+                        </div>
                     </div>
                     <div class="mb-3">
                         <label for="introduction">课程介绍</label>