Browse Source

修改删除考生已上传状态的接口bug,增加对应的数据库操作方法

luoshi 2 years ago
parent
commit
e5db7ed4b2

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

@@ -1,21 +1,20 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 package cn.com.qmth.stmms.biz.exam.dao;
 
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
 
 
-public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent, Integer>,
-        JpaSpecificationExecutor<ExamStudent> {
+public interface ExamStudentDao
+        extends PagingAndSortingRepository<ExamStudent, Integer>, JpaSpecificationExecutor<ExamStudent> {
 
 
     public List<ExamStudent> findByExamId(int examId, Pageable pageable);
     public List<ExamStudent> findByExamId(int examId, Pageable pageable);
 
 
@@ -73,8 +72,8 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
 
 
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.subjectiveStatus=?3, s.subjectiveScore=?4, s.subjectiveScoreList=?5,s.inspectTime=?6,s.inspectorId=?7 where s.examId=?1 and s.subjectCode=?2")
     @Query("update ExamStudent s set s.subjectiveStatus=?3, s.subjectiveScore=?4, s.subjectiveScoreList=?5,s.inspectTime=?6,s.inspectorId=?7 where s.examId=?1 and s.subjectCode=?2")
-    public void updateSubjectiveStatusAndScore(Integer examId, String subjetCode, SubjectiveStatus status,
-            double score, String scoreList, Date inspectTime, Integer inspectorId);
+    public void updateSubjectiveStatusAndScore(Integer examId, String subjetCode, SubjectiveStatus status, double score,
+            String scoreList, Date inspectTime, Integer inspectorId);
 
 
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.subjectiveStatus=?3, s.subjectiveScore=?4, s.subjectiveScoreList=?5 "
     @Query("update ExamStudent s set s.subjectiveStatus=?3, s.subjectiveScore=?4, s.subjectiveScoreList=?5 "
@@ -110,11 +109,18 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
 
 
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.sheetCount=?2, s.sliceCount=?3, s.answers=?4, s.batchCode=?5, s.paperType=?6,"
     @Query("update ExamStudent s set s.sheetCount=?2, s.sliceCount=?3, s.answers=?4, s.batchCode=?5, s.paperType=?6,"
-            + " s.absent=?7, s.upload=true, s.uploadTime=?8, s.objectiveScore=?9, s.objectiveScoreList=?10, s.cardNumber=?11  where s.id=?1")
+            + " s.absent=?7, s.upload=true, s.uploadTime=?8, s.objectiveScore=?9, s.objectiveScoreList=?10, "
+            + "s.cardNumber=?11 where s.id=?1")
     public int updateScanInfo(Integer id, Integer sheetCount, Integer sliceCount, String answers, String batchCode,
     public int updateScanInfo(Integer id, Integer sheetCount, Integer sliceCount, String answers, String batchCode,
             String paperType, boolean absent, Date uploadTime, Double objectiveScore, String objectiveScoreList,
             String paperType, boolean absent, Date uploadTime, Double objectiveScore, String objectiveScoreList,
             Integer cardNumber);
             Integer cardNumber);
 
 
+    @Modifying
+    @Query("update ExamStudent s set 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);
+
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.manualAbsent=0 where s.examId=?1")
     @Query("update ExamStudent s set s.manualAbsent=0 where s.examId=?1")
     public void clearManualAbsent(int examId);
     public void clearManualAbsent(int examId);
@@ -147,7 +153,8 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
 
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false and s.uploadTime!=null "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false and s.uploadTime!=null "
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
-    public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber, Pageable page);
+    public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber,
+            Pageable page);
 
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false and s.uploadTime!=null and s.uploadTime>=?4 "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false and s.uploadTime!=null and s.uploadTime>=?4 "
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
@@ -198,7 +205,8 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
     public void updateSubjectiveStatusAndTimeAndInspectorId(Integer studentId, SubjectiveStatus status,
     public void updateSubjectiveStatusAndTimeAndInspectorId(Integer studentId, SubjectiveStatus status,
             Date inspectTime, Integer inspectorId);
             Date inspectTime, Integer inspectorId);
 
 
-    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode, String subjectCode);
+    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode,
+            String subjectCode);
 
 
     @Query("select sum(s.sheetCount) from ExamStudent s where s.examId=?1 ")
     @Query("select sum(s.sheetCount) from ExamStudent s where s.examId=?1 ")
     public Long sumSheetCountByExamId(Integer examId);
     public Long sumSheetCountByExamId(Integer examId);

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -105,7 +105,8 @@ public interface ExamStudentService {
     public Long countByExamIdAndSubjectCodeAndCampus(Integer examId, String code, String campusName, boolean upload,
     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);
     public long countByAbsentAndBreach(int examId, String subjectCode, Boolean absent, Boolean breach);
 
 
@@ -129,6 +130,8 @@ public interface ExamStudentService {
 
 
     boolean updateScanInfo(ExamStudent student);
     boolean updateScanInfo(ExamStudent student);
 
 
+    boolean resetScanInfo(ExamStudent student);
+
     long countUploadedByExamIdAndSubjectCode(Integer examId, String subjectCode);
     long countUploadedByExamIdAndSubjectCode(Integer examId, String subjectCode);
 
 
     long countUploadedByExamId(Integer examId);
     long countUploadedByExamId(Integer examId);
@@ -146,7 +149,8 @@ public interface ExamStudentService {
     public void updateSubjectiveStatusAndTimeAndInspectorId(Integer studentId, SubjectiveStatus status,
     public void updateSubjectiveStatusAndTimeAndInspectorId(Integer studentId, SubjectiveStatus status,
             Date inspectTime, Integer inspectorId);
             Date inspectTime, Integer inspectorId);
 
 
-    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode, String subjectCode);
+    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode,
+            String subjectCode);
 
 
     long countByExamIdAndSubjectCodeAndStatus(int examId, String subjectCode, SubjectiveStatus... status);
     long countByExamIdAndSubjectCodeAndStatus(int examId, String subjectCode, SubjectiveStatus... status);
 
 

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

@@ -1,55 +1,11 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
 
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.RandomUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
-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.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
-import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
-import cn.com.qmth.stmms.biz.exam.model.Exam;
-import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.*;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
-import cn.com.qmth.stmms.biz.exam.service.AnswerCardService;
-import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
-import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-import cn.com.qmth.stmms.biz.exam.service.ExamService;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
-import cn.com.qmth.stmms.biz.mark.model.MarkConfigItem;
-import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
-import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
-import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
-import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.exam.service.*;
+import cn.com.qmth.stmms.biz.mark.model.*;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
@@ -58,6 +14,20 @@ import cn.com.qmth.stmms.biz.utils.PictureConfigTransform;
 import cn.com.qmth.stmms.biz.utils.PictureTag;
 import cn.com.qmth.stmms.biz.utils.PictureTag;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.RandomUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.criteria.*;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.*;
 
 
 @Service
 @Service
 public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
 public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
@@ -185,7 +155,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             if (student.getSecretNumber() == null) {
             if (student.getSecretNumber() == null) {
                 student.randomSecretNumber();
                 student.randomSecretNumber();
                 while (secretNumberSet.contains(student.getSecretNumber())
                 while (secretNumberSet.contains(student.getSecretNumber())
-                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
+                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
+                        > 0) {
                     student.randomSecretNumber();
                     student.randomSecretNumber();
                 }
                 }
             }
             }
@@ -405,10 +376,16 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Transactional
     @Transactional
     public boolean updateScanInfo(ExamStudent student) {
     public boolean updateScanInfo(ExamStudent student) {
         student.setUploadTime(new Date());
         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
+    @Transactional
+    public boolean resetScanInfo(ExamStudent student) {
+        return studentDao.resetScanInfo(student.getId(), student.getPaperType()) > 0;
     }
     }
 
 
     @Override
     @Override
@@ -483,14 +460,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             @Override
             @Override
             public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
             public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();
                 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) {
                 if (query.getStartScore() != null) {
                     Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
                     Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
                     Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
                     Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
                     if (query.getStartScore() == 0) {
                     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);
                         Predicate predicate3 = cb.and(predicate1, predicate2);
                         predicates.add(cb.or(predicate, predicate3));
                         predicates.add(cb.or(predicate, predicate3));
                     } else {
                     } else {
@@ -698,8 +675,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (query.getSheetCount() != null) {
                 if (query.getSheetCount() != null) {
                     predicates.add(cb.equal(root.get("sheetCount"), query.getSheetCount()));
                     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()]));
             }
             }
         };
         };
     }
     }
@@ -718,8 +696,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     @Override
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
             String studentCode, String examSeqCode) {
             String studentCode, String examSeqCode) {
-        return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
-                examSeqCode);
+        return studentDao
+                .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
     }
     }
 
 
     @Override
     @Override
@@ -758,9 +736,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setPageNumber(1);
         query.setPageNumber(1);
         query.setPageSize(1);
         query.setPageSize(1);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
-        List<ExamStudent> list = minUploadTime != null ? studentDao.findUnLibraryStudent(examId, subjectCode,
-                groupNumber, minUploadTime, query) : studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber,
-                query);
+        List<ExamStudent> list = minUploadTime != null ?
+                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, minUploadTime, query) :
+                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, query);
         return list.isEmpty() ? null : list.get(0);
         return list.isEmpty() ? null : list.get(0);
     }
     }
 
 
@@ -770,8 +748,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setPageNumber(1);
         query.setPageNumber(1);
         query.setPageSize(1);
         query.setPageSize(1);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
-        List<ExamStudent> list = studentDao.findUnTrialStudent(examId, subjectCode, groupNumber,
-                SubjectiveStatus.TRIAL, query);
+        List<ExamStudent> list = studentDao
+                .findUnTrialStudent(examId, subjectCode, groupNumber, SubjectiveStatus.TRIAL, query);
         return list.isEmpty() ? null : list.get(0);
         return list.isEmpty() ? null : list.get(0);
     }
     }
 
 
@@ -797,7 +775,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         return countByQuery(query);
         return countByQuery(query);
     }
     }
 
 
-    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) {
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
@@ -850,8 +829,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             sliceConfig = exam.getSliceConfigList();
             sliceConfig = exam.getSliceConfigList();
         }
         }
         if (!sliceConfig.isEmpty()) {
         if (!sliceConfig.isEmpty()) {
-            List<PictureTag> tags = PictureConfigTransform.process(sliceConfig,
-                    getSliceTags(student, withGroupScore, sliceConfig)).get(index);
+            List<PictureTag> tags = PictureConfigTransform
+                    .process(sliceConfig, getSliceTags(student, withGroupScore, sliceConfig)).get(index);
             if (tags != null) {
             if (tags != null) {
                 list.addAll(tags);
                 list.addAll(tags);
             }
             }
@@ -901,8 +880,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore,
     public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore,
             List<PictureConfigItem> sliceConfig) {
             List<PictureConfigItem> sliceConfig) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
         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<ScoreItem> scoreList = student.getScoreList(false);
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         for (MarkGroup group : markGroups) {
         for (MarkGroup group : markGroups) {
@@ -924,13 +903,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         List<String> lines = new LinkedList<>();
         List<String> lines = new LinkedList<>();
         lines.add("成绩明细");
         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<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<ScoreItem> scoreList = student.getScoreList(true);
         List<String> details = new ArrayList<>();
         List<String> details = new ArrayList<>();
         int i = 0;
         int i = 0;
@@ -1012,9 +992,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (config.getX() <= 1 && config.getY() <= 1 && config.getI() <= sliceConfig.size()
                 if (config.getX() <= 1 && config.getY() <= 1 && config.getI() <= sliceConfig.size()
                         && sliceConfig.get(config.getI() - 1).getW() > 0
                         && sliceConfig.get(config.getI() - 1).getW() > 0
                         && sliceConfig.get(config.getI() - 1).getH() > 0) {
                         && sliceConfig.get(config.getI() - 1).getH() > 0) {
-                    tag = new OriginTag(format.format(score), config.getI(), config.getX()
-                            * sliceConfig.get(config.getI() - 1).getW(), config.getY()
-                            * sliceConfig.get(config.getI() - 1).getH());
+                    tag = new OriginTag(format.format(score), config.getI(),
+                            config.getX() * sliceConfig.get(config.getI() - 1).getW(),
+                            config.getY() * sliceConfig.get(config.getI() - 1).getH());
                 }
                 }
                 originTags.add(tag);
                 originTags.add(tag);
             }
             }
@@ -1032,8 +1012,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             // 添加轨迹分
             // 添加轨迹分
             List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
             List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
             for (MarkTrack markTrack : tracks) {
             for (MarkTrack markTrack : tracks) {
-                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(), markTrack
-                        .getOffsetX(), markTrack.getOffsetY()));
+                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
+                        markTrack.getOffsetX(), markTrack.getOffsetY()));
             }
             }
             // 添加特殊标记
             // 添加特殊标记
             List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());
             List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());
@@ -1086,7 +1066,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     }
     }
 
 
     @Override
     @Override
-    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode, String subjectCode) {
+    public List<ExamStudent> findByExamIdAndStudentCodeAndSubjectCode(int examId, String studentCode,
+            String subjectCode) {
         return studentDao.findByExamIdAndStudentCodeAndSubjectCode(examId, studentCode, subjectCode);
         return studentDao.findByExamIdAndStudentCodeAndSubjectCode(examId, studentCode, subjectCode);
     }
     }
 
 

+ 24 - 43
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java

@@ -1,23 +1,5 @@
 package cn.com.qmth.stmms.api.controller;
 package cn.com.qmth.stmms.api.controller;
 
 
-import java.util.Date;
-
-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;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
 import cn.com.qmth.stmms.api.exception.ApiException;
 import cn.com.qmth.stmms.api.exception.ApiException;
 import cn.com.qmth.stmms.api.utils.ScanStudentParameter;
 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.CheckStudent;
@@ -26,17 +8,23 @@ import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
 import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.file.service.FileService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.domain.ApiUser;
-import cn.com.qmth.stmms.common.enums.CheckType;
-import cn.com.qmth.stmms.common.enums.ExamStatus;
-import cn.com.qmth.stmms.common.enums.ExamType;
-import cn.com.qmth.stmms.common.enums.LogType;
-import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.enums.*;
 import cn.com.qmth.stmms.common.utils.DateUtils;
 import cn.com.qmth.stmms.common.utils.DateUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+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;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
 
 
 @Controller
 @Controller
 @RequestMapping("/api/scan")
 @RequestMapping("/api/scan")
@@ -54,7 +42,7 @@ public class ScanController extends BaseApiController {
     private CheckStudentService checkStudentService;
     private CheckStudentService checkStudentService;
 
 
     @Autowired
     @Autowired
-    private FileService fileService;
+    private ExamSubjectService subjectService;
 
 
     private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
     private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
 
 
@@ -76,8 +64,8 @@ public class ScanController extends BaseApiController {
         Exam exam = examService.findById(examId);
         Exam exam = examService.findById(examId);
         JSONArray array = new JSONArray();
         JSONArray array = new JSONArray();
         // 判断上传权限
         // 判断上传权限
-        if (exam == null || !exam.getSchoolId().equals(user.getSchoolId())
-                || !ExamStatus.START.equals(exam.getStatus()) || !ExamType.SCAN_IMAGE.equals(exam.getType())) {
+        if (exam == null || !exam.getSchoolId().equals(user.getSchoolId()) || !ExamStatus.START.equals(exam.getStatus())
+                || !ExamType.SCAN_IMAGE.equals(exam.getType())) {
             throw ApiException.EXAM_NOT_ACCESSIBLED;
             throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         }
         if (scStudentParameter != null && scStudentParameter.length > 0) {
         if (scStudentParameter != null && scStudentParameter.length > 0) {
@@ -106,8 +94,8 @@ public class ScanController extends BaseApiController {
                         array.add(obj);
                         array.add(obj);
                         // 增加人工审核数据
                         // 增加人工审核数据
                         if (sc.isManual()) {
                         if (sc.isManual()) {
-                            checkStudentService.save(new CheckStudent(student.getId(), examId,
-                                    student.getSubjectCode(), CheckType.MANUAL));
+                            checkStudentService.save(new CheckStudent(student.getId(), examId, student.getSubjectCode(),
+                                    CheckType.MANUAL));
                         }
                         }
                     }
                     }
                 }
                 }
@@ -125,8 +113,8 @@ public class ScanController extends BaseApiController {
         ApiUser user = RequestUtils.getApiUser(request);
         ApiUser user = RequestUtils.getApiUser(request);
         Exam exam = examService.findById(examId);
         Exam exam = examService.findById(examId);
         // 判断上传权限
         // 判断上传权限
-        if (exam == null || !exam.getSchoolId().equals(user.getSchoolId())
-                || !ExamStatus.START.equals(exam.getStatus()) || !ExamType.SCAN_IMAGE.equals(exam.getType())) {
+        if (exam == null || !exam.getSchoolId().equals(user.getSchoolId()) || !ExamStatus.START.equals(exam.getStatus())
+                || !ExamType.SCAN_IMAGE.equals(exam.getType())) {
             throw ApiException.EXAM_NOT_ACCESSIBLED;
             throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         }
         examNumber = validate("examNumber", examNumber, true, 32);
         examNumber = validate("examNumber", examNumber, true, 32);
@@ -134,19 +122,12 @@ public class ScanController extends BaseApiController {
         if (student == null) {
         if (student == null) {
             throw ApiException.QUERY_PARAM_ERROR.replaceMessage("examNumber invalid");
             throw ApiException.QUERY_PARAM_ERROR.replaceMessage("examNumber invalid");
         }
         }
-        student.setUpload(false);
-        student.setAbsent(false);
-        student.setAnswers(null);
-        student.setBatchCode(null);
-        student.setSliceCount(0);
-        student.setSheetCount(0);
-        student.setPaperType(null);
-        student.setCardNumber(null);
-        student.setInspectCount(0);
-        student.setUploadTime(new Date());
+        student.setPaperType("#");
         JSONObject obj = new JSONObject();
         JSONObject obj = new JSONObject();
-        if (saveUploadStudent(student)) {
-            obj.accumulate("updateTime", DateUtils.formatDateTime(student.getUploadTime()));
+        if (studentService.resetScanInfo(student)) {
+            subjectService.updateUploadCount(student.getExamId(), student.getSubjectCode(), (int) studentService
+                    .countUploadedByExamIdAndSubjectCode(student.getExamId(), student.getSubjectCode()));
+            obj.accumulate("updateTime", DateUtils.formatDateTime(new Date()));
         }
         }
         return obj;
         return obj;
     }
     }