|
@@ -11,14 +11,21 @@ import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelError;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReader;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReaderHandle;
|
|
|
import cn.com.qmth.stmms.ms.commons.utils.image.ImageCompression;
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.*;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.ExamQuestion;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.Paper;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.Student;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.Work;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
|
|
|
import cn.com.qmth.stmms.ms.core.repository.*;
|
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
import java.awt.image.BufferedImage;
|
|
@@ -82,11 +89,6 @@ public class DataUploadService {
|
|
|
FileInputStream sheetIn = null;
|
|
|
FileInputStream slicein = null;
|
|
|
Student student = studentRepo.findOne(studentId);
|
|
|
- Work work = workRepo.findOne(student.getWorkId());
|
|
|
- List<MarkSubject> markSubjectList = work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase())).collect(Collectors.toList());
|
|
|
- if (Objects.isNull(markSubjectList) || markSubjectList.size() == 0) {
|
|
|
- throw new Exception("当前试卷没有找到" + subject.getName() + "科目信息");
|
|
|
- }
|
|
|
if (imageConfig.isImageEnc()) {
|
|
|
//保存裁切原图+文件名加密
|
|
|
String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
@@ -176,8 +178,8 @@ public class DataUploadService {
|
|
|
sheetIn = new FileInputStream(savePath + File.separator + student.getExamNumber() + ".jpg");
|
|
|
slicein = new FileInputStream(thumbFileName);
|
|
|
}
|
|
|
- Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject,
|
|
|
- student.getExamNumber(), markSubjectList.get(0).isTest());
|
|
|
+ Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
|
|
|
+ student.getExamNumber());
|
|
|
String sheetMD5 = DigestUtils.md5Hex(sheetIn);
|
|
|
String sliceMD5 = DigestUtils.md5Hex(slicein);
|
|
|
sheetIn.close();
|
|
@@ -196,7 +198,6 @@ public class DataUploadService {
|
|
|
paper.setSheetMD5(sheetMD5);
|
|
|
paper.setSliceMD5(sliceMD5);
|
|
|
paper.setExamRoom(student.getExamRoom());
|
|
|
- paper.setTest(markSubjectList.get(0).isTest());
|
|
|
paperRepo.save(paper);
|
|
|
// 更新科目上传状态
|
|
|
/**
|
|
@@ -298,6 +299,105 @@ public class DataUploadService {
|
|
|
return excelErrors;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 试评考生导入
|
|
|
+ *
|
|
|
+ * @param workId
|
|
|
+ * @param subject
|
|
|
+ * @param inputStream
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public List<ExcelError> uploadStudentsForTrial(Long workId, Subject subject, InputStream inputStream) throws Exception {
|
|
|
+ Work work = workRepo.findOne(workId);
|
|
|
+ if (Objects.isNull(work)) {
|
|
|
+ throw new Exception("没有此工作区,请检查workId是否正确");
|
|
|
+ }
|
|
|
+ //更新科目
|
|
|
+ work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase()))
|
|
|
+ .collect(Collectors.toList())
|
|
|
+ .forEach(o -> {
|
|
|
+ o.setTest(TrialEnum.INIT.getId());
|
|
|
+ markSubjectRepo.save(o);
|
|
|
+ });
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put(String.valueOf(TrialEnum.INIT.getId()), subject);
|
|
|
+ //全量删除全量增加
|
|
|
+ //1.试卷
|
|
|
+ examQuestionRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId());
|
|
|
+ //2.学生
|
|
|
+ studentRepo.deleteByWorkIdAndTest(workId, jsonObject.toJSONString());
|
|
|
+ //3.paper
|
|
|
+ paperRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId());
|
|
|
+ ExcelReader excelReader = new ExcelReader(StudentDTO.class);
|
|
|
+ List<ExcelError> excelErrors = excelReader.reader(inputStream, new ExcelReaderHandle() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ExcelError handle(Object obj) throws Exception {
|
|
|
+ try {
|
|
|
+ StudentDTO dto = (StudentDTO) obj;
|
|
|
+
|
|
|
+ String examNumber = dto.getExamNumber();
|
|
|
+ //如果没有设置区域代码,用准考证前2位作为区域代码
|
|
|
+ String areaCode = null;
|
|
|
+ if (dto.getAreaCode() == null || dto.getAreaCode().isEmpty()) {
|
|
|
+ areaCode = examNumber.substring(0, 2);
|
|
|
+ dto.setAreaCode(areaCode);
|
|
|
+ }
|
|
|
+ //复制卷子给试评用
|
|
|
+ ExamQuestion questionNew = null;
|
|
|
+ ExamQuestion isExist = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(workId, subject, dto.getAreaCode());
|
|
|
+ if (Objects.isNull(isExist)) {
|
|
|
+ questionNew = new ExamQuestion(dto.getAreaCode(), subject, workId, dto.getAreaName());
|
|
|
+ questionNew.setTest(TrialEnum.INIT.getId());
|
|
|
+ examQuestionRepo.save(questionNew);
|
|
|
+ } else {
|
|
|
+ questionNew = new ExamQuestion();
|
|
|
+ BeanUtils.copyProperties(isExist, questionNew);
|
|
|
+ questionNew.setTest(TrialEnum.INIT.getId());
|
|
|
+ questionNew.setId(null);
|
|
|
+ examQuestionRepo.save(questionNew);
|
|
|
+ }
|
|
|
+ //复制学生给试评用
|
|
|
+ Student studentNew = null;
|
|
|
+ Student student = studentRepo.findByWorkIdAndExamNumberAndTest(workId, dto.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
|
|
|
+ if (student == null) {
|
|
|
+ throw new Exception("没有学生" + student.getName() + " 信息");
|
|
|
+ } else {
|
|
|
+ if (!student.getUploadStatus().contains("SX:1,SC:1,SM:1")) {
|
|
|
+ throw new Exception("学生" + student.getName() + "未上传完试卷");
|
|
|
+ }
|
|
|
+ studentNew = new Student();
|
|
|
+ BeanUtils.copyProperties(student, studentNew);
|
|
|
+ studentNew.setId(null);
|
|
|
+ studentNew.setTest(jsonObject.toJSONString());
|
|
|
+ studentRepo.save(studentNew);
|
|
|
+ }
|
|
|
+ //复制paper
|
|
|
+ Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndAreaCode(workId, subject, student.getExamNumber(), dto.getAreaCode());
|
|
|
+ Paper paperNew = new Paper();
|
|
|
+ BeanUtils.copyProperties(paper, paperNew);
|
|
|
+ paperNew.setId(null);
|
|
|
+ paperNew.setTest(TrialEnum.INIT.getId());
|
|
|
+ Long random = getRandom(studentNew.getWorkId(), studentNew.getExamNumber());
|
|
|
+ paperNew.setRandomSeq(random);
|
|
|
+ paperNew.setSecretNumber(new StringBuffer(String.valueOf(subject.ordinal())).append(questionNew.getAreaCode()).append(random).toString());
|
|
|
+ paperRepo.save(paperNew);
|
|
|
+ } catch (Exception e) {
|
|
|
+ ExcelError excelError = new ExcelError();
|
|
|
+ excelError.setExcelErrorType(e.getMessage());
|
|
|
+ return excelError;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (Objects.nonNull(excelErrors) && excelErrors.size() > 0) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ return excelErrors;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 清空考生数据 有上传数据无法清空
|
|
|
*
|
|
@@ -315,17 +415,11 @@ public class DataUploadService {
|
|
|
|
|
|
@Transactional
|
|
|
public Paper savePaper(Student student, Subject subject, boolean isManual) throws Exception {
|
|
|
- Work work = workRepo.findOne(student.getWorkId());
|
|
|
- List<MarkSubject> markSubjectList = work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase())).collect(Collectors.toList());
|
|
|
- if (Objects.isNull(markSubjectList) || markSubjectList.size() == 0) {
|
|
|
- throw new Exception("当前试卷没有找到" + subject.getName() + "科目信息");
|
|
|
- }
|
|
|
ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(student.getWorkId(), subject, student.getAreaCode());
|
|
|
- Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject, student.getExamNumber(), markSubjectList.get(0).isTest());
|
|
|
+ Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject, student.getExamNumber());
|
|
|
if (paper == null) {
|
|
|
Long random = getRandom(student.getWorkId(), student.getExamNumber());
|
|
|
paper = new Paper(student.getWorkId(), null, subject, examQuestion, student, isManual, random);
|
|
|
- paper.setTest(markSubjectList.get(0).isTest());
|
|
|
}
|
|
|
paper.setUploadedOn(new Date());
|
|
|
paper.setManual(isManual);
|
|
@@ -414,24 +508,4 @@ public class DataUploadService {
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 上传试评学生
|
|
|
- *
|
|
|
- * @param workId
|
|
|
- * @param isAbsent
|
|
|
- * @param inputStream
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Transactional
|
|
|
- public List<ExcelError> uploadStudentsForTrial(Long workId, final boolean isAbsent, InputStream inputStream) throws Exception {
|
|
|
- studentRepo.deleteByWorkId(workId);
|
|
|
- List<ExcelError> excelErrors = uploadStudents(workId, isAbsent, inputStream);
|
|
|
- if (Objects.nonNull(excelErrors) && excelErrors.size() == 0) {
|
|
|
- Work work = workRepo.findOne(workId);
|
|
|
- work.getSubjects().forEach(o -> o.setTest(true));
|
|
|
- markSubjectRepo.save(work.getSubjects());
|
|
|
- }
|
|
|
- return excelErrors;
|
|
|
- }
|
|
|
}
|