|
@@ -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"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|