1
0
xiatian 1 dienu atpakaļ
vecāks
revīzija
1587e6cdfa

+ 306 - 247
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ScoreVerifyVo.java

@@ -1,247 +1,306 @@
-package cn.com.qmth.stmms.biz.exam.bean;
-
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
-import cn.com.qmth.stmms.common.annotation.ExcelField;
-import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
-
-public class ScoreVerifyVo {
-	private Integer examId;
-	// 考生id
-	private Integer studentId;
-	// 考生姓名
-	@ExcelField(title = "考生姓名*", align = 2, sort = 1)
-	private String studentName;
-	// 考生编号
-	@ExcelField(title = "考生编号*", align = 2, sort = 2)
-	private String studentCode;
-	// 科目
-	@ExcelField(title = "科目代码*", align = 2, sort = 3)
-	private String subjectCode;
-	@ExcelField(title = "科目名称*", align = 2, sort = 4)
-	private String subjectName;
-	// 上传状态
-	private Boolean upload;
-	// 总分
-	private Double subjectiveScore;
-	// 得分明细
-	private String subjectiveScoreList;
-	// 校验人
-	private String scoreVerifyUserName;
-	// 校验时间
-	private Date scoreVerifyTime;
-	private Double objectiveScore;
-	private Boolean absent;
-	private List<String> sheetUrls;
-	private String answerUrl;
-	private String examNumber;
-	private Integer sheetCount;
-	private Boolean breach;
-    private Double subjectScore;
-
-	public String getSheetUrlString() {
-		if (sheetUrls != null) {
-			return StringUtils.join(sheetUrls, ",");
-		} else {
-			return "";
-		}
-	}
-
-	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 String getObjectiveScoreString() {
-		try {
-			return ScoreItem.NUMBER_FORMAT.format(objectiveScore);
-		} catch (Exception e) {
-			return "";
-		}
-	}
-
-	public String getSubjectiveScoreString() {
-		try {
-			return ScoreItem.NUMBER_FORMAT.format(subjectiveScore);
-		} catch (Exception e) {
-			return "";
-		}
-	}
-
-	public String getTotalScoreString() {
-		try {
-			return ScoreItem.NUMBER_FORMAT.format(getTotalScore());
-		} catch (Exception e) {
-			return "";
-		}
-	}
-	public String getSubjectScoreString() {
-		try {
-			return ScoreItem.NUMBER_FORMAT.format(getSubjectScore());
-		} catch (Exception e) {
-			return "";
-		}
-	}
-	public Double getSubjectScore() {
-		return subjectScore;
-	}
-
-	public void setSubjectScore(Double subjectScore) {
-		this.subjectScore = subjectScore;
-	}
-
-	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 Boolean getAbsent() {
-		return absent;
-	}
-
-	public void setAbsent(Boolean absent) {
-		this.absent = absent;
-	}
-
-	public Integer getExamId() {
-		return examId;
-	}
-
-	public void setExamId(Integer examId) {
-		this.examId = examId;
-	}
-
-	public List<String> getSheetUrls() {
-		return sheetUrls;
-	}
-
-	public void setSheetUrls(List<String> sheetUrls) {
-		this.sheetUrls = sheetUrls;
-	}
-
-	public String getAnswerUrl() {
-		return answerUrl;
-	}
-
-	public void setAnswerUrl(String answerUrl) {
-		this.answerUrl = answerUrl;
-	}
-
-	public String getExamNumber() {
-		return examNumber;
-	}
-
-	public void setExamNumber(String examNumber) {
-		this.examNumber = examNumber;
-	}
-
-	public Integer getSheetCount() {
-		return sheetCount;
-	}
-
-	public void setSheetCount(Integer sheetCount) {
-		this.sheetCount = sheetCount;
-	}
-
-	public Boolean getBreach() {
-		return breach;
-	}
-
-	public void setBreach(Boolean breach) {
-		this.breach = breach;
-	}
-
-}
+package cn.com.qmth.stmms.biz.exam.bean;
+
+import java.util.Date;
+import java.util.List;
+
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+import io.swagger.annotations.ApiModelProperty;
+
+public class ScoreVerifyVo {
+
+    private Integer examId;
+
+    // 考生id
+    private Integer studentId;
+
+    // 考生姓名
+    @ApiModelProperty("姓名")
+    @ExcelField(title = "姓名*", align = 2, sort = 1)
+    private String studentName;
+
+    // 考生编号
+    @ApiModelProperty("考生编号")
+    @ExcelField(title = "考生编号*", align = 2, sort = 2)
+    private String studentCode;
+
+    // 科目
+    private String subjectCode;
+
+    private String subjectName;
+
+    @ApiModelProperty("科目")
+    @ExcelField(title = "科目", align = 2, sort = 3)
+    private String subjectText;
+
+    // 上传状态
+    private Boolean upload;
+
+    // 总分
+    private Double subjectiveScore;
+
+    // 得分明细
+    private String subjectiveScoreList;
+
+    // 校验人
+    private String scoreVerifyUserName;
+
+    // 校验时间
+    private Date scoreVerifyTime;
+
+    private Double objectiveScore;
+
+    private Boolean absent;
+
+    @ApiModelProperty("图片地址")
+    private List<String> sheetUrls;
+
+    private String answerUrl;
+
+    private String examNumber;
+
+    private Integer sheetCount;
+
+    private Boolean breach;
+
+    private Double subjectScore;
+
+    @ApiModelProperty("客观分")
+    private String objectiveScoreText;
+
+    @ApiModelProperty("主观分")
+    private String subjectiveScoreText;
+
+    @ApiModelProperty("满分")
+    @ExcelField(title = "满分", align = 2, sort = 4)
+    private String subjectScoreText;
+
+    @ApiModelProperty("状态")
+    @ExcelField(title = "状态", align = 2, sort = 5)
+    private String statusText;
+
+    @ApiModelProperty("已上传是否需要加跳转")
+    private Boolean showSheet;
+
+    private Double totalScore;
+
+    @ApiModelProperty("试卷总分")
+    @ExcelField(title = "试卷总分", align = 2, sort = 6)
+    private String totalScoreText;
+
+    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 getSubjectScore() {
+        return subjectScore;
+    }
+
+    public void setSubjectScore(Double subjectScore) {
+        this.subjectScore = subjectScore;
+    }
+
+    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 Boolean getAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(Boolean absent) {
+        this.absent = absent;
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public List<String> getSheetUrls() {
+        return sheetUrls;
+    }
+
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
+    }
+
+    public String getAnswerUrl() {
+        return answerUrl;
+    }
+
+    public void setAnswerUrl(String answerUrl) {
+        this.answerUrl = answerUrl;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public Integer getSheetCount() {
+        return sheetCount;
+    }
+
+    public void setSheetCount(Integer sheetCount) {
+        this.sheetCount = sheetCount;
+    }
+
+    public Boolean getBreach() {
+        return breach;
+    }
+
+    public void setBreach(Boolean breach) {
+        this.breach = breach;
+    }
+
+    public String getSubjectScoreText() {
+        return subjectScoreText;
+    }
+
+    public void setSubjectScoreText(String subjectScoreText) {
+        this.subjectScoreText = subjectScoreText;
+    }
+
+    public String getSubjectText() {
+        return subjectText;
+    }
+
+    public void setSubjectText(String subjectText) {
+        this.subjectText = subjectText;
+    }
+
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
+
+    public String getTotalScoreText() {
+        return totalScoreText;
+    }
+
+    public void setTotalScoreText(String totalScoreText) {
+        this.totalScoreText = totalScoreText;
+    }
+
+    public Double getTotalScore() {
+        return totalScore;
+    }
+
+    public String getObjectiveScoreText() {
+        return objectiveScoreText;
+    }
+
+    public void setObjectiveScoreText(String objectiveScoreText) {
+        this.objectiveScoreText = objectiveScoreText;
+    }
+
+    public String getSubjectiveScoreText() {
+        return subjectiveScoreText;
+    }
+
+    public void setSubjectiveScoreText(String subjectiveScoreText) {
+        this.subjectiveScoreText = subjectiveScoreText;
+    }
+
+    public String getStatusText() {
+        return statusText;
+    }
+
+    public void setStatusText(String statusText) {
+        this.statusText = statusText;
+    }
+
+    public Boolean getShowSheet() {
+        return showSheet;
+    }
+
+    public void setShowSheet(Boolean showSheet) {
+        this.showSheet = showSheet;
+    }
+
+}

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

@@ -1,32 +1,32 @@
-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 req);
-
-	Integer countByQuery(Integer examId, Integer userId);
-
-	void createQuery(ScoreVerifyQuery query);
-
-	Integer needVerifyCount(Integer examId, Integer userId);
-
-	List<ScoreVerifyVo> findFlagged(Integer examId, Integer userId);
-
-	List<ScoreVerifyVo> needVerify(Integer examId, Integer userId);
-
-	void tag(Integer examId, Integer userId, Integer studentId, boolean isTag);
-
-	ScoreVerify findByExamIdAndUserIdAndStudentId(Integer examId, Integer userId, Integer studentId);
-
-	void reset(Integer examId, Integer userId);
-
-	Boolean existByExamIdAndUserId(Integer examId, Integer userId);
-
-	void view(Integer examId, Integer userId, Integer studentId);
-}
+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 req);
+
+    Integer countByQuery(Integer examId, Integer userId);
+
+    void createQuery(ScoreVerifyQuery query);
+
+    Integer needVerifyCount(Integer examId, Integer userId);
+
+    List<ScoreVerifyVo> findFlagged(Integer examId, Boolean flagged, Integer userId);
+
+    List<ScoreVerifyVo> needVerify(Integer examId, Integer userId);
+
+    void tag(Integer examId, Integer userId, Integer studentId, boolean isTag);
+
+    ScoreVerify findByExamIdAndUserIdAndStudentId(Integer examId, Integer userId, Integer studentId);
+
+    void reset(Integer examId, Integer userId);
+
+    Boolean existByExamIdAndUserId(Integer examId, Integer userId);
+
+    void view(Integer examId, Integer userId, Integer studentId);
+}

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

@@ -22,321 +22,420 @@ 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.enums.ScoreVerifyRuleCompare;
+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.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreVerifyService;
 import cn.com.qmth.stmms.biz.exception.StatusException;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.utils.Calculator;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
+import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
 
 @Service
 public class ScoreVerifyServiceImpl extends BaseQueryService<ScoreVerify> implements ScoreVerifyService {
+
     public static final String UN_SELECTIVE_SCORE = "-1";
-	@PersistenceContext
-	private EntityManager entityManager;
-
-	@Autowired
-	private ScoreVerifyDao scoreVerifyDao;
-
-	@Autowired
-	private ExamStudentService examStudentService;
-
-	@Autowired
-	private FileService fileService;
-
-	private void buildSheetUrl(ScoreVerifyVo student) {
-		student.setSheetUrls(
-				fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public List<ScoreVerifyVo> findByQuery(ScoreVerifyQuery req) {
-		int offset = (req.getPageNumber() - 1) * req.getPageSize();
-		StringBuilder sql = new StringBuilder();
-		sql.append(
-				" select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
-		sql.append(
-				" t.is_upload upload,t.is_breach breach,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
-		sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime,sub.total_score subjectScore");
-		sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
-		sql.append(" left join eb_exam_subject sub on t.exam_id=sub.exam_id and t.subject_code=sub.code");
-		sql.append(" left join b_user u on t.score_verify_user=u.id where r.exam_id=" + req.getExamId()+" and r.user_id="+req.getUserId());
-		sql.append(" order by t.student_code,t.subject_code ");
-		sql.append(" limit " + offset + "," + req.getPageSize());
-		Query query = entityManager.createNativeQuery(sql.toString());
-		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
-		List<ScoreVerifyVo> ret = query.getResultList();
-		if (ret != null && !ret.isEmpty()) {
-			for (ScoreVerifyVo vo : ret) {
-				buildSheetUrl(vo);
-				if (vo.getSubjectiveScoreList() != null) {
-					vo.setSubjectiveScoreList(vo.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
-	            }
-			}
-		}
-		return ret;
-	}
-
-	@Override
-	public Integer needVerifyCount(Integer examId, Integer userId) {
-		StringBuilder sql = new StringBuilder();
-		sql.append("select count(1) ");
-		sql.append(
-				"from eb_score_verify t inner join eb_exam_student s on t.student_id=s.id  where t.exam_id=" + examId+" and t.user_id="+userId + " and t.viewed =0 ");
-		Query query = entityManager.createNativeQuery(sql.toString());
-		return Integer.valueOf(query.getResultList().get(0).toString());
-	}
-
-	@Override
-	public Integer countByQuery(Integer examId, Integer userId) {
-		StringBuilder sql = new StringBuilder();
-		sql.append("select count(1) ");
-		sql.append("from eb_score_verify t inner join eb_exam_student s on t.student_id=s.id where t.exam_id=" + examId+" and t.user_id="+userId);
-		Query query = entityManager.createNativeQuery(sql.toString());
-		return Integer.valueOf(query.getResultList().get(0).toString());
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public Boolean existByExamIdAndUserId(Integer examId, Integer userId) {
-		StringBuilder sql = new StringBuilder();
-		sql.append(" select r.id from eb_score_verify r inner join eb_exam_student s on r.student_id=s.id where r.exam_id=" + examId+" and r.user_id="+userId);
-		sql.append(" limit 1");
-		Query query = entityManager.createNativeQuery(sql.toString());
-		List<ScoreVerify> ret = query.getResultList();
-		if(ret!=null&&ret.size()>0) {
-			return true;
-		}
-		return false;
-	}
-
-	@Transactional
-	@Override
-	public void createQuery(ScoreVerifyQuery req) {
-		if (StringUtils.isBlank(req.getStudentCode())
-				&& StringUtils.isBlank(req.getStudentName()) && req.getRule() == null) {
-			throw new StatusException("请选择至少一个条件");
-		}
-		if (ScoreVerifyRule.RULE2.equals(req.getRule())
-				|| ScoreVerifyRule.RULE3.equals(req.getRule())) {
-			if (req.getRuleCompare() == null) {
-				throw new StatusException("请选择分数匹配条件");
-			}
-			if (req.getCompareScore() == null||req.getFromScore()==null) {
-				throw new StatusException("请填写匹配分值");
-			}
-		}
-		List<ScoreVerifyVo> allStudents = getAllStudent(req);
-		if (allStudents == null || allStudents.size() == 0) {
-			throw new StatusException("没有满足条件的数据");
-		}
-		List<ScoreVerify> details = createByQuery(allStudents, req);
-		if (details == null || details.size() == 0) {
-			throw new StatusException("没有满足条件的数据");
-		}
-		scoreVerifyDao.save(details);
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<ScoreVerifyVo> getAllStudent(ScoreVerifyQuery req) {
-		StringBuilder sql = new StringBuilder();
-		sql.append(
-				"select t.id studentId,t.student_code studentCode,t.subjective_score subjectiveScore,t.objective_score objectiveScore from eb_exam_student t  ");
-		sql.append("where exam_id=" + req.getExamId());
-		if (StringUtils.isNotBlank(req.getStudentCode())) {
-			sql.append(" and t.student_code='" + req.getStudentCode() + "'");
-		}
-		if (StringUtils.isNotBlank(req.getStudentName())) {
-			sql.append(" and t.name='" + req.getStudentName() + "'");
-		}
-		Query query = entityManager.createNativeQuery(sql.toString());
-		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
-		List<ScoreVerifyVo> ret = query.getResultList();
-		return ret;
-	}
-
-	private List<ScoreVerify> createByQuery(List<ScoreVerifyVo> vos, ScoreVerifyQuery req) {
-		List<ScoreVerify> ret = new ArrayList<>();
-		if (vos != null & vos.size() > 0) {
-			Map<String, List<ScoreVerifyVo>> voMap = new HashMap<>();
-			for (ScoreVerifyVo vo : vos) {
-				List<ScoreVerifyVo> tem = voMap.get(vo.getStudentCode());
-				if (tem == null) {
-					tem = new ArrayList<>();
-					voMap.put(vo.getStudentCode(), tem);
-				}
-				tem.add(vo);
-			}
-			for (List<ScoreVerifyVo> temVos : voMap.values()) {
-				if (checkInQuery(temVos, req)) {
-					ret.addAll(of(req, temVos));
-				}
-			}
-		}
-		return ret;
-	}
-
-	private List<ScoreVerify> of(ScoreVerifyQuery req, List<ScoreVerifyVo> vos) {
-		List<ScoreVerify> ret = new ArrayList<>();
-		for (ScoreVerifyVo vo : vos) {
-			ScoreVerify sv = new ScoreVerify();
-			sv.setExamId(req.getExamId());
-			sv.setUserId(req.getUserId());
-			sv.setCreateTime(new Date());
-			sv.setStudentId(vo.getStudentId());
-			ret.add(sv);
-		}
-		return ret;
-	}
-
-	private boolean checkInQuery(List<ScoreVerifyVo> vos, ScoreVerifyQuery req) {
-		ScoreVerifyRule rule = req.getRule();
-		if (rule == null) {
-			return true;
-		}
-		if (rule != null && vos.size() == 1) {
-			return false;
-		}
-		// 两个条件,满足各自条件的list
-		List<ScoreVerifyVo> group1 = new ArrayList<>();
-		List<ScoreVerifyVo> group2 = new ArrayList<>();
-		if (ScoreVerifyRule.RULE1.equals(rule)) {
-			for (ScoreVerifyVo vo : vos) {
-				double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
-				if (totalScore > 0) {
-					group1.add(vo);
-				}
-				if (totalScore == 0) {
-					group2.add(vo);
-				}
-			}
-		} else if (ScoreVerifyRule.RULE2.equals(rule)) {
-			for (ScoreVerifyVo vo : vos) {
-				double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
-				if (totalScore <= req.getFromScore()) {
-					group1.add(vo);
-				}
-				if (ScoreVerifyRuleCompare.EQUALS.equals(req.getRuleCompare())
-						&& totalScore == req.getCompareScore()) {
-					group2.add(vo);
-				} else if (ScoreVerifyRuleCompare.GT.equals(req.getRuleCompare())
-						&& totalScore > req.getCompareScore()) {
-					group2.add(vo);
-				} else if (ScoreVerifyRuleCompare.LT.equals(req.getRuleCompare())
-						&& totalScore < req.getCompareScore()) {
-					group2.add(vo);
-				}
-			}
-		} else if (ScoreVerifyRule.RULE3.equals(rule)) {
-			for (ScoreVerifyVo vo : vos) {
-				double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
-				if (totalScore >= req.getFromScore()) {
-					group1.add(vo);
-				}
-				if (ScoreVerifyRuleCompare.EQUALS.equals(req.getRuleCompare())
-						&& totalScore == req.getCompareScore()) {
-					group2.add(vo);
-				} else if (ScoreVerifyRuleCompare.GT.equals(req.getRuleCompare())
-						&& totalScore > req.getCompareScore()) {
-					group2.add(vo);
-				} else if (ScoreVerifyRuleCompare.LT.equals(req.getRuleCompare())
-						&& totalScore < req.getCompareScore()) {
-					group2.add(vo);
-				}
-			}
-		}
-
-		if (group1.size() > 0 && group2.size() > 0) {
-			if (group1.size() >= 2 || group2.size() >= 2) {
-				// 两个list都有值,且至少有一个数量大于2的一定满足
-				return true;
-			}
-			if (group1.size() == 1 && group2.size() == 1
-					&& !group1.get(0).getStudentId().equals(group2.get(0).getStudentId())) {
-				// 都只有一条的时候,id不同则通过
-				return true;
-			}
-		}
-		return false;
-	}
-
-	@Transactional
-	@Override
-	public void reset(Integer examId, Integer userId) {
-		scoreVerifyDao.deleteByExamIdAndUserId(examId, userId);
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public List<ScoreVerifyVo> findFlagged(Integer examId, Integer userId) {
-		StringBuilder sql = new StringBuilder();
-		sql.append(
-				" select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
-		sql.append(
-				" t.is_upload upload,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
-		sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime ");
-		sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
-		sql.append(" left join b_user u on t.score_verify_user=u.id where  r.exam_id=" + examId+" and r.user_id="+userId
-				+ " and t.score_verify_flagged =1 ");
-		sql.append(" order by t.student_code,t.subject_code ");
-		Query query = entityManager.createNativeQuery(sql.toString());
-		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
-		List<ScoreVerifyVo> ret = query.getResultList();
-		if (ret != null && !ret.isEmpty()) {
-			for (ScoreVerifyVo vo : ret) {
-				buildSheetUrl(vo);
-			}
-		}
-		return ret;
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public List<ScoreVerifyVo> needVerify(Integer examId, Integer userId) {
-		StringBuilder sql = new StringBuilder();
-		sql.append(
-				" select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
-		sql.append(
-				" t.is_upload upload,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
-		sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime ");
-		sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
-		sql.append(" left join b_user u on t.score_verify_user=u.id where  r.exam_id=" + examId+" and r.user_id="+userId
-				+ " and r.viewed =0 ");
-		sql.append(" order by t.student_code,t.subject_code ");
-		Query query = entityManager.createNativeQuery(sql.toString());
-		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
-		List<ScoreVerifyVo> ret = query.getResultList();
-		if (ret != null && !ret.isEmpty()) {
-			for (ScoreVerifyVo vo : ret) {
-				buildSheetUrl(vo);
-			}
-		}
-		return ret;
-	}
-
-	@Transactional
-	@Override
-	public void tag(Integer examId, Integer userId, Integer studentId, boolean isTag) {
-		ScoreVerify sd = scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
-		sd.setFlagged(isTag);
-		sd.setVerifyTime(new Date());
-		scoreVerifyDao.save(sd);
-		examStudentService.scoreVerifyTag(userId, studentId, isTag);
-	}
-	
-	@Transactional
-	@Override
-	public void view(Integer examId, Integer userId, Integer studentId) {
-		ScoreVerify sd = scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
-		sd.setViewed(true);
-		scoreVerifyDao.save(sd);
-		examStudentService.scoreVerifyView(userId, studentId);
-	}
-
-	@Override
-	public ScoreVerify findByExamIdAndUserIdAndStudentId(Integer examId, Integer userId, Integer studentId) {
-		return scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
-	}
+
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Autowired
+    private ExamService examService;
+
+    @Autowired
+    private ScoreVerifyDao scoreVerifyDao;
+
+    @Autowired
+    private ExamStudentService examStudentService;
+
+    @Autowired
+    private FileService fileService;
+
+    private void buildSheetUrl(ScoreVerifyVo student) {
+        student.setSheetUrls(
+                fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<ScoreVerifyVo> findByQuery(ScoreVerifyQuery req) {
+        Exam exam = examService.findById(req.getExamId());
+        int offset = (req.getPageNumber() - 1) * req.getPageSize();
+        StringBuilder sql = new StringBuilder();
+        sql.append(
+                " select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
+        sql.append(
+                " t.is_upload upload,t.is_breach breach,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
+        sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime,sub.total_score subjectScore");
+        sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
+        sql.append(" left join eb_exam_subject sub on t.exam_id=sub.exam_id and t.subject_code=sub.code");
+        sql.append(" left join b_user u on t.score_verify_user=u.id where r.exam_id=" + req.getExamId()
+                + " and r.user_id=" + req.getUserId());
+        sql.append(" order by t.student_code,t.subject_code ");
+        sql.append(" limit " + offset + "," + req.getPageSize());
+        Query query = entityManager.createNativeQuery(sql.toString());
+        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
+        List<ScoreVerifyVo> ret = query.getResultList();
+        if (ret != null && !ret.isEmpty()) {
+            for (ScoreVerifyVo vo : ret) {
+                buildSheetUrl(vo);
+                if (vo.getSubjectiveScoreList() != null) {
+                    vo.setSubjectiveScoreList(vo.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
+                }
+
+                vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
+                double score = 0;
+                if (vo.getObjectiveScore() != null) {
+                    score = BigDecimalUtils.add(score, vo.getObjectiveScore());
+                }
+                if (vo.getSubjectiveScore() != null) {
+                    score = BigDecimalUtils.add(score, vo.getSubjectiveScore());
+                }
+                vo.setTotalScore(score);
+                StringBuilder sb = new StringBuilder();
+                if (vo.getUpload() != null && vo.getUpload()) {
+                    if (!ExamType.MULTI_MEDIA.equals(exam.getType())) {
+                        vo.setShowSheet(true);
+                    }
+                    sb.append("已上传");
+                } else {
+                    sb.append("未上传");
+                }
+                if (vo.getAbsent() != null && vo.getAbsent()) {
+                    sb.append(" 缺考");
+                } else {
+                    sb.append(" 正常");
+                }
+                vo.setStatusText(sb.toString());
+
+                try {
+                    vo.setObjectiveScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getObjectiveScore()));
+                    vo.setSubjectiveScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getSubjectiveScore()));
+                    vo.setSubjectScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getSubjectScore()));
+                    vo.setTotalScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getTotalScore()));
+                } catch (Exception e) {
+                }
+                if ((vo.getAbsent() != null && vo.getAbsent()) || vo.getUpload() == null || !vo.getUpload()) {
+                    vo.setTotalScoreText("-");
+                } else if (vo.getBreach() != null && vo.getBreach()) {
+                    vo.setTotalScoreText("0");
+                }
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public Integer needVerifyCount(Integer examId, Integer userId) {
+        StringBuilder sql = new StringBuilder();
+        sql.append("select count(1) ");
+        sql.append("from eb_score_verify t inner join eb_exam_student s on t.student_id=s.id  where t.exam_id=" + examId
+                + " and t.user_id=" + userId + " and t.viewed =0 ");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        return Integer.valueOf(query.getResultList().get(0).toString());
+    }
+
+    @Override
+    public Integer countByQuery(Integer examId, Integer userId) {
+        StringBuilder sql = new StringBuilder();
+        sql.append("select count(1) ");
+        sql.append("from eb_score_verify t inner join eb_exam_student s on t.student_id=s.id where t.exam_id=" + examId
+                + " and t.user_id=" + userId);
+        Query query = entityManager.createNativeQuery(sql.toString());
+        return Integer.valueOf(query.getResultList().get(0).toString());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public Boolean existByExamIdAndUserId(Integer examId, Integer userId) {
+        StringBuilder sql = new StringBuilder();
+        sql.append(
+                " select r.id from eb_score_verify r inner join eb_exam_student s on r.student_id=s.id where r.exam_id="
+                        + examId + " and r.user_id=" + userId);
+        sql.append(" limit 1");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        List<ScoreVerify> ret = query.getResultList();
+        if (ret != null && ret.size() > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    @Transactional
+    @Override
+    public void createQuery(ScoreVerifyQuery req) {
+        if (StringUtils.isBlank(req.getStudentCode()) && StringUtils.isBlank(req.getStudentName())
+                && req.getRule() == null) {
+            throw new StatusException("请选择至少一个条件");
+        }
+        if (ScoreVerifyRule.RULE2.equals(req.getRule()) || ScoreVerifyRule.RULE3.equals(req.getRule())) {
+            if (req.getRuleCompare() == null) {
+                throw new StatusException("请选择分数匹配条件");
+            }
+            if (req.getCompareScore() == null || req.getFromScore() == null) {
+                throw new StatusException("请填写匹配分值");
+            }
+        }
+        List<ScoreVerifyVo> allStudents = getAllStudent(req);
+        if (allStudents == null || allStudents.size() == 0) {
+            throw new StatusException("没有满足条件的数据");
+        }
+        List<ScoreVerify> details = createByQuery(allStudents, req);
+        if (details == null || details.size() == 0) {
+            throw new StatusException("没有满足条件的数据");
+        }
+        scoreVerifyDao.save(details);
+    }
+
+    @SuppressWarnings("unchecked")
+    private List<ScoreVerifyVo> getAllStudent(ScoreVerifyQuery req) {
+        StringBuilder sql = new StringBuilder();
+        sql.append(
+                "select t.id studentId,t.student_code studentCode,t.subjective_score subjectiveScore,t.objective_score objectiveScore from eb_exam_student t  ");
+        sql.append("where exam_id=" + req.getExamId());
+        if (StringUtils.isNotBlank(req.getStudentCode())) {
+            sql.append(" and t.student_code='" + req.getStudentCode() + "'");
+        }
+        if (StringUtils.isNotBlank(req.getStudentName())) {
+            sql.append(" and t.name='" + req.getStudentName() + "'");
+        }
+        Query query = entityManager.createNativeQuery(sql.toString());
+        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
+        List<ScoreVerifyVo> ret = query.getResultList();
+        return ret;
+    }
+
+    private List<ScoreVerify> createByQuery(List<ScoreVerifyVo> vos, ScoreVerifyQuery req) {
+        List<ScoreVerify> ret = new ArrayList<>();
+        if (vos != null & vos.size() > 0) {
+            Map<String, List<ScoreVerifyVo>> voMap = new HashMap<>();
+            for (ScoreVerifyVo vo : vos) {
+                List<ScoreVerifyVo> tem = voMap.get(vo.getStudentCode());
+                if (tem == null) {
+                    tem = new ArrayList<>();
+                    voMap.put(vo.getStudentCode(), tem);
+                }
+                tem.add(vo);
+            }
+            for (List<ScoreVerifyVo> temVos : voMap.values()) {
+                if (checkInQuery(temVos, req)) {
+                    ret.addAll(of(req, temVos));
+                }
+            }
+        }
+        return ret;
+    }
+
+    private List<ScoreVerify> of(ScoreVerifyQuery req, List<ScoreVerifyVo> vos) {
+        List<ScoreVerify> ret = new ArrayList<>();
+        for (ScoreVerifyVo vo : vos) {
+            ScoreVerify sv = new ScoreVerify();
+            sv.setExamId(req.getExamId());
+            sv.setUserId(req.getUserId());
+            sv.setCreateTime(new Date());
+            sv.setStudentId(vo.getStudentId());
+            ret.add(sv);
+        }
+        return ret;
+    }
+
+    private boolean checkInQuery(List<ScoreVerifyVo> vos, ScoreVerifyQuery req) {
+        ScoreVerifyRule rule = req.getRule();
+        if (rule == null) {
+            return true;
+        }
+        if (rule != null && vos.size() == 1) {
+            return false;
+        }
+        // 两个条件,满足各自条件的list
+        List<ScoreVerifyVo> group1 = new ArrayList<>();
+        List<ScoreVerifyVo> group2 = new ArrayList<>();
+        if (ScoreVerifyRule.RULE1.equals(rule)) {
+            for (ScoreVerifyVo vo : vos) {
+                double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
+                if (totalScore > 0) {
+                    group1.add(vo);
+                }
+                if (totalScore == 0) {
+                    group2.add(vo);
+                }
+            }
+        } else if (ScoreVerifyRule.RULE2.equals(rule)) {
+            for (ScoreVerifyVo vo : vos) {
+                double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
+                if (totalScore <= req.getFromScore()) {
+                    group1.add(vo);
+                }
+                if (ScoreVerifyRuleCompare.EQUALS.equals(req.getRuleCompare()) && totalScore == req.getCompareScore()) {
+                    group2.add(vo);
+                } else if (ScoreVerifyRuleCompare.GT.equals(req.getRuleCompare())
+                        && totalScore > req.getCompareScore()) {
+                    group2.add(vo);
+                } else if (ScoreVerifyRuleCompare.LT.equals(req.getRuleCompare())
+                        && totalScore < req.getCompareScore()) {
+                    group2.add(vo);
+                }
+            }
+        } else if (ScoreVerifyRule.RULE3.equals(rule)) {
+            for (ScoreVerifyVo vo : vos) {
+                double totalScore = Calculator.add(vo.getObjectiveScore(), vo.getSubjectiveScore());
+                if (totalScore >= req.getFromScore()) {
+                    group1.add(vo);
+                }
+                if (ScoreVerifyRuleCompare.EQUALS.equals(req.getRuleCompare()) && totalScore == req.getCompareScore()) {
+                    group2.add(vo);
+                } else if (ScoreVerifyRuleCompare.GT.equals(req.getRuleCompare())
+                        && totalScore > req.getCompareScore()) {
+                    group2.add(vo);
+                } else if (ScoreVerifyRuleCompare.LT.equals(req.getRuleCompare())
+                        && totalScore < req.getCompareScore()) {
+                    group2.add(vo);
+                }
+            }
+        }
+
+        if (group1.size() > 0 && group2.size() > 0) {
+            if (group1.size() >= 2 || group2.size() >= 2) {
+                // 两个list都有值,且至少有一个数量大于2的一定满足
+                return true;
+            }
+            if (group1.size() == 1 && group2.size() == 1
+                    && !group1.get(0).getStudentId().equals(group2.get(0).getStudentId())) {
+                // 都只有一条的时候,id不同则通过
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Transactional
+    @Override
+    public void reset(Integer examId, Integer userId) {
+        scoreVerifyDao.deleteByExamIdAndUserId(examId, userId);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<ScoreVerifyVo> findFlagged(Integer examId, Boolean flagged, Integer userId) {
+        Exam exam = examService.findById(examId);
+        StringBuilder sql = new StringBuilder();
+        sql.append(
+                " select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
+        sql.append(
+                " t.is_upload upload,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
+        sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime ");
+        sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
+        sql.append(" left join b_user u on t.score_verify_user=u.id where  r.exam_id=" + examId + " and r.user_id="
+                + userId);
+        if (flagged != null) {
+            if (flagged) {
+                sql.append(" and t.score_verify_flagged =1 ");
+            } else {
+                sql.append(" and t.score_verify_flagged =0 ");
+            }
+        }
+        sql.append(" order by t.student_code,t.subject_code ");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
+        List<ScoreVerifyVo> ret = query.getResultList();
+        if (ret != null && !ret.isEmpty()) {
+            for (ScoreVerifyVo vo : ret) {
+                buildSheetUrl(vo);
+                if (vo.getSubjectiveScoreList() != null) {
+                    vo.setSubjectiveScoreList(vo.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
+                }
+
+                vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
+                double score = 0;
+                if (vo.getObjectiveScore() != null) {
+                    score = BigDecimalUtils.add(score, vo.getObjectiveScore());
+                }
+                if (vo.getSubjectiveScore() != null) {
+                    score = BigDecimalUtils.add(score, vo.getSubjectiveScore());
+                }
+                vo.setTotalScore(score);
+                StringBuilder sb = new StringBuilder();
+                if (vo.getUpload() != null && vo.getUpload()) {
+                    if (!ExamType.MULTI_MEDIA.equals(exam.getType())) {
+                        vo.setShowSheet(true);
+                    }
+                    sb.append("已上传");
+                } else {
+                    sb.append("未上传");
+                }
+                if (vo.getAbsent() != null && vo.getAbsent()) {
+                    sb.append(" 缺考");
+                } else {
+                    sb.append(" 正常");
+                }
+                vo.setStatusText(sb.toString());
+
+                try {
+                    vo.setObjectiveScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getObjectiveScore()));
+                    vo.setSubjectiveScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getSubjectiveScore()));
+                    vo.setSubjectScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getSubjectScore()));
+                    vo.setTotalScoreText(ScoreItem.NUMBER_FORMAT.format(vo.getTotalScore()));
+                } catch (Exception e) {
+                }
+                if ((vo.getAbsent() != null && vo.getAbsent()) || vo.getUpload() == null || !vo.getUpload()) {
+                    vo.setTotalScoreText("-");
+                } else if (vo.getBreach() != null && vo.getBreach()) {
+                    vo.setTotalScoreText("0");
+                }
+            }
+        }
+        return ret;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public List<ScoreVerifyVo> needVerify(Integer examId, Integer userId) {
+        StringBuilder sql = new StringBuilder();
+        sql.append(
+                " select t.sheet_count sheetCount,t.exam_number examNumber,t.exam_id examId,t.id studentId,t.student_code studentCode,t.name studentName,t.subject_code subjectCode,t.subject_name subjectName, ");
+        sql.append(
+                " t.is_upload upload,t.is_absent absent,t.subjective_score subjectiveScore,t.subjective_score_list subjectiveScoreList,t.objective_score objectiveScore, ");
+        sql.append(" u.name scoreVerifyUserName,t.score_verify_time scoreVerifyTime ");
+        sql.append(" from eb_score_verify r inner join eb_exam_student t on r.student_id=t.id ");
+        sql.append(" left join b_user u on t.score_verify_user=u.id where  r.exam_id=" + examId + " and r.user_id="
+                + userId + " and r.viewed =0 ");
+        sql.append(" order by t.student_code,t.subject_code ");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ScoreVerifyVo.class));
+        List<ScoreVerifyVo> ret = query.getResultList();
+        if (ret != null && !ret.isEmpty()) {
+            for (ScoreVerifyVo vo : ret) {
+                buildSheetUrl(vo);
+            }
+        }
+        return ret;
+    }
+
+    @Transactional
+    @Override
+    public void tag(Integer examId, Integer userId, Integer studentId, boolean isTag) {
+        ScoreVerify sd = scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
+        sd.setFlagged(isTag);
+        sd.setVerifyTime(new Date());
+        scoreVerifyDao.save(sd);
+        examStudentService.scoreVerifyTag(userId, studentId, isTag);
+    }
+
+    @Transactional
+    @Override
+    public void view(Integer examId, Integer userId, Integer studentId) {
+        ScoreVerify sd = scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
+        sd.setViewed(true);
+        scoreVerifyDao.save(sd);
+        examStudentService.scoreVerifyView(userId, studentId);
+    }
+
+    @Override
+    public ScoreVerify findByExamIdAndUserIdAndStudentId(Integer examId, Integer userId, Integer studentId) {
+        return scoreVerifyDao.findByExamIdAndUserIdAndStudentId(examId, userId, studentId);
+    }
 }

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

@@ -187,7 +187,7 @@ public class ScoreVerifyController extends BaseExamController {
             return "redirect:/admin/exam/score/verify/init";
         }
         try {
-            List<ScoreVerifyVo> list = scoreVerifyService.findFlagged(examId, wu.getId());
+            List<ScoreVerifyVo> list = scoreVerifyService.findFlagged(examId, true, wu.getId());
             String fileName = "标记卷数据.xlsx";
             new ExportExcel("标记卷数据", ScoreVerifyVo.class).setDataList(list).write(response, fileName).dispose();
             return null;

+ 136 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/ScoreVerifyController.java

@@ -0,0 +1,136 @@
+package cn.com.qmth.stmms.api.controller.admin;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.qmth.boot.core.collection.PageResult;
+
+import cn.com.qmth.stmms.api.controller.BaseApiController;
+import cn.com.qmth.stmms.biz.exam.bean.ResultMessage;
+import cn.com.qmth.stmms.biz.exam.bean.ScoreVerifyVo;
+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;
+import cn.com.qmth.stmms.biz.utils.PageUtil;
+import cn.com.qmth.stmms.common.domain.ApiUser;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "仲裁管理")
+@Controller("adminScoreVerifyController")
+@RequestMapping("/api/admin/exam/score/verify")
+public class ScoreVerifyController extends BaseApiController {
+
+    protected static Logger log = LoggerFactory.getLogger(ScoreVerifyController.class);
+
+    @Autowired
+    private ScoreVerifyService scoreVerifyService;
+
+    @ApiOperation(value = "重置")
+    @RequestMapping(value = "reset", method = RequestMethod.POST)
+    @ResponseBody
+    public ResultMessage reset() {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        if (!scoreVerifyService.existByExamIdAndUserId(examId, wu.getUser().getId())) {
+            throw new StatusException("没有数据需要重置");
+        } else {
+            scoreVerifyService.reset(examId, wu.getUser().getId());
+            return resultOk();
+        }
+    }
+
+    @ApiOperation(value = "判断是已有数据")
+    @RequestMapping(value = "has-data", method = RequestMethod.POST)
+    @ResponseBody
+    public Boolean hasDate() {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        return scoreVerifyService.existByExamIdAndUserId(examId, wu.getUser().getId());
+    }
+
+    @ApiOperation(value = "查询待处理数量")
+    @RequestMapping(value = "need-verify-count", method = RequestMethod.POST)
+    @ResponseBody
+    public Integer needVerifyCount() {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        return scoreVerifyService.needVerifyCount(examId, wu.getUser().getId());
+    }
+
+    @ApiOperation(value = "分页查询")
+    @RequestMapping(value = "page", method = RequestMethod.POST)
+    @ResponseBody
+    public PageResult<ScoreVerifyVo> page(ScoreVerifyQuery query) {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        if (!scoreVerifyService.existByExamIdAndUserId(examId, wu.getUser().getId())) {
+            scoreVerifyService.createQuery(query);
+        }
+        return query(query);
+
+    }
+
+    private PageResult<ScoreVerifyVo> query(ScoreVerifyQuery query) {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        query.setExamId(examId);
+        query.setUserId(wu.getUser().getId());
+        Integer totalCount = scoreVerifyService.countByQuery(query.getExamId(), query.getUserId());
+        if (totalCount > 0) {
+            List<ScoreVerifyVo> list = scoreVerifyService.findByQuery(query);
+            query.setResult(list);
+            query.setTotalCount(totalCount);
+            return PageUtil.of(list, query);
+        } else {
+            return PageUtil.emptyPage();
+        }
+    }
+
+    @ApiOperation(value = "导出标记卷")
+    @RequestMapping(value = "export-flagged", method = RequestMethod.POST)
+    @ResponseBody
+    public void exportFile(HttpServletResponse response) {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        if (!scoreVerifyService.existByExamIdAndUserId(examId, wu.getUser().getId())) {
+            throw new StatusException("没有数据需要导出");
+        }
+        try {
+            List<ScoreVerifyVo> list = scoreVerifyService.findFlagged(examId, true, wu.getUser().getId());
+            String fileName = "标记卷数据.xlsx";
+            new ExportExcel("标记卷数据", ScoreVerifyVo.class).setDataList(list).write(response, fileName).dispose();
+        } catch (Exception e) {
+            throw new StatusException("导出数据失败", e);
+        }
+    }
+
+    @ApiOperation(value = "导出标全部")
+    @RequestMapping(value = "export-all", method = RequestMethod.POST)
+    @ResponseBody
+    public void exportAllFile(HttpServletResponse response) {
+        Integer examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        if (!scoreVerifyService.existByExamIdAndUserId(examId, wu.getUser().getId())) {
+            throw new StatusException("没有数据需要导出");
+        }
+        try {
+            List<ScoreVerifyVo> list = scoreVerifyService.findFlagged(examId, null, wu.getUser().getId());
+            String fileName = "全部数据.xlsx";
+            new ExportExcel("全部数据", ScoreVerifyVo.class).setDataList(list).write(response, fileName).dispose();
+        } catch (Exception e) {
+            throw new StatusException("导出数据失败", e);
+        }
+    }
+
+}