weiwenhai преди 6 години
родител
ревизия
3e97dce625

+ 0 - 5
examcloud-core-questions-api-provider/pom.xml

@@ -11,11 +11,6 @@
 	<packaging>jar</packaging>
 
 	<dependencies>
-		<dependency>
-			<groupId>cn.com.qmth.examcloud.rmi</groupId>
-			<artifactId>examcloud-core-questions-api-client</artifactId>
-			<version>${examcloud.version}</version>
-		</dependency>
 		<dependency>
 			<groupId>cn.com.qmth.examcloud.core.questions</groupId>
 			<artifactId>examcloud-core-questions-service</artifactId>

+ 52 - 0
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/DefaultPaperController.java

@@ -0,0 +1,52 @@
+package cn.com.qmth.examcloud.core.questions.api.controller;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+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 cn.com.qmth.examcloud.commons.base.exception.StatusException;
+import cn.com.qmth.examcloud.commons.web.security.bean.User;
+import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.core.questions.api.bean.PaperK12Bean;
+import cn.com.qmth.examcloud.core.questions.api.request.GetDefaultQuesionsReq;
+import cn.com.qmth.examcloud.core.questions.api.request.GetQuestionListReq;
+import cn.com.qmth.examcloud.core.questions.api.response.GetPaperResp;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
+import cn.com.qmth.examcloud.core.questions.service.PaperProviderService;
+
+/**
+ * @author 		weiwenhai
+ * @date		2018.10.8
+ * @company		qmth
+ * @description	controller
+ * @code		016
+ */
+@RestController
+@RequestMapping("${api_cqb}/default_paper")
+public class DefaultPaperController extends ControllerSupport {
+
+	@Autowired
+	PaperProviderService paperProviderService;
+	
+	@ApiOperation(value = "外部接口组卷", notes = "外部接口组卷")
+    @PostMapping("/genPaper")
+	public ResponseEntity<Object> genPaper(@RequestBody GetQuestionListReq req){
+		User user = getAccessUser();
+		if(user == null){
+			throw new StatusException("Q-016038", "用户不存在!");
+		}
+		//组卷
+		String paperId = paperProviderService.genPaper(req.getQuestionIds(), req.getMap(), req.getName(), user);
+		return new ResponseEntity<Object>(paperId,HttpStatus.OK);
+	}
+	
+	
+}

+ 3 - 5
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/controller/DefaultQuesionController.java

@@ -1,7 +1,5 @@
 package cn.com.qmth.examcloud.core.questions.api.controller;
 
-import javax.servlet.http.HttpServletRequest;
-
 import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +36,7 @@ public class DefaultQuesionController extends ControllerSupport {
 	
 	@ApiOperation(value = "外部接口保存单个试题", notes = "外部接口保存单个试题")
     @PostMapping("/save")
-	public ResponseEntity<Object> save(HttpServletRequest request, @RequestBody GetDefaultQuesionReq req) {
+	public ResponseEntity<Object> save(@RequestBody GetDefaultQuesionReq req) {
 		User user = getAccessUser();
 		if(user == null){
 			throw new StatusException("Q-013041", "用户不存在!");
@@ -53,7 +51,7 @@ public class DefaultQuesionController extends ControllerSupport {
 	
 	@ApiOperation(value = "修改试题")
 	@PutMapping("/update")
-	public ResponseEntity<Object> update(HttpServletRequest request, @RequestBody GetDefaultQuesionReq req) {
+	public ResponseEntity<Object> update(@RequestBody GetDefaultQuesionReq req) {
 		User user = getAccessUser();
 		if(user == null){
 			throw new StatusException("Q-013057", "用户不存在!");
@@ -68,7 +66,7 @@ public class DefaultQuesionController extends ControllerSupport {
 	
 	@ApiOperation(value = "查询试题")
 	@PostMapping("/find")
-	public ResponseEntity<Object> find(HttpServletRequest request, @RequestBody GetDefaultQuesionsReq req) {
+	public ResponseEntity<Object> find(@RequestBody GetDefaultQuesionsReq req) {
 		User user = getAccessUser();
 		if(user == null){
 			throw new StatusException("Q-013075", "用户不存在!");

+ 13 - 1
examcloud-core-questions-dao/src/main/java/cn/com/qmth/examcloud/core/questions/dao/entity/PaperDetailUnit.java

@@ -11,7 +11,6 @@ import org.springframework.data.mongodb.core.mapping.DBRef;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
-
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 
 public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit> {
@@ -52,6 +51,11 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
     
     private PaperType paperType;
     
+    /**
+	 * 作答限时 K12
+	 */
+	private Long timeLimit;
+    
     public PaperDetailUnit() {}
     
     public PaperDetailUnit(Paper paper,PaperDetail paperDetail,Question question) {
@@ -208,6 +212,14 @@ public class PaperDetailUnit implements Serializable, Comparable<PaperDetailUnit
     public void setSubScoreListNew(List<Double> subScoreList) {
         this.subScoreList = subScoreList;
     }
+    
+	public Long getTimeLimit() {
+		return timeLimit;
+	}
+
+	public void setTimeLimit(Long timeLimit) {
+		this.timeLimit = timeLimit;
+	}
 
 	@Override
     public int compareTo(PaperDetailUnit unit) {

+ 5 - 1
examcloud-core-questions-service/pom.xml

@@ -16,7 +16,11 @@
 			<artifactId>examcloud-core-questions-dao</artifactId>
 			<version>${examcloud.version}</version>
 		</dependency>
-		
+		<dependency>
+			<groupId>cn.com.qmth.examcloud.rmi</groupId>
+			<artifactId>examcloud-core-questions-api-client</artifactId>
+			<version>${examcloud.version}</version>
+		</dependency>
 	</dependencies>
 
 </project>

+ 24 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperProviderService.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.examcloud.core.questions.service;
+
+import java.util.Map;
+import java.util.Set;
+
+import cn.com.qmth.examcloud.commons.web.security.bean.User;
+import cn.com.qmth.examcloud.core.questions.api.bean.PaperK12Bean;
+
+/**
+ * @author 		weiwenhai
+ * @date 		2018.10.8
+ * @company		qmth
+ * @description	试卷对象服务接口
+ */
+public interface PaperProviderService {
+
+	/**
+	 * 根据id集合查询试题集合
+	 * @param questionIds
+	 * @return
+	 */
+	public String genPaper(Set<String> questionIds,Map<String, PaperK12Bean> map,String paperName,User user);
+	
+}

+ 154 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperProviderServiceImpl.java

@@ -0,0 +1,154 @@
+package cn.com.qmth.examcloud.core.questions.service.impl;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.examcloud.commons.base.exception.StatusException;
+import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLog;
+import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLogFactory;
+import cn.com.qmth.examcloud.commons.web.security.bean.User;
+import cn.com.qmth.examcloud.core.questions.api.bean.PaperK12Bean;
+import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
+import cn.com.qmth.examcloud.core.questions.base.enums.PaperStatus;
+import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperDetailUnitRepo;
+import cn.com.qmth.examcloud.core.questions.dao.PaperRepo;
+import cn.com.qmth.examcloud.core.questions.dao.QuesRepo;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetail;
+import cn.com.qmth.examcloud.core.questions.dao.entity.PaperDetailUnit;
+import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
+import cn.com.qmth.examcloud.core.questions.service.PaperProviderService;
+
+/**
+ * @author 		weiwenhai
+ * @date		2018.10.8
+ * @company		qmth
+ * @description	paperProviderServiceImpl
+ * @code		014
+ */
+@Service("paperProviderServiceImpl")
+public class PaperProviderServiceImpl implements PaperProviderService{
+
+	protected ExamCloudLog log = ExamCloudLogFactory.getLog(this.getClass());
+	
+	@Autowired
+    private QuesRepo quesRepo;
+	
+	@Autowired
+    PaperRepo paperRepo;
+
+    @Autowired
+    PaperDetailRepo paperDetailRepo;
+    
+    @Autowired
+    PaperDetailUnitRepo paperDetailUnitRepo;
+	
+	@Override
+	public String genPaper(Set<String> questionIds,Map<String, PaperK12Bean> map,String paperName,User user) {
+		if(questionIds == null || questionIds.size()<1){
+			throw new StatusException("Q-014038", "questionIds is null");
+		}
+		if(map == null || map.size()<1){
+			throw new StatusException("Q-014041", "map is null");
+		}
+		//查询所有试题集合
+		List<Question> questions = quesRepo.findByIdIn(questionIds);
+		if(CollectionUtils.isEmpty(questions)){
+			log.error("根据试题id的集合没有查询到试题结合");
+			throw new StatusException("Q-014041", "根据试题id的集合没有查询到试题结合");
+		}
+		//构建试卷对象
+		Paper paper = initPaper(paperName,user);
+		//构建大题对象,未设置	
+		PaperDetail paperDetail = initPaperDetail(paper);
+		//构建包装试题对象
+		List<PaperDetailUnit> paperDetailUnits = buildUnits(paper,paperDetail,questions,map);
+		paper = paperRepo.save(paper);
+		paperDetailRepo.save(paperDetail);
+		quesRepo.save(questions);
+		paperDetailUnitRepo.save(paperDetailUnits);
+		return paper.getId();
+	}
+	
+	/**
+	 * 构建大题对象
+	 * @param paper
+	 * @return
+	 */
+	private PaperDetail initPaperDetail(Paper paper) {
+		PaperDetail paperDetail = new PaperDetail();
+		paperDetail.setPaper(paper);
+        paperDetail.setName("默认大题");
+        paperDetail.setNumber(1);
+        paperDetail.setCreator(paper.getCreator());
+		return paperDetail;
+	}
+
+	/**
+	 * 构建试卷对象
+	 * @param paperName
+	 * @param user
+	 * @return
+	 */
+	private Paper initPaper(String paperName, User user) {
+		Paper paper = new Paper();
+		paper.setName(paperName);
+        paper.setTitle(paperName);
+        paper.setPaperType(PaperType.GENERATE);
+        paper.setOrgId(user.getRootOrgId().toString());
+        paper.setCreator(user.getDisplayName());
+        paper.setCreateTime(CommonUtils.getCurDateTime());
+		return paper;
+	}
+
+	/**
+	 * 构建题包装器
+	 * @param questions
+	 * @param map
+	 * @return
+	 */
+	private List<PaperDetailUnit> buildUnits(Paper paper, PaperDetail paperDetail,List<Question> questions, Map<String, PaperK12Bean> map) {
+		List<PaperDetailUnit> paperDetailUnits = new ArrayList<PaperDetailUnit>();
+		int j = 0;
+		double score = 0;
+		double sum = 0;
+		for(int i=0;i<questions.size();i++){
+			PaperDetailUnit paperDetailUnit = new PaperDetailUnit();
+			paperDetailUnit.setNumber(i+1);
+			paperDetailUnit.setQuestion(questions.get(i));
+			paperDetailUnit.setPaperDetail(paperDetail);
+			paperDetailUnit.setQuestionType(questions.get(i).getQuestionType());
+			paperDetailUnit.setCreator(paper.getCreator());
+			paperDetailUnit.setPaper(paper);
+			paperDetailUnit.setPaperType(PaperType.GENERATE);
+			if(!StringUtils.isBlank(map.get(questions.get(i).getId()).getScore()+"")){
+				paperDetailUnit.setScore(map.get(questions.get(i).getId()).getScore());
+			}
+			if(!StringUtils.isBlank(map.get(questions.get(i).getId()).getTimeLimit()+"")){
+				paperDetailUnit.setTimeLimit(map.get(questions.get(i).getId()).getTimeLimit());
+			}
+			j++;
+			score = map.get(questions.get(i).getId()).getScore() + score;
+			sum = paperDetailUnit.getScore() * paperDetailUnit.getQuestion().getDifficultyDegree()/10 + sum;
+		}
+		paperDetail.setUnitCount(j);
+		paperDetail.setScore(score);
+		BigDecimal b = new BigDecimal(sum / score);
+		Double difficulty = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
+		paper.setTotalScore(score);
+		paper.setDifficultyDegree(difficulty);
+		return paperDetailUnits;
+	}
+
+}