|
@@ -9,16 +9,14 @@ 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 +32,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 +40,10 @@ 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.util.*;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
@@ -528,4 +531,110 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
|
|
|
data.put("list", list);
|
|
|
return new ResponseEntity().success(data, "成功");
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseEntity removeQuestionNumMark(String userId, QuestionNumMarkRemoveVo request) {
|
|
|
+ KmtExerciseQuestion kmtExerciseQuestion = kmtExerciseQuestionService.getById(request.getQuestionId());
|
|
|
+ kmtExerciseMapper.updateQuestionStartPointAndEndPoint(request.getStartX(), request.getStartY(),
|
|
|
+ request.getEndX(), request.getEndY(), request.getQuestionId());
|
|
|
+ ResponseEntity responseEntity = new ResponseEntity();
|
|
|
+ TbLibManager manager = bookManagerDao.findByUserIdAndType(userId, 18);
|
|
|
+ if (manager != null && kmtExerciseQuestion.getDealStatus() > 3 && kmtExerciseQuestion.getDealStatus() != 7){
|
|
|
+ this.removeQuestionNumMark(request.getStartX(), request.getStartY(), request.getEndX(), request.getEndY(), kmtExerciseQuestion.getImage());
|
|
|
+ }
|
|
|
+ return responseEntity.success("成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void 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;
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotBlank(filePath) && endX > 0 && endY > 0){
|
|
|
+ //1、查询是否有备份图片,没有的话新增一个备份图片
|
|
|
+ this.checkBakImage(filePath);
|
|
|
+ //2、生成一个临时图片, 图片区域填充, 临时图片要随机, 把图片上传到oss
|
|
|
+ this.createNewFile(startX, startY, endX, endY, filePath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查是否有备份图片
|
|
|
+ * @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.isDirectory()) {
|
|
|
+ if (!dirFile.exists()){
|
|
|
+ dirFile.mkdirs();
|
|
|
+ }
|
|
|
+ File file = new File(filePath);
|
|
|
+ if (!file.exists()){
|
|
|
+ OSSUtils.downloadFile(filePath, relatePath.substring(1));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ logger.error("图片路径不存在 = {}", relatePath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createNewFile (int startX, int startY, int endX, int endY, String relatePath) {
|
|
|
+ String tempPath = "/www/files/data/upload/ai/picture_bak/temp/";
|
|
|
+ String tempFilePath = tempPath + IdWorker.generateId() + relatePath.substring(relatePath.lastIndexOf("."));
|
|
|
+ File dirFile = new File(tempPath);
|
|
|
+ if (!dirFile.exists()){
|
|
|
+ dirFile.mkdirs();
|
|
|
+ }
|
|
|
+ OSSUtils.downloadFile(tempFilePath, relatePath.substring(1));
|
|
|
+ drawImagePartColorByPosition(startX, startY, endX, endY, tempFilePath);
|
|
|
+ OSSUtils.uploadFile(tempFilePath, relatePath.substring(1));
|
|
|
+ File tempFile = new File(tempFilePath);
|
|
|
+ tempFile.delete();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 区域颜色填充,以左上角颜色填充
|
|
|
+ * @param minx
|
|
|
+ * @param miny
|
|
|
+ * @param maxx
|
|
|
+ * @param maxy
|
|
|
+ * @param filePath
|
|
|
+ */
|
|
|
+ public void drawImagePartColorByPosition (int minx, int miny, int maxx, int maxy, String filePath) {
|
|
|
+ BufferedImage bi = null;
|
|
|
+ try {
|
|
|
+ //有宽高的才处理
|
|
|
+ if (maxx > 0 && maxy > 0){
|
|
|
+ File file = new File(filePath);
|
|
|
+ bi = ImageIO.read(file);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ FileOutputStream ops = new FileOutputStream(file);
|
|
|
+ ImageIO.write(bi, filePath.substring(filePath.lastIndexOf(".") + 1), ops);
|
|
|
+ ops.flush();
|
|
|
+ ops.close();
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("异常", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|