소스 검색

add:评卷参数分组基础对象
pdf-jpg工具类

caozixuan 3 년 전
부모
커밋
dd16b5de63

+ 143 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperGroup.java

@@ -0,0 +1,143 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.paperGroup.MarkModeEnum;
+import com.qmth.teachcloud.common.enums.paperGroup.ScorePolicyEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 评卷分组数据库映射类
+ * @Author: CaoZixuan
+ * @Date: 2022-04-12
+ */
+@ApiModel(value = "ExamPaperGroup对象", description = "试卷分组表")
+public class ExamPaperGroup extends BaseEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+
+    @ApiModelProperty(value = "课程编号'")
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "分组序号")
+    private String groupNumber;
+
+    @ApiModelProperty(value = "双评比例(0关闭,1开启)")
+    private Integer doubleRate;
+
+    @ApiModelProperty(value = "仲裁阈值(开启双评必填)'")
+    private Integer arbitrateThreshold;
+
+    @ApiModelProperty(value = "合分策略 开启双评是必填 AVG(\"平均分\", 1), MAX(\"最高分\", 2), MIN(\"最低分\", 3)")
+    private ScorePolicyEnum scorePolicy;
+
+    @ApiModelProperty(value = "试评数量")
+    private Integer trialCount;
+
+    @ApiModelProperty(value = "评卷模式  COMMON(\"普通\"), TRACK(\"轨迹\")")
+    private MarkModeEnum markMode;
+
+    @ApiModelProperty(value = "题目信息")
+    private String questionInfo;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(String groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public Integer getDoubleRate() {
+        return doubleRate;
+    }
+
+    public void setDoubleRate(Integer doubleRate) {
+        this.doubleRate = doubleRate;
+    }
+
+    public Integer getArbitrateThreshold() {
+        return arbitrateThreshold;
+    }
+
+    public void setArbitrateThreshold(Integer arbitrateThreshold) {
+        this.arbitrateThreshold = arbitrateThreshold;
+    }
+
+    public ScorePolicyEnum getScorePolicy() {
+        return scorePolicy;
+    }
+
+    public void setScorePolicy(ScorePolicyEnum scorePolicy) {
+        this.scorePolicy = scorePolicy;
+    }
+
+    public Integer getTrialCount() {
+        return trialCount;
+    }
+
+    public void setTrialCount(Integer trialCount) {
+        this.trialCount = trialCount;
+    }
+
+    public MarkModeEnum getMarkMode() {
+        return markMode;
+    }
+
+    public void setMarkMode(MarkModeEnum markMode) {
+        this.markMode = markMode;
+    }
+
+    public String getQuestionInfo() {
+        return questionInfo;
+    }
+
+    public void setQuestionInfo(String questionInfo) {
+        this.questionInfo = questionInfo;
+    }
+}

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperGroupMarker.java

@@ -0,0 +1,43 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 试卷分组和评卷员绑定关系
+ * @Author: CaoZixuan
+ * @Date: 2022-04-12
+ */
+@ApiModel(value = "ExamPaperGroupMarker对象", description = "试卷分组和评卷员关系绑定表")
+public class ExamPaperGroupMarker extends BaseEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "试卷分组id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long groupId;
+
+    @ApiModelProperty(value = "评卷员id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long markerId;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public Long getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Long markerId) {
+        this.markerId = markerId;
+    }
+}

+ 25 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ConvertUtilTest.java

@@ -0,0 +1,25 @@
+package com.qmth.distributed.print;
+
+import com.qmth.teachcloud.common.util.ConvertUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+/**
+ * @Description: 工具类方法测试类
+ * @Author: CaoZixuan
+ * @Date: 2022-04-12
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class ConvertUtilTest {
+    @Test
+    public void pdfToJpg() throws Exception {
+        String sourcePath = "E:\\pdf\\嵌入式实验.pdf";
+        String targetPath = "E:\\pdf\\嵌入式实验";
+        ConvertUtil.pdfToImageFile(sourcePath,targetPath);
+    }
+}

+ 10 - 0
teachcloud-common/pom.xml

@@ -118,5 +118,15 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>fontbox</artifactId>
+            <version>2.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.1</version>
+        </dependency>
     </dependencies>
 </project>

+ 20 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/paperGroup/MarkModeEnum.java

@@ -0,0 +1,20 @@
+package com.qmth.teachcloud.common.enums.paperGroup;
+
+/**
+ * @Description: 评卷模式枚举类
+ * @Author: CaoZixuan
+ * @Date: 2022-04-12
+ */
+public enum MarkModeEnum {
+    COMMON("普通"),
+    TRACK("轨迹");
+    private final String desc;
+
+    MarkModeEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 27 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/paperGroup/ScorePolicyEnum.java

@@ -0,0 +1,27 @@
+package com.qmth.teachcloud.common.enums.paperGroup;
+
+/**
+ * @Description: 合分策略枚举类
+ * @Author: CaoZixuan
+ * @Date: 2022-04-12
+ */
+public enum ScorePolicyEnum {
+    AVG("平均分", 1),
+    MAX("最高分", 2),
+    MIN("最低分", 3);
+    private final String desc;
+    private final int value;
+
+    ScorePolicyEnum(String desc, int value) {
+        this.desc = desc;
+        this.value = value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public int getValue() {
+        return value;
+    }
+}

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java

@@ -2,6 +2,9 @@ package com.qmth.teachcloud.common.util;
 
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPageTree;
+import org.apache.pdfbox.rendering.PDFRenderer;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
@@ -12,7 +15,9 @@ import org.springframework.data.redis.support.atomic.RedisAtomicLong;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
 import java.io.*;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
@@ -355,4 +360,43 @@ public class ConvertUtil {
             log.error(SystemConstant.LOG_ERROR, e);
         }
     }
+
+    public static void pdfToImageFile(String sourcePath,String targetPath) throws Exception {
+        PDDocument doc = null;
+        ByteArrayOutputStream os = null;
+        InputStream stream = null;
+        OutputStream out = null;
+        try {
+            // pdf路径
+            stream = new FileInputStream(sourcePath);
+            // 加载解析PDF文件
+            doc = PDDocument.load(stream);
+            PDFRenderer pdfRenderer = new PDFRenderer(doc);
+            PDPageTree pages = doc.getPages();
+            int pageCount = pages.getCount();
+            for (int i = 0; i < pageCount; i++) {
+                BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 150);
+                os = new ByteArrayOutputStream();
+                ImageIO.write(bim, "jpg", os);
+                byte[] dataList = os.toByteArray();
+                // jpg文件转出路径
+                File file = new File(targetPath + i + ".jpg");
+                if (!file.getParentFile().exists()) {
+                    // 不存在则创建父目录及子文件
+                    file.getParentFile().mkdirs();
+                    file.createNewFile();
+                }
+                out = new FileOutputStream(file);
+                out.write(dataList);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw e;
+        } finally {
+            if (doc != null) doc.close();
+            if (os != null) os.close();
+            if (stream != null) stream.close();
+            if (out != null) out.close();
+        }
+    }
 }