ting.yin 2 lat temu
rodzic
commit
025b575992

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/SelectiveStudentDao.java

@@ -0,0 +1,16 @@
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.SelectiveStudent;
+
+public interface SelectiveStudentDao extends JpaRepository<SelectiveStudent, Integer>,
+        PagingAndSortingRepository<SelectiveStudent, Integer>, JpaSpecificationExecutor<SelectiveStudent> {
+
+    @Modifying(clearAutomatically = true)
+    void deleteByExamIdAndSubjectCode(Integer examId, String subjectCode);
+
+}

+ 84 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/SelectiveStudent.java

@@ -0,0 +1,84 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 选做题得分详情状态
+ */
+@Entity
+@Table(name = "eb_selective_student")
+public class SelectiveStudent implements Serializable {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2163077169203698621L;
+
+    @Id
+    @Column(name = "student_id", nullable = false)
+    private Integer studentId;
+
+    /**
+     * 考试ID
+     */
+    @Column(name = "exam_id", nullable = false)
+    private Integer examId;
+
+    /**
+     * 科目代码
+     */
+    @Column(name = "subject_code", length = 32, nullable = false)
+    private String subjectCode;
+
+    @Column(name = "muti_selective", nullable = false)
+    private Boolean mutiSelective;
+
+    @Column(name = "less_selective", nullable = false)
+    private Boolean lessSelective;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public Boolean getMutiSelective() {
+        return mutiSelective;
+    }
+
+    public void setMutiSelective(Boolean mutiSelective) {
+        this.mutiSelective = mutiSelective;
+    }
+
+    public Boolean getLessSelective() {
+        return lessSelective;
+    }
+
+    public void setLessSelective(Boolean lessSelective) {
+        this.lessSelective = lessSelective;
+    }
+
+}

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

@@ -127,7 +127,12 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
         // 选做题多选做
         // 选做题多选做
         if (selectiveStatus != null && SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus) && !groups.isEmpty()
         if (selectiveStatus != null && SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus) && !groups.isEmpty()
                 && !selectiveGroups.isEmpty()) {
                 && !selectiveGroups.isEmpty()) {
-            whereSql.append(" and (select count(distinct ss.group_number) from eb_subjective_score ss where ss.student_id = s.id and ss.group_number in (:groupNumbers) and ss.group_score = -1 )< :unSelectiveCount ");
+            whereSql.append(" and exists (select ss.student_id from eb_selective_student ss where ss.student_id = s.id and ss.muti_selective=1)");
+        }
+        // 选做题少选做
+        if (selectiveStatus != null && SelectiveStatus.LESS_SELECTIVE.equals(selectiveStatus) && !groups.isEmpty()
+                && !selectiveGroups.isEmpty()) {
+            whereSql.append(" and exists (select ss.student_id from eb_selective_student ss where ss.student_id = s.id and ss.less_selective=1) ");
         }
         }
         dataSql.append(whereSql);
         dataSql.append(whereSql);
         StringBuilder orderSql = new StringBuilder(" order by s.inspect_time desc ");
         StringBuilder orderSql = new StringBuilder(" order by s.inspect_time desc ");
@@ -168,14 +173,12 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             dataQuery.setParameter("secretNumber", query.getSecretNumber());
             dataQuery.setParameter("secretNumber", query.getSecretNumber());
         }
         }
         if (selectiveStatus != null && !groups.isEmpty() && !selectiveGroups.isEmpty()) {
         if (selectiveStatus != null && !groups.isEmpty() && !selectiveGroups.isEmpty()) {
-            List<Integer> groupNumbers = new ArrayList<Integer>();
-            for (int i = 0; i < groups.size(); i++) {
-                groupNumbers.add(groups.get(i).getNumber());
-            }
-            dataQuery.setParameter("groupNumbers", groupNumbers);
-            if (SelectiveStatus.MUTI_SELECTIVE.equals(selectiveStatus)) {
-                int unSelectiveCount = selectiveGroups.size() - selectiveGroups.get(0).getSelectiveCount();
-                dataQuery.setParameter("unSelectiveCount", unSelectiveCount);
+            if (selectiveStatus == SelectiveStatus.UN_SELECTIVE) {
+                List<Integer> groupNumbers = new ArrayList<Integer>();
+                for (int i = 0; i < groups.size(); i++) {
+                    groupNumbers.add(groups.get(i).getNumber());
+                }
+                dataQuery.setParameter("groupNumbers", groupNumbers);
             }
             }
         }
         }
         return dataQuery;
         return dataQuery;

+ 26 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
 import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
 import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
 import cn.com.qmth.stmms.biz.exam.dao.MarkGroupStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.MarkGroupStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.MarkerDao;
 import cn.com.qmth.stmms.biz.exam.dao.MarkerDao;
+import cn.com.qmth.stmms.biz.exam.dao.SelectiveStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
 import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 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.ExamStudent;
@@ -29,6 +30,7 @@ import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroupStudent;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroupStudent;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.model.SelectiveGroup;
 import cn.com.qmth.stmms.biz.exam.model.SelectiveGroup;
+import cn.com.qmth.stmms.biz.exam.model.SelectiveStudent;
 import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
 import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 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.ExamService;
@@ -132,6 +134,9 @@ public class MarkServiceImpl implements MarkService {
     @Autowired
     @Autowired
     private SelectiveGroupService selectiveGroupService;
     private SelectiveGroupService selectiveGroupService;
 
 
+    @Autowired
+    private SelectiveStudentDao selectiveStudentDao;
+
     private Map<Integer, Long> markerLastUpdateTime = new ConcurrentHashMap<>();
     private Map<Integer, Long> markerLastUpdateTime = new ConcurrentHashMap<>();
 
 
     /**
     /**
@@ -266,6 +271,7 @@ public class MarkServiceImpl implements MarkService {
                 group.getNumber());
                 group.getNumber());
         scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
         scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                 group.getNumber());
                 group.getNumber());
+        selectiveStudentDao.deleteByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
         // 删除分组
         // 删除分组
         releaseByGroup(group);
         releaseByGroup(group);
         groupDao.delete(group);
         groupDao.delete(group);
@@ -519,6 +525,7 @@ public class MarkServiceImpl implements MarkService {
         // 主观状态与得分明细
         // 主观状态与得分明细
         groupStudentDao.deleteByStudentId(student.getId());
         groupStudentDao.deleteByStudentId(student.getId());
         scoreDao.deleteByStudentId(student.getId());
         scoreDao.deleteByStudentId(student.getId());
+        selectiveStudentDao.delete(student.getId());
         updateAllCount(student.getExamId(), student.getSubjectCode());
         updateAllCount(student.getExamId(), student.getSubjectCode());
     }
     }
 
 
@@ -952,6 +959,8 @@ public class MarkServiceImpl implements MarkService {
         }
         }
         // 计算选做题分数
         // 计算选做题分数
         BigDecimal totalScore = BigDecimal.ZERO;
         BigDecimal totalScore = BigDecimal.ZERO;
+        boolean lessSelective = false;
+        boolean mutiSelective = false;
         ExamStudent student = studentService.findById(studentId);
         ExamStudent student = studentService.findById(studentId);
         Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(
         Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(
                 student.getExamId(), student.getSubjectCode());
                 student.getExamId(), student.getSubjectCode());
@@ -1039,7 +1048,23 @@ public class MarkServiceImpl implements MarkService {
                     }
                     }
                 }
                 }
             }
             }
+            if (partScoreList.size() < selectiveCount) {
+                lessSelective = true;
+            }
+            if (partScoreList.size() > selectiveCount) {
+                mutiSelective = true;
+            }
+        }
+        SelectiveStudent selectiveStudent = selectiveStudentDao.findOne(studentId);
+        if (selectiveStudent == null) {
+            selectiveStudent = new SelectiveStudent();
+            selectiveStudent.setExamId(student.getExamId());
+            selectiveStudent.setSubjectCode(student.getSubjectCode());
+            selectiveStudent.setStudentId(studentId);
         }
         }
+        selectiveStudent.setLessSelective(lessSelective);
+        selectiveStudent.setMutiSelective(mutiSelective);
+        selectiveStudentDao.saveAndFlush(selectiveStudent);
         // 计算非选做题总分
         // 计算非选做题总分
         for (Integer mainNumber : scoreMap.keySet()) {
         for (Integer mainNumber : scoreMap.keySet()) {
             totalScore = totalScore.add(BigDecimal.valueOf(scoreMap.get(mainNumber)));
             totalScore = totalScore.add(BigDecimal.valueOf(scoreMap.get(mainNumber)));
@@ -1492,6 +1517,7 @@ public class MarkServiceImpl implements MarkService {
         groupStudentDao.updateStatusByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber,
         groupStudentDao.updateStatusByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber,
                 SubjectiveStatus.UNMARK);
                 SubjectiveStatus.UNMARK);
         scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
         scoreDao.deleteByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, groupNumber);
+        selectiveStudentDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
         studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
         studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
                 null, null, null);
                 null, null, null);
     }
     }

+ 1 - 1
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/SelectiveStatus.java

@@ -4,7 +4,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
 public enum SelectiveStatus {
 public enum SelectiveStatus {
-    UN_SELECTIVE("未选做", 0), MUTI_SELECTIVE("多选做", 1);
+    UN_SELECTIVE("未选做", 0), MUTI_SELECTIVE("多选做", 1), LESS_SELECTIVE("少选做", 2);
 
 
     private String name;
     private String name;
 
 

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

@@ -535,8 +535,9 @@ public class PaperController extends BaseExamController {
                         + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
                         + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
             }
             }
         }
         }
-        long selectCount = selectiveGroupService.countByExamIdAndSubjectCode(examId, old.getSubjectCode());
-        if (!old.isObjective() && selectCount != 0) {
+        SelectiveGroup selectiveGroup = selectiveGroupService
+                .findOne(examId, old.getSubjectCode(), old.getMainNumber());
+        if (!old.isObjective() && selectiveGroup != null) {
             addMessage(redirectAttributes, "编辑失败,已经存在选做题分组");
             addMessage(redirectAttributes, "编辑失败,已经存在选做题分组");
             return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
             return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()

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

@@ -473,7 +473,7 @@ CREATE TABLE `eb_subjective_score`
   DEFAULT CHARSET = utf8mb4 COMMENT ='主观题得分明细表';
   DEFAULT CHARSET = utf8mb4 COMMENT ='主观题得分明细表';
 
 
   
   
-# Dump of table eb_mark_group
+# Dump of table eb_selective_group
 # ------------------------------------------------------------
 # ------------------------------------------------------------
 
 
 DROP TABLE IF EXISTS `eb_selective_group`;
 DROP TABLE IF EXISTS `eb_selective_group`;
@@ -492,6 +492,23 @@ CREATE TABLE `eb_selective_group`
   DEFAULT CHARSET = utf8mb4 COMMENT ='选做题分组表';
   DEFAULT CHARSET = utf8mb4 COMMENT ='选做题分组表';
 
 
 
 
+# Dump of table eb_selective_student
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `eb_selective_student`;
+
+CREATE TABLE `eb_selective_student`
+(
+    `student_id`          int(11) 	  NOT NULL COMMENT '考生ID',
+    `exam_id`             int(11)     NOT NULL COMMENT '考试ID',
+    `subject_code`        varchar(32) NOT NULL COMMENT '科目代码',
+	`muti_selective`		  tinyint (1) NOT NULL COMMENT '是否多选做',
+	`less_selective`		  tinyint (1) NOT NULL COMMENT '是否少选做',
+    PRIMARY KEY (`student_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='选做题考生状态表';
+  
+  
 # Dump of table eb_operation_log
 # Dump of table eb_operation_log
 # ------------------------------------------------------------
 # ------------------------------------------------------------