1
0
xiatian 2 лет назад
Родитель
Сommit
cc3a1e9920
17 измененных файлов с 844 добавлено и 5 удалено
  1. 58 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ScoreVerifyParam.java
  2. 139 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ScoreVerifyVo.java
  3. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ScoreVerifyDao.java
  4. 24 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/enums/ScoreVerifyRule.java
  5. 24 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/enums/ScoreVerifyRuleCompare.java
  6. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ScoreVerify.java
  7. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ScoreVerifyDetail.java
  8. 49 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ScoreVerifyQuery.java
  9. 14 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ScoreVerifyService.java
  10. 96 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ScoreVerifyServiceImpl.java
  11. 64 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exception/StatusException.java
  12. 115 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreVerifyController.java
  13. 1 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedInfo.jsp
  14. 1 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp
  15. 8 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerify.jsp
  16. 160 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyPage.jsp
  17. 87 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyQuery.jsp

+ 58 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ScoreVerifyParam.java

@@ -0,0 +1,58 @@
+package cn.com.qmth.stmms.biz.exam.bean;
+
+import cn.com.qmth.stmms.biz.exam.enums.ScoreVerifyRule;
+import cn.com.qmth.stmms.biz.exam.enums.ScoreVerifyRuleCompare;
+
+public class ScoreVerifyParam {
+
+	private String studentCode;
+
+	private String studentName;
+
+	private ScoreVerifyRule rule;
+
+	private ScoreVerifyRuleCompare ruleCompare;
+
+	private Integer compareScore;
+
+	public String getStudentCode() {
+		return studentCode;
+	}
+
+	public void setStudentCode(String studentCode) {
+		this.studentCode = studentCode;
+	}
+
+	public String getStudentName() {
+		return studentName;
+	}
+
+	public void setStudentName(String studentName) {
+		this.studentName = studentName;
+	}
+
+	public ScoreVerifyRule getRule() {
+		return rule;
+	}
+
+	public void setRule(ScoreVerifyRule rule) {
+		this.rule = rule;
+	}
+
+	public ScoreVerifyRuleCompare getRuleCompare() {
+		return ruleCompare;
+	}
+
+	public void setRuleCompare(ScoreVerifyRuleCompare ruleCompare) {
+		this.ruleCompare = ruleCompare;
+	}
+
+	public Integer getCompareScore() {
+		return compareScore;
+	}
+
+	public void setCompareScore(Integer compareScore) {
+		this.compareScore = compareScore;
+	}
+
+}

+ 139 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ScoreVerifyVo.java

@@ -0,0 +1,139 @@
+package cn.com.qmth.stmms.biz.exam.bean;
+
+import java.util.Date;
+
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
+
+public class ScoreVerifyVo {
+
+	// 考生id
+	private Integer studentId;
+	// 考生姓名
+	private String studentName;
+	// 考生编号
+	private String studentCode;
+	// 科目
+	private String subjectCode;
+	private String subjectName;
+	// 上传状态
+	private Boolean upload;
+	// 总分
+	private Double subjectiveScore;
+	// 得分明细
+	private String subjectiveScoreList;
+	// 校验人
+	private String scoreVerifyUserName;
+	// 校验时间
+	private Date scoreVerifyTime;
+	private Double objectiveScore;
+	private SubjectiveStatus subjectiveStatus;
+
+	public Integer getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(Integer studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getStudentName() {
+		return studentName;
+	}
+
+	public void setStudentName(String studentName) {
+		this.studentName = studentName;
+	}
+
+	public String getStudentCode() {
+		return studentCode;
+	}
+
+	public void setStudentCode(String studentCode) {
+		this.studentCode = studentCode;
+	}
+
+	public double getTotalScore() {
+		double score = 0;
+		if (objectiveScore != null) {
+			score = BigDecimalUtils.add(score, objectiveScore);
+		}
+		if (subjectiveScore != null) {
+			score = BigDecimalUtils.add(score, subjectiveScore);
+		}
+		return score;
+	}
+
+	public Boolean getUpload() {
+		return upload;
+	}
+
+	public void setUpload(Boolean upload) {
+		this.upload = upload;
+	}
+
+	public Double getSubjectiveScore() {
+		return subjectiveScore;
+	}
+
+	public void setSubjectiveScore(Double subjectiveScore) {
+		this.subjectiveScore = subjectiveScore;
+	}
+
+	public String getSubjectiveScoreList() {
+		return subjectiveScoreList;
+	}
+
+	public void setSubjectiveScoreList(String subjectiveScoreList) {
+		this.subjectiveScoreList = subjectiveScoreList;
+	}
+
+	public String getScoreVerifyUserName() {
+		return scoreVerifyUserName;
+	}
+
+	public void setScoreVerifyUserName(String scoreVerifyUserName) {
+		this.scoreVerifyUserName = scoreVerifyUserName;
+	}
+
+	public Date getScoreVerifyTime() {
+		return scoreVerifyTime;
+	}
+
+	public void setScoreVerifyTime(Date scoreVerifyTime) {
+		this.scoreVerifyTime = scoreVerifyTime;
+	}
+
+	public String getSubjectCode() {
+		return subjectCode;
+	}
+
+	public void setSubjectCode(String subjectCode) {
+		this.subjectCode = subjectCode;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public Double getObjectiveScore() {
+		return objectiveScore;
+	}
+
+	public void setObjectiveScore(Double objectiveScore) {
+		this.objectiveScore = objectiveScore;
+	}
+
+	public SubjectiveStatus getSubjectiveStatus() {
+		return subjectiveStatus;
+	}
+
+	public void setSubjectiveStatus(SubjectiveStatus subjectiveStatus) {
+		this.subjectiveStatus = subjectiveStatus;
+	}
+
+}

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ScoreVerifyDao.java

@@ -8,4 +8,6 @@ import cn.com.qmth.stmms.biz.exam.model.ScoreVerify;
 public interface ScoreVerifyDao
 		extends PagingAndSortingRepository<ScoreVerify, Integer>, JpaSpecificationExecutor<ScoreVerify> {
 
+	ScoreVerify findByExamIdAndUserId(Integer examId, Integer id);
+
 }

+ 24 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/enums/ScoreVerifyRule.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.stmms.biz.exam.enums;
+
+/**
+ * 成绩校验规则
+ */
+public enum ScoreVerifyRule {
+
+	RULE1("单科目有分,其它科目0分或无分"),
+	RULE2("单科目分值小于等于5分,其它科目"),
+	RULE3("单科目分值小于等于10分,其它科目"),
+	;
+
+	private String name;
+
+	private ScoreVerifyRule(String name) {
+        this.name = name;
+    }
+
+	public String getName() {
+		return name;
+	}
+
+
+}

+ 24 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/enums/ScoreVerifyRuleCompare.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.stmms.biz.exam.enums;
+
+/**
+ * 成绩校验规则分数比较
+ */
+public enum ScoreVerifyRuleCompare {
+
+	EQUALS("等于"),
+	GT("大于"),
+	LT("小于"),
+	;
+
+	private String name;
+
+	private ScoreVerifyRuleCompare(String name) {
+        this.name = name;
+    }
+
+	public String getName() {
+		return name;
+	}
+
+
+}

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ScoreVerify.java

@@ -51,7 +51,7 @@ public class ScoreVerify implements Serializable {
 	/**
 	 * 创建时间
 	 */
-	@Temporal(TemporalType.DATE)
+	@Temporal(TemporalType.TIMESTAMP)
 	@Column(name = "create_time", nullable = false)
 	private Date createTime;
 

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ScoreVerifyDetail.java

@@ -48,7 +48,7 @@ public class ScoreVerifyDetail implements Serializable {
 	/**
 	 * 校验时间
 	 */
-	@Temporal(TemporalType.DATE)
+	@Temporal(TemporalType.TIMESTAMP)
 	@Column(name = "create_time", nullable = false)
 	private Date createTime;
 

+ 49 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ScoreVerifyQuery.java

@@ -0,0 +1,49 @@
+package cn.com.qmth.stmms.biz.exam.query;
+
+import cn.com.qmth.stmms.biz.common.BaseQuery;
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyParam;
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyVo;
+
+public class ScoreVerifyQuery extends BaseQuery<ScoreVerifyVo> {
+
+	private ScoreVerifyParam param;
+
+	private Integer examId;
+
+	private Integer userId;
+
+	private Boolean flagged;
+
+	public ScoreVerifyParam getParam() {
+		return param;
+	}
+
+	public void setParam(ScoreVerifyParam param) {
+		this.param = param;
+	}
+
+	public Integer getExamId() {
+		return examId;
+	}
+
+	public void setExamId(Integer examId) {
+		this.examId = examId;
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Boolean getFlagged() {
+		return flagged;
+	}
+
+	public void setFlagged(Boolean flagged) {
+		this.flagged = flagged;
+	}
+
+}

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ScoreVerifyService.java

@@ -1,4 +1,18 @@
 package cn.com.qmth.stmms.biz.exam.service;
 
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyVo;
+import cn.com.qmth.stmms.biz.exam.model.ScoreVerify;
+import cn.com.qmth.stmms.biz.exam.query.ScoreVerifyQuery;
+
 public interface ScoreVerifyService {
+
+	List<ScoreVerifyVo> findByQuery(ScoreVerifyQuery query);
+
+	Integer countByQuery(ScoreVerifyQuery query);
+
+	ScoreVerify findByExamIdAndUserId(Integer examId, Integer id);
+
+	void createQuery(ScoreVerifyQuery query);
 }

+ 96 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ScoreVerifyServiceImpl.java

@@ -1,18 +1,112 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.google.gson.Gson;
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyVo;
 import cn.com.qmth.stmms.biz.exam.dao.ScoreVerifyDao;
+import cn.com.qmth.stmms.biz.exam.enums.ScoreVerifyRule;
 import cn.com.qmth.stmms.biz.exam.model.ScoreVerify;
+import cn.com.qmth.stmms.biz.exam.query.ScoreVerifyQuery;
 import cn.com.qmth.stmms.biz.exam.service.ScoreVerifyService;
+import cn.com.qmth.stmms.biz.exception.StatusException;
 
 @Service
 public class ScoreVerifyServiceImpl extends BaseQueryService<ScoreVerify> implements ScoreVerifyService {
+	
+	@PersistenceContext
+    private EntityManager entityManager;
+	
+	@Autowired
+	private ScoreVerifyDao scoreVerifyDao;
+
+	@Override
+	public List<ScoreVerifyVo> findByQuery(ScoreVerifyQuery req) {
+		int offset=(req.getPageNumber() - 1) * req.getPageSize();
+		StringBuilder sql = new StringBuilder();
+		sql.append("select t.id studentId,t.student_code,t.name studentName,t.subject_code,t.subject_name, ");
+		sql.append("t.is_upload upload,t.subjective_score,t.subjective_score_list,t.objective_score,t.subjective_status, ");
+		sql.append("u.name scoreVerifyUserName,t.score_check_time scoreVerifyTime ");
+		sql.append("from eb_exam_student t left join b_user u on t.score_check_user=u.id where t.exam_id="+req.getExamId());
+		sql.append(getWhereSql(req));
+		sql.append("order by t.student_code,t.id ");
+        sql.append("limit "+offset+","+req.getPageSize());
+        Query query = entityManager.createNativeQuery(sql.toString(),ScoreVerifyVo.class);
+        return query.getResultList();
+	}
+	
+	private String getWhereSql(ScoreVerifyQuery req) {
+		StringBuilder sql = new StringBuilder();
+		if(StringUtils.isNotBlank(req.getParam().getStudentCode())) {
+			sql.append(" and t.student_code="+req.getParam().getStudentCode());
+		}
+		if(StringUtils.isNotBlank(req.getParam().getStudentName())) {
+			sql.append(" and t.name="+req.getParam().getStudentName());
+		}
+		ScoreVerifyRule rule=req.getParam().getRule();
+		if(rule!=null) {
+			if(ScoreVerifyRule.RULE1.equals(rule)) {
+				
+			}else if(ScoreVerifyRule.RULE2.equals(rule)) {
+				
+			}else if(ScoreVerifyRule.RULE3.equals(rule)) {
+				
+			}
+		}
+		return sql.toString();
+	}
+
+
+	@Override
+	public Integer countByQuery(ScoreVerifyQuery req) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("select count(1) ");
+		sql.append("from eb_exam_student t where t.exam_id="+req.getExamId());
+		sql.append(getWhereSql(req));
+        Query query = entityManager.createNativeQuery(sql.toString(),Integer.class);
+        return (Integer)query.getResultList().get(0);
+	}
 
-    @Autowired
-    private ScoreVerifyDao scoreVerifyDao;
+	@Override
+	public ScoreVerify findByExamIdAndUserId(Integer examId, Integer id) {
+		return scoreVerifyDao.findByExamIdAndUserId(examId, id);
+	}
 
+	@Transactional
+	@Override
+	public void createQuery(ScoreVerifyQuery query) {
+		if (query.getParam() == null || (StringUtils.isBlank(query.getParam().getStudentCode())
+				&& StringUtils.isBlank(query.getParam().getStudentName()) && query.getParam().getRule() == null)) {
+			throw new StatusException("请选择至少一个条件");
+		}
+		if (ScoreVerifyRule.RULE2.equals(query.getParam().getRule())
+				|| ScoreVerifyRule.RULE3.equals(query.getParam().getRule())) {
+			if(query.getParam().getRuleCompare()==null) {
+				throw new StatusException("请选择分数匹配条件");
+			}
+			if(query.getParam().getCompareScore()==null) {
+				throw new StatusException("请填写匹配分值");
+			}
+		}
+		ScoreVerify sv=new ScoreVerify();
+		sv.setCreateTime(new Date());
+		sv.setExamId(query.getExamId());
+		sv.setUserId(query.getUserId());
+		Gson gson = new Gson();
+		sv.setParams(gson.toJson(query.getParam()));
+		scoreVerifyDao.save(sv);
+	}
 
 }

+ 64 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exception/StatusException.java

@@ -0,0 +1,64 @@
+package cn.com.qmth.stmms.biz.exception;
+
+public class StatusException extends RuntimeException {
+
+    private static final long serialVersionUID = 5003047488500388819L;
+
+    private static final String DEF_CODE = "500";
+
+    /**
+     * 追踪ID
+     */
+    private String traceId;
+
+    /**
+     * 状态码
+     */
+    private String code;
+
+    /**
+     * 状态描述
+     */
+    private String desc;
+
+    /**
+     * 构造函数
+     */
+    public StatusException(String code, String desc) {
+        super("[code: " + code + "; desc: " + desc + "]");
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 构造函数
+     */
+    public StatusException(String code, String desc, Throwable cause) {
+        super("[code: " + code + "; desc: " + desc + "]", cause);
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public StatusException(String desc) {
+        super("[code: " + DEF_CODE + "; desc: " + desc + "]");
+        this.code = DEF_CODE;
+        this.desc = desc;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getTraceId() {
+        return traceId;
+    }
+
+    public void setTraceId(String traceId) {
+        this.traceId = traceId;
+    }
+
+}

+ 115 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreVerifyController.java

@@ -1,12 +1,126 @@
 package cn.com.qmth.stmms.admin.exam;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import com.google.gson.Gson;
+
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyParam;
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyVo;
+import cn.com.qmth.stmms.biz.exam.model.Exam;
+import cn.com.qmth.stmms.biz.exam.model.ScoreVerify;
+import cn.com.qmth.stmms.biz.exam.query.ScoreVerifyQuery;
+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.ScoreVerifyService;
+import cn.com.qmth.stmms.biz.exception.StatusException;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONObject;
+
+
+@Controller("scoreVerifyController")
 @RequestMapping("/admin/exam/score/verify")
 public class ScoreVerifyController extends BaseExamController {
 
-    protected static Logger log = LoggerFactory.getLogger(ScoreVerifyController.class);
+	protected static Logger log = LoggerFactory.getLogger(ScoreVerifyController.class);
+
+	@Autowired
+	private ScoreVerifyService scoreVerifyService;
+
+	@Autowired
+	private ExamQuestionService questionService;
+
+	@Autowired
+	private ExamService examService;
 
+	@RequestMapping(value = "init")
+	public String init(Model model, HttpServletRequest request, ScoreVerifyQuery query) {
+		Integer examId = getSessionExamId(request);
+		Exam exam = examService.findById(examId);
+		if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+			return "modules/exam/permission";
+		}
+		model.addAttribute("showType", "query");
+		return "modules/exam/scoreVerify";
+		
+	}
+	
+	@RequestMapping(value = "page")
+	public String page(Model model, HttpServletRequest request, ScoreVerifyQuery query) {
+		Integer examId = getSessionExamId(request);
+		Exam exam = examService.findById(examId);
+		if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+			return "modules/exam/permission";
+		}
+		WebUser wu = RequestUtils.getWebUser(request);
+		query.setExamId(examId);
+		query.setUserId(wu.getId());
+		ScoreVerify sv=scoreVerifyService.findByExamIdAndUserId(examId,wu.getId());
+		if(sv==null) {
+			return createAndQuery(model, request, query);
+		}else {
+			Gson gson = new Gson();
+			ScoreVerifyParam param = gson.fromJson(sv.getParams(), ScoreVerifyParam.class);
+			query.setParam(param);
+			return query(model, request, query);
+		}
+		
+	}
+	
+	private String createAndQuery(Model model, HttpServletRequest request, ScoreVerifyQuery query) {
+		try {
+			scoreVerifyService.createQuery(query);
+			query.setFlagged(null);
+			Integer totalCount = scoreVerifyService.countByQuery(query);
+			if(totalCount>0) {
+				List<ScoreVerifyVo> list = scoreVerifyService.findByQuery(query);
+				query.setFlagged(true);
+				Integer needVerifyCount = scoreVerifyService.countByQuery(query);
+				query.setResult(list);
+				query.setTotalCount(totalCount);
+				model.addAttribute("needVerifyCount", needVerifyCount);
+			}else {
+				query.setResult(new ArrayList<>());
+				query.setTotalCount(0);
+				model.addAttribute("needVerifyCount", 0);
+			}
+		} catch (StatusException e) {
+			model.addAttribute("errmsg", e.getDesc());
+		}finally {
+			model.addAttribute("showType", "page");
+		}
+		model.addAttribute("query", query);
+		return "modules/exam/scoreVerify";
+	}
+	
+	private String query(Model model, HttpServletRequest request, ScoreVerifyQuery query) {
+		query.setFlagged(null);
+		Integer totalCount = scoreVerifyService.countByQuery(query);
+		if(totalCount>0) {
+			List<ScoreVerifyVo> list = scoreVerifyService.findByQuery(query);
+			query.setFlagged(true);
+			Integer needVerifyCount = scoreVerifyService.countByQuery(query);
+			query.setResult(list);
+			query.setTotalCount(totalCount);
+			model.addAttribute("needVerifyCount", needVerifyCount);
+		}else {
+			query.setResult(new ArrayList<>());
+			query.setTotalCount(0);
+			model.addAttribute("needVerifyCount", 0);
+		}
+		model.addAttribute("query", query);
+		model.addAttribute("showType", "page");
+		return "modules/exam/scoreVerify";
+	}
 }

+ 1 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedInfo.jsp

@@ -12,6 +12,7 @@
     <ul class="nav nav-tabs">
         <li class="active"><a href="##">成绩复核进度</a></li>
         <li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
+        <li><a href="${ctx}/admin/exam/score/verify/init">成绩校验</a></li>
     </ul>
      <c:if test="${web_user.schoolAdmin==true}">
     	<div id="main" style="width: 1000px;height:400px;"></div>

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

@@ -22,6 +22,7 @@
 <ul class="nav nav-tabs">
         <li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
         <li class="active"><a href="##">全卷复核</a></li>
+        <li><a href="${ctx}/admin/exam/score/verify/init">成绩校验</a></li>
 </ul>
 <form id="searchForm" action="${ctx}/admin/exam/inspected/list" method="post" class="breadcrumb form-search" >
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>

+ 8 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerify.jsp

@@ -0,0 +1,8 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<c:if test="${showType=='query'}">
+<%@include file="/WEB-INF/views/modules/exam/scoreVerifyQuery.jsp" %>
+</c:if>
+<c:if test="${showType=='page'}">
+<%@include file="/WEB-INF/views/modules/exam/scoreVerifyPage.jsp" %>
+</c:if>

+ 160 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyPage.jsp

@@ -0,0 +1,160 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+<title>成绩校验</title>
+<meta name="decorator" content="default" />
+<%@include file="/WEB-INF/views/include/head.jsp"%>
+<style type="text/css">
+.sort {
+	color: #0663A2;
+	cursor: pointer;
+}
+</style>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
+		<li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
+		<li class="active"><a href="##">成绩校验</a></li>
+	</ul>
+	<form id="searchForm" action="#"
+		method="post" class="breadcrumb form-search">
+		<input type="hidden" id="pageNumber" name="pageNumber"
+			value="${query.pageNumber }" /> <input type="hidden" id="pageSize"
+			name="pageSize" value="${query.pageSize }" />
+		<div>
+			<input id="btnQuery" class="btn" type="button" value="重置"
+				onclick="query()" />
+		</div>
+	</form>
+	<tags:message content="${message}" />
+	<tags:message content="${errmsg}" type="error" />
+	<form id="dataForm" action="#"
+		method="post" class="breadcrumb form-search">
+		<table id="contentTable"
+			class="table table-striped table-bordered table-condensed">
+			<thead>
+				<tr>
+					<th>考生姓名</th>
+					<th>考生编号</th>
+					<th>科目</th>
+					<th>状态</th>
+					<th>试卷总分</th>
+					<th>大题得分明细</th>
+					<th>操作</th>
+					<th>校验人</th>
+					<th>操作时间</th>
+				</tr>
+			</thead>
+			<tbody>
+				<c:forEach items="${query.result}" var="result">
+					<tr>
+						<td>${result.studentName}</td>
+						<td>${result.studentCode}</td>
+						<td>${result.subjectCode}-${result.subjectName}</td>
+						<td>
+                <c:if test="${student.upload==true}">
+                    <c:if test="${examType!='MULTI_MEDIA'}">
+                        <a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${fileServer}${student.answerUrl}</c:if>"
+                           data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">已上传</a>
+                    </c:if>
+                    <c:if test="${examType=='MULTI_MEDIA'}">
+                        已上传
+                    </c:if>
+                    &nbsp;
+                    <c:if test="${student.absent==true}">
+                        缺考
+                    </c:if>
+                    <c:if test="${student.absent==false}">
+                        正常
+                    </c:if>
+                </c:if>
+                
+                <c:if test="${student.upload==false}">
+                    未上传
+                </c:if>
+            
+            </td>
+						<td><fmt:formatNumber pattern="###.###"
+								value="${result.totalScore}" /></td>
+						<td>${result.subjectiveScoreList}</td>
+						<td><a
+							href="${ctx}/web/admin/exam/track/student?studentId=${result.studentId}&subjectCode=${result.subjectCode}"
+							target="_blank">轨迹图</a>
+								<a target="_blank"
+									href="${ctx}/web/admin/exam/inspected/start?studentId=${result.id}&subjectCode=${result.subjectCode}">进入校验</a>
+							</td>
+							<td>${result.scoreVerifyUserName}</td>
+							<td>
+							<c:if test="${result.scoreVerifyTime!=null}">
+			                    <fmt:formatDate value="${result.scoreVerifyTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+			                </c:if>
+			                <c:if test="${result.scoreVerifyTime==null}">
+	                    &nbsp;
+	                </c:if>
+	                </td>
+					</tr>
+				</c:forEach>
+			</tbody>
+		</table>
+	</form>
+	<div class="pagination">${query}</div>
+	<script type="text/javascript">
+
+		function page(n, s) {
+			$("#pageNumber").val(n);
+			$("#pageSize").val(s);
+			$("#searchForm").attr('target', "_self");
+			$("#searchForm").attr('action', '${ctx}//admin/exam/score/verify/page');
+			$("#searchForm").submit();
+			return false;
+		}
+
+		function goStart() {
+			var url = '${ctx}/web/admin/exam/inspected/start?';
+			var subjectCode = $("#subject-select").val();
+			if (subjectCode == undefined || subjectCode == "") {
+				alert('请选择科目');
+				return;
+			}
+			url = url + 'subjectCode=' + subjectCode
+			var startScore = $("#startScore").val();
+			if (startScore != undefined && startScore != "") {
+				url = url + '&startScore=' + startScore;
+			}
+			var endScore = $("#endScore").val();
+			if (endScore != undefined && endScore != "") {
+				url = url + '&endScore=' + endScore;
+			}
+			var mainNumber = $("#question-select").val();
+			if (mainNumber != undefined && mainNumber != "") {
+				url = url + '&mainNumber=' + mainNumber;
+			}
+			var mainStartScore = $("#mainStartScore").val();
+			if (mainStartScore != undefined && mainStartScore != "") {
+				url = url + '&mainStartScore=' + mainStartScore;
+			}
+			var mainEndScore = $("#mainEndScore").val();
+			if (mainEndScore != undefined && mainEndScore != "") {
+				url = url + '&mainEndScore=' + mainEndScore;
+			}
+			var questionScore = $("#questionScore").val();
+			if (questionScore != undefined && questionScore != "") {
+				url = url + '&questionScore=' + questionScore;
+			}
+			var selectiveStatus = $("#selectiveStatus").val();
+			if (selectiveStatus != undefined && selectiveStatus != "") {
+				url = url + '&selectiveStatus=' + selectiveStatus;
+			}
+			var secretNumber = $("#secretNumber").val();
+			if (secretNumber != undefined && secretNumber != "") {
+				url = url + '&secretNumber=' + secretNumber;
+			}
+			window.open(url, '_blank');
+			return false;
+		}
+
+	</script>
+</body>
+</html>

+ 87 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyQuery.jsp

@@ -0,0 +1,87 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+<title>成绩校验</title>
+<meta name="decorator" content="default" />
+<%@include file="/WEB-INF/views/include/head.jsp"%>
+<style type="text/css">
+.sort {
+	color: #0663A2;
+	cursor: pointer;
+}
+</style>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
+		<li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
+		<li class="active"><a href="##">成绩校验</a></li>
+	</ul>
+	<form id="searchForm" action="${ctx}/admin/exam/score/verify/page"
+		method="post" class="breadcrumb form-search">
+		<input type="hidden" id="pageNumber" name="pageNumber" value="1" /> <input
+			type="hidden" id="pageSize" name="pageSize" value="20" />
+		<div>
+
+			<label>考生编号</label> <input type="text" name="param.studentCode"
+				id="studentCode" class="input-medium" /> <label>姓名</label> <input
+				type="text" name="param.studentName" id="studentName"
+				class="input-mini" /> <label>校验规则</label> <select
+				class="input-large" name="param.rule" id="rule">
+				<option value="">请选择</option>
+				<option value="RULE1">单科目有分,其它科目0分或无分</option>
+				<option value="RULE2">单科目分值小于等于5分,其它科目</option>
+				<option value="RULE3">单科目分值小于等于10分,其它科目</option>
+			</select> <span id="span-ruleCompare" hidden="true"> <select
+				class="input-small" name="param.ruleCompare" id="ruleCompare">
+					<option value="">请选择</option>
+					<option value="EQUALS">等于</option>
+					<option value="GT">大于</option>
+					<option value="LT">小于</option>
+			</select> <input type="text" name="param.compareScore" id="compareScore"
+				class="input-mini" />
+			</span> <input id="btnQuery" class="btn" type="button" value="查询"
+				onclick="query()" />
+		</div>
+	</form>
+	<tags:message content="${message}" />
+	<tags:message content="${errmsg}" type="error" />
+	<script type="text/javascript">
+		function query() {
+			if ($('#studentCode').val() == '' && $('#studentName').val() == ''
+					&& $('#rule').val() == '') {
+				alert("请选择至少一个条件");
+				return false;
+			}
+			var val = $('#rule').val();
+			if (val == 'RULE2' || val == 'RULE3') {
+				if ($("#ruleCompare").val() == '') {
+					alert("请选择分数匹配条件");
+					return false;
+				}
+				if ($("#compareScore").val() == '') {
+					alert("请填写匹配分值");
+					return false;
+				}
+				var pattern = /^[1-9]\d*$/; // 正则表达式
+				if (!pattern.test($("#compareScore").val())) {
+					alert("分值请输入正整数");
+					return false;
+				}
+			}
+			$("#searchForm").submit();
+		}
+		$('#rule').change(function() {
+			var val = $(this).val();
+			if (val == 'RULE2' || val == 'RULE3') {
+				$('#span-ruleCompare').show();
+			} else {
+				$('#span-ruleCompare').hide();
+				$("#ruleCompare").val("").trigger('change');
+				$('#compareScore').val("");
+			}
+		});
+	</script>
+</body>
+</html>