|
@@ -11,13 +11,8 @@ 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.ExcelReader;
|
|
import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReaderHandle;
|
|
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.commons.utils.image.ImageCompression;
|
|
-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.repository.ExamQuestionRepo;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
|
|
|
|
-import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
|
|
|
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.*;
|
|
|
|
+import cn.com.qmth.stmms.ms.core.repository.*;
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -33,6 +28,7 @@ import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
import java.util.Random;
|
|
import java.util.Random;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 数据上传服务 Created by zhengmin on 2016/11/18.
|
|
* 数据上传服务 Created by zhengmin on 2016/11/18.
|
|
@@ -62,6 +58,12 @@ public class DataUploadService {
|
|
@Autowired
|
|
@Autowired
|
|
ImageConfig imageConfig;
|
|
ImageConfig imageConfig;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ MarkSubjectRepo markSubjectRepo;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ WorkRepo workRepo;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 上传考生试卷数据
|
|
* 上传考生试卷数据
|
|
*
|
|
*
|
|
@@ -80,6 +82,11 @@ public class DataUploadService {
|
|
FileInputStream sheetIn = null;
|
|
FileInputStream sheetIn = null;
|
|
FileInputStream slicein = null;
|
|
FileInputStream slicein = null;
|
|
Student student = studentRepo.findOne(studentId);
|
|
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()) {
|
|
if (imageConfig.isImageEnc()) {
|
|
//保存裁切原图+文件名加密
|
|
//保存裁切原图+文件名加密
|
|
String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
String imageDir = systemConfig.getImageDir() + File.separator + student.getWorkId() + File.separator + subject
|
|
@@ -129,7 +136,7 @@ public class DataUploadService {
|
|
ImageIO.write(bufferedImage, "jpg", os);
|
|
ImageIO.write(bufferedImage, "jpg", os);
|
|
InputStream in1 = new ByteArrayInputStream(os.toByteArray());
|
|
InputStream in1 = new ByteArrayInputStream(os.toByteArray());
|
|
|
|
|
|
- writeStream(in1, outputStream1);
|
|
|
|
|
|
+ SystemConstant.writeStream(in1, outputStream1);
|
|
long end = System.currentTimeMillis();
|
|
long end = System.currentTimeMillis();
|
|
LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
|
|
LOGGER.info("生成原图和缩略图耗时:{}", (end - start) / 1000 + "s");
|
|
|
|
|
|
@@ -169,8 +176,8 @@ public class DataUploadService {
|
|
sheetIn = new FileInputStream(savePath + File.separator + student.getExamNumber() + ".jpg");
|
|
sheetIn = new FileInputStream(savePath + File.separator + student.getExamNumber() + ".jpg");
|
|
slicein = new FileInputStream(thumbFileName);
|
|
slicein = new FileInputStream(thumbFileName);
|
|
}
|
|
}
|
|
- Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
|
|
|
|
- student.getExamNumber());
|
|
|
|
|
|
+ Paper exist = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject,
|
|
|
|
+ student.getExamNumber(), markSubjectList.get(0).isTest());
|
|
String sheetMD5 = DigestUtils.md5Hex(sheetIn);
|
|
String sheetMD5 = DigestUtils.md5Hex(sheetIn);
|
|
String sliceMD5 = DigestUtils.md5Hex(slicein);
|
|
String sliceMD5 = DigestUtils.md5Hex(slicein);
|
|
sheetIn.close();
|
|
sheetIn.close();
|
|
@@ -189,6 +196,7 @@ public class DataUploadService {
|
|
paper.setSheetMD5(sheetMD5);
|
|
paper.setSheetMD5(sheetMD5);
|
|
paper.setSliceMD5(sliceMD5);
|
|
paper.setSliceMD5(sliceMD5);
|
|
paper.setExamRoom(student.getExamRoom());
|
|
paper.setExamRoom(student.getExamRoom());
|
|
|
|
+ paper.setTest(markSubjectList.get(0).isTest());
|
|
paperRepo.save(paper);
|
|
paperRepo.save(paper);
|
|
// 更新科目上传状态
|
|
// 更新科目上传状态
|
|
/**
|
|
/**
|
|
@@ -307,11 +315,17 @@ public class DataUploadService {
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
public Paper savePaper(Student student, Subject subject, boolean isManual) throws Exception {
|
|
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());
|
|
ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(student.getWorkId(), subject, student.getAreaCode());
|
|
- Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject, student.getExamNumber());
|
|
|
|
|
|
+ Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject, student.getExamNumber(), markSubjectList.get(0).isTest());
|
|
if (paper == null) {
|
|
if (paper == null) {
|
|
Long random = getRandom(student.getWorkId(), student.getExamNumber());
|
|
Long random = getRandom(student.getWorkId(), student.getExamNumber());
|
|
paper = new Paper(student.getWorkId(), null, subject, examQuestion, student, isManual, random);
|
|
paper = new Paper(student.getWorkId(), null, subject, examQuestion, student, isManual, random);
|
|
|
|
+ paper.setTest(markSubjectList.get(0).isTest());
|
|
}
|
|
}
|
|
paper.setUploadedOn(new Date());
|
|
paper.setUploadedOn(new Date());
|
|
paper.setManual(isManual);
|
|
paper.setManual(isManual);
|
|
@@ -402,25 +416,22 @@ public class DataUploadService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 流写入
|
|
|
|
|
|
+ * 上传试评学生
|
|
*
|
|
*
|
|
|
|
+ * @param workId
|
|
|
|
+ * @param isAbsent
|
|
* @param inputStream
|
|
* @param inputStream
|
|
- * @param outputStream
|
|
|
|
* @return
|
|
* @return
|
|
- * @throws IOException
|
|
|
|
*/
|
|
*/
|
|
- public OutputStream writeStream(InputStream inputStream, OutputStream outputStream) throws IOException {
|
|
|
|
- int index = 0;
|
|
|
|
- byte[] bytes = new byte[1024];
|
|
|
|
- byte[] bytesEnc = new byte[1024];
|
|
|
|
- while ((index = inputStream.read(bytes)) != -1) {
|
|
|
|
- //将字节数组的数据全部写入到输出流中
|
|
|
|
- for (int i = 0; i < index; i++) {
|
|
|
|
- //通过异或运算加密
|
|
|
|
- bytesEnc[i] = (byte) (bytes[i] ^ SystemConstant.SECRET_KEY);
|
|
|
|
- }
|
|
|
|
- outputStream.write(bytesEnc, 0, index);
|
|
|
|
|
|
+ @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 outputStream;
|
|
|
|
|
|
+ return excelErrors;
|
|
}
|
|
}
|
|
}
|
|
}
|