瀏覽代碼

题目顺序问题

chen 5 年之前
父節點
當前提交
14da090285

+ 7 - 5
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionDealServiceImpl.java

@@ -22,6 +22,7 @@ import com.ssj.service.kmt.service.KmtExerciseQuestionDealService;
 import com.ssj.service.kmt.service.KmtExerciseQuestionService;
 import com.ssj.service.mapper.KmtExerciseMapper;
 import com.ssj.service.task.SyncSaveExerciseBookCourseTask;
+import com.ssj.service.task.SyncSaveExerciseBookTask;
 import com.ssj.service.task.SyncSaveExerciseQuestionsTask;
 import com.ssj.taskthread.ThreadPool;
 import com.ssj.utils.ExerciseUtil;
@@ -67,13 +68,15 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
                 //新增小题
                 if (request.getQuestionClassType() == 2){
                     KmtExerciseQuestion newQuestion = saveQuestion(book, request, nextQuestion, questionImage, answerImage);
-                    saveJSONFileAndEs(newQuestion, request, questionImage);
+                    saveJSONFile(newQuestion, request, questionImage);
+                    ThreadPool.getInstance().addTask(new SyncSaveExerciseBookTask(kmtExerciseMapper, exerciseQuestionSearchService, book.getBookId()));
                 } else {
                     //新增大题, 如果已存在当前大题号,则报错
                     String bqi = kmtExerciseMapper.findBigQuestionIndexByBookCourseId(nextQuestion.getBookCourseId(), request.getBigQuestionIndex());
                     if (StringUtil.isBlank(bqi)){
                         KmtExerciseQuestion newQuestion = saveQuestion(book, request, nextQuestion, questionImage, answerImage);
-                        saveJSONFileAndEs(newQuestion, request, questionImage);
+                        saveJSONFile(newQuestion, request, questionImage);
+                        ThreadPool.getInstance().addTask(new SyncSaveExerciseBookTask(kmtExerciseMapper, exerciseQuestionSearchService, book.getBookId()));
                     } else {
                         responseEntity.failure(ResponseConstant.CODE_000, "已存在大题号,请在大题号下直接添加小题");
                     }
@@ -84,7 +87,7 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
                     return responseEntity.failure(ResponseConstant.CODE_000, "大题号不能修改");
                 }
                 kmtExerciseMapper.updateQuestionEditData(request, questionImage, answerImage);
-                saveJSONFileAndEs(kmtExerciseQuestion, request, questionImage);
+                saveJSONFile(kmtExerciseQuestion, request, questionImage);
             }
             return responseEntity.success("成功");
         } else {
@@ -98,7 +101,7 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
      * @param request
      * @param questionImage
      */
-    private void saveJSONFileAndEs (KmtExerciseQuestion kmtExerciseQuestion, AddExerciseQuestionRequest request, String questionImage){
+    private void saveJSONFile (KmtExerciseQuestion kmtExerciseQuestion, AddExerciseQuestionRequest request, String questionImage){
         String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
         Map<String, Object> map = null;
         if (StringUtil.isBlank(content)){
@@ -114,7 +117,6 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
         map.put("analysis", request.getQuestionAnalysis());
         map.put("analysis_json", JSONArray.parse(request.getAnalysisJson()));
         JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath(), JSON.toJSONString(map));
-        ThreadPool.getInstance().addTask(new SyncSaveExerciseBookCourseTask(kmtExerciseMapper, exerciseQuestionSearchService, kmtExerciseQuestion.getBookCourseId()));
     }
 
     /**

+ 117 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/task/SyncSaveExerciseBookTask.java

@@ -0,0 +1,117 @@
+package com.ssj.service.task;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.ssj.bean.kmt.kmt.domain.KmtExerciseQuestion;
+import com.ssj.bean.sys.homework.domain.HomeworkPicture;
+import com.ssj.es.entiy.ElasticEntity;
+import com.ssj.es.service.ExerciseQuestionSearchService;
+import com.ssj.framework.core.util.PropertiesUtil;
+import com.ssj.framework.core.util.StringUtil;
+import com.ssj.kmt.utils.JSONFileUtil;
+import com.ssj.service.mapper.KmtExerciseMapper;
+import com.ssj.service.sys.homework.request.CorrectionRequest;
+import com.ssj.taskthread.Task;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+public class SyncSaveExerciseBookTask extends Task {
+
+    private String bookId = null;
+
+    private KmtExerciseMapper kmtExerciseMapper;
+
+    private ExerciseQuestionSearchService exerciseQuestionSearchService;
+
+    public SyncSaveExerciseBookTask(KmtExerciseMapper kmtExerciseMapper, ExerciseQuestionSearchService exerciseQuestionSearchService,  String bookId) {
+        this.bookId = bookId;
+        this.kmtExerciseMapper = kmtExerciseMapper;
+        this.exerciseQuestionSearchService = exerciseQuestionSearchService;
+    }
+
+    @Override
+    public void run() {
+        try {
+            Thread.sleep(2000);
+            List<KmtExerciseQuestion> kmtExerciseQuestions = kmtExerciseMapper.findByBookId(this.bookId);
+            this.appendQuestionDataFromJSONFile(kmtExerciseQuestions);
+            for (KmtExerciseQuestion kmtExerciseQuestion : kmtExerciseQuestions){
+                exerciseQuestionSearchService.save(JSON.parseObject(JSON.toJSONString(kmtExerciseQuestion), new TypeReference<Map<String, Object>>() {}));
+            }
+            List<String> questionIds = kmtExerciseQuestions.stream().map(KmtExerciseQuestion::getId).collect(Collectors.toList());
+            List<Map<String, Object>> knowEsData = kmtExerciseMapper.findData2EsByQuestionList(questionIds);
+            if (CollectionUtils.isNotEmpty(knowEsData)) {
+                this.appendQuestionMapFromJSONFile(knowEsData);
+
+                List<ElasticEntity> elasticEntityList = new ArrayList<>(knowEsData.size());
+                ElasticEntity elasticEntity;
+                String id = null;
+                for (Map<String, Object> kes : knowEsData) {
+                    id = kes.getOrDefault("id", "").toString();
+                    if (StringUtils.isBlank(id)){
+                        continue;
+                    }
+                    elasticEntity = new ElasticEntity();
+                    elasticEntity.setId(id);
+                    elasticEntity.setData(JSON.parseObject(JSON.toJSONString(kes), new TypeReference<Map<String, Object>>() {}));
+                    elasticEntityList.add(elasticEntity);
+                }
+                exerciseQuestionSearchService.insertOrUpdateBatch("kmt_exercise_question_know", elasticEntityList);
+            }
+        } catch (Exception e){
+            logger.error("异步保存es异常", e);
+        }
+    }
+
+    private void appendQuestionDataFromJSONFile(List<KmtExerciseQuestion> kmtExerciseQuestions) {
+        for (KmtExerciseQuestion kmtExerciseQuestion : kmtExerciseQuestions){
+            //读取大字段文件
+            if (StringUtil.isNotBlank(kmtExerciseQuestion.getQuestionPath())){
+                String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
+                if (StringUtils.isNotBlank(content)){
+                    JSONObject jsonObject = JSONObject.parseObject(content);
+                    kmtExerciseQuestion.setQuestion(jsonObject.getString("question"));
+                    kmtExerciseQuestion.setQuestionText(jsonObject.getString("question_text"));
+                    kmtExerciseQuestion.setQuestionJson(jsonObject.getString("question_json"));
+                    kmtExerciseQuestion.setOptionAnswer(jsonObject.getString("option_answer"));
+                    kmtExerciseQuestion.setOptionAnswerText(jsonObject.getString("option_answer_text"));
+                    kmtExerciseQuestion.setAnswerJson(jsonObject.getString("answer_json"));
+                    kmtExerciseQuestion.setAnalysis(jsonObject.getString("analysis"));
+                    kmtExerciseQuestion.setAnalysisJson(jsonObject.getString("analysis_json"));
+                }
+            }
+        }
+    }
+    private void appendQuestionMapFromJSONFile(List<Map<String, Object>> questions) {
+        for (Map<String, Object> map : questions){
+            //读取大字段文件
+            if (StringUtil.isNotBlank(map.get("question_path") + "")){
+                String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + map.get("question_path"));
+                if (StringUtils.isNotBlank(content)){
+                    JSONObject jsonObject = JSONObject.parseObject(content);
+                    map.put("question",jsonObject.getString("question"));
+                    map.put("question_text",jsonObject.getString("question_text"));
+                    map.put("question_json",jsonObject.getString("question_json"));
+                    map.put("option_answer",jsonObject.getString("option_answer"));
+                    map.put("option_answer_text",jsonObject.getString("option_answer_text"));
+                    map.put("answer_json",jsonObject.getString("answer_json"));
+                    map.put("analysis",jsonObject.getString("analysis"));
+                    map.put("analysis_json",jsonObject.getString("analysis_json"));
+                }
+            }
+        }
+    }
+}
+

+ 3 - 0
ssj-mybatis-service-impl/src/main/java/com/ssj/service/mapper/KmtExerciseMapper.java

@@ -1194,4 +1194,7 @@ public interface KmtExerciseMapper {
 
     @Select("select * from kmt_exercise_questions where book_course_id=#{bookCourseId}")
     List<KmtExerciseQuestion> findByBookCourseId (@Param("bookCourseId") String bookCourseId);
+
+    @Select("select * from kmt_exercise_questions where book_id=#{bookId} limit 2000")
+    List<KmtExerciseQuestion> findByBookId (@Param("bookId") String bookId);
 }