Browse Source

测试bug修复-0826

xiaof 4 years ago
parent
commit
766810fab0

+ 7 - 6
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ParamApi.java

@@ -75,7 +75,7 @@ public class ParamApi {
         }
         }
 
 
         List<MarkTask> markTasks = markTaskRepo.findByWorkId(workId);
         List<MarkTask> markTasks = markTaskRepo.findByWorkId(workId);
-        if(!markTasks.isEmpty() && markTasks.size() > 0
+        if (!markTasks.isEmpty() && markTasks.size() > 0
                 && !Objects.equals(packageScan, paramSetting.getPackageScan())) {
                 && !Objects.equals(packageScan, paramSetting.getPackageScan())) {
             throw new RuntimeException("该评卷工作当前不是采集阶段,不能修改是否整包扫描参数");
             throw new RuntimeException("该评卷工作当前不是采集阶段,不能修改是否整包扫描参数");
         }
         }
@@ -84,13 +84,14 @@ public class ParamApi {
         List<Paper> papers = paperRepo.findByWorkId(workId);
         List<Paper> papers = paperRepo.findByWorkId(workId);
         if (papers != null && !papers.isEmpty()
         if (papers != null && !papers.isEmpty()
                 && (!Objects.equals(imageEncrypt, paramSetting.getImageEncrypt())
                 && (!Objects.equals(imageEncrypt, paramSetting.getImageEncrypt())
-                || !Objects.equals(nameRule, paramSetting.getNameRule()))) {
-            throw new RuntimeException("该评卷工作已有采集数据,不能修改图片是否加密、图片命名规则参数");
+                || !Objects.equals(nameRule, paramSetting.getNameRule()))
+                || !Objects.equals(paperStage, paramSetting.getPaperStage())) {
+            throw new RuntimeException("该评卷工作已有采集数据,不能修改图片是否加密、图片命名规则、试卷档位参数");
         }
         }
 
 
-        if(paramSetting.getPaperStage() == 1 && !Objects.equals(paperStage, paramSetting.getPaperStage())){
-            throw new RuntimeException("试卷档位已经设置,不能修改");
-        }
+//        if(paramSetting.getPaperStage() == 1 && !Objects.equals(paperStage, paramSetting.getPaperStage())){
+//            throw new RuntimeException("试卷档位已经设置,不能修改");
+//        }
 
 
         paramSetting.setPackageScan(packageScan);
         paramSetting.setPackageScan(packageScan);
         paramSetting.setImageEncrypt(imageEncrypt);
         paramSetting.setImageEncrypt(imageEncrypt);

+ 9 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -478,7 +478,7 @@ 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, String level) throws Exception {
         ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCodeAndTest(student.getWorkId(), subject, student.getAreaCode(), TrialEnum.DEFAULT.getId());
         ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCodeAndTest(student.getWorkId(), subject, student.getAreaCode(), TrialEnum.DEFAULT.getId());
         Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject, student.getExamNumber(), TrialEnum.DEFAULT.getId());
         Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndTest(student.getWorkId(), subject, student.getExamNumber(), TrialEnum.DEFAULT.getId());
         if (paper == null) {
         if (paper == null) {
@@ -488,6 +488,14 @@ public class DataUploadService {
         paper.setUploadedOn(new Date());
         paper.setUploadedOn(new Date());
         paper.setManual(isManual);
         paper.setManual(isManual);
 
 
+        if(Objects.nonNull(level) && level != ""){
+            paper.setLevel(level);
+            //设置为已发布任务的状态
+            paper.setActive(true);
+            //默认给1,与实际分档批次区分
+            paper.setBatchNo(1l);
+        }
+
         String sheetPath = null;
         String sheetPath = null;
         String slicePath = null;
         String slicePath = null;
         String fileName = student.getExamNumber();
         String fileName = student.getExamNumber();

+ 17 - 6
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -183,7 +183,10 @@ public class CollectApi {
     @RequestMapping(value = "exam/getStudent/{examNumber}", method = RequestMethod.GET)
     @RequestMapping(value = "exam/getStudent/{examNumber}", method = RequestMethod.GET)
     public CollectStuDTO getStudent(@PathVariable String examNumber) {
     public CollectStuDTO getStudent(@PathVariable String examNumber) {
         Work activeWork = workRepo.findByActiveTrue();
         Work activeWork = workRepo.findByActiveTrue();
-        Student student = studentRepo.findByWorkIdAndRelateExamNumber(activeWork.getId(), examNumber);
+        Student student = studentRepo.findByWorkIdAndRelateExamNumberAndTest(activeWork.getId(), examNumber, String.valueOf(TrialEnum.DEFAULT.ordinal()));
+        if(student == null){
+            throw new RuntimeException("无该考生,请处理");
+        }
         CollectStuDTO collectStuDTO = new CollectStuDTO();
         CollectStuDTO collectStuDTO = new CollectStuDTO();
         collectStuDTO.setExamId(activeWork.getId());
         collectStuDTO.setExamId(activeWork.getId());
         collectStuDTO.setExamNumber(student.getRelateExamNumber());
         collectStuDTO.setExamNumber(student.getRelateExamNumber());
@@ -235,7 +238,15 @@ public class CollectApi {
 //        for (CollectStuDTO dto : uploadStudentArray) {
 //        for (CollectStuDTO dto : uploadStudentArray) {
         Student student = studentRepo.findByWorkIdAndRelateExamNumberAndTest(activeWork.getId(), dto.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
         Student student = studentRepo.findByWorkIdAndRelateExamNumberAndTest(activeWork.getId(), dto.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
         if (!dto.isAbsent()) {
         if (!dto.isAbsent()) {
-            dataUploadService.savePaper(student, subject, dto.isManual());
+            dataUploadService.savePaper(student, subject, dto.isManual(), dto.getLevel());
+        }
+        //已知档位,更新阶段
+        if(Objects.nonNull(dto.getLevel()) && dto.getLevel() != ""){
+            MarkSubject markSubject = markSubjectRepo.findOne(activeWork.getId() + "-" + subject.name());
+            if(markSubject.getStage().name().equals(MarkStage.INIT.name())){
+                markSubject.setStage(MarkStage.LEVEL);
+                markSubjectRepo.saveAndFlush(markSubject);
+            }
         }
         }
         dto.setUploadTime(sdf.format(new Date()));
         dto.setUploadTime(sdf.format(new Date()));
         list.add(dto);
         list.add(dto);
@@ -737,13 +748,13 @@ public class CollectApi {
     public String exportScorePictures(@RequestParam(defaultValue = "分数图片") String exportType,
     public String exportScorePictures(@RequestParam(defaultValue = "分数图片") String exportType,
                                       @RequestParam Long workId,
                                       @RequestParam Long workId,
                                       @RequestParam String imageType,
                                       @RequestParam String imageType,
-                                      @RequestParam Long areaId,
+                                      @RequestParam(required = false) Long areaId,
                                       @RequestParam String school,
                                       @RequestParam String school,
-                                      @RequestParam String examRoom,
+                                      @RequestParam(required = false) String examRoom,
                                       @RequestParam String subject,
                                       @RequestParam String subject,
                                       @RequestParam String nameRule,
                                       @RequestParam String nameRule,
-                                      @RequestParam Integer startScore,
-                                      @RequestParam Integer endScore) throws IOException {
+                                      @RequestParam(required = false) Integer startScore,
+                                      @RequestParam(required = false) Integer endScore) throws IOException {
         if (StringUtils.isBlank(imageType)) {
         if (StringUtils.isBlank(imageType)) {
             throw new RuntimeException("请选择图片类型");
             throw new RuntimeException("请选择图片类型");
         }
         }

+ 10 - 0
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/dto/CollectStuDTO.java

@@ -15,6 +15,8 @@ public class CollectStuDTO {
     private boolean manual;
     private boolean manual;
     private String uploadTime;
     private String uploadTime;
 
 
+    private String level;
+
     public Long getExamId() {
     public Long getExamId() {
         return examId;
         return examId;
     }
     }
@@ -78,4 +80,12 @@ public class CollectStuDTO {
     public void setUploadTime(String uploadTime) {
     public void setUploadTime(String uploadTime) {
         this.uploadTime = uploadTime;
         this.uploadTime = uploadTime;
     }
     }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
 }
 }

+ 154 - 127
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/util/RotateTask.java

@@ -56,143 +56,170 @@ public class RotateTask implements Runnable {
             String imagePath = null;
             String imagePath = null;
             String imageNew = null;
             String imageNew = null;
             String sliceMD5 = null;
             String sliceMD5 = null;
-            LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
-            if (ParamCache.paramMap.get(paper.getWorkId()).getImageEncrypt() == 1) {
-                try {
-                    Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
-                    String imageMd5 = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), paper.getAreaCode(), paper.getExamNumber(), student.getId());
-                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                    thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
-                    imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+            synchronized (paper.getId()) {
+                LOGGER.info("准备生成缩略和裁切旋转图:{}", start);
+                if (ParamCache.paramMap.get(paper.getWorkId()).getImageEncrypt() == 1) {
+                    try {
+                        Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                        String imageMd5 = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), paper.getAreaCode(), paper.getExamNumber(), student.getId());
+                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                        thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
+                        imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + imageMd5;
 
 
-                    //缩略图旋转生成
-                    String thumbOldPath = thumbPath + ".jpg";
-                    String thumbTempPath = thumbPath + "temp.jpg";
-                    File thumbOldFile = new File(thumbOldPath);
-                    //读取原图
-                    File thumbTempFile = new File(thumbTempPath);
-                    InputStream is = new FileInputStream(thumbOldPath);
-                    OutputStream outputStream = new FileOutputStream(thumbTempPath);
-                    SystemConstant.writeStream(is, outputStream);
-                    is.close();
-                    outputStream.flush();
-                    outputStream.close();
-
-                    //原图旋转
-                    ImageCompression.rotate(thumbTempFile, thumbTempFile, degree);
-                    thumbOldFile.renameTo(new File(thumbNew + "_" + start + ".jpg"));
-                    thumbTempFile.renameTo(new File(thumbOldPath));
-                    //加密旋转图
-                    InputStream is1 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(thumbOldFile));
-                    OutputStream outputStream1 = new FileOutputStream(thumbOldFile);
-                    SystemConstant.writeStream(is1, outputStream1);
-                    is1.close();
-                    outputStream1.flush();
-                    outputStream1.close();
+                        //缩略图旋转生成
+                        String thumbOldPath = thumbPath + ".jpg";
+                        String thumbTempPath = thumbPath + "temp.jpg";
+                        File thumbOldFile = new File(thumbOldPath);
+                        //读取原图
+                        File thumbTempFile = new File(thumbTempPath);
+                        InputStream is = new FileInputStream(thumbOldPath);
+                        OutputStream outputStream = new FileOutputStream(thumbTempPath);
+                        SystemConstant.writeStream(is, outputStream);
+                        is.close();
+                        outputStream.flush();
+                        outputStream.close();
 
 
-                    //裁切原图旋转生成
-                    String imageOldPath = imagePath + ".jpg";
-                    String imageTempPath = imagePath + "temp.jpg";
-                    File imageOldFile = new File(imageOldPath);
-                    //读取原图
-                    File imageTempFile = new File(imageTempPath);
-                    InputStream is2 = new FileInputStream(imageOldPath);
-                    OutputStream outputStream2 = new FileOutputStream(imageTempFile);
-                    SystemConstant.writeStream(is2, outputStream2);
-                    is2.close();
-                    outputStream2.flush();
-                    outputStream2.close();
+                        //原图旋转
+                        ImageCompression.rotate(thumbTempFile, thumbTempFile, degree);
+                        thumbOldFile.renameTo(new File(thumbNew + "_" + start + ".jpg"));
+                        thumbTempFile.renameTo(new File(thumbOldPath));
+                        //加密旋转图
+                        InputStream is1 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(thumbOldFile));
+                        OutputStream outputStream1 = new FileOutputStream(thumbOldFile);
+                        SystemConstant.writeStream(is1, outputStream1);
+                        is1.close();
+                        outputStream1.flush();
+                        outputStream1.close();
 
 
-                    //原图旋转
-                    ImageCompression.rotate(imageTempFile, imageTempFile, degree);
-                    imageOldFile.renameTo(new File(imageNew + "_" + start + ".jpg"));
-                    imageTempFile.renameTo(new File(imageOldPath));
-                    //加密旋转图
-                    InputStream is3 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(imageOldFile));
-                    OutputStream outputStream3 = new FileOutputStream(imageOldFile);
-                    SystemConstant.writeStream(is3, outputStream3);
-                    is3.close();
-                    outputStream3.flush();
-                    outputStream3.close();
+                        //裁切原图旋转生成
+                        String imageOldPath = imagePath + ".jpg";
+                        String imageTempPath = imagePath + "temp.jpg";
+                        File imageOldFile = new File(imageOldPath);
+                        //读取原图
+                        File imageTempFile = new File(imageTempPath);
+                        InputStream is2 = new FileInputStream(imageOldPath);
+                        OutputStream outputStream2 = new FileOutputStream(imageTempFile);
+                        SystemConstant.writeStream(is2, outputStream2);
+                        is2.close();
+                        outputStream2.flush();
+                        outputStream2.close();
 
 
-                    InputStream is4 = new FileInputStream(imageOldFile);
-                    sliceMD5 = DigestUtils.md5Hex(is4);
-                    is4.close();
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            } else {
-                if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
-                    //阿里云oss图片旋转
-                    String thumbDirName = aliYunOssConfig.getThumbDir();
-                    String imageDirName = aliYunOssConfig.getImageDir();
-                    thumbDirName = thumbDirName.substring(thumbDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), thumbDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
-                    imageDirName = imageDirName.substring(imageDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), imageDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
-                    StringJoiner thumbSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
-                    StringJoiner thumbNewSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
-                    StringJoiner imageSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
-                    StringJoiner imageNewSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
+                        //原图旋转
+                        ImageCompression.rotate(imageTempFile, imageTempFile, degree);
+                        imageOldFile.renameTo(new File(imageNew + "_" + start + ".jpg"));
+                        imageTempFile.renameTo(new File(imageOldPath));
+                        //加密旋转图
+                        InputStream is3 = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(imageOldFile));
+                        OutputStream outputStream3 = new FileOutputStream(imageOldFile);
+                        SystemConstant.writeStream(is3, outputStream3);
+                        is3.close();
+                        outputStream3.flush();
+                        outputStream3.close();
 
 
-                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
-                    File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
-                    File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
-                    ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
-                    ImageCompression.rotate(imageFile, new File(imagePath), degree);
-                    FileInputStream in = new FileInputStream(new File(imagePath));
-                    sliceMD5 = DigestUtils.md5Hex(in);
-                    in.close();
-                    ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
-                    ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
-                    ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
-                    ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
-                    thumbFile.delete();
-                    imageFile.delete();
-                } else {
-                    String fileName = paper.getExamNumber();
-                    if(ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1){
-                        Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), "0");
-                        fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
-                    }
-                    thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                    thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
-                    imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
-                    imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
-                            + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
-                    File thumbFile = new File(thumbPath);
-                    if (thumbFile.exists()) {
-                        thumbFile.renameTo(new File(thumbNew));
-                        InputStream is = new FileInputStream(thumbNew);
-                        ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
-                        is.close();
+                        InputStream is4 = new FileInputStream(imageOldFile);
+                        sliceMD5 = DigestUtils.md5Hex(is4);
+                        is4.close();
+                    } catch (Exception e) {
+                        e.printStackTrace();
                     }
                     }
+                } else {
+                    if (imageConfig.isCustomSubject() && imageServerConfig.isAliyunOss()) {
+                        //阿里云oss图片旋转
+                        String thumbDirName = aliYunOssConfig.getThumbDir();
+                        String imageDirName = aliYunOssConfig.getImageDir();
+                        thumbDirName = thumbDirName.substring(thumbDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), thumbDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                        imageDirName = imageDirName.substring(imageDirName.indexOf(aliYunOssConfig.getBucket() + File.separator), imageDirName.lastIndexOf("/")).replace(aliYunOssConfig.getBucket() + File.separator, "");
+                        StringJoiner thumbSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                        StringJoiner thumbNewSj = new StringJoiner("").add(thumbDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
+                        StringJoiner imageSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add(".jpg");
+                        StringJoiner imageNewSj = new StringJoiner("").add(imageDirName).add(File.separator).add(String.valueOf(paper.getWorkId())).add(File.separator).add(paper.getSubject().toString()).add(File.separator).add(paper.getAreaCode()).add(File.separator).add(paper.getExamNumber()).add("_").add(String.valueOf(start)).add(".jpg");
 
 
-                    File imageFile = new File(imagePath);
-                    if (imageFile.exists()) {
-                        imageFile.renameTo(new File(imageNew));
-                        InputStream is = new FileInputStream(imageNew);
-                        ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
-                        is.close();
+                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + paper.getExamNumber() + ".jpg";
+                        File thumbFile = ossUtil.ossDownload(thumbSj.toString(), thumbPath);
+                        File imageFile = ossUtil.ossDownload(imageSj.toString(), imagePath);
+                        ImageCompression.rotate(thumbFile, new File(thumbPath), degree);
+                        ImageCompression.rotate(imageFile, new File(imagePath), degree);
+                        FileInputStream in = new FileInputStream(new File(imagePath));
+                        sliceMD5 = DigestUtils.md5Hex(in);
+                        in.close();
+                        ossUtil.ossCopy(thumbSj.toString(), thumbNewSj.toString());
+                        ossUtil.ossCopy(imageSj.toString(), imageNewSj.toString());
+                        ossUtil.ossUpload(thumbSj.toString(), new FileInputStream(thumbFile));
+                        ossUtil.ossUpload(imageSj.toString(), new FileInputStream(imageFile));
+                        thumbFile.delete();
+                        imageFile.delete();
+                    } else {
+                        String fileName = paper.getExamNumber();
+                        if (ParamCache.paramMap.get(paper.getWorkId()).getNameRule() == 1) {
+                            Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), "0");
+                            fileName = MD5Util.getImageRuleMd5(paper.getWorkId(), paper.getSubject().ordinal(), student.getAreaCode(), paper.getExamNumber(), student.getId());
+                        }
+                        thumbPath = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                        thumbNew = systemConfig.getThumbDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
+                        imagePath = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + fileName + ".jpg";
+                        imageNew = systemConfig.getImageDir() + File.separator + paper.getWorkId() + File.separator + paper.getSubject().toString()
+                                + File.separator + paper.getAreaCode() + File.separator + fileName + "_" + start + ".jpg";
+                        LOGGER.info("生成缩略图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
+                        File thumbFile = new File(thumbPath);
+                        if (thumbFile.exists()) {
+                            LOGGER.info("生成缩略图:原文件名{},重命名为新文件名开始", fileName);
+                            thumbFile.renameTo(new File(thumbNew));
+                            LOGGER.info("生成缩略图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
+                            InputStream is = new FileInputStream(thumbNew);
+                            ImageCompression.rotate(new File(thumbNew), new File(thumbPath), degree);
+                            LOGGER.info("生成缩略图:原文件名{},旋转结束", fileName);
+                            is.close();
+                        }
+
+                        if (!thumbFile.exists()) {
+                            LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            new File(thumbNew).renameTo(thumbFile);
+                            LOGGER.info("生成缩略图:原文件名{},目标文件丢失,还原图片结束", fileName);
+                        } else {
+                            LOGGER.info("生成缩略图:原文件名{},旋转成功", fileName);
+                        }
+                        LOGGER.info("生成缩略图结束:原文件名{}", fileName);
+
+                        LOGGER.info("生成裁切图开始:原文件名{},新文件名{}", fileName, fileName + "_" + start);
+                        File imageFile = new File(imagePath);
+                        if (imageFile.exists()) {
+                            LOGGER.info("生成裁切图:原文件名{},重命名为新文件名开始", fileName);
+                            imageFile.renameTo(new File(imageNew));
+                            LOGGER.info("生成裁切图:原文件名{},重命名为新文件名结束,开始旋转", fileName);
+                            InputStream is = new FileInputStream(imageNew);
+                            ImageCompression.rotate(new File(imageNew), new File(imagePath), degree);
+                            LOGGER.info("生成裁切图:原文件名{},旋转结束", fileName);
+                            is.close();
+                        }
+                        if (!imageFile.exists()) {
+                            LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片开始", fileName);
+                            new File(imageNew).renameTo(imageFile);
+                            LOGGER.info("生成裁切图:原文件名{},目标文件丢失,还原图片结束", fileName);
+                        } else {
+                            LOGGER.info("生成裁切图:原文件名{},旋转成功", fileName);
+                        }
+                        LOGGER.info("生成裁切图结束:原文件名{}", fileName);
+                        FileInputStream in = new FileInputStream(new File(imagePath));
+                        sliceMD5 = DigestUtils.md5Hex(in);
+                        in.close();
                     }
                     }
-                    FileInputStream in = new FileInputStream(new File(imagePath));
-                    sliceMD5 = DigestUtils.md5Hex(in);
-                    in.close();
                 }
                 }
+                long end = System.currentTimeMillis();
+                LOGGER.info("生成缩略和裁切旋转图耗时:{},sliceMD5:{}", (end - start) / 1000 + "s", sliceMD5);
+                paper.setSliceMD5(sliceMD5);
+                paperRepo.save(paper);
             }
             }
-            long end = System.currentTimeMillis();
-            LOGGER.info("生成缩略和裁切旋转图耗时:{},sliceMD5:{}", (end - start) / 1000 + "s", sliceMD5);
-            paper.setSliceMD5(sliceMD5);
-            paperRepo.save(paper);
         } catch (FileNotFoundException e) {
         } catch (FileNotFoundException e) {
             e.printStackTrace();
             e.printStackTrace();
         } catch (IOException ioe) {
         } catch (IOException ioe) {

+ 67 - 4
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLogOperType.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.stmms.ms.core.domain;
 package cn.com.qmth.stmms.ms.core.domain;
 
 
+import java.util.*;
+
 /**
 /**
  * @Description: 操作日志类型
  * @Description: 操作日志类型
  * @Param:
  * @Param:
@@ -22,17 +24,17 @@ public enum MarkLogOperType {
     /**
     /**
      * 回评档位
      * 回评档位
      */
      */
-    ONCE_LEVEl(3, "回评档"),
+    ONCE_LEVEl(3, "回评档"),
 
 
     /**
     /**
      * 回评分数
      * 回评分数
      */
      */
-    ONCE_SCORE(4, "回评分"),
+    ONCE_SCORE(4, "回评分"),
 
 
     /**
     /**
      * 回评档位
      * 回评档位
      */
      */
-    CALLBACK_LEVEl(5, "档位打回"),
+    CALLBACK_LEVEl(5, "建议档位打回"),
 
 
     /**
     /**
      * 档位打回回评
      * 档位打回回评
@@ -77,7 +79,27 @@ public enum MarkLogOperType {
     /**
     /**
      * 档位偏差
      * 档位偏差
      */
      */
-    LEVEl_DEVIATION(14, "档位偏差");
+    LEVEl_DEVIATION(14, "档位偏差"),
+
+    /**
+     * 改档申请
+     */
+    CHANGE_LEVEL_APPLY(15, "改档申请"),
+
+    /**
+     * 改档同意
+     */
+    CHANGE_LEVEL_AGREE(16, "改档同意"),
+
+    /**
+     * 改档打档
+     */
+    CHANGE_LEVEL(17, "改档打档"),
+
+    /**
+     * 改档打档
+     */
+    CHANGE_SCORE(18, "改档打分");
 
 
     private int id;
     private int id;
 
 
@@ -135,6 +157,16 @@ public enum MarkLogOperType {
             return HANDLE_LEVEl.getId();
             return HANDLE_LEVEl.getId();
         } else if (value.trim().equals(LEVEl_DIFFERENCE.name)) {
         } else if (value.trim().equals(LEVEl_DIFFERENCE.name)) {
             return LEVEl_DIFFERENCE.getId();
             return LEVEl_DIFFERENCE.getId();
+        } else if (value.trim().equals(LEVEl_DEVIATION.name)) {
+            return LEVEl_DEVIATION.getId();
+        } else if (value.trim().equals(CHANGE_LEVEL_APPLY.name)) {
+            return CHANGE_LEVEL_APPLY.getId();
+        } else if (value.trim().equals(CHANGE_LEVEL_AGREE.name)) {
+            return CHANGE_LEVEL_AGREE.getId();
+        } else if (value.trim().equals(CHANGE_LEVEL.name)) {
+            return CHANGE_LEVEL.getId();
+        } else if (value.trim().equals(CHANGE_SCORE.name)) {
+            return CHANGE_SCORE.getId();
         } else {
         } else {
             return CRITERION_PAPER_SET.getId();
             return CRITERION_PAPER_SET.getId();
         }
         }
@@ -171,8 +203,39 @@ public enum MarkLogOperType {
             return HANDLE_LEVEl.name;
             return HANDLE_LEVEl.name;
         } else if (id == LEVEl_DIFFERENCE.getId()) {
         } else if (id == LEVEl_DIFFERENCE.getId()) {
             return LEVEl_DIFFERENCE.name;
             return LEVEl_DIFFERENCE.name;
+        } else if (id == LEVEl_DEVIATION.getId()) {
+            return LEVEl_DEVIATION.name;
+        } else if (id == CHANGE_LEVEL_APPLY.getId()) {
+            return CHANGE_LEVEL_APPLY.name;
+        } else if (id == CHANGE_LEVEL_AGREE.getId()) {
+            return CHANGE_LEVEL_AGREE.name;
+        } else if (id == CHANGE_LEVEL.getId()) {
+            return CHANGE_LEVEL.name;
+        } else if (id == CHANGE_SCORE.getId()) {
+            return CHANGE_SCORE.name;
         } else {
         } else {
             return CRITERION_PAPER_SET.name;
             return CRITERION_PAPER_SET.name;
         }
         }
     }
     }
+
+    /**
+     * 操作日志管理类型查询
+     * @return
+     */
+    public static List<Map> listTypes(){
+        MarkLogOperType[] values = MarkLogOperType.values();
+        Integer[] ints = {1, 2, 3, 4, 8, 7, 10, 5, 15, 16, 17, 18};
+        List<Integer> intList = Arrays.asList(ints);
+        List<Map> list = new ArrayList<>();
+        for (MarkLogOperType value : values) {
+            if(intList.contains(value.getId())) {
+                Map map = new HashMap();
+                map.put("id", value.getId());
+                map.put("type", value.name());
+                map.put("name", value.getName());
+                list.add(map);
+            }
+        }
+        return list;
+    }
 }
 }

+ 13 - 5
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/controller/MarkLogController.java

@@ -1,6 +1,5 @@
 package cn.com.qmth.stmms.ms.log.controller;
 package cn.com.qmth.stmms.ms.log.controller;
 
 
-import cn.com.qmth.stmms.ms.commons.utils.PageInfo;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingDTO;
 import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingDTO;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
@@ -22,9 +21,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
@@ -233,11 +230,11 @@ public class MarkLogController {
     public Object saveCollectLog(Long workId, Pageable pageable) {
     public Object saveCollectLog(Long workId, Pageable pageable) {
         List<Map> mapList = markLogRepo.findByWorkId(workId);
         List<Map> mapList = markLogRepo.findByWorkId(workId);
         if (!mapList.isEmpty() && mapList.size() > 0) {
         if (!mapList.isEmpty() && mapList.size() > 0) {
-            List<Long> longs = mapList.stream().map(m->Long.valueOf(m.get("id").toString())).collect(Collectors.toList());
+            List<Long> longs = mapList.stream().map(m -> Long.valueOf(m.get("id").toString())).collect(Collectors.toList());
 
 
             Specification<MarkLog> specification = (root, query, builder) -> {
             Specification<MarkLog> specification = (root, query, builder) -> {
                 List<Predicate> predicates = new ArrayList<>();
                 List<Predicate> predicates = new ArrayList<>();
-                if(longs != null && longs.size() > 0) {
+                if (longs != null && longs.size() > 0) {
                     CriteriaBuilder.In<Object> in = builder.in(root.get("id"));
                     CriteriaBuilder.In<Object> in = builder.in(root.get("id"));
                     for (Long id : longs) {
                     for (Long id : longs) {
                         in.value(id);
                         in.value(id);
@@ -263,4 +260,15 @@ public class MarkLogController {
         }
         }
         return null;
         return null;
     }
     }
+
+    /**
+     * 设备监控
+     *
+     * @return
+     * @throws ParseException
+     */
+    @RequestMapping(value = "/listTypes", method = RequestMethod.GET)
+    public Object listTypes() {
+        return MarkLogOperType.listTypes();
+    }
 }
 }

+ 31 - 12
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/ChangeLevelApi.java

@@ -2,15 +2,11 @@ package cn.com.qmth.stmms.ms.marking.api;
 
 
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
-import cn.com.qmth.stmms.ms.core.domain.ChangeLevel;
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
-import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
-import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
-import cn.com.qmth.stmms.ms.core.repository.ChangeLevelRepo;
-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.domain.user.MarkUser;
+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 cn.com.qmth.stmms.ms.marking.assembler.ChangeLevelAssembler;
 import cn.com.qmth.stmms.ms.marking.assembler.ChangeLevelAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.ChangeLevelDTO;
 import cn.com.qmth.stmms.ms.marking.dto.ChangeLevelDTO;
@@ -52,6 +48,15 @@ public class ChangeLevelApi {
     @Autowired
     @Autowired
     private MarkingService markingService;
     private MarkingService markingService;
 
 
+    @Autowired
+    private MarkLogRepo markLogRepo;
+
+    @Autowired
+    private WorkRepo workRepo;
+
+    @Autowired
+    MarkUserRepo markUserRepo;
+
     /**
     /**
      * 查询改档列表
      * 查询改档列表
      *
      *
@@ -116,14 +121,17 @@ public class ChangeLevelApi {
      * @return
      * @return
      */
      */
     @RequestMapping(value = "{markSubject}/changeLevel", method = RequestMethod.POST)
     @RequestMapping(value = "{markSubject}/changeLevel", method = RequestMethod.POST)
+    @Transactional
     public ResponseEntity changeLevel(@PathVariable MarkSubject markSubject,
     public ResponseEntity changeLevel(@PathVariable MarkSubject markSubject,
                                       @RequestParam Long paperId,
                                       @RequestParam Long paperId,
-                                      @RequestParam String level) {
+                                      @RequestParam String level,
+                                      @RequestParam Long userId) {
         //只有打分阶段才能改档
         //只有打分阶段才能改档
         if (!Objects.equals(markSubject.getStage().name(), MarkStage.SCORE.name())) {
         if (!Objects.equals(markSubject.getStage().name(), MarkStage.SCORE.name())) {
             throw new RuntimeException("只有打分阶段才允许改档");
             throw new RuntimeException("只有打分阶段才允许改档");
         }
         }
         Paper paper = paperRepo.findOne(paperId);
         Paper paper = paperRepo.findOne(paperId);
+        MarkUser markUser = markUserRepo.findOne(userId);
 
 
         //
         //
         ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperId(markSubject.getWorkId(), markSubject.getSubject().name(), paperId);
         ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperId(markSubject.getWorkId(), markSubject.getSubject().name(), paperId);
@@ -135,17 +143,21 @@ public class ChangeLevelApi {
             changeLevel.setOriginalLevel(paper.getLevel());
             changeLevel.setOriginalLevel(paper.getLevel());
             changeLevel.setSuggestLevel(level);
             changeLevel.setSuggestLevel(level);
             changeLevel.setAuditStatus(0);
             changeLevel.setAuditStatus(0);
-            //todo
-//            changeLevel.setCreateId();
+            changeLevel.setCreateId(markUser.getId());
             changeLevel.setCreateDate(new Date());
             changeLevel.setCreateDate(new Date());
         } else {
         } else {
             changeLevel.setOriginalLevel(paper.getLevel());
             changeLevel.setOriginalLevel(paper.getLevel());
             changeLevel.setSuggestLevel(level);
             changeLevel.setSuggestLevel(level);
-//            changeLevel.setCreateId();
+            changeLevel.setCreateId(markUser.getId());
             changeLevel.setCreateDate(new Date());
             changeLevel.setCreateDate(new Date());
         }
         }
         changeLevelRepo.save(changeLevel);
         changeLevelRepo.save(changeLevel);
 
 
+        //记录日志
+        Work work = workRepo.findOne(paper.getWorkId());
+        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.CHANGE_LEVEL_APPLY.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, work.getName());
+        markLogRepo.save(markLog);
+
         return new ResponseEntity(HttpStatus.OK);
         return new ResponseEntity(HttpStatus.OK);
     }
     }
 
 
@@ -159,7 +171,8 @@ public class ChangeLevelApi {
     @RequestMapping(value = "/changeLevelAudit", method = RequestMethod.POST)
     @RequestMapping(value = "/changeLevelAudit", method = RequestMethod.POST)
     @Transactional
     @Transactional
     public ResponseEntity changeLevelAudit(@RequestParam Long id,
     public ResponseEntity changeLevelAudit(@RequestParam Long id,
-                                           @RequestParam Integer auditStatus) {
+                                           @RequestParam Integer auditStatus,
+                                           @RequestParam Long userId) {
         ChangeLevel changeLevel = changeLevelRepo.findOne(id);
         ChangeLevel changeLevel = changeLevelRepo.findOne(id);
         changeLevel.setAuditStatus(auditStatus);
         changeLevel.setAuditStatus(auditStatus);
         changeLevelRepo.save(changeLevel);
         changeLevelRepo.save(changeLevel);
@@ -181,6 +194,12 @@ public class ChangeLevelApi {
                 markTasksScore.forEach(o-> o.setResult(null));
                 markTasksScore.forEach(o-> o.setResult(null));
                 markTaskRepo.save(markTasksScore);
                 markTaskRepo.save(markTasksScore);
             }
             }
+
+            //记录日志
+            MarkUser markUser = markUserRepo.findOne(userId);
+            Work work = workRepo.findOne(paper.getWorkId());
+            MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.CHANGE_LEVEL_AGREE.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, work.getName());
+            markLogRepo.save(markLog);
         }
         }
         return new ResponseEntity(HttpStatus.OK);
         return new ResponseEntity(HttpStatus.OK);
     }
     }

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java

@@ -148,7 +148,7 @@ public class PaperApi {
                                      Pageable pageable) {
                                      Pageable pageable) {
         Sort sort = null;
         Sort sort = null;
         if (Objects.equals("1", sortBy)) {
         if (Objects.equals("1", sortBy)) {
-            sort = new Sort(Sort.Direction.DESC, "updatedOn");
+            sort = new Sort(Sort.Direction.DESC, "uploadedOn");
         }
         }
         if (Objects.equals("2", sortBy)) {
         if (Objects.equals("2", sortBy)) {
             sort = new Sort(Sort.Direction.ASC, "examNumber");
             sort = new Sort(Sort.Direction.ASC, "examNumber");

+ 16 - 8
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java

@@ -5,22 +5,23 @@ import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
-import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
-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.*;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
+import cn.com.qmth.stmms.ms.marking.api.MakrerApi;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
+import com.sun.glass.ui.Window;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -48,6 +49,9 @@ public class PaperAssembler {
     @Autowired
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
     private MarkSubjectRepo markSubjectRepo;
 
 
+    @Autowired
+    private LevelRepo levelRepo;
+
     public PaperDTO toDTO(Paper paper) {
     public PaperDTO toDTO(Paper paper) {
         String imgSrc = null;
         String imgSrc = null;
         String thumbSrc = null;
         String thumbSrc = null;
@@ -110,10 +114,14 @@ public class PaperAssembler {
             paperDTO.setShift(paper.isShift());
             paperDTO.setShift(paper.isShift());
             paperDTO.setShiftScore(paper.isShiftScore());
             paperDTO.setShiftScore(paper.isShiftScore());
             //计算levelValue和(试评阶段不用)
             //计算levelValue和(试评阶段不用)
-            if(markSubject.getTest() == 0) {
-                List<MarkTask> markTaskList = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
-                int sum = markTaskList.stream().mapToInt(m-> m.getLevelValue() == null ? 0 : m.getLevelValue()).sum();
-                paperDTO.setSortSum(sum);
+            if(markSubject.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
+                List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
+                if(!levels.isEmpty() && levels.size() > 0){
+                    Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
+                    List<MarkTask> markTaskList = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
+                    int sum = markTaskList.stream().mapToInt(m-> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
+                    paperDTO.setSortSum(sum);
+                }
             }
             }
         }
         }
         return paperDTO;
         return paperDTO;

+ 15 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -16,6 +16,7 @@ import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import javax.naming.event.ObjectChangeListener;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -369,6 +370,13 @@ public class StageControlService {
             throw new RuntimeException("评卷员没有进行分组");
             throw new RuntimeException("评卷员没有进行分组");
         }
         }
 
 
+        for (MarkerGroup markerGroup : markerGroups) {
+            if(markerGroup.getMarkers().size() == 0){
+                statusMap.put(markSubject.getId(), false);
+                throw new RuntimeException("分组里没有评卷员");
+            }
+        }
+
         //校验发布任务数量
         //校验发布任务数量
         for (TaskPublishSetting taskPublishSetting : taskList) {
         for (TaskPublishSetting taskPublishSetting : taskList) {
             if (Objects.nonNull(taskPublishSetting.getTaskCount()) && taskPublishSetting.getTaskCount() > 0 && taskPublishSetting.getWaitCount() < taskPublishSetting.getTaskCount()) {
             if (Objects.nonNull(taskPublishSetting.getTaskCount()) && taskPublishSetting.getTaskCount() > 0 && taskPublishSetting.getWaitCount() < taskPublishSetting.getTaskCount()) {
@@ -384,7 +392,12 @@ public class StageControlService {
         }
         }
 
 
         //总的发布任务数
         //总的发布任务数
-        int totalTaskCount = taskList.stream().mapToInt(TaskPublishSetting::getTaskCount).sum();
+        int totalTaskCount = taskList.stream().map(m->{
+            if(Objects.isNull(m.getTaskCount())){
+                m.setTaskCount(0);
+            }
+            return m;
+        }).mapToInt(TaskPublishSetting::getTaskCount).sum();
 
 
         Sort sort = new Sort("questionId", "level");
         Sort sort = new Sort("questionId", "level");
         List<Paper> papers;
         List<Paper> papers;
@@ -442,7 +455,7 @@ public class StageControlService {
                 taskPublishSetting.setCode(m.getCode());
                 taskPublishSetting.setCode(m.getCode());
                 taskPublishSetting.setSuccessCount(m.getSuccessCount());
                 taskPublishSetting.setSuccessCount(m.getSuccessCount());
                 taskPublishSetting.setTotalCount(m.getTotalCount());
                 taskPublishSetting.setTotalCount(m.getTotalCount());
-                taskPublishSetting.setWaitCount(m.getTotalCount());
+                taskPublishSetting.setWaitCount(m.getWaitCount());
                 taskPublishSetting.setSortRule(m.getSortRule());
                 taskPublishSetting.setSortRule(m.getSortRule());
                 taskPublishSetting.setTaskCount(0);
                 taskPublishSetting.setTaskCount(0);
                 taskPublishSetting.setPublishCount(max + 1);
                 taskPublishSetting.setPublishCount(max + 1);