Browse Source

取消通用评卷员,改为评卷员与科目多对多关系

ting.yin 6 năm trước cách đây
mục cha
commit
23fffe956d

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

@@ -24,8 +24,6 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
 
     public List<Marker> findByExamIdAndSubjectCode(int examId, String subjectCode, Pageable page);
 
-    public List<Marker> findByExamIdAndCommon(int examId, boolean common, Pageable page);
-
     public List<Marker> findByLoginName(String loginName);
 
     public List<Marker> findByLoginNameAndPassword(String loginName, String password);
@@ -44,5 +42,4 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query("select count(m) from Marker m where m.loginName=?1")
     public long countByLoginName(String loginName);
 
-    public List<Marker> findByCommon(boolean common);
 }

+ 21 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamSubject.java

@@ -1,12 +1,19 @@
 package cn.com.qmth.stmms.biz.exam.model;
 
 import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
@@ -64,6 +71,12 @@ public class ExamSubject implements Serializable {
     @Column(name = "remark")
     private String remark;
 
+    @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.EAGER)
+    @JoinTable(name="eb_exam_subject_marker",
+    		joinColumns={@JoinColumn(name="subject_code",referencedColumnName = "code"),@JoinColumn(name="exam_id",referencedColumnName = "exam_id")},
+    		inverseJoinColumns={@JoinColumn(name="marker_id")})
+    private Set<Marker> markers = new HashSet<>();
+    
     @Transient
     private long studentCount;
 
@@ -246,4 +259,12 @@ public class ExamSubject implements Serializable {
         this.category = category;
     }
 
+	public Set<Marker> getMarkers() {
+		return markers;
+	}
+
+	public void setMarkers(Set<Marker> markers) {
+		this.markers = markers;
+	}
+
 }

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

@@ -2,11 +2,18 @@ package cn.com.qmth.stmms.biz.exam.model;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
@@ -47,9 +54,6 @@ public class Marker implements Serializable {
     @Column(name = "enable")
     private boolean enable;
 
-    @Column(name = "common")
-    private boolean common;
-
     @Column(name = "last_login_ip")
     private String lastLoginIp;
 
@@ -77,6 +81,12 @@ public class Marker implements Serializable {
 
     @Column(name = "top_count")
     private Integer topCount;
+    
+    @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.EAGER)
+    @JoinTable(name="eb_exam_subject_marker",
+		    joinColumns={@JoinColumn(name="marker_id")},
+    		inverseJoinColumns={@JoinColumn(name="subject_code",referencedColumnName = "code"),@JoinColumn(name="exam_id",referencedColumnName = "exam_id")})
+    private Set<ExamSubject> examSubjects = new HashSet<>();
 
     public Integer getId() {
         return id;
@@ -153,9 +163,7 @@ public class Marker implements Serializable {
     public void buildLoginName(int number) {
         StringBuilder name = new StringBuilder();
         name.append(examId).append(LOGINNAME_SPLITE);
-        if (!isCommon()) {
-            name.append(subjectCode).append(LOGINNAME_SPLITE);
-        }
+        name.append(subjectCode).append(LOGINNAME_SPLITE);
         name.append(number);
         setLoginName(name.toString());
     }
@@ -219,14 +227,6 @@ public class Marker implements Serializable {
         this.name = name;
     }
 
-    public boolean isCommon() {
-        return common;
-    }
-
-    public void setCommon(boolean common) {
-        this.common = common;
-    }
-
     public String getMode() {
         return mode;
     }
@@ -242,4 +242,12 @@ public class Marker implements Serializable {
     public void setTopCount(Integer topCount) {
         this.topCount = topCount;
     }
+
+	public Set<ExamSubject> getExamSubjects() {
+		return examSubjects;
+	}
+
+	public void setExamSubjects(Set<ExamSubject> examSubjects) {
+		this.examSubjects = examSubjects;
+	}
 }

+ 0 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -36,10 +36,6 @@ public interface MarkerService {
 
     List<Marker> getMarkCount(int examId);
 
-	List<Marker> findExamAndCommon(int examId, boolean common);
-
-	List<Marker> findCommon(boolean commo);
-
 	public Marker findByStudentId(int studentId);
 
     public int batchSave(List<Marker> list);

+ 49 - 58
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -7,6 +7,8 @@ import java.util.Random;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.JoinType;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
@@ -103,37 +105,37 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Override
     public int batchCreateCommon(int examId, int count, String password) {
         int result = 0;
-        if (count > 0) {
-            int start = 1;
-            Marker previous = findLastCommonMarker(examId);
-            if (previous != null) {
-                start = previous.getNumber() + 1;
-            }
-            int end = start + count - 1;
-            for (; start <= end; start++) {
-                Marker marker = new Marker();
-                marker.setCommon(true);
-                marker.setExamId(examId);
-                marker.setSubjectCode("");
-                if(StringUtils.isEmpty(password)){
-                    Random random = new Random();
-                    for (int i=0;i<6;i++)
-                    {
-                        password+=random.nextInt(10);
-                    }
-                    marker.setPassword(password);
-                    password = "";//随机码生产后将密码置空
-                }else {
-                    marker.setPassword(password);
-                }
-                marker.setEnable(true);
-                marker.buildLoginName(start);
-                marker.setName(marker.getLoginName());
-                if (save(marker) != null) {
-                    result++;
-                }
-            }
-        }
+//        if (count > 0) {
+//            int start = 1;
+//            Marker previous = findLastCommonMarker(examId);
+//            if (previous != null) {
+//                start = previous.getNumber() + 1;
+//            }
+//            int end = start + count - 1;
+//            for (; start <= end; start++) {
+//                Marker marker = new Marker();
+////                marker.setCommon(true);
+//                marker.setExamId(examId);
+//                marker.setSubjectCode("");
+//                if(StringUtils.isEmpty(password)){
+//                    Random random = new Random();
+//                    for (int i=0;i<6;i++)
+//                    {
+//                        password+=random.nextInt(10);
+//                    }
+//                    marker.setPassword(password);
+//                    password = "";//随机码生产后将密码置空
+//                }else {
+//                    marker.setPassword(password);
+//                }
+//                marker.setEnable(true);
+//                marker.buildLoginName(start);
+//                marker.setName(marker.getLoginName());
+//                if (save(marker) != null) {
+//                    result++;
+//                }
+//            }
+//        }
         return result;
     }
 
@@ -150,7 +152,6 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
             int end = start + count - 1;
             for (; start <= end; start++) {
                 Marker marker = new Marker();
-                marker.setCommon(false);
                 marker.setExamId(subject.getExamId());
                 marker.setSubjectCode(subject.getCode());
                 if(StringUtils.isEmpty(password)){
@@ -188,18 +189,18 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         }
     }
 
-    private Marker findLastCommonMarker(int examId) {
-        BaseQuery<Marker> query = new BaseQuery<Marker>();
-        query.setPageNumber(1);
-        query.setPageSize(1);
-        query.setSort(new Sort(Direction.DESC, "id"));
-        List<Marker> list = markerDao.findByExamIdAndCommon(examId, true, query);
-        if (list != null && list.size() > 0) {
-            return Marker.parseLoginName(list.get(0).getLoginName());
-        } else {
-            return null;
-        }
-    }
+//    private Marker findLastCommonMarker(int examId) {
+//        BaseQuery<Marker> query = new BaseQuery<Marker>();
+//        query.setPageNumber(1);
+//        query.setPageSize(1);
+//        query.setSort(new Sort(Direction.DESC, "id"));
+//        List<Marker> list = markerDao.findByExamIdAndCommon(examId, true, query);
+//        if (list != null && list.size() > 0) {
+//            return Marker.parseLoginName(list.get(0).getLoginName());
+//        } else {
+//            return null;
+//        }
+//    }
 
     @Override
     public List<Marker> getMarkCount(int examId) {
@@ -236,7 +237,10 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
                 if (StringUtils.isNotBlank(query.getSubjectCode())) {
-                    predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
+//                    predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
+                	Join<Marker,ExamSubject> join= root.join(root.getModel().getSet("examSubjects",ExamSubject.class),JoinType.LEFT);
+                    Predicate p2 = cb.equal(join.get("pk").get("code"), query.getSubjectCode());
+                    predicates.add(p2);
                 }
                 if (StringUtils.isNotBlank(query.getLoginName())) {
                     predicates.add(cb.equal(root.get("loginName"), query.getLoginName()));
@@ -251,15 +255,6 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         };
     }
 
-	@Override
-	public List<Marker> findExamAndCommon(int examId, boolean commo) {
-        BaseQuery<Marker> query = new BaseQuery<Marker>();
-        query.setPageNumber(1);
-        query.setPageSize(Integer.MAX_VALUE);
-        query.setSort(new Sort(Direction.DESC, "id"));
-		return markerDao.findByExamIdAndCommon(examId, commo, query);
-	}
-	
 	@Override
 	public Marker findByStudentId(int studentId){
 	    return  markerDao.findByStudentId(studentId);
@@ -275,8 +270,4 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         return markerDao.countByLoginName(loginName);
     }
 
-    @Override
-    public List<Marker> findCommon(boolean commo) {
-        return markerDao.findByCommon(commo);
-    }
 }

+ 93 - 98
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/parameter/ExamMarkerController.java

@@ -96,9 +96,7 @@ public class ExamMarkerController extends BaseParameterController {
             query = markerService.findByQuery(query);
             if (query.getCurrentCount() > 0) {
                 for (Marker marker : query.getResult()) {
-                    if (!marker.isCommon()) {
-                        marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
-                    }
+                    marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
                 }
             }
             model.addAttribute("query", query);
@@ -123,32 +121,20 @@ public class ExamMarkerController extends BaseParameterController {
                 subject = subjectService.find(examId, query.getSubjectCode());
             } else if (subjectList.size() > 0) {
                 subject = subjectList.get(0);
-                query.setSubjectCode(subject.getCode());
-            }
-            List<Marker> markers = markerService.findByExamAndSubject(examId, subject.getCode());
-            List<Marker> commonMarkers = markerService.findExamAndCommon(examId, true);
-            List<MarkerVO> markerVOs = new ArrayList<MarkerVO>();
-            Set<Integer> set = new HashSet<>();
-            for (Marker marker : commonMarkers) {
-                set.add(marker.getId());
-            }
-            for (Marker marker : markers) {
-                set.add(marker.getId());
             }
-            for (Integer id : set) {
-                Marker marker = markerService.findById(id);
-                marker.setSubject(subject);
-                MarkLibrarySearchQuery query2 = new MarkLibrarySearchQuery();
-                query2.setExamId(examId);
-                query2.setSubjectCode(
-                        query.getSubjectCode() != null ? query.getSubjectCode() : marker.getSubjectCode());
-                query2.setMarkerId(marker.getId());
-                query2.setStatus(LibraryStatus.MARKED);
-                marker.setMarkedCount(libraryService.countByQuery(query2));
-                marker.setCurrentCount(taskService.countCurrent(marker));
-                MarkerVO markerVO = new MarkerVO(marker);
-                markerVO = getMarkerInfo(markerVO, query2.getSubjectCode());
-                markerVOs.add(markerVO);
+            Set<MarkerVO> markerVOs = new HashSet<MarkerVO>();
+            MarkLibrarySearchQuery query2 = new MarkLibrarySearchQuery();
+            query2.setExamId(examId);
+            query2.setSubjectCode(subjectCode);
+            query2.setStatus(LibraryStatus.MARKED);
+            for (Marker marker : subject.getMarkers()) {
+            	marker.setSubject(subject);
+        		query2.setMarkerId(marker.getId());
+        		marker.setMarkedCount(libraryService.countByQuery(query2));
+        		marker.setCurrentCount(taskService.countCurrent(marker));
+        		MarkerVO markerVO = new MarkerVO(marker);
+        		markerVO = getMarkerInfo(markerVO, query2.getSubjectCode());
+        		markerVOs.add(markerVO);
             }
             model.addAttribute("markerVOs", markerVOs);
             model.addAttribute("query", query);
@@ -212,7 +198,7 @@ public class ExamMarkerController extends BaseParameterController {
     public String createInit(Model model, HttpServletRequest request) {
         int examId = getSessionExamId(request);
         if (examId > 0) {
-            model.addAttribute("subjectList", getMarkExamSubject(examId));
+//            model.addAttribute("subjectList", getMarkExamSubject(examId));
             return "modules/exam/param/markerCreate";
         } else {
             return "redirect:/admin/exam/list";
@@ -221,14 +207,11 @@ public class ExamMarkerController extends BaseParameterController {
 
     @RequestMapping(value = "/batch-create", method = RequestMethod.POST)
     public ModelAndView create(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer count, @RequestParam(required = false) String password,
-            @RequestParam Boolean common) {
+            @RequestParam Integer count, @RequestParam(required = false) String password) {
         int examId = getSessionExamId(request);
         ModelAndView view = new ModelAndView("redirect:/admin/exam-param/marker");
         if (examId > 0 && count > 0) {
-            if (common.booleanValue()) {
-                markerService.batchCreateCommon(examId, count, password);
-            } else if (!"all".equals(subjectCode)) {
+            if (!"all".equals(subjectCode)) {
                 markerService.batchCreate(subjectService.find(examId, subjectCode), count, password);
             } else {
                 List<ExamSubject> subjectList = getMarkExamSubject(examId);
@@ -244,11 +227,11 @@ public class ExamMarkerController extends BaseParameterController {
     public String delete(@RequestParam Integer id) {
         Marker marker = markerService.findById(id);
         if (marker != null) {
-            if (!marker.isCommon() && isMarking(marker.getExamId(), marker.getSubjectCode())) {
-            } else {
+//            if (!marker.isCommon() && isMarking(marker.getExamId(), marker.getSubjectCode())) {
+//            } else {
                 libraryService.resetByMarker(marker);
                 markerService.deleteById(id);
-            }
+//            }
         }
         return "redirect:/admin/exam-param/marker?repage";
     }
@@ -259,7 +242,8 @@ public class ExamMarkerController extends BaseParameterController {
         Marker marker = markerService.findById(id);
         JSONObject obj = new JSONObject();
         if (marker != null) {
-            if (!marker.isCommon() && isMarking(marker.getExamId(), marker.getSubjectCode())) {
+//            if (!marker.isCommon() && isMarking(marker.getExamId(), marker.getSubjectCode())) {
+        	if (isMarking(marker.getExamId(), marker.getSubjectCode())) {
                 obj.accumulate("success", false);
                 obj.accumulate("message", "评卷已开始,不能进行修改");
             } else {
@@ -457,6 +441,27 @@ public class ExamMarkerController extends BaseParameterController {
         }
         return obj;
     }
+    
+    @RequestMapping(value = "/show", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject show(@RequestParam Integer id) {
+        Marker marker = markerService.findById(id);
+        JSONObject obj = new JSONObject();
+        if (marker != null) {
+        	StringBuilder content = new StringBuilder();
+            for (ExamSubject subject : marker.getExamSubjects()) {
+            	content.append(subject.getCode()).append("-");
+            	content.append(subject.getName());
+            	content.append(" ");
+			}
+            obj.accumulate("content", content.toString());
+            obj.accumulate("success", true);
+        } else {
+            obj.accumulate("success", false);
+            obj.accumulate("message", "该评卷员不存在");
+        }
+        return obj;
+    }
 
     @RequestMapping(value = "/template")
     public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
@@ -489,7 +494,6 @@ public class ExamMarkerController extends BaseParameterController {
     @RequestMapping(value = "/import", method = RequestMethod.POST)
     public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
-        // Exam exam = examService.findById(examId);
         try {
             int successNum = 0;
             int failureNum = 0;
@@ -498,42 +502,58 @@ public class ExamMarkerController extends BaseParameterController {
             List<Marker> list = ei.getDataList(Marker.class);
             List<Marker> saveList = new LinkedList<Marker>();
             Map<String, Marker> saveMap = new HashMap<String, Marker>();
-            Map<String, ExamSubject> current = null;
-            current = new HashMap<String, ExamSubject>();
-            List<ExamSubject> list2 = subjectService.list(examId);
-            for (ExamSubject s : list2) {
-                current.put(s.getCode(), s);
-            }
+            Map<String, ExamSubject> current = new HashMap<String, ExamSubject>();
             for (Marker marker : list) {
-                String password = "";
-                if (StringUtils.isBlank(marker.getSubjectCode()) || StringUtils.isBlank(marker.getLoginName())) {
-                    continue;
-                }
-                marker.setExamId(examId);
-                marker.setName(marker.getLoginName());
-                marker.setEnable(true);
-                marker.setCommon(false);
-                if (StringUtils.isBlank(marker.getPassword())) {
-                    Random random = new Random();
-                    for (int i = 0; i < 6; i++) {
-                        password += random.nextInt(10);
+            	ExamSubject examSubject = current.get(marker.getSubjectCode());
+            	if(examSubject == null){
+            		examSubject = subjectService.find(examId, marker.getSubjectCode());
+            		if(examSubject == null){
+            			failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + MarkerExcelError.MARKERNOTCODE.getName());
+            			failureNum++;
+            			continue;
+            		}
+            		examSubject.setMarkers(new HashSet<Marker>());
+            	}
+            	Set<Marker> markers = examSubject.getMarkers();
+            	Marker old = markerService.findByLoginName(marker.getLoginName());
+            	if(old!=null){
+            		markers.add(old);
+            	}else{
+            		String password = "";
+            		if (StringUtils.isBlank(marker.getSubjectCode()) || StringUtils.isBlank(marker.getLoginName())) {
+            			continue;
+            		}
+            		marker.setExamId(examId);
+            		marker.setName(marker.getLoginName());
+            		marker.setEnable(true);
+            		if (StringUtils.isBlank(marker.getPassword())) {
+            			Random random = new Random();
+            			for (int i = 0; i < 6; i++) {
+            				password += random.nextInt(10);
+            			}
+            			marker.setPassword(password);
+            		}
+            		if (marker.getPassword().length() > 0 && marker.getPassword().length() < 4) {
+            			failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +  MarkerExcelError.MARKERPWERROR.getName());
+            			failureNum++;
                     }
-                    marker.setPassword(password);
-                }
-                MarkerExcelError markerExcelError = checkLongNameAndPassword(marker, current, saveMap);
-                if (markerExcelError.equals(MarkerExcelError.MARKER)) {
-                    saveList.add(marker);
-                    saveMap.put(marker.getLoginName(), marker);
-                } else {
-                    failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + markerExcelError.getName());
-                    failureNum++;
-                }
+            		saveMap.put(marker.getLoginName(), marker);
+            		markers.add(marker);
+            	}
+            	examSubject.setMarkers(markers);
+            	current.put(examSubject.getCode(), examSubject);
+            }
+            for (Marker m : saveMap.values()) {
+            	saveList.add(m);
             }
             successNum = markerService.batchSave(saveList);
+            for (ExamSubject s : current.values()) {
+            	subjectService.save(s);
+            }
             if (failureNum > 0) {
                 failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
             }
-            addMessage(redirectAttributes, "已成功导入 " + successNum + " 条评卷员" + failureMsg);
+            addMessage(redirectAttributes, "已成功导入 " + current.size() + " 条科目,新增 " + successNum + " 条评卷员 " + failureMsg);
         } catch (Exception e) {
             log.error("Batch import marker error!", e);
             addMessage(redirectAttributes, "导入评卷员失败!失败信息:" + e.getMessage());
@@ -554,10 +574,12 @@ public class ExamMarkerController extends BaseParameterController {
             List<MarkerDTO> list = ei.getDataList(MarkerDTO.class);
             List<Marker> saveList = new LinkedList<Marker>();
             Map<String, Marker> current = null;
-            List<Marker> list2 = markerService.findCommon(false);
-            if (list2.size() < 10000) {
+            MarkerSearchQuery query = new MarkerSearchQuery();
+            query.setPageSize(Integer.MAX_VALUE);
+            query = markerService.findByQuery(query);
+            if (query.getCurrentCount() > 0 && query.getCurrentCount() <10000) {
                 current = new HashMap<String, Marker>();
-                for (Marker s : list2) {
+                for (Marker s : query.getResult()) {
                     current.put(s.getLoginName(), s);
                 }
             }
@@ -597,33 +619,6 @@ public class ExamMarkerController extends BaseParameterController {
         return "redirect:" + "/admin/exam-param/marker";
     }
 
-    private MarkerExcelError checkLongNameAndPassword(Marker marker, Map<String, ExamSubject> current,
-            Map<String, Marker> saveMap) {
-        Marker previous = null;
-
-        if (current != null && current.get(marker.getSubjectCode()) == null) {
-            return MarkerExcelError.MARKERNOTCODE;
-        }
-        if (saveMap != null) {
-            previous = saveMap.get(marker.getLoginName());
-        }
-
-        if (previous != null) {
-            return MarkerExcelError.MARKERED;
-        }
-
-        previous = markerService.findByLoginName(marker.getLoginName());
-
-        if (marker.getPassword().length() > 0 && marker.getPassword().length() < 4) {
-            return MarkerExcelError.MARKERPWERROR;
-        }
-
-        if (previous == null) {
-            return MarkerExcelError.MARKER;
-        }
-        return MarkerExcelError.MARKERED;
-    }
-
     // 校验excel中数据
     public MarkerExcelError checkExcelData(MarkerDTO markerDTO, Map<String, Marker> current) {
         if (markerDTO != null) {

+ 9 - 10
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/parameter/ExamMarkerInfoController.java

@@ -47,14 +47,13 @@ public class ExamMarkerInfoController extends BaseParameterController {
                 MarkerDTO markerDTO = new MarkerDTO(marker);
                 long markedCount = getMarkedCount(marker.getId(), LibraryStatus.MARKED);
                 markerDTO.setMarkedCount(markedCount);
-                if (!marker.isCommon()) {
-                    markerDTO.setSubjectCount(1l);
-                    markerDTO.setFinishedCount(markedCount > 0 ? 1l : 0l);
-                } else {
-                    markerDTO.setSubjectCount(getSubjectCountByExamId(marker.getExamId()));
-                    markerDTO.setFinishedCount(
-                            markedCount > 0 ? getCodeListByMidGBCodeCount(marker.getId(), LibraryStatus.MARKED) : 0l);
+                if(marker.getExamSubjects().size()==0 && marker.getSubjectCode()!=null){
+                	markerDTO.setSubjectCount(1);
+                }else{
+                	markerDTO.setSubjectCount(marker.getExamSubjects().size());
                 }
+                markerDTO.setFinishedCount(
+                            markedCount > 0 ? getCodeListByMidGBCodeCount(marker.getId(), LibraryStatus.MARKED) : 0l);
                 List<Object[]> list = markLibraryService.getMarkerInfo(marker.getId(), LibraryStatus.MARKED);
                 double maxScore = (Double) list.get(0)[0] == null ? 0 : (Double) list.get(0)[0];
                 markerDTO.setMaxScore(maxScore);
@@ -112,9 +111,9 @@ public class ExamMarkerInfoController extends BaseParameterController {
         }
     }
 
-    public long getSubjectCountByExamId(int examId) {
-        return examSubjectService.count(examId);
-    }
+//    public long getSubjectCountByExamId(int examId) {
+//        return examSubjectService.count(examId);
+//    }
 
     public long getMarkedCount(int markerId, LibraryStatus status) {
         return markLibraryService.countByMidAndStatus(markerId, status);

+ 5 - 36
stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/LoginController.java

@@ -14,14 +14,12 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.servlet.ModelAndView;
 
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.ExamSubjectStatus;
 import cn.com.qmth.stmms.common.enums.UserType;
 import cn.com.qmth.stmms.common.session.model.StmmsSession;
 import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
@@ -230,46 +228,17 @@ public class LoginController {
             modelAndView.addObject("message", "帐号已禁用");
             return modelAndView;
         }
-        if (!marker.isCommon()) {
-            ExamSubject subject = examSubjectService.find(marker.getExamId(), marker.getSubjectCode());
-            if (subject == null) {
-                if ("aopeng".equals(appIndex)) {
-                    modelAndViewForAP.addObject("message", "科目不存在");
-                    return modelAndViewForAP;
-                }
-                modelAndView.addObject("message", "科目不存在");
-                return modelAndView;
-            }
-            if (subject.getStatus() == ExamSubjectStatus.PAUSE) {
-                if ("aopeng".equals(appIndex)) {
-                    modelAndViewForAP.addObject("message", "当前科目暂停评卷");
-                    return modelAndViewForAP;
-                }
-                modelAndView.addObject("message", "当前科目暂停评卷");
-                return modelAndView;
-            }
-            if (subject.getStatus() == ExamSubjectStatus.FINISH) {
-                if ("aopeng".equals(appIndex)) {
-                    modelAndViewForAP.addObject("message", "当前科目评卷已结束");
-                    return modelAndViewForAP;
-                }
-                modelAndView.addObject("message", "当前科目评卷已结束");
-                return modelAndView;
-            }
-        }
 
         new WebUser(marker.getId(), UserType.MARKER).writeToSession(RequestUtils.getSession(request));
 
         if (marker.getLastLoginTime() == null) {
             return new ModelAndView("redirect:/mark/reset");
-        } else if (StringUtils.isBlank(marker.getSubjectCode())) {
-            return new ModelAndView("redirect:/mark/subject-select");
         } else {
-            marker.setLastLoginTime(new Date());
-            marker.setLastLoginIp(request.getRemoteAddr());
-            markerService.save(marker);
-        }
-        return new ModelAndView("redirect:/mark/index");
+        	marker.setLastLoginTime(new Date());
+        	marker.setLastLoginIp(request.getRemoteAddr());
+        	markerService.save(marker);
+            return new ModelAndView("redirect:/mark/subject-select");
+        } 
     }
 
     /**

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

@@ -42,6 +42,10 @@ import net.sf.json.JSONObject;
 public class MarkController extends BaseController {
 
     private static Logger log = LoggerFactory.getLogger(MarkController.class);
+    
+    protected static final String MARK_LOGIN_VIEW = "modules/sys/markLogin";
+
+    protected static final String AP_MARK_LOGIN_VIEW = "modules/sys/markLoginAp";
 
     @Autowired
     private ExamSubjectService subjectService;
@@ -99,8 +103,7 @@ public class MarkController extends BaseController {
             modelAndView.setViewName("modules/mark/subjectSelect");
         }
         modelAndView.addObject("marker", marker);
-        modelAndView.addObject("subjectList",
-                subjectService.list(marker.getExamId(), ExamSubjectStatus.MARKING, 0, 0, 0));
+        modelAndView.addObject("subjectList",marker.getExamSubjects());
 
         if (StringUtils.isNotBlank(marker.getSubjectCode())) {
             clearCurrentTask(marker);
@@ -110,9 +113,36 @@ public class MarkController extends BaseController {
 
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
     public ModelAndView select(HttpServletRequest request, @RequestParam String subjectCode) {
-        Marker current = RequestUtils.getWebUser(request).getMarker();
-        current.setSubjectCode(subjectCode);
-        markerService.save(current);
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        ModelAndView modelAndView = new ModelAndView(MARK_LOGIN_VIEW);
+        ModelAndView modelAndViewForAP = new ModelAndView(AP_MARK_LOGIN_VIEW);
+	      ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
+	      if (subject == null) {
+	          if ("aopeng".equals(appIndex)) {
+	              modelAndViewForAP.addObject("message", "科目不存在");
+	              return modelAndViewForAP;
+	          }
+	          modelAndView.addObject("message", "科目不存在");
+	          return modelAndView;
+	      }
+	      if (subject.getStatus() == ExamSubjectStatus.PAUSE) {
+	          if ("aopeng".equals(appIndex)) {
+	              modelAndViewForAP.addObject("message", "当前科目暂停评卷");
+	              return modelAndViewForAP;
+	          }
+	          modelAndView.addObject("message", "当前科目暂停评卷");
+	          return modelAndView;
+	      }
+	      if (subject.getStatus() == ExamSubjectStatus.FINISH) {
+	          if ("aopeng".equals(appIndex)) {
+	              modelAndViewForAP.addObject("message", "当前科目评卷已结束");
+	              return modelAndViewForAP;
+	          }
+	          modelAndView.addObject("message", "当前科目评卷已结束");
+	          return modelAndView;
+	      }
+	      marker.setSubjectCode(subjectCode);
+        markerService.save(marker);
         return new ModelAndView("redirect:/mark/index");
     }
 

+ 9 - 9
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/param/markerCreate.jsp

@@ -34,15 +34,15 @@
 	</ul><br/>
 	<form id="inputForm" action="${ctx}/admin/exam-param/marker/batch-create" method="post" class="form-horizontal">
 		<tags:message content="${message}"/>
-		<div class="control-group">
-			<label class="control-label">帐号类型</label>
-			<div class="controls">
-				<select id="common" name="common">
-					<option value="true">不限科目</option>
-					<option value="false">绑定科目</option>
-				</select>
-			</div>
-		</div>
+<!-- 		<div class="control-group"> -->
+<!-- 			<label class="control-label">帐号类型</label> -->
+<!-- 			<div class="controls"> -->
+<!-- 				<select id="common" name="common"> -->
+<!-- 					<option value="true">不限科目</option> -->
+<!-- 					<option value="false">绑定科目</option> -->
+<!-- 				</select> -->
+<!-- 			</div> -->
+<!-- 		</div> -->
 		<div class="control-group">
 			<label class="control-label">科目选择</label>
 			<div class="controls">

+ 32 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/param/markerList.jsp

@@ -7,7 +7,7 @@
 	<%@include file="/WEB-INF/views/include/head.jsp" %>
 	<style type="text/css">
         .sort{color:#0663A2;cursor:pointer;}
-        .taskWindow,.reSetPasswordWin{
+        .taskWindow,.reSetPasswordWin,.subjectWin{
             width: 400px;
             min-height: 150px;
             background: #fff;
@@ -26,7 +26,7 @@
             background: #5d6d7d;
             color: #fff;
         }
-        .task-content,.password-content{
+        .task-content,.password-content,.subject-content{
             font-size: 18px;
             color: #005277;
             text-align: left;
@@ -143,11 +143,16 @@
 		<c:forEach items="${query.result}" var="marker">
 			<tr>
 				<td>
-				<c:if test="${marker.subject!=null}">
-				${marker.subject.code}-${marker.subject.name}
+				<c:if test="${marker.examSubjects.size() != 0}">
+					<c:forEach items="${marker.examSubjects}" var="examSubject" begin="0" end="2">
+						${examSubject.code}-${examSubject.name}
+					</c:forEach>
+					<c:if test="${marker.examSubjects.size() > 2}">
+						<a href="javascript:void(0)" class="subject-button" data-id="${marker.id}" onclick="showSubjectWin('${marker.id}');">显示全部</a>
+					</c:if>
 				</c:if>
-				<c:if test="${marker.subject==null}">
-				不限
+ 				<c:if test="${marker.examSubjects.size() == 0 && marker.subject!=null}">
+					${marker.subject.code}-${marker.subject.name}
 				</c:if>
 				</td>
 				<td>${marker.loginName}</td>
@@ -185,6 +190,11 @@
         <div class="password-content"><input type="text" class="password-value" placeholder="请输入新的密码"/><i class="passwordWrong"></i></div>
         <a href="#" class="btn btn-small btn-info password-btn">确定</a>
     </div>
+    
+    <div class="subjectWin" style="display:none"><div class="task-header">
+        <p class="title">全部科目</p><p class="image-close subject-close"><img src="${ctxStatic}/mark-new/images/images-close.png" /></p></div>
+        <div class="subject-content"></div>
+    </div>
 	<div class="pagination">${query}</div>
 <script type="text/javascript">
     var markerId ;
@@ -251,6 +261,18 @@ function reSetPassword(obj){
   $('#cover').show();
   markerId = obj;
 }
+function showSubjectWin(obj){
+	markerId = obj;
+	$.post('${ctx}/admin/exam-param/marker/show', {id: markerId }, function(result){
+        if(result.success==true){
+			$('.subject-content').html(result.content);
+        }else{
+        	alert(result.message);
+        }
+    });
+	$('.subjectWin').show();
+	$('#cover').show();
+}
 $('.image-close').click(function () {
   $('.taskWindow').hide();
   $('#cover').hide();
@@ -259,6 +281,10 @@ $('.password-close').click(function () {
   $('.reSetPasswordWin').hide();
   $('#cover').hide();
 });
+$('.subject-close').click(function () {
+	$('.subjectWin').hide();
+	$('#cover').hide();
+});
 
 $('.task-btn').click(function () {
   var taskCount = $('.task-count').val();