Переглянути джерело

增加上传原图接口,修改根据任务密号查询及评卷员权重验证

ting.yin 6 роки тому
батько
коміт
d02986d233

+ 7 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -50,6 +50,13 @@ public class UserApi {
 
     @RequestMapping(value = "{domain}", method = RequestMethod.PUT)
     public void update(@PathVariable MarkUser domain, @RequestBody MarkUser user) {
+    	MarkSubject markSubject = markSubjectRepo.findOne(user.getWorkId() + "-" + user.getSubject().toString());
+        if (user.getWeight()-domain.getWeight()!=0 && !markSubject.getStage().equals(MarkStage.INIT)) {
+            throw new RuntimeException("请在分档阶段前修改权重");
+        }
+        if(!(user.getWeight()>0)){
+        	throw new RuntimeException("评卷员权重必须大于0");
+        }
         domain.setName(user.getName());
         domain.setMarkRight(user.getMarkRight());
         domain.setWeight(user.getWeight());

+ 41 - 12
stmms-ms-collect/src/main/java/cn/com/qmth/stmms/ms/collect/api/CollectApi.java

@@ -136,18 +136,19 @@ public class CollectApi {
      */
     @RequestMapping(value = "file/ms-slice/{workId}/{subjectId}/{fileName}", method = { RequestMethod.PUT, RequestMethod.POST })
     public void upload(@PathVariable Long workId,@PathVariable Integer subjectId,
-    					@PathVariable String fileName,@RequestParam(required = false) boolean original,
+    					@PathVariable String fileName,
                        HttpServletRequest request,HttpServletResponse response) throws IOException{
+    	String md5 = request.getHeader("md5");
+    	InputStream inputStream = request.getInputStream();
+        String sliceMD5 = DigestUtils.md5Hex(inputStream);
+        if(!md5.equalsIgnoreCase(sliceMD5)){
+        	throw new RuntimeException("图片md5值不一致");
+        }
         Student student = studentRepo.findByWorkIdAndExamNumber(workId,fileName);
         Subject subject = Subject.values()[subjectId-1];
         Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
                 student.getExamNumber());
-        InputStream inputStream = request.getInputStream();
-        if(original){//仅保存原图
-        	String savePath = systemConfig.getSheetDir() + File.separator + workId + File.separator + subject
-        			+ File.separator + student.getAreaCode();
-        	saveImage(student, inputStream, savePath);
-        }else{
+        	//保存遮盖图
         	String savePath = systemConfig.getImageDir() + File.separator + workId + File.separator + subject
         			+ File.separator + student.getAreaCode();
         	File outFile = saveImage(student, inputStream, savePath);
@@ -161,11 +162,8 @@ public class CollectApi {
         	BufferedImage bufferedImage = ImageCompression.compress(outFile, compressionConfig);
         	String thumbFileName = thumbDir + File.separator + student.getExamNumber() + ".jpg";
         	ImageIO.write(bufferedImage, "jpg", new File(thumbFileName));
-            String sliceMD5 = DigestUtils.md5Hex(new FileInputStream(thumbFileName));
-            paper.setSliceMD5(sliceMD5);
-        }
-    	String sheetMD5 = DigestUtils.md5Hex(inputStream);
-    	paper.setSheetMD5(sheetMD5);
+
+        paper.setSliceMD5(sliceMD5);
     	paperRepo.save(paper);
     }
 
@@ -179,6 +177,37 @@ public class CollectApi {
 		FileCopyUtils.copy(inputStream, new FileOutputStream(outFile));
 		return outFile;
 	}
+	
+    /**
+     * 上传裁切原图并压缩
+     * @param workId
+     * @param subjectId
+     * @param fileName
+     * @param request
+     * @param response
+     * @throws IOException
+     */
+    @RequestMapping(value = "file/ms-sheet/{workId}/{subjectId}/{fileName}", method = { RequestMethod.PUT, RequestMethod.POST })
+    public void uploadsheet(@PathVariable Long workId,@PathVariable Integer subjectId,
+    					@PathVariable String fileName,
+                       HttpServletRequest request,HttpServletResponse response) throws IOException{
+        Student student = studentRepo.findByWorkIdAndExamNumber(workId,fileName);
+        Subject subject = Subject.values()[subjectId-1];
+        Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject,
+                student.getExamNumber());
+        InputStream inputStream = request.getInputStream();
+    	String md5 = request.getHeader("md5");
+        String sheetMD5 = DigestUtils.md5Hex(inputStream);
+        if(!md5.equalsIgnoreCase(sheetMD5)){
+        	throw new RuntimeException("图片md5值不一致");
+        }
+        //保存原图图
+        String savePath = systemConfig.getSheetDir() + File.separator + workId + File.separator + subject
+        			+ File.separator + student.getAreaCode();
+        saveImage(student, inputStream, savePath);
+        paper.setSheetMD5(sheetMD5);
+    	paperRepo.save(paper);
+    }
     
     @RequestMapping(value = "subject/collect-config", method = RequestMethod.POST)
     public boolean updateConfig(@RequestBody  CollectSubjectDTO collectSubjectDTO){

+ 2 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -107,8 +107,10 @@ public class Paper implements Serializable {
 	//生源地
     private String sourceName;
     //原图MD5
+    @Column(name="sheet_md5")
     private String sheetMD5;
     //裁切图MD5
+    @Column(name="slice_md5")
     private String sliceMD5;
     
     public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual) {

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

@@ -9,7 +9,7 @@ import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
-import org.assertj.core.util.Strings;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.*;
 import org.springframework.data.jpa.domain.Specification;
@@ -19,8 +19,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 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.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+
 import org.springframework.web.bind.annotation.*;
 
 import javax.persistence.criteria.Predicate;
@@ -89,6 +92,26 @@ public class PaperApi {
         }
         return paperDTO;
     }
+    
+    @RequestMapping(value = "search/byTaskSecretNumber", method = RequestMethod.GET)
+    public PaperDTO getByTaskSecretNumber(@RequestParam Long questionId,
+                                           @RequestParam String sn) {
+    	PaperDTO paperDTO = null;
+        Specification<MarkTask> specification = (root,query,builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            predicates.add(builder.equal(root.get("paper").get("questionId"),questionId));
+            if(sn != null){
+                predicates.add(builder.equal(root.get("secretNumber"),sn));
+            }
+            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Optional<MarkTask> taskOptional = markTaskRepo.findAll(specification,new PageRequest(0,1))
+                .getContent().stream().findFirst();
+        if(taskOptional.isPresent()){
+            paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
+        }
+        return paperDTO;
+    }
 
     @RequestMapping(value="listByQuestion",method = RequestMethod.GET)
     public PageableDTO listByQuerion(@RequestParam Long workId,