Просмотр исходного кода

Merge branch 'bug-branch' of chchen/exercise into master

题号抹除修改
chchen 4 лет назад
Родитель
Сommit
90a0e92824

+ 2 - 2
ssj-common-oss/src/main/java/com/ssj/framework/core/util/OSSUtils.java

@@ -147,12 +147,12 @@ public class OSSUtils {
 
 
     //重载方法 下载文件
-    public void downloadFile(String downloadPath,String key){
+    public static void downloadFile(String downloadPath,String key){
         downloadFile(bucketName,downloadPath,key);
     }
 
     //重载方法 下载文件
-    public void downloadFile(String bucketName,String downloadPath,String key){
+    public static void downloadFile(String bucketName,String downloadPath,String key){
         OSSClient ossClient=OSSUtils.getOSSClient();
         try {
             DownloadFileRequest downloadFileRequest=new DownloadFileRequest(bucketName, key);

+ 2 - 1
ssj-common-service/src/main/resources/application-common-dev.properties

@@ -72,7 +72,8 @@ spring.rabbitmq.publisher-returns=true
 
 
 dubbo.registry.id=ssj-dubbo-registry
-dubbo.registry.address=zookeeper://47.112.200.206:2181
+#dubbo.registry.address=zookeeper://47.112.200.206:2181
+dubbo.registry.address=zookeeper://127.0.0.1:2181
 dubbo.protocol.serialization=java
 dubbo.consumer.timeout=50000
 

+ 16 - 0
ssj-kmt-exercise-api/src/main/java/com/ssj/aijia/kmt/exercise/controller/KmtExerciseController.java

@@ -21,6 +21,7 @@ import com.ssj.service.kmt.dto.KmtSysUserDTO;
 import com.ssj.service.kmt.dto.exercise.ExerciseQuestionRollbacks;
 import com.ssj.service.kmt.exercise.request.SubmitAnswerProofreadResultReq;
 import com.ssj.service.kmt.request.*;
+import com.ssj.service.kmt.request.questionmark.QuestionNumMarkRemoveVo;
 import com.ssj.service.kmt.request.rollbackai.AddExerciseQuestionRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseBooksEditRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionDealRequest;
@@ -721,4 +722,19 @@ public class KmtExerciseController extends BaseController {
         return responseEntity;
     }
 
+    @RequestMapping(value = "/removeQuestionNumMark", method = RequestMethod.POST)
+    @ApiOperation(value = "抹除题目题号", httpMethod = "POST", notes = "抹除题目题号")
+    public ResponseEntity removeQuestionNumMark(@RequestParam(name = "accessToken") String accessToken,
+                                                    @RequestBody QuestionNumMarkRemoveVo request) {
+        ResponseEntity responseEntity = new ResponseEntity();
+        try {
+            String userId = tokenManager.getUserId(accessToken);
+            responseEntity = kmtExerciseQuestionDealService.removeQuestionNumMark(userId, request);
+        } catch (Exception e) {
+            logger.error("异常", e);
+            responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
+        }
+        return responseEntity;
+    }
+
 }

+ 164 - 4
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionDealServiceImpl.java

@@ -3,22 +3,21 @@ 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.aliyun.oss.OSSClient;
 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;
 import com.ssj.dao.weixin.library.dao.IBookManagerDao;
 import com.ssj.es.service.ExerciseQuestionSearchService;
-import com.ssj.framework.core.util.PropertiesUtil;
-import com.ssj.framework.core.util.ResponseConstant;
-import com.ssj.framework.core.util.ResponseEntity;
-import com.ssj.framework.core.util.StringUtil;
+import com.ssj.framework.core.util.*;
 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.questionmark.QuestionNumMarkRemoveVo;
 import com.ssj.service.kmt.request.rollbackai.AddExerciseQuestionRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseBooksEditRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionDealRequest;
@@ -34,6 +33,7 @@ import com.ssj.taskthread.ThreadPool;
 import com.ssj.utils.ExerciseUtil;
 import com.ssj.utils.SortByChineseUtil;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
@@ -41,6 +41,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -198,6 +206,8 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
         }
         if (list.size() > 0){
             result = list.get(0).replace(PropertiesUtil.getValue("STATIC_FILE_URL"), "");
+            //测试环境图片可能用的是正式的图片,再做一次replace
+            result = result.replace("https://img.sharingschool.com", "");
         }
         return result;
     }
@@ -528,4 +538,154 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
         data.put("list", list);
         return new ResponseEntity().success(data, "成功");
     }
+
+    @Override
+    public ResponseEntity removeQuestionNumMark(String userId, QuestionNumMarkRemoveVo request) {
+        ResponseEntity responseEntity = new ResponseEntity();
+        if (request.getStartX() < 0 || request.getStartY() < 0 || request.getEndX() < 0 || request.getEndY() < 0){
+            return  responseEntity.failure("请把坐标定位在图片内");
+        }
+
+        KmtExerciseQuestion kmtExerciseQuestion = kmtExerciseQuestionService.getById(request.getQuestionId());
+        kmtExerciseMapper.updateQuestionStartPointAndEndPoint(request.getStartX(), request.getStartY(),
+                request.getEndX(), request.getEndY(), request.getQuestionId());
+        TbLibManager manager = bookManagerDao.findByUserIdAndType(userId, 18);
+        if (manager != null && kmtExerciseQuestion != null && kmtExerciseQuestion.getDealStatus() > 3 && kmtExerciseQuestion.getDealStatus() != 7) {
+            String path = this.removeQuestionNumMark(request.getStartX(), request.getStartY(), request.getEndX(), request.getEndY(), kmtExerciseQuestion.getImage());
+            String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
+            if (StringUtil.isNotBlank(content) && StringUtil.isNotBlank(path)) {
+                Map<String, Object> map = JSON.parseObject(content, Map.class);
+                map.put("question_json", Collections.singletonList(ExerciseUtil.getExerciseQuestionAnswerValue(path)));
+                map.put("question", "<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + path + "'/>");
+                JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath(), JSON.toJSONString(map));
+                ThreadPool.getInstance().addTask(new SyncSaveExerciseQuestionsTask(kmtExerciseMapper, exerciseQuestionSearchService,  Collections.singletonList(kmtExerciseQuestion.getId())));
+            }
+        }
+        return responseEntity.success("成功");
+    }
+
+    @Override
+    public String  removeQuestionNumMark(int startX, int startY, int endX, int endY, String filePath) {
+        int temp = 0;
+        if (startX > endX){
+            temp = startX;
+            startX = endX;
+            endX = temp;
+        }
+        if (startY > endY){
+            temp = startY;
+            startY = endY;
+            endY = temp;
+        }
+        String result = null;
+        if (StringUtil.isNotBlank(filePath) && endX > 0 && endY > 0){
+            //1、查询是否有备份图片,没有的话新增一个备份图片
+            //this.checkBakImage(filePath);
+            //2、生成一个临时图片, 图片区域填充, 临时图片要随机, 把图片上传到oss
+            result = this.createNewFile(startX, startY, endX, endY, filePath);
+        }
+        return result;
+    }
+
+    /**
+     * 检查是否有备份图片
+     * @param relatePath
+     */
+    private void checkBakImage (String relatePath){
+        String bakParentPath = "/www/files/data/upload/ai/picture_bak/"; //备份图片父级目录
+        if (relatePath.indexOf("/ai/results") != -1){
+            String filePath = relatePath.replace("/ai/results/", bakParentPath); //备份图片绝对路径
+            //如果目录不存在,新建目录,如果存在,判断文件是否存在
+            String dir = filePath.substring(0, filePath.lastIndexOf("/") + 1);
+            File dirFile = new File(dir);
+            if (!dirFile.exists()){
+                dirFile.mkdirs();
+            }
+            File file  = new File(filePath);
+            if (!file.exists()){
+              OSSUtils.downloadFile(filePath, relatePath.substring(1));
+            }
+        } else {
+            logger.error("图片路径不存在 = {}", relatePath);
+        }
+    }
+
+    private String createNewFile (int startX, int startY, int endX, int endY, String relatePath) {
+        String prefix = PropertiesUtil.getValue("file_save_path");
+        String dir = relatePath.substring(0, relatePath.lastIndexOf("/") + 1);
+        String fileName = relatePath.substring(relatePath.lastIndexOf("/") + 1, relatePath.lastIndexOf("."));
+        String resultFilePath = prefix + dir  + "result_" + fileName + relatePath.substring(relatePath.lastIndexOf("."));
+//        OSSUtils.downloadFile(resultFilePath, relatePath.substring(1));
+        boolean result = drawImagePartColorByPosition(startX, startY, endX, endY, resultFilePath, relatePath);
+        if (result){
+            OSSUtils.uploadFile(resultFilePath, resultFilePath.replace(prefix + "/", ""));
+            return resultFilePath.replace(prefix, "");
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 区域颜色填充,以左上角颜色填充
+     * @param minx
+     * @param miny
+     * @param maxx
+     * @param maxy
+     * @param filePath
+     */
+    public boolean drawImagePartColorByPosition (int minx, int miny,  int maxx, int maxy, String filePath, String relatePath) {
+        BufferedImage bi = null;
+        boolean result = true;
+        try {
+            //有宽高的才处理
+            if (maxx > 0 && maxy > 0){
+                String prefix = PropertiesUtil.getValue("OSS_INTERNAL_PATH");
+//                String prefix = "https://xt-sharingschool.oss-cn-shenzhen.aliyuncs.com";
+                bi = ImageIO.read(getImageStream(prefix + relatePath));
+                int pixel = bi.getRGB(minx, miny); //左上角像素值
+//                int pixel = -256;
+                for (int i = minx; i < maxx; i++) {
+                    for (int j = miny; j < maxy; j++) {
+                        bi.setRGB(i, j, pixel);
+                    }
+                }
+                File file = new File(filePath);
+                String dirPath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
+                File dir = new File(dirPath);
+                if (!dir.exists()){
+                    dir.mkdirs();
+                }
+                FileOutputStream ops = new FileOutputStream(file);
+                ImageIO.write(bi, filePath.substring(filePath.lastIndexOf(".") + 1), ops);
+                ops.flush();
+                ops.close();
+            }
+        } catch (Exception e) {
+            logger.error("异常", e);
+            result = false;
+        }
+        return result;
+    }
+
+    /**
+     * 获取网络图片流
+     *
+     * @param url
+     * @return
+     */
+    private InputStream getImageStream(String url) {
+        try {
+            HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+            connection.setReadTimeout(5000);
+            connection.setConnectTimeout(5000);
+            connection.setRequestMethod("GET");
+            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
+                InputStream inputStream = connection.getInputStream();
+                return inputStream;
+            }
+        } catch (IOException e) {
+            logger.error("获取网络图片出现异常,图片路径为:" + url);
+        }
+        return null;
+    }
 }

+ 5 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionServiceImpl.java

@@ -171,6 +171,11 @@ public class KmtExerciseQuestionServiceImpl extends BaseServiceImpl<KmtExerciseQ
                 }
             }
             kmtExerciseService.appendQuestionDtoDataFromJSONFile(questions);
+            for (ExerciseQuetionDto q : questions){
+                if (StringUtil.isNotBlank(q.getQuestionImage())){
+                    q.setQuestion("<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + q.getQuestionImage() + "'/>");
+                }
+            }
             list = this.getQuestionGroupList(questions, true);
         }
         data.put("list", list);

+ 18 - 1
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseServiceImpl.java

@@ -34,6 +34,7 @@ import com.ssj.service.weixin.push.service.PushTemplateService;
 import com.ssj.service.weixin.user.service.UserService;
 import com.ssj.service.weixin.zuoyb.service.ZuoybKnowHowDetailsSortService;
 import com.ssj.taskthread.ThreadPool;
+import com.ssj.utils.ExerciseUtil;
 import com.ssj.utils.SortByChineseUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -88,7 +89,8 @@ public class KmtExerciseServiceImpl implements KmtExerciseService {
     private PushTemplateService pushTemplateService;
     @Autowired
     private KmtQualityQuestionsService kmtQualityQuestionsService;
-
+    @Autowired
+    private KmtExerciseQuestionDealService kmtExerciseQuestionDealService;
 
     @Autowired
     private TokenManager tokenManager;
@@ -433,6 +435,21 @@ public class KmtExerciseServiceImpl implements KmtExerciseService {
                     kmtExerciseQuestion.setDealStatus(4);
                 } else {
                     kmtExerciseQuestion.setDealStatus(5);
+                    int startX = 0;
+                    if (StringUtil.isNotBlank(kmtExerciseQuestion.getConciseId())){
+                        startX = Integer.parseInt(kmtExerciseQuestion.getConciseId());
+                    }
+                    String path = kmtExerciseQuestionDealService.removeQuestionNumMark(startX, kmtExerciseQuestion.getAnalysisSubmitType(),
+                            kmtExerciseQuestion.getUpdateType(), kmtExerciseQuestion.getEsLoaded(), kmtExerciseQuestion.getImage());
+                    String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
+                    if (StringUtil.isNotBlank(content) && StringUtil.isNotBlank(path)){
+                        Map<String, Object> map = JSON.parseObject(content, Map.class);
+                        map.put("question_json", Collections.singletonList(ExerciseUtil.getExerciseQuestionAnswerValue(path)));
+                        map.put("question", "<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + path + "'/>");
+                        JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath(), JSON.toJSONString(map));
+                        kmtExerciseQuestion.setQuestionJson(JSON.toJSONString(map.get("question_json")));
+                        kmtExerciseQuestion.setQuestion((String)map.get("question"));
+                    }
                 }
                 kmtExerciseQuestion.setPublishTime(new Date());
             } else if (kmtExerciseQuestion.getDealStatus() == 0 || kmtExerciseQuestion.getDealStatus() == 1){

+ 22 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseSubmitServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ssj.service.kmt.kmt.service.impl;
 
 import com.alibaba.dubbo.config.annotation.Service;
+import com.alibaba.fastjson.JSON;
 import com.ssj.bean.kmt.kmt.domain.KmtExerciseBook;
 import com.ssj.bean.kmt.kmt.domain.KmtExerciseQuestion;
 import com.ssj.bean.kmt.kmt.domain.KmtExerciseQuestionKnow;
@@ -14,16 +15,19 @@ import com.ssj.dao.weixin.zuoyb.dao.ZuoybKnowHowDetailsSortDao;
 import com.ssj.es.service.ExerciseQuestionSearchService;
 import com.ssj.es.service.base.BaseSearchService;
 import com.ssj.framework.core.security.manager.TokenManager;
+import com.ssj.framework.core.util.PropertiesUtil;
 import com.ssj.framework.core.util.ResponseConstant;
 import com.ssj.framework.core.util.ResponseEntity;
 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.dto.KnowHowDetailsDTO;
 import com.ssj.service.kmt.dto.KnowledgeBaseDto;
 import com.ssj.service.kmt.exercisesys.enums.ProofreadStatusEnum;
 import com.ssj.service.kmt.request.AuditingV1Request;
 import com.ssj.service.kmt.request.QuestionUpdateRequest;
+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.kmt.service.KmtExerciseSubmitService;
@@ -31,6 +35,7 @@ import com.ssj.service.mapper.KmtExerciseMapper;
 import com.ssj.service.task.SyncRefreshExerciseBookStatusTask;
 import com.ssj.service.weixin.push.service.PushTemplateService;
 import com.ssj.taskthread.ThreadPool;
+import com.ssj.utils.ExerciseUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.index.query.QueryBuilder;
@@ -69,6 +74,8 @@ public class KmtExerciseSubmitServiceImpl implements KmtExerciseSubmitService {
     private BaseSearchService baseSearchService;
     @Autowired
     private ExerciseQuestionSearchService exerciseQuestionSearchService;
+    @Autowired
+    private KmtExerciseQuestionDealService kmtExerciseQuestionDealService;
 
 
     @Override
@@ -509,6 +516,21 @@ public class KmtExerciseSubmitServiceImpl implements KmtExerciseSubmitService {
                     this.updateKmtQuestionCommonData(question, updateRequest);
                     question.setPublishTime(new Date());
                     question.setDealStatus(5);
+                    int startX = 0;
+                    if (StringUtil.isNotBlank(question.getConciseId())){
+                        startX = Integer.parseInt(question.getConciseId());
+                    }
+                    String path = kmtExerciseQuestionDealService.removeQuestionNumMark(startX, question.getAnalysisSubmitType(),
+                            question.getUpdateType(), question.getEsLoaded(), question.getImage());
+                    String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + question.getQuestionPath());
+                    if (StringUtil.isNotBlank(content) && StringUtil.isNotBlank(path)){
+                        Map<String, Object> map = JSON.parseObject(content, Map.class);
+                        map.put("question_json", Collections.singletonList(ExerciseUtil.getExerciseQuestionAnswerValue(path)));
+                        map.put("question", "<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + path + "'/>");
+                        JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + question.getQuestionPath(), JSON.toJSONString(map));
+                        question.setQuestionJson(JSON.toJSONString(map.get("question_json")));
+                        question.setQuestion((String)map.get("question"));
+                    }
                 }
             }
         }

+ 40 - 0
ssj-kmt-exercise-service/src/main/java/com/ssj/service/kmt/dto/ExerciseQuetionDto.java

@@ -93,6 +93,14 @@ public class ExerciseQuetionDto implements Serializable {
 
     private int isCommonFlag;
 
+    private int startX;
+
+    private int startY;
+
+    private int endX;
+
+    private int endY;
+
     @JSONField(serialize = false)
     private String handleUserId;
 
@@ -727,4 +735,36 @@ public class ExerciseQuetionDto implements Serializable {
     public void setIsCommonFlag(int isCommonFlag) {
         this.isCommonFlag = isCommonFlag;
     }
+
+    public int getStartX() {
+        return startX;
+    }
+
+    public void setStartX(int startX) {
+        this.startX = startX;
+    }
+
+    public int getStartY() {
+        return startY;
+    }
+
+    public void setStartY(int startY) {
+        this.startY = startY;
+    }
+
+    public int getEndX() {
+        return endX;
+    }
+
+    public void setEndX(int endX) {
+        this.endX = endX;
+    }
+
+    public int getEndY() {
+        return endY;
+    }
+
+    public void setEndY(int endY) {
+        this.endY = endY;
+    }
 }

+ 58 - 0
ssj-kmt-exercise-service/src/main/java/com/ssj/service/kmt/request/questionmark/QuestionNumMarkRemoveVo.java

@@ -0,0 +1,58 @@
+package com.ssj.service.kmt.request.questionmark;
+
+import com.ssj.bean.common.framework.core.domain.BaseRequest;
+
+public class QuestionNumMarkRemoveVo extends BaseRequest {
+
+    private static final long serialVersionUID = 1L;
+
+    private String questionId;
+
+    private int startX;
+
+    private int startY;
+
+    private int endX;
+
+    private int endY;
+
+    public String getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(String questionId) {
+        this.questionId = questionId;
+    }
+
+    public int getStartX() {
+        return startX;
+    }
+
+    public void setStartX(int startX) {
+        this.startX = startX;
+    }
+
+    public int getStartY() {
+        return startY;
+    }
+
+    public void setStartY(int startY) {
+        this.startY = startY;
+    }
+
+    public int getEndX() {
+        return endX;
+    }
+
+    public void setEndX(int endX) {
+        this.endX = endX;
+    }
+
+    public int getEndY() {
+        return endY;
+    }
+
+    public void setEndY(int endY) {
+        this.endY = endY;
+    }
+}

+ 11 - 0
ssj-kmt-exercise-service/src/main/java/com/ssj/service/kmt/service/KmtExerciseQuestionDealService.java

@@ -1,6 +1,7 @@
 package com.ssj.service.kmt.service;
 
 import com.ssj.framework.core.util.ResponseEntity;
+import com.ssj.service.kmt.request.questionmark.QuestionNumMarkRemoveVo;
 import com.ssj.service.kmt.request.rollbackai.AddExerciseQuestionRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseBooksEditRequest;
 import com.ssj.service.kmt.request.rollbackai.ExerciseQuestionDealRequest;
@@ -45,4 +46,14 @@ public interface KmtExerciseQuestionDealService {
      * @return
      */
     ResponseEntity findEditExerciseQuestions (ExerciseQuestionsEditRequest request);
+
+    /**
+     * 删除题号
+     * @param userId
+     * @param request
+     * @return
+     */
+    ResponseEntity removeQuestionNumMark (String userId, QuestionNumMarkRemoveVo request);
+
+    String  removeQuestionNumMark(int startX, int startY, int endX, int endY, String filePath);
 }

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

@@ -1263,4 +1263,12 @@ public interface KmtExerciseMapper {
 
     List<ExerciseBookEditDto> findErrorExerciseBooks(@Param("bookName") String bookName,
                                                      @Param("userId") String userId);
+
+    @Update("update kmt_exercise_questions set concise_id=#{startX}, analysis_submit_type=#{startY}, update_type=#{endX}," +
+            " es_loaded=#{endY} where id=#{questionId}")
+    int updateQuestionStartPointAndEndPoint (@Param("startX") int startX,
+                                             @Param("startY") int startY,
+                                             @Param("endX") int endX,
+                                             @Param("endY") int endY,
+                                             @Param("questionId") String questionId);
 }

+ 6 - 3
ssj-mybatis-service-impl/src/main/resources/mybatis/mapper/KmtExerciseMapper.xml

@@ -108,7 +108,8 @@
         eq.big_question_index, eq.small_question_name small_question_index, eq.is_common_flag,
         eq.deal_status question_status, eq.create_time, eq.remark reason, eq.from_user_id, eq.to_user_id,
         eq.question_type question_types, eq.difficulty_level difficulty_levels, eq.real_exam_type real_exam_types,
-        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num, eq.page_index, eq.create_time
+        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num, eq.page_index,
+        eq.image question_image, eq.concise_id start_X, eq.analysis_submit_type start_Y, eq.update_type end_X, eq.es_loaded end_Y
         from kmt_exercise_questions eq  left join kmt_exercise_book eb on eq.exercise_book_id=eb.id
         where eq.book_course_id = #{bookCourseId} and (eq.exercise_book_id=#{exerciseBookId} or eq.is_common_flag = 0)
         <if test = "dealType == 2">
@@ -155,7 +156,8 @@
         eq.big_question_index, eq.small_question_name small_question_index,
         eq.deal_status question_status, eq.create_time, eq.remark reason, eq.from_user_id, eq.to_user_id,
         eq.question_type question_types, eq.difficulty_level difficulty_levels, eq.real_exam_type real_exam_types,
-        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num, eq.page_index, eq.create_time
+        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num, eq.page_index,
+        eq.image question_image, eq.concise_id start_X, eq.analysis_submit_type start_Y, eq.update_type end_X, eq.es_loaded end_Y
         from kmt_exercise_questions eq  left join kmt_exercise_book eb on eq.exercise_book_id=eb.id
         where eq.book_course_id = #{bookCourseId} and eq.exercise_book_id=#{exerciseBookId}
         order by eq.num, eq.create_time
@@ -2026,7 +2028,8 @@
         eq.big_question_index, eq.small_question_name small_question_index, eq.is_common_flag,
         eq.deal_status question_status, eq.create_time, eq.remark reason, eq.from_user_id, eq.to_user_id,
         eq.question_type question_types, eq.difficulty_level difficulty_levels, eq.real_exam_type real_exam_types,
-        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num, eq.page_index, eq.create_time
+        eq.training_skill training_skills, eq.parent_id, eq.proofread_status, eq.question_path, eq.num,eq.page_index,
+        eq.image question_image, eq.concise_id start_X, eq.analysis_submit_type start_Y, eq.update_type end_X, eq.es_loaded end_Y
         from kmt_exercise_questions eq  left join kmt_exercise_book eb on eq.exercise_book_id=eb.id
         where eq.id=#{questionId}
     </select>