|
@@ -1,8 +1,20 @@
|
|
|
package cn.com.qmth.scancentral.service.impl;
|
|
|
|
|
|
-import java.io.*;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.InputStreamReader;
|
|
|
+import java.io.LineNumberReader;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.LinkedHashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import javax.validation.constraints.NotNull;
|
|
@@ -31,13 +43,18 @@ import com.qmth.boot.core.collection.PageResult;
|
|
|
import com.qmth.boot.core.concurrent.service.ConcurrentService;
|
|
|
import com.qmth.boot.core.exception.ParameterException;
|
|
|
import com.qmth.boot.core.exception.StatusException;
|
|
|
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
|
|
|
import com.qmth.boot.tools.excel.ExcelReader;
|
|
|
import com.qmth.boot.tools.excel.enums.ExcelType;
|
|
|
-import com.qmth.boot.tools.signature.SignatureType;
|
|
|
import com.qmth.boot.tools.uuid.FastUUID;
|
|
|
|
|
|
-import cn.com.qmth.scancentral.bean.*;
|
|
|
+import cn.com.qmth.scancentral.bean.AbsentQueryDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.AnswerDeleteDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.ImportCetAbsentDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.ImportStudentDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.PageDeleteDomain;
|
|
|
+import cn.com.qmth.scancentral.bean.User;
|
|
|
import cn.com.qmth.scancentral.bean.answersave.ArrayResult;
|
|
|
import cn.com.qmth.scancentral.bean.answersave.BoolResult;
|
|
|
import cn.com.qmth.scancentral.bean.answersave.StringResult;
|
|
@@ -49,29 +66,90 @@ import cn.com.qmth.scancentral.bean.refix.PageRefixDomain;
|
|
|
import cn.com.qmth.scancentral.bean.refix.PaperRefixDomain;
|
|
|
import cn.com.qmth.scancentral.config.SysProperty;
|
|
|
import cn.com.qmth.scancentral.dao.StudentDao;
|
|
|
-import cn.com.qmth.scancentral.entity.*;
|
|
|
-import cn.com.qmth.scancentral.enums.*;
|
|
|
+import cn.com.qmth.scancentral.entity.AnswerCardEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.ExamEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.OmrGroupEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.PaperEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.PaperPageEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.QuestionEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.StudentEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.StudentPaperEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.SubjectEntity;
|
|
|
+import cn.com.qmth.scancentral.entity.UserEntity;
|
|
|
+import cn.com.qmth.scancentral.enums.ExamMode;
|
|
|
+import cn.com.qmth.scancentral.enums.ExamStatus;
|
|
|
+import cn.com.qmth.scancentral.enums.ExamStatusCheckMode;
|
|
|
+import cn.com.qmth.scancentral.enums.GroupType;
|
|
|
+import cn.com.qmth.scancentral.enums.ImageCheckStatus;
|
|
|
+import cn.com.qmth.scancentral.enums.LockType;
|
|
|
+import cn.com.qmth.scancentral.enums.OP;
|
|
|
+import cn.com.qmth.scancentral.enums.OmrField;
|
|
|
+import cn.com.qmth.scancentral.enums.Role;
|
|
|
+import cn.com.qmth.scancentral.enums.ScanStatus;
|
|
|
+import cn.com.qmth.scancentral.enums.UploadStatus;
|
|
|
import cn.com.qmth.scancentral.exception.NotFoundExceptions;
|
|
|
import cn.com.qmth.scancentral.exception.ParameterExceptions;
|
|
|
import cn.com.qmth.scancentral.model.ManualAbsentImportDTO;
|
|
|
-import cn.com.qmth.scancentral.service.*;
|
|
|
+import cn.com.qmth.scancentral.service.AnswerCardService;
|
|
|
+import cn.com.qmth.scancentral.service.AnswerCardSubjectService;
|
|
|
+import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
|
|
|
+import cn.com.qmth.scancentral.service.BatchService;
|
|
|
+import cn.com.qmth.scancentral.service.ExamService;
|
|
|
+import cn.com.qmth.scancentral.service.FileService;
|
|
|
+import cn.com.qmth.scancentral.service.OmrGroupService;
|
|
|
+import cn.com.qmth.scancentral.service.OmrTaskService;
|
|
|
+import cn.com.qmth.scancentral.service.PaperPageService;
|
|
|
+import cn.com.qmth.scancentral.service.PaperService;
|
|
|
+import cn.com.qmth.scancentral.service.QuestionService;
|
|
|
+import cn.com.qmth.scancentral.service.StudentPaperService;
|
|
|
+import cn.com.qmth.scancentral.service.StudentService;
|
|
|
+import cn.com.qmth.scancentral.service.SubjectService;
|
|
|
+import cn.com.qmth.scancentral.service.ToolExportService;
|
|
|
+import cn.com.qmth.scancentral.service.UserService;
|
|
|
import cn.com.qmth.scancentral.support.TaskLock;
|
|
|
import cn.com.qmth.scancentral.support.TaskLockUtil;
|
|
|
import cn.com.qmth.scancentral.util.BatchGetDataUtil;
|
|
|
import cn.com.qmth.scancentral.util.BatchSetDataUtil;
|
|
|
import cn.com.qmth.scancentral.util.MD5Util;
|
|
|
import cn.com.qmth.scancentral.util.PageUtil;
|
|
|
-import cn.com.qmth.scancentral.vo.*;
|
|
|
+import cn.com.qmth.scancentral.vo.AbsentInfoVo;
|
|
|
+import cn.com.qmth.scancentral.vo.AbsentManualImportVo;
|
|
|
+import cn.com.qmth.scancentral.vo.AbsentQueryVo;
|
|
|
+import cn.com.qmth.scancentral.vo.AnswerDeleteVo;
|
|
|
+import cn.com.qmth.scancentral.vo.AnswerExportK12Vo;
|
|
|
+import cn.com.qmth.scancentral.vo.AnswerExportVo;
|
|
|
+import cn.com.qmth.scancentral.vo.AnswerRefixVo;
|
|
|
+import cn.com.qmth.scancentral.vo.CampusVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ExamSiteVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ExportCetVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ImportBreachResult;
|
|
|
+import cn.com.qmth.scancentral.vo.ImportResult;
|
|
|
+import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ImportStudentVo;
|
|
|
+import cn.com.qmth.scancentral.vo.PaperDeleteVo;
|
|
|
+import cn.com.qmth.scancentral.vo.ScanAnswerInfoVo;
|
|
|
+import cn.com.qmth.scancentral.vo.StudentUploadVo;
|
|
|
+import cn.com.qmth.scancentral.vo.UpdateTimeVo;
|
|
|
import cn.com.qmth.scancentral.vo.answerquery.AnswerPageVo;
|
|
|
import cn.com.qmth.scancentral.vo.answerquery.AnswerPaperVo;
|
|
|
import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
|
|
|
import cn.com.qmth.scancentral.vo.answerquery.StudentPaperVo;
|
|
|
-import cn.com.qmth.scancentral.vo.assginedcheck.*;
|
|
|
+import cn.com.qmth.scancentral.vo.assginedcheck.AssginedTaskResult;
|
|
|
+import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExamRoomExport;
|
|
|
+import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExport;
|
|
|
+import cn.com.qmth.scancentral.vo.assginedcheck.AssignedTaskResultPaper;
|
|
|
+import cn.com.qmth.scancentral.vo.assginedcheck.AssignedTaskSaveVo;
|
|
|
import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
|
|
|
import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
|
|
|
import cn.com.qmth.scancentral.vo.paper.PaperCetVo;
|
|
|
import cn.com.qmth.scancentral.vo.paper.PaperPageCetVo;
|
|
|
-import cn.com.qmth.scancentral.vo.student.*;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentAnswerVo;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentExamRoomVo;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentPageQuery;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentPageVo;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentQuery;
|
|
|
+import cn.com.qmth.scancentral.vo.student.StudentVo;
|
|
|
import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
|
|
|
import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
|
|
|
import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
|
|
@@ -120,9 +198,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
|
|
|
@Autowired
|
|
|
private ToolExportService toolExportService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private SessionService sessionService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private AnswerCardSubjectService answerCardSubjectService;
|
|
|
|
|
@@ -721,19 +796,19 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean existUploadData(Long schoolId) {
|
|
|
- return CollectionUtils.isNotEmpty(baseMapper.findToUpload(1, schoolId))
|
|
|
- || CollectionUtils.isNotEmpty(baseMapper.findUploadError(1, schoolId));
|
|
|
+ public boolean existUploadData() {
|
|
|
+ return CollectionUtils.isNotEmpty(baseMapper.findToUpload(1))
|
|
|
+ || CollectionUtils.isNotEmpty(baseMapper.findUploadError(1));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<StudentUploadVo> findToUpload(int pageSize, Long schoolId) {
|
|
|
+ public List<StudentUploadVo> findToUpload(int pageSize) {
|
|
|
if (pageSize <= 0) {
|
|
|
pageSize = 100;
|
|
|
}
|
|
|
- List<StudentUploadVo> result = baseMapper.findToUpload(pageSize, schoolId);
|
|
|
+ List<StudentUploadVo> result = baseMapper.findToUpload(pageSize);
|
|
|
if (CollectionUtils.isEmpty(result)) {
|
|
|
- result = baseMapper.findUploadError(pageSize, schoolId);
|
|
|
+ result = baseMapper.findUploadError(pageSize);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -1506,225 +1581,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Transactional
|
|
|
- @Override
|
|
|
- public void uploadData(StudentUploadVo vo) {
|
|
|
- SchoolSession ss = sessionService.getSchoolSession(vo.getSchoolId());
|
|
|
- if (ss == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // log.info("markingcloud file upload: account={}, token={}",
|
|
|
- // ss.getAccount(), ss.getMarkingCloudToken());
|
|
|
- SignatureInfo signatureInfo = new SignatureInfo(SignatureType.TOKEN, ss.getAccount(),
|
|
|
- ss.getMarkingCloudToken());
|
|
|
- StudentEntity se = this.getById(vo.getId());
|
|
|
- if (se == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
- concurrentService.getReadWriteLock(LockType.STUDENT + "-" + vo.getId()).writeLock().lock();
|
|
|
- try {
|
|
|
- if (se.getFileUploadStatus() == UploadStatus.WAITING_UPLOAD
|
|
|
- || se.getFileUploadStatus() == UploadStatus.ERROR) {
|
|
|
- log.info("开始上传文件,examId={}, examNumber={}", vo.getExamId(), vo.getExamNumber());
|
|
|
- try {
|
|
|
- uploadFile(signatureInfo, se);
|
|
|
- this.updateFileUploadStatus(se.getId(), UploadStatus.UPLOADED);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("文件上传出错,examId=" + vo.getExamId() + ", examNumber=" + vo.getExamNumber(), e);
|
|
|
- this.updateFileUploadStatus(se.getId(), UploadStatus.ERROR);
|
|
|
- // 文件上传出错直接返回
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- if (se.getDataUploadStatus() == UploadStatus.WAITING_UPLOAD
|
|
|
- || se.getDataUploadStatus() == UploadStatus.ERROR) {
|
|
|
- log.info("开始上传数据,examId={}, examNumber={}", vo.getExamId(), vo.getExamNumber());
|
|
|
- try {
|
|
|
- uploadData(signatureInfo, se);
|
|
|
- this.updateDataUploadStatus(se.getId(), UploadStatus.UPLOADED);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("数据上传出错,examId=" + vo.getExamId() + ", examNumber=" + vo.getExamNumber(), e);
|
|
|
- this.updateDataUploadStatus(se.getId(), UploadStatus.ERROR);
|
|
|
- }
|
|
|
- }
|
|
|
- } finally {
|
|
|
- concurrentService.getReadWriteLock(LockType.STUDENT + "-" + vo.getId()).writeLock().unlock();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void uploadFile(SignatureInfo signatureInfo, StudentEntity student) throws Exception {
|
|
|
- // List<StudentPaperEntity> sps =
|
|
|
- // studentPaperService.findByStudentId(student.getId());
|
|
|
- // if (CollectionUtils.isEmpty(sps)) {
|
|
|
- // return;
|
|
|
- // }
|
|
|
- // List<String> sheets = new ArrayList<>();
|
|
|
- // List<String> slices = new ArrayList<>();
|
|
|
- // for (StudentPaperEntity sp : sps) {
|
|
|
- // List<PaperPageEntity> pages =
|
|
|
- // paperPageService.listByPaperId(sp.getPaperId());
|
|
|
- // if (CollectionUtils.isNotEmpty(sps)) {
|
|
|
- // for (PaperPageEntity page : pages) {
|
|
|
- // sheets.add(page.getSheetPath());
|
|
|
- // if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
|
|
|
- // slices.addAll(page.getSlicePath());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if (CollectionUtils.isNotEmpty(sheets)) {
|
|
|
- // int index = 0;
|
|
|
- // for (String s : sheets) {
|
|
|
- // index++;
|
|
|
- // FileUploadResponse res = markingcloudApiClient
|
|
|
- // .sheetFileUpload(signatureInfo, student.getExamId(),
|
|
|
- // student.getExamNumber(), index,
|
|
|
- // filePropertyService.getById(s).getMd5(),
|
|
|
- // UploadFile.build("file", getFileName(s),
|
|
|
- // IOUtils.toByteArray(fileStore.read(s))));
|
|
|
- // if (res == null || !res.getSuccess()) {
|
|
|
- // throw new StatusException(
|
|
|
- // "sheet上传失败,Success:false.examId=" + student.getExamId() +
|
|
|
- // ",examNumber=" + student
|
|
|
- // .getExamNumber());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if (CollectionUtils.isNotEmpty(slices)) {
|
|
|
- // int index = 0;
|
|
|
- // for (String s : slices) {
|
|
|
- // index++;
|
|
|
- // FileUploadResponse res = markingcloudApiClient
|
|
|
- // .sliceFileUpload(signatureInfo, student.getExamId(),
|
|
|
- // student.getExamNumber(), index,
|
|
|
- // filePropertyService.getById(s).getMd5(),
|
|
|
- // UploadFile.build("file", getFileName(s),
|
|
|
- // IOUtils.toByteArray(fileStore.read(s))));
|
|
|
- // if (res == null || !res.getSuccess()) {
|
|
|
- // throw new StatusException(
|
|
|
- // "slice上传失败,Success:false.examId=" + student.getExamId() +
|
|
|
- // ",examNumber=" + student
|
|
|
- // .getExamNumber());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- }
|
|
|
-
|
|
|
- private void uploadData(SignatureInfo signatureInfo, StudentEntity student) {
|
|
|
- // ExamEntity exam = examService.getById(student.getExamId());
|
|
|
- // List<StudentPaperEntity> sps =
|
|
|
- // studentPaperService.findByStudentId(student.getId());
|
|
|
- // List<String> sheets = new ArrayList<>();
|
|
|
- // List<String> slices = new ArrayList<>();
|
|
|
- // List<PaperPageEntity> pageList = new ArrayList<>();
|
|
|
- // if (CollectionUtils.isNotEmpty(sps)) {
|
|
|
- // for (StudentPaperEntity sp : sps) {
|
|
|
- // List<PaperPageEntity> pages =
|
|
|
- // paperPageService.listByPaperId(sp.getPaperId());
|
|
|
- // if (CollectionUtils.isNotEmpty(sps)) {
|
|
|
- // pageList.addAll(pages);
|
|
|
- // for (PaperPageEntity page : pages) {
|
|
|
- // sheets.add(page.getSheetPath());
|
|
|
- // if (CollectionUtils.isNotEmpty(page.getSlicePath())) {
|
|
|
- // slices.addAll(page.getSlicePath());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // //未扫描或者没有paper,需要删除考生原有上传状态
|
|
|
- // if (student.getStatus().equals(ScanStatus.UNEXIST) ||
|
|
|
- // CollectionUtils.isEmpty(sheets)) {
|
|
|
- // markingcloudApiClient.studentFileDelete(signatureInfo, exam.getId(),
|
|
|
- // student.getExamNumber());
|
|
|
- // }
|
|
|
- // //有扫描结果,正常上传考生状态
|
|
|
- // else {
|
|
|
- // DataUploadDto dto = new DataUploadDto();
|
|
|
- // dto.setSheetCount(sheets.size());
|
|
|
- // dto.setSliceCount(slices.size());
|
|
|
- // dto.setExamNumber(student.getExamNumber());
|
|
|
- // dto.setManual(student.getAssigned());
|
|
|
- // dto.setAbsent(student.getOmrAbsent());
|
|
|
- // dto.setCardNumber(student.getCardNumber());
|
|
|
- // List<String> answers = new ArrayList<String>();
|
|
|
- // int pageIndex = 0;
|
|
|
- // for (PaperPageEntity p : pageList) {
|
|
|
- // pageIndex++;
|
|
|
- // if (pageIndex == 1) {
|
|
|
- // dto.setPaperType(getPaperType(exam.getPaperTypeBarcodeContent(),
|
|
|
- // p.getPaperType()));
|
|
|
- // BatchPaperEntity bp =
|
|
|
- // batchPaperService.findByPaperId(p.getPaperId());
|
|
|
- // dto.setBatchCode(bp != null ? bp.getBatchId().toString() : "");
|
|
|
- // }
|
|
|
- // disposeQuestionMark(p.getQuestion());
|
|
|
- // if (p.getQuestion() != null &&
|
|
|
- // CollectionUtils.isNotEmpty(p.getQuestion().getResult())) {
|
|
|
- // answers.addAll(p.getQuestion().getResult());
|
|
|
- // }
|
|
|
- // }
|
|
|
- // dto.setAnswers(StringUtils.join(answers, ","));
|
|
|
- // List<DataUploadResponse> res = markingcloudApiClient
|
|
|
- // .dataUpload(signatureInfo, student.getExamId(),
|
|
|
- // Collections.singletonList(dto));
|
|
|
- // if (CollectionUtils.isEmpty(res) ||
|
|
|
- // StringUtils.isBlank(res.get(0).getExamNumber())) {
|
|
|
- // throw new StatusException(
|
|
|
- // "数据上传失败,Success:false.examId=" + student.getExamId() + ",examNumber="
|
|
|
- // + student
|
|
|
- // .getExamNumber());
|
|
|
- // }
|
|
|
- // }
|
|
|
- }
|
|
|
-
|
|
|
- // private String getFileName(String path) {
|
|
|
- // if (StringUtils.isBlank(path)) {
|
|
|
- // throw new StatusException("文件路径有误:" + (path == null ? "" : path));
|
|
|
- // }
|
|
|
- // return path.substring(path.lastIndexOf("//") + 1);
|
|
|
- // }
|
|
|
-
|
|
|
- // private String getPaperType(List<String> list, StringResult sr) {
|
|
|
- // String pt = sr != null ? sr.getResult() : null;
|
|
|
- // if (StringUtils.isBlank(pt)) {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // if (OmrType.BARCODE == sr.getType()) {
|
|
|
- // if (CollectionUtils.isEmpty(list)) {
|
|
|
- // if (pt.length() > 1) {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // pt = pt.toUpperCase();
|
|
|
- // int pAscii = (int) pt.charAt(0);
|
|
|
- // if (pAscii >= 65 && pAscii <= 90) {
|
|
|
- // return pt;
|
|
|
- // } else {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // int index = list.indexOf(pt);
|
|
|
- // if (index == -1) {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // return String.valueOf((char) (index + 65));
|
|
|
- // }
|
|
|
- // } else if (OmrType.FILL_AREA == sr.getType()) {
|
|
|
- // if (pt.length() > 1) {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // pt = pt.toUpperCase();
|
|
|
- // int pAscii = (int) pt.charAt(0);
|
|
|
- // if (pAscii >= 65 && pAscii <= 90) {
|
|
|
- // return pt;
|
|
|
- // } else {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // return "#";
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public void resetExamStatus(Long examId, Integer examNumberFillCount) {
|