|
|
@@ -3,6 +3,7 @@ package com.ssj.service.kmt.kmt.service.impl;
|
|
|
import com.alibaba.dubbo.config.annotation.Service;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.ssj.bean.kmt.kmt.domain.KmtExerciseBook;
|
|
|
import com.ssj.bean.kmt.kmt.domain.KmtExerciseQuestion;
|
|
|
import com.ssj.bean.weixin.libmy.domain.TbLibManager;
|
|
|
@@ -15,8 +16,13 @@ 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.constant.KnowledgeVersion;
|
|
|
+import com.ssj.service.kmt.dto.exercise.ExerciseBookEditDto;
|
|
|
+import com.ssj.service.kmt.dto.exercise.ExerciseQuestionEditDto;
|
|
|
import com.ssj.service.kmt.request.rollbackai.AddExerciseQuestionRequest;
|
|
|
+import com.ssj.service.kmt.request.rollbackai.ExerciseBooksEditRequest;
|
|
|
import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionDealRequest;
|
|
|
+import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionsEditRequest;
|
|
|
import com.ssj.service.kmt.service.KmtExerciseBookService;
|
|
|
import com.ssj.service.kmt.service.KmtExerciseQuestionDealService;
|
|
|
import com.ssj.service.kmt.service.KmtExerciseQuestionService;
|
|
|
@@ -53,6 +59,8 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
private ExerciseQuestionSearchService exerciseQuestionSearchService;
|
|
|
@Autowired
|
|
|
private KmtExerciseBookService kmtExerciseBookService;
|
|
|
+ @Autowired
|
|
|
+ private KnowledgeVersion knowledgeVersion;
|
|
|
|
|
|
@Override
|
|
|
public ResponseEntity addOrEditExerciseQuestion(String userId, AddExerciseQuestionRequest request) {
|
|
|
@@ -62,19 +70,19 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
String answerImage = getImagePath(request.getAnswer());
|
|
|
|
|
|
if (StringUtils.isBlank(request.getQuestionId())){
|
|
|
- //题目id不存在则是新增, 新增需要把一个num减1
|
|
|
+ //题目id不存在则是新增, 前端传过来的是新增题目的上一题
|
|
|
KmtExerciseBook book = kmtExerciseBookService.getById(request.getExerciseBookId());
|
|
|
- KmtExerciseQuestion nextQuestion = kmtExerciseMapper.findNextByBookIdAndNum(book.getBookId(), request.getNum());
|
|
|
+ KmtExerciseQuestion previousQuestion = kmtExerciseMapper.findPreviousByBookIdAndNum(book.getBookId(), request.getNum());
|
|
|
//新增小题
|
|
|
if (request.getQuestionClassType() == 2){
|
|
|
- KmtExerciseQuestion newQuestion = saveQuestion(book, request, nextQuestion, questionImage, answerImage);
|
|
|
+ KmtExerciseQuestion newQuestion = saveQuestion(book, request, previousQuestion, questionImage, answerImage);
|
|
|
saveJSONFile(newQuestion, request, questionImage);
|
|
|
ThreadPool.getInstance().addTask(new SyncSaveExerciseBookTask(kmtExerciseMapper, exerciseQuestionSearchService, book.getBookId()));
|
|
|
} else {
|
|
|
//新增大题, 如果已存在当前大题号,则报错
|
|
|
- String bqi = kmtExerciseMapper.findBigQuestionIndexByBookCourseId(nextQuestion.getBookCourseId(), request.getBigQuestionIndex());
|
|
|
+ String bqi = kmtExerciseMapper.findBigQuestionIndexByBookCourseId(previousQuestion.getBookCourseId(), request.getBigQuestionIndex());
|
|
|
if (StringUtil.isBlank(bqi)){
|
|
|
- KmtExerciseQuestion newQuestion = saveQuestion(book, request, nextQuestion, questionImage, answerImage);
|
|
|
+ KmtExerciseQuestion newQuestion = saveQuestion(book, request, previousQuestion, questionImage, answerImage);
|
|
|
saveJSONFile(newQuestion, request, questionImage);
|
|
|
ThreadPool.getInstance().addTask(new SyncSaveExerciseBookTask(kmtExerciseMapper, exerciseQuestionSearchService, book.getBookId()));
|
|
|
} else {
|
|
|
@@ -175,21 +183,23 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private KmtExerciseQuestion saveQuestion(KmtExerciseBook book,AddExerciseQuestionRequest request, KmtExerciseQuestion nextQuestion, String questionImage, String answerImage){
|
|
|
- kmtExerciseMapper.updateQuestionNumByBookIdAndNum(book.getBookId(), request.getNum());
|
|
|
+ private KmtExerciseQuestion saveQuestion(KmtExerciseBook book,AddExerciseQuestionRequest request, KmtExerciseQuestion previousQuestion, String questionImage, String answerImage){
|
|
|
+ kmtExerciseMapper.updateQuestionNumByBookIdAndNum(book.getBookId(), request.getNum() + 1);
|
|
|
KmtExerciseQuestion kmtExerciseQuestion = new KmtExerciseQuestion();
|
|
|
String newQuestionId = IdWorker.generateId();
|
|
|
kmtExerciseQuestion.setId(newQuestionId);
|
|
|
- kmtExerciseQuestion.setBookId(nextQuestion.getBookId());
|
|
|
- kmtExerciseQuestion.setUnitId(nextQuestion.getUnitId());
|
|
|
- kmtExerciseQuestion.setBookCourseId(nextQuestion.getBookCourseId());
|
|
|
+ kmtExerciseQuestion.setBookId(previousQuestion.getBookId());
|
|
|
+ kmtExerciseQuestion.setUnitId(previousQuestion.getUnitId());
|
|
|
+ kmtExerciseQuestion.setBookCourseId(previousQuestion.getBookCourseId());
|
|
|
if (request.getQuestionClassType() == 2){
|
|
|
- kmtExerciseQuestion.setBigQuestionIndex(nextQuestion.getBigQuestionIndex());
|
|
|
- if (StringUtil.isBlank(nextQuestion.getParentId())){
|
|
|
- kmtExerciseQuestion.setParentId(null);
|
|
|
- kmtExerciseQuestion.setQuestionClassType(1);
|
|
|
+ kmtExerciseQuestion.setBigQuestionIndex(previousQuestion.getBigQuestionIndex());
|
|
|
+ if (StringUtil.isBlank(previousQuestion.getParentId()) && previousQuestion.getQuestionClassType() == 0){
|
|
|
+ //如果上一题是单题,修改为大标题
|
|
|
+ kmtExerciseMapper.updateKmtExerciseQuestionClassTypeAndParentId(null, 1, previousQuestion.getId());
|
|
|
+ kmtExerciseQuestion.setParentId(previousQuestion.getId());
|
|
|
+ kmtExerciseQuestion.setQuestionClassType(2);
|
|
|
} else {
|
|
|
- kmtExerciseQuestion.setParentId(nextQuestion.getParentId());
|
|
|
+ kmtExerciseQuestion.setParentId(previousQuestion.getParentId());
|
|
|
kmtExerciseQuestion.setQuestionClassType(2);
|
|
|
}
|
|
|
} else {
|
|
|
@@ -197,23 +207,20 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
kmtExerciseQuestion.setParentId(null);
|
|
|
kmtExerciseQuestion.setQuestionClassType(0);
|
|
|
}
|
|
|
- kmtExerciseQuestion.setPageIndex(nextQuestion.getPageIndex());
|
|
|
+ kmtExerciseQuestion.setPageIndex(previousQuestion.getPageIndex());
|
|
|
kmtExerciseQuestion.setImage(questionImage);
|
|
|
kmtExerciseQuestion.setCreateTime(new Date());
|
|
|
kmtExerciseQuestion.setDealStatus(3);
|
|
|
kmtExerciseQuestion.setAnswerImage(answerImage);
|
|
|
- kmtExerciseQuestion.setNum(nextQuestion.getNum());
|
|
|
+ kmtExerciseQuestion.setNum(previousQuestion.getNum() + 1);
|
|
|
kmtExerciseQuestion.setSmallQuestionName(request.getSmallQuestionIndex());
|
|
|
- kmtExerciseQuestion.setCourseName(nextQuestion.getCourseName());
|
|
|
- kmtExerciseQuestion.setIsCommonFlag(nextQuestion.getIsCommonFlag());
|
|
|
- kmtExerciseQuestion.setExerciseBookId(nextQuestion.getExerciseBookId());
|
|
|
+ kmtExerciseQuestion.setCourseName(previousQuestion.getCourseName());
|
|
|
+ kmtExerciseQuestion.setIsCommonFlag(previousQuestion.getIsCommonFlag());
|
|
|
+ kmtExerciseQuestion.setExerciseBookId(previousQuestion.getExerciseBookId());
|
|
|
kmtExerciseQuestion.setHandlerSubmitTime(DateUtil.parse_yyyyMMddHHmmss("1970-01-01 00:00:01"));
|
|
|
- kmtExerciseQuestion.setQuestionPath(nextQuestion.getQuestionPath().substring(0, nextQuestion.getQuestionPath().lastIndexOf("/")) + "/" + newQuestionId + ".json");
|
|
|
+ kmtExerciseQuestion.setQuestionPath(previousQuestion.getQuestionPath().substring(0, previousQuestion.getQuestionPath().lastIndexOf("/")) + "/" + newQuestionId + ".json");
|
|
|
// logger.error(JSON.toJSONString(kmtExerciseQuestion));
|
|
|
kmtExerciseQuestion = kmtExerciseQuestionService.save(kmtExerciseQuestion);
|
|
|
- if (request.getQuestionClassType() == 2 && StringUtil.isBlank(nextQuestion.getParentId())) {
|
|
|
- kmtExerciseMapper.updateParentIdAndClassType(kmtExerciseQuestion.getId(), 2, book.getBookId(), request.getNum());
|
|
|
- }
|
|
|
return kmtExerciseQuestion;
|
|
|
}
|
|
|
|
|
|
@@ -301,14 +308,59 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
if(kmtExerciseQuestion.getQuestionClassType() == 0) {
|
|
|
return responseEntity.failure(ResponseConstant.CODE_000, "单题不能移动小题,请使用移动大题功能");
|
|
|
}
|
|
|
+ //如果移动到最开始或最末尾, 提示不能再移动
|
|
|
+ String parentId = null;
|
|
|
+ if (StringUtil.isBlank(kmtExerciseQuestion.getParentId())){
|
|
|
+ parentId = kmtExerciseQuestion.getId();
|
|
|
+ } else {
|
|
|
+ parentId = kmtExerciseQuestion.getParentId();
|
|
|
+ }
|
|
|
+ List<KmtExerciseQuestion> tempList = kmtExerciseMapper.findQuByParentId(parentId);
|
|
|
//移动小题
|
|
|
if (request.getType() == 1){
|
|
|
- //上移
|
|
|
- kmtExerciseMapper.updateByBookIdAndNum(kmtExerciseQuestion.getBookId(), kmtExerciseQuestion.getNum(),kmtExerciseQuestion.getNum() - 1);
|
|
|
- kmtExerciseMapper.updateQuestionNumByQuestionId(kmtExerciseQuestion.getId(), kmtExerciseQuestion.getNum() - 1);
|
|
|
+ //第一个小题不能往上移
|
|
|
+ if (tempList != null && tempList.size() > 0){
|
|
|
+ if (kmtExerciseQuestion.getId().equals(tempList.get(0).getId())){
|
|
|
+ return responseEntity.failure(ResponseConstant.CODE_000, "已移动到第一小题");
|
|
|
+ }
|
|
|
+ //如果是第二个小题上移, 修改题目的父子关系
|
|
|
+ if (kmtExerciseQuestion.getId().equals(tempList.get(1).getId())){
|
|
|
+ //先特殊修改第一题和第二题, 第三题开始修改父题
|
|
|
+ kmtExerciseMapper.updateParentIdAndQuestionClassTypeAndNumById(null,
|
|
|
+ 1, kmtExerciseQuestion.getNum() - 1, kmtExerciseQuestion.getId());
|
|
|
+ kmtExerciseMapper.updateParentIdAndQuestionClassTypeAndNumById(kmtExerciseQuestion.getId(),
|
|
|
+ 2, kmtExerciseQuestion.getNum(), tempList.get(0).getId());
|
|
|
+ for (int i =2; i < tempList.size(); i++){
|
|
|
+ kmtExerciseMapper.updateParentIdById(kmtExerciseQuestion.getId(), tempList.get(i).getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //上移
|
|
|
+ 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);
|
|
|
+ //最后一个小题不能往下移
|
|
|
+ if (tempList != null && tempList.size() > 0){
|
|
|
+ if (kmtExerciseQuestion.getId().equals(tempList.get(tempList.size() - 1).getId())){
|
|
|
+ return responseEntity.failure(ResponseConstant.CODE_000, "已移动到最后一个小题的位置");
|
|
|
+ }
|
|
|
+ //如果是第一小题的下移, 修改题目父子关系
|
|
|
+ if (kmtExerciseQuestion.getId().equals(tempList.get(0).getId())){
|
|
|
+ //先特殊修改第一题和第二题, 第三题开始修改父题
|
|
|
+ kmtExerciseMapper.updateParentIdAndQuestionClassTypeAndNumById(tempList.get(1).getId(),
|
|
|
+ 2, kmtExerciseQuestion.getNum() + 1, kmtExerciseQuestion.getId());
|
|
|
+ kmtExerciseMapper.updateParentIdAndQuestionClassTypeAndNumById(null,
|
|
|
+ 1, kmtExerciseQuestion.getNum(), tempList.get(1).getId());
|
|
|
+ for (int i =2; i < tempList.size(); i++){
|
|
|
+ kmtExerciseMapper.updateParentIdById(tempList.get(1).getId(), tempList.get(i).getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //下移
|
|
|
+ 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){
|
|
|
@@ -366,4 +418,53 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseEntity findEditExerciseBooks(ExerciseBooksEditRequest request) {
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ List<ExerciseBookEditDto> list = kmtExerciseMapper.findEditExerciseBooks(request);
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+ data.put("books", list);
|
|
|
+ return responseEntity.success(data, "成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseEntity findEditExerciseQuestions(ExerciseQuestionsEditRequest request) {
|
|
|
+ Page page = new Page(request.getPageNo(), request.getPageSize());
|
|
|
+ List<ExerciseQuestionEditDto> list = kmtExerciseMapper.findEditExerciseQuestions(request, page);
|
|
|
+ Map<String, String> users = new HashMap<>();
|
|
|
+ for (ExerciseQuestionEditDto questionEditDto : list){
|
|
|
+ String versionStr = knowledgeVersion.getVersionNameBySubjectAndVersionNum(questionEditDto.getCourseName(), questionEditDto.getVersion());
|
|
|
+ questionEditDto.setVersionName(versionStr);
|
|
|
+ if (questionEditDto.getDealStatus() != 2){
|
|
|
+ questionEditDto.setEditStatus(2);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (questionEditDto.getType() == 1){
|
|
|
+ questionEditDto.setBookType("上半");
|
|
|
+ } else if (questionEditDto.getType() == 2){
|
|
|
+ questionEditDto.setBookType("下半");
|
|
|
+ } else if (questionEditDto.getType() == 3) {
|
|
|
+ questionEditDto.setBookType("不同");
|
|
|
+ } else {
|
|
|
+ questionEditDto.setBookType("整本");
|
|
|
+ }
|
|
|
+ if (users.containsKey(questionEditDto.getUserId())){
|
|
|
+ questionEditDto.setCreateUserName(users.get(questionEditDto.getUserId()));
|
|
|
+ } else {
|
|
|
+ TbLibManager libManager = bookManagerDao.findByUserIdAndType(questionEditDto.getUserId(), 17);
|
|
|
+ if (libManager != null){
|
|
|
+ questionEditDto.setCreateUserName(libManager.getName());
|
|
|
+ users.put(questionEditDto.getUserId(), libManager.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+ data.put("pageNo", page.getCurrent());
|
|
|
+ data.put("pageSize", page.getSize());
|
|
|
+ data.put("pages", page.getPages());
|
|
|
+ data.put("total", page.getTotal());
|
|
|
+ data.put("list", list);
|
|
|
+ return new ResponseEntity().success(data, "成功");
|
|
|
+ }
|
|
|
}
|