浏览代码

答题卡扫描原图上传

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

+ 15 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerController.java

@@ -5,14 +5,18 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.bean.scananswer.SheetUploadVo;
 import com.qmth.teachcloud.mark.dto.refix.AnswerRefixDomain;
 import com.qmth.teachcloud.mark.dto.refix.AnswerRefixVo;
+import com.qmth.teachcloud.mark.service.ScanBatchService;
 import com.qmth.teachcloud.mark.service.ScanRefixBatchService;
 
 import io.swagger.annotations.Api;
@@ -33,6 +37,9 @@ public class ScanAnswerController {
 
 	@Autowired
 	private ScanRefixBatchService refixBatchService;
+	
+	@Autowired
+	private ScanBatchService scanBatchService;
 
 	@ApiOperation(value = "答题卡二次识别")
 	@RequestMapping(value = "refix", method = RequestMethod.POST)
@@ -41,4 +48,12 @@ public class ScanAnswerController {
 		return refixBatchService.answerRefix(user.getId(), query);
 	}
 
+	@ApiOperation(value = "答题卡扫描原图上传")
+	@RequestMapping(value = "sheet/upload", method = RequestMethod.POST)
+	public SheetUploadVo sheetUpload(@RequestParam Long batchId, @RequestParam String coursePaperId,
+			@RequestParam String studentCode, @RequestParam Integer paperNumber, @RequestParam Integer pageIndex,
+			@RequestParam MultipartFile file, @RequestParam String md5) {
+		return scanBatchService.sheetUpload(batchId, coursePaperId,studentCode, paperNumber, pageIndex, file, md5);
+	}
+
 }

+ 32 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scananswer/SheetUploadVo.java

@@ -0,0 +1,32 @@
+package com.qmth.teachcloud.mark.bean.scananswer;
+
+public class SheetUploadVo {
+
+    private String uri;
+
+    private Long updateTime;
+
+    public static SheetUploadVo create(String uri) {
+        SheetUploadVo vo = new SheetUploadVo();
+        vo.setUri(uri);
+        vo.setUpdateTime(System.currentTimeMillis());
+        return vo;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}

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

@@ -5,7 +5,7 @@ package com.qmth.teachcloud.mark.enums;
  */
 public enum FileType {
 
-//    SHEET("原图", "%d/answer/%d/%s/%d-%d.%s"),
+    SHEET("原图", "%d/answer/%d/%s/%s/%d-%d.%s"),
 //    SLICE("裁切图", "%d/answer/%d/%s/%d-%d-%d.%s"),
 //    PACKAGE("签到表", "%d/card/package.%s"),
     CARD("题卡", "%d/card/answer/%d.%s"),

+ 22 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/FormatType.java

@@ -0,0 +1,22 @@
+package com.qmth.teachcloud.mark.enums;
+
+/**
+ * 文件管理支持的格式类型
+ */
+public enum FormatType {
+
+    JPG, JSON, PDF, ZIP;
+
+    public String getExtName() {
+        return toString().toLowerCase();
+    }
+
+    public static FormatType findByText(String text) {
+        for (FormatType type : values()) {
+            if (type.toString().equalsIgnoreCase(text)) {
+                return type;
+            }
+        }
+        return null;
+    }
+}

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

@@ -11,5 +11,10 @@ public interface FileService {
 	String getAdapteFileUri(Long examId, Integer cardNumber);
 
 	String uploadAdapteFile(InputStream in, String md5, Long examId, Integer number);
+	
+	 String uploadSheet(InputStream ins, String md5, Long examId, Long batchId, String coursePaperId,String studentCode, Integer paperNumber,
+	            Integer pageIndex);
+
+	String getSheetUri(Long examId, Long batchId, String coursePaperId,String studentCode, Integer paperNumber, Integer pageIndex);
 
 }

+ 7 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanBatchService.java

@@ -6,7 +6,11 @@ import com.qmth.teachcloud.mark.bean.answerbatch.AnswerSaveVo;
 import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateDomain;
 import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateVo;
 import com.qmth.teachcloud.mark.bean.answerbatch.BatchFinishVo;
+import com.qmth.teachcloud.mark.bean.scananswer.SheetUploadVo;
 import com.qmth.teachcloud.mark.entity.ScanBatch;
+
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -31,4 +35,7 @@ public interface ScanBatchService extends IService<ScanBatch> {
 
 	Integer findStudentCountByBatch(Long batchId);
 
+	SheetUploadVo sheetUpload(Long batchId, String coursePaperId, String studentCode, Integer paperNumber,
+			Integer pageIndex, MultipartFile file, String md5);
+
 }

+ 77 - 49
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/FileServiceImpl.java

@@ -6,66 +6,94 @@ import java.io.InputStream;
 import org.springframework.beans.factory.annotation.Autowired;
 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.enums.FormatType;
 import com.qmth.teachcloud.mark.service.FileService;
 
 @Service
 public class FileServiceImpl implements FileService {
 
-    @Autowired
-    private FileStore fileStore;
+	@Autowired
+	private FileStore fileStore;
 
-    @Override
-    public String getAnswerCardUri(Long examId, Integer number) {
-        return FileType.CARD.getPath(examId, number, FormatType.JSON.name().toLowerCase());
-    }
+	@Override
+	public String getAnswerCardUri(Long examId, Integer number) {
+		return FileType.CARD.getPath(examId, number, FormatType.JSON.name().toLowerCase());
+	}
 
+	@Override
+	public String uploadAnswerCard(InputStream in, String md5, Long examId, Integer number) {
+		String path = getAnswerCardUri(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 uploadAnswerCard(InputStream in, String md5, Long examId, Integer number) {
-    	String path = getAnswerCardUri(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 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 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());
-    }
+	@Override
+	public String getAdapteFileUri(Long examId, Integer cardNumber) {
+		return FileType.ADAPTE_FILE.getPath(examId, cardNumber, FastUUID.get(), FormatType.JSON.name().toLowerCase());
+	}
+
+	@Override
+	public String uploadSheet(InputStream in, String md5, Long examId, Long batchId, String coursePaperId,
+			String studentCode, Integer paperNumber, Integer pageIndex) {
+		String path = getSheetUri(examId, batchId, coursePaperId,studentCode, paperNumber, pageIndex);
+		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 getSheetUri(Long examId, Long batchId, String coursePaperId, String studentCode, Integer paperNumber,
+			Integer pageIndex) {
+		return FileType.SHEET.getPath(examId, batchId, coursePaperId, studentCode, paperNumber, pageIndex,
+				FormatType.JPG.name().toLowerCase());
+	}
 }

+ 153 - 129
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanBatchServiceImpl.java

@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
 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.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.concurrent.service.ConcurrentService;
@@ -21,6 +22,7 @@ import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateVo;
 import com.qmth.teachcloud.mark.bean.answerbatch.BatchFinishVo;
 import com.qmth.teachcloud.mark.bean.answerbatch.Paper;
 import com.qmth.teachcloud.mark.bean.answerbatch.Rescan;
+import com.qmth.teachcloud.mark.bean.scananswer.SheetUploadVo;
 import com.qmth.teachcloud.mark.bean.scanpaper.PaperVo;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
@@ -32,6 +34,7 @@ import com.qmth.teachcloud.mark.entity.ScanStudentPaper;
 import com.qmth.teachcloud.mark.enums.BatchStatus;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.mapper.ScanBatchMapper;
+import com.qmth.teachcloud.mark.service.FileService;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
 import com.qmth.teachcloud.mark.service.ScanBatchPaperService;
@@ -49,27 +52,28 @@ import com.qmth.teachcloud.mark.service.ScanPaperService;
  */
 @Service
 public class ScanBatchServiceImpl extends ServiceImpl<ScanBatchMapper, ScanBatch> implements ScanBatchService {
-
-    @Autowired
-    private ConcurrentService concurrentService;
+	@Autowired
+	private FileService fileService;
+	@Autowired
+	private ConcurrentService concurrentService;
 	@Autowired
 	private MarkStudentService markStudentService;
-	
+
 	@Autowired
 	private ScanPaperService scanPaperService;
-	
+
 	@Autowired
 	private ScanPaperPageService scanPaperPageService;
-	
+
 	@Autowired
 	private ScanBatchPaperService scanBatchPaperService;
-	
+
 	@Autowired
 	private ScanAnswerCardService scanAnswerCardService;
 
 	@Transactional
 	@Override
-	public BatchCreateVo batchCreate(BatchCreateDomain domain,SysUser sysUser) {
+	public BatchCreateVo batchCreate(BatchCreateDomain domain, SysUser sysUser) {
 		List<Rescan> rescan = new ArrayList<>();
 		String packageCode = null;
 		for (String studentCode : domain.getStudentCodes()) {
@@ -100,142 +104,162 @@ public class ScanBatchServiceImpl extends ServiceImpl<ScanBatchMapper, ScanBatch
 		vo.setCreateTime(b.getCreateTime());
 		return vo;
 	}
-	
+
 	private Rescan getRescan(MarkStudent student) {
-        Rescan res = new Rescan();
-        res.setStudentCode(student.getStudentCode());
-        List<PaperVo> papers = scanPaperService.findStudentPaper(student.getId());
-        List<Paper> resPapers = new ArrayList<>();
-        res.setPapers(resPapers);
-        if (CollectionUtils.isEmpty(papers)) {
-            return null;
-        }
-        PaperVo first = papers.get(0);
-        res.setBatchId(first.getBatchId());
-        res.setUser(first.getUserName());
-        res.setCreateTime(first.getCreateTime());
-        for (PaperVo paper : papers) {
-            Paper p = new Paper();
-            p.setId(paper.getId());
-            p.setNumber(paper.getNumber());
-            p.setMismatch(paper.getMismatch());
-            List<String> pages = new ArrayList<>();
-            p.setPages(pages);
-            List<ScanPaperPage> paperPages = scanPaperPageService.listByPaperId(paper.getId());
-            if (CollectionUtils.isNotEmpty(paperPages)) {
-                for (ScanPaperPage pp : paperPages) {
-                    pages.add(pp.getSheetPath());
-                }
-            }
-            resPapers.add(p);
-        }
-        return res;
-    }
+		Rescan res = new Rescan();
+		res.setStudentCode(student.getStudentCode());
+		List<PaperVo> papers = scanPaperService.findStudentPaper(student.getId());
+		List<Paper> resPapers = new ArrayList<>();
+		res.setPapers(resPapers);
+		if (CollectionUtils.isEmpty(papers)) {
+			return null;
+		}
+		PaperVo first = papers.get(0);
+		res.setBatchId(first.getBatchId());
+		res.setUser(first.getUserName());
+		res.setCreateTime(first.getCreateTime());
+		for (PaperVo paper : papers) {
+			Paper p = new Paper();
+			p.setId(paper.getId());
+			p.setNumber(paper.getNumber());
+			p.setMismatch(paper.getMismatch());
+			List<String> pages = new ArrayList<>();
+			p.setPages(pages);
+			List<ScanPaperPage> paperPages = scanPaperPageService.listByPaperId(paper.getId());
+			if (CollectionUtils.isNotEmpty(paperPages)) {
+				for (ScanPaperPage pp : paperPages) {
+					pages.add(pp.getSheetPath());
+				}
+			}
+			resPapers.add(p);
+		}
+		return res;
+	}
 
 	@Transactional
 	@Override
 	public BatchFinishVo batchFinish(Long id) {
 		ScanBatch batch = checkBatchStatus(getById(id));
 		batch.setStatus(BatchStatus.FINISH);
-        this.saveOrUpdate(batch);
-        BatchFinishVo vo = new BatchFinishVo();
-        vo.setStatus(batch.getStatus());
-        vo.setUpdateTime(System.currentTimeMillis());
-        return vo;
+		this.saveOrUpdate(batch);
+		BatchFinishVo vo = new BatchFinishVo();
+		vo.setStatus(batch.getStatus());
+		vo.setUpdateTime(System.currentTimeMillis());
+		return vo;
 	}
 
 	@Transactional
 	@Override
 	public AnswerSaveVo batchSave(AnswerDomain domain, SysUser user) {
 		ScanBatch batch = checkBatchStatus(getById(domain.getBatchId()));
-        String studentCode = domain.getStudentCode();
-        MarkStudent student = markStudentService.findByExamIdAndCoursePaperIdAndStudentCode(batch.getExamId(),
-        		batch.getCoursePaperId(), studentCode);
+		String studentCode = domain.getStudentCode();
+		MarkStudent student = markStudentService.findByExamIdAndCoursePaperIdAndStudentCode(batch.getExamId(),
+				batch.getCoursePaperId(), studentCode);
 		if (student == null) {
 			throw new ParameterException("未找到考生信息:" + studentCode);
 		}
-		ScanAnswerCard answerCard = scanAnswerCardService.findByExamAndNumber(batch.getExamId(), domain.getCardNumber());
-        if (answerCard == null) {
-            throw new ParameterException("卡格式信息未找到");
-        }
-        if (!StringUtils.equals(batch.getPackageCode(), student.getPackageCode())) {
-            throw new ParameterException("与批次卷袋号不一致");
-        }
-        boolean studentAssigned = false;
-        List<ScanStudentPaper> studentPaperList = new ArrayList<>();
-        for (AnswerPaper answerPaper : domain.getPapers()) {
-            // 验证page数量
-            answerPaper.answerCardValidate(answerCard);
-            Integer paperNumber = answerPaper.getNumber();
-            ScanPaper paper = findOrCreatePaper(batch, student, paperNumber, user);
-            // 设置paper属性
-            paper.setExamId(batch.getExamId());
-            paper.setCardNumber(answerCard.getNumber());
-            paper.setNumber(paperNumber);
-            paper.setMismatch(false);
-            paper.setQuestionFilled(false);
-            paper.setAssigned(answerPaper.getAssigned());
-            // 保存paper与page到数据库
-            scanPaperService.savePaperAndPages(paper, answerPaper.buildPageList());
-            // 记录paper与batch关联关系
-            scanBatchPaperService.update(batch, paper, student.getId(), paperNumber);
-            // 创建student与paper的关联关系
-            studentPaperList.add(new ScanStudentPaper(student.getId(), paperNumber, paper.getId()));
-            studentAssigned = studentAssigned || paper.getAssigned();
-        }
-        // 更新批次统计数量
-        updateAssignedCount(batch.getId());
-        updateScanCount(batch.getId());
-        // 没有人工绑定的情况下,直接更新考生扫描状态
-        if (!studentAssigned) {
-            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
-            try {
-            	markStudentService.updateStudentAndPaper(user, student.getId(), studentPaperList);
-            } finally {
-                concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
-            }
-        }
-        return AnswerSaveVo.create(findStudentCountByBatch(batch.getId()));
+		ScanAnswerCard answerCard = scanAnswerCardService.findByExamAndNumber(batch.getExamId(),
+				domain.getCardNumber());
+		if (answerCard == null) {
+			throw new ParameterException("卡格式信息未找到");
+		}
+		if (!StringUtils.equals(batch.getPackageCode(), student.getPackageCode())) {
+			throw new ParameterException("与批次卷袋号不一致");
+		}
+		boolean studentAssigned = false;
+		List<ScanStudentPaper> studentPaperList = new ArrayList<>();
+		for (AnswerPaper answerPaper : domain.getPapers()) {
+			// 验证page数量
+			answerPaper.answerCardValidate(answerCard);
+			Integer paperNumber = answerPaper.getNumber();
+			ScanPaper paper = findOrCreatePaper(batch, student, paperNumber, user);
+			// 设置paper属性
+			paper.setExamId(batch.getExamId());
+			paper.setCardNumber(answerCard.getNumber());
+			paper.setNumber(paperNumber);
+			paper.setMismatch(false);
+			paper.setQuestionFilled(false);
+			paper.setAssigned(answerPaper.getAssigned());
+			// 保存paper与page到数据库
+			scanPaperService.savePaperAndPages(paper, answerPaper.buildPageList());
+			// 记录paper与batch关联关系
+			scanBatchPaperService.update(batch, paper, student.getId(), paperNumber);
+			// 创建student与paper的关联关系
+			studentPaperList.add(new ScanStudentPaper(student.getId(), paperNumber, paper.getId()));
+			studentAssigned = studentAssigned || paper.getAssigned();
+		}
+		// 更新批次统计数量
+		updateAssignedCount(batch.getId());
+		updateScanCount(batch.getId());
+		// 没有人工绑定的情况下,直接更新考生扫描状态
+		if (!studentAssigned) {
+			concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
+			try {
+				markStudentService.updateStudentAndPaper(user, student.getId(), studentPaperList);
+			} finally {
+				concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
+			}
+		}
+		return AnswerSaveVo.create(findStudentCountByBatch(batch.getId()));
+	}
+
+	@Override
+	public Integer findStudentCountByBatch(Long batchId) {
+		return baseMapper.findStudentCountByBatch(batchId);
+	}
+
+	@Transactional
+	@Override
+	public void updateAssignedCount(Long id) {
+		baseMapper.updateAssignedCount(id);
+	}
+
+	@Transactional
+	@Override
+	public void updateScanCount(Long id) {
+		baseMapper.updateScanCount(id);
+	}
+
+	private ScanPaper findOrCreatePaper(ScanBatch batch, MarkStudent student, Integer paperNumber, SysUser user) {
+		ScanPaper paper = null;
+		// 尝试重用已有paper对象
+		ScanBatchPaper batchPaper = scanBatchPaperService.findByBatchIdAndStudentIdAndPaperNumber(batch.getId(),
+				student.getId(), paperNumber);
+		if (batchPaper != null) {
+			paper = scanPaperService.getById(batchPaper.getPaperId());
+		}
+		// 构造全新paper对象
+		if (paper == null) {
+			paper = new ScanPaper();
+			paper.setCreateTime(System.currentTimeMillis());
+			paper.setCreatorId(user.getId());
+		}
+		return paper;
+	}
+
+	private ScanBatch checkBatchStatus(ScanBatch b) {
+		if (b == null) {
+			throw new ParameterException("批次未找到");
+		}
+		if (BatchStatus.FINISH.equals(b.getStatus())) {
+			throw new ParameterException("批次已经完成");
+		}
+		return b;
+	}
+
+	@Transactional
+	@Override
+	public SheetUploadVo sheetUpload(Long batchId, String coursePaperId, String studentCode, Integer paperNumber,
+			Integer pageIndex, MultipartFile file, String md5) {
+		ScanBatch batch = checkBatchStatus(getById(batchId));
+		try {
+			String path = fileService.uploadSheet(file.getInputStream(), md5, batch.getExamId(), batchId, coursePaperId,
+					studentCode, paperNumber, pageIndex);
+			return SheetUploadVo.create(path);
+		} catch (Exception e) {
+			log.error("原图上传失败,batchId=" + batch + ", coursePaperId=" + coursePaperId + ",studentCode=" + studentCode
+					+ ", paperNumber=" + paperNumber + ", pageIndex=" + pageIndex, e);
+			throw new ParameterException("原图上传失败", e);
+		}
 	}
-	
-    @Override
-    public Integer findStudentCountByBatch(Long batchId) {
-        return baseMapper.findStudentCountByBatch(batchId);
-    }
-    
-    @Transactional
-    @Override
-    public void updateAssignedCount(Long id) {
-        baseMapper.updateAssignedCount(id);
-    }
-    @Transactional
-    @Override
-    public void updateScanCount(Long id) {
-        baseMapper.updateScanCount(id);
-    }
-    private ScanPaper findOrCreatePaper(ScanBatch batch, MarkStudent student, Integer paperNumber, SysUser user) {
-    	ScanPaper paper = null;
-        // 尝试重用已有paper对象
-    	ScanBatchPaper batchPaper = scanBatchPaperService
-                .findByBatchIdAndStudentIdAndPaperNumber(batch.getId(), student.getId(), paperNumber);
-        if (batchPaper != null) {
-            paper = scanPaperService.getById(batchPaper.getPaperId());
-        }
-        // 构造全新paper对象
-        if (paper == null) {
-            paper = new ScanPaper();
-            paper.setCreateTime(System.currentTimeMillis());
-            paper.setCreatorId(user.getId());
-        }
-        return paper;
-    }
-    private ScanBatch checkBatchStatus(ScanBatch b) {
-        if (b == null) {
-            throw new ParameterException("批次未找到");
-        }
-        if (BatchStatus.FINISH.equals(b.getStatus())) {
-            throw new ParameterException("批次已经完成");
-        }
-        return b;
-    }
 }