1
0
Pārlūkot izejas kodu

更新卡格式科目关联关系

ting.yin 1 gadu atpakaļ
vecāks
revīzija
d6b0a6c7f8

+ 27 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/AnswerCardSubjectDao.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.AnswerCardSubject;
+
+public interface AnswerCardSubjectDao extends PagingAndSortingRepository<AnswerCardSubject, Integer>,
+        JpaSpecificationExecutor<AnswerCardSubject> {
+
+    @Query("select s from AnswerCardSubject s where s.examId=?1 and s.number=?2 and s.subjectCode=?3 ")
+    AnswerCardSubject findByExamIdAndNumberAndSubjectCode(Integer examId, Integer number, String subjectCode);
+
+    @Query("select q from AnswerCardSubject q where q.examId=?1 and q.number=?2")
+    List<AnswerCardSubject> findByExamId(Integer examId, Integer number);
+
+    @Modifying
+    @Query("delete AnswerCardSubject s where s.examId=?1 and s.number=?2 ")
+    void deleteByExamIdAndCardNumber(Integer examId, Integer number);
+
+    AnswerCardSubject findByExamIdAndSubjectCode(Integer examId, String subjectCode);
+
+}

+ 19 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/AnswerCard.java

@@ -28,8 +28,7 @@ public class AnswerCard implements Serializable {
     @EmbeddedId
     private AnswerCardPK pk;
 
-    @Column(name = "subject_code", nullable = true)
-    private String subjectCode;
+    private String code;
 
     @Column(name = "paper_count", nullable = false)
     private Integer paperCount;
@@ -50,6 +49,8 @@ public class AnswerCard implements Serializable {
 
     private String md5;
 
+    private Integer dpi;
+
     @Column(name = "slice_config", nullable = false)
     private String sliceConfig;
 
@@ -77,14 +78,6 @@ public class AnswerCard implements Serializable {
         pk.setNumber(number);
     }
 
-    public String getSubjectCode() {
-        return subjectCode;
-    }
-
-    public void setSubjectCode(String subjectCode) {
-        this.subjectCode = subjectCode;
-    }
-
     public Integer getPaperCount() {
         return paperCount;
     }
@@ -161,4 +154,20 @@ public class AnswerCard implements Serializable {
         return PictureConfigItem.parse(sliceConfig);
     }
 
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Integer getDpi() {
+        return dpi;
+    }
+
+    public void setDpi(Integer dpi) {
+        this.dpi = dpi;
+    }
+
 }

+ 71 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/AnswerCardSubject.java

@@ -0,0 +1,71 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "eb_answer_card_subject")
+public class AnswerCardSubject implements Serializable {
+
+    private static final long serialVersionUID = -1853625179490458865L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "exam_id", nullable = false)
+    private Integer examId;
+
+    @Column(name = "card_number", nullable = false)
+    private Integer cardNumber;
+
+    @Column(name = "subject_code", nullable = false)
+    private String subjectCode;
+
+    public AnswerCardSubject() {
+    }
+
+    public AnswerCardSubject(Integer examId, Integer number, String subjectCode) {
+        this.examId = examId;
+        this.cardNumber = number;
+        this.subjectCode = subjectCode;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+
+}

+ 4 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/AnswerCardService.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.biz.exam.service;
 import java.util.List;
 
 import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
+import cn.com.qmth.stmms.biz.exam.model.AnswerCardSubject;
 
 public interface AnswerCardService {
 
@@ -12,10 +13,12 @@ public interface AnswerCardService {
 
     int findMaxNumberByExamId(Integer examId);
 
-    void save(AnswerCard card);
+    void save(AnswerCard card, String subjectCode);
 
     void delete(AnswerCard card);
 
     AnswerCard findByExamIdAndSubjectCode(Integer examId, String subjectCode);
 
+    List<AnswerCardSubject> getSubjectByExamIdAndNumber(Integer examId, Integer number);
+
 }

+ 24 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/AnswerCardServiceImpl.java

@@ -2,13 +2,16 @@ package cn.com.qmth.stmms.biz.exam.service.impl;
 
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.AnswerCardDao;
+import cn.com.qmth.stmms.biz.exam.dao.AnswerCardSubjectDao;
 import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
+import cn.com.qmth.stmms.biz.exam.model.AnswerCardSubject;
 import cn.com.qmth.stmms.biz.exam.service.AnswerCardService;
 
 @Service
@@ -17,6 +20,9 @@ public class AnswerCardServiceImpl extends BaseQueryService<AnswerCard> implemen
     @Autowired
     private AnswerCardDao cardDao;
 
+    @Autowired
+    private AnswerCardSubjectDao cardSubjectDao;
+
     @Override
     public AnswerCard findByExamIdAndNumber(Integer examId, Integer number) {
         return cardDao.findByExamIdAndNumber(examId, number);
@@ -41,19 +47,34 @@ public class AnswerCardServiceImpl extends BaseQueryService<AnswerCard> implemen
 
     @Transactional
     @Override
-    public void save(AnswerCard card) {
+    public void save(AnswerCard card, String subjectCode) {
+        if (StringUtils.isNotBlank(subjectCode)) {
+            AnswerCardSubject answerCardSubject = cardSubjectDao.findByExamIdAndSubjectCode(card.getExamId(),
+                    subjectCode);
+            if (answerCardSubject == null) {
+                answerCardSubject = new AnswerCardSubject(card.getExamId(), card.getNumber(), subjectCode);
+                cardSubjectDao.save(answerCardSubject);
+            }
+        }
         this.cardDao.save(card);
     }
 
     @Transactional
     @Override
     public void delete(AnswerCard card) {
+        cardSubjectDao.deleteByExamIdAndCardNumber(card.getExamId(), card.getNumber());
         this.cardDao.delete(card);
     }
 
     @Override
     public AnswerCard findByExamIdAndSubjectCode(Integer examId, String subjectCode) {
-        List<AnswerCard> cards = cardDao.findByExamIdAndSubjectCode(examId, subjectCode);
-        return cards.isEmpty() ? null : cards.get(0);
+        AnswerCardSubject s = cardSubjectDao.findByExamIdAndSubjectCode(examId, subjectCode);
+        AnswerCard card = cardDao.findByExamIdAndNumber(examId, s.getCardNumber());
+        return card;
+    }
+
+    @Override
+    public List<AnswerCardSubject> getSubjectByExamIdAndNumber(Integer examId, Integer number) {
+        return cardSubjectDao.findByExamId(examId, number);
     }
 }

+ 2 - 2
stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/VersionInfo.java

@@ -5,7 +5,7 @@ package cn.com.qmth.stmms.common.utils;
  */
 public class VersionInfo {
 
-    public static final String NAME = "1.3.13";
+    public static final String NAME = "1.3.14";
 
-    public static final String DATE = "20230701";
+    public static final String DATE = "20230808";
 }

+ 1 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -914,7 +914,6 @@ public class PaperController extends BaseExamController {
                         card.setExamId(examId);
                         Integer number = answerCardService.findMaxNumberByExamId(examId) + 1;
                         card.setNumber(number);
-                        card.setSubjectCode(subject.getCode());
                     }
                     card.setMd5(md5);
                     card.setNeedAdapte(true);
@@ -923,7 +922,7 @@ public class PaperController extends BaseExamController {
                     card.setPaperCount(card.getSinglePage() ? 1 : cardFile.getPages().size() / 2);
                     card.setSource(CardSource.WEB);
                     card.setUpdateTime(new Date());
-                    answerCardService.save(card);
+                    answerCardService.save(card, subjectCode);
 
                     fileService.uploadAnswerCard(new ByteArrayInputStream(out), md5, examId, card.getNumber());
                     subject.setSliceConfig(cardFile.getSliceConfig().toString());

+ 15 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/CardController.java

@@ -23,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import cn.com.qmth.stmms.api.exception.ApiException;
 import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
+import cn.com.qmth.stmms.biz.exam.model.AnswerCardSubject;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.service.AnswerCardService;
@@ -57,7 +58,8 @@ public class CardController extends BaseApiController {
 
     private Exam validateExam(ApiUser au, Integer examId, ExamType... types) {
         Exam exam = examService.findById(examId);
-        if (exam == null || !validateSchool(au.getSchoolId(), exam.getSchoolId()) || exam.getStatus() != ExamStatus.START) {
+        if (exam == null || !validateSchool(au.getSchoolId(), exam.getSchoolId())
+                || exam.getStatus() != ExamStatus.START) {
             throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         if (types != null && types.length > 0 && !Arrays.asList(types).contains(exam.getType())) {
@@ -81,8 +83,8 @@ public class CardController extends BaseApiController {
             @RequestParam(required = false) Integer number, @RequestParam(required = false) String subjectCode,
             @RequestParam String source, @RequestParam Integer paperCount, @RequestParam Boolean singlePage,
             @RequestParam Boolean needAdapte, @RequestParam(required = false) String parameter,
-            @RequestParam(required = false) String remark, @RequestParam String md5, @RequestParam String sliceConfig,
-            @RequestParam MultipartFile file) {
+            @RequestParam(required = false) Integer dpi, @RequestParam(required = false) String remark,
+            @RequestParam String md5, @RequestParam String sliceConfig, @RequestParam MultipartFile file) {
         ApiUser au = RequestUtils.getApiUser(request);
         subjectCode = StringUtils.trimToNull(subjectCode);
         validateExam(au, examId, ExamType.SCAN_IMAGE);
@@ -102,6 +104,7 @@ public class CardController extends BaseApiController {
                 card.setExamId(examId);
                 card.setNumber(number);
             }
+            card.setDpi(dpi);
             card.setSliceConfig(sliceConfig);
             card.setMd5(md5);
             card.setNeedAdapte(needAdapte);
@@ -110,9 +113,8 @@ public class CardController extends BaseApiController {
             card.setRemark(remark);
             card.setSinglePage(singlePage);
             card.setSource(CardSource.CLIENT);
-            card.setSubjectCode(subjectCode);
             card.setUpdateTime(new Date());
-            answerCardService.save(card);
+            answerCardService.save(card, subjectCode);
             JSONObject result = new JSONObject();
             result.accumulate("number", number);
             result.accumulate("updateTime", System.currentTimeMillis());
@@ -141,13 +143,15 @@ public class CardController extends BaseApiController {
             JSONObject result = new JSONObject();
             result.accumulate("examId", answerCard.getExamId());
             result.accumulate("number", answerCard.getNumber());
-            result.accumulate("subjectCode", StringUtils.trimToEmpty(answerCard.getSubjectCode()));
-            if (answerCard.getSubjectCode() != null) {
-                ExamSubject subject = subjectService.find(examId, answerCard.getSubjectCode());
-                result.accumulate("subjectName", subject.getName());
-            } else {
-                result.accumulate("subjectName", "");
+            result.accumulate("code", StringUtils.trimToEmpty(answerCard.getCode()));
+            result.accumulate("dpi", answerCard.getDpi() == null ? 0 : answerCard.getDpi());
+            List<AnswerCardSubject> subjects = answerCardService.getSubjectByExamIdAndNumber(answerCard.getExamId(),
+                    answerCard.getNumber());
+            JSONArray subjectList = new JSONArray();
+            for (AnswerCardSubject a : subjects) {
+                subjectList.add(a.getSubjectCode());
             }
+            result.accumulate("subjectList", subjectList);
             result.accumulate("paperCount", answerCard.getPaperCount() == null ? "" : answerCard.getPaperCount());
             result.accumulate("path", fileService.getAnswerCardUri(answerCard.getExamId(), answerCard.getNumber()));
             result.accumulate("md5", answerCard.getMd5());

+ 1 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/FileController.java

@@ -334,10 +334,9 @@ public class FileController extends BaseApiController {
                 card.setSinglePage(cardFile.getPages().size() == 1);
                 card.setPaperCount(card.getSinglePage() ? 1 : cardFile.getPages().size() / 2);
                 card.setSource(CardSource.WEB);
-                card.setSubjectCode(subjectCode);
                 card.setUpdateTime(new Date());
                 fileService.uploadAnswerCard(ins, md5, examId, card.getNumber());
-                answerCardService.save(card);
+                answerCardService.save(card, subjectCode);
                 if (subject != null) {
                     subject.setCardType(format);
                     subjectService.save(subject);

+ 18 - 1
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -1107,13 +1107,14 @@ DROP TABLE IF EXISTS `eb_answer_card`;
 CREATE TABLE `eb_answer_card` 
 (
     `exam_id`			int(11)     NOT NULL COMMENT '考试ID',
-    `subject_code`		varchar(32) DEFAULT NULL COMMENT '科目代码',
+    `code`				varchar(64) DEFAULT NULL COMMENT '混扫代码',
     `number`			int(11)     NOT NULL COMMENT '序号',
   	`need_adapte`		tinyint(1)  DEFAULT NULL COMMENT '强制适配',
   	`paper_count`		int(11) 	DEFAULT NULL COMMENT '试卷数量',
 	`single_page`		tinyint(1)	DEFAULT NULL COMMENT '单页模式',
 	`source`			varchar(16) NOT NULL COMMENT '来源',
 	`md5`				varchar(255) DEFAULT NULL COMMENT '文件md5',
+	`dpi`				int(11) 	 DEFAULT NULL COMMENT 'dpi',
 	`slice_config` 		text 		 DEFAULT NULL COMMENT '裁切配置',
 	`parameter`			varchar(255) DEFAULT NULL COMMENT '其他属性',
 	`remark`			varchar(255) DEFAULT NULL COMMENT '备注',
@@ -1147,3 +1148,19 @@ CREATE TABLE `eb_score_verify_detail`
   UNIQUE KEY `index1` (`score_verify_id`,`student_id`)
 )  ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='成绩校验结果';
+
+  
+# Dump of table sc_answer_card_subject
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `sc_answer_card_subject`;
+CREATE TABLE `sc_answer_card_subject` 
+(
+	`id`           		int(11)     	NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `exam_id`			int(11)     	NOT NULL COMMENT '考试ID',
+    `card_number`		int(11)     	NOT NULL COMMENT '卡格式号',
+  	`subjectCode`		varchar(128)	NOT NULL COMMENT '科目代码',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `index1` (`exam_id`,`card_number`,`subjectCode`)
+)  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='卡格式科目关联关系';

+ 16 - 1
stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

@@ -30,4 +30,19 @@ CREATE TABLE `eb_score_verify_detail`
   PRIMARY KEY (`id`),
   UNIQUE KEY `index1` (`score_verify_id`,`student_id`)
 )  ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4 COMMENT ='成绩校验结果';
+  DEFAULT CHARSET = utf8mb4 COMMENT ='成绩校验结果';
+  
+
+ALTER TABLE sc_answer_card ADD COLUMN `dpi` 	int(11) NOT NULL COMMENT 'dpi';
+ALTER TABLE sc_answer_card ADD COLUMN `code` 	varchar(64) NOT NULL COMMENT '混扫代码';
+CREATE TABLE `sc_answer_card_subject` 
+(
+	`id`           		int(11)     	NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `exam_id`			int(11)     	NOT NULL COMMENT '考试ID',
+    `card_number`		int(11)     	NOT NULL COMMENT '卡格式号',
+  	`subjectCode`		varchar(128)	NOT NULL COMMENT '科目代码',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `index1` (`exam_id`,`card_number`,`subjectCode`)
+)  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='卡格式科目关联关系';
+