Browse Source

增加云阅卷评卷员新增导入功能,导入时可由用户自定义用户名、密码,如果不填写密码时,由系统随机生成密码,导入时系统需验证用户名的重复性及密码的位数据(填写密码不少于4位,随机密码6位)

nikang 6 years ago
parent
commit
d6133bb340

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

@@ -30,17 +30,18 @@ public class Marker implements Serializable {
     private Integer examId;
 
     @Column(name = "subject_code")
+    @ExcelField(title = "科目代码", align = 2, sort = 10)
     private String subjectCode;
 
     @Column(name = "login_name")
-    @ExcelField(title = "登录名", align = 2, sort = 20)
+    @ExcelField(title = "登录名", align = 2, sort = 30)
     private String loginName;
 
     @Column(name = "name")
     private String name;
 
     @Column(name = "password")
-    @ExcelField(title = "密码", align = 2, sort = 30)
+    @ExcelField(title = "密码", align = 2, sort = 40)
     private String password;
 
     @Column(name = "enable")
@@ -59,7 +60,7 @@ public class Marker implements Serializable {
     private String mode;
 
     @Transient
-    @ExcelField(title = "科目", align = 2, sort = 10)
+    @ExcelField(title = "科目", align = 2, sort = 20)
     private String subjectName;
 
     @Transient

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

@@ -40,4 +40,6 @@ public interface MarkerService {
 	
 	public Marker findByStudentId(int studentId);
 
+    public int batchSave(List<Marker> list);
+
 }

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

@@ -264,4 +264,10 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
 	public Marker findByStudentId(int studentId){
 	    return  markerDao.findByStudentId(studentId);
 	}
+
+	@Override
+    public int batchSave(List<Marker> list){
+        markerDao.save(list);
+        return  list.size();
+    }
 }

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

@@ -0,0 +1,28 @@
+package cn.com.qmth.stmms.common.enums;
+
+public enum MarkerExcelError {
+    MARKERED("已存在",0),MARKERPWERROR("密码最少4位",1),MARKERCODEMISS("课程代码不存在",2),MARKER("通过",3);
+    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;
+    }
+}

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

@@ -6,6 +6,9 @@ import java.util.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.stmms.common.enums.*;
+import cn.com.qmth.stmms.common.utils.*;
+import com.google.common.collect.Lists;
 import net.sf.json.JSONObject;
 
 import org.apache.commons.lang.StringUtils;
@@ -18,6 +21,7 @@ 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;
 
@@ -36,14 +40,6 @@ import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
-import cn.com.qmth.stmms.common.enums.ExamSubjectStatus;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.enums.UserType;
-import cn.com.qmth.stmms.common.utils.DateUtils;
-import cn.com.qmth.stmms.common.utils.ExportExcel;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
 
 @Controller("examMarkerController")
 @RequestMapping("/admin/exam-param/marker")
@@ -437,4 +433,97 @@ public class ExamMarkerController extends BaseParameterController {
         }
         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-param/marker";
+    }
+    @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;
+            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);
+                marker.setCommon(false);
+                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-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.MARKERCODEMISS;
+        }
+        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;
+    }
 }

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

@@ -82,6 +82,14 @@
 		<li><a href="${ctx}/admin/exam-param/marker/batch-create">批量创建</a></li>
 		<li><a href="${ctx}/admin/exam-param/marker/subjectViewer">科组长列表</a></li>
 	</ul>
+    <div id="importBox" class="hide">
+        <form id="importForm" action="${ctx}/admin/exam-param/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-param/marker/template">下载模板</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}"/>
@@ -98,6 +106,7 @@
 			
 			&nbsp;
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
+            &nbsp;<input id="btnImport" class="btn" type="button" value="导入"/>
 			&nbsp;
 			<input id="btnExport" class="btn" type="button" value="导出"/>
 			&nbsp;
@@ -165,7 +174,10 @@
     $(document).ready(function () {
       $('#cover').hide();
     });
-
+$("#btnImport").click(function(){
+  $.jBox($("#importBox").html(), {title:"导入数据", buttons:{"关闭":true},
+    bottomText:"导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"});
+});
 $("#btnExport").click(function(){
 	top.$.jBox.confirm("确认要导出评卷员数据吗?","系统提示",function(v,h,f){
 		if(v=="ok"){