MarkController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package cn.com.qmth.stmms.mark;
  2. import java.util.Date;
  3. import java.util.List;
  4. import javax.servlet.http.HttpServletRequest;
  5. import org.apache.commons.lang.StringUtils;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.RequestBody;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestMethod;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import org.springframework.web.servlet.ModelAndView;
  17. import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
  18. import cn.com.qmth.stmms.biz.exam.model.Marker;
  19. import cn.com.qmth.stmms.biz.exam.model.Tag;
  20. import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
  21. import cn.com.qmth.stmms.biz.exam.service.MarkerService;
  22. import cn.com.qmth.stmms.biz.exam.service.TagService;
  23. import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
  24. import cn.com.qmth.stmms.biz.mark.model.Task;
  25. import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
  26. import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
  27. import cn.com.qmth.stmms.biz.mark.service.TaskService;
  28. import cn.com.qmth.stmms.common.controller.BaseController;
  29. import cn.com.qmth.stmms.common.enums.ExamSubjectStatus;
  30. import cn.com.qmth.stmms.common.enums.LibraryStatus;
  31. import cn.com.qmth.stmms.common.session.model.StmmsSession;
  32. import cn.com.qmth.stmms.common.utils.RequestUtils;
  33. import net.sf.json.JSONArray;
  34. import net.sf.json.JSONObject;
  35. @Controller
  36. @RequestMapping("/mark")
  37. public class MarkController extends BaseController {
  38. private static Logger log = LoggerFactory.getLogger(MarkController.class);
  39. @Autowired
  40. private ExamSubjectService subjectService;
  41. @Autowired
  42. private MarkerService markerService;
  43. @Autowired
  44. private MarkLibraryService libraryService;
  45. @Autowired
  46. private TaskService taskService;
  47. @Autowired
  48. private TagService tagService;
  49. @Value("${slice.image.server}")
  50. private String sliceServer;
  51. @Value("${sheet.image.server}")
  52. private String sheetServer;
  53. @Value("${card.server}")
  54. private String cardServer;
  55. @Value("${app.index}")
  56. private String appIndex;
  57. @RequestMapping(value = "/reset", method = RequestMethod.GET)
  58. public ModelAndView reset(HttpServletRequest request) {
  59. Marker marker = RequestUtils.getWebUser(request).getMarker();
  60. ModelAndView modelAndView = new ModelAndView("modules/mark/reset");
  61. modelAndView.addObject("marker", marker);
  62. return modelAndView;
  63. }
  64. @RequestMapping(value = "/reset", method = RequestMethod.POST)
  65. public ModelAndView reset(HttpServletRequest request, Marker marker) {
  66. Marker current = RequestUtils.getWebUser(request).getMarker();
  67. current.setName(marker.getName());
  68. current.setPassword(marker.getPassword());
  69. current.setLastLoginIp(request.getRemoteAddr());
  70. current.setLastLoginTime(new Date());
  71. markerService.save(current);
  72. return new ModelAndView("redirect:/mark/index");
  73. }
  74. @RequestMapping(value = "/subject-select", method = RequestMethod.GET)
  75. public ModelAndView select(HttpServletRequest request) {
  76. Marker marker = RequestUtils.getWebUser(request).getMarker();
  77. ModelAndView modelAndView = new ModelAndView();
  78. if("aopeng".equals(appIndex)){
  79. modelAndView.setViewName("modules/mark/subjectSelectAp");
  80. }else{
  81. modelAndView.setViewName("modules/mark/subjectSelect");
  82. }
  83. modelAndView.addObject("marker", marker);
  84. modelAndView.addObject("subjectList",
  85. subjectService.list(marker.getExamId(), ExamSubjectStatus.MARKING, 0, 0, 0));
  86. if (StringUtils.isNotBlank(marker.getSubjectCode())) {
  87. clearCurrentTask(marker);
  88. }
  89. return modelAndView;
  90. }
  91. @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
  92. public ModelAndView select(HttpServletRequest request, @RequestParam String subjectCode) {
  93. Marker current = RequestUtils.getWebUser(request).getMarker();
  94. current.setSubjectCode(subjectCode);
  95. markerService.save(current);
  96. return new ModelAndView("redirect:/mark/index");
  97. }
  98. @RequestMapping("/index")
  99. public ModelAndView index(HttpServletRequest request, @RequestParam(value = "mode", required = false) String mode) {
  100. StmmsSession session = RequestUtils.getSession(request);
  101. Marker marker = RequestUtils.getWebUser(request).getMarker();
  102. ModelAndView modelAndView = getMarkModeView(marker, mode);
  103. preProcess(marker, session, modelAndView);
  104. return modelAndView;
  105. }
  106. private ModelAndView getMarkModeView(Marker marker, String mode) {
  107. if (StringUtils.isNotBlank(mode)) {
  108. marker.setMode(mode);
  109. }
  110. String view = null;
  111. if ("track".equals(marker.getMode())) {
  112. view = "modules/mark/markTrack";
  113. } else {
  114. marker.setMode("common");
  115. view = "modules/mark/markNew";
  116. }
  117. markerService.save(marker);
  118. return new ModelAndView(view);
  119. }
  120. @RequestMapping("/logout")
  121. public ModelAndView logout(HttpServletRequest request) {
  122. Marker marker = RequestUtils.getWebUser(request).getMarker();
  123. clearCurrentTask(marker);
  124. return new ModelAndView("redirect:/mark-logout");
  125. }
  126. /**
  127. * 进入评卷界面后的通用预处理
  128. *
  129. * @param marker
  130. * @param session
  131. * @param modelAndView
  132. * @param modelAndView
  133. */
  134. private void preProcess(Marker marker, StmmsSession session, ModelAndView modelAndView) {
  135. modelAndView.addObject("sliceServer", sliceServer);
  136. modelAndView.addObject("sheetServer", sheetServer);
  137. modelAndView.addObject("cardServer", cardServer);
  138. modelAndView.addObject("marker", marker);
  139. modelAndView.addObject("subject", subjectService.find(marker.getExamId(), marker.getSubjectCode()));
  140. clearCurrentTask(marker);
  141. }
  142. @RequestMapping("/clear")
  143. @ResponseBody
  144. public void clear(HttpServletRequest request) {
  145. Marker marker = RequestUtils.getWebUser(request).getMarker();
  146. if (marker != null) {
  147. // 清除该评卷员当前正在评卷的指定任务
  148. clearCurrentTask(marker);
  149. }
  150. }
  151. @RequestMapping("/status")
  152. @ResponseBody
  153. public JSONObject status(HttpServletRequest request) {
  154. JSONObject status = new JSONObject();
  155. Marker marker = RequestUtils.getWebUser(request).getMarker();
  156. ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
  157. if (subject == null || subject.getStatus() != ExamSubjectStatus.MARKING) {
  158. status.accumulate("valid", false);
  159. return status;
  160. }
  161. MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
  162. query.setExamId(marker.getExamId());
  163. query.setSubjectCode(marker.getSubjectCode());
  164. long totalCount = libraryService.countByQuery(query);
  165. query.setStatus(LibraryStatus.MARKED);
  166. long markedCount = libraryService.countByQuery(query);
  167. query.setMarkerId(marker.getId());
  168. long personCount = libraryService.countByQuery(query);
  169. status.accumulate("personCount", personCount);
  170. status.accumulate("totalCount", totalCount);
  171. status.accumulate("markedCount", markedCount);
  172. status.accumulate("exceptionCount", 0);
  173. status.accumulate("valid", totalCount > 0);
  174. return status;
  175. }
  176. @RequestMapping("/gettask")
  177. @ResponseBody
  178. public Task getTask(HttpServletRequest request) {
  179. Marker marker = RequestUtils.getWebUser(request).getMarker();
  180. Task task = getTask(marker);
  181. if (task == null) {
  182. task = new Task();
  183. task.setExist(false);
  184. task.setMessage("当前无评卷任务");
  185. }
  186. return task;
  187. }
  188. /**
  189. * 设置任务通用属性
  190. *
  191. * @param task
  192. * @param marker
  193. * @param stage
  194. * @param count
  195. * @param bmList
  196. */
  197. private void setTaskParameter(Task task, Marker marker) {
  198. task.setMarkId(marker.getId());
  199. task.setSpent(new Date().getTime());
  200. }
  201. private Task getTask(Marker marker) {
  202. int retry = 1;
  203. Task task = null;
  204. while (retry <= 5 && task == null) {
  205. List<MarkLibrary> list = libraryService.findByStatus(marker.getExamId(), marker.getSubjectCode(),
  206. LibraryStatus.WAITING, retry, 20);
  207. for (MarkLibrary library : list) {
  208. if (setCurrentTask(marker, library.getId())) {
  209. task = taskService.build(library);
  210. setTaskParameter(task, marker);
  211. break;
  212. }
  213. }
  214. if (task == null) {
  215. retry++;
  216. }
  217. }
  218. return task;
  219. }
  220. @RequestMapping(value = "/savetask", method = RequestMethod.POST)
  221. @ResponseBody
  222. public JSONObject saveTask(HttpServletRequest request, @RequestBody Task task) {
  223. Marker marker = RequestUtils.getWebUser(request).getMarker();
  224. JSONObject result = new JSONObject();
  225. try {
  226. if (taskService.submit(task)) {
  227. releaseCurrentTask(marker, task);
  228. result.accumulate("success", true);
  229. result.accumulate("status", status(request));
  230. } else {
  231. result.accumulate("success", false);
  232. }
  233. } catch (Exception e) {
  234. log.error("MarkController-保存任务出错", e);
  235. result.accumulate("success", false);
  236. }
  237. return result;
  238. }
  239. @RequestMapping("/gethistory")
  240. @ResponseBody
  241. public Object history(HttpServletRequest request, @RequestParam int pageNumber, @RequestParam int pageSize)
  242. throws Exception {
  243. Marker marker = RequestUtils.getWebUser(request).getMarker();
  244. // 查找给分任务历史
  245. MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
  246. query.setExamId(marker.getExamId());
  247. query.setSubjectCode(marker.getSubjectCode());
  248. query.setMarkerId(marker.getId());
  249. query.setStatus(LibraryStatus.MARKED);
  250. query.setPageNumber(pageNumber);
  251. query.setPageSize(pageSize);
  252. query.orderByMarkerTimeDesc();
  253. List<Task> list = taskService.findByQuery(query);
  254. for (Task task : list) {
  255. task.setPrevious(true);
  256. setTaskParameter(task, marker);
  257. }
  258. return list;
  259. }
  260. @RequestMapping("/change-name")
  261. @ResponseBody
  262. public JSONObject changeName(HttpServletRequest request, @RequestParam String name,@RequestParam(required = false) String password) {
  263. Marker marker = RequestUtils.getWebUser(request).getMarker();
  264. JSONObject result = new JSONObject();
  265. marker.setName(name);
  266. if(StringUtils.isNotEmpty(password)){
  267. marker.setPassword(password);
  268. }
  269. marker = markerService.save(marker);
  270. result.accumulate("success", marker != null);
  271. if (marker != null) {
  272. result.accumulate("name", marker.getName());
  273. }
  274. return result;
  275. }
  276. @RequestMapping("/tags")
  277. @ResponseBody
  278. public JSONArray getTags(HttpServletRequest request) {
  279. JSONArray array = new JSONArray();
  280. List<Tag> list = tagService.findAll();
  281. for (Tag tag : list) {
  282. JSONObject obj = new JSONObject();
  283. obj.accumulate("value", tag.getId());
  284. obj.accumulate("name", tag.getName());
  285. array.add(obj);
  286. }
  287. return array;
  288. }
  289. /**
  290. * 清除当前评卷员正在评卷的所有任务记录
  291. *
  292. * @param marker
  293. * @param task
  294. * @param session
  295. */
  296. private void clearCurrentTask(Marker marker) {
  297. taskService.clearCurrent(marker);
  298. }
  299. /**
  300. * 清除当前评卷员已给分的评卷任务
  301. *
  302. * @param marker
  303. * @param task
  304. * @param session
  305. */
  306. private void releaseCurrentTask(Marker marker, Task task) {
  307. taskService.removeCurrent(marker, task.getLibraryId());
  308. }
  309. /**
  310. * 尝试设置当前任务
  311. *
  312. * @param marker
  313. * @param libraryId
  314. * @return
  315. */
  316. private boolean setCurrentTask(Marker marker, int libraryId) {
  317. return taskService.setCurrent(marker, libraryId);
  318. }
  319. }