Преглед изворни кода

批量绑定评卷员分组

lbxx0 пре 8 месеци
родитељ
комит
dff5da7f9a

+ 81 - 29
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -147,11 +147,12 @@ public class MarkGroupController extends BaseExamController {
             List<ExamQuestion> qList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                     subject.getCode(), false, group.getNumber());
             group.setQuestionList(qList);
-            group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subject.getCode(),
-                    group.getNumber()));
+            group.setMarkerCount(
+                    markerService.countByExamAndSubjectAndGroup(examId, subject.getCode(), group.getNumber()));
             group.setCurrentCount(markService.applyCount(group));
-            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
-                    .getLibraryCount()) : 0;
+            int percent = group.getLibraryCount() > 0
+                    ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
+                    : 0;
             if (group.getMarkedCount() > 0 && percent == 0) {
                 percent = 1;
             } else if (group.getLeftCount() > 0 && percent == 100) {
@@ -161,8 +162,8 @@ public class MarkGroupController extends BaseExamController {
             group.setDeleting(lockService.isLocked(LockType.GROUP_DELETE, group.getExamId(), group.getSubjectCode(),
                     group.getNumber()));
             if (!qList.isEmpty() && group.isSelective()) {
-                SelectiveGroup selectiveGroup = selectiveGroupService.findOne(examId, group.getSubjectCode(), qList
-                        .get(0).getMainNumber());
+                SelectiveGroup selectiveGroup = selectiveGroupService.findOne(examId, group.getSubjectCode(),
+                        qList.get(0).getMainNumber());
                 if (selectiveGroup != null) {
                     group.setSelectiveIndex(selectiveGroup.getSelectiveIndex());
                 }
@@ -176,16 +177,68 @@ public class MarkGroupController extends BaseExamController {
         return "modules/exam/groupList";
     }
 
+    @Logging(menu = "大题管理查询(评卷员绑定)", type = LogType.QUERY)
+    @RequestMapping("/markerGroup")
+    public String listForMarker(HttpServletRequest request, Model model,
+            @RequestParam(required = false) String subjectCode, @RequestParam(required = false) String userIds) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        int examId = getSessionExamId(request);
+        List<ExamSubject> subjectList = getExamSubject(examId, wu);
+        ExamSubject subject = null;
+        if (StringUtils.isNotBlank(subjectCode)) {
+            subject = subjectService.find(examId, subjectCode);
+        } else if (!subjectList.isEmpty()) {
+            subject = subjectList.get(0);
+        }
+        if (subject == null) {
+            return "modules/exam/markerGroup";
+        }
+        List<MarkGroup> list = groupService.findByExamAndSubject(examId, subject.getCode());
+        for (MarkGroup group : list) {
+            List<ExamQuestion> qList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+                    subject.getCode(), false, group.getNumber());
+            group.setQuestionList(qList);
+            group.setMarkerCount(
+                    markerService.countByExamAndSubjectAndGroup(examId, subject.getCode(), group.getNumber()));
+            group.setCurrentCount(markService.applyCount(group));
+            int percent = group.getLibraryCount() > 0
+                    ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
+                    : 0;
+            if (group.getMarkedCount() > 0 && percent == 0) {
+                percent = 1;
+            } else if (group.getLeftCount() > 0 && percent == 100) {
+                percent = 99;
+            }
+            group.setPercent(percent);
+            group.setDeleting(lockService.isLocked(LockType.GROUP_DELETE, group.getExamId(), group.getSubjectCode(),
+                    group.getNumber()));
+            if (!qList.isEmpty() && group.isSelective()) {
+                SelectiveGroup selectiveGroup = selectiveGroupService.findOne(examId, group.getSubjectCode(),
+                        qList.get(0).getMainNumber());
+                if (selectiveGroup != null) {
+                    group.setSelectiveIndex(selectiveGroup.getSelectiveIndex());
+                }
+            }
+        }
+        model.addAttribute("resultList", list);
+        model.addAttribute("subject", subject);
+        model.addAttribute("userIds", userIds);
+        model.addAttribute("subjectList", subjectList);
+        Exam exam = examService.findById(examId);
+        model.addAttribute("examType", exam.getType());
+        return "modules/exam/markerGroup";
+    }
+
     @RequestMapping("/query")
     @ResponseBody
     public JSONArray query(HttpServletRequest request, @RequestParam String subjectCode,
             @RequestParam(required = false) Boolean withDouble, @RequestParam(required = false) MarkStatus status) {
         int examId = getSessionExamId(request);
         JSONArray array = new JSONArray();
-        List<MarkGroup> list = withDouble != null && withDouble ? groupService.findByExamAndSubjectWithDouble(examId,
-                subjectCode) : (status != null ? groupService
-                .findByExamAndSubjectAndStatus(examId, subjectCode, status) : groupService.findByExamAndSubject(examId,
-                subjectCode));
+        List<MarkGroup> list = withDouble != null && withDouble
+                ? groupService.findByExamAndSubjectWithDouble(examId, subjectCode)
+                : (status != null ? groupService.findByExamAndSubjectAndStatus(examId, subjectCode, status)
+                        : groupService.findByExamAndSubject(examId, subjectCode));
         for (MarkGroup group : list) {
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
                     false, group.getNumber()));
@@ -301,8 +354,7 @@ public class MarkGroupController extends BaseExamController {
         try {
             lockService.waitlock(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
             if (groupService.updateStatus(group.getExamId(), group.getSubjectCode(), group.getNumber(), status,
-                    group.getStatus())
-                    && status == MarkStatus.FORMAL) {
+                    group.getStatus()) && status == MarkStatus.FORMAL) {
                 // 切换到正评成功后刷新任务数量
                 group.setStatus(status);
                 markService.updateLibraryCount(group);
@@ -363,10 +415,8 @@ public class MarkGroupController extends BaseExamController {
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
                     false, group.getNumber()));
             model.addAttribute("group", group);
-            model.addAttribute(
-                    "questions",
-                    questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
-                            group.getSubjectCode(), false, group.getNumber()));
+            model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
+                    group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
             model.addAttribute("pictureConfig", pictureConfig);
             model.addAttribute("markModeList", MarkMode.values());
             model.addAttribute("scorePolicyList", ScorePolicy.values());
@@ -400,8 +450,9 @@ public class MarkGroupController extends BaseExamController {
                     examQuestion.setSelectivePart(map.get(examQuestion.getMainNumber()).getSelectivePart());
                 }
             }
-            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
-                    .getLibraryCount()) : 0;
+            int percent = group.getLibraryCount() > 0
+                    ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
+                    : 0;
             if (group.getMarkedCount() > 0 && percent == 0) {
                 percent = 1;
             } else if (group.getLeftCount() > 0 && percent == 100) {
@@ -488,7 +539,8 @@ public class MarkGroupController extends BaseExamController {
             @RequestParam(required = false, defaultValue = "false") Boolean sheetView,
             @RequestParam(required = false, defaultValue = "false") Boolean enableAllZero,
             @RequestParam(required = false) Integer[] questionIds,
-            @RequestParam(required = false) String intervalScoreList, @RequestParam(required = false) String deleteCode) {
+            @RequestParam(required = false) String intervalScoreList,
+            @RequestParam(required = false) String deleteCode) {
         int examId = getSessionExamId(request);
         Exam exam = examService.findById(examId);
         MarkGroup group = groupService.findOne(examId, subjectCode, number);
@@ -516,8 +568,8 @@ public class MarkGroupController extends BaseExamController {
                     for (Integer questionId : questionIds) {
                         ExamQuestion question = questionService.findById(questionId);
                         questionList.add(question);
-                        if (selective == false
-                                && selectiveGroupService.findOne(examId, subjectCode, question.getMainNumber()) != null) {
+                        if (selective == false && selectiveGroupService.findOne(examId, subjectCode,
+                                question.getMainNumber()) != null) {
                             selective = true;
                         }
                     }
@@ -540,8 +592,8 @@ public class MarkGroupController extends BaseExamController {
                 } else {
                     // simple update
                     List<Double> intervalScores = buildDoubleList(intervalScoreList);
-                    List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
-                            examId, subjectCode, false, number);
+                    List<ExamQuestion> questionList = questionService
+                            .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
                     if (intervalScores.size() == questionList.size()) {
                         for (int i = 0; i < questionList.size(); i++) {
                             ExamQuestion q = questionList.get(i);
@@ -670,8 +722,8 @@ public class MarkGroupController extends BaseExamController {
                         question.setGroupNumber(number);
                         list.add(question);
                         totalScore = totalScore.add(BigDecimal.valueOf(question.getTotalScore()));
-                        if (selective == false
-                                && selectiveGroupService.findOne(examId, subjectCode, question.getMainNumber()) != null) {
+                        if (selective == false && selectiveGroupService.findOne(examId, subjectCode,
+                                question.getMainNumber()) != null) {
                             selective = true;
                         }
                     }
@@ -683,14 +735,14 @@ public class MarkGroupController extends BaseExamController {
                         trialCount = subject.getTrialCount();
                     }
                     group = new MarkGroup(examId, subjectCode, number, picConfigList, totalScore.doubleValue(),
-                            doubleRate, arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView,
-                            enableAllZero, thirdPolicy, selective);
+                            doubleRate, arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, enableAllZero,
+                            thirdPolicy, selective);
                     // clear and replace exam_question
                     questionService.save(list);
                     groupService.save(group);
 
-                    studentService
-                            .updateSubjectiveStatusAndScore(examId, subjectCode, SubjectiveStatus.UNMARK, 0, null);
+                    studentService.updateSubjectiveStatusAndScore(examId, subjectCode, SubjectiveStatus.UNMARK, 0,
+                            null);
                     inspectHistoryService.deleteByExamIdAndSubjectCode(examId, subjectCode);
                     redirectAttributes.addAttribute("subjectCode", subjectCode);
                     return "redirect:/admin/exam/group";

+ 20 - 17
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -101,9 +101,6 @@ public class MarkerController extends BaseExamController {
     @Autowired
     private MarkerClassService classService;
 
-    @Autowired
-    private ExamStudentService studentService;
-
     @Autowired
     private ExamQuestionService questionService;
 
@@ -143,8 +140,9 @@ public class MarkerController extends BaseExamController {
         for (Marker marker : query.getResult()) {
             marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
-            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
-                    .getLibraryCount()) : 0;
+            int percent = group.getLibraryCount() > 0
+                    ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
+                    : 0;
             if (group.getMarkedCount() > 0 && percent == 0) {
                 percent = 1;
             } else if (group.getLeftCount() > 0 && percent == 100) {
@@ -269,7 +267,8 @@ public class MarkerController extends BaseExamController {
             School school = schoolService.findById(exam.getSchoolId());
             boolean warn = systemCache.isGroupDeleteWarn() ? true : school.isGroupDeleteCheck();
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
-            if (warn && group.getLibraryCount() != 0 && group.getLeftCount() == 0 && !markDeleteCode.equals(deleteCode)) {
+            if (warn && group.getLibraryCount() != 0 && group.getLeftCount() == 0
+                    && !markDeleteCode.equals(deleteCode)) {
                 obj.accumulate("success", false);
                 obj.accumulate("message", "授权码不正确");
                 return obj;
@@ -550,8 +549,8 @@ public class MarkerController extends BaseExamController {
     }
 
     @RequestMapping("/save")
-    public String add(Model model, HttpServletRequest request, UserSearchQuery query, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+    public String add(Model model, HttpServletRequest request, UserSearchQuery query,
+            @RequestParam String subjectCode) {
         int examId = getSessionExamId(request);
         Exam exam = examService.findById(examId);
         query.setSchoolId(exam.getSchoolId());
@@ -559,23 +558,27 @@ public class MarkerController extends BaseExamController {
         query = userService.findByQuery(query);
         model.addAttribute("query", query);
         model.addAttribute("subject", subjectService.find(examId, subjectCode));
-        model.addAttribute("group", groupService.findOne(examId, subjectCode, groupNumber));
+        // model.addAttribute("group", groupService.findOne(examId, subjectCode,
+        // groupNumber));
         return "modules/exam/markerSubject";
     }
 
     @Logging(menu = "评卷员绑定", type = LogType.ADD)
     @RequestMapping(value = "/add", method = RequestMethod.POST)
-    public String save(@RequestParam String subjectCode, @RequestParam Integer groupNumber,
+    public String save(@RequestParam String subjectCode, @RequestParam Integer[] groupNumbers,
             @RequestParam Integer[] userIds, HttpServletRequest request, RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
-        if (group != null) {
-            markerService.save(group, userIds);
-            addMessage(redirectAttributes, "设置成功");
-            return "redirect:/admin/exam/marker?subjectCode=" + subjectCode + "&groupNumber=" + groupNumber;
+        for (Integer groupNumber : groupNumbers) {
+            MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
+            if (group != null) {
+                markerService.save(group, userIds);
+            } else {
+                addMessage(redirectAttributes, "科目分组不存在");
+                return "redirect:/admin/exam/marker?subjectCode=" + subjectCode;
+            }
         }
-        addMessage(redirectAttributes, "科目分组不存在");
-        return "redirect:/admin/exam/marker";
+        addMessage(redirectAttributes, "设置成功");
+        return "redirect:/admin/exam/marker?subjectCode=" + subjectCode;
     }
 
     @RequestMapping("/delete")

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

@@ -0,0 +1,85 @@
+<%@ 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/marker?subjectCode=${subject.code}">评卷员管理</a></li>
+		<li  class="active"><a href="#">科目:${subject.code }-${subject.name } 设置</a></li>
+	</ul>
+	<form id="searchForm"  action="${ctx}/admin/exam/marker/save" method="post" class="breadcrumb form-search">
+		<input type="hidden" name="subjectCode" value="${subject.code}"/>
+		<div>
+			<input id="addSubmit" class="btn btn-primary" type="button" value="绑定" onclick="goAdd()"/>
+		</div>
+	</form>
+	<tags:message content="${message}"/>
+	<form id="addForm"  action="${ctx}/admin/exam/marker/add" method="post" class="breadcrumb form-search">
+	<input type="hidden" id="subjectCode" name="subjectCode" value="${subject.code}"/>
+	<input type="hidden" name="userIds" value="${userIds}"/>
+	<table id="contentTable" class="table table-striped table-bordered table-condensed">
+    <thead>
+    <tr>
+        <th><input type="checkbox" id="groupNumbers">分组序号</th>
+        <th>大题号</th>
+        <th>大题名称</th>
+        <th>步骤分</th>
+        <th>选做题组</th>
+        <th>评卷员人数</th>
+        <th>任务总数</th>
+        <th>完成总数</th>
+        <th>剩余总数</th>
+        <th>正在评卷</th>
+        <th>进度</th>
+        <th>评卷区设置</th>
+        <th>状态</th>
+    </tr>
+    </thead>
+    <tbody>
+    <c:forEach items="${resultList}" var="result">
+        <tr>
+            <td><input type="checkbox" class="groupNumbers" name="groupNumbers" value="${result.number}">${result.number}</td>
+            <td>${result.mainNumber}</td>
+            <td>${result.title}</td>
+            <td>${result.scoreList}</td>
+            <td>${result.selectiveIndex}</td>
+            <td>
+            ${result.markerCount}
+            </td>
+            <td>${result.libraryCount}</td>
+            <td>${result.markedCount}</td>
+            <td>${result.leftCount}</td>
+            <td>${result.currentCount}</td>
+            <td>${result.percent}%</td>
+            <td>
+            	<c:if test="${result.picList!=null && result.picList!=''}">是</c:if>
+            	<c:if test="${result.picList==null || result.picList==''}">否</c:if>
+            </td>
+            <td>${result.status.name}</td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+	</form>
+	<div class="pagination">${query}</div>
+<script type="text/javascript">
+function goAdd(){
+	var check_list = []
+	$("input[name='groupNumbers']:checked").each(function(){
+		check_list.push($(this).val())
+	})
+    if(check_list.length==0) {
+        alert('请选择分组');
+        return false;
+    }
+	$("#addForm").submit();
+	return false;
+}
+</script>	
+</body>
+</html>

+ 12 - 7
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markerList.jsp

@@ -408,6 +408,12 @@
     var check_list;
     $(document).ready(function () {
         $('#cover').hide();
+        var subjectCode = $('#subject-select').val();
+	   	 if(subjectCode==''){
+	   		 $('#save-button').attr("disabled",true);
+	   	 }else{
+	   		 $('#save-button').attr("disabled",false);
+	   	 }
     });
     $("#btnImport").click(function () {
         $.jBox($("#importBox").html(), {
@@ -673,17 +679,16 @@
     });
     $('#save-button').click(function () {
         var subjectCode = $('#subject-select').val();
-        var groupNumber = $('#group-select').val();
-        if (groupNumber == '' || subjectCode == "") {
-            alert('请选择科目分组');
+        if (subjectCode == "") {
+            alert('请选择科目');
             return false;
         }
-        window.location.href ='${ctx}/admin/exam/marker/save?subjectCode=' + subjectCode + '&groupNumber=' + groupNumber;
+        window.location.href ='${ctx}/admin/exam/marker/save?subjectCode=' + subjectCode;
         return true;
     });
-    $('#group-select').change(function () {
-    	 var groupNumber = $('#group-select').val();
-    	 if(groupNumber==''){
+    $('#subject-select').change(function () {
+    	 var subjectCode = $('#subject-select').val();
+    	 if(subjectCode==''){
     		 $('#save-button').attr("disabled",true);
     	 }else{
     		 $('#save-button').attr("disabled",false);

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

@@ -9,26 +9,24 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/admin/exam/marker?subjectCode=${group.subjectCode}&groupNumber=${group.number}">评卷员管理</a></li>
-		<li  class="active"><a href="#">科目:${subject.code }-${subject.name } 分组号:${group.number} 设置</a></li>
+		<li><a href="${ctx}/admin/exam/marker?subjectCode=${subject.code}">评卷员管理</a></li>
+		<li  class="active"><a href="#">科目:${subject.code }-${subject.name }设置</a></li>
 	</ul>
 	<form id="searchForm"  action="${ctx}/admin/exam/marker/save" 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}"/>
-		<input type="hidden" name="subjectCode" value="${group.subjectCode}"/>
-		<input type="hidden" name="groupNumber" value="${group.number}"/>
+		<input type="hidden" name="subjectCode" value="${subject.code }"/>
 		<div>
 			<label>登录名</label>
 			<input type="text" name="loginName" value="${query.loginName }"  maxlength="20" class="input-small"/> 
 			&nbsp;
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
-			<input id="addSubmit" class="btn btn-primary" type="button" value="绑定" onclick="goAdd()"/>
+			<input id="addSubmit" class="btn btn-primary" type="button" value="下一步" onclick="goAdd()"/>
 		</div>
 	</form>
 	<tags:message content="${message}"/>
-	<form id="addForm"  action="${ctx}/admin/exam/marker/add" method="post" class="breadcrumb form-search">
-	<input type="hidden" id="subjectCode" name="subjectCode" value="${group.subjectCode}"/>
-	<input type="hidden" name="groupNumber" value="${group.number}"/>
+	<form id="addForm"  action="${ctx}/admin/exam/group/markerGroup" method="post" class="breadcrumb form-search">
+	<input type="hidden" id="subjectCode" name="subjectCode" value="${subject.code}"/>
 	<table id="contentTable" class="table table-striped table-bordered table-condensed">
 		<thead>
 			<tr>