Browse Source

成绩确认

xiatian 1 year ago
parent
commit
4a85a7a40a

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

@@ -357,9 +357,8 @@ CREATE TABLE `eb_inspect_history`
 	`inspect_time` 	DATETIME NOT NULL COMMENT '复核时间',
 	`inspect_time` 	DATETIME NOT NULL COMMENT '复核时间',
 	`inspector_id` 	INT (11) NOT NULL COMMENT '复核人ID',
 	`inspector_id` 	INT (11) NOT NULL COMMENT '复核人ID',
 	`student_id` 	INT (11) NOT NULL COMMENT '考生ID',
 	`student_id` 	INT (11) NOT NULL COMMENT '考生ID',
-	`inspect_round` 	INT (11) NOT NULL COMMENT '复核轮数',
 	PRIMARY KEY (`id`),
 	PRIMARY KEY (`id`),
-	UNIQUE KEY `index1` (`student_id`, `inspect_round`)
+	UNIQUE KEY `index1` (`student_id`)
 ) ENGINE = INNODB 
 ) ENGINE = INNODB 
 	DEFAULT CHARSET = utf8mb4 COMMENT = '复核记录表';
 	DEFAULT CHARSET = utf8mb4 COMMENT = '复核记录表';
 
 
@@ -1335,8 +1334,8 @@ INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`lev
 VALUES ('exam_problem_history-batch_reset', '批量重置', 'exam_problem_history', 'BUTTON', 2,2);
 VALUES ('exam_problem_history-batch_reset', '批量重置', 'exam_problem_history', 'BUTTON', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 90,1,'icon-flag','index.inspected');
 VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 90,1,'icon-flag','index.inspected');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
-VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/info', 2,1);
+-- INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+-- VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/info', 2,1);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
 VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/list', 2,2);
 VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/list', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)

+ 8 - 1
install/mysql/upgrade/1.3.16.sql

@@ -7,4 +7,11 @@ update b_role_info set name='系统管理员' where name='学校管理员';
 update b_role_info set name='成绩查询员' where name='学校查询员';
 update b_role_info set name='成绩查询员' where name='学校查询员';
 update b_role_info set name='评卷管理员' where name='学院管理员';
 update b_role_info set name='评卷管理员' where name='学院管理员';
 
 
-ALTER TABLE eb_exam_question ADD COLUMN `customize_policy`	text  DEFAULT NULL COMMENT '自定义判分策略';
+ALTER TABLE eb_exam_question ADD COLUMN `customize_policy`	text  DEFAULT NULL COMMENT '自定义判分策略';
+
+ALTER TABLE eb_inspect_history DROP INDEX index1;
+ALTER TABLE eb_inspect_history ADD INDEX index1(`student_id`);
+ALTER TABLE eb_inspect_history DROP `inspect_round`;
+
+delete from  b_role_privilege where privilege_code='exam_inspected_info-info';
+delete from  b_privilege where code='exam_inspected_info-info';

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/PrivilegeServiceImpl.java

@@ -87,7 +87,7 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
-		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
+		sql.append(" ,'exam_inspected_info','exam_inspected_info-list','exam_inspected_info-next_round'");
 		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
 		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
@@ -101,7 +101,7 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
-		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
+		sql.append(" ,'exam_inspected_info','exam_inspected_info-list','exam_inspected_info-next_round'");
 		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
 		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
@@ -111,7 +111,7 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		StringBuilder sql = new StringBuilder();
 		StringBuilder sql = new StringBuilder();
 		sql.append(" INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append(" INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append(" SELECT s.id,'INSPECTOR',p.`code`,1 from b_privilege p join b_school s   ");
 		sql.append(" SELECT s.id,'INSPECTOR',p.`code`,1 from b_privilege p join b_school s   ");
-		sql.append(" where p.`code` in('exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round')");
+		sql.append(" where p.`code` in('exam_inspected_info','exam_inspected_info-list','exam_inspected_info-next_round')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
 		query.executeUpdate();
 		query.executeUpdate();

+ 2 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ExamStudentVo.java

@@ -160,6 +160,7 @@ public class ExamStudentVo {
     /**
     /**
      * 客观题得分明细
      * 客观题得分明细
      */
      */
+    @ExcelField(title = "客观明细*", align = 2, sort =7)
     private String objectiveScoreList;
     private String objectiveScoreList;
 
 
     /**
     /**
@@ -185,7 +186,7 @@ public class ExamStudentVo {
     /**
     /**
      * 主观题得分明细
      * 主观题得分明细
      */
      */
-    @ExcelField(title = "得分明细*", align = 2, sort =7)
+    @ExcelField(title = "得分明细*", align = 2, sort =8)
     private String subjectiveScoreList;
     private String subjectiveScoreList;
 
 
     /**
     /**

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/InspectWorkVo.java

@@ -15,7 +15,7 @@ public class InspectWorkVo {
     @ExcelField(title = "姓名*", align = 2, sort = 2)
     @ExcelField(title = "姓名*", align = 2, sort = 2)
     private String name;
     private String name;
 
 
-    @ExcelField(title = "复核数量*", align = 2, sort = 3)
+    @ExcelField(title = "确认数量*", align = 2, sort = 3)
     private BigInteger work;
     private BigInteger work;
 
 
     public String getLoginName() {
     public String getLoginName() {

+ 8 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/InspectHistoryDao.java

@@ -26,14 +26,15 @@ public interface InspectHistoryDao extends PagingAndSortingRepository<InspectHis
     @Query("delete from InspectHistory m where m.examId=?1 and m.subjectCode=?2")
     @Query("delete from InspectHistory m where m.examId=?1 and m.subjectCode=?2")
     void deleteByExamIdAndSubjectCode(int examId, String subjectCode);
     void deleteByExamIdAndSubjectCode(int examId, String subjectCode);
 
 
-    InspectHistory findByStudentIdAndInspectRound(Integer studentId, Integer inspectRound);
 
 
-    @Modifying
-    @Query(nativeQuery = true, value = "delete from eb_inspect_history where student_id=?1 and inspect_round=(select es.inspect_round from eb_exam_subject es,eb_exam_student s where s.id=?1 and es.exam_id=s.exam_id and es.code=s.subject_code)")
-    void deleteByStudentIdAndInspectRound(Integer studentId);
+//    InspectHistory findByStudentIdAndInspectRound(Integer studentId, Integer inspectRound);
 
 
-    @Modifying
-    @Query("delete from InspectHistory m where m.examId=?1 and m.subjectCode=?2 and m.inspectRound=?3")
-    void deleteByExamIdAndSubjectCodeAndInspectRound(int examId, String subjectCode, Integer inspectRound);
+//    @Modifying
+//    @Query(nativeQuery = true, value = "delete from eb_inspect_history where student_id=?1 and inspect_round=(select es.inspect_round from eb_exam_subject es,eb_exam_student s where s.id=?1 and es.exam_id=s.exam_id and es.code=s.subject_code)")
+//    void deleteByStudentIdAndInspectRound(Integer studentId);
+
+//    @Modifying
+//    @Query("delete from InspectHistory m where m.examId=?1 and m.subjectCode=?2 and m.inspectRound=?3")
+//    void deleteByExamIdAndSubjectCodeAndInspectRound(int examId, String subjectCode, Integer inspectRound);
 
 
 }
 }

+ 0 - 12
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/InspectHistory.java

@@ -53,11 +53,6 @@ public class InspectHistory implements Serializable {
     @Column(name = "inspector_id")
     @Column(name = "inspector_id")
     private Integer inspectorId;
     private Integer inspectorId;
     
     
-    /**
-     * 复核轮数
-     */
-    @Column(name = "inspect_round", nullable = false)
-    private Integer inspectRound;
 
 
     @Transient
     @Transient
     private String inspectorName;
     private String inspectorName;
@@ -118,13 +113,6 @@ public class InspectHistory implements Serializable {
         this.inspectorName = inspectorName;
         this.inspectorName = inspectorName;
     }
     }
 
 
-	public Integer getInspectRound() {
-		return inspectRound;
-	}
-
-	public void setInspectRound(Integer inspectRound) {
-		this.inspectRound = inspectRound;
-	}
 
 
 
 
 }
 }

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

@@ -121,6 +121,9 @@ public class InspectQuery extends BaseQuery<ExamStudentVo> {
     private boolean export;
     private boolean export;
     
     
     private Boolean selective;
     private Boolean selective;
+    
+    //打回卷
+    private Boolean rejected;
 
 
     public InspectQuery() {
     public InspectQuery() {
         super();
         super();
@@ -567,4 +570,12 @@ public class InspectQuery extends BaseQuery<ExamStudentVo> {
 		this.selective = selective;
 		this.selective = selective;
 	}
 	}
 
 
+	public Boolean getRejected() {
+		return rejected;
+	}
+
+	public void setRejected(Boolean rejected) {
+		this.rejected = rejected;
+	}
+
 }
 }

+ 5 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/InspectHistoryService.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.biz.exam.service;
 package cn.com.qmth.stmms.biz.exam.service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
@@ -15,7 +16,7 @@ public interface InspectHistoryService {
 
 
     void deleteByStudentId(Integer studentId);
     void deleteByStudentId(Integer studentId);
 
 
-    InspectHistory findByStudentIdAndInspectRound(Integer id, Integer inspectRound);
+//    InspectHistory findByStudentIdAndInspectRound(Integer id, Integer inspectRound);
 
 
     List<InspectHistory> findByStudentIdIn(List<Integer> sids);
     List<InspectHistory> findByStudentIdIn(List<Integer> sids);
 
 
@@ -25,6 +26,8 @@ public interface InspectHistoryService {
 
 
     Boolean existByStudentIdAndUserId(Integer studentId, Integer userId);
     Boolean existByStudentIdAndUserId(Integer studentId, Integer userId);
 
 
-    void deleteByExamIdAndSubjectCodeAndInspectRound(Integer examId, String subjectCode, Integer inspectRound);
+    void deleteByExamIdAndSubjectCode(Integer examId, String subjectCode);
+
+	int findMaxInspectCount(Set<Integer> stuIds);
 
 
 }
 }

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

@@ -46,7 +46,7 @@ public interface InspectedService {
 	Integer needInspectCount(InspectQuery query, Integer mainNumber, Double mainStartScore,
 	Integer needInspectCount(InspectQuery query, Integer mainNumber, Double mainStartScore,
 			Double mainEndScore, SelectiveStatus selectiveStatus);
 			Double mainEndScore, SelectiveStatus selectiveStatus);
 
 
-	void fillInspectHistoryMap(List<ExamStudentVo> list, int maxInspectRound);
+	Integer fillInspectHistoryMap(List<ExamStudentVo> list);
 
 
 	boolean inspectFinish(Integer examId, String subjectCode, Integer inspectRound);
 	boolean inspectFinish(Integer examId, String subjectCode, Integer inspectRound);
 
 
@@ -54,4 +54,7 @@ public interface InspectedService {
 	
 	
 	void cancelBySubject(Integer examId, String subjectCode);
 	void cancelBySubject(Integer examId, String subjectCode);
 
 
+	List<Integer> needInspectIds(InspectQuery query, Integer mainNumber, Double mainStartScore, Double mainEndScore,
+			SelectiveStatus selectiveStatus);
+
 }
 }

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

@@ -1,6 +1,8 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
 
+import java.math.BigInteger;
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContext;
@@ -72,18 +74,18 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
         inspectHistoryDao.deleteByStudentId(studentId);
         inspectHistoryDao.deleteByStudentId(studentId);
     }
     }
 
 
-    @Override
-    public InspectHistory findByStudentIdAndInspectRound(Integer studentId, Integer inspectRound) {
-        return inspectHistoryDao.findByStudentIdAndInspectRound(studentId, inspectRound);
-    }
+//    @Override
+//    public InspectHistory findByStudentIdAndInspectRound(Integer studentId, Integer inspectRound) {
+//        return inspectHistoryDao.findByStudentIdAndInspectRound(studentId, inspectRound);
+//    }
 
 
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     @Override
     @Override
     public List<InspectHistory> findByStudentIdIn(List<Integer> sids) {
     public List<InspectHistory> findByStudentIdIn(List<Integer> sids) {
         StringBuilder sql = new StringBuilder();
         StringBuilder sql = new StringBuilder();
-        sql.append("select t.id,t.exam_id examId,t.inspect_time inspectTime,t.inspector_id inspectorId,t.student_id studentId,t.subject_code subjectCode,t.inspect_round inspectRound,CONCAT(u.login_name, '/', u.name) inspectorName "
+        sql.append("select t.id,t.exam_id examId,t.inspect_time inspectTime,t.inspector_id inspectorId,t.student_id studentId,t.subject_code subjectCode,CONCAT(u.login_name, '/', u.name) inspectorName "
                 + "from eb_inspect_history t  left join b_user u on t.inspector_id=u.id ");
                 + "from eb_inspect_history t  left join b_user u on t.inspector_id=u.id ");
-        sql.append("where t.student_id in(" + StringUtils.join(sids, ",") + ")");
+        sql.append("where t.student_id in(" + StringUtils.join(sids, ",") + ") order by t.inspect_time ");
         Query query = entityManager.createNativeQuery(sql.toString());
         Query query = entityManager.createNativeQuery(sql.toString());
         query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(InspectHistory.class));
         query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(InspectHistory.class));
         return query.getResultList();
         return query.getResultList();
@@ -92,7 +94,7 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
     @Transactional
     @Transactional
     @Override
     @Override
     public void deleteByStudentIdAndInspectRound(Integer studentId) {
     public void deleteByStudentIdAndInspectRound(Integer studentId) {
-        inspectHistoryDao.deleteByStudentIdAndInspectRound(studentId);
+//        inspectHistoryDao.deleteByStudentIdAndInspectRound(studentId);
     }
     }
 
 
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
@@ -124,8 +126,23 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
 
 
     @Transactional
     @Transactional
     @Override
     @Override
-    public void deleteByExamIdAndSubjectCodeAndInspectRound(Integer examId, String subjectCode, Integer inspectRound) {
-        inspectHistoryDao.deleteByExamIdAndSubjectCodeAndInspectRound(examId, subjectCode, inspectRound);
+    public void deleteByExamIdAndSubjectCode(Integer examId, String subjectCode) {
+        inspectHistoryDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
     }
     }
 
 
+	@SuppressWarnings("unchecked")
+	@Override
+	public int findMaxInspectCount(Set<Integer> stuIds) {
+		StringBuilder sql = new StringBuilder();
+        sql.append(" select max(tm.cc) cc from (select count(1) cc from eb_inspect_history r where r.student_id in(" 
+		+ StringUtils.join(stuIds,",") + ") group by r.student_id)tm");
+        sql.append(" limit 1");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        List<BigInteger> ret = query.getResultList();
+        if (ret != null && ret.size() > 0&&ret.get(0)!=null) {
+            return ret.get(0).intValue();
+        }
+		return 0;
+	}
+
 }
 }

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

@@ -21,12 +21,10 @@ 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.bean.ExamStudentVo;
 import cn.com.qmth.stmms.biz.exam.bean.ExamStudentVo;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 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.InspectHistory;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
 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.query.InspectQuery;
 import cn.com.qmth.stmms.biz.exam.query.InspectQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 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.InspectHistoryService;
 import cn.com.qmth.stmms.biz.exam.service.InspectHistoryService;
 import cn.com.qmth.stmms.biz.exam.service.InspectedService;
 import cn.com.qmth.stmms.biz.exam.service.InspectedService;
 import cn.com.qmth.stmms.biz.utils.TaskLock;
 import cn.com.qmth.stmms.biz.utils.TaskLock;
@@ -43,8 +41,6 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     @Autowired
     @Autowired
     private ExamStudentService studentService;
     private ExamStudentService studentService;
 
 
-    @Autowired
-    private ExamSubjectService examSubjectService;
 
 
     @Autowired
     @Autowired
     private InspectHistoryService inspectHistoryService;
     private InspectHistoryService inspectHistoryService;
@@ -109,10 +105,17 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             }
             }
             whereSql.append(" and s.subject_code in ('" + StringUtils.join(in, "','") + "') ");
             whereSql.append(" and s.subject_code in ('" + StringUtils.join(in, "','") + "') ");
         }
         }
-        whereSql.append(" and s.subjective_status ='MARKED'");
-        if (query.getInspected() != null) {
-            whereSql.append(" and s.inspected =" + (query.getInspected() ? 1 : 0));
+        if (query.getRejected() != null) {
+        	if (query.getRejected()) {
+        		whereSql.append(" and exists (select 1 from eb_subjective_score ess where ess.student_id=s.id and rejected=1) ");
+        	}else {
+        		whereSql.append(" and not exists (select 1 from eb_subjective_score ess where ess.student_id=s.id and rejected=1) ");
+        	}
         }
         }
+        whereSql.append(" and s.subjective_status ='MARKED'");
+//        if (query.getInspected() != null) {
+//            whereSql.append(" and s.inspected =" + (query.getInspected() ? 1 : 0));
+//        }
         if (query.getStartScore() != null) {
         if (query.getStartScore() != null) {
             whereSql.append(" and (cast(s.objective_score as decimal(10,3))+cast(s.subjective_score as decimal(10,3))) >="
             whereSql.append(" and (cast(s.objective_score as decimal(10,3))+cast(s.subjective_score as decimal(10,3))) >="
                     + query.getStartScore());
                     + query.getStartScore());
@@ -227,6 +230,24 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
         query.setInspected(inspected);
         query.setInspected(inspected);
         return count;
         return count;
     }
     }
+    
+    @SuppressWarnings("unchecked")
+	@Override
+    public List<Integer> needInspectIds(InspectQuery query, Integer mainNumber, Double mainStartScore, Double mainEndScore,
+            SelectiveStatus selectiveStatus) {
+    	query.setInspected(null);
+        StringBuilder countSql = new StringBuilder("select s.id from eb_exam_student s "
+                + " left join eb_exam_subject es on s.exam_id=es.exam_id and s.subject_code=es.code ");
+        String whereSql = getWhereSql(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore, mainEndScore,
+                selectiveStatus);
+        countSql.append(whereSql);
+        Query countQuery = entityManager.createNativeQuery(countSql.toString());
+        List<Integer> ret = countQuery.getResultList();
+        if(ret==null) {
+        	return new ArrayList<>();
+        }
+        return ret;
+    }
 
 
     @Override
     @Override
     public void releaseByUserId(Integer examId, String subjectCode, Integer userId) {
     public void releaseByUserId(Integer examId, String subjectCode, Integer userId) {
@@ -276,15 +297,18 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     @Override
     @Override
     public boolean inspect(ExamStudent student, Integer userId) {
     public boolean inspect(ExamStudent student, Integer userId) {
         if (this.hasApplied(student, userId) && SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())) {
         if (this.hasApplied(student, userId) && SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())) {
-            if (!SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus()) || student.getInspected()) {
-                return false;
-            }
-            ExamSubject subject = examSubjectService.find(student.getExamId(), student.getSubjectCode());
-            InspectHistory old = inspectHistoryService.findByStudentIdAndInspectRound(student.getId(),
-                    subject.getInspectRound());
-            if (old != null) {
+        	if (!SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())) {
                 return false;
                 return false;
             }
             }
+//            if (!SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus()) || student.getInspected()) {
+//                return false;
+//            }
+//            ExamSubject subject = examSubjectService.find(student.getExamId(), student.getSubjectCode());
+//            InspectHistory old = inspectHistoryService.findByStudentIdAndInspectRound(student.getId(),
+//                    subject.getInspectRound());
+//            if (old != null) {
+//                return false;
+//            }
             Date now = new Date();
             Date now = new Date();
             // studentService.inspect(student.getId(), now, userId);
             // studentService.inspect(student.getId(), now, userId);
             InspectHistory i = new InspectHistory();
             InspectHistory i = new InspectHistory();
@@ -293,7 +317,6 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             i.setSubjectCode(student.getSubjectCode());
             i.setSubjectCode(student.getSubjectCode());
             i.setInspectorId(userId);
             i.setInspectorId(userId);
             i.setInspectTime(now);
             i.setInspectTime(now);
-            i.setInspectRound(subject.getInspectRound());
             inspectHistoryService.save(i);
             inspectHistoryService.save(i);
             studentService.updateInspectCount(student.getId(), inspectHistoryService.countByStudentId(student.getId()),
             studentService.updateInspectCount(student.getId(), inspectHistoryService.countByStudentId(student.getId()),
                     now, userId);
                     now, userId);
@@ -309,9 +332,9 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     @Transactional
     @Transactional
     @Override
     @Override
     public boolean cancelByStudent(Integer studentId) {
     public boolean cancelByStudent(Integer studentId) {
-        if (studentService.cancelInspect(studentId) > 0) {
-            inspectHistoryService.deleteByStudentIdAndInspectRound(studentId);
-        }
+//        if (studentService.cancelInspect(studentId) > 0) {
+//            inspectHistoryService.deleteByStudentIdAndInspectRound(studentId);
+//        }
         return true;
         return true;
     }
     }
 
 
@@ -323,11 +346,12 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     }
     }
 
 
     @Override
     @Override
-    public void fillInspectHistoryMap(List<ExamStudentVo> list, int maxInspectRound) {
+    public Integer fillInspectHistoryMap(List<ExamStudentVo> list) {
+    	Integer maxCount=0;
         List<Integer> sids = list.stream().map(e -> e.getId()).collect(Collectors.toList());
         List<Integer> sids = list.stream().map(e -> e.getId()).collect(Collectors.toList());
         List<InspectHistory> ihs = inspectHistoryService.findByStudentIdIn(sids);
         List<InspectHistory> ihs = inspectHistoryService.findByStudentIdIn(sids);
         if (ihs == null || ihs.size() == 0) {
         if (ihs == null || ihs.size() == 0) {
-            return;
+            return maxCount;
         }
         }
         Map<Integer, Map<String, InspectHistory>> map = new HashMap<>();
         Map<Integer, Map<String, InspectHistory>> map = new HashMap<>();
         for (InspectHistory ih : ihs) {
         for (InspectHistory ih : ihs) {
@@ -336,11 +360,15 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
                 tem = new HashMap<>();
                 tem = new HashMap<>();
                 map.put(ih.getStudentId(), tem);
                 map.put(ih.getStudentId(), tem);
             }
             }
-            tem.put(ih.getInspectRound().toString(), ih);
+            tem.put((tem.size()+1)+"", ih);
+            if(tem.size()>maxCount) {
+            	maxCount=tem.size();
+            }
         }
         }
         for (ExamStudentVo es : list) {
         for (ExamStudentVo es : list) {
             es.setInspectHistoryMap(map.get(es.getId()));
             es.setInspectHistoryMap(map.get(es.getId()));
         }
         }
+        return maxCount;
     }
     }
 
 
     @Override
     @Override
@@ -367,8 +395,7 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     @Transactional
     @Transactional
     @Override
     @Override
     public void cancelBySubject(Integer examId, String subjectCode) {
     public void cancelBySubject(Integer examId, String subjectCode) {
-        ExamSubject sub = examSubjectService.find(examId, subjectCode);
         studentService.cancelInspect(examId, subjectCode);
         studentService.cancelInspect(examId, subjectCode);
-        inspectHistoryService.deleteByExamIdAndSubjectCodeAndInspectRound(examId, subjectCode, sub.getInspectRound());
+        inspectHistoryService.deleteByExamIdAndSubjectCode(examId, subjectCode);
     }
     }
 }
 }

+ 31 - 23
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -135,21 +135,27 @@ public class InspectedController extends BaseExamController {
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
             // e.setInspectHistoryList(inspectHistoryService.findByStudentIdLimit3(e.getId()));
             // e.setInspectHistoryList(inspectHistoryService.findByStudentIdLimit3(e.getId()));
         }
         }
-        int maxInspectRound = 1;
-        if (list != null && list.size() > 0) {
-            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
-            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
-            inspectedService.fillInspectHistoryMap(list, maxInspectRound);
-        }
+//        int maxInspectRound = 1;
+//        if (list != null && list.size() > 0) {
+//            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
+//            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
+//            inspectedService.fillInspectHistoryMap(list, maxInspectRound);
+//        }
+      int maxInspectCount = 0;
+      if (list != null && list.size() > 0) {
+          Set<Integer> stuIds = list.stream().map(e -> e.getId()).collect(Collectors.toSet());
+          maxInspectCount = inspectHistoryService.findMaxInspectCount(stuIds);
+          inspectedService.fillInspectHistoryMap(list);
+      }
         Integer totalCount = inspectedService.countByQuery(query, status, mainNumber, mainStartScore, mainEndScore,
         Integer totalCount = inspectedService.countByQuery(query, status, mainNumber, mainStartScore, mainEndScore,
                 selectiveStatus);
                 selectiveStatus);
-        Integer inspectCount = inspectedService.needInspectCount(query, mainNumber, mainStartScore, mainEndScore,
-                selectiveStatus);
+//        Integer inspectCount = inspectedService.needInspectCount(query, mainNumber, mainStartScore, mainEndScore,
+//                selectiveStatus);
         query.setResult(list);
         query.setResult(list);
         query.setTotalCount(totalCount);
         query.setTotalCount(totalCount);
         model.addAttribute("query", query);
         model.addAttribute("query", query);
-        model.addAttribute("maxInspectRound", maxInspectRound);
-        model.addAttribute("inspectCount", inspectCount);
+        model.addAttribute("maxInspectRound", maxInspectCount);
+        model.addAttribute("inspectCount", totalCount);
         model.addAttribute("questionList",
         model.addAttribute("questionList",
                 questionService.findMainByExamAndSubjectAndObjective(examId, query.getSubjectCode(), false));
                 questionService.findMainByExamAndSubjectAndObjective(examId, query.getSubjectCode(), false));
         model.addAttribute("mainNumber", mainNumber);
         model.addAttribute("mainNumber", mainNumber);
@@ -249,6 +255,7 @@ public class InspectedController extends BaseExamController {
 	            }
 	            }
 	        }
 	        }
 	    }
 	    }
+        task.setInspectTime(null);
         return task;
         return task;
     }
     }
 
 
@@ -413,7 +420,7 @@ public class InspectedController extends BaseExamController {
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
         query.setInspectorId(wu.getId());
         query.setInspectorId(wu.getId());
-        query.setInspected(true);
+        query.setInspected(null);
         query.setPageNumber(pageNumber);
         query.setPageNumber(pageNumber);
         query.setPageSize(pageSize);
         query.setPageSize(pageSize);
         query.orderByInspectTimeDesc();
         query.orderByInspectTimeDesc();
@@ -435,9 +442,10 @@ public class InspectedController extends BaseExamController {
         JSONObject status = new JSONObject();
         JSONObject status = new JSONObject();
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         query.setExamId(examId);
         query.setExamId(examId);
-        Integer totalCount = inspectedService.needInspectCount(query, mainNumber, mainStartScore, mainEndScore,
+        List<Integer> ids = inspectedService.needInspectIds(query, mainNumber, mainStartScore, mainEndScore,
                 selectiveStatus);
                 selectiveStatus);
-        status.accumulate("totalCount", totalCount);
+        status.accumulate("totalCount", ids.size());
+        status.accumulate("studentIds", ids);
         status.accumulate("valid", true);
         status.accumulate("valid", true);
         return status;
         return status;
     }
     }
@@ -656,16 +664,16 @@ public class InspectedController extends BaseExamController {
         for (ExamStudentVo e : list) {
         for (ExamStudentVo e : list) {
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
         }
         }
-        int maxInspectRound = 1;
+        int maxInspectRound = 0;
         if (list != null && list.size() > 0) {
         if (list != null && list.size() > 0) {
-            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
-            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
-            inspectedService.fillInspectHistoryMap(list, maxInspectRound);
+//            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
+//            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
+        	maxInspectRound=inspectedService.fillInspectHistoryMap(list);
         }
         }
         try {
         try {
-            String fileName = "复核列表.xlsx";
+            String fileName = "确认列表.xlsx";
             List<String> headerList = getInspectHeader(maxInspectRound);
             List<String> headerList = getInspectHeader(maxInspectRound);
-            ExportInspectExcel excel = new ExportInspectExcel("复核列表", headerList, ExamStudentVo.class);
+            ExportInspectExcel excel = new ExportInspectExcel("确认列表", headerList, ExamStudentVo.class);
             excel.setDataList(list);
             excel.setDataList(list);
             excel.write(response, fileName).dispose();
             excel.write(response, fileName).dispose();
             return null;
             return null;
@@ -678,8 +686,8 @@ public class InspectedController extends BaseExamController {
     private List<String> getInspectHeader(int maxInspectRound) {
     private List<String> getInspectHeader(int maxInspectRound) {
         List<String> ret = new ArrayList<>();
         List<String> ret = new ArrayList<>();
         for (int i = 1; i <= maxInspectRound; i++) {
         for (int i = 1; i <= maxInspectRound; i++) {
-            ret.add("复核人" + i);
-            ret.add("复核时间" + i);
+            ret.add("确认人" + i);
+            ret.add("确认时间" + i);
         }
         }
         return ret;
         return ret;
     }
     }
@@ -694,8 +702,8 @@ public class InspectedController extends BaseExamController {
         }
         }
         try {
         try {
             List<InspectWorkVo> list = inspectHistoryService.findInspectWork(examId);
             List<InspectWorkVo> list = inspectHistoryService.findInspectWork(examId);
-            String fileName = "复核员工作量.xlsx";
-            new ExportExcel("复核员工作量", InspectWorkVo.class).setDataList(list).write(response, fileName).dispose();
+            String fileName = "工作量.xlsx";
+            new ExportExcel("工作量", InspectWorkVo.class).setDataList(list).write(response, fileName).dispose();
             return null;
             return null;
         } catch (Exception e) {
         } catch (Exception e) {
             addErrMessage(redirectAttributes, e, "导出数据失败");
             addErrMessage(redirectAttributes, e, "导出数据失败");

+ 26 - 16
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp

@@ -47,13 +47,13 @@
 				<option value="0" <c:if test="${query.selective!=null &&!query.selective}">selected</c:if>>否</option>
 				<option value="0" <c:if test="${query.selective!=null &&!query.selective}">selected</c:if>>否</option>
 			</select>
 			</select>
         &nbsp;
         &nbsp;
-        <label>状态</label>
+        <%-- <label>状态</label>
         <select class="input-small" name="inspected">
         <select class="input-small" name="inspected">
 				<option value="" <c:if test="${null==query.inspected}">selected</c:if>>请选择</option>
 				<option value="" <c:if test="${null==query.inspected}">selected</c:if>>请选择</option>
 				<option value="1" <c:if test="${query.inspected!=null &&query.inspected}">selected</c:if>>已复核</option>
 				<option value="1" <c:if test="${query.inspected!=null &&query.inspected}">selected</c:if>>已复核</option>
 				<option value="0" <c:if test="${query.inspected!=null &&!query.inspected}">selected</c:if>>未复核</option>
 				<option value="0" <c:if test="${query.inspected!=null &&!query.inspected}">selected</c:if>>未复核</option>
 			</select>
 			</select>
-         &nbsp;
+         &nbsp; --%>
         <label>试卷总分:从</label>
         <label>试卷总分:从</label>
         <input type="text" number="true" id="startScore" name="startScore" value="${query.startScore}" class="input-mini"/>
         <input type="text" number="true" id="startScore" name="startScore" value="${query.startScore}" class="input-mini"/>
         <label> 到&nbsp;&nbsp;&nbsp;</label>
         <label> 到&nbsp;&nbsp;&nbsp;</label>
@@ -66,9 +66,13 @@
                 <option value="${result.value}" <c:if test="${result==selectiveStatus}">selected</c:if>>${result.name}</option>
                 <option value="${result.value}" <c:if test="${result==selectiveStatus}">selected</c:if>>${result.name}</option>
             	</c:forEach>
             	</c:forEach>
             </select>
             </select>
+        <label>打回卷</label>
+        <select class="input-small" name="rejected">
+				<option value="" <c:if test="${null==query.rejected}">selected</c:if>>请选择</option>
+				<option value="1" <c:if test="${query.rejected!=null &&query.rejected}">selected</c:if>>是</option>
+				<option value="0" <c:if test="${query.rejected!=null &&!query.rejected}">selected</c:if>>否</option>
+			</select>
         <br/><br/>
         <br/><br/>
-         <label>复核人</label>
-        <input type="text" name="inspectorName" id="inspectorName" value="${query.inspectorName}" class="input-medium"/>
 		<label>大题</label>
 		<label>大题</label>
         <select class="input-medium" id="question-select" name="mainNumber">
         <select class="input-medium" id="question-select" name="mainNumber">
             <option value="">请选择</option>
             <option value="">请选择</option>
@@ -91,22 +95,26 @@
 				<option value="0" <c:if test="${query.questionScoreEmpty!=null &&!query.questionScoreEmpty}">selected</c:if>>0</option>
 				<option value="0" <c:if test="${query.questionScoreEmpty!=null &&!query.questionScoreEmpty}">selected</c:if>>0</option>
 			</select>
 			</select>
 		</span>	
 		</span>	
-		<br/><br/>
         <label>密号</label>
         <label>密号</label>
         <input type="text" name="secretNumber" id="secretNumber" value="${query.secretNumber}" class="input-medium"/>
         <input type="text" name="secretNumber" id="secretNumber" value="${query.secretNumber}" class="input-medium"/>
         &nbsp;
         &nbsp;
+         <label>确认人</label>
+        <input type="text" name="inspectorName" id="inspectorName" value="${query.inspectorName}" class="input-medium"/>
+        
+         &nbsp; 
+        <br/><br/>
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         <c:if test="${inspectCount>0}">
         <c:if test="${inspectCount>0}">
         &nbsp;
         &nbsp;
-        <input id="btnStart" class="btn" type="button" value="批量复核:${inspectCount }" onclick="goStart()"/>
+        <input id="btnStart" class="btn" type="button" value="批量确认:${inspectCount }" onclick="goStart()"/>
         </c:if>
         </c:if>
         &nbsp;
         &nbsp;
-        <c:if test="${!empty showNextInspect &&fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-next_round')}">
+        <%-- <c:if test="${!empty showNextInspect &&fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-next_round')}">
         <input id="btnNextRound" class="btn" type="button" value="再次复核" onclick="nextRound()"/>
         <input id="btnNextRound" class="btn" type="button" value="再次复核" onclick="nextRound()"/>
         &nbsp;
         &nbsp;
         </c:if>
         </c:if>
          <input id="btnCancel" class="btn" type="button" value="取消复核" onclick="goCancel()"/>
          <input id="btnCancel" class="btn" type="button" value="取消复核" onclick="goCancel()"/>
-          &nbsp;
+          &nbsp; --%>
         <c:if test="${exam.status=='FINISH' && web_user.schoolAdmin==true}">
         <c:if test="${exam.status=='FINISH' && web_user.schoolAdmin==true}">
        	<input id="btnImport" class="btn" type="button" value="导入"/>
        	<input id="btnImport" class="btn" type="button" value="导入"/>
        	&nbsp;
        	&nbsp;
@@ -116,7 +124,7 @@
                     导出<span class="caret"></span>
                     导出<span class="caret"></span>
                 </a>
                 </a>
                 <ul class="dropdown-menu">
                 <ul class="dropdown-menu">
-                    <li><a href="##" id="listBtnExport">复核列表</a></li>
+                    <li><a href="##" id="listBtnExport">确认列表</a></li>
                     <li><a href="##" id="workBtnExport">工作量</a></li>
                     <li><a href="##" id="workBtnExport">工作量</a></li>
                 </ul>
                 </ul>
                 </div>
                 </div>
@@ -132,11 +140,12 @@
         <th>客观分</th>
         <th>客观分</th>
         <th>主观分</th>
         <th>主观分</th>
         <th>试卷总分</th>
         <th>试卷总分</th>
+        <th>客观明细</th>
         <th>得分明细</th>
         <th>得分明细</th>
         <th>操作</th>
         <th>操作</th>
         <c:forEach begin="1" end="${maxInspectRound}" step="1" varStatus="status">
         <c:forEach begin="1" end="${maxInspectRound}" step="1" varStatus="status">
-        <th>复核人${status.index}</th>
-        <th>复核时间${status.index}</th>
+        <th>确认人${status.index}</th>
+        <th>确认时间${status.index}</th>
         </c:forEach>
         </c:forEach>
         
         
     </tr>
     </tr>
@@ -149,15 +158,16 @@
             <td>${result.objectiveScoreString}</td>
             <td>${result.objectiveScoreString}</td>
             <td>${result.subjectiveScoreString}</td>
             <td>${result.subjectiveScoreString}</td>
             <td><fmt:formatNumber pattern="###.###" value="${result.totalScore}"/></td>
             <td><fmt:formatNumber pattern="###.###" value="${result.totalScore}"/></td>
+            <td>${result.objectiveScoreList}</td>
             <td>${result.subjectiveScoreList}</td>
             <td>${result.subjectiveScoreList}</td>
             <td>
             <td>
             	 <a href="${ctx}/web/admin/exam/track/student?studentId=${result.id}&subjectCode=${result.subjectCode}" target="_blank">轨迹图</a>
             	 <a href="${ctx}/web/admin/exam/track/student?studentId=${result.id}&subjectCode=${result.subjectCode}" target="_blank">轨迹图</a>
-                <c:if test="${result.subjectiveStatus=='MARKED'&&!result.inspected}">
-	                <a target="_blank" href="${ctx}/web/admin/exam/inspected/start?studentId=${result.id}&subjectCode=${result.subjectCode}">进入复核</a>
-                </c:if>
-                <c:if test="${result.inspected}">
+                <%-- <c:if test="${result.subjectiveStatus=='MARKED'&&!result.inspected}"> --%>
+	                <a target="_blank" href="${ctx}/web/admin/exam/inspected/start?studentId=${result.id}&subjectCode=${result.subjectCode}">进入确认</a>
+                <%-- </c:if> --%>
+                <%-- <c:if test="${result.inspected}">
                 <a class="cancel-link" href="#" data-id="${result.id}">取消复核</a>
                 <a class="cancel-link" href="#" data-id="${result.id}">取消复核</a>
-                </c:if>
+                </c:if> --%>
             </td>
             </td>
             <c:if test="${!empty result.inspectHistoryMap}">
             <c:if test="${!empty result.inspectHistoryMap}">
 	            <c:forEach begin="1" end="${maxInspectRound}" step="1" varStatus="status">
 	            <c:forEach begin="1" end="${maxInspectRound}" step="1" varStatus="status">