Răsfoiți Sursa

3.4.4 update-20250319,bug修改

xiaofei 3 luni în urmă
părinte
comite
66f95f6977

+ 38 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answercard/CardFile.java

@@ -8,14 +8,13 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
+import com.qmth.teachcloud.mark.bean.vo.parseCard.pic.SubPictureConfig;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.Base64;
-import java.util.Collections;
-import java.util.LinkedList;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -63,7 +62,7 @@ public class CardFile {
         this.pages = pages;
     }
 
-    public static String getMarkConfigAdd(List<PictureConfig> list, double position) {
+    public static String getMarkConfigAddPic(List<PictureConfig> list, double position) {
         for (PictureConfig configItem : list) {
             if (configItem.getX() < position) {
                 double calcW = configItem.getX() + configItem.getW() + position;
@@ -86,6 +85,40 @@ public class CardFile {
         return JSON.toJSONString(list);
     }
 
+    public static String getMarkConfigAdd(List<SubPictureConfig> list, double position) {
+        List<PictureConfig> configList = new ArrayList<>();
+        for (SubPictureConfig configItem : list) {
+            // 填空题,不扩宽评卷区
+            if (configItem.getQuestionType() != 4) {
+                if (configItem.getX() < position) {
+                    double calcW = configItem.getX() + configItem.getW() + position;
+                    configItem.setW(calcW <= 1 ? configItem.getW() + position : 1 - configItem.getX());
+                } else {
+                    configItem.setX(configItem.getX() - position);
+                    double calcW = configItem.getX() + configItem.getW() + position * 2;
+                    configItem.setW(calcW <= 1 ? configItem.getW() + position * 2 : 1 - configItem.getX());
+                }
+
+                if (configItem.getY() < position) {
+                    double calcH = configItem.getY() + configItem.getH() + position;
+                    configItem.setH(calcH <= 1 ? configItem.getH() + position : 1 - configItem.getY());
+                } else {
+                    configItem.setY(configItem.getY() - position);
+                    double calcH = configItem.getY() + configItem.getH() + position * 2;
+                    configItem.setH(calcH <= 1 ? configItem.getH() + position * 2 : 1 - configItem.getH());
+                }
+            }
+            PictureConfig pictureConfig = new PictureConfig();
+            pictureConfig.setI(configItem.getI());
+            pictureConfig.setX(configItem.getX());
+            pictureConfig.setY(configItem.getY());
+            pictureConfig.setW(configItem.getW());
+            pictureConfig.setH(configItem.getH());
+            configList.add(pictureConfig);
+        }
+        return JSON.toJSONString(configList);
+    }
+
     /**
      * 解析卡格式文件中的裁切图坐标,用于云阅卷同步
      *
@@ -215,7 +248,7 @@ public class CardFile {
 //            System.out.println(JSON.toJSONString(cardFile));
             String position = "[{\"h\":0.0958003565,\"i\":1,\"w\":0.4472534678,\"x\":0.0484413619,\"y\":0.8019215686},{\"h\":0.054802139,\"i\":1,\"w\":0.4472534678,\"x\":0.0484413619,\"y\":0.8937219251}]";
             List<PictureConfig> list = JSON.parseArray(position, PictureConfig.class);
-            String markConfigAdd = getMarkConfigAdd(list, 0.015);
+//            String markConfigAdd = getMarkConfigAdd(list, 0.015);
             System.out.println(11);
         } catch (Exception e) {
             throw new RuntimeException(e);

+ 11 - 12
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/vo/parseCard/pic/SubPictureConfig.java

@@ -1,6 +1,5 @@
 package com.qmth.teachcloud.mark.bean.vo.parseCard.pic;
 
-import com.alibaba.fastjson.JSON;
 import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import org.apache.commons.collections4.CollectionUtils;
@@ -17,6 +16,7 @@ public class SubPictureConfig {
     private Double h;
     private Integer mainNumber;
     private String questionNumber;
+    private Integer questionType;
 
     public SubPictureConfig() {
     }
@@ -32,19 +32,10 @@ public class SubPictureConfig {
     }
 
     public static String transfer(List<SubPictureConfig> subPictureConfigList) {
-        if(CollectionUtils.isEmpty(subPictureConfigList)){
+        if (CollectionUtils.isEmpty(subPictureConfigList)) {
             return null;
         }
-        List<PictureConfig> configList = subPictureConfigList.stream().map(m -> {
-            PictureConfig pictureConfig = new PictureConfig();
-            pictureConfig.setI(m.getI());
-            pictureConfig.setX(m.getX());
-            pictureConfig.setY(m.getY());
-            pictureConfig.setW(m.getW());
-            pictureConfig.setH(m.getH());
-            return pictureConfig;
-        }).collect(Collectors.toList());
-        return CardFile.getMarkConfigAdd(configList, 0.015);
+        return CardFile.getMarkConfigAdd(subPictureConfigList, 0.015);
     }
 
     public int getI() {
@@ -102,4 +93,12 @@ public class SubPictureConfig {
     public void setQuestionNumber(String questionNumber) {
         this.questionNumber = questionNumber;
     }
+
+    public Integer getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(Integer questionType) {
+        this.questionType = questionType;
+    }
 }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -842,6 +842,9 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 } else {
                     subPictureConfigList = pictureConfigs.stream().filter(m -> m.getQuestionNumber().equals(markQuestion.getQuestionNumber())).collect(Collectors.toList());
                 }
+                for (SubPictureConfig subPictureConfig : subPictureConfigList) {
+                    subPictureConfig.setQuestionType(markQuestion.getQuestionType());
+                }
                 markQuestion.setPicList(SubPictureConfig.transfer(subPictureConfigList));
             }
             this.updateBatchById(questions);

+ 19 - 12
teachcloud-mark/src/main/resources/mapper/MarkUserQuestionMapper.xml

@@ -161,20 +161,27 @@
 
     <select id="countByMarkTask" resultType="java.lang.Integer">
         SELECT
-            count(*)
+            COUNT(1)
         FROM
-            mark_user_question mug
-                LEFT JOIN
-            mark_question mg ON mug.exam_id = mg.exam_id
-                AND mug.paper_number = mg.paper_number
-                AND mug.question_id = mg.id
+            mark_paper mp
         <where>
-            <if test="userId != null">
-                AND mug.user_id = #{userId} AND mg.task_count > 0
-            </if>
-            <if test="status != null and status != ''">
-                AND EXISTS (SELECT 1 FROM mark_paper mp WHERE mp.exam_id = mg.exam_id AND mp.paper_number = mg.paper_number AND mp.status = #{status})
-            </if>
+        <if test="status != null and status != ''">
+            AND mp.status = #{status}
+        </if>
+          AND EXISTS( SELECT
+                          1
+                      FROM
+                          mark_user_question muq
+                              LEFT JOIN
+                          mark_question mq ON muq.exam_id = mq.exam_id
+                              AND muq.paper_number = mq.paper_number
+                              AND muq.question_id = mq.id
+                      WHERE
+                          mp.exam_id = muq.exam_id
+                        AND mp.paper_number = muq.paper_number
+                        <if test="userId != null">
+                            AND muq.user_id = #{userId} AND mq.task_count > 0
+                        </if>)
         </where>
     </select>
     <select id="listDefaultMarkerByExamIdAndPaperNumber"