|
@@ -1,8 +1,9 @@
|
|
|
package cn.com.qmth.stmms.api.controller;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
@@ -20,32 +21,23 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
-import cn.com.qmth.stmms.admin.utils.PaperJsonUtils;
|
|
|
import cn.com.qmth.stmms.api.exception.ApiException;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.AnswerCardService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
-import cn.com.qmth.stmms.biz.file.enums.FormatType;
|
|
|
import cn.com.qmth.stmms.biz.file.service.FileService;
|
|
|
import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
import cn.com.qmth.stmms.common.domain.ApiUser;
|
|
|
+import cn.com.qmth.stmms.common.enums.CardSource;
|
|
|
import cn.com.qmth.stmms.common.enums.ExamStatus;
|
|
|
import cn.com.qmth.stmms.common.enums.ExamType;
|
|
|
-import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
|
|
|
import cn.com.qmth.stmms.common.enums.Role;
|
|
|
+import cn.com.qmth.stmms.common.utils.DateUtils;
|
|
|
import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
|
|
|
-import com.google.common.io.ByteStreams;
|
|
|
-
|
|
|
@Controller("cardController")
|
|
|
@RequestMapping("/api/card")
|
|
|
public class CardController extends BaseApiController {
|
|
@@ -62,109 +54,125 @@ public class CardController extends BaseApiController {
|
|
|
private ExamSubjectService subjectService;
|
|
|
|
|
|
@Autowired
|
|
|
- private ExamPackageService packageService;
|
|
|
-
|
|
|
- // private Exam validateExam(ApiUser au, Integer examId, ExamType... types)
|
|
|
- // {
|
|
|
- // Exam exam = examService.findById(examId);
|
|
|
- // if (exam == null || !exam.getSchoolId().equals(au.getSchoolId()) ||
|
|
|
- // exam.getStatus() != ExamStatus.START) {
|
|
|
- // throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
|
- // }
|
|
|
- // if (types != null && types.length > 0 &&
|
|
|
- // !Arrays.asList(types).contains(exam.getType())) {
|
|
|
- // throw ApiException.QUERY_PARAM_ERROR.replaceMessage("exam type invalid");
|
|
|
- // }
|
|
|
- // return exam;
|
|
|
- // }
|
|
|
- //
|
|
|
- // private ExamPackage validateExamPackage(Integer examId, String
|
|
|
- // packageCode) {
|
|
|
- // ExamPackage ep = packageService.find(examId, packageCode);
|
|
|
- // if (ep == null) {
|
|
|
- // throw
|
|
|
- // ApiException.QUERY_PARAM_ERROR.appendMessage(": packageCode error");
|
|
|
- // }
|
|
|
- // return ep;
|
|
|
- // }
|
|
|
- //
|
|
|
- // private ExamSubject validateExamSubject(Integer examId, String
|
|
|
- // subjectCode) {
|
|
|
- // ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
- // if (subject == null) {
|
|
|
- // throw
|
|
|
- // ApiException.QUERY_PARAM_ERROR.appendMessage(": subjectCode error");
|
|
|
- // }
|
|
|
- // return subject;
|
|
|
- // }
|
|
|
- //
|
|
|
- // private FormatType validateFormatType(FormatType type, FormatType...
|
|
|
- // types) {
|
|
|
- // if (type == null) {
|
|
|
- // throw
|
|
|
- // ApiException.FORMAT_TYPE_ERROR.replaceMessage("format type is null");
|
|
|
- // }
|
|
|
- // if (types != null && !Arrays.asList(types).contains(type)) {
|
|
|
- // throw ApiException.FORMAT_TYPE_ERROR;
|
|
|
- // }
|
|
|
- // return type;
|
|
|
- // }
|
|
|
- //
|
|
|
- // @RequestMapping(value = "/answer/save", method = RequestMethod.POST)
|
|
|
- // @RoleRequire({ Role.SCHOOL_ADMIN })
|
|
|
- // @ResponseBody
|
|
|
- // public JSONObject uploadSheet(HttpServletRequest request, @RequestParam
|
|
|
- // Integer examId,
|
|
|
- // @RequestParam(required = false) String subjectCode,
|
|
|
- // @RequestParam(required = false) Integer number,
|
|
|
- // @RequestParam String md5, @RequestParam MultipartFile file) {
|
|
|
- // ApiUser au = RequestUtils.getApiUser(request);
|
|
|
- // subjectCode = StringUtils.trimToNull(subjectCode);
|
|
|
- // Exam exam = validateExam(au, examId, ExamType.SCAN_IMAGE);
|
|
|
- // ExamSubject subject = subjectCode != null ? validateExamSubject(examId,
|
|
|
- // subjectCode) : null;
|
|
|
- // try {
|
|
|
- // if (subject != null) {
|
|
|
- // fileService.uploadCard(file.getInputStream(), md5, examId, subjectCode,
|
|
|
- // FormatType.JSON);
|
|
|
- // subject.setCardType(FormatType.JSON);
|
|
|
- // subjectService.save(subject);
|
|
|
- // uri = fileService.getCardUri(examId, subjectCode, format);
|
|
|
- // } else {
|
|
|
- // fileService.uploadCard(file.getInputStream(), md5, examId, format);
|
|
|
- // exam.setCardType(format);
|
|
|
- // examService.save(exam);
|
|
|
- // uri = fileService.getCardUri(examId, format);
|
|
|
- // }
|
|
|
- // } catch (Exception e) {
|
|
|
- // log.error("card upload error", e);
|
|
|
- // throw ApiException.FILE_UPLOAD_ERROR.replaceMessage("card upload error: "
|
|
|
- // + e.getMessage());
|
|
|
- // }
|
|
|
- // return result(true, fileService.getFileServer().concat(uri));
|
|
|
- // }
|
|
|
- //
|
|
|
- // @RequestMapping(value = "/answer/query", method = RequestMethod.POST)
|
|
|
- // @RoleRequire({ Role.SCHOOL_ADMIN })
|
|
|
- // @ResponseBody
|
|
|
- // public JSONObject answerQuery(HttpServletRequest request, @RequestParam
|
|
|
- // Integer examId, @RequestParam Integer number) {
|
|
|
- // ApiUser au = RequestUtils.getApiUser(request);
|
|
|
- // validateExam(au, examId, ExamType.SCAN_IMAGE);
|
|
|
- // ExamStudent student = validateExamStudent(examId, examNumber);
|
|
|
- // validateIndex(index);
|
|
|
- // try {
|
|
|
- // fileService.uploadSlice(file.getInputStream(), md5, examId,
|
|
|
- // student.getSecretNumber(), index);
|
|
|
- // } catch (Exception e) {
|
|
|
- // log.error("slice upload error", e);
|
|
|
- // throw
|
|
|
- // ApiException.FILE_UPLOAD_ERROR.replaceMessage("slice upload error: " +
|
|
|
- // e.getMessage());
|
|
|
- // }
|
|
|
- // return result(true,
|
|
|
- // fileService.getFileServer().concat(fileService.getSliceUri(examId,
|
|
|
- // student.getSecretNumber(), index)));
|
|
|
- // }
|
|
|
+ private AnswerCardService answerCardService;
|
|
|
+
|
|
|
+ private Exam validateExam(ApiUser au, Integer examId, ExamType... types) {
|
|
|
+ Exam exam = examService.findById(examId);
|
|
|
+ if (exam == null || !exam.getSchoolId().equals(au.getSchoolId()) || exam.getStatus() != ExamStatus.START) {
|
|
|
+ throw ApiException.EXAM_NOT_ACCESSIBLED;
|
|
|
+ }
|
|
|
+ if (types != null && types.length > 0 && !Arrays.asList(types).contains(exam.getType())) {
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.replaceMessage("exam type invalid");
|
|
|
+ }
|
|
|
+ return exam;
|
|
|
+ }
|
|
|
+
|
|
|
+ private ExamSubject validateExamSubject(Integer examId, String subjectCode) {
|
|
|
+ ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
+ if (subject == null) {
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.appendMessage(": subjectCode error");
|
|
|
+ }
|
|
|
+ return subject;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/answer/save", method = RequestMethod.POST)
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN })
|
|
|
+ @ResponseBody
|
|
|
+ public JSONObject answerCardSave(HttpServletRequest request, @RequestParam Integer examId,
|
|
|
+ @RequestParam(required = false) Integer number, @RequestParam(required = false) String subjectCode,
|
|
|
+ @RequestParam String source, @RequestParam Integer paperCount, @RequestParam Boolean singlePage,
|
|
|
+ @RequestParam Boolean needAdapte, @RequestParam(required = false) String parameter,
|
|
|
+ @RequestParam(required = false) String remark, @RequestParam String md5, @RequestParam MultipartFile file) {
|
|
|
+ ApiUser au = RequestUtils.getApiUser(request);
|
|
|
+ subjectCode = StringUtils.trimToNull(subjectCode);
|
|
|
+ validateExam(au, examId, ExamType.SCAN_IMAGE);
|
|
|
+ if (subjectCode != null) {
|
|
|
+ validateExamSubject(examId, subjectCode);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (number != null) {
|
|
|
+ fileService.uploadAnswerCard(file.getInputStream(), md5, examId, number);
|
|
|
+ } else {
|
|
|
+ number = answerCardService.findMaxNumberByExamId(examId) + 1;
|
|
|
+ fileService.uploadAnswerCard(file.getInputStream(), md5, examId, number);
|
|
|
+ }
|
|
|
+ AnswerCard card = answerCardService.findByExamIdAndNumber(examId, number);
|
|
|
+ if (card == null) {
|
|
|
+ card = new AnswerCard();
|
|
|
+ card.setExamId(examId);
|
|
|
+ card.setNumber(number);
|
|
|
+ }
|
|
|
+ card.setNeedAdapte(needAdapte);
|
|
|
+ card.setPaperCount(paperCount);
|
|
|
+ card.setParameter(parameter);
|
|
|
+ card.setRemark(remark);
|
|
|
+ card.setSinglePage(singlePage);
|
|
|
+ card.setSource(CardSource.valueOf(source));
|
|
|
+ card.setSubjectCode(subjectCode);
|
|
|
+ card.setUpdateTime(new Date());
|
|
|
+ answerCardService.save(card);
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ result.accumulate("number", number);
|
|
|
+ result.accumulate("updateTime", DateUtils.formatDateTime(new Date()));
|
|
|
+ return result;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("card upload error", e);
|
|
|
+ throw ApiException.FILE_UPLOAD_ERROR.replaceMessage("card upload error: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/answer/query", method = RequestMethod.POST)
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SCAN_ADMIN })
|
|
|
+ @ResponseBody
|
|
|
+ public JSONArray answerQuery(HttpServletRequest request, @RequestParam Integer examId,
|
|
|
+ @RequestParam(required = false) Integer number) {
|
|
|
+ ApiUser au = RequestUtils.getApiUser(request);
|
|
|
+ validateExam(au, examId, ExamType.SCAN_IMAGE);
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ List<AnswerCard> cards = new ArrayList<AnswerCard>();
|
|
|
+ if (number == null) {
|
|
|
+ cards = answerCardService.findByExamId(examId);
|
|
|
+ } else {
|
|
|
+ cards.add(answerCardService.findByExamIdAndNumber(examId, number));
|
|
|
+ }
|
|
|
+ for (AnswerCard answerCard : cards) {
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ result.accumulate("examId", answerCard.getExamId());
|
|
|
+ result.accumulate("number", answerCard.getNumber());
|
|
|
+ result.accumulate("subjectCode", StringUtils.trimToEmpty(answerCard.getSubjectCode()));
|
|
|
+ if (answerCard.getSubjectCode() != null) {
|
|
|
+ ExamSubject subject = subjectService.find(examId, answerCard.getSubjectCode());
|
|
|
+ result.accumulate("subjectName", subject.getName());
|
|
|
+ } else {
|
|
|
+ result.accumulate("subjectName", "");
|
|
|
+ }
|
|
|
+ result.accumulate("paperCount", answerCard.getPaperCount() == null ? "" : answerCard.getPaperCount());
|
|
|
+ result.accumulate("path", answerCard.getNumber());
|
|
|
+ result.accumulate("source", answerCard.getSource().toString());
|
|
|
+ result.accumulate("parameter", answerCard.getParameter());
|
|
|
+ result.accumulate("singlePage", answerCard.getSinglePage());
|
|
|
+ result.accumulate("remark", StringUtils.trimToEmpty(answerCard.getRemark()));
|
|
|
+ result.accumulate("updateTime", answerCard.getUpdateTime().getTime());
|
|
|
+ array.add(result);
|
|
|
+ }
|
|
|
+ return array;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/answer/delete", method = RequestMethod.POST)
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN })
|
|
|
+ @ResponseBody
|
|
|
+ public JSONObject answerDelete(HttpServletRequest request, @RequestParam Integer examId,
|
|
|
+ @RequestParam Integer number) {
|
|
|
+ ApiUser au = RequestUtils.getApiUser(request);
|
|
|
+ validateExam(au, examId, ExamType.SCAN_IMAGE);
|
|
|
+ AnswerCard card = answerCardService.findByExamIdAndNumber(examId, number);
|
|
|
+ if (card == null) {
|
|
|
+ throw ApiException.QUERY_PARAM_ERROR.appendMessage(": number error");
|
|
|
+ }
|
|
|
+ answerCardService.delete(card);
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ result.accumulate("updateTime", System.currentTimeMillis());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
}
|