Jelajahi Sumber

保存json修改

chen 5 tahun lalu
induk
melakukan
a007f81c56

+ 2 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionDealServiceImpl.java

@@ -20,6 +20,7 @@ import com.ssj.service.kmt.service.KmtExerciseBookService;
 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.SyncSaveExerciseQuestionsTask;
 import com.ssj.taskthread.ThreadPool;
 import com.ssj.utils.ExerciseUtil;
@@ -295,6 +296,7 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
                     }
                 }
             }
+            ThreadPool.getInstance().addTask(new SyncSaveExerciseBookCourseTask(kmtExerciseMapper, exerciseQuestionSearchService, kmtExerciseQuestion.getBookCourseId()));
             return responseEntity.success("成功");
         } else {
             return responseEntity.failure("没有操作权限");

+ 116 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/task/SyncSaveExerciseBookCourseTask.java

@@ -0,0 +1,116 @@
+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 SyncSaveExerciseBookCourseTask extends Task {
+
+    private String bookCourseId = null;
+
+    private KmtExerciseMapper kmtExerciseMapper;
+
+    private ExerciseQuestionSearchService exerciseQuestionSearchService;
+
+    public SyncSaveExerciseBookCourseTask(KmtExerciseMapper kmtExerciseMapper, ExerciseQuestionSearchService exerciseQuestionSearchService,  String bookCourseId) {
+        this.bookCourseId = bookCourseId;
+        this.kmtExerciseMapper = kmtExerciseMapper;
+        this.exerciseQuestionSearchService = exerciseQuestionSearchService;
+    }
+
+    @Override
+    public void run() {
+        try {
+            Thread.sleep(2000);
+            List<KmtExerciseQuestion> kmtExerciseQuestions = kmtExerciseMapper.findByBookCourseId(this.bookCourseId);
+            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

@@ -1191,4 +1191,7 @@ public interface KmtExerciseMapper {
 
     int updateQuestionAddNumByQuestionIds (@Param("questionIds") List<String> questionIds,
                                              @Param("size") int size);
+
+    @Select("select * from kmt_exercise_questions where book_course_id=#{bookCourseId}")
+    List<KmtExerciseQuestion> findByBookCourseId (@Param("bookCourseId") String bookCourseId);
 }