瀏覽代碼

全卷复核

xiatian 8 小時之前
父節點
當前提交
5b734ee4d4

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

@@ -359,6 +359,9 @@ CREATE TABLE `eb_exam_student`
     `score_verify_flagged`  tinyint(1)   DEFAULT NULL COMMENT '成绩校验标记结果',
     `inspected`             tinyint(1)  NOT NULL COMMENT '当前轮次是否已审核',
     `collation_label_code`  varchar(64) DEFAULT NULL COMMENT '回卷标识代码',
+    `inspect_tag_user`     int(11)      DEFAULT NULL COMMENT '全卷复核标记人ID',
+    `inspect_tag_time`     datetime     DEFAULT NULL COMMENT '全卷复核标记时间',
+    `inspect_tag_flagged`  tinyint(1)   DEFAULT NULL COMMENT '全卷复核标记结果',
     PRIMARY KEY (`id`),
     UNIQUE KEY `index1` (`exam_id`, `exam_number`),
     UNIQUE KEY `index2` (`exam_id`, `secret_number`),
@@ -446,6 +449,7 @@ CREATE TABLE `eb_marker`
     `avg_speed_na`    double      DEFAULT NULL COMMENT '平均时长不含仲裁',
     `stdev_score_na`  double      DEFAULT NULL COMMENT '标准差不含仲裁',
     `mark_setting`    text        DEFAULT NULL COMMENT '个性化评卷参数设置',
+    `wait_arbitrate_count` int(11)     DEFAULT NULL COMMENT '待仲裁数';
     PRIMARY KEY (`id`),
     KEY `index1` (`user_id`),
     KEY `index2` (`exam_id`, `subject_code`, `group_number`)

+ 4 - 0
install/mysql/upgrade/2.0.0.sql

@@ -4,6 +4,10 @@ USE `stmms_ft`;
 
 ALTER TABLE eb_marker ADD COLUMN `wait_arbitrate_count` int(11)     DEFAULT NULL COMMENT '待仲裁数';
 
+ALTER TABLE eb_exam_student ADD COLUMN   `inspect_tag_user`     int(11)      DEFAULT NULL COMMENT '全卷复核标记人ID';
+ALTER TABLE eb_exam_student ADD COLUMN   `inspect_tag_time`     datetime     DEFAULT NULL COMMENT '全卷复核标记时间';
+ALTER TABLE eb_exam_student ADD COLUMN   `inspect_tag_flagged`  tinyint(1)   DEFAULT NULL COMMENT '全卷复核标记结果';
+
 DROP TABLE IF EXISTS `m_reject_type`;
 CREATE TABLE `m_reject_type`
 (

+ 22 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ExamStudentVo.java

@@ -75,6 +75,12 @@ public class ExamStudentVo {
      */
     private String studentCode;
 
+    private Boolean inspectTagFlagged;
+
+    @ApiModelProperty("标记卷")
+    @ExcelField(title = "标记卷", align = 2, sort = 15)
+    private String inspectTagFlaggedText;
+
     /**
      * 密号
      */
@@ -898,4 +904,20 @@ public class ExamStudentVo {
         this.subjectText = subjectText;
     }
 
+    public Boolean getInspectTagFlagged() {
+        return inspectTagFlagged;
+    }
+
+    public void setInspectTagFlagged(Boolean inspectTagFlagged) {
+        this.inspectTagFlagged = inspectTagFlagged;
+    }
+
+    public String getInspectTagFlaggedText() {
+        return inspectTagFlaggedText;
+    }
+
+    public void setInspectTagFlaggedText(String inspectTagFlaggedText) {
+        this.inspectTagFlaggedText = inspectTagFlaggedText;
+    }
+
 }

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

@@ -332,4 +332,12 @@ public interface ExamStudentDao extends JpaRepository<ExamStudent, Integer>, Jpa
     @Modifying
     @Query("update ExamStudent s set s.collationLabelCode=?3 where s.examId=?1 and s.examNumber=?2")
     void updateCollationLabelCode(int examId, String examNumber, String collationLabelCode);
+
+    @Modifying
+    @Query("update ExamStudent s set s.inspectTagFlagged=0, s.inspectTagTime=null ,s.inspectTagUser=null where s.id=?1 ")
+    public void inspectTagClear(Integer studentId);
+
+    @Modifying
+    @Query("update ExamStudent s set s.inspectTagFlagged=?2, s.inspectTagTime=?3 ,s.inspectTagUser=?4 where s.id=?1 ")
+    public void inspectTagFlag(Integer studentId, Boolean flag, Date time, Integer userId);
 }

+ 28 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java

@@ -156,7 +156,7 @@ public class ExamStudent implements Serializable {
      */
     @Column(name = "objective_page_count", nullable = false)
     private Integer objectivePageCount;
-    
+
     /**
      * 原图数量
      */
@@ -325,6 +325,25 @@ public class ExamStudent implements Serializable {
     @Column(name = "score_verify_flagged")
     private Boolean scoreVerifyFlagged;
 
+    /**
+     * 全卷复核标记人ID
+     */
+    @Column(name = "inspect_tag_user")
+    private Integer inspectTagUser;
+
+    /**
+     * 全卷复核标记时间
+     */
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "inspect_tag_time")
+    private Date inspectTagTime;
+
+    /**
+     * 全卷复核标记结果
+     */
+    @Column(name = "inspect_tag_flagged")
+    private Boolean inspectTagFlagged;
+
     /**
      * 科目备注信息
      */
@@ -871,8 +890,8 @@ public class ExamStudent implements Serializable {
     }
 
     public void randomSecretNumber() {
-        secretNumber = String.valueOf((int) (RandomUtils.nextDouble() * (SECRET_NUMBER_END - SECRET_NUMBER_START))
-                + SECRET_NUMBER_START);
+        secretNumber = String.valueOf(
+                (int) (RandomUtils.nextDouble() * (SECRET_NUMBER_END - SECRET_NUMBER_START)) + SECRET_NUMBER_START);
     }
 
     public Date getInspectTime() {
@@ -989,14 +1008,13 @@ public class ExamStudent implements Serializable {
         this.trial = trial;
     }
 
+    public Integer getObjectivePageCount() {
+        return objectivePageCount;
+    }
 
-	public Integer getObjectivePageCount() {
-		return objectivePageCount;
-	}
-
-	public void setObjectivePageCount(Integer objectivePageCount) {
-		this.objectivePageCount = objectivePageCount;
-	}
+    public void setObjectivePageCount(Integer objectivePageCount) {
+        this.objectivePageCount = objectivePageCount;
+    }
 
     public String getCollationLabelCode() {
         return collationLabelCode;

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/InspectQuery.java

@@ -195,6 +195,9 @@ public class InspectQuery extends BaseQuery<ExamStudentVo> {
     @ApiModelProperty("大题分截止")
     private Double mainEndScore;
 
+    @ApiModelProperty("是否是标记卷")
+    private Boolean inspectTagFlagged;
+
     public InspectQuery() {
         super();
         this.statusSet = new HashSet<>();
@@ -692,4 +695,12 @@ public class InspectQuery extends BaseQuery<ExamStudentVo> {
         this.studentId = studentId;
     }
 
+    public Boolean getInspectTagFlagged() {
+        return inspectTagFlagged;
+    }
+
+    public void setInspectTagFlagged(Boolean inspectTagFlagged) {
+        this.inspectTagFlagged = inspectTagFlagged;
+    }
+
 }

+ 28 - 20
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -35,7 +35,7 @@ public interface ExamStudentService {
     List<ExamStudent> findByExamId(int examId);
 
     List<ExamStudent> findByExamIdAndUploadAndAbsent(int examId, boolean upload, boolean absent, int pageNumber,
-                                                     int pageSize);
+            int pageSize);
 
     ExamStudent findByExamIdAndExamNumber(int examId, String examNumber);
 
@@ -67,7 +67,7 @@ public interface ExamStudentService {
     void updateSubjectInfo(ExamSubject subject);
 
     void updateSubjectiveStatusAndScore(Integer examId, String subjectCode, SubjectiveStatus status, double score,
-                                        String scoreList);
+            String scoreList);
 
     void updateSubjectiveStatusAndScore(Integer id, SubjectiveStatus status, double score, String scoreList);
 
@@ -86,10 +86,10 @@ public interface ExamStudentService {
     void updateException(int id, boolean exception);
 
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCode(Integer schoolId, String subjectCode,
-                                                                  String studentCode);
+            String studentCode);
 
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
-                                                                           String studentCode, String examSeqCode);
+            String studentCode, String examSeqCode);
 
     public ExamStudent findByExamIdAndSubjectCodeAndUploadTimeAfter(int examId, String code, Date date);
 
@@ -104,9 +104,10 @@ public interface ExamStudentService {
     List<ExamStudent> findAbsentOrBreachLibraryStudent(int examId, String subjectCode);
 
     public Long countByExamIdAndSubjectCodeAndCampus(Integer examId, String code, String campusName, boolean upload,
-                                                     boolean absent);
+            boolean absent);
 
-    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent, boolean breach);
+    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,
+            boolean breach);
 
     public long countByAbsentAndBreach(int examId, String subjectCode, Boolean absent, Boolean breach);
 
@@ -119,14 +120,14 @@ public interface ExamStudentService {
     List<ExamStudent> findByExamIdAndSubjectCode(int examId, String subjectCode, int pageNumber, int pageSize);
 
     List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatus(Integer examId, String subjectCode,
-                                                                  SubjectiveStatus... status);
+            SubjectiveStatus... status);
 
     List<PictureTag> buildSheetTags(ExamStudent student, int index, boolean withGroupScore);
 
     Map<Integer, List<PictureTag>> buildSheetTags(ExamStudent student, boolean withGroupScore, boolean sliceConfigFix);
 
     Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore,
-                                                 List<PictureConfigItem> sliceConfig);
+            List<PictureConfigItem> sliceConfig);
 
     boolean updateScanInfo(ExamStudent student);
 
@@ -147,11 +148,12 @@ public interface ExamStudentService {
     public List<String> findDistinctClassName(Integer examId);
 
     public void updateSubjectiveStatusAndTimeAndInspectorId(Integer studentId, SubjectiveStatus status,
-                                                            Date inspectTime, Integer inspectorId);
+            Date inspectTime, Integer inspectorId);
 
     public void inspect(Integer studentId, Date inspectTime, Integer inspectorId);
 
-    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode, String subjectCode);
+    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode,
+            String subjectCode);
 
     public ExamStudent randomStudent(Integer examId, String code);
 
@@ -207,27 +209,29 @@ public interface ExamStudentService {
 
     long countSheetCountByQuery(ExamStudentSearchQuery query);
 
-	Set<String> findSubjectHasTaskByExamId(int examId);
+    Set<String> findSubjectHasTaskByExamId(int examId);
 
-	public void clearInspect(Integer studentId);
+    public void clearInspect(Integer studentId);
 
-	public void updateInspectCount(Integer studentId, Integer inspectCount);
+    public void updateInspectCount(Integer studentId, Integer inspectCount);
 
-    ExamStudent findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode( Integer schoolId,Integer examId, String subjectCode, String studentCode);
+    ExamStudent findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode(Integer schoolId, Integer examId,
+            String subjectCode, String studentCode);
 
     List<ExamStudent> findByExamIdAndSubjectCodeAndTrial(Integer examId, String subjectCode, boolean isTrial);
 
-	public boolean saveObjectivePageCount(ExamStudent student);
+    public boolean saveObjectivePageCount(ExamStudent student);
 
-	long countObjectivePageCountByExamId(Integer examId);
+    long countObjectivePageCountByExamId(Integer examId);
 
-	long countObjectiveByExamId(Integer examId);
+    long countObjectiveByExamId(Integer examId);
 
-	long countSubjectiveByExamId(Integer examId);
+    long countSubjectiveByExamId(Integer examId);
 
-	long countAllUploadByExamId(Integer examId);
+    long countAllUploadByExamId(Integer examId);
 
-    List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId, String subjectCode, SubjectiveStatus status,boolean isuplaod,boolean absent,boolean breach);
+    List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId,
+            String subjectCode, SubjectiveStatus status, boolean isuplaod, boolean absent, boolean breach);
 
     List<ExamStudent> findByExamIdAndExamNumberIn(Integer examId, List<String> examNumberIn);
 
@@ -236,4 +240,8 @@ public interface ExamStudentService {
     void clearCollationLabelCode(int examId);
 
     void updateCollationLabelCode(int examId, String examNumber, String collationLabelCode);
+
+    public void inspectTagFlag(Integer studentId, Boolean flag, Integer userId);
+
+    void inspectTagClear(Integer studentId);
 }

+ 70 - 56
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -5,6 +5,7 @@ import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.model.*;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.*;
+import cn.com.qmth.stmms.biz.exception.StatusException;
 import cn.com.qmth.stmms.biz.mark.dao.HeaderTagDao;
 import cn.com.qmth.stmms.biz.mark.dao.HeaderTrackDao;
 import cn.com.qmth.stmms.biz.mark.model.*;
@@ -184,9 +185,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             student.setSubjectCategory(subject.getCategory());
             if (student.getSecretNumber() == null) {
                 student.randomSecretNumber();
-                while (secretNumberSet.contains(student.getSecretNumber())
-                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
-                        > 0) {
+                while (secretNumberSet.contains(student.getSecretNumber()) || studentDao
+                        .countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
                     student.randomSecretNumber();
                 }
             }
@@ -431,10 +431,10 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Transactional
     public boolean updateScanInfo(ExamStudent student) {
         student.setUploadTime(new Date());
-        return studentDao
-                .updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(), student.getAnswers(),
-                        student.getBatchCode(), student.getPaperType(), student.isAbsent(), student.getUploadTime(),
-                        student.getObjectiveScore(), student.getObjectiveScoreList(), student.getCardNumber()) > 0;
+        return studentDao.updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(),
+                student.getAnswers(), student.getBatchCode(), student.getPaperType(), student.isAbsent(),
+                student.getUploadTime(), student.getObjectiveScore(), student.getObjectiveScoreList(),
+                student.getCardNumber()) > 0;
     }
 
     @Override
@@ -480,7 +480,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     @Transactional
     public void updateCollationLabelCode(int examId, String examNumber, String collationLabelCode) {
-        studentDao.updateCollationLabelCode(examId,examNumber, collationLabelCode);
+        studentDao.updateCollationLabelCode(examId, examNumber, collationLabelCode);
     }
 
     @Override
@@ -548,14 +548,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             @Override
             public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();
-                Expression<Double> evaluationItemSum = cb
-                        .sum(root.get("objectiveScore").as(Double.class), root.get("subjectiveScore").as(Double.class));
+                Expression<Double> evaluationItemSum = cb.sum(root.get("objectiveScore").as(Double.class),
+                        root.get("subjectiveScore").as(Double.class));
                 if (query.getStartScore() != null) {
                     Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
                     Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
                     if (query.getStartScore() == 0) {
-                        Predicate predicate = cb
-                                .or(cb.equal(root.get("absent"), true), cb.equal(root.get("breach"), true));
+                        Predicate predicate = cb.or(cb.equal(root.get("absent"), true),
+                                cb.equal(root.get("breach"), true));
                         Predicate predicate3 = cb.and(predicate1, predicate2);
                         predicates.add(cb.or(predicate, predicate3));
                     } else {
@@ -628,8 +628,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (query.getObjectiveScore() != null) {
                     predicates.add(cb.equal(root.get("objectiveScore"), query.getObjectiveScore()));
                 } else if (query.getObjectiveScoreGt() != null) {
-                    predicates.add(cb.greaterThan(root.get("objectiveScore").as(Double.class),
-                            query.getObjectiveScoreGt()));
+                    predicates.add(
+                            cb.greaterThan(root.get("objectiveScore").as(Double.class), query.getObjectiveScoreGt()));
                 } else if (query.getObjectiveScoreLt() != null) {
                     predicates
                             .add(cb.lessThan(root.get("objectiveScore").as(Double.class), query.getObjectiveScoreLt()));
@@ -644,11 +644,11 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (query.getSubjectiveScore() != null) {
                     predicates.add(cb.equal(root.get("subjectiveScore"), query.getSubjectiveScore()));
                 } else if (query.getSubjectiveScoreGt() != null) {
-                    predicates.add(cb.greaterThan(root.get("subjectiveScore").as(Double.class),
-                            query.getSubjectiveScoreGt()));
+                    predicates.add(
+                            cb.greaterThan(root.get("subjectiveScore").as(Double.class), query.getSubjectiveScoreGt()));
                 } else if (query.getSubjectiveScoreLt() != null) {
-                    predicates.add(cb.lessThan(root.get("subjectiveScore").as(Double.class),
-                            query.getSubjectiveScoreLt()));
+                    predicates.add(
+                            cb.lessThan(root.get("subjectiveScore").as(Double.class), query.getSubjectiveScoreLt()));
                 }
                 if (query.getUpload() != null) {
                     predicates.add(cb.equal(root.get("upload"), query.getUpload()));
@@ -793,9 +793,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (query.getSheetCount() != null) {
                     predicates.add(cb.equal(root.get("sheetCount"), query.getSheetCount()));
                 }
-                return predicates.isEmpty() ?
-                        cb.conjunction() :
-                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
+                return predicates.isEmpty() ? cb.conjunction()
+                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -814,8 +813,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
             String studentCode, String examSeqCode) {
-        return studentDao
-                .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
+        return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
+                examSeqCode);
     }
 
     @Override
@@ -1004,8 +1003,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore,
             List<PictureConfigItem> sliceConfig) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
-        List<ExamQuestion> questions = questionService
-                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
+        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                student.getSubjectCode(), false);
         List<ScoreItem> scoreList = student.getScoreList(false);
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         for (MarkGroup group : markGroups) {
@@ -1027,14 +1026,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         List<String> lines = new LinkedList<>();
         lines.add("成绩明细");
         // 总分得分明细
-        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "=" + format
-                .format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+" + format
-                .format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
+        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "="
+                + format.format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+"
+                + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
         // 客观题得分明细
         List<String> objectives = new LinkedList<>();
-        List<ExamQuestion> questions = questionService
-                .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
-                        student.getPaperType());
+        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
+                student.getSubjectCode(), true, student.getPaperType());
         List<ScoreItem> scoreList = student.getScoreList(true);
         List<String> details = new ArrayList<>();
         int i = 0;
@@ -1162,31 +1160,29 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             List<MarkTrack> tracks = trackService.findByLibraryId(library.getId());
             for (MarkTrack markTrack : tracks) {
                 // 未作答时只显示汉字"空"
-                originTags
-                        .add(new OriginTag(markTrack.getMarkerId(), Role.MARKER.toString(), markTrack.getGroupNumber(),
-                                markTrack.getQuestionNumber(),
-                                markTrack.isUnanswered() ? "空" : format.format(markTrack.getScore()),
-                                markTrack.getOffsetIndex(), markTrack.getOffsetX(), markTrack.getOffsetY()));
+                originTags.add(new OriginTag(markTrack.getMarkerId(), Role.MARKER.toString(),
+                        markTrack.getGroupNumber(), markTrack.getQuestionNumber(),
+                        markTrack.isUnanswered() ? "空" : format.format(markTrack.getScore()),
+                        markTrack.getOffsetIndex(), markTrack.getOffsetX(), markTrack.getOffsetY()));
             }
             // 添加特殊标记
             List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(library.getId());
             for (MarkSpecialTag markSpecialTag : specialTags) {
-                originTags
-                        .add(new OriginTag(library.getMarkerId(), Role.MARKER.toString(), library.getGroupNumber(), "",
-                                markSpecialTag.getTagName(), markSpecialTag.getOffsetIndex(),
-                                markSpecialTag.getOffsetX(), markSpecialTag.getOffsetY()));
+                originTags.add(new OriginTag(library.getMarkerId(), Role.MARKER.toString(), library.getGroupNumber(),
+                        "", markSpecialTag.getTagName(), markSpecialTag.getOffsetIndex(), markSpecialTag.getOffsetX(),
+                        markSpecialTag.getOffsetY()));
             }
             // }
         }
-        List<HeaderTag> headerTags = headerTagDao
-                .findByStudentIdAndGroupNumberOrderByIdAsc(student.getId(), group.getNumber());
+        List<HeaderTag> headerTags = headerTagDao.findByStudentIdAndGroupNumberOrderByIdAsc(student.getId(),
+                group.getNumber());
         for (HeaderTag headerTag : headerTags) {
             originTags.add(new OriginTag(headerTag.getUserId(), Role.SUBJECT_HEADER.toString(),
                     headerTag.getGroupNumber(), "", headerTag.getTagName(), headerTag.getOffsetIndex(),
                     headerTag.getOffsetX(), headerTag.getOffsetY()));
         }
-        List<HeaderTrack> headerTracks = headerTrackDao
-                .findByPkStudentIdAndGroupNumber(student.getId(), group.getNumber());
+        List<HeaderTrack> headerTracks = headerTrackDao.findByPkStudentIdAndGroupNumber(student.getId(),
+                group.getNumber());
         for (HeaderTrack headerTrack : headerTracks) {
             originTags.add(new OriginTag(headerTrack.getUserId(), Role.SUBJECT_HEADER.toString(),
                     headerTrack.getGroupNumber(), headerTrack.getQuestionNumber(),
@@ -1282,9 +1278,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId,
             String subjectCode, SubjectiveStatus status, boolean uplaod, boolean absent, boolean breach) {
-        return studentDao
-                .findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(examId, subjectCode, status,
-                        uplaod, absent, breach);
+        return studentDao.findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(examId,
+                subjectCode, status, uplaod, absent, breach);
     }
 
     @Override
@@ -1434,9 +1429,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public int batchUpdate(List<ExamStudent> updateList) {
         int i = 0;
         for (ExamStudent student : updateList) {
-            i = i + this.studentDao
-                    .updateInfo(student.getId(), student.getCollege(), student.getClassName(), student.getTeacher(),
-                            student.getExamRoom(), student.getExamSite(), student.getRemark());
+            i = i + this.studentDao.updateInfo(student.getId(), student.getCollege(), student.getClassName(),
+                    student.getTeacher(), student.getExamRoom(), student.getExamSite(), student.getRemark());
         }
         return i;
     }
@@ -1528,11 +1522,12 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         StringBuilder sql = new StringBuilder(" WHERE 1=1 ");
         if (query.getStartScore() != null) {
             if (query.getStartScore() == 0) {
-                sql.append(" and (s.is_absent=1 or s.is_breach=1 or (s.subjective_score+s.objective_score>=" + query
-                        .getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore() + ") )");
+                sql.append(" and (s.is_absent=1 or s.is_breach=1 or (s.subjective_score+s.objective_score>="
+                        + query.getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore()
+                        + ") )");
             } else {
-                sql.append(" and s.is_absent=0 and s.is_breach=0 and s.subjective_score+s.objective_score>=" + query
-                        .getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore());
+                sql.append(" and s.is_absent=0 and s.is_breach=0 and s.subjective_score+s.objective_score>="
+                        + query.getStartScore() + " and s.subjective_score+s.objective_score<=" + query.getEndScore());
             }
         }
         if (query.getExamId() != null && query.getExamId() > 0) {
@@ -1755,8 +1750,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public ExamStudent findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode(Integer schoolId, Integer examId,
             String subjectCode, String studentCode) {
-        return studentDao
-                .findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode(schoolId, examId, subjectCode, studentCode);
+        return studentDao.findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode(schoolId, examId, subjectCode,
+                studentCode);
     }
 
     @Override
@@ -1774,4 +1769,23 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public boolean saveObjectivePageCount(ExamStudent student) {
         return studentDao.updateObjectivePageCount(student.getId(), student.getObjectivePageCount()) > 0;
     }
+
+    @Transactional
+    @Override
+    public void inspectTagFlag(Integer studentId, Boolean flag, Integer userId) {
+        ExamStudent es = studentDao.findOne(studentId);
+        if (es == null) {
+            throw new StatusException("未找到考试信息");
+        }
+        if (!SubjectiveStatus.MARKED.equals(es.getSubjectiveStatus())) {
+            throw new StatusException("该试卷未评完,不能标记");
+        }
+        studentDao.inspectTagFlag(studentId, flag, new Date(), userId);
+    }
+
+    @Transactional
+    @Override
+    public void inspectTagClear(Integer studentId) {
+        studentDao.inspectTagClear(studentId);
+    }
 }

+ 7 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/InspectedServiceImpl.java

@@ -95,6 +95,13 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
         Double mainEndScore = query.getMainEndScore();
         SelectiveStatus selectiveStatus = query.getSelectiveStatus();
         StringBuilder whereSql = new StringBuilder(" WHERE s.is_upload = 1 and s.is_absent = 0 and s.is_breach = 0 ");
+        if (query.getInspectTagFlagged() != null) {
+            if (query.getInspectTagFlagged()) {
+                whereSql.append(" and s.inspect_tag_flagged=1 ");
+            } else {
+                whereSql.append(" and (s.inspect_tag_flagged=0 or s.inspect_tag_flagged is null) ");
+            }
+        }
         if (query.getExamId() != null) {
             whereSql.append(" and s.exam_id =" + query.getExamId());
         }

+ 21 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/InspectedController.java

@@ -291,8 +291,13 @@ public class InspectedController extends BaseApiController {
         }
         List<ExamStudentVo> list = inspectedService.findByQuery(query);
         for (ExamStudentVo e : list) {
-            e.setSubjectText(e.getSubjectCode() + "-" + e.getSubjectName());
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
+            e.setSubjectText(e.getSubjectCode() + "-" + e.getSubjectName());
+            if (e.getInspectTagFlagged() == null) {
+                e.setInspectTagFlaggedText("否");
+            } else {
+                e.setInspectTagFlaggedText(e.getInspectTagFlagged() ? "是" : "否");
+            }
         }
         int maxInspectRound = 1;
         if (list != null && list.size() > 0) {
@@ -505,6 +510,12 @@ public class InspectedController extends BaseApiController {
             if (exam.isForbiddenInfo() && !Role.SCHOOL_ADMIN.equals(wu.getRole())) {
                 e.setSecretNumber(DEFAULT_SECRET_NUMBER);
             }
+            e.setSubjectText(e.getSubjectCode() + "-" + e.getSubjectName());
+            if (e.getInspectTagFlagged() == null) {
+                e.setInspectTagFlaggedText("否");
+            } else {
+                e.setInspectTagFlaggedText(e.getInspectTagFlagged() ? "是" : "否");
+            }
         }
         int maxInspectRound = 1;
         if (list != null && list.size() > 0) {
@@ -551,4 +562,13 @@ public class InspectedController extends BaseApiController {
         }
     }
 
+    @ApiOperation(value = "复核标记或取消标记")
+    @RequestMapping(value = "tag-flag", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultMessage tagFlag(@RequestParam Integer studentId, @RequestParam Boolean flag) {
+        ApiUser wu = getApiUser();
+        studentService.inspectTagFlag(studentId, flag, wu.getUser().getId());
+        return resultOk();
+    }
+
 }