|
@@ -0,0 +1,681 @@
|
|
|
|
+package cn.com.qmth.stmms.api.controller.admin;
|
|
|
|
+
|
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
|
+import java.util.*;
|
|
|
|
+
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.io.output.ByteArrayOutputStream;
|
|
|
|
+import org.apache.commons.lang.StringEscapeUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
|
+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 com.qmth.boot.core.collection.PageResult;
|
|
|
|
+import com.qmth.boot.core.exception.StatusException;
|
|
|
|
+import com.qmth.boot.tools.io.ZipWriter;
|
|
|
|
+
|
|
|
|
+import cn.com.qmth.stmms.admin.dto.MarkerDTO;
|
|
|
|
+import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
|
|
|
|
+import cn.com.qmth.stmms.api.controller.BaseApiController;
|
|
|
|
+import cn.com.qmth.stmms.biz.config.model.SystemAuth;
|
|
|
|
+import cn.com.qmth.stmms.biz.config.service.SystemAuthService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.UserStudentVo;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
|
+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.biz.utils.PageUtil;
|
|
|
|
+import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
|
+import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.*;
|
|
|
|
+import cn.com.qmth.stmms.common.utils.*;
|
|
|
|
+import net.sf.json.JSONObject;
|
|
|
|
+
|
|
|
|
+@Controller("adminUserController")
|
|
|
|
+@RequestMapping("/api/admin/user")
|
|
|
|
+public class UserController extends BaseApiController {
|
|
|
|
+
|
|
|
|
+ protected static final Logger log = LoggerFactory.getLogger(UserController.class);
|
|
|
|
+
|
|
|
|
+ public static Role[] ROLE_LIST = { Role.SCANNER, Role.SUBJECT_HEADER, Role.INSPECTOR, Role.MARKER,
|
|
|
|
+ Role.SCHOOL_VIEWER, Role.SCHOOL_ADMIN, Role.COLLEGE_ADMIN };
|
|
|
|
+
|
|
|
|
+ public static final String USER_PASSWORD = "123456";
|
|
|
|
+
|
|
|
|
+ public static final String SPLIT = ",";
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private UserService userService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MarkerService markerService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamSubjectService subjectService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private SubjectUserService subjectUserService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamStudentService studentService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamQuestionService questionService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MarkGroupService groupService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private SystemAuthService systemAuthService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MarkerClassService markerClassService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private UserStudentService userStudentService;
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/list", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ @Logging(menu = "查询用户", type = LogType.QUERY)
|
|
|
|
+ public PageResult<User> list(HttpServletRequest request, UserSearchQuery query) {
|
|
|
|
+ ApiUser user = RequestUtils.getApiUser(request);
|
|
|
|
+ query.setSchoolId(user.getSchoolId());
|
|
|
|
+ query = userService.findByQuery(query);
|
|
|
|
+ return PageUtil.of(query);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/role/list", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public List<Role> roleList() {
|
|
|
|
+ return Arrays.asList(ROLE_LIST);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/source/list", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public List<UserSource> sourceList() {
|
|
|
|
+ return Arrays.asList(UserSource.values());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/find", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public User findOne(HttpServletRequest request, @RequestParam Integer id) {
|
|
|
|
+ return userService.findById(id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/save", method = RequestMethod.POST)
|
|
|
|
+ @Logging(menu = "新增用户", type = LogType.ADD)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject save(HttpServletRequest request, UserSearchQuery query) {
|
|
|
|
+ return result(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/update", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ @Logging(menu = "修改用户", type = LogType.UPDATE)
|
|
|
|
+ public JSONObject update(HttpServletRequest request, UserSearchQuery query) {
|
|
|
|
+ return result(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "导出用户", type = LogType.EXPORT)
|
|
|
|
+ @RequestMapping(value = "/export", method = RequestMethod.POST)
|
|
|
|
+ public void exportFile(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "用户数据.xlsx";
|
|
|
|
+ User user = RequestUtils.getApiUser(request).getUser();
|
|
|
|
+ query.setSchoolId(user.getSchoolId());
|
|
|
|
+ query.setPageNumber(1);
|
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
|
+ query = userService.findByQuery(query);
|
|
|
|
+ for (User s : query.getResult()) {
|
|
|
|
+ s.setRoleName(s.getRole().getName());
|
|
|
|
+ }
|
|
|
|
+ new ExportExcel("用户数据", User.class).setDataList(query.getResult()).write(response, fileName).dispose();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导出用户数据失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "导出用户", type = LogType.EXPORT)
|
|
|
|
+ @RequestMapping(value = "/exportExam", method = RequestMethod.POST)
|
|
|
|
+ public void exportExam(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "用户数据.xlsx";
|
|
|
|
+ User user = RequestUtils.getApiUser(request).getUser();
|
|
|
|
+ query.setSchoolId(user.getSchoolId());
|
|
|
|
+ query.setPageNumber(1);
|
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ if (query.getRole() != null && query.getRole().equals(Role.MARKER)) {
|
|
|
|
+ Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
|
|
|
|
+ Map<String, MarkGroup> groupMap = new HashMap<String, MarkGroup>();
|
|
|
|
+ Map<String, String> collegeMap = new HashMap<String, String>();
|
|
|
|
+ MarkerSearchQuery mQuery = new MarkerSearchQuery();
|
|
|
|
+ mQuery.setExamId(examId);
|
|
|
|
+ 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();
|
|
|
|
+ ExamSubject subject = subjectMap.get(m.getSubjectCode());
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ subject = subjectService.find(examId, m.getSubjectCode());
|
|
|
|
+ subjectMap.put(m.getSubjectCode(), subject);
|
|
|
|
+ List<String> colleges = studentService.findDistinctCollegeBySubjectCode(examId,
|
|
|
|
+ m.getSubjectCode());
|
|
|
|
+ collegeMap.put(m.getSubjectCode(), StringUtils.join(colleges, SPLIT));
|
|
|
|
+ }
|
|
|
|
+ s.setSubjectCode(m.getSubjectCode());
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ new ExportExcel("评卷员数据", MarkerDTO.class).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ }
|
|
|
|
+ if (query.getRole() != null
|
|
|
|
+ && (query.getRole().equals(Role.SUBJECT_HEADER) || query.getRole().equals(Role.INSPECTOR))) {
|
|
|
|
+ List<SubjectUserDTO> list = new ArrayList<SubjectUserDTO>();
|
|
|
|
+ Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
|
|
|
|
+ Map<String, String> collegeMap = new HashMap<String, String>();
|
|
|
|
+ query = userService.findByQuery(query);
|
|
|
|
+ for (User u : query.getResult()) {
|
|
|
|
+ List<SubjectUser> subjectUsers = subjectUserService.findByUserId(u.getId());
|
|
|
|
+ if (!subjectUsers.isEmpty()) {
|
|
|
|
+ for (SubjectUser subjectUser : subjectUsers) {
|
|
|
|
+ SubjectUserDTO s = new SubjectUserDTO();
|
|
|
|
+ s.setRole(query.getRole().getName());
|
|
|
|
+ s.setLoginName(u.getLoginName());
|
|
|
|
+ s.setRandomPassword(u.getRandomPassword());
|
|
|
|
+ ExamSubject subject = subjectMap.get(subjectUser.getSubjectCode());
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ subject = subjectService.find(examId, subjectUser.getSubjectCode());
|
|
|
|
+ List<String> colleges = studentService.findDistinctCollegeBySubjectCode(examId,
|
|
|
|
+ subjectUser.getSubjectCode());
|
|
|
|
+ subjectMap.put(subjectUser.getSubjectCode(), subject);
|
|
|
|
+ collegeMap.put(subjectUser.getSubjectCode(), StringUtils.join(colleges, SPLIT));
|
|
|
|
+ }
|
|
|
|
+ if (subject != null) {
|
|
|
|
+ s.setSubjectCode(subjectUser.getSubjectCode());
|
|
|
|
+ s.setSubjectName(subject.getName());
|
|
|
|
+ s.setCollege(collegeMap.get(subjectUser.getSubjectCode()));
|
|
|
|
+ list.add(s);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ new ExportExcel("用户数据", SubjectUserDTO.class).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导出用户数据失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "导出用户", type = LogType.EXPORT)
|
|
|
|
+ @RequestMapping(value = "/exportSubject", method = RequestMethod.POST)
|
|
|
|
+ public void exportSubject(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ ApiUser wu = RequestUtils.getApiUser(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();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导出用户数据失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "用户启用/禁用", type = LogType.UPDATE)
|
|
|
|
+ @RequestMapping("/enable")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject toggle(HttpServletRequest request, @RequestParam List<Integer> ids,
|
|
|
|
+ @RequestParam Boolean enable) {
|
|
|
|
+ for (Integer id : ids) {
|
|
|
|
+ User user = userService.findById(id);
|
|
|
|
+ if (user == null) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ user.setEnable(enable);
|
|
|
|
+ markerService.updateEnableByUserId(id, enable);
|
|
|
|
+ userService.save(user);
|
|
|
|
+ }
|
|
|
|
+ return result(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "用户重置密码", type = LogType.UPDATE)
|
|
|
|
+ @RequestMapping(value = "/reset", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject reSetPassword(@RequestParam Integer[] ids, @RequestParam String password) {
|
|
|
|
+ for (Integer id : ids) {
|
|
|
|
+ User user = userService.findById(id);
|
|
|
|
+ if (user == null || UserSource.EXTERNAL.equals(user.getSource())) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ password = StringEscapeUtils.unescapeHtml(password);
|
|
|
|
+ user.setPassword(EncryptUtils.md5(password));
|
|
|
|
+ user.setRandomPassword(null);
|
|
|
|
+ user = userService.save(user);
|
|
|
|
+ }
|
|
|
|
+ return result(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "批量新增用户", type = LogType.ADD)
|
|
|
|
+ @RequestMapping(value = "/batchSave", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject batchSave(HttpServletRequest request, @RequestParam Role role,
|
|
|
|
+ @RequestParam(required = false) String password, @RequestParam Integer number,
|
|
|
|
+ @RequestParam String subjectCodeString, @RequestParam(required = false) Boolean random,
|
|
|
|
+ @RequestParam(required = false) String prefix) {
|
|
|
|
+ SystemAuth systemAuth = systemAuthService.findOne();
|
|
|
|
+ if (SystemAuthType.OFFLINE.equals(systemAuth.getType())) {
|
|
|
|
+ if (StringUtils.isBlank(prefix)) {
|
|
|
|
+ throw new StatusException("请填写自定义前缀");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ prefix = null;
|
|
|
|
+ }
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ if (Role.MARKER.equals(role)) {
|
|
|
|
+ int successNum = userService.batchSaveMarker(examId, getSubjectCodeSet(subjectCodeString), number, password,
|
|
|
|
+ random == null ? false : random, prefix);
|
|
|
|
+ String message = "已成功新增 " + successNum + " 条用户";
|
|
|
|
+ return result(message);
|
|
|
|
+ } else {
|
|
|
|
+ int successNum = userService.batchSaveSubjectUser(examId, role, getSubjectCodeSet(subjectCodeString),
|
|
|
|
+ number, password, random == null ? false : random, prefix);
|
|
|
|
+ String message = "已成功新增 " + successNum + " 条用户";
|
|
|
|
+ return result(message);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Set<String> getSubjectCodeSet(String subjectCodeString) {
|
|
|
|
+ Set<String> set = new HashSet<>();
|
|
|
|
+ try {
|
|
|
|
+ String[] values = StringUtils.split(subjectCodeString, SPLIT);
|
|
|
|
+ for (String value : values) {
|
|
|
|
+ value = StringUtils.trimToNull(value);
|
|
|
|
+ if (value != null) {
|
|
|
|
+ set.add(value);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ return set;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/student/template")
|
|
|
|
+ public void importStudentTemplate(HttpServletResponse response) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "绑定考生导入模板.xlsx";
|
|
|
|
+ String title = "绑定考生数据";
|
|
|
|
+ List<SubjectUser> list = new ArrayList<SubjectUser>();
|
|
|
|
+ list.add(new SubjectUser());
|
|
|
|
+ new ExportExcel(title, UserStudentVo.class, 2).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导入模板下载失败!失败信息:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/student/clear")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject studentClear(@RequestParam Integer id) {
|
|
|
|
+ userStudentService.clear(id);
|
|
|
|
+ return result(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/subject/template")
|
|
|
|
+ public void importFileTemplate(HttpServletResponse response, @RequestParam Boolean isHeader) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = isHeader ? "科组长数据导入模板.xlsx" : "复核员数据导入模板.xlsx";
|
|
|
|
+ String title = isHeader ? "科组长数据" : "复核员数据";
|
|
|
|
+ List<SubjectUser> list = new ArrayList<SubjectUser>();
|
|
|
|
+ list.add(new SubjectUser());
|
|
|
|
+ new ExportExcel(title, SubjectUser.class, 2).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导入模板下载失败!失败信息:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "科组长/查询员导入", type = LogType.IMPORT_FILE)
|
|
|
|
+ @RequestMapping(value = "/subject/import", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject importFile(HttpServletRequest request, MultipartFile file, @RequestParam Boolean isHeader) {
|
|
|
|
+ ApiUser wu = RequestUtils.getApiUser(request);
|
|
|
|
+ try {
|
|
|
|
+ int successNum = 0;
|
|
|
|
+ int failureNum = 0;
|
|
|
|
+ StringBuilder failureMsg = new StringBuilder();
|
|
|
|
+ ImportExcel ei = new ImportExcel(file, 1, 0);
|
|
|
|
+ List<SubjectUser> list = ei.getDataList(SubjectUser.class);
|
|
|
|
+
|
|
|
|
+ Map<String, User> userMap = new HashMap<String, User>();
|
|
|
|
+ List<SubjectUser> saveList = new ArrayList<SubjectUser>();
|
|
|
|
+ Integer schoolId = wu.getUser().getSchoolId();
|
|
|
|
+ for (SubjectUser subjectUser : list) {
|
|
|
|
+ if (org.apache.commons.lang.StringUtils.isBlank(subjectUser.getLoginName())) {
|
|
|
|
+ failureMsg.append("<br/> " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
|
|
|
|
+ + MarkerExcelError.NAMENULL.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ User user = userMap.get(subjectUser.getLoginName().trim());
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = userService.findByLoginName(subjectUser.getLoginName().trim());
|
|
|
|
+ if (user != null && !schoolId.equals(user.getSchoolId())) {
|
|
|
|
+ failureMsg.append("<br/>用户名 " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
|
|
|
|
+ + MarkerExcelError.NAMEUSED.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (user != null && isHeader && !user.getRole().equals(Role.SUBJECT_HEADER)) {
|
|
|
|
+ failureMsg.append(
|
|
|
|
+ "<br/>用户名 " + subjectUser.getLoginName() + MarkerExcelError.NAMENOTHEADER.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (user != null && !isHeader && !user.getRole().equals(Role.INSPECTOR)) {
|
|
|
|
+ failureMsg.append(
|
|
|
|
+ "<br/>用户名 " + subjectUser.getLoginName() + MarkerExcelError.NAMENOTHEADER.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = getUser(userMap, subjectUser.getLoginName().trim(), schoolId, isHeader);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ subjectUser = getSubjectUser(subjectUser.getSubjectCode(), user.getId());
|
|
|
|
+ saveList.add(subjectUser);
|
|
|
|
+ }
|
|
|
|
+ successNum = subjectUserService.batchSave(saveList);
|
|
|
|
+ if (failureNum > 0) {
|
|
|
|
+ failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
|
|
|
|
+ }
|
|
|
|
+ String message = "已成功导入 " + successNum + " 条 ";
|
|
|
|
+ RequestUtils.setLog(request, message);
|
|
|
|
+ return result(message);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导入用户失败!失败信息:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private SubjectUser getSubjectUser(String subjectCode, Integer userId) {
|
|
|
|
+ SubjectUser subjectUser = subjectUserService.findBySubjectCodeAndUserId(subjectCode, userId);
|
|
|
|
+ if (subjectUser == null) {
|
|
|
|
+ subjectUser = new SubjectUser();
|
|
|
|
+ subjectUser.setSubjectCode(subjectCode);
|
|
|
|
+ subjectUser.setUserId(userId);
|
|
|
|
+ }
|
|
|
|
+ return subjectUser;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId, boolean isHeader) {
|
|
|
|
+ User user = saveMap.get(loginName);
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = new User();
|
|
|
|
+ user.setLoginName(loginName);
|
|
|
|
+ user.setName(loginName);
|
|
|
|
+ user.setPassword(EncryptUtils.md5(USER_PASSWORD));
|
|
|
|
+ user.setRole(isHeader ? Role.SUBJECT_HEADER : Role.INSPECTOR);
|
|
|
|
+ user.setSchoolId(schoolId);
|
|
|
|
+ user.setEnable(true);
|
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
|
+ user.setSource(UserSource.INTERNAL);
|
|
|
|
+ userService.save(user);
|
|
|
|
+ saveMap.put(loginName, user);
|
|
|
|
+ }
|
|
|
|
+ return user;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping(value = "/class/template")
|
|
|
|
+ public void importFileTemplate(HttpServletResponse response) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "评卷员班级导入模板.xlsx";
|
|
|
|
+ List<MarkerClass> list = new ArrayList<MarkerClass>();
|
|
|
|
+ list.add(new MarkerClass());
|
|
|
|
+ new ExportExcel("评卷员班级数据", MarkerClass.class, 2).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error(e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导入模板下载失败!失败信息:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Logging(menu = "评卷员班级导入", type = LogType.IMPORT_FILE)
|
|
|
|
+ @RequestMapping(value = "/class/import", method = RequestMethod.POST)
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONObject importFile(HttpServletRequest request, MultipartFile file) {
|
|
|
|
+ ApiUser wu = RequestUtils.getApiUser(request);
|
|
|
|
+ try {
|
|
|
|
+ int successNum = 0;
|
|
|
|
+ int failureNum = 0;
|
|
|
|
+ StringBuilder failureMsg = new StringBuilder();
|
|
|
|
+ ImportExcel ei = new ImportExcel(file, 1, 0);
|
|
|
|
+ List<MarkerClass> list = ei.getDataList(MarkerClass.class);
|
|
|
|
+ Map<String, User> userMap = new HashMap<String, User>();
|
|
|
|
+ List<MarkerClass> saveList = new ArrayList<MarkerClass>();
|
|
|
|
+ Map<Integer, List<String>> classMap = new HashMap<Integer, List<String>>();
|
|
|
|
+ Map<String, MarkerClass> markerClassMap = new HashMap<String, MarkerClass>();
|
|
|
|
+ Integer schoolId = wu.getUser().getSchoolId();
|
|
|
|
+ for (MarkerClass markerClass : list) {
|
|
|
|
+ if (markerClass.getExamId() == null) {
|
|
|
|
+ failureMsg.append("<br/>用户名 " + markerClass.getLoginName() + MarkerExcelError.EXAMNULL.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (org.apache.commons.lang.StringUtils.isBlank(markerClass.getClassName())) {
|
|
|
|
+ failureMsg.append("<br/>用户名 " + markerClass.getLoginName() + MarkerExcelError.CLASSNULL.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ List<String> classes = classMap.get(markerClass.getExamId());
|
|
|
|
+ if (classes == null) {
|
|
|
|
+ classes = studentService.findDistinctClassName(markerClass.getExamId());
|
|
|
|
+ classMap.put(markerClass.getExamId(), classes);
|
|
|
|
+ }
|
|
|
|
+ if (!classes.contains(markerClass.getClassName())) {
|
|
|
|
+ failureMsg.append("<br/>考试 " + markerClass.getExamId() + " 班级 " + markerClass.getClassName()
|
|
|
|
+ + MarkerExcelError.EXAMCLASSNULL.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (org.apache.commons.lang.StringUtils.isBlank(markerClass.getLoginName())) {
|
|
|
|
+ failureMsg.append("<br/> " + markerClass.getLoginName() + MarkerExcelError.NAMENULL.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ User user = userMap.get(markerClass.getLoginName().trim());
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = userService.findByLoginName(markerClass.getLoginName().trim());
|
|
|
|
+ if (user != null && !schoolId.equals(user.getSchoolId())) {
|
|
|
|
+ failureMsg
|
|
|
|
+ .append("<br/>用户名 " + markerClass.getLoginName() + MarkerExcelError.NAMEUSED.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (user != null && !user.getRole().equals(Role.MARKER)) {
|
|
|
|
+ failureMsg.append(
|
|
|
|
+ "<br/>用户名 " + markerClass.getLoginName() + MarkerExcelError.NAMENOTMARKER.getName());
|
|
|
|
+ failureNum++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = getUser(userMap, markerClass.getLoginName().trim(), schoolId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ markerClass = getMarkerClass(user.getId(), markerClass.getExamId(), markerClass.getClassName(),
|
|
|
|
+ markerClassMap);
|
|
|
|
+ if (markerClass != null) {
|
|
|
|
+ saveList.add(markerClass);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ successNum = markerClassService.batchSave(saveList);
|
|
|
|
+ if (failureNum > 0) {
|
|
|
|
+ failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
|
|
|
|
+ }
|
|
|
|
+ String message = "已成功导入 " + successNum + " 条 ";
|
|
|
|
+ RequestUtils.setLog(request, message);
|
|
|
|
+ return result(message);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("Batch import user class error!", e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new StatusException("导入用户班级失败!失败信息:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private MarkerClass getMarkerClass(Integer userId, Integer examId, String className,
|
|
|
|
+ Map<String, MarkerClass> markerClassMap) {
|
|
|
|
+ MarkerClass m = markerClassMap.get(userId + "_" + examId + "_" + className);
|
|
|
|
+ if (m != null) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ m = markerClassService.findByUserIdAndExamIdAndClassName(userId, examId, className);
|
|
|
|
+ if (m == null) {
|
|
|
|
+ m = new MarkerClass(userId, examId, className);
|
|
|
|
+ }
|
|
|
|
+ markerClassMap.put(userId + "_" + examId + "_" + className, m);
|
|
|
|
+ return m;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
|
|
|
|
+ User user = saveMap.get(loginName);
|
|
|
|
+ if (user == null) {
|
|
|
|
+ user = new User();
|
|
|
|
+ user.setLoginName(loginName);
|
|
|
|
+ user.setName(loginName);
|
|
|
|
+ user.setPassword(EncryptUtils.md5(USER_PASSWORD));
|
|
|
|
+ user.setRole(Role.MARKER);
|
|
|
|
+ user.setSchoolId(schoolId);
|
|
|
|
+ user.setEnable(true);
|
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
|
+ user.setSource(UserSource.INTERNAL);
|
|
|
|
+ userService.save(user);
|
|
|
|
+ saveMap.put(loginName, user);
|
|
|
|
+ }
|
|
|
|
+ return user;
|
|
|
|
+ }
|
|
|
|
+}
|