瀏覽代碼

答题卡扫描批次创建

xiatian 1 年之前
父節點
當前提交
b7f9b1c048

+ 34 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanAnswerBatchController.java

@@ -1,12 +1,26 @@
 package com.qmth.distributed.print.api.mark;
 package com.qmth.distributed.print.api.mark;
 
 
 
 
+import org.springframework.beans.factory.annotation.Autowired;
+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.RestController;
+
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateDomain;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateVo;
+import com.qmth.teachcloud.mark.service.ScanBatchService;
 
 
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -20,5 +34,21 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/answer/batch")
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SCAN + "/answer/batch")
 public class ScanAnswerBatchController {
 public class ScanAnswerBatchController {
-
+	
+	@Autowired
+	private ScanBatchService scanBatchService;
+	
+	@Autowired
+	private BasicExamService basicExamService;
+	
+    @ApiOperation(value = "答题卡扫描批次创建")
+    @RequestMapping(value = "create", method = RequestMethod.POST)
+    public BatchCreateVo batchCreate(@Validated @RequestBody BatchCreateDomain domain) {
+    	BasicExam exam = basicExamService.getById(domain.getExamId());
+		if (exam == null) {
+			throw new ParameterException("未找到考试信息");
+		}
+		SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return scanBatchService.batchCreate(domain,sysUser);
+    }
 }
 }

+ 44 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answerbatch/BatchCreateDomain.java

@@ -0,0 +1,44 @@
+package com.qmth.teachcloud.mark.bean.answerbatch;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+public class BatchCreateDomain {
+
+    @NotNull(message = "考试ID不能为空")
+    private Long examId;
+
+    @NotNull(message = "学号不能为空")
+    @Size(min = 1, message = "学号不能为空")
+    private List<String> studentCodes;
+    
+    @NotNull(message = "试卷编号不能为空")
+    private String coursePaperId;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+	public List<String> getStudentCodes() {
+		return studentCodes;
+	}
+
+	public void setStudentCodes(List<String> studentCodes) {
+		this.studentCodes = studentCodes;
+	}
+
+	public String getCoursePaperId() {
+		return coursePaperId;
+	}
+
+	public void setCoursePaperId(String coursePaperId) {
+		this.coursePaperId = coursePaperId;
+	}
+
+
+}

+ 29 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answerbatch/BatchCreateVo.java

@@ -0,0 +1,29 @@
+package com.qmth.teachcloud.mark.bean.answerbatch;
+
+import java.util.List;
+
+public class BatchCreateVo {
+	private Long id;
+	private Long createTime;
+	private List<Rescan> rescan;
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public Long getCreateTime() {
+		return createTime;
+	}
+	public void setCreateTime(Long createTime) {
+		this.createTime = createTime;
+	}
+	public List<Rescan> getRescan() {
+		return rescan;
+	}
+	public void setRescan(List<Rescan> rescan) {
+		this.rescan = rescan;
+	}
+	
+	
+}

+ 36 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answerbatch/Paper.java

@@ -0,0 +1,36 @@
+package com.qmth.teachcloud.mark.bean.answerbatch;
+
+import java.util.List;
+
+public class Paper {
+	private Long id;
+	private Integer number;
+	private Boolean mismatch;
+	private List<String> pages;
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public Integer getNumber() {
+		return number;
+	}
+	public void setNumber(Integer number) {
+		this.number = number;
+	}
+	public List<String> getPages() {
+		return pages;
+	}
+	public void setPages(List<String> pages) {
+		this.pages = pages;
+	}
+	public Boolean getMismatch() {
+		return mismatch;
+	}
+	public void setMismatch(Boolean mismatch) {
+		this.mismatch = mismatch;
+	}
+	
+	
+}

+ 42 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/answerbatch/Rescan.java

@@ -0,0 +1,42 @@
+package com.qmth.teachcloud.mark.bean.answerbatch;
+
+import java.util.List;
+
+public class Rescan {
+	private String studentCode;
+	private Long batchId;
+	private String user;
+	private Long createTime;
+	private List<Paper> papers;
+	public String getStudentCode() {
+		return studentCode;
+	}
+	public void setStudentCode(String studentCode) {
+		this.studentCode = studentCode;
+	}
+	public Long getBatchId() {
+		return batchId;
+	}
+	public void setBatchId(Long batchId) {
+		this.batchId = batchId;
+	}
+	public String getUser() {
+		return user;
+	}
+	public void setUser(String user) {
+		this.user = user;
+	}
+	public Long getCreateTime() {
+		return createTime;
+	}
+	public void setCreateTime(Long createTime) {
+		this.createTime = createTime;
+	}
+	public List<Paper> getPapers() {
+		return papers;
+	}
+	public void setPapers(List<Paper> papers) {
+		this.papers = papers;
+	}
+	
+}

+ 66 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scanpaper/PaperVo.java

@@ -0,0 +1,66 @@
+package com.qmth.teachcloud.mark.bean.scanpaper;
+
+public class PaperVo {
+
+    private Long id;
+
+    private Integer number;
+
+    private Boolean mismatch;
+
+    private String userName;
+    
+    private Long batchId;
+
+    private Long createTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Long getBatchId() {
+        return batchId;
+    }
+
+    public void setBatchId(Long batchId) {
+        this.batchId = batchId;
+    }
+
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public Boolean getMismatch() {
+        return mismatch;
+    }
+
+    public void setMismatch(Boolean mismatch) {
+        this.mismatch = mismatch;
+    }
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+}

+ 5 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatch.java

@@ -7,6 +7,8 @@ import java.io.Serializable;
 
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.mark.enums.BatchStatus;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
@@ -45,7 +47,7 @@ public class ScanBatch implements Serializable {
     private Integer assignedCount;
     private Integer assignedCount;
 
 
     @ApiModelProperty(value = "状态")
     @ApiModelProperty(value = "状态")
-    private String status;
+    private BatchStatus status;
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     private Long creatorId;
     private Long creatorId;
@@ -102,11 +104,11 @@ public class ScanBatch implements Serializable {
     public void setAssignedCount(Integer assignedCount) {
     public void setAssignedCount(Integer assignedCount) {
         this.assignedCount = assignedCount;
         this.assignedCount = assignedCount;
     }
     }
-    public String getStatus() {
+    public BatchStatus getStatus() {
         return status;
         return status;
     }
     }
 
 
-    public void setStatus(String status) {
+    public void setStatus(BatchStatus status) {
         this.status = status;
         this.status = status;
     }
     }
     public Long getCreatorId() {
     public Long getCreatorId() {

+ 28 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/BatchStatus.java

@@ -0,0 +1,28 @@
+package com.qmth.teachcloud.mark.enums;
+
+public enum BatchStatus {
+
+    INIT("初始"),
+
+    FINISH("完成");
+
+    private String name;
+
+    BatchStatus(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public static BatchStatus getByName(String name) {
+        for (BatchStatus r : BatchStatus.values()) {
+            if (r.getName().equals(name)) {
+                return r;
+            }
+        }
+        return null;
+    }
+
+}

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanPaperMapper.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.mapper;
 package com.qmth.teachcloud.mark.mapper;
 
 
+import com.qmth.teachcloud.mark.bean.scanpaper.PaperVo;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -18,4 +19,6 @@ import java.util.List;
 public interface ScanPaperMapper extends BaseMapper<ScanPaper> {
 public interface ScanPaperMapper extends BaseMapper<ScanPaper> {
 
 
     List<StudentPaperDetailDto> listStudentPaperDetail(@Param("studentId") Long studentId);
     List<StudentPaperDetailDto> listStudentPaperDetail(@Param("studentId") Long studentId);
+
+	List<PaperVo> findStudentPaper(@Param("studentId")Long studentId);
 }
 }

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

@@ -1,5 +1,8 @@
 package com.qmth.teachcloud.mark.service;
 package com.qmth.teachcloud.mark.service;
 
 
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateDomain;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateVo;
 import com.qmth.teachcloud.mark.entity.ScanBatch;
 import com.qmth.teachcloud.mark.entity.ScanBatch;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
  */
 public interface ScanBatchService extends IService<ScanBatch> {
 public interface ScanBatchService extends IService<ScanBatch> {
 
 
+	BatchCreateVo batchCreate(BatchCreateDomain domain,SysUser sysUser);
+
 }
 }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanPaperService.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.service;
 package com.qmth.teachcloud.mark.service;
 
 
+import com.qmth.teachcloud.mark.bean.scanpaper.PaperVo;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
 import com.qmth.teachcloud.mark.entity.ScanPaperPage;
 import com.qmth.teachcloud.mark.entity.ScanPaperPage;
@@ -25,4 +26,6 @@ public interface ScanPaperService extends IService<ScanPaper> {
     List<StudentPaperDetailDto> listStudentPaperDetail(Long studentId);
     List<StudentPaperDetailDto> listStudentPaperDetail(Long studentId);
 
 
 	int getCountByExamAndCardNumber(Long examId, Integer number);
 	int getCountByExamAndCardNumber(Long examId, Integer number);
+
+	List<PaperVo> findStudentPaper(Long studentId);
 }
 }

+ 97 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanBatchServiceImpl.java

@@ -1,14 +1,34 @@
 package com.qmth.teachcloud.mark.service.impl;
 package com.qmth.teachcloud.mark.service.impl;
 
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateDomain;
+import com.qmth.teachcloud.mark.bean.answerbatch.BatchCreateVo;
+import com.qmth.teachcloud.mark.bean.answerbatch.Paper;
+import com.qmth.teachcloud.mark.bean.answerbatch.Rescan;
+import com.qmth.teachcloud.mark.bean.scanpaper.PaperVo;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.ScanBatch;
 import com.qmth.teachcloud.mark.entity.ScanBatch;
+import com.qmth.teachcloud.mark.entity.ScanPaperPage;
+import com.qmth.teachcloud.mark.enums.BatchStatus;
 import com.qmth.teachcloud.mark.mapper.ScanBatchMapper;
 import com.qmth.teachcloud.mark.mapper.ScanBatchMapper;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.service.ScanBatchService;
 import com.qmth.teachcloud.mark.service.ScanBatchService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
+import com.qmth.teachcloud.mark.service.ScanPaperPageService;
+import com.qmth.teachcloud.mark.service.ScanPaperService;
 
 
 /**
 /**
  * <p>
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  * </p>
  *
  *
  * @author xf
  * @author xf
@@ -17,4 +37,78 @@ import org.springframework.stereotype.Service;
 @Service
 @Service
 public class ScanBatchServiceImpl extends ServiceImpl<ScanBatchMapper, ScanBatch> implements ScanBatchService {
 public class ScanBatchServiceImpl extends ServiceImpl<ScanBatchMapper, ScanBatch> implements ScanBatchService {
 
 
+	@Autowired
+	private MarkStudentService markStudentService;
+	
+	@Autowired
+	private ScanPaperService scanPaperService;
+	
+	@Autowired
+	private ScanPaperPageService scanPaperPageService;
+
+	@Transactional
+	@Override
+	public BatchCreateVo batchCreate(BatchCreateDomain domain,SysUser sysUser) {
+		List<Rescan> rescan = new ArrayList<>();
+		String packageCode = null;
+		for (String studentCode : domain.getStudentCodes()) {
+			MarkStudent student = markStudentService.findByExamIdAndCoursePaperIdAndStudentCode(domain.getExamId(),
+					domain.getCoursePaperId(), studentCode);
+			if (student == null) {
+				throw new ParameterException("未找到考生信息:" + studentCode);
+			}
+			Rescan rc = getRescan(student);
+			if (rc != null) {
+				rescan.add(rc);
+			}
+		}
+
+		ScanBatch b = new ScanBatch();
+		b.setExamId(domain.getExamId());
+		b.setUserId(sysUser.getId());
+		b.setPackageCode(packageCode);
+		b.setCoursePaperId(domain.getCoursePaperId());
+		b.setAssignedCount(0);
+		b.setScanCount(0);
+		b.setStatus(BatchStatus.INIT);
+		this.save(b);
+
+		BatchCreateVo vo = new BatchCreateVo();
+		vo.setRescan(rescan);
+		vo.setId(b.getId());
+		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;
+    }
+
 }
 }

+ 5 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanPaperServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.mark.bean.scanpaper.PaperVo;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
@@ -97,5 +98,8 @@ public class ScanPaperServiceImpl extends ServiceImpl<ScanPaperMapper, ScanPaper
         lw.eq(ScanPaper::getCardNumber, number);
         lw.eq(ScanPaper::getCardNumber, number);
         return this.count(lw);
         return this.count(lw);
     }
     }
-
+    @Override
+    public List<PaperVo> findStudentPaper(Long studentId) {
+        return baseMapper.findStudentPaper(studentId);
+    }
 }
 }

+ 16 - 1
teachcloud-mark/src/main/resources/mapper/ScanPaperMapper.xml

@@ -39,5 +39,20 @@
             scan_paper_page spp ON sp.id = spp.paper_id
             scan_paper_page spp ON sp.id = spp.paper_id
         ORDER BY ssp.paper_index , spp.page_index
         ORDER BY ssp.paper_index , spp.page_index
     </select>
     </select>
-
+    <select id="findStudentPaper"
+            resultType="com.qmth.teachcloud.mark.bean.scanpaper.PaperVo">
+        SELECT p.id,
+               t.paper_index number,
+               b.id           batchId,
+               u.login_name userName,
+               p.create_time  createTime,
+               p.mismatch
+        FROM scan_student_paper t
+                 inner join scan_student_paper p on t.paper_id = p.id
+                 left join scan_batch_paper bp on bp.paper_id = p.id
+                 left join scan_batch b on bp.batch_id = b.id
+                 left join sys_user u on b.user_id=u.id
+        WHERE t.student_id = #{studentId}
+        ORDER BY t.paper_index
+    </select>
 </mapper>
 </mapper>