浏览代码

答题卡适配卡格式上传

xiatian 1 年之前
父节点
当前提交
1f8ee4f6f8

+ 22 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerCardController.java

@@ -16,6 +16,7 @@ import com.qmth.boot.core.exception.ReentrantException;
 import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.mark.bean.UriVo;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardSaveDomain;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardSaveVo;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardVo;
@@ -88,7 +89,7 @@ public class ScanAnswerCardController {
 		}
 		if (concurrentService.getLock(LockType.CARD_SAVE + "-" + examId).tryLock()) {
 			try {
-				scanAnswerCardService.cardDelete(examId,number);
+				scanAnswerCardService.cardDelete(examId, number);
 				AnswerCardSaveVo vo = new AnswerCardSaveVo(number, System.currentTimeMillis());
 				return vo;
 			} finally {
@@ -98,4 +99,24 @@ public class ScanAnswerCardController {
 			throw new ReentrantException("正在处理卡格式,请稍后再试");
 		}
 	}
+
+	@ApiOperation(value = "答题卡适配卡格式上传")
+	@RequestMapping(value = "adapte/upload", method = RequestMethod.POST)
+	public UriVo adapteUpload(@RequestParam Long examId, @RequestParam String coursePaperId,
+			@RequestParam Integer cardNumber, @RequestParam MultipartFile file, @RequestParam String md5,
+			@RequestParam Integer dpi, @RequestParam(required = false) String remark) {
+		BasicExam exam = basicExamService.getById(examId);
+		if (exam == null) {
+			throw new ParameterException("未找到考试信息");
+		}
+		if (concurrentService.getLock(LockType.CARD_SAVE + "-" + examId).tryLock()) {
+			try {
+				return scanAnswerCardService.adapteUpload(examId,coursePaperId, cardNumber, md5, dpi, file,remark);
+			} finally {
+				concurrentService.getLock(LockType.CARD_SAVE + "-" + examId).unlock();
+			}
+		} else {
+			throw new ReentrantException("正在处理卡格式,请稍后再试");
+		}
+	}
 }

+ 21 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/UriVo.java

@@ -0,0 +1,21 @@
+package com.qmth.teachcloud.mark.bean;
+
+public class UriVo {
+
+    private String uri;
+
+    public static UriVo create(String uri) {
+        UriVo vo = new UriVo();
+        vo.setUri(uri);
+        return vo;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+}

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/FileType.java

@@ -11,7 +11,7 @@ public enum FileType {
     CARD("题卡", "%d/card/answer/%d.%s"),
 //    ADMIN_SLICE("管理员上传裁切图", "%d/upload/%s/%d-%d-%d/%s.%s"),
 //    ADMIN_SHEET("管理员上传裁原图", "%d/upload/%s/%d-%d/%s.%s"),
-//    ADAPTE_FILE("适配题卡", "%d/card/answer/%d/%s.%s"),
+    ADAPTE_FILE("适配题卡", "%d/card/answer/%d/%s.%s"),
     ;
 
     private String name;

+ 4 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/FileService.java

@@ -8,4 +8,8 @@ public interface FileService {
 
 	String uploadAnswerCard(InputStream in, String md5, Long examId, Integer number);
 
+	String getAdapteFileUri(Long examId, Integer cardNumber);
+
+	String uploadAdapteFile(InputStream in, String md5, Long examId, Integer number);
+
 }

+ 6 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardService.java

@@ -1,11 +1,14 @@
 package com.qmth.teachcloud.mark.service;
 
+import com.qmth.teachcloud.mark.bean.UriVo;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardSaveDomain;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardVo;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
 
 import java.util.List;
 
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -26,4 +29,7 @@ public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
 
 	void cardDelete(Long examId, Integer number);
 
+	UriVo adapteUpload(Long examId, String coursePaperId, Integer cardNumber, String md5, Integer dpi,
+			MultipartFile file, String remark);
+
 }

+ 24 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/FileServiceImpl.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
 import com.aliyuncs.http.FormatType;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.boot.core.fss.store.FileStore;
+import com.qmth.boot.tools.uuid.FastUUID;
 import com.qmth.teachcloud.mark.enums.FileType;
 import com.qmth.teachcloud.mark.service.FileService;
 
@@ -43,5 +44,28 @@ public class FileServiceImpl implements FileService {
             }
         }
     }
+    @Override
+    public String uploadAdapteFile(InputStream in, String md5, Long examId, Integer number) {
+    	String path = getAdapteFileUri(examId, number);
+        try {
+            fileStore.write(path, in, md5);
+            return path;
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new StatusException("文件上传出错:"+path, e);
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                }
+            }
+        }
+    }
 
+    @Override
+    public String getAdapteFileUri(Long examId, Integer cardNumber) {
+        return FileType.ADAPTE_FILE.getPath(examId, cardNumber, FastUUID.get(), FormatType.JSON.name().toLowerCase());
+    }
 }

+ 30 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -6,6 +6,7 @@ import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
+import com.qmth.teachcloud.mark.bean.UriVo;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardSaveDomain;
 import com.qmth.teachcloud.mark.bean.answercard.AnswerCardVo;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
@@ -167,4 +169,32 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         }
 	}
 
+	@Transactional
+	@Override
+	public UriVo adapteUpload(Long examId, String coursePaperId, Integer cardNumber, String md5, Integer dpi,
+			MultipartFile file, String remark) {
+		MarkPaper mp = markPaperService.getByExamIdAndCoursePaperId(examId,coursePaperId);
+		if (MarkPaperStatus.FINISH.equals(mp.getStatus())) {
+			throw new ParameterException("阅卷已结束");
+		}
+		ScanAnswerCard card = findByExamAndNumber(examId, cardNumber);
+		if (card == null) {
+			throw new ParameterException("未找到卡格式信息");
+		}
+		if (!card.getNeedAdapte()) {
+            throw new ParameterException("卡格式无需适配");
+        }
+		String filePath = null;
+		try {
+			fileService.uploadAdapteFile(file.getInputStream(), md5, examId, cardNumber);
+		} catch (IOException e) {
+			throw new ParameterException("文件上传失败", e);
+		}
+		card.setAdapteMd5(md5);
+		card.setAdapteUri(filePath);
+		UriVo vo=new UriVo();
+		vo.setUri(filePath);
+		return vo;
+	}
+
 }