Browse Source

3.3.0 fix

xiaofei 1 year ago
parent
commit
7b1657833c
25 changed files with 225 additions and 101 deletions
  1. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  2. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ClientService.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  4. 9 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java
  5. 4 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  6. 4 4
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  7. 6 6
      distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java
  8. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java
  9. 10 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ScoreReportVo.java
  10. 87 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/TeacherClassVo.java
  11. 4 12
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatchPaper.java
  12. 3 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  13. 2 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchPaperMapper.java
  14. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java
  15. 2 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkService.java
  16. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkFileServiceImpl.java
  17. 6 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java
  18. 3 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  19. 43 19
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  20. 3 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanBatchPaperServiceImpl.java
  21. 5 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanPaperServiceImpl.java
  22. 5 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanRefixBatchServiceImpl.java
  23. 1 0
      teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml
  24. 16 0
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  25. 2 2
      teachcloud-mark/src/main/resources/mapper/ScanBatchPaperMapper.xml

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java

@@ -89,10 +89,10 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
                                     @Param("printHouseId") Long printHouseId,
                                     @Param("printHouseId") Long printHouseId,
                                     @Param("dpr") DataPermissionRule dpr);
                                     @Param("dpr") DataPermissionRule dpr);
 
 
-    IPage<ClientExamStudentDto> listClientExamStudentPage(Page<ClientExamStudentDto> page, @Param("schoolId") Long schoolId, @Param("examDetailId") Long examDetailId, @Param("ticketNumber") String ticketNumber, @Param("studentName") String studentName, @Param("courseCode") String courseCode);
+    IPage<ClientExamStudentDto> listClientExamStudentPage(Page<ClientExamStudentDto> page, @Param("schoolId") Long schoolId, @Param("examDetailId") Long examDetailId, @Param("studentCode") String studentCode, @Param("studentName") String studentName, @Param("courseCode") String courseCode);
 
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
     @SuppressWarnings("MybatisXMapperMethodInspection")
-    List<Map> listStudentByExamDetailCourseId(@Param("schoolId") Long schoolId, @Param("examDetailCourseId") Long examDetailCourseId, @Param("ticketNumber") String ticketNumber, @Param("type") String type);
+    List<Map> listStudentByExamDetailCourseId(@Param("schoolId") Long schoolId, @Param("examDetailCourseId") Long examDetailCourseId, @Param("studentCode") String studentCode, @Param("type") String type);
 
 
     Integer selectPaperCount(@Param("schoolId") Long schoolId,
     Integer selectPaperCount(@Param("schoolId") Long schoolId,
                         @Param("semesterId") Long semesterId,
                         @Param("semesterId") Long semesterId,

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ClientService.java

@@ -19,9 +19,9 @@ public interface ClientService {
 
 
     Boolean updatePrintProgress(Long examDetailId, String machineCode, Integer printProgress, Boolean isPrint);
     Boolean updatePrintProgress(Long examDetailId, String machineCode, Integer printProgress, Boolean isPrint);
 
 
-    IPage<ClientExamStudentDto> listStudent(Long examDetailId, String ticketNumber, String studentName, String courseCode, Integer pageNumber, Integer pageSize);
+    IPage<ClientExamStudentDto> listStudent(Long examDetailId, String studentCode, String studentName, String courseCode, Integer pageNumber, Integer pageSize);
 
 
-    Map<String, Object> getReprintData(Long examDetailId, String ticketNumber, String type);
+    Map<String, Object> getReprintData(Long examDetailId, String studentCode, String type);
 
 
     IPage<ClientPrintTaskDto> listClientPrintTask(String machineCode, Long orgId, Long semesterId, Long examId, String printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Boolean isDownload, Boolean validate, Integer pageNumber, Integer pageSize);
     IPage<ClientPrintTaskDto> listClientPrintTask(String machineCode, Long orgId, Long semesterId, Long examId, String printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Boolean isDownload, Boolean validate, Integer pageNumber, Integer pageSize);
 
 

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -193,7 +193,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
 
     Boolean updatePrintProgress(Long schoolId, Long examDetailId, String machineCode, Integer printProgress, Boolean isPrint);
     Boolean updatePrintProgress(Long schoolId, Long examDetailId, String machineCode, Integer printProgress, Boolean isPrint);
 
 
-    IPage<ClientExamStudentDto> listStudent(Long schoolId, Long examDetailId, String ticketNumber, String studentName, String courseCode, Integer pageNumber, Integer pageSize);
+    IPage<ClientExamStudentDto> listStudent(Long schoolId, Long examDetailId, String studentCode, String studentName, String courseCode, Integer pageNumber, Integer pageSize);
 
 
     List<Map> listStudentByExamDetailCourseId(Long schoolId, Long examDetailCourseId, String ticketNumber, String type);
     List<Map> listStudentByExamDetailCourseId(Long schoolId, Long examDetailCourseId, String ticketNumber, String type);
 
 

+ 9 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java

@@ -112,14 +112,14 @@ public class ClientServiceImpl implements ClientService {
     }
     }
 
 
     @Override
     @Override
-    public IPage<ClientExamStudentDto> listStudent(Long examDetailId, String ticketNumber, String studentName, String courseCode, Integer pageNumber, Integer pageSize) {
+    public IPage<ClientExamStudentDto> listStudent(Long examDetailId, String studentCode, String studentName, String courseCode, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return examDetailService.listStudent(schoolId, examDetailId, ticketNumber, studentName, courseCode, pageNumber, pageSize);
+        return examDetailService.listStudent(schoolId, examDetailId, studentCode, studentName, courseCode, pageNumber, pageSize);
     }
     }
 
 
 
 
     @Override
     @Override
-    public Map<String, Object> getReprintData(Long examDetailId, String ticketNumber, String type) {
+    public Map<String, Object> getReprintData(Long examDetailId, String studentCode, String type) {
         Map<String, Object> finalMap = new HashMap<>();
         Map<String, Object> finalMap = new HashMap<>();
         ExamDetail examDetail = examDetailService.getById(examDetailId);
         ExamDetail examDetail = examDetailService.getById(examDetailId);
         // 撤回提示
         // 撤回提示
@@ -135,11 +135,11 @@ public class ClientServiceImpl implements ClientService {
         Map<String, Map<String, String>> map = mapCourseUrl(examDetailCourses);
         Map<String, Map<String, String>> map = mapCourseUrl(examDetailCourses);
         // 生成试卷List
         // 生成试卷List
         if (printContent.contains("PAPER")) {
         if (printContent.contains("PAPER")) {
-            finalMap.put("paper", splicePaperContent(examDetailCourses, map, ticketNumber, type));
+            finalMap.put("paper", splicePaperContent(examDetailCourses, map, studentCode, type));
         }
         }
         if (printContent.contains("CARD")) {
         if (printContent.contains("CARD")) {
             // 生成题卡List
             // 生成题卡List
-            finalMap.put("card", spliceCardContent(examDetailCourses, ticketNumber, type));
+            finalMap.put("card", spliceCardContent(examDetailCourses, studentCode, type));
         }
         }
         //
         //
 
 
@@ -712,11 +712,11 @@ public class ClientServiceImpl implements ClientService {
      * @param examDetailCourses
      * @param examDetailCourses
      * @param map
      * @param map
      */
      */
-    private List<ClientPrintDataDto> splicePaperContent(List<Map<String, Object>> examDetailCourses, Map<String, Map<String, String>> map, String ticketNumber, String type) {
+    private List<ClientPrintDataDto> splicePaperContent(List<Map<String, Object>> examDetailCourses, Map<String, Map<String, String>> map, String studentCode, String type) {
         List<ClientPrintDataDto> clientPrintDataDtos = new ArrayList<>();
         List<ClientPrintDataDto> clientPrintDataDtos = new ArrayList<>();
         for (Map<String, Object> examDetailCours : examDetailCourses) {
         for (Map<String, Object> examDetailCours : examDetailCourses) {
             // 取考生列表
             // 取考生列表
-            List<Map> studentList = examDetailService.listStudentByExamDetailCourseId(Long.valueOf(examDetailCours.get("schoolId").toString()), Long.valueOf(examDetailCours.get("examDetailCourseId").toString()), ticketNumber, type);
+            List<Map> studentList = examDetailService.listStudentByExamDetailCourseId(Long.valueOf(examDetailCours.get("schoolId").toString()), Long.valueOf(examDetailCours.get("examDetailCourseId").toString()), studentCode, type);
             Integer printCount = Integer.parseInt(examDetailCours.get("printCount").toString());
             Integer printCount = Integer.parseInt(examDetailCours.get("printCount").toString());
             if (studentList != null && studentList.size() > 0) {
             if (studentList != null && studentList.size() > 0) {
                 for (Map studentMap : studentList) {
                 for (Map studentMap : studentList) {
@@ -749,11 +749,11 @@ public class ClientServiceImpl implements ClientService {
      *
      *
      * @param examDetailCourses
      * @param examDetailCourses
      */
      */
-    private List<ClientPrintDataDto> spliceCardContent(List<Map<String, Object>> examDetailCourses, String ticketNumber, String type) {
+    private List<ClientPrintDataDto> spliceCardContent(List<Map<String, Object>> examDetailCourses, String studentCode, String type) {
         List<ClientPrintDataDto> clientPrintDataDtos = new ArrayList<>();
         List<ClientPrintDataDto> clientPrintDataDtos = new ArrayList<>();
         for (Map<String, Object> examDetailCours : examDetailCourses) {
         for (Map<String, Object> examDetailCours : examDetailCourses) {
             // 取考生列表
             // 取考生列表
-            List<Map> studentList = examDetailService.listStudentByExamDetailCourseId(Long.valueOf(examDetailCours.get("schoolId").toString()), Long.valueOf(examDetailCours.get("examDetailCourseId").toString()), ticketNumber, type);
+            List<Map> studentList = examDetailService.listStudentByExamDetailCourseId(Long.valueOf(examDetailCours.get("schoolId").toString()), Long.valueOf(examDetailCours.get("examDetailCourseId").toString()), studentCode, type);
             Integer printCount = Integer.parseInt(examDetailCours.get("printCount").toString());
             Integer printCount = Integer.parseInt(examDetailCours.get("printCount").toString());
             if (studentList != null && studentList.size() > 0) {
             if (studentList != null && studentList.size() > 0) {
                 for (Map studentMap : studentList) {
                 for (Map studentMap : studentList) {

+ 4 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -904,7 +904,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
     }
 
 
     @Override
     @Override
-    public IPage<ClientExamStudentDto> listStudent(Long schoolId, Long examDetailId, String ticketNumber, String studentName, String courseCode, Integer pageNumber, Integer pageSize) {
+    public IPage<ClientExamStudentDto> listStudent(Long schoolId, Long examDetailId, String studentCode, String studentName, String courseCode, Integer pageNumber, Integer pageSize) {
         // 撤回提示
         // 撤回提示
         ExamDetail examDetail = this.getById(examDetailId);
         ExamDetail examDetail = this.getById(examDetailId);
         if (ExamDetailStatusEnum.NEW.name().equals(examDetail.getStatus())
         if (ExamDetailStatusEnum.NEW.name().equals(examDetail.getStatus())
@@ -912,12 +912,12 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             throw ExceptionResultEnum.ERROR.exception("该任务已被撤回");
             throw ExceptionResultEnum.ERROR.exception("该任务已被撤回");
         }
         }
         Page<ClientExamStudentDto> page = new Page<>(pageNumber, pageSize);
         Page<ClientExamStudentDto> page = new Page<>(pageNumber, pageSize);
-        return this.baseMapper.listClientExamStudentPage(page, schoolId, examDetailId, SystemConstant.translateSpecificSign(ticketNumber), SystemConstant.translateSpecificSign(studentName), courseCode);
+        return this.baseMapper.listClientExamStudentPage(page, schoolId, examDetailId, SystemConstant.translateSpecificSign(studentCode), SystemConstant.translateSpecificSign(studentName), courseCode);
     }
     }
 
 
     @Override
     @Override
-    public List<Map> listStudentByExamDetailCourseId(Long schoolId, Long examDetailCourseId, String ticketNumber, String type) {
-        return this.baseMapper.listStudentByExamDetailCourseId(schoolId, examDetailCourseId, ticketNumber, type);
+    public List<Map> listStudentByExamDetailCourseId(Long schoolId, Long examDetailCourseId, String studentCode, String type) {
+        return this.baseMapper.listStudentByExamDetailCourseId(schoolId, examDetailCourseId, studentCode, type);
     }
     }
 
 
     @Override
     @Override

+ 4 - 4
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -462,8 +462,8 @@
         <where>
         <where>
             and a.school_id = #{schoolId}
             and a.school_id = #{schoolId}
             and a.id = #{examDetailId}
             and a.id = #{examDetailId}
-            <if test="ticketNumber != null and ticketNumber != ''">
-                and c.ticket_number like concat('%', #{ticketNumber}, '%')
+            <if test="studentCode != null and studentCode != ''">
+                and c.student_code like concat('%', #{studentCode}, '%')
             </if>
             </if>
             <if test="studentName != null and studentName != ''">
             <if test="studentName != null and studentName != ''">
                 and c.student_name like concat('%', #{studentName}, '%')
                 and c.student_name like concat('%', #{studentName}, '%')
@@ -491,10 +491,10 @@
         WHERE
         WHERE
             b.id = #{examDetailCourseId}
             b.id = #{examDetailCourseId}
         <if test="type == 'ONE'">
         <if test="type == 'ONE'">
-            and c.ticket_number = #{ticketNumber}
+            and c.student_code = #{studentCode}
         </if>
         </if>
         <if test="type == 'MORE'">
         <if test="type == 'MORE'">
-            and c.ticket_number >= #{ticketNumber}
+            and c.student_code >= #{studentCode}
         </if>
         </if>
     </select>
     </select>
     <select id="selectPaperCount" resultType="java.lang.Integer">
     <select id="selectPaperCount" resultType="java.lang.Integer">

+ 6 - 6
distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java

@@ -400,19 +400,19 @@ public class ClientController {
      * 重打-查询考生列表
      * 重打-查询考生列表
      *
      *
      * @param examDetailId 考场ID
      * @param examDetailId 考场ID
-     * @param ticketNumber 准考证
+     * @param studentCode 学
      * @param studentName  学号
      * @param studentName  学号
      * @param courseCode   课程代码
      * @param courseCode   课程代码
      */
      */
     @ApiOperation(value = "重打-查询考生列表")
     @ApiOperation(value = "重打-查询考生列表")
     @PostMapping("/print/list_student")
     @PostMapping("/print/list_student")
     public Result listStudent(@RequestParam("examDetailId") Long examDetailId,
     public Result listStudent(@RequestParam("examDetailId") Long examDetailId,
-                              @RequestParam(value = "ticketNumber", required = false) String ticketNumber,
+                              @RequestParam(value = "studentCode", required = false) String studentCode,
                               @RequestParam(value = "studentName", required = false) String studentName,
                               @RequestParam(value = "studentName", required = false) String studentName,
                               @RequestParam(value = "courseCode", required = false) String courseCode,
                               @RequestParam(value = "courseCode", required = false) String courseCode,
                               @RequestParam Integer pageNumber,
                               @RequestParam Integer pageNumber,
                               @RequestParam Integer pageSize) {
                               @RequestParam Integer pageSize) {
-        IPage<ClientExamStudentDto> examStudentDtoIPage = clientService.listStudent(examDetailId, ticketNumber, studentName, courseCode, pageNumber, pageSize);
+        IPage<ClientExamStudentDto> examStudentDtoIPage = clientService.listStudent(examDetailId, studentCode, studentName, courseCode, pageNumber, pageSize);
         return ResultUtil.ok(examStudentDtoIPage);
         return ResultUtil.ok(examStudentDtoIPage);
     }
     }
 
 
@@ -420,15 +420,15 @@ public class ClientController {
      * 重打-内容查询
      * 重打-内容查询
      *
      *
      * @param examDetailId 考场ID
      * @param examDetailId 考场ID
-     * @param ticketNumber 准考证
+     * @param studentCode 学
      * @param type         类型
      * @param type         类型
      */
      */
     @ApiOperation(value = "重打-内容查询")
     @ApiOperation(value = "重打-内容查询")
     @PostMapping("/print/get_reprint_data")
     @PostMapping("/print/get_reprint_data")
     public Result getReprintData(@RequestParam("examDetailId") Long examDetailId,
     public Result getReprintData(@RequestParam("examDetailId") Long examDetailId,
-                                 @RequestParam("ticketNumber") String ticketNumber,
+                                 @RequestParam("studentCode") String studentCode,
                                  @RequestParam("type") String type) {
                                  @RequestParam("type") String type) {
-        Map<String, Object> map = clientService.getReprintData(examDetailId, ticketNumber, type);
+        Map<String, Object> map = clientService.getReprintData(examDetailId, studentCode, type);
         return ResultUtil.ok(map);
         return ResultUtil.ok(map);
     }
     }
 
 

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java

@@ -59,8 +59,8 @@ public class MarkProblemController {
      */
      */
     @ApiOperation(value = "重置")
     @ApiOperation(value = "重置")
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
-    public Result reset(@ApiParam(value = "问题卷任务ID集合", required = true) @RequestParam List<Long> taskIds) {
-        markProblemHistoryService.resetProblem(taskIds);
+    public Result reset(@ApiParam(value = "问题卷任务ID集合", required = true) @RequestParam List<Long> ids) {
+        markProblemHistoryService.resetProblem(ids);
         return ResultUtil.ok(true);
         return ResultUtil.ok(true);
     }
     }
 }
 }

+ 10 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ScoreReportVo.java

@@ -13,6 +13,8 @@ public class ScoreReportVo {
 	private List<ClassVo> classData;
 	private List<ClassVo> classData;
 	
 	
 	private List<TeacherVo> teacher;
 	private List<TeacherVo> teacher;
+
+	private List<TeacherClassVo> teacherClass;
 	
 	
 	private List<QuestionVo> objective;
 	private List<QuestionVo> objective;
 	
 	
@@ -58,6 +60,14 @@ public class ScoreReportVo {
 		this.teacher = teacher;
 		this.teacher = teacher;
 	}
 	}
 
 
+	public List<TeacherClassVo> getTeacherClass() {
+		return teacherClass;
+	}
+
+	public void setTeacherClass(List<TeacherClassVo> teacherClass) {
+		this.teacherClass = teacherClass;
+	}
+
 	public List<QuestionVo> getObjective() {
 	public List<QuestionVo> getObjective() {
 		return objective;
 		return objective;
 	}
 	}

+ 87 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/TeacherClassVo.java

@@ -0,0 +1,87 @@
+package com.qmth.teachcloud.mark.bean.archivescore;
+
+public class TeacherClassVo {
+	private Integer studentCount;
+	private Integer absentCount;
+	private String teacher;
+	private String className;
+	private Double avgScore;
+	private Double maxScore;
+	private Double minScore;
+	private Integer passCount;
+	private String passRate;
+	private Integer excellentCount;
+	private String excellentRate;
+	
+	
+	public String getTeacher() {
+		return teacher;
+	}
+	public void setTeacher(String teacher) {
+		this.teacher = teacher;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public Double getAvgScore() {
+		return avgScore;
+	}
+	public void setAvgScore(Double avgScore) {
+		this.avgScore = avgScore;
+	}
+	public Double getMaxScore() {
+		return maxScore;
+	}
+	public void setMaxScore(Double maxScore) {
+		this.maxScore = maxScore;
+	}
+	public Double getMinScore() {
+		return minScore;
+	}
+	public void setMinScore(Double minScore) {
+		this.minScore = minScore;
+	}
+	public Integer getPassCount() {
+		return passCount;
+	}
+	public void setPassCount(Integer passCount) {
+		this.passCount = passCount;
+	}
+	public String getPassRate() {
+		return passRate;
+	}
+	public void setPassRate(String passRate) {
+		this.passRate = passRate;
+	}
+	public Integer getExcellentCount() {
+		return excellentCount;
+	}
+	public void setExcellentCount(Integer excellentCount) {
+		this.excellentCount = excellentCount;
+	}
+	public String getExcellentRate() {
+		return excellentRate;
+	}
+	public void setExcellentRate(String excellentRate) {
+		this.excellentRate = excellentRate;
+	}
+	public Integer getStudentCount() {
+		return studentCount;
+	}
+	public void setStudentCount(Integer studentCount) {
+		this.studentCount = studentCount;
+	}
+	public Integer getAbsentCount() {
+		return absentCount;
+	}
+	public void setAbsentCount(Integer absentCount) {
+		this.absentCount = absentCount;
+	}
+	
+}

+ 4 - 12
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanBatchPaper.java

@@ -7,6 +7,7 @@ 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.github.jeffreyning.mybatisplus.anno.MppMultiId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
@@ -23,20 +24,19 @@ import io.swagger.annotations.ApiModelProperty;
 public class ScanBatchPaper implements Serializable {
 public class ScanBatchPaper implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "ID")
-    @TableId(value = "id", type = IdType.INPUT)
-    private Long id;
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "批次ID")
     @ApiModelProperty(value = "批次ID")
+    @MppMultiId(value = "batch_id")
     private Long batchId;
     private Long batchId;
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "考生ID")
     @ApiModelProperty(value = "考生ID")
+    @MppMultiId(value = "student_id")
     private Long studentId;
     private Long studentId;
 
 
     @ApiModelProperty(value = "试卷页数")
     @ApiModelProperty(value = "试卷页数")
+    @MppMultiId(value = "paper_index")
     private Integer paperIndex;
     private Integer paperIndex;
 
 
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
@@ -48,14 +48,6 @@ public class ScanBatchPaper implements Serializable {
 
 
     private Boolean assigned;
     private Boolean assigned;
 
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
     public Long getBatchId() {
     public Long getBatchId() {
         return batchId;
         return batchId;
     }
     }

+ 3 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -3,12 +3,7 @@ package com.qmth.teachcloud.mark.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery;
-import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo;
-import com.qmth.teachcloud.mark.bean.archivescore.ClassVo;
-import com.qmth.teachcloud.mark.bean.archivescore.CollegeVo;
-import com.qmth.teachcloud.mark.bean.archivescore.OverViewVo;
-import com.qmth.teachcloud.mark.bean.archivescore.TeacherVo;
+import com.qmth.teachcloud.mark.bean.archivescore.*;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryDomain;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryDomain;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryVo;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryVo;
 import com.qmth.teachcloud.mark.bean.student.StudentQuery;
 import com.qmth.teachcloud.mark.bean.student.StudentQuery;
@@ -67,4 +62,6 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
     List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId);
     List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId);
 
 
 	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query);
 	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query);
+
+	List<TeacherClassVo> teacherClass(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 }
 }

+ 2 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanBatchPaperMapper.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.mapper;
 package com.qmth.teachcloud.mark.mapper;
 
 
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
 import com.qmth.teachcloud.mark.entity.ScanBatchPaper;
 import com.qmth.teachcloud.mark.entity.ScanBatchPaper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 
@@ -11,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author xf
  * @author xf
  * @since 2023-09-22
  * @since 2023-09-22
  */
  */
-public interface ScanBatchPaperMapper extends BaseMapper<ScanBatchPaper> {
+public interface ScanBatchPaperMapper extends MppBaseMapper<ScanBatchPaper> {
 
 
 }
 }

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkProblemHistoryService.java

@@ -20,9 +20,9 @@ public interface MarkProblemHistoryService extends IService<MarkProblemHistory>
 
 
     IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType, String status, String secretNumber, Integer pageNumber, Integer pageSize);
     IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType, String status, String secretNumber, Integer pageNumber, Integer pageSize);
 
 
-    void resetProblem(List<Long> taskIds);
+    void resetProblem(List<Long> ids);
 
 
-    void resetByMarkTaskId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now);
+    void resetByMarkProblemId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now);
 
 
     void deleteByStudentId(Long studentId);
     void deleteByStudentId(Long studentId);
 
 

+ 2 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkService.java

@@ -9,11 +9,7 @@ import com.qmth.teachcloud.mark.dto.mark.mark.MarkGroupDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
 import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
-import com.qmth.teachcloud.mark.entity.MarkGroup;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
-import com.qmth.teachcloud.mark.entity.MarkStudent;
-import com.qmth.teachcloud.mark.entity.MarkTask;
-import com.qmth.teachcloud.mark.entity.MarkUserGroup;
+import com.qmth.teachcloud.mark.entity.*;
 import com.qmth.teachcloud.mark.params.MarkHeaderGroupResult;
 import com.qmth.teachcloud.mark.params.MarkHeaderGroupResult;
 import com.qmth.teachcloud.mark.params.MarkResult;
 import com.qmth.teachcloud.mark.params.MarkResult;
 
 
@@ -35,7 +31,7 @@ public interface MarkService {
 
 
     void updateMarkedCount(Long examId, String paperNumber, Integer groupNumber);
     void updateMarkedCount(Long examId, String paperNumber, Integer groupNumber);
 
 
-    boolean rejectMarkTask(MarkTask markTask, Long userId);
+    boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId);
 
 
     String getGroupKey(MarkGroup markGroup);
     String getGroupKey(MarkGroup markGroup);
 
 

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

@@ -62,7 +62,7 @@ public class MarkFileServiceImpl implements MarkFileService {
 
 
     @Override
     @Override
     public String getAdapteFileUri(Long examId, String coursePaperId, Integer cardNumber) {
     public String getAdapteFileUri(Long examId, String coursePaperId, Integer cardNumber) {
-        return UploadFileEnum.ADAPT.getPath(UploadFileEnum.ADAPT.getTitle(), examId, coursePaperId, cardNumber, FormatType.JSON.name().toLowerCase());
+        return UploadFileEnum.ADAPT.getPath(UploadFileEnum.CARD.getTitle(), examId, coursePaperId, cardNumber, FormatType.JSON.name().toLowerCase());
     }
     }
 
 
     @Override
     @Override

+ 6 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java

@@ -87,17 +87,18 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
 	}
 	}
 
 
 	@Override
 	@Override
-	public void resetProblem(List<Long> taskIds) {
+	public void resetProblem(List<Long> ids) {
 		SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 		SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-		for (Long taskId : taskIds) {
-			MarkTask markTask = markTaskService.getById(taskId);
+		for (Long id : ids) {
+			MarkProblemHistory markProblemHistory = this.getById(id);
+			MarkTask markTask = markTaskService.getById(markProblemHistory.getTaskId());
 			if (markTask != null) {
 			if (markTask != null) {
 				try {
 				try {
 					lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
 					lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
 					lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
 					lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
 							markTask.getGroupNumber());
 							markTask.getGroupNumber());
 					if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
 					if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
-						markService.rejectMarkTask(markTask, sysUser.getId());
+						markService.rejectMarkTask(markProblemHistory, markTask, sysUser.getId());
 					}
 					}
 				} catch (Exception e) {
 				} catch (Exception e) {
 					log.error("back library error", e);
 					log.error("back library error", e);
@@ -112,7 +113,7 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
 	}
 	}
 
 
 	@Override
 	@Override
-	public void resetByMarkTaskId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now) {
+	public void resetByMarkProblemId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now) {
 		UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
 		UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
 		updateWrapper.lambda().set(MarkProblemHistory::getUpdateUserId, userId).set(MarkProblemHistory::getStatus, back)
 		updateWrapper.lambda().set(MarkProblemHistory::getUpdateUserId, userId).set(MarkProblemHistory::getStatus, back)
 				.set(MarkProblemHistory::getUpdateTime, now).eq(MarkProblemHistory::getId, id)
 				.set(MarkProblemHistory::getUpdateTime, now).eq(MarkProblemHistory::getId, id)

+ 3 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -173,9 +173,8 @@ public class MarkServiceImpl implements MarkService {
     }
     }
 
 
     @Override
     @Override
-    public boolean rejectMarkTask(MarkTask markTask, Long userId) {
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(),
-                markTask.getPaperNumber());
+    public boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(), markTask.getPaperNumber());
         if (markPaper.getStatus() == MarkPaperStatus.FINISH) {
         if (markPaper.getStatus() == MarkPaperStatus.FINISH) {
             return false;
             return false;
         }
         }
@@ -184,7 +183,7 @@ public class MarkServiceImpl implements MarkService {
             markTrackService.deleteByTaskId(markTask.getId());
             markTrackService.deleteByTaskId(markTask.getId());
             resetStudentGroup(markTask.getStudentId(), markTask.getExamId(), markTask.getPaperNumber(),
             resetStudentGroup(markTask.getStudentId(), markTask.getExamId(), markTask.getPaperNumber(),
                     markTask.getGroupNumber());
                     markTask.getGroupNumber());
-            markProblemHistoryService.resetByMarkTaskId(markTask.getId(), MarkProblemStatus.WAITING, userId,
+            markProblemHistoryService.resetByMarkProblemId(markProblemHistory.getId(), MarkProblemStatus.WAITING, userId,
                     MarkProblemStatus.BACK, now);
                     MarkProblemStatus.BACK, now);
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
             return true;
             return true;

+ 43 - 19
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -272,16 +273,20 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (paperCount > 0) {
         if (paperCount > 0) {
             ScanAnswerCard answerCard = answerCardService.findByExamAndNumber(student.getExamId(),
             ScanAnswerCard answerCard = answerCardService.findByExamAndNumber(student.getExamId(),
                     student.getCardNumber());
                     student.getCardNumber());
+            student.setUpload(true);
             student.setIncomplete(paperCount != answerCard.getPaperCount());
             student.setIncomplete(paperCount != answerCard.getPaperCount());
             student.setScanStatus(ScanStatus.SCANNED);
             student.setScanStatus(ScanStatus.SCANNED);
             // 更新图片数量和图片地址
             // 更新图片数量和图片地址
-            updateStudentSheetInfo(studentId, studentPaperList);
+            updateStudentSheetInfo(student, studentPaperList);
         } else {
         } else {
             student.setScanStatus(ScanStatus.UNEXIST);
             student.setScanStatus(ScanStatus.UNEXIST);
         }
         }
 //        student.setUpdaterId(userId);
 //        student.setUpdaterId(userId);
 //        student.setUpdateTime(System.currentTimeMillis());
 //        student.setUpdateTime(System.currentTimeMillis());
         this.saveOrUpdate(student);
         this.saveOrUpdate(student);
+
+        // 更新课程表中上传人数
+        updateMarkPaperUploadCount(student.getExamId(), student.getPaperNumber());
         if (updateOmrTask) {
         if (updateOmrTask) {
             // 清除识别对照任务
             // 清除识别对照任务
             scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
             scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
@@ -290,7 +295,21 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         }
         }
     }
     }
 
 
-    private void updateStudentSheetInfo(Long studentId, List<ScanStudentPaper> studentPaperList) {
+    private void updateMarkPaperUploadCount(Long examId, String paperNumber) {
+        QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkStudent::getExamId, examId)
+                .eq(MarkStudent::getPaperNumber, paperNumber)
+                .eq(MarkStudent::getUpload, true);
+        int count = this.count(queryWrapper);
+
+        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkPaper::getUploadCount, count)
+                .eq(MarkPaper::getExamId, examId)
+                .eq(MarkPaper::getPaperNumber, paperNumber);
+        markPaperService.update(updateWrapper);
+    }
+
+    private MarkStudent updateStudentSheetInfo(MarkStudent student, List<ScanStudentPaper> studentPaperList) {
         List<FilePathVo> filePathVoList = new ArrayList<>();
         List<FilePathVo> filePathVoList = new ArrayList<>();
         for (ScanStudentPaper scanStudentPaper : studentPaperList) {
         for (ScanStudentPaper scanStudentPaper : studentPaperList) {
             List<ScanPaperPage> scanPaperPages = scanPaperPageService.listByPaperId(scanStudentPaper.getPaperId());
             List<ScanPaperPage> scanPaperPages = scanPaperPageService.listByPaperId(scanStudentPaper.getPaperId());
@@ -301,10 +320,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 }
                 }
             }
             }
         }
         }
-        UpdateWrapper<MarkStudent> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(MarkStudent::getSheetCount, filePathVoList.size())
-                .set(MarkStudent::getSheetPath, JSON.toJSONString(filePathVoList)).eq(MarkStudent::getId, studentId);
-        this.update(updateWrapper);
+        student.setSheetCount(filePathVoList.size());
+        student.setSheetPath(JSON.toJSONString(filePathVoList));
+        return student;
     }
     }
 
 
     @Override
     @Override
@@ -394,11 +412,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Override
     @Override
     public boolean updateScanInfo(MarkStudent student) {
     public boolean updateScanInfo(MarkStudent student) {
         UpdateWrapper<MarkStudent> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<MarkStudent> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(MarkStudent::getSheetCount, student.getSheetCount())
-                .set(MarkStudent::getAnswers, student.getAnswers())
+        updateWrapper.lambda().set(MarkStudent::getAnswers, student.getAnswers())
                 .set(MarkStudent::getBatchCode, student.getBatchCode())
                 .set(MarkStudent::getBatchCode, student.getBatchCode())
                 .set(MarkStudent::getAbsent, student.getAbsent())
                 .set(MarkStudent::getAbsent, student.getAbsent())
-                .set(MarkStudent::getUpload, true)
                 .set(MarkStudent::getUploadTime, System.currentTimeMillis())
                 .set(MarkStudent::getUploadTime, System.currentTimeMillis())
                 .set(MarkStudent::getObjectiveScore, student.getObjectiveScore())
                 .set(MarkStudent::getObjectiveScore, student.getObjectiveScore())
                 .set(MarkStudent::getObjectiveScoreList, student.getObjectiveScoreList())
                 .set(MarkStudent::getObjectiveScoreList, student.getObjectiveScoreList())
@@ -754,11 +770,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (ret.getOverview() != null) {
         if (ret.getOverview() != null) {
             double total = ret.getOverview().getStudentCount() - ret.getOverview().getAbsentCount();
             double total = ret.getOverview().getStudentCount() - ret.getOverview().getAbsentCount();
             ret.getOverview().setPassRate(
             ret.getOverview().setPassRate(
-                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getPassCount(), 100), total, 2)
-                            + "%");
+                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getPassCount(), 100), total, 2));
             ret.getOverview().setExcellentRate(
             ret.getOverview().setExcellentRate(
-                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2)
-                            + "%");
+                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
         }
         }
 
 
         fillScoreRange(ret, examId, paperNumber);
         fillScoreRange(ret, examId, paperNumber);
@@ -767,9 +781,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (CollectionUtils.isNotEmpty(ret.getCollege())) {
         if (CollectionUtils.isNotEmpty(ret.getCollege())) {
             for (CollegeVo vo : ret.getCollege()) {
             for (CollegeVo vo : ret.getCollege()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
                 double total = vo.getStudentCount() - vo.getAbsentCount();
-                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(
                 vo.setExcellentRate(
-                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
             }
             }
         }
         }
 
 
@@ -777,9 +791,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (CollectionUtils.isNotEmpty(ret.getClassData())) {
         if (CollectionUtils.isNotEmpty(ret.getClassData())) {
             for (ClassVo vo : ret.getClassData()) {
             for (ClassVo vo : ret.getClassData()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
                 double total = vo.getStudentCount() - vo.getAbsentCount();
-                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(
                 vo.setExcellentRate(
-                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
             }
             }
         }
         }
 
 
@@ -787,9 +801,19 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (CollectionUtils.isNotEmpty(ret.getTeacher())) {
         if (CollectionUtils.isNotEmpty(ret.getTeacher())) {
             for (TeacherVo vo : ret.getTeacher()) {
             for (TeacherVo vo : ret.getTeacher()) {
                 double total = vo.getStudentCount() - vo.getAbsentCount();
                 double total = vo.getStudentCount() - vo.getAbsentCount();
-                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
+                vo.setExcellentRate(
+                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
+            }
+        }
+
+        ret.setTeacherClass(baseMapper.teacherClass(examId, paperNumber));
+        if (CollectionUtils.isNotEmpty(ret.getTeacherClass())) {
+            for (TeacherClassVo vo : ret.getTeacherClass()) {
+                double total = vo.getStudentCount() - vo.getAbsentCount();
+                vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2));
                 vo.setExcellentRate(
                 vo.setExcellentRate(
-                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+                        Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2));
             }
             }
         }
         }
 
 

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

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.service.impl;
 package com.qmth.teachcloud.mark.service.impl;
 
 
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -22,7 +23,7 @@ import com.qmth.teachcloud.mark.service.ScanBatchPaperService;
  * @since 2023-09-22
  * @since 2023-09-22
  */
  */
 @Service
 @Service
-public class ScanBatchPaperServiceImpl extends ServiceImpl<ScanBatchPaperMapper, ScanBatchPaper> implements ScanBatchPaperService {
+public class ScanBatchPaperServiceImpl extends MppServiceImpl<ScanBatchPaperMapper, ScanBatchPaper> implements ScanBatchPaperService {
 
 
     @Override
     @Override
     public ScanBatchPaper findByBatchIdAndStudentIdAndPaperNumber(Long batchId, Long studentId, Integer paperIndex) {
     public ScanBatchPaper findByBatchIdAndStudentIdAndPaperNumber(Long batchId, Long studentId, Integer paperIndex) {
@@ -38,13 +39,12 @@ public class ScanBatchPaperServiceImpl extends ServiceImpl<ScanBatchPaperMapper,
     @Transactional
     @Transactional
     public void update(ScanBatch batch, ScanPaper paper, Long studentId, Integer paperNumber) {
     public void update(ScanBatch batch, ScanPaper paper, Long studentId, Integer paperNumber) {
     	ScanBatchPaper batchPaperEntity = new ScanBatchPaper();
     	ScanBatchPaper batchPaperEntity = new ScanBatchPaper();
-        batchPaperEntity.setId(SystemConstant.getDbUuid());
         batchPaperEntity.setBatchId(batch.getId());
         batchPaperEntity.setBatchId(batch.getId());
         batchPaperEntity.setStudentId(studentId);
         batchPaperEntity.setStudentId(studentId);
         batchPaperEntity.setPaperIndex(paperNumber);
         batchPaperEntity.setPaperIndex(paperNumber);
         batchPaperEntity.setPaperId(paper.getId());
         batchPaperEntity.setPaperId(paper.getId());
         batchPaperEntity.setCardNumber(paper.getCardNumber());
         batchPaperEntity.setCardNumber(paper.getCardNumber());
         batchPaperEntity.setAssigned(paper.getAssigned());
         batchPaperEntity.setAssigned(paper.getAssigned());
-        saveOrUpdate(batchPaperEntity);
+        saveOrUpdateByMultiId(batchPaperEntity);
     }
     }
 }
 }

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

@@ -152,11 +152,11 @@ public class ScanPaperServiceImpl extends ServiceImpl<ScanPaperMapper, ScanPaper
             throw new ParameterException("卡格式信息未找到");
             throw new ParameterException("卡格式信息未找到");
         }
         }
         // 验证卡格式所属科目
         // 验证卡格式所属科目
-        boolean allowSubject = scanAnswerCardSubjectService.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
-                student.getCoursePaperId());
-        if (!allowSubject) {
-            throw new ParameterException("卡格式与考生科目不一致");
-        }
+//        boolean allowSubject = scanAnswerCardSubjectService.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
+//                student.getCoursePaperId());
+//        if (!allowSubject) {
+//            throw new ParameterException("卡格式与考生科目不一致");
+//        }
         // cardNumber或paperNumber有变化,都需要重新识别
         // cardNumber或paperNumber有变化,都需要重新识别
         if ((!paper.getNumber().equals(domain.getPaperNumber())
         if ((!paper.getNumber().equals(domain.getPaperNumber())
                 || !paper.getCardNumber().equals(domain.getCardNumber()))
                 || !paper.getCardNumber().equals(domain.getCardNumber()))

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

@@ -68,11 +68,11 @@ public class ScanRefixBatchServiceImpl extends ServiceImpl<ScanRefixBatchMapper,
 		if (answerCard == null) {
 		if (answerCard == null) {
 			throw new ParameterException("卡格式信息未找到");
 			throw new ParameterException("卡格式信息未找到");
 		}
 		}
-		boolean allowSubject = answerCardSubjectService.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
-				student.getCoursePaperId());
-		if (!allowSubject) {
-			throw new ParameterException("卡格式与考生科目不匹配");
-		}
+//		boolean allowSubject = answerCardSubjectService.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
+//				student.getCoursePaperId());
+//		if (!allowSubject) {
+//			throw new ParameterException("卡格式与考生科目不匹配");
+//		}
 		if (domain.getPapers().size() != answerCard.getPaperCount()) {
 		if (domain.getPapers().size() != answerCard.getPaperCount()) {
 			throw new ParameterException("卡格式张数不一致");
 			throw new ParameterException("卡格式张数不一致");
 		}
 		}

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml

@@ -131,6 +131,7 @@
             <if test="req.courseCode != null and req.courseCode != ''">
             <if test="req.courseCode != null and req.courseCode != ''">
                 AND t.course_code = #{req.courseCode}
                 AND t.course_code = #{req.courseCode}
             </if>
             </if>
+            AND t.status = 'FINISH'
         group by t.course_code,t.course_name,t.paper_number
         group by t.course_code,t.course_name,t.paper_number
         ORDER BY t.course_code
         ORDER BY t.course_code
     </select>
     </select>

+ 16 - 0
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -347,4 +347,20 @@
           AND t.scan_status = 'UNEXIST'
           AND t.scan_status = 'UNEXIST'
         order by t.student_code
         order by t.student_code
     </select>
     </select>
+    <select id="teacherClass" resultType="com.qmth.teachcloud.mark.bean.archivescore.TeacherClassVo">
+        SELECT
+            s.teacher,
+            s.class_name,
+            count(*) studentCount,
+            sum(case when s.is_absent =1 then 1 else 0 end) absentCount,
+            avg(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) avgScore,
+            max(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) maxScore,
+            min(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) minScore,
+            sum(case when s.objective_score+s.subjective_score >=t.pass_score then 1 else 0 end) passCount,
+            sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
+        FROM mark_student s
+        WHERE
+            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber}
+        group by s.teacher, s.class_name
+    </select>
 </mapper>
 </mapper>

+ 2 - 2
teachcloud-mark/src/main/resources/mapper/ScanBatchPaperMapper.xml

@@ -5,8 +5,8 @@
     <!-- 通用查询映射结果 -->
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.qmth.teachcloud.mark.entity.ScanBatchPaper">
     <resultMap id="BaseResultMap" type="com.qmth.teachcloud.mark.entity.ScanBatchPaper">
         <id column="batch_id" property="batchId" />
         <id column="batch_id" property="batchId" />
-        <result column="student_id" property="studentId" />
-        <result column="paper_index" property="paperIndex" />
+        <id column="student_id" property="studentId" />
+        <id column="paper_index" property="paperIndex" />
         <result column="paper_id" property="paperId" />
         <result column="paper_id" property="paperId" />
         <result column="card_number" property="cardNumber" />
         <result column="card_number" property="cardNumber" />
         <result column="assigned" property="assigned" />
         <result column="assigned" property="assigned" />