浏览代码

科目拆分

xiatian 10 月之前
父节点
当前提交
392f9bd343

+ 48 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/SubjectSplit.java

@@ -0,0 +1,48 @@
+package cn.com.qmth.stmms.biz.exam.bean;
+
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+public class SubjectSplit {
+	@ExcelField(title = "准考证号", align = 2, sort = 1)
+	private String examNumber;
+	@ExcelField(title = "科目代码", align = 2, sort = 2)
+	private String subjectCode;
+	@ExcelField(title = "科目名称", align = 2, sort = 3)
+	private String subjectName;
+	
+	private ExamStudent student;
+
+	public String getExamNumber() {
+		return examNumber;
+	}
+
+	public void setExamNumber(String examNumber) {
+		this.examNumber = examNumber;
+	}
+
+	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 ExamStudent getStudent() {
+		return student;
+	}
+
+	public void setStudent(ExamStudent student) {
+		this.student = student;
+	}
+
+}

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamSubjectDao.java

@@ -13,6 +13,20 @@ import cn.com.qmth.stmms.biz.exam.model.ExamSubjectPK;
 
 
 public interface ExamSubjectDao
 public interface ExamSubjectDao
         extends PagingAndSortingRepository<ExamSubject, ExamSubjectPK>, JpaSpecificationExecutor<ExamSubject> {
         extends PagingAndSortingRepository<ExamSubject, ExamSubjectPK>, JpaSpecificationExecutor<ExamSubject> {
+	
+	@Modifying
+    @Query(value = "delete es from eb_exam_subject es "
+    		+ "where es.exam_id =?1 "
+    		+ "and not exists (select s.id from eb_exam_student s where s.exam_id=es.exam_id and s.subject_code=es.code) "
+    		+ "and not exists (select q.id from eb_exam_question q where q.exam_id=es.exam_id and q.subject_code=es.code)", nativeQuery = true)
+    public void deleteNoStudentByExamId(int examId);
+	
+    @Modifying
+    @Query(value = "update eb_exam_subject es "
+    		+ "set es.upload_count=(select count(*) from eb_exam_student s "
+    		+ "where s.exam_id=es.exam_id and s.subject_code=es.code and s.is_upload=1 and s.is_absent=0 and s.is_breach=0) "
+    		+ "where es.exam_id=?1", nativeQuery = true)
+    public void updateUploadCountByExamId(int examId);
 
 
     @Query("select s from ExamSubject s where s.pk.examId=?1")
     @Query("select s from ExamSubject s where s.pk.examId=?1")
     public List<ExamSubject> findByExamId(int examId);
     public List<ExamSubject> findByExamId(int examId);

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

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.biz.exam.service;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
+import cn.com.qmth.stmms.biz.exam.bean.SubjectSplit;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
@@ -59,4 +60,6 @@ public interface ExamSubjectService {
     void resetInspect(int examId, String subjectCode);
     void resetInspect(int examId, String subjectCode);
 
 
     List<ExamSubject> listObjectiveScore(Integer examId, double objectiveScoreGt);
     List<ExamSubject> listObjectiveScore(Integer examId, double objectiveScoreGt);
+
+	String split(Integer schoolId, Integer examId, List<SubjectSplit> list);
 }
 }

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
 
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
@@ -18,8 +19,10 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.bean.SubjectSplit;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
 import cn.com.qmth.stmms.biz.exam.dao.ExamSubjectDao;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -32,6 +35,7 @@ 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.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
+import cn.com.qmth.stmms.biz.exception.StatusException;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.ExamType;
@@ -57,6 +61,9 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
 
 
     @Autowired
     @Autowired
     private CheckStudentService checkStudentService;
     private CheckStudentService checkStudentService;
+    
+    @Autowired
+    private MarkGroupService markGroupService;
 
 
     @Transactional
     @Transactional
     @Override
     @Override
@@ -332,4 +339,90 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
         return subjectDao.listObjectiveScore(examId, objectiveScoreGt);
         return subjectDao.listObjectiveScore(examId, objectiveScoreGt);
     }
     }
 
 
+    @Transactional
+	@Override
+	public String split(Integer schoolId, Integer examId, List<SubjectSplit> list) {
+    	StringBuilder err=new StringBuilder();
+    	if(CollectionUtils.isEmpty(list)) {
+    		err.append("Excel中没有数据");
+    		return err.toString();
+    	}
+    	int index=0;
+    	for(SubjectSplit vo:list) {
+    		index++;
+    		StringBuilder line=new StringBuilder();
+    		if(StringUtils.isBlank(vo.getExamNumber())) {
+    			line.append(" 准考证号不能为空");
+    		}
+    		if(StringUtils.isBlank(vo.getSubjectCode())) {
+    			line.append(" 科目代码不能为空");
+    		}
+    		if(StringUtils.isBlank(vo.getSubjectName())) {
+    			line.append(" 科目名称不能为空");
+    		}
+    		if(StringUtils.isNotBlank(vo.getExamNumber())) {
+	    		ExamStudent es=studentService.findByExamIdAndExamNumber(examId, vo.getExamNumber());
+	    		if(es==null) {
+	    			line.append(" 考生"+vo.getExamNumber()+"不存在");
+	    		}else {
+	    			vo.setStudent(es);
+	    		}
+    		}
+    		if(line.length()>0) {
+    			err.append("第"+(index+2)+"行 "+line);
+    		}
+    	}
+    	if(err.length()>0) {
+    		return err.toString();
+    	}
+    	try {
+			disposeSplit(schoolId, examId, list);
+		} catch (StatusException e) {
+			err.append(e.getDesc());
+		} catch (Exception e) {
+			err.append("导入出错:"+e.getMessage());
+		}
+		return err.toString();
+	}
+    
+    private void disposeSplit(Integer schoolId, Integer examId, List<SubjectSplit> list) {
+    	int index=0;
+    	Set<String> validSubjects=new HashSet<>();
+    	for(SubjectSplit vo:list) {
+    		index++;
+    		long groupCount=markGroupService.countByExamAndSubject(examId, vo.getStudent().getSubjectCode());
+    		if(groupCount>0) {
+    			throw new StatusException("第"+(index+2)+"行 科目"+vo.getStudent().getSubjectCode()+"有分组,请先删除分组再执行");
+    		}
+    		validSubjects.add(vo.getStudent().getSubjectCode());
+    		if(!validSubjects.contains(vo.getSubjectCode())) {
+    			ExamSubject es=subjectDao.findByExamIdAndCode(index, vo.getSubjectCode());
+    			if(es==null) {
+    				es=new ExamSubject();
+    				es.setExamId(examId);
+    				es.setName(vo.getSubjectName());
+    				es.setCode(vo.getSubjectCode());
+    				es.setObjectiveScore(0.0);
+    				es.setSubjectiveScore(0.0);
+    				es.setObjectiveScore(0.0);
+    				es.setUploadCount(0);
+    				es.setDisplayQuestionName(true);
+    				es.setInspectRound(1);
+    				es.setSelective(false);
+    				subjectDao.save(es);
+    			}else {
+    				long count=markGroupService.countByExamAndSubject(examId, vo.getSubjectCode());
+    	    		if(count>0) {
+    	    			throw new StatusException("第"+(index+2)+"行 科目"+vo.getSubjectCode()+"有分组,请先删除分组再执行");
+    	    		}
+    			}
+    			validSubjects.add(vo.getSubjectCode());
+    		}
+    		vo.getStudent().setSubjectCode(vo.getSubjectCode());
+    		vo.getStudent().setSubjectName(vo.getSubjectName());
+    		examStudentDao.save(vo.getStudent());
+    	}
+    	subjectDao.updateUploadCountByExamId(examId);
+    	subjectDao.deleteNoStudentByExamId(examId);
+    }
 }
 }

+ 142 - 80
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SubjectController.java

@@ -1,12 +1,10 @@
 package cn.com.qmth.stmms.admin.exam;
 package cn.com.qmth.stmms.admin.exam;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-import net.sf.json.JsonConfig;
+import javax.servlet.http.HttpServletResponse;
 
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
@@ -17,101 +15,165 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 
+import cn.com.qmth.stmms.biz.exam.bean.SubjectSplit;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.school.model.School;
+import cn.com.qmth.stmms.biz.school.service.SchoolService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
 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 net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import net.sf.json.JsonConfig;
 
 
 @Controller
 @Controller
 @RequestMapping("/admin/exam/subject")
 @RequestMapping("/admin/exam/subject")
 public class SubjectController extends BaseExamController {
 public class SubjectController extends BaseExamController {
 
 
-    @Autowired
-    private ExamSubjectService subjectService;
+	@Autowired
+	private ExamSubjectService subjectService;
+
+	@Autowired
+	private ExamService examService;
+
+	@Autowired
+	private SchoolService schoolService;
+
+	@RequestMapping("/list")
+	@ResponseBody
+	public JSONArray list(HttpServletRequest request, @RequestParam Integer examId) {
+		List<ExamSubject> list = subjectService.list(examId);
+		JSONArray array = new JSONArray();
+		for (ExamSubject subject : list) {
+			JSONObject obj = new JSONObject();
+			obj.accumulate("code", subject.getCode());
+			obj.accumulate("name", subject.getName());
+			obj.accumulate("level", StringUtils.trimToEmpty(subject.getLevel()));
+			obj.accumulate("category", StringUtils.trimToEmpty(subject.getCategory()));
+			array.add(obj);
+		}
+		return array;
+	}
+
+	@RequestMapping("/edit")
+	@RoleRequire(Role.SCHOOL_ADMIN)
+	public String edit(HttpServletRequest request, @RequestParam String code, Model model,
+			RedirectAttributes redirectAttributes, ExamSubjectSearchQuery query,
+			@RequestParam(required = false) String queryCode, @RequestParam(required = false) Boolean upload) {
+		ExamSubject subject = subjectService.find(getSessionExamId(request), code);
+		if (subject == null) {
+			addMessage(redirectAttributes, "科目代码有误,科目不存在");
+			return "redirect:/admin/exam/paper";
+		}
+		model.addAttribute("subject", subject);
+		model.addAttribute("pictureConfig", buildPictureConfig(subject.getSheetConfig()));
+		model.addAttribute("passScore", subject.getPassScore());
+		model.addAttribute("excellentScore", subject.getExcellentScore());
+		Exam exam = examService.findById(subject.getExamId());
+		model.addAttribute("examType", exam.getType());
+		query.setCode(queryCode);
+		model.addAttribute("query", query);
+		model.addAttribute("upload", upload);
+		return "modules/exam/subjectEdit";
+	}
+
+	@Logging(menu = "科目设置", type = LogType.UPDATE)
+	@SuppressWarnings("unchecked")
+	@RequestMapping(value = "/save", method = RequestMethod.POST)
+	@RoleRequire(Role.SCHOOL_ADMIN)
+	public String save(RedirectAttributes redirectAttributes, HttpServletRequest request, ExamSubject subject,
+			Model model, @RequestParam String picList, @RequestParam(required = false) Double passScore,
+			@RequestParam(required = false) Double excellentScore, ExamSubjectSearchQuery query,
+			@RequestParam(required = false) String queryCode, @RequestParam(required = false) Boolean upload) {
+		String u = upload == null ? "" : upload.toString();
+		String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
+		String url = "redirect:/admin/exam/paper?code=" + queryCode + "&pageNumber=" + query.getPageNumber()
+				+ "&category=" + query.getCategory() + "&level=" + query.getLevel() + "&upload=" + u
+				+ "&totalScoreNotEqual=" + t;
+		ExamSubject previous = subjectService.find(getSessionExamId(request), subject.getCode());
+		if (previous == null) {
+			addMessage(redirectAttributes, "科目代码有误,科目不存在");
+			return url;
+		}
+		if (previous != null && StringUtils.isNotBlank(picList)) {
+			String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
+			JSONArray array = JSONArray.fromObject(sheetConfig);
+			List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
+			previous.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
+		}
+		JSONObject sasConfig = new JSONObject();
+		sasConfig.accumulate("passScore", passScore);
+		sasConfig.accumulate("excellentScore", excellentScore);
+		previous.setSasConfig(sasConfig.toString());
+		previous.setEnableSplit(subject.getEnableSplit());
+		previous.setAutoScroll(subject.getAutoScroll());
+		previous.setDisplayQuestionName(
+				subject.getDisplayQuestionName() == null ? false : subject.getDisplayQuestionName());
+		subjectService.save(previous);
+		model.addAttribute("message", "修改成功");
 
 
-    @Autowired
-    private ExamService examService;
+		return url;
+	}
 
 
-    @RequestMapping("/list")
-    @ResponseBody
-    public JSONArray list(HttpServletRequest request, @RequestParam Integer examId) {
-        List<ExamSubject> list = subjectService.list(examId);
-        JSONArray array = new JSONArray();
-        for (ExamSubject subject : list) {
-            JSONObject obj = new JSONObject();
-            obj.accumulate("code", subject.getCode());
-            obj.accumulate("name", subject.getName());
-            obj.accumulate("level", StringUtils.trimToEmpty(subject.getLevel()));
-            obj.accumulate("category", StringUtils.trimToEmpty(subject.getCategory()));
-            array.add(obj);
-        }
-        return array;
-    }
+	@RoleRequire({ Role.SYS_ADMIN })
+	@RequestMapping(value = "split")
+	public String split(Model model, HttpServletRequest request, @RequestParam Integer schoolId) {
+		School s = schoolService.findById(schoolId);
+		model.addAttribute("schoolId", schoolId);
+		model.addAttribute("schoolName", s.getName());
+		List<Exam> examList = examService.findBySchoolId(schoolId);
+		model.addAttribute("examList", examList);
+		return "modules/exam/subjectSplit";
+	}
 
 
-    @RequestMapping("/edit")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String edit(HttpServletRequest request, @RequestParam String code, Model model,
-            RedirectAttributes redirectAttributes, ExamSubjectSearchQuery query,
-            @RequestParam(required = false) String queryCode, @RequestParam(required = false) Boolean upload) {
-        ExamSubject subject = subjectService.find(getSessionExamId(request), code);
-        if (subject == null) {
-            addMessage(redirectAttributes, "科目代码有误,科目不存在");
-            return "redirect:/admin/exam/paper";
-        }
-        model.addAttribute("subject", subject);
-        model.addAttribute("pictureConfig", buildPictureConfig(subject.getSheetConfig()));
-        model.addAttribute("passScore", subject.getPassScore());
-        model.addAttribute("excellentScore", subject.getExcellentScore());
-        Exam exam = examService.findById(subject.getExamId());
-        model.addAttribute("examType", exam.getType());
-        query.setCode(queryCode);
-        model.addAttribute("query", query);
-        model.addAttribute("upload", upload);
-        return "modules/exam/subjectEdit";
-    }
+	@RoleRequire({ Role.SYS_ADMIN })
+	@RequestMapping(value = "split/save")
+	public String splitSave(RedirectAttributes redirectAttributes, Model model, HttpServletRequest request,
+			MultipartFile file, @RequestParam Integer schoolId, @RequestParam Integer examId) {
+		try {
+			School s = schoolService.findById(schoolId);
+			ImportExcel ei= new ImportExcel(file, 1, 0);
+			List<SubjectSplit> list = ei.getDataList(SubjectSplit.class);
+			String errMsg=subjectService.split(schoolId,examId,list);
+			model.addAttribute("examId", examId);
+			model.addAttribute("schoolId", schoolId);
+			model.addAttribute("schoolName", s.getName());
+			List<Exam> examList = examService.findBySchoolId(schoolId);
+			model.addAttribute("examList", examList);
+			if(StringUtils.isBlank(errMsg)) {
+				model.addAttribute("message", "已成功导入");
+			}else {
+				model.addAttribute("errmsg", errMsg);
+			}
+		}catch (Exception e) {
+			model.addAttribute("errmsg", "导入失败:"+e.getMessage());
+		}
+		return "modules/exam/subjectSplit";
+	}
 
 
-    @Logging(menu = "科目设置", type = LogType.UPDATE)
-    @SuppressWarnings("unchecked")
-    @RequestMapping(value = "/save", method = RequestMethod.POST)
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String save(RedirectAttributes redirectAttributes,HttpServletRequest request, ExamSubject subject, Model model, @RequestParam String picList,
-            @RequestParam(required = false) Double passScore, @RequestParam(required = false) Double excellentScore,
-            ExamSubjectSearchQuery query, @RequestParam(required = false) String queryCode,
-            @RequestParam(required = false) Boolean upload) {
-    	String u = upload == null ? "" : upload.toString();
-    	String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
-    	String url="redirect:/admin/exam/paper?code=" + queryCode + "&pageNumber=" + query.getPageNumber() + "&category="
-                + query.getCategory() + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
-        ExamSubject previous = subjectService.find(getSessionExamId(request), subject.getCode());
-        if(previous==null) {
-        	addMessage(redirectAttributes, "科目代码有误,科目不存在");
-        	return url;
-        }
-        if (previous != null && StringUtils.isNotBlank(picList)) {
-            String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
-            JSONArray array = JSONArray.fromObject(sheetConfig);
-            List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
-            previous.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
-        }
-        JSONObject sasConfig = new JSONObject();
-        sasConfig.accumulate("passScore", passScore);
-        sasConfig.accumulate("excellentScore", excellentScore);
-        previous.setSasConfig(sasConfig.toString());
-        previous.setEnableSplit(subject.getEnableSplit());
-        previous.setAutoScroll(subject.getAutoScroll());
-        previous.setDisplayQuestionName(subject.getDisplayQuestionName() == null ? false : subject
-                .getDisplayQuestionName());
-        subjectService.save(previous);
-        model.addAttribute("message", "修改成功");
-       
-        return url;
-    }
+	@RequestMapping(value = "split/template")
+	public String splitTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+			List<SubjectUser> list = new ArrayList<SubjectUser>();
+			list.add(new SubjectUser());
+			new ExportExcel("科目拆分数据", SubjectUser.class, 2).setDataList(list).write(response, "科目拆分导入模板.xlsx")
+					.dispose();
+			return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
+		}
+		return "redirect:/admin/exam/subject/split";
+	}
 }
 }

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

@@ -0,0 +1,71 @@
+<%@ 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" %>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $("#name").focus();
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+    </script>
+</head>
+<body>
+<form:form id="inputForm" action="${ctx}/admin/exam/subject/split/save" method="post" class="form-horizontal">
+    <tags:message content="${message}"/>
+    <tags:message content="${errmsg}" type="error" />
+    <input type="hidden" id="schoolId" name="schoolId" value="${schoolId}" />
+		<div class="control-group">
+			<label class="control-label">名称</label>
+			<div class="controls"><input type="text" disabled="disabled"
+				id="schoolName" name="schoolName" value="${schoolName}"/>
+				</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">考试</label>
+			<div class="controls">
+			<select class="input-large required" name="examId" id="examId">
+				<option value="" selected="selected">请选择考试</option>
+				<c:forEach items="${examList}" var="item">
+					<option <c:if test="${item.id==examId}">selected</c:if> value="${item.id}">${item.id}-${item.name}</option>
+				</c:forEach>
+			</select>
+			</div>
+		</div>
+		<div class="control-group">
+		<label class="control-label">导入拆分表</label>
+			<div class="controls">
+			<input id="uploadFile" name="file" type="file" style="width:210px" class="required"/> 
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label"></label>
+			<div class="controls">
+            	<a href="${ctx}/admin/exam/subject/split/template">下载模板</a>
+            </div>
+        </div>
+    <div class="form-actions">
+            <input id="btnSubmit" class="btn btn-primary" type="submit"
+				value="导入"/> 
+			&nbsp; 
+			<a href="${ctx}/admin/sys/school" class="btn">返回</a>
+    </div>
+</form:form>
+</body>
+</html>

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

@@ -59,6 +59,8 @@
 					<a href="${ctx}/admin/sys/school/admin?id=${school.id}">编辑管理员</a>
 					<a href="${ctx}/admin/sys/school/admin?id=${school.id}">编辑管理员</a>
 					&nbsp;
 					&nbsp;
 					<a href="${ctx}/admin/basic/role/info/list?schoolId=${school.id}">角色权限</a>
 					<a href="${ctx}/admin/basic/role/info/list?schoolId=${school.id}">角色权限</a>
+					&nbsp;
+					<a href="${ctx}/admin/exam/subject/split?schoolId=${school.id}">科目拆分</a>
 				</td>
 				</td>
 			</tr>
 			</tr>
 		</c:forEach>
 		</c:forEach>