Browse Source

hyl添加了课件类、上传下载课件

chillqi 4 years ago
parent
commit
02326ee36a
15 changed files with 739 additions and 58 deletions
  1. 122 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/CourseWareVO.java
  2. 17 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UseMethod.java
  3. 25 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UseTime.java
  4. 33 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/CourseWareDTO.java
  5. 153 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseWare.java
  6. 12 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/mapper/CourseWareMapper.java
  7. 26 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseWareRepository.java
  8. 35 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseWareService.java
  9. 13 8
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseServiceImpl.java
  10. 152 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseWareServiceImpl.java
  11. 1 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/MessageServiceImpl.java
  12. 49 49
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/subsystem/HelperService.java
  13. 77 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseWareController.java
  14. 1 1
      seecoder-portal-server/src/main/resources/application-dev.yml
  15. 23 0
      seecoder-portal-server/src/main/resources/portal.sql

+ 122 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/CourseWareVO.java

@@ -0,0 +1,122 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+import java.time.OffsetDateTime;
+
+public class CourseWareVO {
+    private Long id;
+
+    private String name;
+
+    private Double size;
+
+    private Long senderId;
+
+    private Long courseId;
+
+    private OffsetDateTime createdTime;
+
+    private UseTime useTime;
+
+    private UseMethod useMethod;
+
+    private String fileUrl;
+
+    private ObjectState state;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Double getSize() {
+        return size;
+    }
+
+    public void setSize(Double size) {
+        this.size = size;
+    }
+
+    public Long getSenderId() {
+        return senderId;
+    }
+
+    public void setSenderId(Long senderId) {
+        this.senderId = senderId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public OffsetDateTime getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(OffsetDateTime createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public UseTime getUseTime() {
+        return useTime;
+    }
+
+    public void setUseTime(UseTime useTime) {
+        this.useTime = useTime;
+    }
+
+    public UseMethod getUseMethod() {
+        return useMethod;
+    }
+
+    public void setUseMethod(UseMethod useMethod) {
+        this.useMethod = useMethod;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public ObjectState getState() {
+        return state;
+    }
+
+    public void setState(ObjectState state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CourseWareVO{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", size=" + size +
+                ", senderId=" + senderId +
+                ", courseId='" + courseId +
+                ", createdTime=" + createdTime +
+                ", useTime=" + useTime +
+                ", useMethod=" + useMethod +
+                ", fileUrl=" + fileUrl +
+                ", state=" + state +
+                '}';
+    }
+
+}

+ 17 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UseMethod.java

@@ -0,0 +1,17 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+public enum UseMethod {
+    // 浏览
+    SCAN("SCAN"),
+
+    // 附件
+    ATTACHMENT("ATTACHMENT");
+
+    private final String useMethod;
+
+    UseMethod(String useMethod) {this.useMethod = useMethod;}
+
+    public String getUseMethod() {
+        return useMethod;
+    }
+}

+ 25 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UseTime.java

@@ -0,0 +1,25 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+public enum UseTime {
+    // 课前
+    BEFORE_CLASS("BEFORE_CLASS"),
+
+    // 课中
+    IN_CLASS("IN_CLASS"),
+
+    // 课后
+    AFTER_CLASS("AFTER_CLASS"),
+
+    // 期末
+    FINISH_CLASS("FINISH_CLASS");
+
+    private final String useTime;
+
+    UseTime(String useTime) {
+        this.useTime = useTime;
+    }
+
+    public String getUseTime() {
+        return useTime;
+    }
+}

+ 33 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/CourseWareDTO.java

@@ -0,0 +1,33 @@
+package cn.seecoder.seecoderportalcommon.vo.dto;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseWareVO;
+
+import java.util.List;
+
+public class CourseWareDTO {
+    private CourseWareVO courseWareVO;
+
+//    private List<CourseWareVO> courseWares;
+
+    public CourseWareVO getCourseWareVO() {
+        return courseWareVO;
+    }
+
+    public void setCourseWareVO(CourseWareVO courseWareVO) {
+        this.courseWareVO = courseWareVO;
+    }
+
+//    public List<CourseWareVO> getCourseWares() {
+//        return courseWares;
+//    }
+//
+//    public void setCourseWares(List<CourseWareVO> courseWares) {
+//        this.courseWares = courseWares;
+//    }
+
+    public CourseWareDTO(CourseWareVO courseWareVO) {this.courseWareVO = courseWareVO;}
+
+//    public void addCourseWare(CourseWareVO courseWareVO){
+//        this.courseWares.add(courseWareVO);
+//    }
+}

+ 153 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseWare.java

@@ -0,0 +1,153 @@
+package cn.seecoder.seecoderportalserver.domain;
+
+import cn.seecoder.seecoderportalcommon.vo.ObjectState;
+import cn.seecoder.seecoderportalcommon.vo.UseMethod;
+import cn.seecoder.seecoderportalcommon.vo.UseTime;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.time.OffsetDateTime;
+
+@Entity
+@Table(name = "courseWare")
+public class CourseWare {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @Column
+    @NotNull
+    private String name;
+
+    @Column
+    @NotNull
+    private Double size;
+
+    @Column
+    @NotNull
+    private Long senderId;
+
+    @Column
+    @NotNull
+    private Long courseId;
+
+    @Column
+    @NotNull
+    private OffsetDateTime createdTime;
+
+    @Column
+    @NotNull
+    @Enumerated(EnumType.STRING)
+    private UseTime useTime;
+
+    @Column
+    @NotNull
+    @Enumerated(EnumType.STRING)
+    private UseMethod useMethod;
+
+    @Column
+    @NotNull
+    private String fileUrl;
+
+    @Column
+    @Enumerated(EnumType.STRING)
+    @NotNull
+    private ObjectState state;
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Double getSize() {
+        return size;
+    }
+
+    public void setSize(Double size) {
+        this.size = size;
+    }
+
+    public Long getSenderId() {
+        return senderId;
+    }
+
+    public void setSenderId(Long senderId) {
+        this.senderId = senderId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public OffsetDateTime getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(OffsetDateTime createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public UseTime getUseTime() {
+        return useTime;
+    }
+
+    public void setUseTime(UseTime useTime) {
+        this.useTime = useTime;
+    }
+
+    public UseMethod getUseMethod() {
+        return useMethod;
+    }
+
+    public void setUseMethod(UseMethod useMethod) {
+        this.useMethod = useMethod;
+    }
+
+    public ObjectState getState() {
+        return state;
+    }
+
+    public void setState(ObjectState state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CourseWare{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", size=" + size +
+                ", senderId=" + senderId +
+                ", courseId='" + courseId +
+                ", createdTime=" + createdTime +
+                ", useTime=" + useTime +
+                ", useMethod=" + useMethod +
+                ", fileUrl=" + fileUrl +
+                ", state=" + state +
+                '}';
+    }
+
+}

+ 12 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/mapper/CourseWareMapper.java

@@ -0,0 +1,12 @@
+package cn.seecoder.seecoderportalserver.mapper;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseWareVO;
+import cn.seecoder.seecoderportalserver.domain.CourseWare;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface CourseWareMapper {
+    CourseWare toCourseWare(CourseWareVO courseWareVO);
+
+    CourseWareVO toCourseWareVO(CourseWare courseWare);
+}

+ 26 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseWareRepository.java

@@ -0,0 +1,26 @@
+package cn.seecoder.seecoderportalserver.repository;
+
+import cn.seecoder.seecoderportalcommon.vo.ObjectState;
+import cn.seecoder.seecoderportalserver.domain.Course;
+import cn.seecoder.seecoderportalserver.domain.CourseWare;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface CourseWareRepository extends JpaRepository<CourseWare, Long> {
+    //@Select("select * from ${name}")
+    List<CourseWare> findCourseWaresByCourseIdAndStateNot(Long courseId, ObjectState state);
+
+    //@Select("select * from ${name} where id=${id}")
+    CourseWare findCourseWareById(Long id);
+
+    Optional<Course> findCourseByName(String name);
+
+    CourseWare findCourseWareByName(String name);
+
+    CourseWare findCourseWareByCourseIdAndName(Long courseId, String name);
+}

+ 35 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseWareService.java

@@ -0,0 +1,35 @@
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseWareVO;
+import cn.seecoder.seecoderportalcommon.vo.dto.CourseWareDTO;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+public interface CourseWareService {
+
+    CourseWareVO createCourseWare(CourseWareVO courseWareVO);
+
+    String uploadCourseWareFile(String name, MultipartFile file);
+
+    Boolean checkCourseWareNameUnique(Long courseId, String name);
+
+    String deleteCourseWare(Long id);
+
+    List<CourseWareDTO> getCourseWaresByCourseId(Long courseId);
+
+    CourseWareVO getCourseWareById(Long id);
+
+    String downloadCourseWare(HttpServletRequest req, HttpServletResponse res, Long id) throws IOException;
+
+    String getSlideUrl(Long slideId);
+
+    CourseWareVO getOneSlide(Long slideId);
+
+}

+ 13 - 8
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseServiceImpl.java

@@ -15,7 +15,7 @@ import cn.seecoder.seecoderportalserver.service.CourseService;
 import cn.seecoder.seecoderportalserver.service.UserService;
 import cn.seecoder.seecoderportalserver.serviceImpl.subsystem.CoderService;
 import cn.seecoder.seecoderportalserver.serviceImpl.subsystem.EvalService;
-import cn.seecoder.seecoderportalserver.serviceImpl.subsystem.HelperService;
+//import cn.seecoder.seecoderportalserver.serviceImpl.subsystem.HelperService;
 import cn.seecoder.seecoderportalserver.utility.OssUtil;
 import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
 import com.alibaba.fastjson.JSONObject;
@@ -33,23 +33,25 @@ public class CourseServiceImpl implements CourseService {
     private final CourseSelectionRepository courseSelectionRepository;
     private final UserService userService;
     private final CoderService coderService;
-    private final HelperService helperService;
+    //private final HelperService helperService;
     private final EvalService evalService;
     private final OssUtil ossUtil;
 
-    public CourseServiceImpl(CourseRepository courseRepository, CourseMapper courseMapper, CourseSelectionRepository courseSelectionRepository, CoderService coderService, HelperService helperService, EvalService evalService, UserService userService, OssUtil ossUtil) {
+    public CourseServiceImpl(CourseRepository courseRepository, CourseMapper courseMapper, CourseSelectionRepository courseSelectionRepository, CoderService coderService, /*HelperService helperService,*/ EvalService evalService, UserService userService, OssUtil ossUtil) {
         this.courseRepository = courseRepository;
         this.courseMapper = courseMapper;
         this.courseSelectionRepository = courseSelectionRepository;
         this.userService = userService;
         this.coderService = coderService;
-        this.helperService = helperService;
+        //this.helperService = helperService;
         this.evalService = evalService;
         this.ossUtil = ossUtil;
     }
 
     @Override
     public CourseVO createCourse(CourseVO courseVO, Long userId) {
+        System.out.println(courseVO);
+
         // 确认授课教师
         UserVO teacher = userService.findUserById(userId);
         if (!courseVO.getTeacher().getId().equals(userId) || !userService.isTeacher(teacher.getRole())) {
@@ -85,6 +87,9 @@ public class CourseServiceImpl implements CourseService {
         Course course = courseMapper.courseVOToCourse(courseVO);
         course.setState(ObjectState.NORMAL);
         Course result = courseRepository.save(course);
+        System.out.println(5);
+        System.out.println(course);
+        System.out.println(result);
         return courseMapper.courseToCourseVO(result);
     }
 
@@ -191,10 +196,10 @@ public class CourseServiceImpl implements CourseService {
         if (course.getEvalId() != null) {
             JSONObject evalRes = evalService.chooseCourse(course.getInvitationCode());
         }
-        // 门户系统选课
-        if (course.getHelperId() != null) {
-            JSONObject jsonObject = helperService.chooseCourse(course.getInvitationCode());
-        }
+//        // 门户系统选课
+//        if (course.getHelperId() != null) {
+//            JSONObject jsonObject = helperService.chooseCourse(course.getInvitationCode());
+//        }
         CourseSelection courseSelection = new CourseSelection(courseSelectionKey);
         courseSelection.setState(true);
         courseSelectionRepository.save(courseSelection);

+ 152 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseWareServiceImpl.java

@@ -0,0 +1,152 @@
+package cn.seecoder.seecoderportalserver.serviceImpl;
+
+import cn.seecoder.seecoderportalcommon.vo.*;
+import cn.seecoder.seecoderportalcommon.vo.dto.CourseWareDTO;
+import cn.seecoder.seecoderportalserver.domain.CourseWare;
+import cn.seecoder.seecoderportalserver.mapper.CourseWareMapper;
+import cn.seecoder.seecoderportalserver.repository.CourseWareRepository;
+import cn.seecoder.seecoderportalserver.service.CourseWareService;
+import cn.seecoder.seecoderportalserver.utility.OssUtil;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@Service
+public class CourseWareServiceImpl implements CourseWareService {
+    private final CourseWareRepository courseWareRepository;
+    private final CourseWareMapper courseWareMapper;
+    private final OssUtil ossUtil;
+
+    public CourseWareServiceImpl(CourseWareRepository courseWareRepository, CourseWareMapper courseWareMapper, OssUtil ossUtil) {
+        this.courseWareRepository = courseWareRepository;
+        this.courseWareMapper = courseWareMapper;
+        this.ossUtil = ossUtil;
+    }
+
+    @Override
+    public CourseWareVO createCourseWare(CourseWareVO courseWareVO) {
+        System.out.println("create");
+        CourseWare courseWare = courseWareMapper.toCourseWare(courseWareVO);
+        courseWare.setState(ObjectState.NORMAL);
+        CourseWare result = courseWareRepository.save(courseWare);
+        System.out.println(result);
+        return courseWareMapper.toCourseWareVO(result);
+    }
+
+    @Override
+    public Boolean checkCourseWareNameUnique(Long courseId, String name) {
+        System.out.println("checkname");
+        List<CourseWare> courseWares = courseWareRepository.findCourseWaresByCourseIdAndStateNot(courseId, ObjectState.DELETED);
+        for (CourseWare courseWare: courseWares) {
+            if (courseWare.getName().equals(name)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public String deleteCourseWare(Long id) {
+        System.out.println("delete");
+        CourseWare courseWare = courseWareRepository.findCourseWareById(id);
+        courseWare.setState(ObjectState.DELETED);
+        courseWareRepository.save(courseWare);
+        return "delete success";
+    }
+
+    @Override
+    public List<CourseWareDTO> getCourseWaresByCourseId(Long courseId) {
+        System.out.println("get");
+        List<CourseWareDTO> result = courseWareRepository.findCourseWaresByCourseIdAndStateNot(courseId, ObjectState.DELETED).stream()
+                .map(courseWare -> new CourseWareDTO(courseWareMapper.toCourseWareVO(courseWare)))
+                .collect(Collectors.toList());
+        return result;
+    }
+
+    @Override
+    public CourseWareVO getCourseWareById(Long id) {
+        CourseWare courseWare = courseWareRepository.findCourseWareById(id);
+        return courseWareMapper.toCourseWareVO(courseWare);
+    }
+
+    @Override
+    public String uploadCourseWareFile(String name, MultipartFile file) {
+        try {
+            System.out.println("upload");
+            String courseWareUrl = ossUtil.upload(name, file.getInputStream());
+            System.out.println(courseWareUrl);
+            return courseWareUrl;
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public String downloadCourseWare(HttpServletRequest req, HttpServletResponse res, Long id) throws IOException {
+        System.out.println("download");
+        CourseWare courseWare = courseWareRepository.findCourseWareById(id);
+        String fileName = courseWare.getName();
+        String filePath = courseWare.getFileUrl();
+
+        OutputStream os = null;
+        InputStream is = null;
+        try{
+            res.reset();
+            res.setCharacterEncoding("utf-8");
+            res.setContentType("application/octet-stream");
+            res.setHeader("Content-Disposition", "attachment;" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
+            File f = new File(filePath);
+            is = new FileInputStream(f);
+            ServletOutputStream sout = res.getOutputStream();
+            BufferedInputStream bis = null;
+            BufferedOutputStream bos = null;
+            bis = new BufferedInputStream(is);
+            bos = new BufferedOutputStream(sout);
+            byte[] buff = new byte[2048];
+            int bytesRead;
+            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
+                bos.write(buff, 0, bytesRead);
+            }
+            bos.flush();
+            bos.close();
+            bis.close();
+            is.close();
+            os.close();
+        }catch (Exception e){
+
+        }
+
+        return fileName;
+    }
+
+    @Override
+    public String getSlideUrl(Long slideId) {
+        System.out.println("geturl");
+        CourseWare courseWare = courseWareRepository.findCourseWareById(slideId);
+        return courseWare.getFileUrl();
+    }
+
+    @Override
+    public CourseWareVO getOneSlide(Long slideId) {
+        System.out.println("getinfo");
+        CourseWare courseWare = courseWareRepository.findCourseWareById(slideId);
+        return courseWareMapper.toCourseWareVO(courseWare);
+    }
+
+}

+ 1 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/MessageServiceImpl.java

@@ -170,6 +170,7 @@ public class MessageServiceImpl implements MessageService {
                 .stream()
                 .map(message -> new CourseMessageDTO(messageMapper.toMessageVO(message)))
                 .collect(Collectors.toList());
+        System.out.println(2);
         for (CourseMessageDTO courseMessageDTO : result) {
             for (MessageVO messageVO : messageRepository
                     .findMessagesByMntIdAndActionTypeIsAndTargetTypeIsAndStateNot(

+ 49 - 49
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/subsystem/HelperService.java

@@ -1,49 +1,49 @@
-package cn.seecoder.seecoderportalserver.serviceImpl.subsystem;
-
-import cn.seecoder.seecoderportalcommon.vo.CourseVO;
-import cn.seecoder.seecoderportalserver.service.subsystem.SubsystemService;
-import com.alibaba.fastjson.JSONObject;
-import org.springframework.stereotype.Service;
-
-@Service
-public class HelperService implements SubsystemService {
-    @Override
-    public JSONObject createCourse(CourseVO courseVO) {
-        return null;
-    }
-
-    @Override
-    public void deleteCourse(CourseVO courseVO) {
-    }
-
-    @Override
-    public JSONObject chooseCourse(String code) {
-        return null;
-    }
-
-    @Override
-    public JSONObject findRecommendExamsByCourseId(int courseId) {
-        return null;
-    }
-
-    @Override
-    public JSONObject findTeacherExamsByCourseId(int courseId) {
-        return null;
-    }
-
-    @Override
-    public JSONObject findStudentExamsByCourseId(int courseId) {
-        return null;
-    }
-
-    @Override
-    public JSONObject findTeacherExams(int page, int limit, int state) {
-        return null;
-    }
-
-    @Override
-    public JSONObject findStudentExams(int page, int limit, int state) {
-        return null;
-    }
-
-}
+//package cn.seecoder.seecoderportalserver.serviceImpl.subsystem;
+//
+//import cn.seecoder.seecoderportalcommon.vo.CourseVO;
+//import cn.seecoder.seecoderportalserver.service.subsystem.SubsystemService;
+//import com.alibaba.fastjson.JSONObject;
+//import org.springframework.stereotype.Service;
+//
+//@Service
+//public class HelperService implements SubsystemService {
+//    @Override
+//    public JSONObject createCourse(CourseVO courseVO) {
+//        return null;
+//    }
+//
+//    @Override
+//    public void deleteCourse(CourseVO courseVO) {
+//    }
+//
+//    @Override
+//    public JSONObject chooseCourse(String code) {
+//        return null;
+//    }
+//
+//    @Override
+//    public JSONObject findRecommendExamsByCourseId(int courseId) {
+//        return null;
+//    }
+//
+//    @Override
+//    public JSONObject findTeacherExamsByCourseId(int courseId) {
+//        return null;
+//    }
+//
+//    @Override
+//    public JSONObject findStudentExamsByCourseId(int courseId) {
+//        return null;
+//    }
+//
+//    @Override
+//    public JSONObject findTeacherExams(int page, int limit, int state) {
+//        return null;
+//    }
+//
+//    @Override
+//    public JSONObject findStudentExams(int page, int limit, int state) {
+//        return null;
+//    }
+//
+//}

+ 77 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseWareController.java

@@ -0,0 +1,77 @@
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseWareVO;
+import cn.seecoder.seecoderportalcommon.vo.dto.CourseWareDTO;
+import cn.seecoder.seecoderportalserver.domain.CourseWare;
+import cn.seecoder.seecoderportalserver.service.CourseWareService;
+import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/courseWare")
+public class CourseWareController {
+    private final CourseWareService courseWareService;
+
+    public CourseWareController(CourseWareService courseWareService) {
+        this.courseWareService = courseWareService;
+    }
+
+    @PostMapping("/create")
+    public OkResponse<CourseWareVO> createCourseWare(@RequestBody CourseWareVO courseWareVO) {
+        return OkResponse.of(courseWareService.createCourseWare(courseWareVO));
+    }
+
+    @PostMapping("/uploadCourseWareFile")
+    public OkResponse<String> uploadCourseWareFile(
+            @RequestPart("name") String name,
+            @RequestPart("file") MultipartFile file) {
+        return OkResponse.of(courseWareService.uploadCourseWareFile(name, file));
+    }
+
+    @GetMapping("/checkName")
+    public OkResponse<Boolean> checkCourseWareNameUnique(@RequestParam Long courseId, @RequestParam String name) {
+        return OkResponse.of(courseWareService.checkCourseWareNameUnique(courseId, name));
+    }
+
+    @DeleteMapping("/delete")
+    public OkResponse<String> deleteCourseWare(@RequestParam Long id) {
+        return OkResponse.of(courseWareService.deleteCourseWare(id));
+    }
+
+    @GetMapping("/getCourseWaresByCourseId")
+    public OkResponse<List<CourseWareDTO>> getCourseWaresByCourseId(@RequestParam Long courseId) {
+        return OkResponse.of(courseWareService.getCourseWaresByCourseId(courseId));
+    }
+
+    @GetMapping("/getById")
+    public OkResponse<CourseWareVO> getCourseWareById(@RequestParam Long id) {
+        return OkResponse.of(courseWareService.getCourseWareById(id));
+    }
+
+    @GetMapping("/download")
+    public OkResponse<String> downloadCourseWare(HttpServletRequest req, HttpServletResponse res, @RequestParam Long id) throws IOException {
+        return OkResponse.of(courseWareService.downloadCourseWare(req, res, id));
+    }
+
+    @GetMapping("/{slideId}/url")
+    public OkResponse<String> getSlideUrl(@PathVariable Long slideId) {
+        return OkResponse.of(courseWareService.getSlideUrl(slideId));
+    }
+
+    @GetMapping("/{slideId}")
+    public OkResponse<CourseWareVO> getOneSlide(@PathVariable Long slideId) {
+        return OkResponse.of(courseWareService.getOneSlide(slideId));
+    }
+
+
+
+
+}

+ 1 - 1
seecoder-portal-server/src/main/resources/application-dev.yml

@@ -9,7 +9,7 @@ spring:
   datasource:
     url: jdbc:postgresql://localhost:5432/portal
     username: postgres
-    password: 123456
+    password: postgres
 #    username: postgres
 #    password: postgres
 

+ 23 - 0
seecoder-portal-server/src/main/resources/portal.sql

@@ -231,6 +231,27 @@ CREATE TABLE IF NOT EXISTS public.user_generation (
 
 ALTER TABLE public.user_generation OWNER TO postgres;
 
+--
+-- Name: course_ware; Type: TABLE; Schema: public; Owner: postgres
+--
+
+DROP TABLE IF EXISTS public.course_ware;
+
+CREATE TABLE IF NOT EXISTS public.course_ware (
+    id bigint NOT NULL,
+    name character varying(255) NOT NULL,
+    size bigint NOT NULL,
+    sender_id bigint NOT NULL,
+    course_id bigint NOT NULL,
+    created_time timestamp without time zone NOT NULL,
+    use_time character varying(255) NOT NULL,
+    use_method character varying(255) NOT NULL,
+    file_url character varying(255) NOT NULL
+);
+
+
+ALTER TABLE public.course_ware OWNER TO postgres;
+
 --
 -- Name: announcement announcement_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
 --
@@ -513,3 +534,5 @@ ALTER TABLE ONLY public.message_record
 -- PostgreSQL database dump complete
 --
 
+INSERT INTO portal_user VALUES
+(3117,2022-02-21,m15256072859@163.com,t,PortalTestTeacher,$2a$10$amVAS6u4BMkGdG6C.LvcCeXnshyOHi1P6AkRCMOmNhCidsVRFclb.,13382405535,null,TEACHER,null,PortalTestTeacher);