Browse Source

全卷复核

xiatian 1 năm trước cách đây
mục cha
commit
aaa6de41dc

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

@@ -0,0 +1,33 @@
+package cn.com.qmth.stmms.biz.exam.bean;
+
+import java.math.BigInteger;
+
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+public class InspectWorkVo {
+	@ExcelField(title = "登录名*", align = 2, sort = 1)
+	private String loginName;
+	@ExcelField(title = "姓名*", align = 2, sort = 2)
+	private String name;
+	@ExcelField(title = "复核数量*", align = 2, sort = 3)
+	private BigInteger work;
+	public String getLoginName() {
+		return loginName;
+	}
+	public void setLoginName(String loginName) {
+		this.loginName = loginName;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public BigInteger getWork() {
+		return work;
+	}
+	public void setWork(BigInteger work) {
+		this.work = work;
+	}
+	
+}

+ 0 - 21
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/SubjectInspectCountVo.java

@@ -1,21 +0,0 @@
-package cn.com.qmth.stmms.biz.exam.bean;
-
-import java.math.BigInteger;
-
-public class SubjectInspectCountVo {
-	private String subjectCode;
-	private BigInteger dataCount;
-	public String getSubjectCode() {
-		return subjectCode;
-	}
-	public void setSubjectCode(String subjectCode) {
-		this.subjectCode = subjectCode;
-	}
-	public BigInteger getDataCount() {
-		return dataCount;
-	}
-	public void setDataCount(BigInteger dataCount) {
-		this.dataCount = dataCount;
-	}
-	
-}

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

@@ -114,6 +114,9 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
     private Double questionScore;
     
     private Boolean questionScoreEmpty;
+    
+    //不可重复
+    private Boolean inspectUnrepeated;
 
     public ExamStudentSearchQuery() {
         super();
@@ -536,4 +539,12 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 		this.questionScoreEmpty = questionScoreEmpty;
 	}
 
+	public Boolean getInspectUnrepeated() {
+		return inspectUnrepeated;
+	}
+
+	public void setInspectUnrepeated(Boolean inspectUnrepeated) {
+		this.inspectUnrepeated = inspectUnrepeated;
+	}
+
 }

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

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.biz.exam.service;
 
 import java.util.List;
 
+import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
 
 public interface InspectHistoryService {
@@ -20,4 +21,8 @@ public interface InspectHistoryService {
 
 	void deleteByStudentIdAndInspectRound(Integer studentId, Integer inspectRound);
 
+	List<InspectWorkVo> findInspectWork(Integer examId);
+
+	Boolean existByStudentIdAndUserId(Integer studentId, Integer userId);
+
 }

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

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.dao.InspectHistoryDao;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
 import cn.com.qmth.stmms.biz.exam.service.InspectHistoryService;
@@ -82,4 +83,30 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
 		inspectHistoryDao.deleteByStudentIdAndInspectRound(studentId,  inspectRound);
 	}
 
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<InspectWorkVo> findInspectWork(Integer examId) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(
+				" select u.login_name loginName,u.name,count(*) work"
+		+" from eb_inspect_history t  left join b_user u on t.inspector_id=u.id ");
+		sql.append(" where t.exam_id="+examId+" group by u.id order by u.login_name ");
+		Query query = entityManager.createNativeQuery(sql.toString());
+		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(InspectWorkVo.class));
+		return  query.getResultList();
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Boolean existByStudentIdAndUserId(Integer studentId, Integer userId) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(" select r.id from eb_inspect_history r where r.student_id=" + studentId+" and r.inspector_id="+userId);
+		sql.append(" limit 1");
+		Query query = entityManager.createNativeQuery(sql.toString());
+		List<InspectHistory> ret = query.getResultList();
+		if(ret!=null&&ret.size()>0) {
+			return true;
+		}
+		return false;
+	}
 }

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

@@ -96,6 +96,9 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
             whereSql.append(" and exists (select 1 from eb_inspect_history ei left join b_user bu on ei.inspector_id=bu.id "
             		+" where ei.student_id = s.id and bu.login_name like '"+query.getInspectorName()+"%')");
         }
+        if (query.getInspectUnrepeated()!=null&&query.getInspectUnrepeated()) {
+            whereSql.append(" and not exists (select 1 from eb_inspect_history ei where ei.student_id = s.id and ei.inspector_id="+query.getInspectorId()+")");
+        }
         if (StringUtils.isNotBlank(query.getSubjectCodeIn())) {
             String[] subjectCodeIn = query.getSubjectCodeIn().split(",");
             List<String> in = new ArrayList<String>();

+ 58 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -8,6 +8,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -25,6 +26,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import cn.com.qmth.stmms.admin.dto.RejectResult;
 import cn.com.qmth.stmms.admin.vo.InspectedSubjectVO;
+import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
@@ -33,6 +35,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.InspectHistoryService;
 import cn.com.qmth.stmms.biz.exam.service.InspectedService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.file.service.FileService;
@@ -49,6 +52,7 @@ import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.SelectiveStatus;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import net.sf.json.JSONObject;
 
@@ -63,6 +67,9 @@ public class InspectedController extends BaseExamController {
 
     @Autowired
     private InspectedService inspectedService;
+    
+    @Autowired
+    private InspectHistoryService inspectHistoryService;
 
     @Autowired
     private ExamQuestionService questionService;
@@ -157,17 +164,21 @@ public class InspectedController extends BaseExamController {
     @Logging(menu = "开始考生复核", type = LogType.QUERY)
     @RequestMapping(value = "/getTask", method = RequestMethod.POST)
     @ResponseBody
-    public Task getTask(HttpServletRequest request, RedirectAttributes redirectAttributes, ExamStudentSearchQuery query,
+    public Task getTask(HttpServletRequest request, RedirectAttributes ra, ExamStudentSearchQuery query,
             @RequestParam(required = false, defaultValue = "false") SelectiveStatus selectiveStatus,
             @RequestParam(required = false) Integer mainNumber, @RequestParam(required = false) Double mainStartScore,
             @RequestParam(required = false) Double mainEndScore, @RequestParam(required = false) Double questionScore,
             @RequestParam(required = false) Integer studentId) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
+        Exam exam = examService.findById(examId);
         Task task = null;
         if (studentId != null) {
+        	ExamStudent student = studentService.findById(studentId);
+        	if(exam.getInspectUnrepeated()&&inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
+        		throw new RuntimeException("考试已设置为全卷多次复核时不能为同一账号");
+        	}
             releaseStudent(studentId);
-            ExamStudent student = studentService.findById(studentId);
             if (inspectedService.applyStudent(student, wu.getId())) {
                 task = taskService.build(student);
             }
@@ -177,6 +188,9 @@ public class InspectedController extends BaseExamController {
             if (student == null) {
                 return null;
             }
+            if(exam.getInspectUnrepeated()&&inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
+            	throw new RuntimeException("考试已设置为全卷多次复核时不能为同一账号");
+            }
             releaseStudent(student.getId());
             if (inspectedService.applyStudent(student, wu.getId())) {
                 task = taskService.build(student);
@@ -194,6 +208,8 @@ public class InspectedController extends BaseExamController {
                 query.setSubjectCode(subjectList.get(0).getCode());
             }
             query.setInspected(false);
+            query.setInspectUnrepeated(exam.getInspectUnrepeated());
+            query.setInspectorId(wu.getId());
             list = inspectedService
                     .findByQuery(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore, mainEndScore,selectiveStatus);
             if (list.isEmpty()) {
@@ -542,4 +558,44 @@ public class InspectedController extends BaseExamController {
         model.addAttribute("subjectList", getExamSubject(examId, wu));
         return "modules/exam/inspectedInfo";
     }
+    
+    @RequestMapping(value = "list/export", method = RequestMethod.POST)
+    public String exportListFile(HttpServletRequest request, HttpServletResponse response,
+            RedirectAttributes redirectAttributes) {
+//    	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);
+//        try {
+//        	List<ScoreVerifyVo> list = scoreVerifyService.findFlagged(examId,wu.getId());
+//            String fileName = "标记卷数据.xlsx";
+//            new ExportExcel("标记卷数据", ScoreVerifyVo.class).setDataList(list).write(response, fileName)
+//                    .dispose();
+//            return null;
+//        } catch (Exception e) {
+//            addMessage(redirectAttributes, "导出数据失败" + e.getMessage());
+//        }
+        return "redirect:/admin/exam/inspected/list";
+    }
+    @RequestMapping(value = "work/export", method = RequestMethod.POST)
+    public String exportWorkFile(HttpServletRequest request, HttpServletResponse response,
+            RedirectAttributes redirectAttributes) {
+    	Integer examId = getSessionExamId(request);
+		Exam exam = examService.findById(examId);
+		if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+			return "modules/exam/permission";
+		}
+        try {
+        	List<InspectWorkVo> list = inspectHistoryService.findInspectWork(examId);
+            String fileName = "复核工作量.xlsx";
+            new ExportExcel("复核工作量", InspectWorkVo.class).setDataList(list).write(response, fileName)
+                    .dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出数据失败" + e.getMessage());
+        }
+        return "redirect:/admin/exam/inspected/list";
+    }
 }

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

@@ -99,6 +99,15 @@
         <c:if test="${exam.status=='FINISH' && web_user.schoolAdmin==true}">
        	<input id="btnImport" class="btn" type="button" value="导入"/>
        	</c:if>
+       	<div class="btn-group">
+                <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
+                    导出<span class="caret"></span>
+                </a>
+                <ul class="dropdown-menu">
+                    <li><a href="##" id="listBtnExport">复核列表</a></li>
+                    <li><a href="##" id="workBtnExport">工作量</a></li>
+                </ul>
+                </div>
     </div>
 </form>
 <tags:message content="${message}"/>
@@ -373,7 +382,14 @@
         $("#cancelForm").submit();
         return false;
     }
-    
+    $("#listBtnExport").click(function () {
+    	$("#searchForm").attr("action", "${ctx}/admin/exam/inspected/list/export");
+        $("#searchForm").submit();
+    });
+    $("#workBtnExport").click(function () {
+    	$("#searchForm").attr("action", "${ctx}/admin/exam/inspected/work/export");
+        $("#searchForm").submit();
+    });
 </script>
 </body>
 </html>