|
@@ -49,6 +49,8 @@ import cn.com.qmth.stmms.admin.thread.ScoreCalculateThread;
|
|
import cn.com.qmth.stmms.admin.thread.ScoreReportThread;
|
|
import cn.com.qmth.stmms.admin.thread.ScoreReportThread;
|
|
import cn.com.qmth.stmms.admin.vo.StructFile;
|
|
import cn.com.qmth.stmms.admin.vo.StructFile;
|
|
import cn.com.qmth.stmms.admin.vo.StructQuestion;
|
|
import cn.com.qmth.stmms.admin.vo.StructQuestion;
|
|
|
|
+import cn.com.qmth.stmms.biz.common.domain.card.AnswerCardSubjectFile;
|
|
|
|
+import cn.com.qmth.stmms.biz.common.domain.card.AnswerCardSubjectItem;
|
|
import cn.com.qmth.stmms.biz.common.domain.card.CardFile;
|
|
import cn.com.qmth.stmms.biz.common.domain.card.CardFile;
|
|
import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
|
|
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.Exam;
|
|
@@ -892,88 +894,49 @@ public class PaperController extends BaseExamController {
|
|
ZipReader zipReader = new ZipReader(target);
|
|
ZipReader zipReader = new ZipReader(target);
|
|
for (String subjectCode : zipReader.list(false)) {
|
|
for (String subjectCode : zipReader.list(false)) {
|
|
try {
|
|
try {
|
|
- ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
- if (subject == null) {
|
|
|
|
- error.add("[" + subjectCode + "] 科目代码不存在;");
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if (subject.getTotalScore() != 0) {
|
|
|
|
- error.add("[" + subjectCode + "] 科目代码已经存在题目;");
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- InputStream cardIns = zipReader.read(subjectCode, "card.json");
|
|
|
|
- CardFile cardFile = CardFile.parse(cardIns);
|
|
|
|
- if (cardFile.getPages().size() != 1 && cardFile.getPages().size() % 2 != 0) {
|
|
|
|
- error.add("[" + subjectCode + "] 科目代码卡格式解析有误;");
|
|
|
|
- }
|
|
|
|
- byte[] out = cardFile.output();
|
|
|
|
- String md5 = BinaryUtil.encodeMD5(out);
|
|
|
|
- AnswerCard card = answerCardService.findByExamIdAndSubjectCode(examId, subject.getCode(),
|
|
|
|
- CardSource.WEB);
|
|
|
|
- if (card == null) {
|
|
|
|
- card = new AnswerCard();
|
|
|
|
- card.setExamId(examId);
|
|
|
|
- Integer number = answerCardService.findMaxNumberByExamId(examId) + 1;
|
|
|
|
- card.setNumber(number);
|
|
|
|
- }
|
|
|
|
- card.setMd5(md5);
|
|
|
|
- card.setNeedAdapte(true);
|
|
|
|
- card.setSliceConfig(cardFile.getSliceConfig().toString());
|
|
|
|
- card.setSinglePage(cardFile.getPages().size() == 1);
|
|
|
|
- card.setPaperCount(card.getSinglePage() ? 1 : cardFile.getPages().size() / 2);
|
|
|
|
- card.setSource(CardSource.WEB);
|
|
|
|
- card.setUpdateTime(new Date());
|
|
|
|
- answerCardService.save(card, subjectCode);
|
|
|
|
-
|
|
|
|
- fileService.uploadAnswerCard(new ByteArrayInputStream(out), md5, examId, card.getNumber());
|
|
|
|
- subject.setSliceConfig(cardFile.getSliceConfig().toString());
|
|
|
|
- subject.setCardType(FormatType.JSON);
|
|
|
|
- subjectService.save(subject);
|
|
|
|
-
|
|
|
|
- InputStream structIns = zipReader.read(subjectCode, "struct.json");
|
|
|
|
- StructFile structFile = StructFile.parse(structIns);
|
|
|
|
- if (!structFile.getObjective().isEmpty()) {
|
|
|
|
- List<ExamQuestion> oList = new ArrayList<ExamQuestion>();
|
|
|
|
- for (StructQuestion structQuestion : structFile.getObjective()) {
|
|
|
|
- ExamQuestion q = structQuestion.transform();
|
|
|
|
- q.setPaperType(structFile.getPaperType());
|
|
|
|
- q.setExamId(examId);
|
|
|
|
- q.setSubjectCode(subject.getCode());
|
|
|
|
- q.setObjective(true);
|
|
|
|
- oList.add(q);
|
|
|
|
- }
|
|
|
|
- questionService.save(oList);
|
|
|
|
- examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
|
|
- subjectService.updateScore(examId, subject.getCode(), true,
|
|
|
|
- questionService.sumTotalScore(examId, subject.getCode(), true));
|
|
|
|
- }
|
|
|
|
- if (!structFile.getSubjective().isEmpty()) {
|
|
|
|
- List<ExamQuestion> sList = new ArrayList<ExamQuestion>();
|
|
|
|
- Map<Integer, Double> mainMap = new HashMap<Integer, Double>();
|
|
|
|
- for (StructQuestion structQuestion : structFile.getSubjective()) {
|
|
|
|
- ExamQuestion q = structQuestion.transform();
|
|
|
|
- q.setPaperType(structFile.getPaperType());
|
|
|
|
- q.setExamId(examId);
|
|
|
|
- q.setSubjectCode(subject.getCode());
|
|
|
|
- q.setObjective(false);
|
|
|
|
- q.setGroupNumber(q.getMainNumber());
|
|
|
|
- sList.add(q);
|
|
|
|
- Double totalScore = mainMap.get(q.getMainNumber());
|
|
|
|
- if (totalScore == null) {
|
|
|
|
- mainMap.put(q.getMainNumber(), q.getTotalScore());
|
|
|
|
- } else {
|
|
|
|
- mainMap.put(q.getMainNumber(), totalScore + q.getTotalScore());
|
|
|
|
|
|
+ if (subjectCode.equalsIgnoreCase("cards")) {
|
|
|
|
+ InputStream ins = zipReader.read(subjectCode, "description.json");
|
|
|
|
+ List<AnswerCardSubjectFile> courseList = AnswerCardSubjectFile.parse(ins);
|
|
|
|
+ for (AnswerCardSubjectFile answerCardSubjectFile : courseList) {
|
|
|
|
+ InputStream cardIns = zipReader
|
|
|
|
+ .read(subjectCode, answerCardSubjectFile.getCode() + ".json");
|
|
|
|
+ CardFile cardFile = CardFile.parse(cardIns);
|
|
|
|
+ if (cardFile.getPages().size() != 1 && cardFile.getPages().size() % 2 != 0) {
|
|
|
|
+ error.add("[" + subjectCode + "] 科目代码卡格式解析有误;");
|
|
}
|
|
}
|
|
|
|
+ byte[] out = cardFile.output();
|
|
|
|
+ String md5 = BinaryUtil.encodeMD5(out);
|
|
|
|
+ AnswerCard card = answerCardService.findByExamIdAndCode(examId,
|
|
|
|
+ answerCardSubjectFile.getCode());
|
|
|
|
+ if (card == null) {
|
|
|
|
+ card = new AnswerCard();
|
|
|
|
+ card.setExamId(examId);
|
|
|
|
+ Integer number = answerCardService.findMaxNumberByExamId(examId) + 1;
|
|
|
|
+ card.setNumber(number);
|
|
|
|
+ }
|
|
|
|
+ card.setMd5(md5);
|
|
|
|
+ card.setNeedAdapte(true);
|
|
|
|
+ card.setSliceConfig(cardFile.getSliceConfig().toString());
|
|
|
|
+ card.setSinglePage(cardFile.getPages().size() == 1);
|
|
|
|
+ card.setPaperCount(card.getSinglePage() ? 1 : cardFile.getPages().size() / 2);
|
|
|
|
+ card.setSource(CardSource.WEB);
|
|
|
|
+ card.setUpdateTime(new Date());
|
|
|
|
+ List<String> asList = new ArrayList<String>();
|
|
|
|
+ for (AnswerCardSubjectItem item : answerCardSubjectFile.getCourses()) {
|
|
|
|
+ ExamSubject subject = subjectService.find(examId, item.getCode());
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ error.add("[" + item.getCode() + "] 科目代码不存在;");
|
|
|
|
+ }
|
|
|
|
+ if (answerCardService.hasSubject(examId, item.getCode(), item.getCode())) {
|
|
|
|
+ error.add("[" + item.getCode() + "] 科目代码已经绑定卡格式;");
|
|
|
|
+ } else {
|
|
|
|
+ asList.add(item.getCode());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ answerCardService.save(card, asList);
|
|
}
|
|
}
|
|
- questionService.save(sList);
|
|
|
|
- for (Integer number : mainMap.keySet()) {
|
|
|
|
- MarkGroup group = new MarkGroup(examId, subject.getCode(), number, null,
|
|
|
|
- mainMap.get(number), null, null, null, null, 0, false, false, null, false);
|
|
|
|
- group.setPicList(cardFile.getMarkConfigAdd(cardFile.getMarkConfig(number), 0.015));
|
|
|
|
- groupService.save(group);
|
|
|
|
- }
|
|
|
|
- subjectService.updateScore(examId, subject.getCode(), false,
|
|
|
|
- questionService.sumTotalScore(examId, subject.getCode(), false));
|
|
|
|
|
|
+ } else {
|
|
|
|
+ error = this.parseSubject(examId, subjectCode, error, zipReader);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("parse zip data error", e);
|
|
log.error("parse zip data error", e);
|
|
@@ -990,4 +953,92 @@ public class PaperController extends BaseExamController {
|
|
}
|
|
}
|
|
return "redirect:/admin/exam/paper";
|
|
return "redirect:/admin/exam/paper";
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private List<String> parseSubject(int examId, String subjectCode, List<String> error, ZipReader zipReader)
|
|
|
|
+ throws Exception {
|
|
|
|
+ ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ error.add("[" + subjectCode + "] 科目代码不存在;");
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
|
|
+ if (subject.getTotalScore() != 0) {
|
|
|
|
+ error.add("[" + subjectCode + "] 科目代码已经存在题目;");
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
|
|
+ InputStream cardIns = zipReader.read(subjectCode, "card.json");
|
|
|
|
+ CardFile cardFile = CardFile.parse(cardIns);
|
|
|
|
+ if (cardFile.getPages().size() != 1 && cardFile.getPages().size() % 2 != 0) {
|
|
|
|
+ error.add("[" + subjectCode + "] 科目代码卡格式解析有误;");
|
|
|
|
+ }
|
|
|
|
+ byte[] out = cardFile.output();
|
|
|
|
+ String md5 = BinaryUtil.encodeMD5(out);
|
|
|
|
+ AnswerCard card = answerCardService.findByExamIdAndSubjectCode(examId, subject.getCode(), CardSource.WEB);
|
|
|
|
+ if (card == null) {
|
|
|
|
+ card = new AnswerCard();
|
|
|
|
+ card.setExamId(examId);
|
|
|
|
+ Integer number = answerCardService.findMaxNumberByExamId(examId) + 1;
|
|
|
|
+ card.setNumber(number);
|
|
|
|
+ }
|
|
|
|
+ card.setMd5(md5);
|
|
|
|
+ card.setNeedAdapte(true);
|
|
|
|
+ card.setSliceConfig(cardFile.getSliceConfig().toString());
|
|
|
|
+ card.setSinglePage(cardFile.getPages().size() == 1);
|
|
|
|
+ card.setPaperCount(card.getSinglePage() ? 1 : cardFile.getPages().size() / 2);
|
|
|
|
+ card.setSource(CardSource.WEB);
|
|
|
|
+ card.setUpdateTime(new Date());
|
|
|
|
+ answerCardService.save(card, subjectCode);
|
|
|
|
+
|
|
|
|
+ fileService.uploadAnswerCard(new ByteArrayInputStream(out), md5, examId, card.getNumber());
|
|
|
|
+ subject.setSliceConfig(cardFile.getSliceConfig().toString());
|
|
|
|
+ subject.setCardType(FormatType.JSON);
|
|
|
|
+ subjectService.save(subject);
|
|
|
|
+
|
|
|
|
+ InputStream structIns = zipReader.read(subjectCode, "struct.json");
|
|
|
|
+ StructFile structFile = StructFile.parse(structIns);
|
|
|
|
+ if (!structFile.getObjective().isEmpty()) {
|
|
|
|
+ List<ExamQuestion> oList = new ArrayList<ExamQuestion>();
|
|
|
|
+ for (StructQuestion structQuestion : structFile.getObjective()) {
|
|
|
|
+ ExamQuestion q = structQuestion.transform();
|
|
|
|
+ q.setPaperType(structFile.getPaperType());
|
|
|
|
+ q.setExamId(examId);
|
|
|
|
+ q.setSubjectCode(subject.getCode());
|
|
|
|
+ q.setObjective(true);
|
|
|
|
+ oList.add(q);
|
|
|
|
+ }
|
|
|
|
+ questionService.save(oList);
|
|
|
|
+ examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
|
|
+ subjectService.updateScore(examId, subject.getCode(), true,
|
|
|
|
+ questionService.sumTotalScore(examId, subject.getCode(), true));
|
|
|
|
+ }
|
|
|
|
+ if (!structFile.getSubjective().isEmpty()) {
|
|
|
|
+ List<ExamQuestion> sList = new ArrayList<ExamQuestion>();
|
|
|
|
+ Map<Integer, Double> mainMap = new HashMap<Integer, Double>();
|
|
|
|
+ for (StructQuestion structQuestion : structFile.getSubjective()) {
|
|
|
|
+ ExamQuestion q = structQuestion.transform();
|
|
|
|
+ q.setPaperType(structFile.getPaperType());
|
|
|
|
+ q.setExamId(examId);
|
|
|
|
+ q.setSubjectCode(subject.getCode());
|
|
|
|
+ q.setObjective(false);
|
|
|
|
+ q.setGroupNumber(q.getMainNumber());
|
|
|
|
+ sList.add(q);
|
|
|
|
+ Double totalScore = mainMap.get(q.getMainNumber());
|
|
|
|
+ if (totalScore == null) {
|
|
|
|
+ mainMap.put(q.getMainNumber(), q.getTotalScore());
|
|
|
|
+ } else {
|
|
|
|
+ mainMap.put(q.getMainNumber(), totalScore + q.getTotalScore());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ questionService.save(sList);
|
|
|
|
+ for (Integer number : mainMap.keySet()) {
|
|
|
|
+ MarkGroup group = new MarkGroup(examId, subject.getCode(), number, null, mainMap.get(number), null,
|
|
|
|
+ null, null, null, 0, false, false, null, false);
|
|
|
|
+ group.setPicList(cardFile.getMarkConfigAdd(cardFile.getMarkConfig(number), 0.015));
|
|
|
|
+ groupService.save(group);
|
|
|
|
+ }
|
|
|
|
+ subjectService.updateScore(examId, subject.getCode(), false,
|
|
|
|
+ questionService.sumTotalScore(examId, subject.getCode(), false));
|
|
|
|
+ }
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|