Browse Source

识别结果a4数量

xiatian 10 months ago
parent
commit
7cc909a7db

+ 1 - 0
install/mysql/init/stmms_ft.sql

@@ -311,6 +311,7 @@ CREATE TABLE `eb_exam_student`
     `exam_room`             varchar(32)  DEFAULT NULL COMMENT '考场',
     `remark`                varchar(128) DEFAULT NULL COMMENT '备注',
     `batch_code`            varchar(32)  DEFAULT NULL COMMENT '扫描批次号',
+    `a4_count`           int(11)     NOT NULL COMMENT 'A4图数量',
     `sheet_count`           int(11)     NOT NULL COMMENT '原图数量',
     `slice_count`           int(11)     NOT NULL COMMENT '小图数量',
     `answers`               text COMMENT '客观题识别结果',

+ 4 - 3
install/mysql/upgrade/1.5.1.sql

@@ -6,15 +6,16 @@ ALTER TABLE eb_marker ADD COLUMN `avg_score_na`    double      DEFAULT NULL COMM
 ALTER TABLE eb_marker ADD COLUMN `avg_speed_na`    double      DEFAULT NULL COMMENT '平均时长不含仲裁';
 ALTER TABLE eb_marker ADD COLUMN `stdev_score_na`  double      DEFAULT NULL COMMENT '标准差不含仲裁';
 
+ALTER TABLE eb_exam_student ADD COLUMN `a4_count`   int(11)     NOT NULL DEFAULT 0 COMMENT 'A4图数量';
 ALTER TABLE eb_exam ADD COLUMN `inspect_round_limit`   	tinyint(1)  NOT NULL DEFAULT 1 COMMENT '全卷复核进度100%时才能再次复核';
 
 update b_privilege set seq=50 where code='exam_paper';
 update b_privilege set seq=40 where code='exam_scan';
 
 
-delete from b_privilege t where t.code in ('exam_report_subject','exam_report_subject_range');
-delete from b_role_privilege t where t.privilege_code in ('exam_report_subject','exam_report_subject_range');
-delete from b_role_privilege t where t.privilege_code in ('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');
+delete from b_privilege  where code in ('exam_report_subject','exam_report_subject_range');
+delete from b_role_privilege  where privilege_code in ('exam_report_subject','exam_report_subject_range');
+delete from b_role_privilege  where privilege_code in ('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');
 
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('overview', '主页导览', 'root_code', 'MENU', '/admin/basic/overview', 5,1,'icon-bookmark','index.overview');

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -130,7 +130,7 @@ public interface ExamStudentDao
             Integer cardNumber);
 
     @Modifying
-    @Query("update ExamStudent s set s.sheetCount=0, s.sliceCount=0, s.answers=null, s.batchCode=null, s.paperType=?2,"
+    @Query("update ExamStudent s set s.a4Count=0,s.sheetCount=0, s.sliceCount=0, s.answers=null, s.batchCode=null, s.paperType=?2,"
             + " s.absent=false, s.upload=false, s.uploadTime=null, s.objectiveScore=0, s.objectiveScoreList=null, "
             + " s.cardNumber=null, s.inspectCount=0 where s.id=?1")
     public int resetScanInfo(Integer id, String paperType);

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java

@@ -151,6 +151,12 @@ public class ExamStudent implements Serializable {
     @Column(name = "batch_code", length = 32, nullable = true)
     private String batchCode;
 
+    /**
+     * A4图数量
+     */
+    @Column(name = "a4_count", nullable = false)
+    private Integer a4Count;
+    
     /**
      * 原图数量
      */
@@ -977,4 +983,12 @@ public class ExamStudent implements Serializable {
         this.trial = trial;
     }
 
+	public Integer getA4Count() {
+		return a4Count;
+	}
+
+	public void setA4Count(Integer a4Count) {
+		this.a4Count = a4Count;
+	}
+
 }

+ 3 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java

@@ -198,6 +198,7 @@ public class StudentController extends BaseExamController {
                 student.setException(false);
                 student.setSliceCount(0);
                 student.setSheetCount(0);
+                student.setA4Count(0);
                 student.setObjectiveScore(0d);
                 student.setSubjectiveScore(0d);
                 student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
@@ -292,6 +293,7 @@ public class StudentController extends BaseExamController {
                 student.setException(false);
                 student.setSliceCount(0);
                 student.setSheetCount(0);
+                student.setA4Count(0);
                 student.setObjectiveScore(0d);
                 student.setSubjectiveScore(0d);
                 student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
@@ -527,6 +529,7 @@ public class StudentController extends BaseExamController {
                     student.setBatchCode(null);
                     student.setSliceCount(0);
                     student.setSheetCount(0);
+                    student.setA4Count(0);
                     student.setInspectCount(0);
                     if (student.getPaperType() != null && student.getPaperType().matches(PAPER_TYPES_REGEX)) {
                         student.setPaperType(StringUtils.trimToNull(studentVO.getPaperType()));

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/DataSyncThread.java

@@ -191,6 +191,7 @@ public class DataSyncThread implements Runnable {
                         examStudent.setException(false);
                         examStudent.setSliceCount(0);
                         examStudent.setSheetCount(0);
+                        examStudent.setA4Count(0);
                         examStudent.setObjectiveScore(0d);
                         examStudent.setSubjectiveScore(0d);
                         examStudent.setSubjectiveStatus(SubjectiveStatus.UNMARK);

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/OnlineExamThread.java

@@ -184,6 +184,7 @@ public class OnlineExamThread implements Runnable {
         examStudent.setException(false);
         examStudent.setSliceCount(0);
         examStudent.setSheetCount(0);
+        examStudent.setA4Count(0);
         examStudent.setObjectiveScore(0d);
         examStudent.setSubjectiveScore(0d);
         examStudent.setSubjectiveStatus(SubjectiveStatus.UNMARK);

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/CoreController.java

@@ -235,6 +235,7 @@ public class CoreController extends BaseApiController {
             student.setBreach(false);
             student.setSliceCount(0);
             student.setSheetCount(0);
+            student.setA4Count(0);
             student.setObjectiveScore(0d);
             student.setSubjectiveScore(0d);
             student.setInspectCount(0);

+ 62 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java

@@ -5,9 +5,6 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +18,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import cn.com.qmth.stmms.api.dto.RefixStudent;
 import cn.com.qmth.stmms.api.exception.ApiException;
+import cn.com.qmth.stmms.api.utils.ScanStudentA4Parameter;
 import cn.com.qmth.stmms.api.utils.ScanStudentParameter;
 import cn.com.qmth.stmms.biz.exam.model.CheckStudent;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -41,6 +39,8 @@ import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.DateUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 
 @Controller
 @RequestMapping("/api/scan")
@@ -65,6 +65,65 @@ public class ScanController extends BaseApiController {
 
     private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
 
+    /**
+     * 上传考生识别结果
+     *
+     * @param request
+     * @param examId
+     * @param scStudentParameter
+     * @return
+     */
+    @Logging(menu = "扫描端-考生识别上传(含A4数量)", type = LogType.UPDATE)
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCANNER, Role.SCAN_ADMIN })
+    @RequestMapping(value = "/student/a4/{examId}", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONArray saveStudentWithA4(HttpServletRequest request, @PathVariable Integer examId,
+            @RequestBody ScanStudentA4Parameter[] scStudentParameter) {
+        ApiUser user = RequestUtils.getApiUser(request);
+        Exam exam = examService.findById(examId);
+        JSONArray array = new JSONArray();
+        // 判断上传权限
+        if (exam == null || !exam.getSchoolId().equals(user.getSchoolId())
+                || !ExamStatus.START.equals(exam.getStatus()) || !ExamType.SCAN_IMAGE.equals(exam.getType())) {
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
+        }
+        if (scStudentParameter != null && scStudentParameter.length > 0) {
+            for (ScanStudentA4Parameter sc : scStudentParameter) {
+                ExamStudent student = studentService.findByExamIdAndExamNumber(examId, sc.getExamNumber());
+                if (student != null) {
+                    student.setUpload(true);
+                    student.setAbsent(sc.isAbsent());
+                    student.setAnswers(sc.getAnswers().toUpperCase());
+                    student.setBatchCode(sc.getBatchCode());
+                    student.setSliceCount(sc.getSliceCount());
+                    student.setSheetCount(sc.getSheetCount());
+                    student.setA4Count(sc.getA4Count());
+                    if (sc.getPaperType() != null) {
+                        if (sc.getPaperType().matches(PAPER_TYPES_REGEX)) {
+                            student.setPaperType(sc.getPaperType());
+                        } else {
+                            continue;
+                        }
+                    }
+                    student.setCardNumber(sc.getCardNumber());
+                    // 同步更新评卷任务
+                    if (saveUploadStudent(student)) {
+                        JSONObject obj = new JSONObject();
+                        obj.accumulate("examNumber", student.getExamNumber());
+                        obj.accumulate("uploadTime", DateUtils.formatDateTime(student.getUploadTime()));
+                        array.add(obj);
+                        // 增加人工审核数据
+                        if (sc.isManual()) {
+                            checkStudentService.save(new CheckStudent(student.getId(), examId,
+                                    student.getSubjectCode(), CheckType.MANUAL));
+                        }
+                    }
+                }
+            }
+        }
+        return array;
+    }
+    
     /**
      * 上传考生识别结果
      *

+ 105 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/utils/ScanStudentA4Parameter.java

@@ -0,0 +1,105 @@
+package cn.com.qmth.stmms.api.utils;
+
+public class ScanStudentA4Parameter {
+
+    private String examNumber;
+    
+    private int a4Count;
+    
+    private int sliceCount;
+
+    private int sheetCount;
+
+    private String answers;
+
+    private boolean absent;
+
+    private String batchCode;
+
+    private String paperType;
+
+    private boolean manual;
+
+    private Integer cardNumber;
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public int getSliceCount() {
+        return sliceCount;
+    }
+
+    public void setSliceCount(int sliceCount) {
+        this.sliceCount = sliceCount;
+    }
+
+    public int getSheetCount() {
+        return sheetCount;
+    }
+
+    public void setSheetCount(int sheetCount) {
+        this.sheetCount = sheetCount;
+    }
+
+    public boolean isAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(boolean absent) {
+        this.absent = absent;
+    }
+
+    public String getAnswers() {
+        return answers;
+    }
+
+    public void setAnswers(String answers) {
+        this.answers = answers;
+    }
+
+    public String getBatchCode() {
+        return batchCode;
+    }
+
+    public void setBatchCode(String batchCode) {
+        this.batchCode = batchCode;
+    }
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
+    public boolean isManual() {
+        return manual;
+    }
+
+    public void setManualUpdate(boolean manual) {
+        this.manual = manual;
+    }
+
+    public Integer getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(Integer cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+
+	public int getA4Count() {
+		return a4Count;
+	}
+
+	public void setA4Count(int a4Count) {
+		this.a4Count = a4Count;
+	}
+
+}