|
@@ -1,11 +1,14 @@
|
|
|
package com.qmth.distributed.print.api;
|
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.google.gson.reflect.TypeToken;
|
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
|
import com.qmth.boot.api.exception.ApiException;
|
|
|
import com.qmth.distributed.print.business.bean.excel.ExcelField;
|
|
|
+import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
|
|
|
import com.qmth.distributed.print.business.bean.result.EditResult;
|
|
|
import com.qmth.distributed.print.business.entity.TCFinalScore;
|
|
|
+import com.qmth.distributed.print.business.entity.TCPaperStruct;
|
|
|
import com.qmth.distributed.print.business.service.PrintCommonService;
|
|
|
import com.qmth.distributed.print.business.service.TCFinalScoreService;
|
|
|
import com.qmth.distributed.print.business.service.TCPaperStructService;
|
|
@@ -16,11 +19,7 @@ import com.qmth.teachcloud.common.entity.MarkQuestion;
|
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
|
|
|
-import com.qmth.teachcloud.common.util.RedisUtil;
|
|
|
-import com.qmth.teachcloud.common.util.Result;
|
|
|
-import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
-import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
-import com.qmth.teachcloud.mark.service.MarkPaperService;
|
|
|
+import com.qmth.teachcloud.common.util.*;
|
|
|
import com.qmth.teachcloud.mark.service.MarkQuestionService;
|
|
|
import io.swagger.annotations.*;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
@@ -68,6 +67,9 @@ public class TCFinalScoreController {
|
|
|
@Resource
|
|
|
TRBasicInfoService trBasicInfoService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ TCPaperStructService tcPaperStructService;
|
|
|
+
|
|
|
@ApiOperation(value = "导入期末成绩-模板下载")
|
|
|
@RequestMapping(value = "/final_score/template_download", method = RequestMethod.POST)
|
|
|
@OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
|
|
@@ -75,17 +77,30 @@ public class TCFinalScoreController {
|
|
|
public void finalScoreTemplateDownload(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
|
|
|
@ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
|
|
|
@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
|
|
|
- List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
|
|
|
- if (CollectionUtils.isEmpty(markQuestionList)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("未找到试卷结构");
|
|
|
+ String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
+ Object o = redisUtil.get(lockKey);
|
|
|
+ if (Objects.nonNull(o)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
|
}
|
|
|
-
|
|
|
+ TCPaperStruct tcPaperStruct = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber);
|
|
|
List<ExcelField> excelFieldList = new ArrayList<>();
|
|
|
excelFieldList.addAll(new ArrayList<>(Arrays.asList(new ExcelField("studentCode", "学号", true), new ExcelField("name", "姓名", true), new ExcelField("score", "成绩", true))));
|
|
|
-
|
|
|
- for (int i = 0; i < markQuestionList.size(); i++) {
|
|
|
- MarkQuestion markQuestion = markQuestionList.get(i);
|
|
|
- excelFieldList.add(new ExcelField("key" + (i + 1), markQuestion.getMainNumber() + "-" + markQuestion.getSubNumber(), true));
|
|
|
+ if (Objects.isNull(tcPaperStruct) && Objects.isNull(tcPaperStruct.getPaperStruct())) {
|
|
|
+ List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
|
|
|
+ if (CollectionUtils.isEmpty(markQuestionList)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未找到试卷结构");
|
|
|
+ }
|
|
|
+ for (int i = 0; i < markQuestionList.size(); i++) {
|
|
|
+ MarkQuestion markQuestion = markQuestionList.get(i);
|
|
|
+ excelFieldList.add(new ExcelField("key" + (i + 1), markQuestion.getMainNumber() + "-" + markQuestion.getSubNumber(), true));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ List<PaperStructDto> paperStructDtoList = GsonUtil.fromJson(tcPaperStruct.getPaperStruct(), new TypeToken<List<PaperStructDto>>() {
|
|
|
+ }.getType());
|
|
|
+ for (int i = 0; i < paperStructDtoList.size(); i++) {
|
|
|
+ PaperStructDto paperStructDto = paperStructDtoList.get(i);
|
|
|
+ excelFieldList.add(new ExcelField("key" + (i + 1), paperStructDto.getMainNumber() + "-" + paperStructDto.getSubNumber(), true));
|
|
|
+ }
|
|
|
}
|
|
|
printCommonService.scoreDownLoadExaminationTemplate("1、所有字段均为必填字段;\n" +
|
|
|
"2、期末成绩按总分,和小题分录入,题号按大题号-小题号方式录入,如下,1-1表示第一大题第一小题,2-1表示第二大题第一小题;\n" +
|
|
@@ -101,7 +116,12 @@ public class TCFinalScoreController {
|
|
|
@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
|
|
|
@ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
|
|
|
@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
|
|
|
- String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
+ String lockSyncKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
+ Object o = redisUtil.get(lockSyncKey);
|
|
|
+ if (Objects.nonNull(o)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
|
+ }
|
|
|
+ String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
|
|
|
if (!lock) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
@@ -129,11 +149,12 @@ public class TCFinalScoreController {
|
|
|
public Result finalScoreSync(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
|
|
|
@ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
|
|
|
@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
|
|
|
- String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
- boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
|
|
|
- if (!lock) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
|
|
|
+ String lockImportKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
+ Object o = redisUtil.get(lockImportKey);
|
|
|
+ if (Objects.nonNull(o)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
|
}
|
|
|
+ String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber;
|
|
|
Map<String, String> map = null;
|
|
|
try {
|
|
|
map = tcFinalScoreService.finalScoreExcelSync(examId, courseCode, paperNumber);
|
|
@@ -184,6 +205,12 @@ public class TCFinalScoreController {
|
|
|
TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(tcFinalScore.getId());
|
|
|
Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
|
|
|
|
|
|
+ String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + tcFinalScoreDb.getExamId() + "_" + tcFinalScoreDb.getCourseCode() + "_" + tcFinalScoreDb.getPaperNumber();
|
|
|
+ Object o = redisUtil.get(lockKey);
|
|
|
+ if (Objects.nonNull(o)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
|
+ }
|
|
|
+
|
|
|
TCFinalScore tcFinalScoreSource = new TCFinalScore();
|
|
|
BeanUtils.copyProperties(tcFinalScoreDb, tcFinalScoreSource);
|
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
@@ -206,6 +233,12 @@ public class TCFinalScoreController {
|
|
|
TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(id);
|
|
|
Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
|
|
|
|
|
|
+ String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + tcFinalScoreDb.getExamId() + "_" + tcFinalScoreDb.getCourseCode() + "_" + tcFinalScoreDb.getPaperNumber();
|
|
|
+ Object o = redisUtil.get(lockKey);
|
|
|
+ if (Objects.nonNull(o)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
|
|
|
+ }
|
|
|
+
|
|
|
TCFinalScore tcFinalScoreSource = new TCFinalScore();
|
|
|
BeanUtils.copyProperties(tcFinalScoreDb, tcFinalScoreSource);
|
|
|
tcFinalScoreDb.setEnable(enable);
|