소스 검색

评卷员按班级分配任务

ting.yin 6 년 전
부모
커밋
356ae00d47

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -139,4 +139,7 @@ public interface ExamStudentDao
 
     public long countByIdAndUploadAndAbsentAndBreach(Integer id, boolean upload, boolean absent, boolean breach);
 
+    @Query("select s.className from ExamStudent s where s.examId=?1 and s.subjectCode=?2 group by s.className")
+    public List<String> findDistinctClassName(Integer examId, String subjectCode);
+
 }

+ 24 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerClassDao.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.MarkerClass;
+
+public interface MarkerClassDao extends PagingAndSortingRepository<MarkerClass, Integer>,
+        JpaSpecificationExecutor<MarkerClass> {
+
+    List<MarkerClass> findByMarkerId(int markerId);
+
+    @Query("select count(s) from MarkerClass s where s.markerId=?1")
+    public long countByMarkerId(int markerId);
+
+    @Modifying
+    @Query("delete MarkerClass c where c.markerId=?1 ")
+    void deleteByMarkerId(int markerId);
+
+}

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -81,6 +81,12 @@ public class Marker implements Serializable {
     @Column(name = "stdev_score")
     private Double stdevScore;
 
+    /**
+     * 班级数量
+     */
+    @Column(name = "class_count",nullable = false)
+    private Integer classCount;
+
     @Transient
     @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
     private String subjectName;
@@ -323,4 +329,12 @@ public class Marker implements Serializable {
         this.stdevScore = stdevScore;
     }
 
+    public Integer getClassCount() {
+        return classCount;
+    }
+
+    public void setClassCount(Integer classCount) {
+        this.classCount = classCount;
+    }
+
 }

+ 51 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkerClass.java

@@ -0,0 +1,51 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "eb_marker_class")
+public class MarkerClass implements Serializable {
+
+    private static final long serialVersionUID = 5443691680600923462L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "marker_id")
+    private Integer markerId;
+
+    @Column(name = "class_name")
+    private String className;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+}

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -122,4 +122,6 @@ public interface ExamStudentService {
 
     boolean validateStatus(Integer id);
 
+    public List<String> findDistinctClassName(Integer examId, String subjectCode);
+
 }

+ 22 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerClassService.java

@@ -0,0 +1,22 @@
+package cn.com.qmth.stmms.biz.exam.service;
+
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.model.MarkerClass;
+
+public interface MarkerClassService {
+
+    MarkerClass save(MarkerClass m);
+
+    List<MarkerClass> findByMarkerId(int markerId);
+
+    long countByMarkerId(int markerId);
+    
+    void deleteByMarkerId(int markerId);
+
+    void save(Marker marker, String[] classesModel);
+    
+    List<String> findClassNameByMarkerId(int markerId);
+
+}

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

@@ -926,4 +926,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public boolean validateStatus(Integer id) {
         return studentDao.countByIdAndUploadAndAbsentAndBreach(id, true, false, false) > 0;
     }
+
+    @Override
+    public List<String> findDistinctClassName(Integer examId, String subjectCode) {
+        return studentDao.findDistinctClassName(examId,subjectCode);
+    }
 }

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

@@ -0,0 +1,70 @@
+package cn.com.qmth.stmms.biz.exam.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+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.dao.MarkerClassDao;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.model.MarkerClass;
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
+
+@Service("markerClassService")
+public class MarkerClassServiceImpl extends BaseQueryService<MarkerClass> implements MarkerClassService {
+
+    @Autowired
+    private MarkerClassDao markerClassDao;
+
+    @Autowired
+    private MarkerService markerService;
+
+    @Override
+    public MarkerClass save(MarkerClass m) {
+        return markerClassDao.save(m);
+    }
+
+    @Override
+    public List<MarkerClass> findByMarkerId(int markerId) {
+        return markerClassDao.findByMarkerId(markerId);
+    }
+
+    @Override
+    public long countByMarkerId(int markerId) {
+        return markerClassDao.countByMarkerId(markerId);
+    }
+
+    @Transactional
+    @Override
+    public void save(Marker marker, String[] classes) {
+        this.deleteByMarkerId(marker.getId());
+        for (String className : classes) {
+            MarkerClass m = new MarkerClass();
+            m.setClassName(className);
+            m.setMarkerId(marker.getId());
+            markerClassDao.save(m);
+        }
+        marker.setClassCount((int)countByMarkerId(marker.getId()));
+        markerService.save(marker);
+    }
+
+    @Override
+    public void deleteByMarkerId(int markerId) {
+        markerClassDao.deleteByMarkerId(markerId);
+    }
+
+    @Override
+    public List<String> findClassNameByMarkerId(int markerId) {
+        List<String> list = new ArrayList<String>();
+        List<MarkerClass> classes =this.findByMarkerId(markerId);
+        for (MarkerClass markerClass : classes) {
+            list.add(markerClass.getClassName());
+        }
+        return list;
+    }
+
+}

+ 44 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -10,6 +10,9 @@ import java.util.Random;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -25,15 +29,15 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import com.google.common.collect.Lists;
-
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.model.MarkerDTO;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
+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.MarkGroupService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
@@ -45,8 +49,8 @@ import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.ImportExcel;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
+
+import com.google.common.collect.Lists;
 
 @Controller("examMarkerController")
 @RequestMapping("/admin/exam/marker")
@@ -70,6 +74,12 @@ public class MarkerController extends BaseExamController {
 
     @Autowired
     private LockService lockService;
+    
+    @Autowired
+    private MarkerClassService classService;
+    
+    @Autowired
+    private ExamStudentService studentService;
 
     @Value("${marker.showBtnImportAndBtnUpdateImport}")
     private String showBtnImport;
@@ -509,4 +519,34 @@ public class MarkerController extends BaseExamController {
             return MarkerExcelError.MARKERNOTINFO;
         }
     }
+    
+    @RequestMapping(value = "/class/{markerId}", method = RequestMethod.GET)
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String classAdd(@PathVariable Integer markerId, Model model,RedirectAttributes redirectAttributes) {
+        Marker marker = markerService.findById(markerId);
+        if (marker != null) {
+            model.addAttribute("marker", marker);
+            List<String> classList = studentService.findDistinctClassName(marker.getExamId(),marker.getSubjectCode());
+            List<String> classes  = classService.findClassNameByMarkerId(markerId);
+            classList.removeAll(classes);
+            model.addAttribute("classList", classList);
+            model.addAttribute("classes", classes);
+            return "modules/exam/markerClass";
+        } 
+        addMessage(redirectAttributes, "评卷员不存在");
+        return "redirect:/admin/exam/marker";
+    }
+
+    @RequestMapping(value = "/class/{markerId}", method = RequestMethod.POST)
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String classSave(@PathVariable Integer markerId,@RequestParam String[] classes,Model model,RedirectAttributes redirectAttributes) {
+        Marker marker = markerService.findById(markerId);
+        if (marker != null) {
+            classService.save(marker,classes);
+            addMessage(redirectAttributes, "保存'" + marker.getLoginName() + "'成功");
+            return "redirect:/admin/exam/marker";
+        } 
+        addMessage(redirectAttributes, "评卷员不存在");
+        return "redirect:/admin/exam/marker";
+    }
 }

+ 28 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -6,6 +6,9 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,13 +23,16 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 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;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.model.Tag;
 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.MarkGroupService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.TagService;
 import cn.com.qmth.stmms.biz.lock.LockService;
@@ -46,8 +52,6 @@ import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.MarkMode;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
 
 @Controller
 @RequestMapping("/mark")
@@ -84,6 +88,12 @@ public class MarkController extends BaseController {
 
     @Autowired
     private LockService lockService;
+    
+    @Autowired
+    private ExamStudentService studentService;
+    
+    @Autowired
+    private MarkerClassService classService;
 
     @Value("${slice.image.server}")
     private String sliceServer;
@@ -286,9 +296,22 @@ public class MarkController extends BaseController {
                 break;
             }
             for (MarkLibrary library : list) {
-                if (markService.applyLibrary(library, marker)) {
-                    task = taskService.build(library);
-                    break;
+                //绑定了班级的评卷员
+                if(marker.getClassCount()!=0){
+                    ExamStudent student = studentService.findById(library.getStudentId());
+                    List<String> classes = classService.findClassNameByMarkerId(marker.getId());
+                    if(!classes.contains(student.getClassName())){
+                        continue;
+                    }
+                    if (markService.applyLibrary(library, marker)) {
+                        task = taskService.build(library);
+                        break;
+                    }
+                }else{
+                    if (markService.applyLibrary(library, marker)) {
+                        task = taskService.build(library);
+                        break;
+                    }
                 }
             }
             if (task == null) {

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

@@ -0,0 +1,39 @@
+<%@ 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" %>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li class="active"><a href="##">编辑班级</a></li>
+	</ul><br/>
+	<form:form id="inputForm" action="${ctx}/admin/exam/marker/class/${marker.id }" method="post" class="form-horizontal">
+		<tags:message content="${message}"/>
+		<div class="control-group">
+			<label class="control-label">登录名</label>
+			<div class="controls">
+				${marker.loginName }
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">班级</label>
+			<div class="controls">
+			<c:forEach items="${classes}" var="class">
+				<input name="classes" type="checkbox" value="${class }" checked/>${class }<br/>
+			</c:forEach>
+			<c:forEach items="${classList}" var="result">
+				<input name="classes" type="checkbox" value="${result }"/>${result }<br/>
+			</c:forEach>
+			</div>
+		</div>
+		<div class="form-actions">
+			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
+			&nbsp;
+			<a href="${ctx}/admin/exam/marker" class="btn"/>返回</a>
+		</div>
+	</form:form>
+</body>
+</html>

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

@@ -146,6 +146,7 @@
 				<th>已评数量</th>
 				<th>正在评卷</th>
 				<th>任务数</th>
+				<th>班级数量</th>
 				<th>操作</th>
 			</tr>
 		</thead>
@@ -169,6 +170,7 @@
 				<td>${marker.markedCount}</td>
 				<td>${marker.currentCount}</td>
 				<td>${marker.topCount}</td>
+				<td><a href="${ctx}/admin/exam/marker/class/${marker.id}"><c:if test="${marker.classCount == null}">0</c:if>${marker.classCount}</a></td>
 				<td>
 				    <c:if test="${web_user.schoolAdmin==true}">
 					<a href="javascript:void(0)" class="reset-button" data-id="${marker.id}">重置</a>