Pārlūkot izejas kodu

优化精确组卷代码

gaoxing 8 gadi atpakaļ
vecāks
revīzija
613a52dd1c

+ 25 - 0
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/context/DetailContext.java

@@ -1,10 +1,16 @@
 package com.qmth.cqb.genpaper.context;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 import com.qmth.cqb.genpaper.condition.Condition;
+import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.PaperDetailStruct;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.model.PaperDetailUnitStruct;
 import com.qmth.cqb.question.model.Question;
 
@@ -39,6 +45,25 @@ public class DetailContext extends Context {
         return selectQues.size() == units.size();
     }
 
+    public Map<PaperDetail, List<PaperDetailUnit>> build(PaperDetailStruct detailStruct) {
+        Map<PaperDetail, List<PaperDetailUnit>> detailMap = new HashMap<>();
+        PaperDetail pd = new PaperDetail();
+        List<PaperDetailUnit> unitList = new ArrayList<PaperDetailUnit>();
+        pd.setId(UUID.randomUUID().toString());
+        for (int i = 0; i < units.size(); i++) {
+            UnitContext uc = units.get(i);
+            PaperDetailUnit pdu = uc.build(uc.getUnitStruct());
+            pdu.setPaperDetail(pd);
+            unitList.add(pdu);
+        }
+        pd.setUnitCount(detailStruct.getDetailCount());
+        pd.setName(detailStruct.getName());
+        pd.setNumber(detailStruct.getNumber());
+        pd.setScore(detailStruct.getTotalScore());
+        detailMap.put(pd, unitList);
+        return detailMap;
+    }
+
     public PaperContext getPaperContext() {
         return paperContext;
     }

+ 30 - 1
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/context/PaperContext.java

@@ -1,12 +1,19 @@
 package com.qmth.cqb.genpaper.context;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 import com.qmth.cqb.genpaper.condition.Condition;
+import com.qmth.cqb.paper.model.Paper;
+import com.qmth.cqb.paper.model.PaperDetail;
 import com.qmth.cqb.paper.model.PaperDetailStruct;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.model.PaperStruct;
 import com.qmth.cqb.question.model.Question;
+import com.qmth.cqb.utils.enums.PaperType;
 
 public class PaperContext extends Context {
 
@@ -19,7 +26,7 @@ public class PaperContext extends Context {
         this.paperStruct = paperStruct;
         this.details = new LinkedList<DetailContext>();
         for (PaperDetailStruct pd : paperStruct.getPaperDetailStructs()) {
-            details.add(new DetailContext(pd, this,conditions));
+            details.add(new DetailContext(pd, this, conditions));
         }
     }
 
@@ -31,6 +38,28 @@ public class PaperContext extends Context {
         super.select(question);
     }
 
+    public List<Object> build(PaperStruct paperStruct) {
+        List<Object> list = new ArrayList<Object>();
+        Paper paper = new Paper();
+        paper.setId(UUID.randomUUID().toString());
+        paper.setPaperDetailCount(details.size());
+        paper.setTotalScore(paperStruct.getTotalScore());
+        paper.setPaperType(PaperType.GENERATE);
+        List<PaperDetailUnit> units = new ArrayList<PaperDetailUnit>();
+        List<PaperDetail> detailList = new ArrayList<PaperDetail>();
+        for (DetailContext dc : details) {
+            Map<PaperDetail, List<PaperDetailUnit>> tempMap = dc.build(dc.getDetailStruct());
+            PaperDetail pd = tempMap.keySet().iterator().next();
+            units.addAll(tempMap.get(pd));
+            detailList.add(pd);
+
+        }
+        list.add(paper);
+        list.add(detailList);
+        list.add(units);
+        return list;
+    }
+
     public boolean finish() {
         boolean finish = false;
         for (DetailContext dc : details) {

+ 12 - 0
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/context/UnitContext.java

@@ -1,8 +1,10 @@
 package com.qmth.cqb.genpaper.context;
 
 import java.util.List;
+import java.util.UUID;
 
 import com.qmth.cqb.genpaper.condition.Condition;
+import com.qmth.cqb.paper.model.PaperDetailUnit;
 import com.qmth.cqb.paper.model.PaperDetailUnitStruct;
 import com.qmth.cqb.question.model.Question;
 
@@ -32,6 +34,16 @@ public class UnitContext extends Context {
         return selectQues.size() > 0;
     }
 
+    public PaperDetailUnit build(PaperDetailUnitStruct unitStruct) {
+        PaperDetailUnit pdu = new PaperDetailUnit();
+        pdu.setId(UUID.randomUUID().toString());
+        pdu.setQuestionType(unitStruct.getQuestionType());
+        pdu.setScore(unitStruct.getScore());
+        pdu.setNumber(unitStruct.getNumber());
+        pdu.setQuestion(this.getSelectQues().iterator().next());
+        return pdu;
+    }
+
     public DetailContext getDetailContext() {
         return detailContext;
     }

+ 33 - 36
cqb-gen-paper/src/main/java/com/qmth/cqb/genpaper/service/GenPaperService.java

@@ -1,6 +1,13 @@
 package com.qmth.cqb.genpaper.service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,10 +50,11 @@ public class GenPaperService {
      * 
      * @return
      */
+    @SuppressWarnings("unchecked")
     public Map<String, Object> genPaper(GenPaperDto genPaperDto) {
         String msg = "";
         Map<String, Object> paperMsgMap = new HashMap<String, Object>();
-        LinkedList<Question> questions = new LinkedList<Question>();// 所有试题集合
+        LinkedList<Question> questions = new LinkedList<Question>();
         PaperStruct paperStruct = paperStructRepo.findOne(genPaperDto.getPaperStructId());
         PaperContext paperContext = new PaperContext(paperStruct, genPaperDto.getConditions());
         List<UnitContext> unitContexts = new LinkedList<UnitContext>();
@@ -93,37 +101,24 @@ public class GenPaperService {
             paperMsgMap.put("msg", msg);
             return paperMsgMap;
         }
-        List<PaperDetail> paperDetails = new ArrayList<PaperDetail>();
-        List<PaperDetailUnit> paperDetailunits = new ArrayList<PaperDetailUnit>();
-        for (DetailContext dc : detailContexts) {
-            List<PaperDetailUnit> unitsTemp = new ArrayList<PaperDetailUnit>();
-            List<UnitContext> units = dc.getUnits();
-            Iterator iterator = quesSet.iterator();
-            for (UnitContext uc : units) {
-                while(iterator.hasNext()) {
-                    Question ques = (Question) iterator.next();
-                    if (uc.getUnitStruct().getQuestionType() == ques.getQuestionType()) {
-                        PaperDetailUnit pdu = new PaperDetailUnit();
-                        pdu.setCreateTime(CommonUtils.getCurDateTime());
-                        pdu.setQuestion(ques);
-                        pdu.setQuestionType(ques.getQuestionType());
-                        pdu.setScore(uc.getUnitStruct().getScore());
-                        unitsTemp.add(pdu);
-                        iterator.remove();
-                        break;
-                    }
-                }
-            }
-            paperDetails.add(this.constuctPaperDeatil(unitsTemp, dc.getDetailStruct().getNumber(),
-                    dc.getDetailStruct().getName()));
-            paperDetailunits.addAll(unitsTemp);
+        List<Object> list = paperContext.build(paperStruct);
+        if (list != null && list.size() == 3) {
+            Paper paper = (Paper) list.get(0);
+            List<PaperDetail> paperDetails = (List<PaperDetail>) list.get(1);
+            List<PaperDetailUnit> paperDetailunits = (List<PaperDetailUnit>) list.get(2);
+            // 补全paper属性
+            paper.setName(genPaperDto.getPaperName());
+            paper.setCourseNo(genPaperDto.getCourseNo());
+            paper.setCourseName(genPaperDto.getCourseName());
+            paper.setCreator(genPaperDto.getCreator());
+            paper.setCreateTime(CommonUtils.getCurDateTime());
+            paper.setUnitCount(this.getTotalQuesNum(paperDetailunits));
+            // 数据入库
+            paper = this.persistentPaper(paperDetailunits, paperDetails, paper);
+            msg = "success";
+            paperMsgMap.put("paper", paper);
+            paperMsgMap.put("msg", msg);
         }
-
-        Paper paper = this.persistentPaper(paperDetailunits, paperDetails,
-                this.constuctPaperByPaperDetails(paperDetails, genPaperDto));
-        msg = "success";
-        paperMsgMap.put("paper", paper);
-        paperMsgMap.put("msg", msg);
         return paperMsgMap;
     }
 
@@ -234,7 +229,7 @@ public class GenPaperService {
         if (units != null && units.size() > 0) {
             Double score = 0d;
             for (PaperDetailUnit pdu : units) {
-                score += pdu.getScore()==null ? 0:pdu.getScore();
+                score += pdu.getScore() == null ? 0 : pdu.getScore();
 
             }
             pd.setId(UUID.randomUUID().toString());
@@ -262,7 +257,7 @@ public class GenPaperService {
         if (details != null && details.size() > 0) {
             Double score = 0d;
             for (PaperDetail pd : details) {
-                score += pd.getScore()==null ? 0:pd.getScore();
+                score += pd.getScore() == null ? 0 : pd.getScore();
 
             }
             paper.setId(UUID.randomUUID().toString());
@@ -312,8 +307,9 @@ public class GenPaperService {
         for (QuesStructType qType : unitMap.keySet()) {
             details.add(this.constuctPaperDeatil(unitMap.get(qType), qTypeIndexMap.get(qType), qType.getName()));
         }
-        Paper paper = this.persistentPaper(selectedUnits, details,
-                this.constuctPaperByPaperDetails(details, genPaperDto));
+        Paper paper = this.constuctPaperByPaperDetails(details, genPaperDto);
+        paper.setUnitCount(this.getTotalQuesNum(selectedUnits));// 设置小题数量,需统计subQuestion
+        paper = this.persistentPaper(selectedUnits, details, paper);
         return paper;
 
     }
@@ -342,6 +338,7 @@ public class GenPaperService {
 
     /**
      * 获取所试题数量
+     * 
      * @param units
      * @return
      */