|
@@ -1,10 +1,12 @@
|
|
package cn.com.qmth.stmms.admin.user;
|
|
package cn.com.qmth.stmms.admin.user;
|
|
|
|
|
|
|
|
+import java.io.ByteArrayInputStream;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
+import org.apache.commons.io.output.ByteArrayOutputStream;
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -19,6 +21,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
|
|
|
|
+import com.qmth.boot.tools.io.ZipWriter;
|
|
|
|
+
|
|
import cn.com.qmth.stmms.admin.dto.MarkerDTO;
|
|
import cn.com.qmth.stmms.admin.dto.MarkerDTO;
|
|
import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
|
|
import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
|
|
import cn.com.qmth.stmms.admin.exam.BaseExamController;
|
|
import cn.com.qmth.stmms.admin.exam.BaseExamController;
|
|
@@ -37,14 +41,12 @@ import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
|
|
import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
|
|
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.domain.WebUser;
|
|
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.enums.SystemAuthType;
|
|
import cn.com.qmth.stmms.common.enums.SystemAuthType;
|
|
import cn.com.qmth.stmms.common.enums.UserSource;
|
|
import cn.com.qmth.stmms.common.enums.UserSource;
|
|
-import cn.com.qmth.stmms.common.utils.EncryptUtils;
|
|
|
|
-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 cn.com.qmth.stmms.common.utils.*;
|
|
import net.sf.json.JSONObject;
|
|
import net.sf.json.JSONObject;
|
|
|
|
|
|
@Controller
|
|
@Controller
|
|
@@ -477,6 +479,110 @@ public class UserController extends BaseExamController {
|
|
return "redirect:/admin/user/list";
|
|
return "redirect:/admin/user/list";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Logging(menu = "导出用户", type = LogType.EXPORT)
|
|
|
|
+ @RequestMapping(value = "/exportSubject", method = RequestMethod.POST)
|
|
|
|
+ public String exportSubject(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response,
|
|
|
|
+ RedirectAttributes redirectAttributes) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "用户数据.zip";
|
|
|
|
+ response.reset();
|
|
|
|
+ response.setContentType("application/octet-stream; charset=utf-8");
|
|
|
|
+ ZipWriter writer = ZipWriter.create(response.getOutputStream());
|
|
|
|
+ response.setHeader("Content-Disposition", "attachment; filename=" + Encodes.urlEncode(fileName));
|
|
|
|
+ List<ExamSubject> subjectList = getExamSubject(examId, wu);
|
|
|
|
+ Map<String, MarkGroup> groupMap = new HashMap<String, MarkGroup>();
|
|
|
|
+ Map<String, String> collegeMap = new HashMap<String, String>();
|
|
|
|
+ for (ExamSubject subject : subjectList) {
|
|
|
|
+ String subjectName = subject.getCode() + "-" + subject.getName();
|
|
|
|
+ if (query.getRole() != null && query.getRole().equals(Role.MARKER)) {
|
|
|
|
+ MarkerSearchQuery mQuery = new MarkerSearchQuery();
|
|
|
|
+ mQuery.setExamId(examId);
|
|
|
|
+ mQuery.setSubjectCode(subject.getCode());
|
|
|
|
+ mQuery.setLoginName(query.getLoginName());
|
|
|
|
+ mQuery.setName(query.getName());
|
|
|
|
+ mQuery.setPageSize(Integer.MAX_VALUE);
|
|
|
|
+ mQuery = markerService.findByQuery(mQuery);
|
|
|
|
+ List<MarkerDTO> list = new ArrayList<MarkerDTO>();
|
|
|
|
+ for (Marker m : mQuery.getResult()) {
|
|
|
|
+ MarkerDTO s = new MarkerDTO();
|
|
|
|
+ if (collegeMap.get(subject.getCode()) == null) {
|
|
|
|
+ List<String> colleges = studentService.findDistinctCollegeBySubjectCode(examId,
|
|
|
|
+ m.getSubjectCode());
|
|
|
|
+ collegeMap.put(subject.getCode(), StringUtils.join(colleges, SPLIT));
|
|
|
|
+ }
|
|
|
|
+ s.setSubjectCode(subject.getCode());
|
|
|
|
+ s.setSubjectName(subject.getName());
|
|
|
|
+ String groupKey = m.getSubjectCode() + "/t" + m.getGroupNumber();
|
|
|
|
+ MarkGroup group = groupMap.get(groupKey);
|
|
|
|
+ if (group == null) {
|
|
|
|
+ group = groupService.findOne(examId, m.getSubjectCode(), m.getGroupNumber());
|
|
|
|
+ group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
|
+ subject.getCode(), false, group.getNumber()));
|
|
|
|
+ groupMap.put(groupKey, group);
|
|
|
|
+ }
|
|
|
|
+ s.setGroupName(group.getQuestionTitle());
|
|
|
|
+ s.setGroupNumber(m.getGroupNumber());
|
|
|
|
+ s.setRole(Role.MARKER.getName());
|
|
|
|
+ User u = userService.findById(m.getUserId());
|
|
|
|
+ s.setLoginName(u.getLoginName());
|
|
|
|
+ s.setRandomPassword(u.getRandomPassword());
|
|
|
|
+ s.setCollege(collegeMap.get(m.getSubjectCode()));
|
|
|
|
+ list.add(s);
|
|
|
|
+ }
|
|
|
|
+ if (list.isEmpty()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
|
|
+ new ExportExcel(query.getRole().getName() + "数据", MarkerDTO.class).setDataList(list).write(os);
|
|
|
|
+ os.flush();
|
|
|
|
+ byte[] bytes = os.toByteArray();
|
|
|
|
+ writer.write(new ByteArrayInputStream(bytes),
|
|
|
|
+ subjectName + "-" + query.getRole().getName() + ".xlsx");
|
|
|
|
+ }
|
|
|
|
+ if (query.getRole() != null
|
|
|
|
+ && (query.getRole().equals(Role.SUBJECT_HEADER) || query.getRole().equals(Role.INSPECTOR))) {
|
|
|
|
+ List<SubjectUserDTO> list = new ArrayList<SubjectUserDTO>();
|
|
|
|
+ List<SubjectUser> subjectUsers = subjectUserService.findBySubjectCode(subject.getCode());
|
|
|
|
+ for (SubjectUser subjectUser : subjectUsers) {
|
|
|
|
+ User u = userService.findById(subjectUser.getUserId());
|
|
|
|
+ if (!u.getRole().equals(query.getRole())) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ SubjectUserDTO s = new SubjectUserDTO();
|
|
|
|
+ s.setRole(query.getRole().getName());
|
|
|
|
+ s.setLoginName(u.getLoginName());
|
|
|
|
+ s.setRandomPassword(u.getRandomPassword());
|
|
|
|
+ if (collegeMap.get(subject.getCode()) == null) {
|
|
|
|
+ List<String> colleges = studentService.findDistinctCollegeBySubjectCode(examId,
|
|
|
|
+ subjectUser.getSubjectCode());
|
|
|
|
+ collegeMap.put(subjectUser.getSubjectCode(), StringUtils.join(colleges, SPLIT));
|
|
|
|
+ }
|
|
|
|
+ s.setSubjectCode(subjectUser.getSubjectCode());
|
|
|
|
+ s.setSubjectName(subject.getName());
|
|
|
|
+ s.setCollege(collegeMap.get(subjectUser.getSubjectCode()));
|
|
|
|
+ list.add(s);
|
|
|
|
+ }
|
|
|
|
+ if (list.isEmpty()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
|
|
+ new ExportExcel(query.getRole().getName() + "数据", SubjectUserDTO.class).setDataList(list).write(os);
|
|
|
|
+ os.flush();
|
|
|
|
+ byte[] bytes = os.toByteArray();
|
|
|
|
+ writer.write(new ByteArrayInputStream(bytes),
|
|
|
|
+ subjectName + "-" + query.getRole().getName() + ".xlsx");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ writer.close();
|
|
|
|
+ return null;
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ addMessage(redirectAttributes, "导出用户数据失败!" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return "redirect:/admin/user/list";
|
|
|
|
+ }
|
|
|
|
+
|
|
@Logging(menu = "用户启用/禁用", type = LogType.UPDATE)
|
|
@Logging(menu = "用户启用/禁用", type = LogType.UPDATE)
|
|
@RequestMapping("/toggle")
|
|
@RequestMapping("/toggle")
|
|
@RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
|
|
@RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
|