chen hace 5 años
padre
commit
cfe6f3ed5e

+ 86 - 36
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionDealServiceImpl.java

@@ -14,13 +14,11 @@ import com.ssj.framework.core.util.StringUtil;
 import com.ssj.framework.idworker.IdWorker;
 import com.ssj.framework.weixin.util.DateUtil;
 import com.ssj.kmt.utils.JSONFileUtil;
-import com.ssj.service.kmt.exercisesys.request.ExerciseTeacherClassRequest;
 import com.ssj.service.kmt.request.rollbackai.AddExerciseQuestionRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionDealRequest;
 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.kmt.service.KmtExerciseService;
 import com.ssj.service.mapper.KmtExerciseMapper;
 import com.ssj.service.task.SyncSaveExerciseQuestionsTask;
 import com.ssj.taskthread.ThreadPool;
@@ -29,8 +27,6 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.script.Script;
-import org.elasticsearch.script.ScriptType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 @Service
 public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDealService {
@@ -65,41 +62,17 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
                 //题目id不存在则是新增, 新增需要把一个num减1
                 KmtExerciseBook book  = kmtExerciseBookService.getById(request.getExerciseBookId());
                 KmtExerciseQuestion nextQuestion = kmtExerciseMapper.findByBookIdAndNum(book.getBookId(), request.getNum());
-                kmtExerciseMapper.updateQuestionNumByBookIdAndNum(book.getBookId(), request.getNum());
                 //新增小题
                 if (request.getQuestionClassType() == 2){
-                    KmtExerciseQuestion kmtExerciseQuestion = new KmtExerciseQuestion();
-                    String newQuestionId = IdWorker.generateId();
-                    kmtExerciseQuestion.setId(newQuestionId);
-                    kmtExerciseQuestion.setBookId(nextQuestion.getBookId());
-                    kmtExerciseQuestion.setUnitId(nextQuestion.getUnitId());
-                    kmtExerciseQuestion.setBookCourseId(nextQuestion.getBookCourseId());
-                    kmtExerciseQuestion.setBigQuestionIndex(nextQuestion.getBigQuestionIndex());
-                    kmtExerciseQuestion.setPageIndex(nextQuestion.getPageIndex());
-                    kmtExerciseQuestion.setImage(questionImage);
-                    kmtExerciseQuestion.setCreateTime(new Date());
-                    kmtExerciseQuestion.setDealStatus(3);
-                    kmtExerciseQuestion.setAnswerImage(answerImage);
-                    kmtExerciseQuestion.setNum(nextQuestion.getNum());
-                    kmtExerciseQuestion.setSmallQuestionName(request.getSmallQuestionIndex());
-                    if (StringUtil.isBlank(nextQuestion.getParentId())){
-                        kmtExerciseQuestion.setParentId(null);
-                        kmtExerciseQuestion.setQuestionClassType(1);
-                        kmtExerciseMapper.updateParentIdAndClassType(newQuestionId, 2, book.getBookId(), request.getNum());
+                    saveQuestion(book, request, nextQuestion, questionImage, answerImage);
+                } else {
+                    //新增大题, 如果已存在当前大题号,则报错
+                    String bqi = kmtExerciseMapper.findBigQuestionIndexByBookCourseId(nextQuestion.getBookCourseId(), request.getBigQuestionIndex());
+                    if (StringUtil.isBlank(bqi)){
+                        saveQuestion(book, request, nextQuestion, questionImage, answerImage);
                     } else {
-                        kmtExerciseQuestion.setParentId(nextQuestion.getParentId());
-                        kmtExerciseQuestion.setQuestionClassType(2);
+                        responseEntity.failure(ResponseConstant.CODE_000, "已存在大题号,请在大题号下直接添加小题");
                     }
-                    kmtExerciseQuestion.setCourseName(nextQuestion.getCourseName());
-                    kmtExerciseQuestion.setIsCommonFlag(nextQuestion.getIsCommonFlag());
-                    kmtExerciseQuestion.setExerciseBookId(nextQuestion.getExerciseBookId());
-                    kmtExerciseQuestion.setHandlerSubmitTime(DateUtil.parse_yyyyMMddHHmmss("1970-01-01 00:00:01"));
-                    kmtExerciseQuestion.setQuestionPath(nextQuestion.getQuestionPath().substring(0, nextQuestion.getQuestionPath().lastIndexOf("/")) + newQuestionId + ".json");
-                    kmtExerciseQuestionService.save(kmtExerciseQuestion);
-                    saveJSONFileAndEs(kmtExerciseQuestion, request, questionImage);
-                } else {
-                    //新增大题
-
                 }
             } else {
                 KmtExerciseQuestion kmtExerciseQuestion = kmtExerciseQuestionService.getById(request.getQuestionId());
@@ -165,6 +138,45 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
         return result;
     }
 
+    private void saveQuestion(KmtExerciseBook book,AddExerciseQuestionRequest request, KmtExerciseQuestion nextQuestion, String questionImage, String answerImage){
+        kmtExerciseMapper.updateQuestionNumByBookIdAndNum(book.getBookId(), request.getNum());
+        KmtExerciseQuestion kmtExerciseQuestion = new KmtExerciseQuestion();
+        String newQuestionId = IdWorker.generateId();
+        kmtExerciseQuestion.setId(newQuestionId);
+        kmtExerciseQuestion.setBookId(nextQuestion.getBookId());
+        kmtExerciseQuestion.setUnitId(nextQuestion.getUnitId());
+        kmtExerciseQuestion.setBookCourseId(nextQuestion.getBookCourseId());
+        if (request.getQuestionClassType() == 2){
+            kmtExerciseQuestion.setBigQuestionIndex(nextQuestion.getBigQuestionIndex());
+            if (StringUtil.isBlank(nextQuestion.getParentId())){
+                kmtExerciseQuestion.setParentId(null);
+                kmtExerciseQuestion.setQuestionClassType(1);
+                kmtExerciseMapper.updateParentIdAndClassType(newQuestionId, 2, book.getBookId(), request.getNum());
+            } else {
+                kmtExerciseQuestion.setParentId(nextQuestion.getParentId());
+                kmtExerciseQuestion.setQuestionClassType(2);
+            }
+        } else {
+            kmtExerciseQuestion.setBigQuestionIndex(request.getBigQuestionIndex());
+            kmtExerciseQuestion.setParentId(null);
+            kmtExerciseQuestion.setQuestionClassType(0);
+        }
+        kmtExerciseQuestion.setPageIndex(nextQuestion.getPageIndex());
+        kmtExerciseQuestion.setImage(questionImage);
+        kmtExerciseQuestion.setCreateTime(new Date());
+        kmtExerciseQuestion.setDealStatus(3);
+        kmtExerciseQuestion.setAnswerImage(answerImage);
+        kmtExerciseQuestion.setNum(nextQuestion.getNum());
+        kmtExerciseQuestion.setSmallQuestionName(request.getSmallQuestionIndex());
+        kmtExerciseQuestion.setCourseName(nextQuestion.getCourseName());
+        kmtExerciseQuestion.setIsCommonFlag(nextQuestion.getIsCommonFlag());
+        kmtExerciseQuestion.setExerciseBookId(nextQuestion.getExerciseBookId());
+        kmtExerciseQuestion.setHandlerSubmitTime(DateUtil.parse_yyyyMMddHHmmss("1970-01-01 00:00:01"));
+        kmtExerciseQuestion.setQuestionPath(nextQuestion.getQuestionPath().substring(0, nextQuestion.getQuestionPath().lastIndexOf("/")) + newQuestionId + ".json");
+        kmtExerciseQuestionService.save(kmtExerciseQuestion);
+        saveJSONFileAndEs(kmtExerciseQuestion, request, questionImage);
+    }
+
 
 
     @Override
@@ -230,7 +242,6 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
             for (String qid : questionIds) {
                 kmtExerciseQuestionService.delete(qid);
             }
-
             //删除es
             QueryBuilder queryBuilder = QueryBuilders.termsQuery("id.keyword", questionIds);
             exerciseQuestionSearchService.deleteByQuery("kmt_exercise_questions", queryBuilder);
@@ -244,7 +255,46 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
     public ResponseEntity moveExerciseQuestion(String userId, ExerciseQuestionDealRequest request) {
         ResponseEntity responseEntity = new ResponseEntity();
         if (isManagerSubmit(userId)){
+            KmtExerciseQuestion kmtExerciseQuestion  = kmtExerciseQuestionService.getById(request.getQuestionId());
+            if (request.getQuestionClassType() == 2){
+                //移动小题
+                if (request.getType() == 1){
+                    //上移
+                    kmtExerciseMapper.updateByBookIdAndNum(kmtExerciseQuestion.getBookId(), kmtExerciseQuestion.getNum(),kmtExerciseQuestion.getNum() - 1);
+                    kmtExerciseMapper.updateQuestionNumByQuestionId(kmtExerciseQuestion.getId(), kmtExerciseQuestion.getNum() - 1);
+                } else if (request.getType() == 2){
+                    kmtExerciseMapper.updateByBookIdAndNum(kmtExerciseQuestion.getBookId(), kmtExerciseQuestion.getNum(), kmtExerciseQuestion.getNum() + 1);
+                    kmtExerciseMapper.updateQuestionNumByQuestionId(kmtExerciseQuestion.getId(), kmtExerciseQuestion.getNum() + 1);
+                }
+            } else  if (request.getQuestionClassType() == 1){
+                if (request.getType() == 1){
+                    //大题上移, 先查找上一题的题目id列表
+                    KmtExerciseQuestion previousQuestion = kmtExerciseMapper.findByBookIdAndNum(kmtExerciseQuestion.getBookId(), kmtExerciseQuestion.getNum() - 1);
+                    List<KmtExerciseQuestion> previousQuestions = kmtExerciseMapper.findQuestionsByBookCourseIdAndBigIndex(previousQuestion.getBookCourseId(), previousQuestion.getBigQuestionIndex());
+                    List<KmtExerciseQuestion> thisQuestions = kmtExerciseMapper.findQuestionsByBookCourseIdAndBigIndex(kmtExerciseQuestion.getBookCourseId(), kmtExerciseQuestion.getBigQuestionIndex());
+                    if (previousQuestions != null && thisQuestions != null){
+                        int preSize = previousQuestions.size();
+                        int thisSize = thisQuestions.size();
+                        List<String> previousIds = previousQuestions.stream().map(KmtExerciseQuestion::getId).collect(Collectors.toList());
+                        List<String> thisIds = thisQuestions.stream().map(KmtExerciseQuestion::getId).collect(Collectors.toList());
+                        kmtExerciseMapper.updateQuestionMinusNumByQuestionIds(thisIds, preSize);
+                        kmtExerciseMapper.updateQuestionAddNumByQuestionIds(previousIds, thisSize);
+                    }
+                } else if (request.getType() == 2){
+                    List<KmtExerciseQuestion> thisQuestions = kmtExerciseMapper.findQuestionsByBookCourseIdAndBigIndex(kmtExerciseQuestion.getBookCourseId(), kmtExerciseQuestion.getBigQuestionIndex());
+                    int thisSize = thisQuestions.size();
 
+                    KmtExerciseQuestion nextQuestion = kmtExerciseMapper.findByBookIdAndNum(kmtExerciseQuestion.getBookId(), kmtExerciseQuestion.getNum() + thisSize);
+                    List<KmtExerciseQuestion> nextQuestions = kmtExerciseMapper.findQuestionsByBookCourseIdAndBigIndex(nextQuestion.getBookCourseId(), nextQuestion.getBigQuestionIndex());
+                    if (nextQuestions != null && thisQuestions != null){
+                        int nextSize = nextQuestions.size();
+                        List<String> nextIds = nextQuestions.stream().map(KmtExerciseQuestion::getId).collect(Collectors.toList());
+                        List<String> thisIds = thisQuestions.stream().map(KmtExerciseQuestion::getId).collect(Collectors.toList());
+                        kmtExerciseMapper.updateQuestionMinusNumByQuestionIds(nextIds, thisSize);
+                        kmtExerciseMapper.updateQuestionAddNumByQuestionIds(thisIds, nextSize);
+                    }
+                }
+            }
             return responseEntity.success("成功");
         } else {
             return responseEntity.failure("没有操作权限");

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

@@ -1167,4 +1167,28 @@ public interface KmtExerciseMapper {
                                     @Param("questionClassType") int questionClassType,
                                     @Param("bookId") String bookId,
                                     @Param("num") int num);
+    @Select("select big_question_index from kmt_exercise_questions where book_course_id=#{bookCourseId} " +
+            " and big_question_index=#{bigQuestionIndex} ")
+    String findBigQuestionIndexByBookCourseId (@Param("bookCourseId") String bookCourseId,
+                                               @Param("bigQuestionIndex") String bigQuestionIndex);
+
+    @Select("select * from kmt_exercise_questions where book_course_id=#{bookCourseId} " +
+            " and big_question_index=#{bigQuestionIndex} ")
+    List<KmtExerciseQuestion> findQuestionsByBookCourseIdAndBigIndex (@Param("bookCourseId") String bookCourseId,
+                                               @Param("bigQuestionIndex") String bigQuestionIndex);
+
+    @Update("update kmt_exercise_questions set num = #{updateNum} where book_id=#{bookId} and num = #{num}")
+    int updateByBookIdAndNum (@Param("bookId") String bookId,
+                              @Param("updateNum") int updateNum,
+                              @Param("num") int num);
+
+    @Update("update kmt_exercise_questions set num = #{updateNum} where id=#{questionId}")
+    int updateQuestionNumByQuestionId (@Param("questionId") String questionId,
+                              @Param("updateNum") int updateNum);
+
+    int updateQuestionMinusNumByQuestionIds (@Param("questionIds") List<String> questionIds,
+                                       @Param("size") int size);
+
+    int updateQuestionAddNumByQuestionIds (@Param("questionIds") List<String> questionIds,
+                                             @Param("size") int size);
 }

+ 14 - 0
ssj-mybatis-service-impl/src/main/resources/mybatis/mapper/KmtExerciseMapper.xml

@@ -1999,4 +1999,18 @@
         from kmt_exercise_questions eq  left join kmt_exercise_book eb on eq.exercise_book_id=eb.id
         where eq.id=#{questionId}
     </select>
+
+    <update id="updateQuestionMinusNumByQuestionIds">
+        UPDATE kmt_exercise_questions set num= num - #{size} WHERE id in
+        <foreach collection="questionIds" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </update>
+
+    <update id="updateQuestionAddNumByQuestionIds">
+        UPDATE kmt_exercise_questions set num= num + #{size} WHERE id in
+        <foreach collection="questionIds" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </update>
 </mapper>