Эх сурвалжийг харах

修改二进制存储方式

宋悦 7 жил өмнө
parent
commit
20178838df

+ 10 - 16
cqb-paper/src/main/java/com/qmth/cqb/paper/service/ImportPaperService.java

@@ -14,6 +14,8 @@ import java.util.regex.Pattern;
 import com.qmth.cqb.base.dao.CourseRepo;
 import com.qmth.cqb.base.model.Course;
 
+import com.qmth.cqb.question.dao.QuesPkgPathRepo;
+import com.qmth.cqb.question.model.QuestionPkgPath;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -85,6 +87,9 @@ public class ImportPaperService {
     @Autowired
     QuesTypeNameService quesTypeNameService;
 
+    @Autowired
+    QuesPkgPathRepo quesPkgPathRepo;
+
     /**
      * 获取上传文件
      *
@@ -171,9 +176,6 @@ public class ImportPaperService {
         for(PaperDetailUnit paperDetailUnit:paperDetailUnits){
             paperDetailUnit.setQuestion(null);
         }
-        for(Question question:questions){
-            question.setQuesPkg(null);
-        }
         paperDetailUnits.clear();
         questions.clear();
 
@@ -273,8 +275,11 @@ public class ImportPaperService {
                     processQuesTail(pList, importPaperCheck.index, subQuesNum, question, paperDetailUnit,importPaperCheck, tmpWordMlPackage, false);
                 }
                 // 设置WordMlPackage二进制数据
-                //question.setQuesPkg(writeByte);
-                question.setQuesPkg(getZipResource(wordMLPackage,question));
+                byte[] pkgByte = getZipResource(wordMLPackage,question);
+                QuestionPkgPath quesPkgPath = quesPkgPathRepo.save(new QuestionPkgPath(pkgByte));
+                question.setQuesPkgPathId(quesPkgPath.getId());
+                pkgByte = null;
+                quesPkgPath.setQuesPkg(null);
                 // 设置question与Unit集合数据
                 question.setCourse(paper.getCourse());
                 question.setOrgId(user.getRootOrgId().toString());
@@ -915,17 +920,6 @@ public class ImportPaperService {
         }
     }
 
-    /**
-     * 设置wordMLPackage对象二进制数据
-     *
-     * @param question
-     * @param wordMLPackage
-     * @throws Exception
-     */
-    public static void setPkgByte(Question question, WordprocessingMLPackage wordMLPackage) throws Exception {
-        question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
-    }
-
     /**
      * 构造一张空白的导入类型试卷
      *

+ 11 - 1
cqb-paper/src/main/java/com/qmth/cqb/paper/service/export/ExportPaperAbstractService.java

@@ -17,6 +17,7 @@ import java.util.stream.Collectors;
 
 import javax.xml.bind.JAXBElement;
 
+import com.qmth.cqb.question.dao.QuesPkgPathRepo;
 import main.java.com.UpYun;
 
 import org.apache.commons.io.FileUtils;
@@ -118,6 +119,9 @@ public abstract class ExportPaperAbstractService {
 	@Autowired
 	protected AudioTimeConfigRepo audioTimeConfigRepo;
 
+	@Autowired
+	protected QuesPkgPathRepo quesPkgPathRepo;
+
 	public static final String FILL_BLANK_QUESTION_FLAG = "###";
 	
 	public static final String TEMP_FILE_EXP = "docxExport/";
@@ -1043,9 +1047,15 @@ public abstract class ExportPaperAbstractService {
         Paper paper = paperRepo.findOne(id);
         List<WordprocessingMLPackage> wordMLPackages = paperDetailUnitRepo.findByPaperOrderByNumber(paper)
                 .stream().map(PaperDetailUnit::getQuestion).collect(Collectors.toList())
-                .stream().map(Question::getPkgObj).collect(Collectors.toList());
+                .stream().map(question -> getPkgObj(question)).collect(Collectors.toList());
         return wordMLPackages;
     }
+
+    private WordprocessingMLPackage getPkgObj(Question question){
+		String pkgPathId = question.getQuesPkgPathId();
+		byte[] pkgByte = quesPkgPathRepo.findFirstById(pkgPathId).getQuesPkg();
+		return DocxProcessUtil.getPkg(pkgByte);
+	}
     
 }
 

+ 13 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/dao/QuesPkgPathRepo.java

@@ -0,0 +1,13 @@
+package com.qmth.cqb.question.dao;
+
+import com.qmth.cqb.question.model.QuestionPkgPath;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+
+/**
+ * Created by songyue on 16/12/28.
+ */
+public interface QuesPkgPathRepo extends MongoRepository<QuestionPkgPath, String>, QueryByExampleExecutor<QuestionPkgPath> {
+
+    QuestionPkgPath findFirstById(String id);
+}

+ 30 - 18
cqb-question-resource/src/main/java/com/qmth/cqb/question/model/Question.java

@@ -30,7 +30,12 @@ public class Question implements Serializable {
     /**
      * 试题wordpkg对象序列化数据
      */
-    private byte[] quesPkg;
+//    private byte[] quesPkg;
+
+    /**
+     * 试题pkg路径Id
+     */
+    private String quesPkgPathId;
 
     private String quesAnswer;// 答案,默认为html
 
@@ -200,22 +205,22 @@ public class Question implements Serializable {
         this.quesParams = quesParams;
     }
 
-    public byte[] getQuesPkg() {
-        return quesPkg;
-    }
-
-    public WordprocessingMLPackage getPkgObj() {
-        if (this.quesPkg != null && this.quesPkg.length > 0) {
-            return DocxProcessUtil.getPkg(this.quesPkg);
-        } else {
-            return null;
-        }
-
-    }
-
-    public void setQuesPkg(byte[] quesPkg) {
-        this.quesPkg = quesPkg;
-    }
+//    public byte[] getQuesPkg() {
+//        return quesPkg;
+//    }
+//
+//    public WordprocessingMLPackage getPkgObj() {
+//        if (this.quesPkg != null && this.quesPkg.length > 0) {
+//            return DocxProcessUtil.getPkg(this.quesPkg);
+//        } else {
+//            return null;
+//        }
+//
+//    }
+//
+//    public void setQuesPkg(byte[] quesPkg) {
+//        this.quesPkg = quesPkg;
+//    }
 
     public Double getScore() {
         return score;
@@ -316,5 +321,12 @@ public class Question implements Serializable {
 	public void setSpecialty(Specialty specialty) {
 		this.specialty = specialty;
 	}
-	
+
+    public String getQuesPkgPathId() {
+        return quesPkgPathId;
+    }
+
+    public void setQuesPkgPathId(String quesPkgPathId) {
+        this.quesPkgPathId = quesPkgPathId;
+    }
 }

+ 41 - 0
cqb-question-resource/src/main/java/com/qmth/cqb/question/model/QuestionPkgPath.java

@@ -0,0 +1,41 @@
+package com.qmth.cqb.question.model;
+
+import org.springframework.data.annotation.Id;
+
+import java.io.Serializable;
+
+/**
+ * Created by songyue on 17/11/19.
+ */
+public class QuestionPkgPath implements Serializable{
+
+    private static final long serialVersionUID = 1462455654557838793L;
+
+    @Id
+    private String id;
+
+    private byte[] quesPkg;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public byte[] getQuesPkg() {
+        return quesPkg;
+    }
+
+    public void setQuesPkg(byte[] quesPkg) {
+        this.quesPkg = quesPkg;
+    }
+
+    public QuestionPkgPath() {
+    }
+
+    public QuestionPkgPath(byte[] quesPkg) {
+        this.quesPkg = quesPkg;
+    }
+}

+ 14 - 7
cqb-question-resource/src/main/java/com/qmth/cqb/question/service/impl/QuesServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.regex.Pattern;
 
+import com.qmth.cqb.question.dao.QuesPkgPathRepo;
+import com.qmth.cqb.question.model.*;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.docx4j.openpackaging.exceptions.InvalidFormatException;
@@ -25,10 +27,6 @@ import cn.com.qmth.examcloud.common.dto.question.enums.QuesStructType;
 import com.qmth.cqb.base.dao.CourseRepo;
 import com.qmth.cqb.question.dao.QuesRepo;
 import com.qmth.cqb.question.dao.QuestionAudioRepo;
-import com.qmth.cqb.question.model.QuesOption;
-import com.qmth.cqb.question.model.Question;
-import com.qmth.cqb.question.model.QuestionAudio;
-import com.qmth.cqb.question.model.QuestionSearchCondition;
 import com.qmth.cqb.question.service.QuesService;
 import com.qmth.cqb.question.service.QuestionAudioService;
 import com.qmth.cqb.utils.CommonUtils;
@@ -56,6 +54,9 @@ public class QuesServiceImpl implements QuesService{
     
     @Autowired
 	private CourseRepo courseRepo;
+
+    @Autowired
+    private QuesPkgPathRepo quesPkgPathRepo;
     
     private static WordprocessingMLPackage wordMLPackage = null;
     
@@ -288,7 +289,7 @@ public class QuesServiceImpl implements QuesService{
             question.setQuesBodyWord(null);
             question.setQuesAnswerWord(null);
             question.setQuesAnswerAnalysisWord(null);
-            question.setQuesPkg(new byte[0]);
+//            question.setQuesPkg(new byte[0]);
             String newQuesBody = question.getQuesBody().replaceAll("<span>", "").replaceAll("</span>", "")
                     .replaceAll("###", "______");
             question.setQuesBody(newQuesBody);
@@ -317,7 +318,10 @@ public class QuesServiceImpl implements QuesService{
                     updateQuesWordUnit(wordMLPackage, subQues);
                 }
             }
-            question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
+            byte [] pkgByte = DocxProcessUtil.getPkgByte(wordMLPackage);
+            QuestionPkgPath quesPkgPath = quesPkgPathRepo.save(new QuestionPkgPath(pkgByte));
+            question.setQuesPkgPathId(quesPkgPath.getId());
+            pkgByte = null;
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -347,7 +351,10 @@ public class QuesServiceImpl implements QuesService{
                 DocxProcessUtil.initTmpPackage(wordMLPackage);
             }
         }
-        question.setQuesPkg(DocxProcessUtil.getPkgByte(wordMLPackage));
+        byte [] pkgByte = DocxProcessUtil.getPkgByte(wordMLPackage);
+        QuestionPkgPath quesPkgPath = quesPkgPathRepo.save(new QuestionPkgPath(pkgByte));
+        question.setQuesPkgPathId(quesPkgPath.getId());
+        pkgByte = null;
     }
     
     private String makeQuesAnswerWord(String quesAnswer){

+ 2 - 0
cqb-starter/src/main/resources/application-prod.properties

@@ -2,6 +2,7 @@
 spring.data.mongodb.uri=mongodb://root:Qmth87863577@dds-wz93958e4b3d8b142.mongodb.rds.aliyuncs.com:3717/?authSource=admin&authMechanism=SCRAM-SHA-1
 spring.data.mongodb.database=comm-ques-bank
 spring.data.mongodb.grid-fs-database=comm-ques-bank
+mongo
 eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
 hystrix.command.default.execution.timeout.enabled=false
 hystrix.threadpool.default.coreSize = 500
@@ -10,6 +11,7 @@ spring.application.name=ExamCloud-service-question
 spring.redis.host=r-wz97e520d2701e54.redis.rds.aliyuncs.com
 spring.redis.port=6379
 spring.redis.password=Qmth87863577
+spring.redis.pool.max-active=200
 
 upyun.bucketName=exam-cloud-test
 upyun.userName=examcloud