|
@@ -51,7 +51,6 @@ import java.nio.charset.StandardCharsets;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.ForkJoinTask;
|
|
import java.util.concurrent.ForkJoinTask;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
-import java.util.function.Function;
|
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@@ -325,8 +324,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
|
|
TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
|
|
TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
|
|
JSONObject jsonObject = Objects.nonNull(tbTaskHistory.getRemark()) ? JSONObject.parseObject(tbTaskHistory.getRemark()) : null;
|
|
JSONObject jsonObject = Objects.nonNull(tbTaskHistory.getRemark()) ? JSONObject.parseObject(tbTaskHistory.getRemark()) : null;
|
|
Integer totalTaskSize = 1, currentTaskSize = 1, jsTotalTaskSize = 0, jsCurrentTaskSize = 0;
|
|
Integer totalTaskSize = 1, currentTaskSize = 1, jsTotalTaskSize = 0, jsCurrentTaskSize = 0;
|
|
- Long cloudMarkExamId = null;
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
+ Long cloudMarkExamId = null;
|
|
TEExam teExam = teExamService.cacheConvert(examCacheBean);
|
|
TEExam teExam = teExamService.cacheConvert(examCacheBean);
|
|
if (Objects.isNull(tbTaskHistory.getEntityId())) {
|
|
if (Objects.isNull(tbTaskHistory.getEntityId())) {
|
|
cloudMarkExamId = cloudMarkUtil.callExamSaveApi(new SaveExamParams(orgId, null, examCode, examCacheBean.getName(), DateUtil.format(new Date(examCacheBean.getStartTime()), Constants.DEFAULT_DATE_PATTERN)));
|
|
cloudMarkExamId = cloudMarkUtil.callExamSaveApi(new SaveExamParams(orgId, null, examCode, examCacheBean.getName(), DateUtil.format(new Date(examCacheBean.getStartTime()), Constants.DEFAULT_DATE_PATTERN)));
|
|
@@ -354,15 +355,26 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
|
|
|
|
|
|
|
|
|
|
Set<Long> examPaperIdSet = pushExamPaperLogic(map, jsonObject, totalTaskSize, jsCurrentTaskSize, currentTaskSize, cloudMarkExamId);
|
|
Set<Long> examPaperIdSet = pushExamPaperLogic(map, jsonObject, totalTaskSize, jsCurrentTaskSize, currentTaskSize, cloudMarkExamId);
|
|
- if (CollectionUtils.isEmpty(examPaperIdSet)) {
|
|
+
|
|
- throw new BusinessException("没有考试试卷信息");
|
|
+
|
|
- }
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
List<TEExamStudent> teExamStudentList = getExamStudentNeedMarkAll(map, jsonObject, teExam, examPaperIdSet, jsTotalTaskSize, jsCurrentTaskSize);
|
|
List<TEExamStudent> teExamStudentList = getExamStudentNeedMarkAll(map, jsonObject, teExam, examPaperIdSet, jsTotalTaskSize, jsCurrentTaskSize);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
List<TOeExamRecord> tOeExamRecordList = getExamRecordOnce(map, jsonObject, examPaperIdSet);
|
|
List<TOeExamRecord> tOeExamRecordList = getExamRecordOnce(map, jsonObject, examPaperIdSet);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
List<TOeExamRecord> tOeExamRecordManyList = tOeExamRecordService.findExamRecordNeedMarkAll(examId, examPaperIdSet, true);
|
|
List<TOeExamRecord> tOeExamRecordManyList = tOeExamRecordService.findExamRecordNeedMarkAll(examId, examPaperIdSet, true);
|
|
@@ -508,8 +520,12 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
|
|
Integer totalTaskSize = jsonObject.getInteger("totalTaskSize");
|
|
Integer totalTaskSize = jsonObject.getInteger("totalTaskSize");
|
|
Integer currentTaskSize = jsonObject.getInteger("currentTaskSize");
|
|
Integer currentTaskSize = jsonObject.getInteger("currentTaskSize");
|
|
|
|
|
|
- Map<Long, TOeExamRecord> tOeExamRecordMap = tOeExamRecordList.stream().collect(
|
|
+
|
|
- Collectors.toMap(TOeExamRecord::getExamStudentId, Function.identity(), (dto1, dto2) -> dto1));
|
|
+
|
|
|
|
+ LinkedMultiValueMap<Long, TOeExamRecord> tOeExamRecordMap = new LinkedMultiValueMap<>();
|
|
|
|
+ for (TOeExamRecord t : tOeExamRecordList) {
|
|
|
|
+ tOeExamRecordMap.add(t.getExamStudentId(), t);
|
|
|
|
+ }
|
|
|
|
|
|
Map<Long, Map<String, Integer>> paperStructMap = new HashMap<>();
|
|
Map<Long, Map<String, Integer>> paperStructMap = new HashMap<>();
|
|
List<File> recordJsonList = new ArrayList<>(teExamStudentList.size());
|
|
List<File> recordJsonList = new ArrayList<>(teExamStudentList.size());
|
|
@@ -530,35 +546,37 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
|
|
tbTaskHistory.setRemark(jsonObject.toJSONString());
|
|
tbTaskHistory.setRemark(jsonObject.toJSONString());
|
|
continue;
|
|
continue;
|
|
} else {
|
|
} else {
|
|
- TOeExamRecord tOeExamRecord = tOeExamRecordMap.get(t.getId());
|
|
+ List<TOeExamRecord> tOeExamRecordExamStudentList = tOeExamRecordMap.get(t.getId());
|
|
- if (Objects.isNull(tOeExamRecord)) {
|
|
+ if (CollectionUtils.isEmpty(tOeExamRecordExamStudentList)) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- String courseCode = t.getCourseCode() + SystemConstant.JOINT_MARK + tOeExamRecord.getPaperId();
|
|
+ for (TOeExamRecord tOeExamRecord : tOeExamRecordExamStudentList) {
|
|
- cloudMarkUtil.callStudentSaveApi(new SaveStudentParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()),
|
|
+ String courseCode = t.getCourseCode() + SystemConstant.JOINT_MARK + tOeExamRecord.getPaperId();
|
|
- t.getIdentity(),
|
|
+ cloudMarkUtil.callStudentSaveApi(new SaveStudentParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()),
|
|
- t.getName(),
|
|
+ t.getIdentity(),
|
|
- tbOrg.getName(),
|
|
+ t.getName(),
|
|
- Objects.isNull(t.getClassNo()) ? SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD : t.getClassNo(),
|
|
+ tbOrg.getName(),
|
|
- SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD,
|
|
+ Objects.isNull(t.getClassNo()) ? SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD : t.getClassNo(),
|
|
- courseCode,
|
|
+ SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD,
|
|
- t.getCourseName()));
|
|
+ courseCode,
|
|
- OpenRecordNeedMarkBean openRecordNeedMarkBean = GsonUtil.fromJson(GsonUtil.toJson(tOeExamRecord), OpenRecordNeedMarkBean.class);
|
|
+ t.getCourseName()));
|
|
- List<OpenRecordAnswerTempBean> answersTemp = examAnswerService.findByExamRecordId(tOeExamRecord.getId());
|
|
+ OpenRecordNeedMarkBean openRecordNeedMarkBean = GsonUtil.fromJson(GsonUtil.toJson(tOeExamRecord), OpenRecordNeedMarkBean.class);
|
|
- openRecordNeedMarkBean = SystemConstant.filterAnswer(openRecordNeedMarkBean, answersTemp, paperStructMap);
|
|
+ List<OpenRecordAnswerTempBean> answersTemp = examAnswerService.findByExamRecordId(tOeExamRecord.getId());
|
|
- if (!CollectionUtils.isEmpty(openRecordNeedMarkBean.getAnswers())) {
|
|
+ openRecordNeedMarkBean = SystemConstant.filterAnswer(openRecordNeedMarkBean, answersTemp, paperStructMap);
|
|
- File fileAnswerJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator + CloudMarkFileUploadTypeEnum.ANSWER.getCode() + File.separator + SystemConstant.getUuid() + SystemConstant.JSON_PREFIX);
|
|
+ if (!CollectionUtils.isEmpty(openRecordNeedMarkBean.getAnswers())) {
|
|
- if (!fileAnswerJson.exists()) {
|
|
+ File fileAnswerJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator + CloudMarkFileUploadTypeEnum.ANSWER.getCode() + File.separator + SystemConstant.getUuid() + SystemConstant.JSON_PREFIX);
|
|
- fileAnswerJson.getParentFile().mkdirs();
|
|
+ if (!fileAnswerJson.exists()) {
|
|
- fileAnswerJson.createNewFile();
|
|
+ fileAnswerJson.getParentFile().mkdirs();
|
|
|
|
+ fileAnswerJson.createNewFile();
|
|
|
|
+ }
|
|
|
|
+ IOUtils.write(JacksonUtil.parseJson(openRecordNeedMarkBean.getAnswers()).getBytes(SystemConstant.CHARSET_NAME), new FileOutputStream(fileAnswerJson));
|
|
|
|
+ recordJsonList.add(fileAnswerJson);
|
|
|
|
+ cloudMarkUtil.callFileUploadApi(new FileUploadParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()), fileAnswerJson, CloudMarkFileUploadTypeEnum.JSON));
|
|
}
|
|
}
|
|
- IOUtils.write(JacksonUtil.parseJson(openRecordNeedMarkBean.getAnswers()).getBytes(SystemConstant.CHARSET_NAME), new FileOutputStream(fileAnswerJson));
|
|
+ jsonObject.put("currentTaskSize", currentTaskSize);
|
|
- recordJsonList.add(fileAnswerJson);
|
|
+ currentTaskSize++;
|
|
- cloudMarkUtil.callFileUploadApi(new FileUploadParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()), fileAnswerJson, CloudMarkFileUploadTypeEnum.JSON));
|
|
+ tbTaskHistory.setRemark(jsonObject.toJSONString());
|
|
}
|
|
}
|
|
- jsonObject.put("currentTaskSize", currentTaskSize);
|
|
|
|
- currentTaskSize++;
|
|
|
|
- tbTaskHistory.setRemark(jsonObject.toJSONString());
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
progress = new BigDecimal(currentTaskSize).divide(new BigDecimal(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
|
|
progress = new BigDecimal(currentTaskSize).divide(new BigDecimal(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
|
|
@@ -629,6 +647,11 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
|
|
|
|
|
|
final double score = highestObjectiveScore;
|
|
final double score = highestObjectiveScore;
|
|
finalResult.addAll(tempResult.stream().filter(bean -> bean.getObjectiveScore() == score).collect(Collectors.toList()));
|
|
finalResult.addAll(tempResult.stream().filter(bean -> bean.getObjectiveScore() == score).collect(Collectors.toList()));
|
|
|
|
+ if (finalResult.size() > 1) {
|
|
|
|
+ TOeExamRecord tOeExamRecord = finalResult.stream().max((p1, p2) -> Long.compare(p1.getFinishTime(), p2.getFinishTime())).get();
|
|
|
|
+ finalResult.clear();
|
|
|
|
+ finalResult.add(tOeExamRecord);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case LATEST:
|
|
case LATEST:
|