xiatian 1 year ago
parent
commit
81b2d06d17

+ 48 - 2
src/main/java/cn/com/qmth/dp/examcloud/oe/modules/export_course_questions_diff_count/ExportQuesDiffConsumer.java

@@ -1,23 +1,31 @@
 package cn.com.qmth.dp.examcloud.oe.modules.export_course_questions_diff_count;
 
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.aggregation.Aggregation;
 import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
 import org.springframework.data.mongodb.core.aggregation.AggregationResults;
 import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import cn.com.qmth.dp.examcloud.oe.entity.question.Course;
+import cn.com.qmth.dp.examcloud.oe.entity.question.Paper;
+import cn.com.qmth.dp.examcloud.oe.entity.question.PaperDetailUnit;
 import cn.com.qmth.dp.examcloud.oe.entity.question.Question;
 import cn.com.qmth.dp.examcloud.oe.enums.question.QuesStructType;
 import cn.com.qmth.dp.examcloud.oe.multithread.Consumer;
+import cn.com.qmth.examcloud.commons.util.DateUtil;
 
 @Service
 @Scope("prototype")
@@ -33,7 +41,7 @@ public class ExportQuesDiffConsumer extends Consumer<Course> {
 		String rootOrgId = (String) param.get("rootOrgId");
 		rd.setCourseCode(c.getCode());
 		rd.setCourseName(c.getName());
-		List<QuestionTypeCount> tc = countByType(c.getCode(), rootOrgId);
+		List<QuestionTypeCount> tc = countByType2(c.getCode(), rootOrgId);
 		if (CollectionUtils.isNotEmpty(tc)) {
 			setCount(rd, tc);
 		}
@@ -71,9 +79,15 @@ public class ExportQuesDiffConsumer extends Consumer<Course> {
 	}
 
 	private List<QuestionTypeCount> countByType(String courseCode, String rootOrgId) {
+        Date day=DateUtil.parse("2023-09-14 00:00:00", "yyyy-MM-dd HH:mm:ss");
 		List<AggregationOperation> operations = new ArrayList<>();
 		operations.add(Aggregation.match(
-				Criteria.where("orgId").is(rootOrgId).and("course.code").is(courseCode).and("creationBy").is(646523L)));
+				Criteria.where("orgId").is(rootOrgId)
+				.and("course.code").is(courseCode)
+				.and("creationBy").is(646523L)
+				.and("creationDate").gt(day)
+					)
+				);
 		operations.add(Aggregation.group("questionType", "difficulty").count().as("count"));
 		operations.add(Aggregation.project("count").andInclude("questionType").andInclude("difficulty"));
 		Aggregation aggregation = Aggregation.newAggregation(operations);
@@ -81,5 +95,37 @@ public class ExportQuesDiffConsumer extends Consumer<Course> {
 				QuestionTypeCount.class);
 		return outputTypeCount.getMappedResults();
 	}
+	
+	private List<QuestionTypeCount> countByType2(String courseCode, String rootOrgId) {
+		List<QuestionTypeCount> ret=new ArrayList<>();
+		Query query = new Query();
+		query.addCriteria(Criteria.where("orgId").is(rootOrgId));
+		query.addCriteria(Criteria.where("course.code").is(courseCode));
+		query.addCriteria(Criteria.where("paperType").is("IMPORT"));
+		query.with(Sort.by(Sort.Direction.DESC,"creationDate"));
+		List<Paper> ps = mongoTemplate.find(query, Paper.class);
+		if(ps.size()==0) {
+			return ret;
+		}
+		Query q2 = new Query();
+		q2.addCriteria(Criteria.where("paper.$id").is(new ObjectId(ps.get(0).getId())));
+		List<PaperDetailUnit> us = mongoTemplate.find(q2, PaperDetailUnit.class);
+		Map<String,QuestionTypeCount> map=new HashMap<>();
+		for(PaperDetailUnit u:us) {
+			String key=u.getQuestionType().name()+"_"+u.getQuestion().getDifficulty();
+			QuestionTypeCount tem=map.get(key);
+			if(tem==null) {
+				tem=new QuestionTypeCount();
+				tem.setDifficulty(u.getQuestion().getDifficulty());
+				tem.setQuestionType(u.getQuestionType().name());
+				map.put(key, tem);
+			}
+			tem.setCount(tem.getCount()+1);
+		}
+		for(QuestionTypeCount v:map.values()) {
+			ret.add(v);
+		}
+		return ret;
+	}
 
 }