weiwenhai 6 년 전
부모
커밋
eae131b7a1

+ 88 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/temp/DdExcelService.java

@@ -5,9 +5,12 @@ import java.io.FileOutputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -25,6 +28,8 @@ 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.QuesTypeNameRepo;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Course;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExamPaper;
+import cn.com.qmth.examcloud.core.questions.dao.entity.ExtractConfig;
 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.PaperDetailStruct;
@@ -38,6 +43,7 @@ import cn.com.qmth.examcloud.core.questions.service.PaperDetailUnitService;
 import cn.com.qmth.examcloud.core.questions.service.temp.vo.DdExcelDto;
 import cn.com.qmth.examcloud.core.questions.service.temp.vo.DdPaperDto;
 import cn.com.qmth.examcloud.core.questions.service.temp.vo.DdPaperStructDto;
+import cn.com.qmth.examcloud.core.questions.service.temp.vo.SubQuestionDto;
 
 @Service("ddExcelService")
 public class DdExcelService {
@@ -562,6 +568,88 @@ public class DdExcelService {
         System.out.println("结束...");
 	}
 	
+	@SuppressWarnings("resource")
+	public void exportSubQues(String orgId,Long examId,List<String> codes) throws Exception{
+		List<SubQuestionDto> dtos = new ArrayList<SubQuestionDto>();
+        int j = 1;
+        for(String code:codes){
+        	Query query = new Query();
+    		query.addCriteria(Criteria.where("orgId").is(orgId));
+            query.addCriteria(Criteria.where("examId").is(examId));
+        	System.out.println("开始处理第"+j+"个调卷规则。。。。。。。");
+        	query.addCriteria(Criteria.where("courseCode").is(code));
+            ExtractConfig tempConfig = this.mongoTemplate.findOne(query, ExtractConfig.class);
+            //定义试卷集合
+            Set<String> ids = new HashSet<String>();
+            //获取试卷
+        	List<ExamPaper> examPaperList = tempConfig.getExamPaperList();
+        	System.out.println("原试卷数量:"+examPaperList.size());
+        	for(ExamPaper examPaper:examPaperList){
+        		ids.add(examPaper.getPaper().getId());
+        	}
+        	System.out.println("去重后的试卷数量:"+ids.size());
+        	//循环去重后的试卷
+        	for(String id:ids){
+        		Paper basePaper = paperRepo.findOne(id);
+        		//根据试卷查询所有小题
+        		List<PaperDetailUnit> allPaperDetailUnits = paperDetailUnitRepo.findByPaper(basePaper);
+        		//循环所有小题,寻找主观题
+        		for(PaperDetailUnit paperDetailUnit:allPaperDetailUnits){
+        			Question question = paperDetailUnit.getQuestion();
+        			//填空或问答
+        			if(question.getQuestionType()==QuesStructType.FILL_BLANK_QUESTION
+        					||question.getQuestionType()==QuesStructType.TEXT_ANSWER_QUESTION){
+        				String body = question.getQuesBody();
+        				String clearBody = body.replace("<p>", "").replace("</p>", "").replace("<span>", "").replace("</span>", "").replace("###", "___");
+        				String answer = question.getQuesAnswer();
+        				String clearAnswer = answer.replace("<p>", "").replace("</p>", "").replace("<span>", "").replace("</span>", "");
+        				SubQuestionDto dto = new SubQuestionDto();
+        				dto.setAnswer(answer);
+        				dto.setBody(body);
+        				dto.setClearAnswer(clearAnswer);
+        				dto.setClearBody(clearBody);
+        				dto.setCourseCode(tempConfig.getCourseCode());
+        				dto.setCourseName(tempConfig.getCourseName());
+        				dto.setNumber(paperDetailUnit.getNumber());
+        				dto.setPaperId(basePaper.getId());
+        				dto.setPaperName(basePaper.getName());
+        				dto.setScore(paperDetailUnit.getScore());
+        				dtos.add(dto);
+        			}
+        		}
+        	}
+        	j++;
+        }
+        
+        //生成Excel对象
+		File ddExcelFile = new File("H:\\subQuesDto.xlsx");
+		Workbook workBook = new XSSFWorkbook(ddExcelFile);
+		//获取第一个工作页
+		  Sheet sheet = workBook.getSheetAt(0);
+		  //向Excle中写入数据,从第2行开始
+		  for(int i = 0;i<dtos.size();i++){
+		  	  //创建一行:从第1行开始,跳过表头
+			  Row row = sheet.createRow(i+1);
+			  SubQuestionDto dto = dtos.get(i);
+			  //每列赋值
+		      row.createCell(0).setCellValue(dto.getCourseCode());
+		      row.createCell(1).setCellValue(dto.getCourseName());
+		      row.createCell(2).setCellValue(dto.getPaperId());
+		      row.createCell(3).setCellValue(dto.getPaperName());
+		      row.createCell(4).setCellValue(dto.getNumber());
+		      row.createCell(5).setCellValue(dto.getBody());
+		      row.createCell(6).setCellValue(dto.getClearBody());
+		      row.createCell(7).setCellValue(dto.getAnswer());
+		      row.createCell(8).setCellValue(dto.getClearAnswer());
+		      row.createCell(9).setCellValue(dto.getScore());
+		  }
+		  File file = new File("H:\\subQuesDtoNew.xlsx");
+		  OutputStream out = new FileOutputStream(file);
+		  workBook.write(out);
+		  out.close();
+		  System.out.println("结束...");
+	}
+	
 	
 	public static void main(String[] args){
 //		File ddExcelFile = new File("H:\\ddExcelDto.xlsx");

+ 139 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/temp/vo/SubQuestionDto.java

@@ -0,0 +1,139 @@
+package cn.com.qmth.examcloud.core.questions.service.temp.vo;
+/**
+ * @author 		weiwenhai
+ * @date		2018.11.23
+ * @description	主观题导出
+ */
+public class SubQuestionDto {
+
+	/**
+	 * 试卷id
+	 */
+	private String paperId;
+	
+	/**
+	 * 试卷名称
+	 */
+	private String paperName;
+	
+	/**
+	 * 课程代码
+	 */
+	private String courseCode;
+	
+	/**
+	 * 课程名称
+	 */
+	private String courseName;
+	
+	/**
+	 * 题目序号
+	 */
+	private Integer number;
+	
+	/**
+	 * 原题干
+	 */
+	private String body;
+	
+	/**
+	 * 去除标签后题干
+	 */
+	private String clearBody;
+	
+	/**
+	 * 原答案
+	 */
+	private String answer;
+	
+	/**
+	 * 去除标签答案
+	 */
+	private String clearAnswer;
+	
+	/**
+	 * 分数
+	 */
+	private Double score;
+
+	public String getPaperId() {
+		return paperId;
+	}
+
+	public void setPaperId(String paperId) {
+		this.paperId = paperId;
+	}
+
+	public String getPaperName() {
+		return paperName;
+	}
+
+	public void setPaperName(String paperName) {
+		this.paperName = paperName;
+	}
+
+	public String getCourseCode() {
+		return courseCode;
+	}
+
+	public void setCourseCode(String courseCode) {
+		this.courseCode = courseCode;
+	}
+
+	public String getCourseName() {
+		return courseName;
+	}
+
+	public void setCourseName(String courseName) {
+		this.courseName = courseName;
+	}
+
+	public Integer getNumber() {
+		return number;
+	}
+
+	public void setNumber(Integer number) {
+		this.number = number;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	public String getClearBody() {
+		return clearBody;
+	}
+
+	public void setClearBody(String clearBody) {
+		this.clearBody = clearBody;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+
+	public String getClearAnswer() {
+		return clearAnswer;
+	}
+
+	public void setClearAnswer(String clearAnswer) {
+		this.clearAnswer = clearAnswer;
+	}
+
+	public Double getScore() {
+		return score;
+	}
+
+	public void setScore(Double score) {
+		this.score = score;
+	}
+	
+}

+ 75 - 2
examcloud-core-questions-starter/src/test/java/cn/com/qmth/examcloud/core/questions/starter/PaperServiceTest.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.questions.starter;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
@@ -7,16 +8,23 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
+import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.dao.ExportServiceManageRepo;
 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.ExportServiceManage;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Paper;
 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.PaperService;
+import cn.com.qmth.examcloud.core.questions.service.temp.DdExcelService;
 
 /**
  * @author  	chenken
@@ -35,6 +43,12 @@ public class PaperServiceTest {
 	PaperRepo paperRepo;
 	@Autowired
 	PaperDetailUnitRepo unitRepo;
+	@Autowired
+	QuesRepo quesRepo;
+	@Autowired
+    private MongoTemplate mongoTemplate;
+	@Autowired
+	private DdExcelService dService;
 	
 	@Test
 	public void testUseBasePaper(){
@@ -44,8 +58,8 @@ public class PaperServiceTest {
 	}
 	
 	public static void main(String[] args){
-		String[] answers = {"A","B"};
-		System.out.println(StringUtils.join(answers,","));
+		String answers = "正确";
+		System.out.println(!answers.contains("正确"));
 	}
 	
 	
@@ -71,5 +85,64 @@ public class PaperServiceTest {
 			System.out.println("已经处理完第" + i + "试卷");
 		}
 	}
+	
+	@Test
+	public void updateQuestions(){
+		List<Question> questions = new ArrayList<Question>();
+		List<Question> updateQues = new ArrayList<Question>();
+		String orgId = "1";
+		QuesStructType questionType = QuesStructType.BOOL_ANSWER_QUESTION;
+		Query query = new Query();
+        query.addCriteria(Criteria.where("orgId").is(orgId));
+        query.addCriteria(Criteria.where("questionType").is(questionType));
+        long count = this.mongoTemplate.count(query, Question.class);
+        System.out.println("总体量:"+count);//18761
+        for(int i=0;i<190;i++){
+        	query.limit(100);
+        	query.skip(i * 100);
+        	List<Question> questionList = this.mongoTemplate.find(query, Question.class);
+        	questions.addAll(questionList);
+        	System.out.println("第"+i+"次查询");
+        }
+        System.out.println("试题集合总体量:"+questions.size());//18761
+		for(Question question:questions){
+			String answer = question.getQuesAnswer();
+			if(!answer.contains("正确") && !answer.contains("错误")){
+				if(!StringUtils.isBlank(answer)){
+					updateQues.add(question);
+				}
+			}
+		}
+		System.out.println("需要更新的试题量"+updateQues.size());
+		for(Question question:updateQues){
+			String answer = question.getQuesAnswer();
+			if(answer.contains("对")){
+				question.setQuesAnswer("正确");
+			}
+			if(answer.contains("错")){
+				question.setQuesAnswer("错误");
+			}
+		}
+		System.out.println("实际更新的试题量"+updateQues.size());
+		quesRepo.save(updateQues);
+	}
+	
+	@Test
+	public void exportPaper(){
+		List<String> codes = new ArrayList<String>();
+		codes.add("Q001002");
+		codes.add("Q001008");
+		codes.add("Q010072");
+		codes.add("Q011028");
+		codes.add("Q011089");
+		
+		codes.add("Q011101");
+		codes.add("Z012040");
+		try {
+			dService.exportSubQues("1", 105l, codes);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 }