فهرست منبع

评卷员账号及密码的自定义,密码随机分配

ting.yin 6 سال پیش
والد
کامیت
a7a8250eb8

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

@@ -40,5 +40,12 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Modifying
     @Query("delete from Marker m where m.examId=?1")
     public void deleteByExamId(int examId);
+    
+    @Query(value="select e.* from eb_marker e,m_library m where 1=1 and e.id = m.marker_id and m.student_id =?1",nativeQuery=true)
+    public Marker findByStudentId(int studentId);
 
+    @Query("select count(m) from Marker m where m.loginName=?1")
+    public long countByLoginName(String loginName);
+
+    public List<Marker> findByMode(String common);
 }

+ 2 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -30,6 +30,7 @@ public class Marker implements Serializable {
     private Integer examId;
 
     @Column(name = "subject_code")
+    @ExcelField(title = "科目代码", align = 2, sort = 10)
     private String subjectCode;
 
     @Column(name = "group_number")
@@ -62,7 +63,7 @@ public class Marker implements Serializable {
     private String topCount;
 
     @Transient
-    @ExcelField(title = "科目", align = 2, sort = 10)
+    @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
     private String subjectName;
 
     @Transient

+ 174 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkerDTO.java

@@ -0,0 +1,174 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+import java.io.Serializable;
+
+public class MarkerDTO implements Serializable {
+    private static final long serialVersionUID = 9026500878343612005L;
+
+    //评卷员主键
+    private Integer markerId;
+    //评卷员姓名
+    private String name;
+    //评卷登录号(旧)
+    @ExcelField(title = "原评卷员(必填)", align = 2, sort = 20)
+    private String loginName;
+    //评卷登录号(新)
+    @ExcelField(title = "新评卷员(必填)", align = 2, sort = 30)
+    private String newLoginName;
+    //评卷账号密码
+    @ExcelField(title = "新评卷员密码(必填)", align = 2, sort = 40)
+    private String password;
+    //分配课程数
+    private long subjectCount;
+    //完成课程数
+    private long finishedCount;
+    //完成数量
+    private long markedCount;
+    //最高分
+    private Double maxScore;
+    //最低分
+    private Double minScore;
+    //平均分
+    private Double avgScore;
+    //课程代码
+    @ExcelField(title = "科目代码(必填)", align = 2, sort = 10)
+    private String subjectCode;
+    //课程名称
+    private String subjectName;
+    //回评个数
+    private long rejectCount;
+    //考试Id
+    private int examId;
+
+
+    public MarkerDTO() {
+    }
+
+    public MarkerDTO(Marker marker) {
+        this.name = marker.getName();
+        this.loginName = marker.getLoginName();
+        this.markerId = marker.getId();
+    }
+
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public long getSubjectCount() {
+        return subjectCount;
+    }
+
+    public void setSubjectCount(long subjectCount) {
+        this.subjectCount = subjectCount;
+    }
+
+    public long getFinishedCount() {
+        return finishedCount;
+    }
+
+    public void setFinishedCount(long finishedCount) {
+        this.finishedCount = finishedCount;
+    }
+
+    public long getMarkedCount() {
+        return markedCount;
+    }
+
+    public void setMarkedCount(long markedCount) {
+        this.markedCount = markedCount;
+    }
+
+    public Double getMaxScore() {
+        return maxScore;
+    }
+
+    public void setMaxScore(Double maxScore) {
+        this.maxScore = maxScore;
+    }
+
+    public Double getMinScore() {
+        return minScore;
+    }
+
+    public void setMinScore(Double minScore) {
+        this.minScore = minScore;
+    }
+
+    public Double getAvgScore() {
+        return avgScore;
+    }
+
+    public void setAvgScore(Double avgScore) {
+        this.avgScore = avgScore;
+    }
+
+    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 long getRejectCount() {
+        return rejectCount;
+    }
+
+    public void setRejectCount(long rejectCount) {
+        this.rejectCount = rejectCount;
+    }
+
+    public String getNewLoginName() {
+        return newLoginName;
+    }
+
+    public void setNewLoginName(String newLoginName) {
+        this.newLoginName = newLoginName;
+    }
+
+    public int getExamId() {
+        return examId;
+    }
+
+    public void setExamId(int examId) {
+        this.examId = examId;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+}

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java

@@ -18,6 +18,8 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
 
     private int groupNumber;
     
+    private String name;
+
     private String topCount;
 
     public void orderByLoginName() {
@@ -76,4 +78,12 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
 		this.topCount = topCount;
 	}
 
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
 }

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

@@ -38,5 +38,13 @@ public interface MarkerService {
     void deleteByGroup(MarkGroup group);
 
     List<Marker> getMarkCount(int examId, String subjectCode);
+    
+	List<Marker> findMode(String commo);
+
+	public Marker findByStudentId(int studentId);
+
+    public int batchSave(List<Marker> list);
+
+    long countByLoginName(String loginName);
 
 }

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

@@ -1,7 +1,9 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Random;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -138,7 +140,17 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
             Marker marker = new Marker();
             marker.setExamId(subject.getExamId());
             marker.setSubjectCode(subject.getCode());
-            marker.setPassword(password);
+            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.setLoginName(marker.getLoginName());
@@ -225,9 +237,34 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                 if (query.getGroupNumber() > 0) {
                     predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
                 }
+                if (StringUtils.isNotBlank(query.getName())) {
+                    predicates.add(cb.equal(root.get("name"), query.getName()));
+                }
+                cQuery.orderBy(cb.desc(root.get("lastLoginTime").as(Date.class)));
                 return predicates.isEmpty() ? cb.conjunction()
                         : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
+    
+	
+	@Override
+	public Marker findByStudentId(int studentId){
+	    return  markerDao.findByStudentId(studentId);
+	}
+
+	@Override
+    public int batchSave(List<Marker> list){
+        markerDao.save(list);
+        return  list.size();
+    }
+    @Override
+    public long countByLoginName(String loginName){
+        return markerDao.countByLoginName(loginName);
+    }
+
+    @Override
+    public List<Marker> findMode(String commo) {
+        return markerDao.findByMode(commo);
+    }
 }

+ 37 - 0
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/MarkerExcelError.java

@@ -0,0 +1,37 @@
+package cn.com.qmth.stmms.common.enums;
+
+public enum MarkerExcelError {
+     MARKERED("评卷员已存在",0)
+    ,MARKERPWERROR("密码最少4位",1)
+    ,MARKERCODEMISS("课程代码不存在或该课程与原评卷员不匹配",2)
+    ,MARKER("通过",3)
+    ,MARKERNOTINFO("EXCEL为空",4)
+    ,MARKERNEWMISS("新评卷员已存在",5)
+    ,MARKERMISS("原评卷员不存在",6)
+    ,MARKERNOTCODE("课程代码不存在",7)
+    ,MARKERNOTGROUP("大题号不存在",8)
+    ;
+    private String name;
+    private int value;
+
+    MarkerExcelError(String name, int value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public void setValue(int value) {
+        this.value = value;
+    }
+}

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

@@ -1,15 +1,23 @@
 package cn.com.qmth.stmms.admin.exam;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
+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;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
@@ -17,13 +25,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 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.ExamService;
 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.MarkerService;
@@ -32,11 +43,13 @@ import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.MarkerExcelError;
 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")
@@ -63,6 +76,12 @@ public class MarkerController extends BaseExamController {
 
     @Autowired
     private TaskService taskService;
+    
+    @Autowired
+    private ExamService examService;
+    
+    @Value("${marker.showBtnImportAndBtnUpdateImport}")
+    private String showBtnImport;
 
     @RequestMapping
     public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
@@ -80,6 +99,7 @@ public class MarkerController extends BaseExamController {
         }
         model.addAttribute("query", query);
         model.addAttribute("subjectList", getExamSubject(examId, wu));
+        model.addAttribute("showBtnImport",showBtnImport);
         return "modules/exam/markerList";
     }
 
@@ -137,11 +157,11 @@ public class MarkerController extends BaseExamController {
     @RequestMapping(value = "/batch-create", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
     public ModelAndView create(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber, @RequestParam Integer count, @RequestParam String password) {
+            @RequestParam Integer groupNumber, @RequestParam Integer count, @RequestParam(required = false) String password) {
         int examId = getSessionExamId(request);
         ExamSubject subject = subjectService.find(examId, subjectCode);
         ModelAndView view = new ModelAndView("redirect:/admin/exam/marker");
-        if (subject != null && count > 0 && StringUtils.isNotBlank(password)) {
+        if (subject != null && count > 0 ) {
             markerService.batchCreate(subject, groupNumber, count, password);
         }
         view.addObject("subjectCode", subjectCode);
@@ -273,4 +293,196 @@ public class MarkerController extends BaseExamController {
         }
         return obj;
     }
+    
+    @RequestMapping(value = "/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "评卷员数据导入模板.xlsx";
+            List<Marker> list = Lists.newArrayList();
+            list.add(new Marker());
+            new ExportExcel("评卷员数据", Marker.class, 2).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:" + "/admin/exam/marker";
+    }
+    
+    @RequestMapping(value = "/updateLoginNameTemplate")
+    public String updateLoginNameTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "评卷员账号修改导入模板.xlsx";
+            List<MarkerDTO> list = Lists.newArrayList();
+            list.add(new MarkerDTO());
+            new ExportExcel("评卷员账号修改数据", MarkerDTO.class, 2).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:" + "/admin/exam/marker";
+    }
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        int examId = getSessionExamId(request);
+        try {
+            int successNum = 0;
+            int failureNum = 0;
+            StringBuilder failureMsg = new StringBuilder();
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            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);
+            }
+            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);
+                if(StringUtils.isBlank(marker.getPassword())){
+                    Random random = new Random();
+                    for (int i=0;i<6;i++)
+                    {
+                        password+=random.nextInt(10);
+                    }
+                    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++;
+                }
+            }
+            successNum = markerService.batchSave(saveList);
+            if (failureNum > 0) {
+                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
+            }
+            addMessage(redirectAttributes, "已成功导入 " + successNum + " 条评卷员" + failureMsg);
+        } catch (Exception e) {
+            log.error("Batch import marker error!", e);
+            addMessage(redirectAttributes, "导入评卷员失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:" + "/admin/exam/marker";
+    }
+    @RequestMapping(value = "/importUpdate", method = RequestMethod.POST)
+    public String importUpdateFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        try {
+            int successNum = 0;
+            int failureNum = 0;
+            StringBuilder failureMsg = new StringBuilder();
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            List<MarkerDTO> list = ei.getDataList(MarkerDTO.class);
+            List<Marker> saveList = new LinkedList<Marker>();
+            Map<String, Marker> current = null;
+            List<Marker> list2 = markerService.findMode("common");
+            if(list2.size()<10000){
+                current = new HashMap<String, Marker>();
+                for (Marker s : list2) {
+                    current.put(s.getLoginName(), s);
+                }
+            }
+            for (MarkerDTO markerDTO : list) {
+                if (StringUtils.isBlank(markerDTO.getSubjectCode()) || StringUtils.isBlank(markerDTO.getLoginName())
+                        || StringUtils.isBlank(markerDTO.getNewLoginName()) || StringUtils.isBlank(markerDTO.getPassword())) {
+                    continue;
+                }
+                MarkerExcelError markerExcelError = checkExcelData(markerDTO,current);
+                if (markerExcelError.equals(MarkerExcelError.MARKER)) {
+                    Marker marker = null;
+                    if(current != null){
+                         marker = current.get(markerDTO.getLoginName());
+                    }else {
+                        marker = markerService.findByLoginName(markerDTO.getLoginName());
+                    }
+                    marker.setLoginName(markerDTO.getNewLoginName());
+                    marker.setPassword(markerDTO.getPassword());
+                    saveList.add(marker);
+                } else {
+                    failureMsg.append("<br/>科目代码(" + markerDTO.getSubjectCode()+")原评卷员("+markerDTO.getLoginName() +")更换新评卷员为("+markerDTO.getNewLoginName()+ ")失败!");
+                    failureMsg.append("---->失败原因:("+markerExcelError.getName()+")");
+                    failureNum++;
+                }
+            }
+            successNum = markerService.batchSave(saveList);
+            if (failureNum > 0) {
+                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
+            }
+            addMessage(redirectAttributes, "已成功导入 " + successNum + " 条" + failureMsg);
+        } catch (Exception e) {
+            log.error("Batch import marker error!", e);
+            addMessage(redirectAttributes, "导入修改评卷员账号失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:" + "/admin/exam/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;
+        }
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), Integer.valueOf(marker.getGroupName()));
+        if(group==null){
+        	return MarkerExcelError.MARKERNOTGROUP;
+        }else{
+        	marker.setGroupNumber(Integer.valueOf(marker.getGroupName()));
+        }
+        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){
+            Marker marker = null;
+            if(current == null){
+                marker = markerService.findByLoginName(markerDTO.getLoginName());
+            }else {
+                marker = current.get(markerDTO.getLoginName());
+            }
+            if(markerDTO.getPassword().length() < 4){
+                return MarkerExcelError.MARKERPWERROR;
+            }
+            if(marker != null){
+                if(marker.getSubjectCode().equals(markerDTO.getSubjectCode())){
+                    if(markerService.countByLoginName(markerDTO.getNewLoginName()) > 0){
+                        return MarkerExcelError.MARKERNEWMISS;
+                    }else {
+                        return MarkerExcelError.MARKER;
+                    }
+                }else{
+                    return  MarkerExcelError.MARKERCODEMISS;
+                }
+            }else {
+                return MarkerExcelError.MARKERMISS;
+            }
+        }else {
+          return   MarkerExcelError.MARKERNOTINFO;
+        }
+    }
 }

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

@@ -82,6 +82,24 @@
         <li class="active"><a href="##">评卷员管理</a></li>
         <li><a href="${ctx}/admin/exam/library?subjectCode=${query.subjectCode}">评卷任务管理</a></li>
     </ul>
+    <div id="importBox" class="hide">
+        <form id="importForm" action="${ctx}/admin/exam/marker/import" method="post" enctype="multipart/form-data"
+              style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+            <input id="uploadFile" name="file" type="file" style="width:330px"/><br/><br/>  
+            <input id="btnImportSubmit" class="btn btn-primary" type="submit" value="   导    入   "/>
+            <a href="${ctx}/admin/exam/marker/template">下载模板</a>
+        </form>
+    </div>
+
+<%--     <div id="importUpdateBox" class="hide">
+        <form id="importUpdateForm" action="${ctx}/admin/exam/marker/importUpdate" method="post" enctype="multipart/form-data"
+              style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+            <input id="uploadUpdateFile" name="file" type="file" style="width:330px"/><br/><br/>  
+            <input id="btnUpdateImportSubmit" class="btn btn-primary" type="submit" value="   导    入   "/>
+            <a href="${ctx}/admin/exam/marker/updateLoginNameTemplate">下载模板</a>
+        </form>
+    </div> --%>
+    
 	<form id="searchForm"  action="${ctx}/admin/exam/marker" 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}"/>
@@ -104,6 +122,10 @@
             <a href="${ctx}/admin/exam/marker/batch-create" class="btn btn-success">新增</a>
             </c:if>
 			&nbsp;
+			<c:if test="${showBtnImport}">
+				&nbsp;<input id="btnImport" class="btn" type="button" value="导入"/>
+<!-- 				&nbsp;<input id="btnUpdateImport" class="btn" type="button" value="批量修改评卷员账号"/> -->
+			</c:if>
 			<input id="btnExport" class="btn" type="button" value="导出"/>
 		</div>
 	</form>
@@ -176,6 +198,19 @@
 <script type="text/javascript">
 var searchSubjectCode = '${query.subjectCode}';
 var searchGroupNumber = '${query.groupNumber}';
+var markerId ;
+$(document).ready(function () {
+  $('#cover').hide();
+});
+$("#btnImport").click(function(){
+$.jBox($("#importBox").html(), {title:"导入数据", buttons:{"关闭":true},
+bottomText:"导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"});
+});
+/* $("#btnUpdateImport").click(function(){
+$.jBox($("#importUpdateBox").html(), {title:"导入数据", buttons:{"关闭":true},
+bottomText:"导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"});
+}); */
+
 $("#btnExport").click(function(){
 	top.$.jBox.confirm("确认要导出评卷员数据吗?","系统提示",function(v,h,f){
 		if(v=="ok"){