瀏覽代碼

在某个考试批次下对已存在的评卷员任务进行置换评卷员账号

nikang 6 年之前
父節點
當前提交
66a3d99841

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

@@ -40,4 +40,7 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     
     @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);
 }

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

@@ -60,7 +60,7 @@ public class Marker implements Serializable {
     private String mode;
 
     @Transient
-    @ExcelField(title = "科目", align = 2, sort = 20)
+    @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
     private String subjectName;
 
     @Transient

+ 37 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkerDTO.java

@@ -1,5 +1,7 @@
 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 {
@@ -9,8 +11,15 @@ public class MarkerDTO implements Serializable {
     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;
     //完成课程数
@@ -24,11 +33,14 @@ public class MarkerDTO implements Serializable {
     //平均分
     private Double avgScore;
     //课程代码
+    @ExcelField(title = "科目代码", align = 2, sort = 10)
     private String subjectCode;
     //课程名称
     private String subjectName;
     //回评个数
     private long rejectCount;
+    //考试Id
+    private int examId;
 
 
     public MarkerDTO() {
@@ -135,4 +147,28 @@ public class MarkerDTO implements Serializable {
     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;
+    }
 }

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

@@ -42,4 +42,6 @@ public interface MarkerService {
 
     public int batchSave(List<Marker> list);
 
+    long countByLoginName(String loginName);
+
 }

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

@@ -270,4 +270,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         markerDao.save(list);
         return  list.size();
     }
+    @Override
+    public long countByLoginName(String loginName){
+        return markerDao.countByLoginName(loginName);
+    }
 }

+ 5 - 1
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/MarkerExcelError.java

@@ -1,7 +1,11 @@
 package cn.com.qmth.stmms.common.enums;
 
 public enum MarkerExcelError {
-    MARKERED("已存在",0),MARKERPWERROR("密码最少4位",1),MARKERCODEMISS("课程代码不存在",2),MARKER("通过",3);
+    MARKERED("评卷员已存在",0),MARKERPWERROR("密码最少4位",1),
+    MARKERCODEMISS("课程代码不存在",2),MARKER("通过",3),MARKERNOTINFO("EXCEL为空",4),
+    MARKERNEWMISS("新评卷员已存在",5),
+    MARKERMISS("原评卷员不存在",6)
+    ;
     private String name;
     private int value;
 

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

@@ -6,6 +6,7 @@ import java.util.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.stmms.biz.exam.model.MarkerDTO;
 import cn.com.qmth.stmms.common.enums.*;
 import cn.com.qmth.stmms.common.utils.*;
 import com.google.common.collect.Lists;
@@ -15,6 +16,7 @@ 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.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -66,6 +68,9 @@ public class ExamMarkerController extends BaseParameterController {
     
     @Autowired
     private ExamService examService;
+
+    @Value("${marker.showBtnImportAndBtnUpdateImport}")
+    private String showBtnImport;
     
     @RequestMapping
     public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
@@ -82,6 +87,7 @@ public class ExamMarkerController extends BaseParameterController {
                 }
             }
             model.addAttribute("query", query);
+            model.addAttribute("showBtnImport",showBtnImport);
             model.addAttribute("subjectList", getMarkExamSubject(examId));
             return "modules/exam/param/markerList";
         } else {
@@ -446,13 +452,13 @@ public class ExamMarkerController extends BaseParameterController {
         }
         return "redirect:" + "/admin/exam-param/marker";
     }
-    @RequestMapping(value = "/UpdateLoginNameTemplate")
-    public String UpdateLoginNameTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+    @RequestMapping(value = "/updateLoginNameTemplate")
+    public String updateLoginNameTemplate(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();
+            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());
@@ -505,7 +511,7 @@ public class ExamMarkerController extends BaseParameterController {
             }
             successNum = markerService.batchSave(saveList);
             if (failureNum > 0) {
-                failureMsg.insert(0, ",失败 " + failureNum + " 条用户");
+                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
             }
             addMessage(redirectAttributes, "已成功导入 " + successNum + " 条评卷员" + failureMsg);
         } catch (Exception e) {
@@ -514,6 +520,51 @@ public class ExamMarkerController extends BaseParameterController {
         }
         return "redirect:" + "/admin/exam-param/marker";
     }
+    @RequestMapping(value = "/importUpdate", method = RequestMethod.POST)
+    public String importUpdateFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        int examId = getSessionExamId(request);
+        Exam exam = examService.findById(examId);
+        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;
+            current = new HashMap<String, Marker>();
+            List<Marker> list2 = markerService.findExamAndCommon(examId,false);
+            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 = current.get(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-param/marker";
+    }
     private MarkerExcelError checkLongNameAndPassword(Marker marker, Map<String, ExamSubject> current,Map<String, Marker> saveMap) {
         Marker previous = null;
 
@@ -539,4 +590,26 @@ public class ExamMarkerController extends BaseParameterController {
         }
         return MarkerExcelError.MARKERED;
     }
+
+    //校验excel中数据
+    public MarkerExcelError checkExcelData(MarkerDTO markerDTO,Map<String, Marker> current ){
+        Marker marker = current.get(markerDTO.getLoginName());
+        if(markerDTO != null){
+            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.MARKERCODEMISS;
+                }
+            }else {
+                return MarkerExcelError.MARKERMISS;
+            }
+        }else {
+          return   MarkerExcelError.MARKERNOTINFO;
+        }
+        return MarkerExcelError.MARKER;
+    }
 }

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

@@ -90,6 +90,16 @@
             <a href="${ctx}/admin/exam-param/marker/template">下载模板</a>
         </form>
     </div>
+
+    <div id="importUpdateBox" class="hide">
+        <form id="importUpdateForm" action="${ctx}/admin/exam-param/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-param/marker/updateLoginNameTemplate">下载模板</a>
+        </form>
+    </div>
+
 	<form id="searchForm"  action="${ctx}/admin/exam-param/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}"/>
@@ -106,7 +116,10 @@
 			
 			&nbsp;
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
-            &nbsp;<input id="btnImport" class="btn" type="button" value="导入"/>
+			<c:if test="${showBtnImport}">
+				&nbsp;<input id="btnImport" class="btn" type="button" value="导入"/>
+				&nbsp;<input id="btnUpdateImport" class="btn" type="button" value="批量修改评卷员账号"/>
+			</c:if>
 			&nbsp;
 			<input id="btnExport" class="btn" type="button" value="导出"/>
 			&nbsp;
@@ -178,6 +191,10 @@ $("#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"){