|
@@ -1,5 +1,6 @@
|
|
|
package cn.com.qmth.stmms.api.controller.admin;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
@@ -35,6 +36,7 @@ import cn.com.qmth.stmms.admin.thread.MarkerResetThread;
|
|
|
import cn.com.qmth.stmms.api.controller.BaseApiController;
|
|
|
import cn.com.qmth.stmms.biz.config.service.impl.SystemCache;
|
|
|
import cn.com.qmth.stmms.biz.exam.bean.MarkerVo;
|
|
|
+import cn.com.qmth.stmms.biz.exam.bean.ResultMessage;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
@@ -46,6 +48,7 @@ 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.MarkerClassService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
+import cn.com.qmth.stmms.biz.exception.StatusException;
|
|
|
import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
|
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
@@ -60,7 +63,6 @@ import cn.com.qmth.stmms.biz.utils.PageUtil;
|
|
|
import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
|
-import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
import cn.com.qmth.stmms.common.enums.LogType;
|
|
|
import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
@@ -71,9 +73,11 @@ 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 net.sf.json.JSONArray;
|
|
|
-import net.sf.json.JSONObject;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import io.swagger.annotations.ApiParam;
|
|
|
|
|
|
+@Api(tags = "评卷员管理")
|
|
|
@Controller("adminMarkerController")
|
|
|
@RequestMapping("/api/admin/exam/marker")
|
|
|
public class MarkerController extends BaseApiController {
|
|
@@ -131,6 +135,7 @@ public class MarkerController extends BaseApiController {
|
|
|
@Value("${mark.group.delete}")
|
|
|
private String markDeleteCode;
|
|
|
|
|
|
+ @ApiOperation(value = "评卷员分页查询")
|
|
|
@Logging(menu = "评卷员查询", type = LogType.QUERY)
|
|
|
@ResponseBody
|
|
|
@RequestMapping(value = "list", method = RequestMethod.POST)
|
|
@@ -172,6 +177,7 @@ public class MarkerController extends BaseApiController {
|
|
|
return PageUtil.of(ret, query);
|
|
|
}
|
|
|
|
|
|
+ @ApiOperation(value = "重置是否弹窗确认")
|
|
|
@ResponseBody
|
|
|
@RequestMapping(value = "delete-check", method = RequestMethod.POST)
|
|
|
public Boolean deleteCheck(MarkerSearchQuery query) {
|
|
@@ -181,569 +187,365 @@ public class MarkerController extends BaseApiController {
|
|
|
return systemCache.isGroupDeleteWarn() ? true : school.isGroupDeleteCheck();
|
|
|
}
|
|
|
|
|
|
- // @RequestMapping("/query")
|
|
|
- // @ResponseBody
|
|
|
- // public JSONArray query(HttpServletRequest request, @RequestParam String
|
|
|
- // subjectCode,
|
|
|
- // @RequestParam(required = false) Integer groupNumber) {
|
|
|
- // int examId = getSessionExamId(request);
|
|
|
- // JSONArray array = new JSONArray();
|
|
|
- // MarkerSearchQuery query = new MarkerSearchQuery();
|
|
|
- // query.setExamId(examId);
|
|
|
- // query.setSubjectCode(subjectCode);
|
|
|
- // query.setGroupNumber(groupNumber);
|
|
|
- // query.setPageSize(Integer.MAX_VALUE);
|
|
|
- // List<Marker> list = markerService.findByQuery(query).getResult();
|
|
|
- // for (Marker marker : list) {
|
|
|
- // JSONObject obj = new JSONObject();
|
|
|
- // obj.accumulate("id", marker.getId());
|
|
|
- // User user = userService.findById(marker.getUserId());
|
|
|
- // obj.accumulate("loginName", user.getLoginName());
|
|
|
- // obj.accumulate("name", user.getName());
|
|
|
- // array.add(obj);
|
|
|
- // }
|
|
|
- // return array;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员回收任务", type = LogType.UPDATE)
|
|
|
- // @RequestMapping("/release")
|
|
|
- // @ResponseBody
|
|
|
- // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN
|
|
|
- // })
|
|
|
- // public JSONObject release(@RequestParam Integer[] ids) {
|
|
|
- // for (Integer id : ids) {
|
|
|
- // Marker marker = markerService.findById(id);
|
|
|
- // if (marker != null) {
|
|
|
- // try {
|
|
|
- // lockService.waitlock(LockType.MARKER, marker.getId());
|
|
|
- // markService.releaseByMarker(marker);
|
|
|
- // } catch (Exception e) {
|
|
|
- // log.error("release marker error", e);
|
|
|
- // } finally {
|
|
|
- // lockService.unlock(LockType.MARKER, marker.getId());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // JSONObject result = new JSONObject();
|
|
|
- // result.accumulate("success", true);
|
|
|
- // return result;
|
|
|
- // }
|
|
|
- //
|
|
|
- // // @RequestMapping("/batch-create")
|
|
|
- // // @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
- // // public String createInit(Model model, HttpServletRequest request,
|
|
|
- // // @RequestParam(required = false) String subjectCode,
|
|
|
- // // @RequestParam(required = false) Integer groupNumber) {
|
|
|
- // // int examId = getSessionExamId(request);
|
|
|
- // // model.addAttribute("subjectList", getExamSubject(examId,
|
|
|
- // // RequestUtils.getWebUser(request)));
|
|
|
- // // if (subjectCode != null) {
|
|
|
- // // model.addAttribute("subjectCode", subjectCode);
|
|
|
- // // model.addAttribute("groupList",
|
|
|
- // groupService.findByExamAndSubject(examId,
|
|
|
- // // subjectCode));
|
|
|
- // // if (groupNumber != null) {
|
|
|
- // // model.addAttribute("groupNumber", groupNumber);
|
|
|
- // // }
|
|
|
- // // } else {
|
|
|
- // // model.addAttribute("groupList", new ArrayList<MarkGroup>());
|
|
|
- // // }
|
|
|
- // // return "modules/exam/markerCreate";
|
|
|
- // // }
|
|
|
- //
|
|
|
- // // @Logging(menu = "创建评卷员", type = LogType.ADD)
|
|
|
- // // @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(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) {
|
|
|
- // // // markerService.batchCreate(subject, groupNumber, count, password);
|
|
|
- // // }
|
|
|
- // // view.addObject("subjectCode", subjectCode);
|
|
|
- // // if (groupNumber > 0) {
|
|
|
- // // view.addObject("groupNumber", groupNumber);
|
|
|
- // // }
|
|
|
- // // return view;
|
|
|
- // // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员重置", type = LogType.UPDATE)
|
|
|
- // @RequestMapping(value = "/reset", method = RequestMethod.POST)
|
|
|
- // @ResponseBody
|
|
|
- // @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
- // public JSONObject resetMarker(HttpServletRequest request, @RequestParam
|
|
|
- // Integer id,
|
|
|
- // @RequestParam(required = false) String deleteCode) {
|
|
|
- // Marker marker = markerService.findById(id);
|
|
|
- // JSONObject obj = new JSONObject();
|
|
|
- // int examId = getSessionExamId(request);
|
|
|
- // if (marker != null) {
|
|
|
- // Exam exam = examService.findById(examId);
|
|
|
- // School school = schoolService.findById(exam.getSchoolId());
|
|
|
- // boolean warn = systemCache.isGroupDeleteWarn() ? true :
|
|
|
- // school.isGroupDeleteCheck();
|
|
|
- // MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(),
|
|
|
- // marker.getGroupNumber());
|
|
|
- // if (warn && group.getLibraryCount() != 0 && group.getLeftCount() == 0
|
|
|
- // && !markDeleteCode.equals(deleteCode)) {
|
|
|
- // obj.accumulate("success", false);
|
|
|
- // obj.accumulate("message", "重置失败,授权码不正确");
|
|
|
- // return obj;
|
|
|
- // }
|
|
|
- // if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
- // obj.accumulate("success", false);
|
|
|
- // obj.accumulate("message", "重置失败,关联分组已关闭");
|
|
|
- // return obj;
|
|
|
- // }
|
|
|
- // if (lockService.trylock(LockType.MARKER_RESET, marker.getId())) {
|
|
|
- // taskExecutor.submit(new MarkerResetThread(marker, group, markService,
|
|
|
- // libraryService, trialService,
|
|
|
- // markerService, groupService, lockService));
|
|
|
- // obj.accumulate("success", true);
|
|
|
- // } else {
|
|
|
- // obj.accumulate("success", false);
|
|
|
- // obj.accumulate("message", "评卷员正在重置");
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // obj.accumulate("success", false);
|
|
|
- // obj.accumulate("message", "重置失败,该评卷员不存在");
|
|
|
- // }
|
|
|
- // return obj;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员禁用/启用", type = LogType.UPDATE)
|
|
|
- // @RequestMapping(value = "/toggle", method = RequestMethod.POST)
|
|
|
- // @ResponseBody
|
|
|
- // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN
|
|
|
- // })
|
|
|
- // public JSONObject toggle(@RequestParam Integer[] ids, @RequestParam
|
|
|
- // Boolean enable) {
|
|
|
- // for (Integer id : ids) {
|
|
|
- // Marker marker = markerService.findById(id);
|
|
|
- // if (marker != null) {
|
|
|
- // marker.setEnable(enable);
|
|
|
- // markerService.save(marker);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // JSONObject obj = new JSONObject();
|
|
|
- // obj.accumulate("success", true);
|
|
|
- // return obj;
|
|
|
- // }
|
|
|
- //
|
|
|
- // // @Logging(menu = "评卷员导出", type = LogType.EXPORT)
|
|
|
- // // @RequestMapping(value = "/export", method = RequestMethod.POST)
|
|
|
- // // public String exportFile(MarkerSearchQuery query, HttpServletRequest
|
|
|
- // // request, HttpServletResponse response,
|
|
|
- // // RedirectAttributes redirectAttributes) {
|
|
|
- // // WebUser wu = RequestUtils.getWebUser(request);
|
|
|
- // // int examId = getSessionExamId(request);
|
|
|
- // // query.setExamId(examId);
|
|
|
- // // try {
|
|
|
- // // query.setPageNumber(1);
|
|
|
- // // query.setPageSize(Integer.MAX_VALUE);
|
|
|
- // // query.setExamId(examId);
|
|
|
- // // query.orderById();
|
|
|
- // // subjectFilter(query, wu);
|
|
|
- // // String fileName = "评卷员账号.xlsx";
|
|
|
- // // query = markerService.findByQuery(query);
|
|
|
- // // for (Marker marker : query.getResult()) {
|
|
|
- // // ExamSubject subject = subjectService.find(examId,
|
|
|
- // // marker.getSubjectCode());
|
|
|
- // // if (subject != null) {
|
|
|
- // // marker.setSubjectName(subject.getCode() + "-" + subject.getName());
|
|
|
- // // } else {
|
|
|
- // // marker.setSubjectName("");
|
|
|
- // // }
|
|
|
- // // MarkGroup group = groupService.findOne(examId,
|
|
|
- // marker.getSubjectCode(),
|
|
|
- // // marker.getGroupNumber());
|
|
|
- // // if (group != null) {
|
|
|
- // //
|
|
|
- // group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
- // // group.getSubjectCode(), false, group.getNumber()));
|
|
|
- // // marker.setGroupName(group.getNumber() + "-" + group.getTitle());
|
|
|
- // // } else {
|
|
|
- // // marker.setGroupName("");
|
|
|
- // // }
|
|
|
- // // }
|
|
|
- // // new ExportExcel("评卷员数据",
|
|
|
- // // Marker.class).setDataList(query.getResult()).write(response,
|
|
|
- // // fileName).dispose();
|
|
|
- // // return null;
|
|
|
- // // } catch (Exception e) {
|
|
|
- // // addMessage(redirectAttributes, "导出评卷员失败!" + e.getMessage());
|
|
|
- // // }
|
|
|
- // // return "redirect:/admin/exam/marker?repage";
|
|
|
- // // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员重置密码", type = LogType.UPDATE)
|
|
|
- // @RequestMapping(value = "/reSetPassword", method = RequestMethod.POST)
|
|
|
- // @ResponseBody
|
|
|
- // public JSONObject reSetPassword(@RequestParam Integer[] ids,
|
|
|
- // @RequestParam String password) {
|
|
|
- // for (Integer id : ids) {
|
|
|
- // Marker marker = markerService.findById(id);
|
|
|
- // User user = userService.findById(marker.getUserId());
|
|
|
- // if (user == null) {
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // password = StringEscapeUtils.unescapeHtml(password);
|
|
|
- // user.setPassword(EncryptUtils.md5(password));
|
|
|
- // user.setRandomPassword(null);
|
|
|
- // user = userService.save(user);
|
|
|
- // }
|
|
|
- // JSONObject obj = new JSONObject();
|
|
|
- // obj.accumulate("success", true);
|
|
|
- // return obj;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员设置任务数量", type = LogType.UPDATE)
|
|
|
- // @RequestMapping(value = "/setTaskCount", method = RequestMethod.POST)
|
|
|
- // @ResponseBody
|
|
|
- // public JSONObject setTaskCount(@RequestParam Integer[] ids, @RequestParam
|
|
|
- // Integer taskCount) {
|
|
|
- // for (Integer id : ids) {
|
|
|
- // Marker marker = markerService.findById(id);
|
|
|
- // if (marker != null) {
|
|
|
- // marker.setTopCount(taskCount);
|
|
|
- // marker = markerService.save(marker);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // JSONObject obj = new JSONObject();
|
|
|
- // obj.accumulate("success", true);
|
|
|
- // 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";
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员导入", type = LogType.IMPORT_FILE)
|
|
|
- // @RequestMapping(value = "/import", method = RequestMethod.POST)
|
|
|
- // public String importFile(HttpServletRequest request, MultipartFile file,
|
|
|
- // RedirectAttributes redirectAttributes,
|
|
|
- // @RequestParam String subjectCode) {
|
|
|
- // int examId = getSessionExamId(request);
|
|
|
- // WebUser wu = RequestUtils.getWebUser(request);
|
|
|
- // Integer schoolId = wu.getUser().getSchoolId();
|
|
|
- // 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);
|
|
|
- //
|
|
|
- // Map<String, User> userMap = new HashMap<String, User>();
|
|
|
- // Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
|
|
|
- // Map<String, MarkGroup> groupMap = new HashMap<String, MarkGroup>();
|
|
|
- // Map<String, Marker> markerMap = new HashMap<String, Marker>();
|
|
|
- // for (Marker marker : list) {
|
|
|
- // if (StringUtils.isBlank(marker.getLoginName())) {
|
|
|
- // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
|
|
|
- // marker.getSubjectCode()
|
|
|
- // + MarkerExcelError.NAMENULL.getName());
|
|
|
- // failureNum++;
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // ExamSubject examSubject = subjectMap.get(marker.getSubjectCode());
|
|
|
- // if (examSubject == null) {
|
|
|
- // examSubject = subjectService.find(examId, marker.getSubjectCode());
|
|
|
- // if (examSubject == null) {
|
|
|
- // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
|
|
|
- // marker.getSubjectCode()
|
|
|
- // + MarkerExcelError.CODENULL.getName());
|
|
|
- // failureNum++;
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // MarkGroup markGroup = groupMap.get(marker.getSubjectCode() + "-" +
|
|
|
- // marker.getGroupNumber());
|
|
|
- // if (markGroup == null) {
|
|
|
- // markGroup = groupService.findOne(examId, marker.getSubjectCode(),
|
|
|
- // marker.getGroupNumber());
|
|
|
- // if (markGroup == null) {
|
|
|
- // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
|
|
|
- // marker.getSubjectCode()
|
|
|
- // + MarkerExcelError.GROUPNULL.getName());
|
|
|
- // failureNum++;
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // User user = userMap.get(marker.getLoginName().trim());
|
|
|
- // if (user == null) {
|
|
|
- // user = userService.findByLoginName(marker.getLoginName().trim());
|
|
|
- // if (user != null && !schoolId.equals(user.getSchoolId())) {
|
|
|
- // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
|
|
|
- // marker.getSubjectCode()
|
|
|
- // + MarkerExcelError.NAMEUSED.getName());
|
|
|
- // failureNum++;
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (user != null && !user.getRole().equals(Role.MARKER)) {
|
|
|
- // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
|
|
|
- // marker.getSubjectCode()
|
|
|
- // + MarkerExcelError.NAMENOTMARKER.getName());
|
|
|
- // failureNum++;
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // if (user == null) {
|
|
|
- // user = getUser(userMap, marker.getLoginName().trim(), schoolId);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // subjectMap.put(examSubject.getCode(), examSubject);
|
|
|
- // groupMap.put(markGroup.getSubjectCode() + "-" + markGroup.getNumber(),
|
|
|
- // markGroup);
|
|
|
- // marker = getMarker(markerMap, examId, examSubject.getCode(),
|
|
|
- // markGroup.getNumber(), user.getId());
|
|
|
- // }
|
|
|
- // List<Marker> saveList = new ArrayList<Marker>();
|
|
|
- // for (Marker m : markerMap.values()) {
|
|
|
- // saveList.add(m);
|
|
|
- // }
|
|
|
- // successNum = markerService.batchSave(saveList);
|
|
|
- // if (failureNum > 0) {
|
|
|
- // failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
|
|
|
- // }
|
|
|
- // String message = "已成功导入 " + successNum + " 条评卷员 ";
|
|
|
- // addMessage(redirectAttributes, message + failureMsg);
|
|
|
- // RequestUtils.setLog(request, message);
|
|
|
- // } catch (Exception e) {
|
|
|
- // log.error("Batch import marker error!", e);
|
|
|
- // if (StringUtils.isBlank(e.getMessage())) {
|
|
|
- // addMessage(redirectAttributes, "导入评卷员失败!");
|
|
|
- // } else {
|
|
|
- // addMessage(redirectAttributes, "导入评卷员失败!失败信息:" + e.getMessage());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // return "redirect:" + "/admin/exam/marker?subjectCode=" + subjectCode;
|
|
|
- // }
|
|
|
- //
|
|
|
- // private Marker getMarker(Map<String, Marker> markerMap, int examId,
|
|
|
- // String subjectCode, Integer groupNumber,
|
|
|
- // Integer userId) {
|
|
|
- // String key = examId + "-" + subjectCode + "-" + groupNumber + "-" +
|
|
|
- // userId;
|
|
|
- // Marker marker = markerMap.get(key);
|
|
|
- // if (marker == null) {
|
|
|
- // marker = markerService.findByExamAndSubjectAndNumberAndUserId(examId,
|
|
|
- // subjectCode, groupNumber, userId);
|
|
|
- // }
|
|
|
- // if (marker == null) {
|
|
|
- // marker = new Marker();
|
|
|
- // marker.setExamId(examId);
|
|
|
- // marker.setSubjectCode(subjectCode);
|
|
|
- // marker.setGroupNumber(groupNumber);
|
|
|
- // marker.setUserId(userId);
|
|
|
- // marker.setEnable(true);
|
|
|
- // }
|
|
|
- // markerMap.put(key, marker);
|
|
|
- // return marker;
|
|
|
- // }
|
|
|
- //
|
|
|
- // 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.setSource(UserSource.INTERNAL);
|
|
|
- // user.setSchoolId(schoolId);
|
|
|
- // user.setEnable(true);
|
|
|
- // user.setCreatedTime(new Date());
|
|
|
- // userService.save(user);
|
|
|
- // saveMap.put(loginName, user);
|
|
|
- // }
|
|
|
- // return user;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @RequestMapping("/save")
|
|
|
- // public String add(Model model, HttpServletRequest request,
|
|
|
- // UserSearchQuery query, @RequestParam String subjectCode,
|
|
|
- // @RequestParam Integer groupNumber) {
|
|
|
- // int examId = getSessionExamId(request);
|
|
|
- // Exam exam = examService.findById(examId);
|
|
|
- // query.setSchoolId(exam.getSchoolId());
|
|
|
- // query.setRole(Role.MARKER);
|
|
|
- // query = userService.findByQuery(query);
|
|
|
- // model.addAttribute("query", query);
|
|
|
- // model.addAttribute("subject", subjectService.find(examId, subjectCode));
|
|
|
- // model.addAttribute("group", groupService.findOne(examId, subjectCode,
|
|
|
- // groupNumber));
|
|
|
- // return "modules/exam/markerSubject";
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员绑定", type = LogType.ADD)
|
|
|
- // @RequestMapping(value = "/add", method = RequestMethod.POST)
|
|
|
- // public String save(@RequestParam String subjectCode, @RequestParam
|
|
|
- // Integer groupNumber,
|
|
|
- // @RequestParam Integer[] userIds, HttpServletRequest request,
|
|
|
- // RedirectAttributes redirectAttributes) {
|
|
|
- // int examId = getSessionExamId(request);
|
|
|
- // MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
|
|
|
- // if (group != null) {
|
|
|
- // markerService.save(group, userIds);
|
|
|
- // addMessage(redirectAttributes, "设置成功");
|
|
|
- // return "redirect:/admin/exam/marker?subjectCode=" + subjectCode +
|
|
|
- // "&groupNumber=" + groupNumber;
|
|
|
- // }
|
|
|
- // addMessage(redirectAttributes, "科目分组不存在");
|
|
|
- // return "redirect:/admin/exam/marker";
|
|
|
- // }
|
|
|
- //
|
|
|
- // @RequestMapping("/delete")
|
|
|
- // public String delete(@RequestParam Integer markerId, RedirectAttributes
|
|
|
- // redirectAttributes) {
|
|
|
- // Marker marker = markerService.findById(markerId);
|
|
|
- // if (marker == null) {
|
|
|
- // return "redirect:/admin/exam/marker";
|
|
|
- // }
|
|
|
- // long count = libraryService.countByMarker(markerId);
|
|
|
- // long trialCount =
|
|
|
- // trialService.countByMarkerIdAndMarkerScoreIsNotNull(markerId);
|
|
|
- // long rejectCount = rejectHistoryService.countByMarkerId(markerId);
|
|
|
- // int examId = marker.getExamId();
|
|
|
- // String subjectCode = marker.getSubjectCode();
|
|
|
- // Integer groupNumber = marker.getGroupNumber();
|
|
|
- // if (count > 0 || trialCount > 0 || rejectCount > 0) {
|
|
|
- // addMessage(redirectAttributes, "删除评卷员失败,该评卷员已开始评卷");
|
|
|
- // } else {
|
|
|
- // try {
|
|
|
- // lockService.watch(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
|
- // lockService.watch(LockType.GROUP, examId, subjectCode, groupNumber);
|
|
|
- // lockService.waitlock(LockType.MARKER, markerId);
|
|
|
- // markService.deleteMarker(marker);
|
|
|
- // } catch (Exception e) {
|
|
|
- // log.error("release marker error", e);
|
|
|
- // } finally {
|
|
|
- // lockService.unlock(LockType.MARKER, markerId);
|
|
|
- // lockService.unwatch(LockType.GROUP, examId, subjectCode, groupNumber);
|
|
|
- // lockService.unwatch(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // return "redirect:/admin/exam/marker?subjectCode=" + subjectCode +
|
|
|
- // "&groupNumber=" + groupNumber;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @RequestMapping(value = "/class/{markerId}", method = RequestMethod.GET)
|
|
|
- // public String classList(@PathVariable Integer markerId, Model model,
|
|
|
- // RedirectAttributes redirectAttributes) {
|
|
|
- // Marker marker = markerService.findById(markerId);
|
|
|
- // if (marker != null) {
|
|
|
- // marker.setUser(userService.findById(marker.getUserId()));
|
|
|
- // model.addAttribute("marker", marker);
|
|
|
- // Set<String> classes =
|
|
|
- // classService.findClassNameByUserIdAndExamId(marker.getUserId(),
|
|
|
- // marker.getExamId());
|
|
|
- // model.addAttribute("classes", classes);
|
|
|
- // return "modules/exam/markerClass";
|
|
|
- // }
|
|
|
- // addMessage(redirectAttributes, "评卷员不存在");
|
|
|
- // return "redirect:/admin/exam/marker";
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员班级绑定", type = LogType.UPDATE)
|
|
|
- // @RequestMapping(value = "/class/{markerId}", method = RequestMethod.POST)
|
|
|
- // public String classSave(@PathVariable Integer markerId,
|
|
|
- // @RequestParam(required = false) String[] classes,
|
|
|
- // Model model, RedirectAttributes redirectAttributes) {
|
|
|
- // Marker marker = markerService.findById(markerId);
|
|
|
- // if (marker != null) {
|
|
|
- // classService.save(marker.getUserId(), marker.getExamId(), classes);
|
|
|
- // addMessage(redirectAttributes, "保存成功");
|
|
|
- // return "redirect:" + "/admin/exam/marker?subjectCode=" +
|
|
|
- // marker.getSubjectCode() + "&groupNumber="
|
|
|
- // + marker.getGroupNumber();
|
|
|
- // }
|
|
|
- // addMessage(redirectAttributes, "评卷员不存在");
|
|
|
- // return "redirect:/admin/exam/marker";
|
|
|
- // }
|
|
|
- //
|
|
|
- // @Logging(menu = "评卷员班级清空", type = LogType.DELETE)
|
|
|
- // @RequestMapping(value = "/class/delete", method = RequestMethod.GET)
|
|
|
- // public String classDelete(@RequestParam Integer markerId, Model model,
|
|
|
- // RedirectAttributes redirectAttributes) {
|
|
|
- // Marker marker = markerService.findById(markerId);
|
|
|
- // if (marker != null) {
|
|
|
- // classService.deleteByUserIdAndExamId(marker.getUserId(),
|
|
|
- // marker.getExamId());
|
|
|
- // addMessage(redirectAttributes, "清空成功");
|
|
|
- // return "redirect:" + "/admin/exam/marker?subjectCode=" +
|
|
|
- // marker.getSubjectCode() + "&groupNumber="
|
|
|
- // + marker.getGroupNumber();
|
|
|
- // }
|
|
|
- // addMessage(redirectAttributes, "评卷员不存在");
|
|
|
- // return "redirect:/admin/exam/marker";
|
|
|
- // }
|
|
|
- //
|
|
|
- // // @RequestMapping(value = "/account/{markerId}")
|
|
|
- // // public String editAccount(HttpServletRequest request, Model model,
|
|
|
- // // RedirectAttributes redirectAttributes,
|
|
|
- // // @PathVariable Integer markerId) {
|
|
|
- // // Exam exam = examService.findById(getSessionExamId(request));
|
|
|
- // // Marker marker = markerService.findById(markerId);
|
|
|
- // // if (exam != null && marker != null &&
|
|
|
- // // exam.getId().equals(marker.getExamId())) {
|
|
|
- // // model.addAttribute("marker", marker);
|
|
|
- // // model.addAttribute("openAccountList",
|
|
|
- // // userService.listUnbindOpenAccount(exam.getSchoolId(),
|
|
|
- // // marker.getExamId(), marker.getSubjectCode(),
|
|
|
- // marker.getGroupNumber()));
|
|
|
- // // return "modules/exam/markerAccount";
|
|
|
- // // }
|
|
|
- // // addMessage(redirectAttributes, "评卷员不存在");
|
|
|
- // // return "redirect:/admin/exam/marker";
|
|
|
- // // }
|
|
|
- //
|
|
|
- // // @RequestMapping(value = "/account/bind", method = RequestMethod.POST)
|
|
|
- // // @ResponseBody
|
|
|
- // // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
|
|
|
- // // public boolean bindAccount(@RequestParam Integer markerId,
|
|
|
- // @RequestParam
|
|
|
- // // Integer accountId) {
|
|
|
- // // Marker marker = markerService.findById(markerId);
|
|
|
- // // if (marker == null) {
|
|
|
- // // return false;
|
|
|
- // // }
|
|
|
- // // OpenAccount oa = userService.findOpenAccount(accountId);
|
|
|
- // // if (oa == null || !oa.isEnable()) {
|
|
|
- // // return false;
|
|
|
- // // }
|
|
|
- // // if
|
|
|
- // //
|
|
|
- // (markerService.countByExamAndSubjectAndGroupAndOpenAccount(marker.getExamId(),
|
|
|
- // // marker.getSubjectCode(),
|
|
|
- // // marker.getGroupNumber(), accountId) == 0) {
|
|
|
- // // markerService.updateOpenAccountById(markerId, accountId);
|
|
|
- // // return true;
|
|
|
- // // }
|
|
|
- // // return false;
|
|
|
- // // }
|
|
|
- //
|
|
|
- // // @RequestMapping(value = "/account/unbind", method =
|
|
|
- // RequestMethod.POST)
|
|
|
- // // @ResponseBody
|
|
|
- // // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
|
|
|
- // // public boolean unbindOpenAccount(@RequestParam Integer markerId) {
|
|
|
- // // markerService.updateOpenAccountById(markerId, null);
|
|
|
- // // return true;
|
|
|
- // // }
|
|
|
+ @ApiOperation(value = "评卷员下拉列表")
|
|
|
+ @RequestMapping(value = "query", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public List<MarkerVo> query(@RequestParam String subjectCode, @RequestParam(required = false) Integer groupNumber) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ List<MarkerVo> array = new ArrayList<>();
|
|
|
+ MarkerSearchQuery query = new MarkerSearchQuery();
|
|
|
+ query.setExamId(examId);
|
|
|
+ query.setSubjectCode(subjectCode);
|
|
|
+ query.setGroupNumber(groupNumber);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
+ List<Marker> list = markerService.findByQuery(query).getResult();
|
|
|
+ for (Marker marker : list) {
|
|
|
+ MarkerVo obj = new MarkerVo();
|
|
|
+ obj.setId(marker.getId());
|
|
|
+ User user = userService.findById(marker.getUserId());
|
|
|
+ obj.setLoginName(user.getLoginName());
|
|
|
+ obj.setName(user.getName());
|
|
|
+ array.add(obj);
|
|
|
+ }
|
|
|
+ return array;
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "回收")
|
|
|
+ @Logging(menu = "评卷员回收任务", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "release", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
|
|
|
+ public ResultMessage release(@RequestParam Integer[] ids) {
|
|
|
+ for (Integer id : ids) {
|
|
|
+ Marker marker = markerService.findById(id);
|
|
|
+ if (marker != null) {
|
|
|
+ try {
|
|
|
+ lockService.waitlock(LockType.MARKER, marker.getId());
|
|
|
+ markService.releaseByMarker(marker);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("release marker error", e);
|
|
|
+ throw new RuntimeException("回收出错", e);
|
|
|
+ } finally {
|
|
|
+ lockService.unlock(LockType.MARKER, marker.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "评卷员重置")
|
|
|
+ @Logging(menu = "评卷员重置", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "reset", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
+ public ResultMessage resetMarker(@RequestParam Integer id,
|
|
|
+ @ApiParam("授权码") @RequestParam(required = false) String deleteCode) {
|
|
|
+ Marker marker = markerService.findById(id);
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ if (marker != null) {
|
|
|
+ Exam exam = examService.findById(examId);
|
|
|
+ School school = schoolService.findById(exam.getSchoolId());
|
|
|
+ boolean warn = systemCache.isGroupDeleteWarn() ? true : school.isGroupDeleteCheck();
|
|
|
+ MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ if (warn && group.getLibraryCount() != 0 && group.getLeftCount() == 0
|
|
|
+ && !markDeleteCode.equals(deleteCode)) {
|
|
|
+ throw new StatusException("重置失败,授权码不正确");
|
|
|
+ }
|
|
|
+ if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
+ throw new StatusException("重置失败,关联分组已关闭");
|
|
|
+ }
|
|
|
+ if (lockService.trylock(LockType.MARKER_RESET, marker.getId())) {
|
|
|
+ taskExecutor.submit(new MarkerResetThread(marker, group, markService, libraryService, trialService,
|
|
|
+ markerService, groupService, lockService));
|
|
|
+ return resultOk();
|
|
|
+ } else {
|
|
|
+ throw new StatusException("评卷员正在重置");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new StatusException("重置失败,该评卷员不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "评卷员禁用、启用")
|
|
|
+ @Logging(menu = "评卷员禁用/启用", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "toggle", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
|
|
|
+ public ResultMessage toggle(@RequestParam Integer[] ids, @RequestParam Boolean enable) {
|
|
|
+ for (Integer id : ids) {
|
|
|
+ Marker marker = markerService.findById(id);
|
|
|
+ if (marker != null) {
|
|
|
+ marker.setEnable(enable);
|
|
|
+ markerService.save(marker);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "重置密码")
|
|
|
+ @Logging(menu = "评卷员重置密码", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "reset-password", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public ResultMessage reSetPassword(@RequestParam Integer[] ids, @RequestParam String password) {
|
|
|
+ for (Integer id : ids) {
|
|
|
+ Marker marker = markerService.findById(id);
|
|
|
+ User user = userService.findById(marker.getUserId());
|
|
|
+ if (user == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ password = StringEscapeUtils.unescapeHtml(password);
|
|
|
+ user.setPassword(EncryptUtils.md5(password));
|
|
|
+ user.setRandomPassword(null);
|
|
|
+ user = userService.save(user);
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "设置任务数量")
|
|
|
+ @Logging(menu = "评卷员设置任务数量", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "set-task-count", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public ResultMessage setTaskCount(@RequestParam Integer[] ids, @RequestParam Integer taskCount) {
|
|
|
+ for (Integer id : ids) {
|
|
|
+ Marker marker = markerService.findById(id);
|
|
|
+ if (marker != null) {
|
|
|
+ marker.setTopCount(taskCount);
|
|
|
+ marker = markerService.save(marker);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ @ResponseBody
|
|
|
+ @ApiOperation(value = "导入模版下载")
|
|
|
+ @RequestMapping(value = "template", method = RequestMethod.POST)
|
|
|
+ public void importFileTemplate(HttpServletResponse response) {
|
|
|
+ String fileName = "评卷员数据导入模板.xlsx";
|
|
|
+ List<Marker> list = Lists.newArrayList();
|
|
|
+ list.add(new Marker());
|
|
|
+ try {
|
|
|
+ new ExportExcel("评卷员数据", Marker.class, 2).setDataList(list).write(response, fileName).dispose();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("导入模板下载失败", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @ResponseBody
|
|
|
+ @ApiOperation(value = "导入")
|
|
|
+ @Logging(menu = "评卷员导入", type = LogType.IMPORT_FILE)
|
|
|
+ @RequestMapping(value = "import", method = RequestMethod.POST)
|
|
|
+ public ResultMessage importFile(MultipartFile file, @RequestParam String subjectCode) {
|
|
|
+ ResultMessage ret = new ResultMessage();
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ ApiUser wu = RequestUtils.getApiUser();
|
|
|
+ Integer schoolId = wu.getUser().getSchoolId();
|
|
|
+ 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);
|
|
|
+
|
|
|
+ Map<String, User> userMap = new HashMap<String, User>();
|
|
|
+ Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
|
|
|
+ Map<String, MarkGroup> groupMap = new HashMap<String, MarkGroup>();
|
|
|
+ Map<String, Marker> markerMap = new HashMap<String, Marker>();
|
|
|
+ for (Marker marker : list) {
|
|
|
+ if (StringUtils.isBlank(marker.getLoginName())) {
|
|
|
+ failureMsg.append("\r\n评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
|
|
|
+ + MarkerExcelError.NAMENULL.getName());
|
|
|
+ failureNum++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ExamSubject examSubject = subjectMap.get(marker.getSubjectCode());
|
|
|
+ if (examSubject == null) {
|
|
|
+ examSubject = subjectService.find(examId, marker.getSubjectCode());
|
|
|
+ if (examSubject == null) {
|
|
|
+ failureMsg.append("\r\n评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
|
|
|
+ + MarkerExcelError.CODENULL.getName());
|
|
|
+ failureNum++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ MarkGroup markGroup = groupMap.get(marker.getSubjectCode() + "-" + marker.getGroupNumber());
|
|
|
+ if (markGroup == null) {
|
|
|
+ markGroup = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ if (markGroup == null) {
|
|
|
+ failureMsg.append("\r\n评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
|
|
|
+ + MarkerExcelError.GROUPNULL.getName());
|
|
|
+ failureNum++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ User user = userMap.get(marker.getLoginName().trim());
|
|
|
+ if (user == null) {
|
|
|
+ user = userService.findByLoginName(marker.getLoginName().trim());
|
|
|
+ if (user != null && !schoolId.equals(user.getSchoolId())) {
|
|
|
+ failureMsg.append("\r\n评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
|
|
|
+ + MarkerExcelError.NAMEUSED.getName());
|
|
|
+ failureNum++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (user != null && !user.getRole().equals(Role.MARKER)) {
|
|
|
+ failureMsg.append("\r\n评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
|
|
|
+ + MarkerExcelError.NAMENOTMARKER.getName());
|
|
|
+ failureNum++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (user == null) {
|
|
|
+ user = getUser(userMap, marker.getLoginName().trim(), schoolId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subjectMap.put(examSubject.getCode(), examSubject);
|
|
|
+ groupMap.put(markGroup.getSubjectCode() + "-" + markGroup.getNumber(), markGroup);
|
|
|
+ marker = getMarker(markerMap, examId, examSubject.getCode(), markGroup.getNumber(), user.getId());
|
|
|
+ }
|
|
|
+ List<Marker> saveList = new ArrayList<Marker>();
|
|
|
+ for (Marker m : markerMap.values()) {
|
|
|
+ saveList.add(m);
|
|
|
+ }
|
|
|
+ successNum = markerService.batchSave(saveList);
|
|
|
+ if (failureNum > 0) {
|
|
|
+ failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
|
|
|
+ }
|
|
|
+ String message = "已成功导入 " + successNum + " 条评卷员 ";
|
|
|
+ ret.setSuccess(true);
|
|
|
+ ret.setMessage(message + failureMsg);
|
|
|
+ RequestUtils.setLog(message);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("Batch import marker error!", e);
|
|
|
+ throw new RuntimeException("导入评卷员失败", e);
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Marker getMarker(Map<String, Marker> markerMap, int examId, String subjectCode, Integer groupNumber,
|
|
|
+ Integer userId) {
|
|
|
+ String key = examId + "-" + subjectCode + "-" + groupNumber + "-" + userId;
|
|
|
+ Marker marker = markerMap.get(key);
|
|
|
+ if (marker == null) {
|
|
|
+ marker = markerService.findByExamAndSubjectAndNumberAndUserId(examId, subjectCode, groupNumber, userId);
|
|
|
+ }
|
|
|
+ if (marker == null) {
|
|
|
+ marker = new Marker();
|
|
|
+ marker.setExamId(examId);
|
|
|
+ marker.setSubjectCode(subjectCode);
|
|
|
+ marker.setGroupNumber(groupNumber);
|
|
|
+ marker.setUserId(userId);
|
|
|
+ marker.setEnable(true);
|
|
|
+ }
|
|
|
+ markerMap.put(key, marker);
|
|
|
+ return marker;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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.setSource(UserSource.INTERNAL);
|
|
|
+ user.setSchoolId(schoolId);
|
|
|
+ user.setEnable(true);
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
+ userService.save(user);
|
|
|
+ saveMap.put(loginName, user);
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ @ResponseBody
|
|
|
+ @ApiOperation(value = "评卷员绑定")
|
|
|
+ @Logging(menu = "评卷员绑定", type = LogType.ADD)
|
|
|
+ @RequestMapping(value = "add", method = RequestMethod.POST)
|
|
|
+ public ResultMessage add(@RequestParam String subjectCode, @RequestParam Integer groupNumber,
|
|
|
+ @RequestParam Integer[] userIds) {
|
|
|
+ int examId = getSessionExamId();
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
|
|
|
+ if (group != null) {
|
|
|
+ markerService.save(group, userIds);
|
|
|
+ return resultOk();
|
|
|
+ } else {
|
|
|
+ throw new StatusException("科目分组不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @ApiOperation(value = "解绑")
|
|
|
+ @ResponseBody
|
|
|
+ @RequestMapping(value = "delete", method = RequestMethod.POST)
|
|
|
+ public ResultMessage delete(@RequestParam Integer markerId) {
|
|
|
+ Marker marker = markerService.findById(markerId);
|
|
|
+ if (marker == null) {
|
|
|
+ throw new StatusException("未找到评卷员信息");
|
|
|
+ }
|
|
|
+ long count = libraryService.countByMarker(markerId);
|
|
|
+ long trialCount = trialService.countByMarkerIdAndMarkerScoreIsNotNull(markerId);
|
|
|
+ long rejectCount = rejectHistoryService.countByMarkerId(markerId);
|
|
|
+ int examId = marker.getExamId();
|
|
|
+ String subjectCode = marker.getSubjectCode();
|
|
|
+ Integer groupNumber = marker.getGroupNumber();
|
|
|
+ if (count > 0 || trialCount > 0 || rejectCount > 0) {
|
|
|
+ throw new StatusException("删除评卷员失败,该评卷员已开始评卷");
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ lockService.watch(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
|
+ lockService.watch(LockType.GROUP, examId, subjectCode, groupNumber);
|
|
|
+ lockService.waitlock(LockType.MARKER, markerId);
|
|
|
+ markService.deleteMarker(marker);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("release marker error", e);
|
|
|
+ throw new RuntimeException("解绑出错", e);
|
|
|
+ } finally {
|
|
|
+ lockService.unlock(LockType.MARKER, markerId);
|
|
|
+ lockService.unwatch(LockType.GROUP, examId, subjectCode, groupNumber);
|
|
|
+ lockService.unwatch(LockType.EXAM_SUBJECT, examId, subjectCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultOk();
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * TODO
|
|
|
+ *
|
|
|
+ * @RequestMapping(value = "/class/{markerId}", method = RequestMethod.GET)
|
|
|
+ * public String classList(@PathVariable Integer markerId, Model model,
|
|
|
+ * RedirectAttributes redirectAttributes) { Marker marker =
|
|
|
+ * markerService.findById(markerId); if (marker != null) {
|
|
|
+ * marker.setUser(userService.findById(marker.getUserId()));
|
|
|
+ * model.addAttribute("marker", marker); Set<String> classes =
|
|
|
+ * classService.findClassNameByUserIdAndExamId(marker.getUserId(),
|
|
|
+ * marker.getExamId()); model.addAttribute("classes", classes); return
|
|
|
+ * "modules/exam/markerClass"; } addMessage(redirectAttributes, "评卷员不存在");
|
|
|
+ * return "redirect:/admin/exam/marker"; }
|
|
|
+ *
|
|
|
+ * @Logging(menu = "评卷员班级绑定", type = LogType.UPDATE)
|
|
|
+ *
|
|
|
+ * @RequestMapping(value = "/class/{markerId}", method = RequestMethod.POST)
|
|
|
+ * public String classSave(@PathVariable Integer
|
|
|
+ * markerId, @RequestParam(required = false) String[] classes, Model model,
|
|
|
+ * RedirectAttributes redirectAttributes) { Marker marker =
|
|
|
+ * markerService.findById(markerId); if (marker != null) {
|
|
|
+ * classService.save(marker.getUserId(), marker.getExamId(), classes);
|
|
|
+ * addMessage(redirectAttributes, "保存成功"); return "redirect:" +
|
|
|
+ * "/admin/exam/marker?subjectCode=" + marker.getSubjectCode() +
|
|
|
+ * "&groupNumber=" + marker.getGroupNumber(); }
|
|
|
+ * addMessage(redirectAttributes, "评卷员不存在"); return
|
|
|
+ * "redirect:/admin/exam/marker"; }
|
|
|
+ *
|
|
|
+ * @Logging(menu = "评卷员班级清空", type = LogType.DELETE)
|
|
|
+ *
|
|
|
+ * @RequestMapping(value = "/class/delete", method = RequestMethod.GET)
|
|
|
+ * public String classDelete(@RequestParam Integer markerId, Model model,
|
|
|
+ * RedirectAttributes redirectAttributes) { Marker marker =
|
|
|
+ * markerService.findById(markerId); if (marker != null) {
|
|
|
+ * classService.deleteByUserIdAndExamId(marker.getUserId(),
|
|
|
+ * marker.getExamId()); addMessage(redirectAttributes, "清空成功"); return
|
|
|
+ * "redirect:" + "/admin/exam/marker?subjectCode=" + marker.getSubjectCode()
|
|
|
+ * + "&groupNumber=" + marker.getGroupNumber(); }
|
|
|
+ * addMessage(redirectAttributes, "评卷员不存在"); return
|
|
|
+ * "redirect:/admin/exam/marker"; }
|
|
|
+ */
|
|
|
+
|
|
|
}
|