menduo 5 years ago
parent
commit
4843f6451c
25 changed files with 311 additions and 13 deletions
  1. 12 0
      mooctest-site-server/pom.xml
  2. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/EntityTypeEnum.java
  3. 12 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java
  4. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeDetailDao.java
  5. 32 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CourseResource.java
  6. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Theme.java
  7. 7 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ThemeDetail.java
  8. 6 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CourseResourceService.java
  9. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ThemeService.java
  10. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/PdfService.java
  11. 38 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImpl.java
  12. 16 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CourseResourceServiceImpl.java
  13. 5 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ThemeServiceImpl.java
  14. 23 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ThemeController.java
  15. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/CourseResourceVO.java
  16. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ThemeDetailVO.java
  17. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ThemeVO.java
  18. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/response/ServerCode.java
  19. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/CourseResourceVOWrapper.java
  20. 23 5
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ThemeVOWrapper.java
  21. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ThemeLogic.java
  22. 46 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ThemeLogicImpl.java
  23. 17 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImplTest.java
  24. 33 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/data/ThemeVOTest.java
  25. BIN
      mooctest-site-server/src/test/resources/57_9_网易中台的博弈与演进v3.pdf

+ 12 - 0
mooctest-site-server/pom.xml

@@ -363,6 +363,18 @@
             <artifactId>itextpdf</artifactId>
             <artifactId>itextpdf</artifactId>
             <version>5.5.10</version>
             <version>5.5.10</version>
         </dependency>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox -->
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>fontbox</artifactId>
+            <version>2.0.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.9</version>
+        </dependency>
+
         <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
         <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
         <dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <groupId>org.apache.commons</groupId>

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/EntityTypeEnum.java

@@ -15,7 +15,8 @@ public enum EntityTypeEnum {
   PAPER("paper"),
   PAPER("paper"),
   EXAM("exam"),
   EXAM("exam"),
   PAPER_PYTHON("paper_python"),
   PAPER_PYTHON("paper_python"),
-  THEME("theme");
+  THEME("theme"),
+  COURSE_RESOURCE("course_resource");
 
 
   private String name;
   private String name;
 
 

+ 12 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java

@@ -58,5 +58,17 @@ public class ExecutorConfig {
     return executor;
     return executor;
   }
   }
 
 
+  @Bean
+  public Executor generateUpload2Oss(){
+    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+    executor.setCorePoolSize(4);
+    executor.setMaxPoolSize(4);
+    executor.setQueueCapacity(2000);
+    executor.setThreadNamePrefix("Upload2Oss-");
+    executor.initialize();
+    log.info("executor is : {}",executor);
+    return executor;
+  }
+
 
 
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ThemeDetailDao.java

@@ -20,5 +20,6 @@ import java.util.List;
 public interface ThemeDetailDao extends PagingAndSortingRepository<ThemeDetail,Long>, UpdateAdapter<ThemeDetail, Long> {
 public interface ThemeDetailDao extends PagingAndSortingRepository<ThemeDetail,Long>, UpdateAdapter<ThemeDetail, Long> {
     Page<ThemeDetail> findAllBy(Pageable pageable);
     Page<ThemeDetail> findAllBy(Pageable pageable);
     List<ThemeDetail> findAll();
     List<ThemeDetail> findAll();
+    Page<ThemeDetail> findAllByTypeAndAndPublicStatus(Pageable pageable,int type, int publicStatus);
 
 
 }
 }

+ 32 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CourseResource.java

@@ -1,10 +1,42 @@
 package cn.iselab.mooctest.site.models;
 package cn.iselab.mooctest.site.models;
 
 
+import lombok.Data;
+
+import javax.persistence.*;
+
 /**
 /**
  * @program: mooctest-site
  * @program: mooctest-site
  * @mail: menduo96@gmail.com
  * @mail: menduo96@gmail.com
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
+@Entity
+@Table(name = "course_resource")
+@Data
 public class CourseResource {
 public class CourseResource {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "title")
+    private String title;
+
+    @Column(name = "slider")
+    private String slider;
+
+    @Column(name = "video")
+    private String video;
+
+    @Column(name = "extra_file")
+    private String extraFile;
+
+    @Column(name = "slider_images_path")
+    private String sliderImagesPath;
+
+    @Column(name = "slider_images_count")
+    private int sliderImagesCount;
+
+
+
+
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Theme.java

@@ -19,4 +19,5 @@ public class Theme {
     private List<CaseExtends> caseExtendsList;
     private List<CaseExtends> caseExtendsList;
     private List<Exam> examList;
     private List<Exam> examList;
     private List<Paper> paperList;
     private List<Paper> paperList;
+    private List<CourseResource> courseResourceList;
 }
 }

+ 7 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ThemeDetail.java

@@ -26,4 +26,11 @@ public class ThemeDetail {
 
 
     @Column(name = "introduce")
     @Column(name = "introduce")
     private String introduce;
     private String introduce;
+
+    @Column(name = "public")
+    private int publicStatus;
+
+    @Column(name = "type")
+    private int type;
+
 }
 }

+ 6 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CourseResourceService.java

@@ -1,5 +1,9 @@
 package cn.iselab.mooctest.site.service;
 package cn.iselab.mooctest.site.service;
 
 
+import cn.iselab.mooctest.site.models.CourseResource;
+
+import java.util.List;
+
 /**
 /**
  * @program: mooctest-site
  * @program: mooctest-site
  * @mail: menduo96@gmail.com
  * @mail: menduo96@gmail.com
@@ -7,4 +11,6 @@ package cn.iselab.mooctest.site.service;
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
 public interface CourseResourceService {
 public interface CourseResourceService {
+
+    List<CourseResource> getCourseResourceById(List<Long> courseId);
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ThemeService.java

@@ -20,6 +20,7 @@ public interface ThemeService {
     void deleteThemeDetailById(long id);
     void deleteThemeDetailById(long id);
     ThemeDetail getThemeDetailById(long id);
     ThemeDetail getThemeDetailById(long id);
     Page<ThemeDetail> getThemeDetails(Pageable pageable);
     Page<ThemeDetail> getThemeDetails(Pageable pageable);
+    Page<ThemeDetail> getThemeDetails(Pageable pageable, int type, int publicStatus);
     Iterable<ThemeDetail> getThemeDetails();
     Iterable<ThemeDetail> getThemeDetails();
     List<ThemeDetail> getThemeDetailList();
     List<ThemeDetail> getThemeDetailList();
     List<ThemeEntityRelations> getThemeEntityRelations(long themeId);
     List<ThemeEntityRelations> getThemeEntityRelations(long themeId);

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/PdfService.java

@@ -27,4 +27,6 @@ public interface PdfService {
     ExamPDF getExamPDF(Long examId, Long groupId, Long userId);
     ExamPDF getExamPDF(Long examId, Long groupId, Long userId);
 
 
     void generateExamPDF(ExamPDF examPDF, String fileName, Long examId, Long groupId) throws Exception;
     void generateExamPDF(ExamPDF examPDF, String fileName, Long examId, Long groupId) throws Exception;
+
+    String pdf2imageList(String pdfUrl, String type);
 }
 }

+ 38 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImpl.java

@@ -23,18 +23,23 @@ import com.itextpdf.text.pdf.*;
 import net.lingala.zip4j.core.ZipFile;
 import net.lingala.zip4j.core.ZipFile;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.FilenameUtils;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.rendering.PDFRenderer;
 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.json.JSONObject;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
 import java.io.*;
 import java.io.*;
 import java.text.DecimalFormat;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
+import java.util.UUID;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -606,7 +611,39 @@ public class PdfServiceImpl extends BaseService implements PdfService {
         mergePDFS(files, SAVE_PATH + PDF_PATH + "/" + fileName + ".pdf");
         mergePDFS(files, SAVE_PATH + PDF_PATH + "/" + fileName + ".pdf");
     }
     }
 
 
-    private void generateCase(CasePDF casePDF,Document document) throws Exception{
+    /**
+     *
+     * @param pdfUrl pdf路径
+     * @param type 图片保存格式 png/jpg ...
+     * @return
+     */
+    @Override
+    public String pdf2imageList(String pdfUrl, String type) {
+        // 将pdf装图片 并且自定义图片得格式大小
+        File file = new File(pdfUrl);
+        String tmpPath = System.getProperty("java.io.tmpdir")+File.separator;
+        String parentPath = "mooctest." + UUID.randomUUID().toString().replaceAll("-","");
+        String imagesParentPath = tmpPath + parentPath + File.separator;
+        File dir = new File(imagesParentPath);
+        if(!dir.exists()) {
+            dir.mkdirs();
+        }
+        try {
+            PDDocument doc = PDDocument.load(file);
+            PDFRenderer renderer = new PDFRenderer(doc);
+            int pageCount = doc.getNumberOfPages();
+            for (int i = 0; i < pageCount; i++) {
+                BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
+                // BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
+                ImageIO.write(image, type, new File(imagesParentPath + (i+1) +"."+type));
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+       return imagesParentPath;
+    }
+
+    private void generateCase(CasePDF casePDF, Document document) throws Exception{
         ReportForMongoDTO report = casePDF.getReport();
         ReportForMongoDTO report = casePDF.getReport();
         //如果case的answerWay为report,则将测试用例和缺陷报告写入pdf中
         //如果case的answerWay为report,则将测试用例和缺陷报告写入pdf中
         if (report != null) {
         if (report != null) {

+ 16 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CourseResourceServiceImpl.java

@@ -1,10 +1,25 @@
 package cn.iselab.mooctest.site.service.impl;
 package cn.iselab.mooctest.site.service.impl;
 
 
+import cn.iselab.mooctest.site.dao.CourseResourceDao;
+import cn.iselab.mooctest.site.models.CourseResource;
+import cn.iselab.mooctest.site.service.CourseResourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
 /**
 /**
  * @program: mooctest-site
  * @program: mooctest-site
  * @mail: menduo96@gmail.com
  * @mail: menduo96@gmail.com
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
-public class CourseResourceServiceImpl {
+@Service
+public class CourseResourceServiceImpl implements CourseResourceService {
+    @Autowired
+    private CourseResourceDao courseResourceDao;
+    @Override
+    public List<CourseResource> getCourseResourceById(List<Long> courseIds) {
+        return courseResourceDao.findAllByIdIn(courseIds);
+    }
 }
 }

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ThemeServiceImpl.java

@@ -57,6 +57,11 @@ public class ThemeServiceImpl implements ThemeService {
     }
     }
 
 
     @Override
     @Override
+    public Page<ThemeDetail> getThemeDetails(Pageable pageable, int type, int publicStatus) {
+        return themeDetailDao.findAllByTypeAndAndPublicStatus(pageable, type, publicStatus);
+    }
+
+    @Override
     public Iterable<ThemeDetail> getThemeDetails() {
     public Iterable<ThemeDetail> getThemeDetails() {
         return themeDetailDao.findAll();
         return themeDetailDao.findAll();
     }
     }

+ 23 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ThemeController.java

@@ -2,6 +2,7 @@ package cn.iselab.mooctest.site.web.ctrl;
 
 
 import cn.iselab.mooctest.site.common.constant.Constants;
 import cn.iselab.mooctest.site.common.constant.Constants;
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.models.ThemeDetail;
 import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.data.response.ResponseVO;
 import cn.iselab.mooctest.site.web.data.response.ResponseVO;
 import cn.iselab.mooctest.site.web.data.response.ServerCode;
 import cn.iselab.mooctest.site.web.data.response.ServerCode;
@@ -17,6 +18,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import javax.xml.ws.Response;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -138,8 +140,28 @@ public class ThemeController extends BaseSearchController {
     public ResponseVO buyTheme(@PathVariable("themeId")long themeId) {
     public ResponseVO buyTheme(@PathVariable("themeId")long themeId) {
         Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
         Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
         themeLogic.buyTheme(userId,themeId);
         themeLogic.buyTheme(userId,themeId);
-        return new ResponseVO(ServerCode.SUCCESS);
+        return new ResponseVO<>(ServerCode.SUCCESS);
     }
     }
 
 
+    @GetMapping(value = UrlConstants.API + "courses")
+    public ResponseVO<Page<ThemeDetailVO>> courses(@RequestParam(name = "searchCondition") String searchCondition) {
+        Gson gson = new Gson();
+        SearchConditionVO searchConditionVO = gson.fromJson(searchCondition, SearchConditionVO.class);
+        Pageable pageable = this.getPageable(searchConditionVO);
+        Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
+        log.info("userId: {}获取课程列表,参数:{}",userId,searchConditionVO.toString());
+        Page<ThemeDetailVO> themeDetailVOS = themeLogic.getThemeList(pageable,0,0);
+        return new ResponseVO<>(ServerCode.SUCCESS,themeDetailVOS);
+    }
 
 
+    @GetMapping(value = UrlConstants.API + "course/{courseId}")
+    public ResponseVO<ThemeVO> course(@PathVariable("courseId")Long courseId) {
+        ThemeVO themeVO = themeLogic.getTheme(courseId);
+        Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
+        if(themeVO.getThemeDetailVO().getType() != 0) {
+            log.info("这个不是一个课程:{}, 访问用户为:{}",courseId ,userId);
+            return new ResponseVO<>(ServerCode.ENTITY_NOT_A_COURSE,null);
+        }
+        return new ResponseVO<>(ServerCode.SUCCESS, themeVO);
+    }
 }
 }

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/CourseResourceVO.java

@@ -1,10 +1,20 @@
 package cn.iselab.mooctest.site.web.data;
 package cn.iselab.mooctest.site.web.data;
 
 
+import lombok.Data;
+
 /**
 /**
  * @program: mooctest-site
  * @program: mooctest-site
  * @mail: menduo96@gmail.com
  * @mail: menduo96@gmail.com
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
+@Data
 public class CourseResourceVO {
 public class CourseResourceVO {
+    private long id;
+    private String title;
+    private String slider;
+    private String video;
+    private String extraFile;
+    private String sliderImagesPath;
+    private int sliderImagesCount;
 }
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ThemeDetailVO.java

@@ -15,5 +15,7 @@ public class ThemeDetailVO {
     private long ownerId;
     private long ownerId;
     private String introduce;
     private String introduce;
     private boolean hasPurchase;
     private boolean hasPurchase;
+    private int publicStatus;
+    private int type;
 
 
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ThemeVO.java

@@ -19,4 +19,5 @@ public class ThemeVO {
     private List<CaseExtendsVO> caseExtendsVOList;
     private List<CaseExtendsVO> caseExtendsVOList;
     private List<ExamVO> examVOList;
     private List<ExamVO> examVOList;
     private List<PaperVO> paperVOList;
     private List<PaperVO> paperVOList;
+    private List<CourseResourceVO> courseResourceVOList;
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/response/ServerCode.java

@@ -9,6 +9,7 @@ public enum ServerCode {
 
 
     //通用错误状态码,30000-39999
     //通用错误状态码,30000-39999
     PARAM_WRONG(30000,"参数错误"),
     PARAM_WRONG(30000,"参数错误"),
+    ENTITY_NOT_A_COURSE(30001, "找不到该课程相关信息"),
 
 
     //考试相关状态码: 40000-49999
     //考试相关状态码: 40000-49999
     EXAM_ENDED(40000,"考试已结束"),
     EXAM_ENDED(40000,"考试已结束"),

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/CourseResourceVOWrapper.java

@@ -1,10 +1,29 @@
 package cn.iselab.mooctest.site.web.data.wrapper;
 package cn.iselab.mooctest.site.web.data.wrapper;
 
 
+import cn.iselab.mooctest.site.models.CourseResource;
+import cn.iselab.mooctest.site.web.data.CourseResourceVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
 /**
 /**
  * @program: mooctest-site
  * @program: mooctest-site
  * @mail: menduo96@gmail.com
  * @mail: menduo96@gmail.com
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
+@Service
+@Slf4j
 public class CourseResourceVOWrapper {
 public class CourseResourceVOWrapper {
+
+    public CourseResourceVO wrap(CourseResource courseResource) {
+        CourseResourceVO courseResourceVO = new CourseResourceVO();
+        courseResourceVO.setId(courseResource.getId());
+        courseResourceVO.setTitle(courseResource.getTitle());
+        courseResourceVO.setVideo(courseResource.getVideo());
+        courseResourceVO.setSlider(courseResource.getSlider());
+        courseResourceVO.setSliderImagesPath(courseResource.getSliderImagesPath());
+        courseResourceVO.setSliderImagesCount(courseResource.getSliderImagesCount());
+        courseResource.setExtraFile(courseResource.getExtraFile());
+        return courseResourceVO;
+    }
 }
 }

+ 23 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ThemeVOWrapper.java

@@ -31,6 +31,9 @@ public class ThemeVOWrapper {
     @Autowired
     @Autowired
     private CaseExtendsVOWrapper caseExtendsVOWrapper;
     private CaseExtendsVOWrapper caseExtendsVOWrapper;
     @Autowired
     @Autowired
+    private CourseResourceVOWrapper courseResourceVOWrapper;
+
+    @Autowired
     private User2ThemeService user2ThemeService;
     private User2ThemeService user2ThemeService;
 
 
     public ThemeDetail unWrapperThemeDetail(ThemeDetailVO themeDetailVO) {
     public ThemeDetail unWrapperThemeDetail(ThemeDetailVO themeDetailVO) {
@@ -41,9 +44,11 @@ public class ThemeVOWrapper {
 
 
     public ThemeDetailVO wrapperThemeDetail(ThemeDetail themeDetail) {
     public ThemeDetailVO wrapperThemeDetail(ThemeDetail themeDetail) {
         ThemeDetailVO themeDetailVO = new ThemeDetailVO();
         ThemeDetailVO themeDetailVO = new ThemeDetailVO();
-        //是否购买了该主题
         BeanUtils.copyProperties(themeDetail,themeDetailVO);
         BeanUtils.copyProperties(themeDetail,themeDetailVO);
-        themeDetailVO.setHasPurchase(varifyIfPurchase(themeDetail.getId()));
+        //是否购买了该主题
+        if(themeDetail.getPublicStatus() != 0) {
+            themeDetailVO.setHasPurchase(varifyIfPurchase(themeDetail.getId()));
+        }
         return themeDetailVO;
         return themeDetailVO;
     }
     }
 
 
@@ -57,9 +62,22 @@ public class ThemeVOWrapper {
     public ThemeVO wrapper(Theme theme) {
     public ThemeVO wrapper(Theme theme) {
         ThemeVO themeVO = new ThemeVO();
         ThemeVO themeVO = new ThemeVO();
         themeVO.setThemeDetailVO(wrapperThemeDetail(theme.getThemeDetail()));
         themeVO.setThemeDetailVO(wrapperThemeDetail(theme.getThemeDetail()));
-        if(theme.getCaseExtendsList()!=null) themeVO.setCaseExtendsVOList(theme.getCaseExtendsList().stream().map(caseExtendsVOWrapper::wrap).collect(Collectors.toList()));
-        if(theme.getPaperList()!=null) themeVO.setPaperVOList(theme.getPaperList().stream().map(paperVOWrapper::wrap).collect(Collectors.toList()));
-        if(theme.getExamList()!=null) themeVO.setExamVOList(theme.getExamList().stream().map(examVOWrapper::wrap).collect(Collectors.toList()));
+        if (theme.getCaseExtendsList() != null) {
+            themeVO.setCaseExtendsVOList(theme.getCaseExtendsList()
+                    .stream().map(caseExtendsVOWrapper::wrap).collect(Collectors.toList()));
+        }
+        if (theme.getPaperList() != null) {
+            themeVO.setPaperVOList(theme.getPaperList()
+                    .stream().map(paperVOWrapper::wrap).collect(Collectors.toList()));
+        }
+        if (theme.getExamList() != null) {
+            themeVO.setExamVOList(theme.getExamList()
+                    .stream().map(examVOWrapper::wrap).collect(Collectors.toList()));
+        }
+        if (theme.getCourseResourceList() != null) {
+            themeVO.setCourseResourceVOList(theme.getCourseResourceList()
+                    .stream().map(courseResourceVOWrapper::wrap).collect(Collectors.toList()));
+        }
         return themeVO;
         return themeVO;
     }
     }
 
 

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ThemeLogic.java

@@ -21,7 +21,7 @@ public interface ThemeLogic{
     Page<ThemeDetailVO> getThemeDetailList(Pageable pageable);
     Page<ThemeDetailVO> getThemeDetailList(Pageable pageable);
 
 
     //list themes
     //list themes
-    Page<ThemeVO> getThemeList(Pageable pageable);
+    Page<ThemeDetailVO> getThemeList(Pageable pageable,int type, int publicStatus);
 
 
     List<ThemeDetailVO> getThemeDetailListByCase(long caseId);
     List<ThemeDetailVO> getThemeDetailListByCase(long caseId);
     List<ThemeDetailVO> getThemeDetailListByPaper(long paperId);
     List<ThemeDetailVO> getThemeDetailListByPaper(long paperId);

+ 46 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ThemeLogicImpl.java

@@ -3,18 +3,26 @@ package cn.iselab.mooctest.site.web.logic.impl;
 import cn.iselab.mooctest.site.common.enums.EntityTypeEnum;
 import cn.iselab.mooctest.site.common.enums.EntityTypeEnum;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.service.*;
 import cn.iselab.mooctest.site.service.*;
+import cn.iselab.mooctest.site.service.common.PdfService;
 import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.data.wrapper.CaseExtendsVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.CaseExtendsVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.PaperVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.PaperVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.ThemeVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.ThemeVOWrapper;
+import cn.iselab.mooctest.site.web.logic.OSSLogic;
 import cn.iselab.mooctest.site.web.logic.ThemeLogic;
 import cn.iselab.mooctest.site.web.logic.ThemeLogic;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -26,6 +34,7 @@ import java.util.stream.Collectors;
  * @create: 2019-04-28 12:14
  * @create: 2019-04-28 12:14
  **/
  **/
 @Service
 @Service
+@Slf4j
 public class ThemeLogicImpl implements ThemeLogic {
 public class ThemeLogicImpl implements ThemeLogic {
     @Autowired
     @Autowired
     private ThemeVOWrapper themeVOWrapper;
     private ThemeVOWrapper themeVOWrapper;
@@ -45,13 +54,42 @@ public class ThemeLogicImpl implements ThemeLogic {
     private PaperService paperService;
     private PaperService paperService;
     @Autowired
     @Autowired
     private User2ThemeService user2ThemeService;
     private User2ThemeService user2ThemeService;
+    @Autowired
+    private PdfService pdfService;
+    @Autowired
+    private OSSLogic ossLogic;
+    @Autowired
+    private CourseResourceService courseResourceService;
+
+    private static final String BASE_DIR = "theme";
     @Override
     @Override
     public ThemeDetailVO newThemeDetail(ThemeDetailVO themeDetailVO) {
     public ThemeDetailVO newThemeDetail(ThemeDetailVO themeDetailVO) {
         ThemeDetail themeDetail = themeVOWrapper.unWrapperThemeDetail(themeDetailVO);
         ThemeDetail themeDetail = themeVOWrapper.unWrapperThemeDetail(themeDetailVO);
-        themeDetail = themeService.createThemeDetail(themeDetail);
+//        //异步上传
+//        String localDir = pdfService.pdf2imageList(themeDetail.getSliderPdfUrl(),"png");
+//        String parentDir = localDir.split("/")[localDir.split("/").length-1];
+//        log.info("讲义的图片列表存储位置:{},相对目录:{}",localDir,parentDir);
+//        uploadImages2Oss(localDir,parentDir);
+//        themeDetail.setSliderImagesParentDir(parentDir);
+//        themeDetail = themeService.createThemeDetail(themeDetail);
         return themeVOWrapper.wrapperThemeDetail(themeDetail);
         return themeVOWrapper.wrapperThemeDetail(themeDetail);
     }
     }
 
 
+    @Async("generateUpload2Oss")
+    protected void uploadImages2Oss(String localDir,String parentDir){
+        File file = new File(localDir);
+        File[] fs = file.listFiles();
+        for(File f:fs){
+            if(!f.isDirectory())
+                log.info(f.getName());
+            try(InputStream inputStream = new FileInputStream(f)) {
+                ossLogic.uploadByUrl("theme/"+parentDir+"/"+f.getName(), inputStream);
+            } catch (IOException e) {
+               log.error("读取文件流失败");
+            }
+        }
+    }
+
     @Override
     @Override
     public Page<ThemeDetailVO> getThemeDetailList(Pageable pageable) {
     public Page<ThemeDetailVO> getThemeDetailList(Pageable pageable) {
         Page<ThemeDetail> themeDetailPageable = themeService.getThemeDetails(pageable);
         Page<ThemeDetail> themeDetailPageable = themeService.getThemeDetails(pageable);
@@ -59,8 +97,9 @@ public class ThemeLogicImpl implements ThemeLogic {
     }
     }
 
 
     @Override
     @Override
-    public Page<ThemeVO> getThemeList(Pageable pageable) {
-        return null;
+    public Page<ThemeDetailVO> getThemeList(Pageable pageable,int type, int publicStatus) {
+        Page<ThemeDetail> themeDetails = themeService.getThemeDetails(pageable, type, publicStatus);
+        return themeDetails.map(themeVOWrapper::wrapperThemeDetail);
     }
     }
 
 
 
 
@@ -117,6 +156,10 @@ public class ThemeLogicImpl implements ThemeLogic {
                    paperList.add(paperService.getById(t.getEntityId()));
                    paperList.add(paperService.getById(t.getEntityId()));
                 }
                 }
                 theme.setPaperList(paperList);
                 theme.setPaperList(paperList);
+            } else if (key == EntityTypeEnum.COURSE_RESOURCE) {
+                List<Long> courseIds = map.get(key).stream().map(ThemeEntityRelations::getEntityId).collect(Collectors.toList());
+                List<CourseResource> courseResourceList = courseResourceService.getCourseResourceById(courseIds);
+                theme.setCourseResourceList(courseResourceList);
             }
             }
         }
         }
         return themeVOWrapper.wrapper(theme);
         return themeVOWrapper.wrapper(theme);

+ 17 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImplTest.java

@@ -1,3 +1,10 @@
+package cn.iselab.mooctest.site.service.common.impl;
+
+import cn.iselab.mooctest.site.service.common.PdfService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 
 
 /**
 /**
@@ -6,6 +13,16 @@ import static org.junit.Assert.*;
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/26
  * @create: 2020/1/26
  **/
  **/
+@Slf4j
 public class PdfServiceImplTest {
 public class PdfServiceImplTest {
+    @InjectMocks
+    private PdfService pdfService = new PdfServiceImpl();
+
+    @Test
+    public void pdf2imageList() {
+        String pdfPath = "/Users/duomen/MooctestProject/main-site/mooctest-site-server/src/test/resources/pdfdemo.pdf";
+        String resultPath = pdfService.pdf2imageList(pdfPath,"png");
+        log.info(resultPath);
 
 
+    }
 }
 }

+ 33 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/data/ThemeVOTest.java

@@ -1,3 +1,12 @@
+package cn.iselab.mooctest.site.web.data;
+
+import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
+import org.assertj.core.util.Lists;
+import org.junit.Test;
+
+import java.util.List;
+
 import static org.junit.Assert.*;
 import static org.junit.Assert.*;
 
 
 /**
 /**
@@ -6,6 +15,30 @@ import static org.junit.Assert.*;
  * @author: duomen
  * @author: duomen
  * @create: 2020/1/28
  * @create: 2020/1/28
  **/
  **/
+@Slf4j
 public class ThemeVOTest {
 public class ThemeVOTest {
 
 
+
+    @Test
+    public void generateCourseJson() {
+        ThemeVO themeVO = new ThemeVO();
+        ThemeDetailVO themeDetailVO = new ThemeDetailVO();
+        themeDetailVO.setId(1L);
+        themeDetailVO.setTitle("开发者测试课程");
+        themeDetailVO.setIntroduce("开发者测试课程");
+        themeDetailVO.setOwnerId(777L);
+        themeDetailVO.setPublicStatus(0);
+        CourseResourceVO courseResourceVO = new CourseResourceVO();
+        courseResourceVO.setId(1);
+        courseResourceVO.setVideo("http://third-part-tool.oss-cn-shanghai.aliyuncs.com/Videos/%E5%BC%80%E5%8F%91%E8%80%85%E6%B5%8B%E8%AF%95.mp4");
+        courseResourceVO.setExtraFile("");
+        courseResourceVO.setSlider("http://third-part-tool.oss-cn-shanghai.aliyuncs.com/Etest2019%E8%80%83%E8%AF%95%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B.pdf");
+        courseResourceVO.setSliderImagesPath("http://mooctest-site-dev.oss-cn-shanghai.aliyuncs.com/theme/skfjkvnknk/");
+        courseResourceVO.setSliderImagesCount(30);
+        themeVO.setThemeDetailVO(themeDetailVO);
+        List<CourseResourceVO> courseResourceVOList = Lists.newArrayList(courseResourceVO);
+        themeVO.setCourseResourceVOList(courseResourceVOList);
+        Gson gson = new Gson();
+        log.info(gson.toJson(themeVO));
+    }
 }
 }

BIN
mooctest-site-server/src/test/resources/57_9_网易中台的博弈与演进v3.pdf