Forráskód Böngészése

优化卡格式模型的结构与初始化逻辑,分离输出过程的特殊处理,增加评卷显示区域的模型与解析方法

luoshi 2 éve
szülő
commit
f3b97df23c

+ 39 - 19
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/common/domain/card/CardFile.java

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -19,11 +20,14 @@ public class CardFile {
 
     private boolean adapted;
 
-    private List<CardPageWrapper> pages;
+    private List<CardPageWrapper> pages = Collections.emptyList();
 
     @JsonIgnore
     private SliceConfig sliceConfig;
 
+    @JsonIgnore
+    private MarkConfig markConfig;
+
     public String getVersion() {
         return version;
     }
@@ -48,34 +52,49 @@ public class CardFile {
         this.pages = pages;
     }
 
-    /**
-     * 解析卡格式文件中的裁切图坐标,用于云阅卷同步
-     *
-     * @return
-     */
-    public SliceConfig getSliceConfig() {
-        if (sliceConfig == null) {
-            sliceConfig = new SliceConfig();
-            if (pages != null) {
-                int pageNumber = 0;
-                for (CardPageWrapper pageWrapper : pages) {
-                    pageNumber++;
-                    //默认使用遮盖模式
-                    sliceConfig.addConfig(pageNumber, 0, 0, 0, 0);
+    private void postInit() {
+        //解析卡格式文件中的裁切图坐标,用于云阅卷同步
+        this.sliceConfig = new SliceConfig();
+        if (pages != null) {
+            int pageNumber = 0;
+            for (CardPageWrapper pageWrapper : pages) {
+                pageNumber++;
+                //默认使用遮盖模式
+                sliceConfig.addConfig(pageNumber, 0, 0, 0, 0);
+            }
+        }
+        //解析卡格式文件中的大题评卷坐标,用于云阅卷评卷分组设置
+        this.markConfig = new MarkConfig();
+        if (pages != null) {
+            int pageNumber = 0;
+            for (CardPageWrapper pageWrapper : pages) {
+                pageNumber++;
+                for (AnswerArea area : pageWrapper.getExchange().getAnswerArea()) {
+                    if (area.getMainNumber() != null && area.getArea() != null && area.getArea().length >= 4) {
+                        markConfig.addConfig(area.getMainNumber(), pageNumber, area.getArea()[0], area.getArea()[1],
+                                area.getArea()[2], area.getArea()[3]);
+                    }
                 }
             }
         }
+    }
+
+    public SliceConfig getSliceConfig() {
         return sliceConfig;
     }
 
+    public List<MarkConfig.ConfigItem> getMarkConfig(int mainNumber) {
+        return markConfig.getConfig(mainNumber);
+    }
+
     /**
-     * 校验字段并设置初始值
+     * 输出到文件前,进行必要的字段值转换与处理
      */
-    private void validate() {
+    private void format() {
         version = "1.0.0";
         adapted = false;
         for (CardPageWrapper cpw : pages) {
-            cpw.getExchange().validate();
+            cpw.getExchange().format();
         }
     }
 
@@ -87,6 +106,7 @@ public class CardFile {
      */
     public byte[] output() throws JsonProcessingException {
         ObjectMapper mapper = new ObjectMapper();
+        this.format();
         return mapper.writeValueAsBytes(this);
     }
 
@@ -100,7 +120,7 @@ public class CardFile {
     public static CardFile parse(InputStream ins) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
         CardFile obj = mapper.readValue(ins, CardFile.class);
-        obj.validate();
+        obj.postInit();
         return obj;
     }
 }

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/common/domain/card/CardPage.java

@@ -153,9 +153,9 @@ public class CardPage {
     }
 
     /**
-     * 校验字段并设置初始值
+     * 输出到文件前,进行必要的字段值转换与处理
      */
-    public void validate() {
+    public void format() {
         //默认题卡类型
         if (cardType < 1 || cardType > 3) {
             cardType = 2;

+ 45 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/common/domain/card/MarkConfig.java

@@ -0,0 +1,45 @@
+package cn.com.qmth.stmms.biz.common.domain.card;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.*;
+
+/**
+ * 评卷分组的显示坐标
+ */
+public class MarkConfig {
+
+    private Map<Integer, List<ConfigItem>> map;
+
+    public MarkConfig() {
+        this.map = new HashMap<>();
+    }
+
+    public void addConfig(int mainNumber, int index, double left, double top, double width, double height) {
+        ConfigItem item = new ConfigItem();
+        item.index = index;
+        item.left = left;
+        item.top = top;
+        item.width = width;
+        item.height = height;
+        this.map.computeIfAbsent(mainNumber, key -> new LinkedList<>(Collections.singletonList(item)));
+    }
+
+    public List<ConfigItem> getConfig(int mainNumber) {
+        return map.get(mainNumber);
+    }
+
+    static class ConfigItem {
+
+        //对应的图片序号
+        int index;
+
+        //坐标点与宽高的相对比例
+        double left, top, width, height;
+
+        @Override
+        public String toString() {
+            return StringUtils.join(Arrays.asList(index, left, top, width, height), ":");
+        }
+    }
+}

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/common/domain/card/SliceConfig.java

@@ -6,6 +6,9 @@ import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
+/**
+ * 裁切坐标
+ */
 public class SliceConfig {
 
     private List<ConfigItem> items;