xiaofei hace 1 año
padre
commit
7b1657833c
Se han modificado 25 ficheros con 225 adiciones y 101 borrados
  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("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")
-    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,
                         @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);
 
-    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);
 

+ 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);
 
-    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);
 

+ 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
-    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());
-        return examDetailService.listStudent(schoolId, examDetailId, ticketNumber, studentName, courseCode, pageNumber, pageSize);
+        return examDetailService.listStudent(schoolId, examDetailId, studentCode, studentName, courseCode, pageNumber, pageSize);
     }
 
 
     @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<>();
         ExamDetail examDetail = examDetailService.getById(examDetailId);
         // 撤回提示
@@ -135,11 +135,11 @@ public class ClientServiceImpl implements ClientService {
         Map<String, Map<String, String>> map = mapCourseUrl(examDetailCourses);
         // 生成试卷List
         if (printContent.contains("PAPER")) {
-            finalMap.put("paper", splicePaperContent(examDetailCourses, map, ticketNumber, type));
+            finalMap.put("paper", splicePaperContent(examDetailCourses, map, studentCode, type));
         }
         if (printContent.contains("CARD")) {
             // 生成题卡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 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<>();
         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());
             if (studentList != null && studentList.size() > 0) {
                 for (Map studentMap : studentList) {
@@ -749,11 +749,11 @@ public class ClientServiceImpl implements ClientService {
      *
      * @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<>();
         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());
             if (studentList != null && studentList.size() > 0) {
                 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
-    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);
         if (ExamDetailStatusEnum.NEW.name().equals(examDetail.getStatus())
@@ -912,12 +912,12 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             throw ExceptionResultEnum.ERROR.exception("该任务已被撤回");
         }
         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
-    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

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

@@ -462,8 +462,8 @@
         <where>
             and a.school_id = #{schoolId}
             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 test="studentName != null and studentName != ''">
                 and c.student_name like concat('%', #{studentName}, '%')
@@ -491,10 +491,10 @@
         WHERE
             b.id = #{examDetailCourseId}
         <if test="type == 'ONE'">
-            and c.ticket_number = #{ticketNumber}
+            and c.student_code = #{studentCode}
         </if>
         <if test="type == 'MORE'">
-            and c.ticket_number >= #{ticketNumber}
+            and c.student_code >= #{studentCode}
         </if>
     </select>
     <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 ticketNumber 准考证
+     * @param studentCode 学
      * @param studentName  学号
      * @param courseCode   课程代码
      */
     @ApiOperation(value = "重打-查询考生列表")
     @PostMapping("/print/list_student")
     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 = "courseCode", required = false) String courseCode,
                               @RequestParam Integer pageNumber,
                               @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);
     }
 
@@ -420,15 +420,15 @@ public class ClientController {
      * 重打-内容查询
      *
      * @param examDetailId 考场ID
-     * @param ticketNumber 准考证
+     * @param studentCode 学
      * @param type         类型
      */
     @ApiOperation(value = "重打-内容查询")
     @PostMapping("/print/get_reprint_data")
     public Result getReprintData(@RequestParam("examDetailId") Long examDetailId,
-                                 @RequestParam("ticketNumber") String ticketNumber,
+                                 @RequestParam("studentCode") String studentCode,
                                  @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);
     }
 

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

@@ -59,8 +59,8 @@ public class MarkProblemController {
      */
     @ApiOperation(value = "重置")
     @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);
     }
 }

+ 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<TeacherVo> teacher;
+
+	private List<TeacherClassVo> teacherClass;
 	
 	private List<QuestionVo> objective;
 	
@@ -58,6 +60,14 @@ public class ScoreReportVo {
 		this.teacher = teacher;
 	}
 
+	public List<TeacherClassVo> getTeacherClass() {
+		return teacherClass;
+	}
+
+	public void setTeacherClass(List<TeacherClassVo> teacherClass) {
+		this.teacherClass = teacherClass;
+	}
+
 	public List<QuestionVo> getObjective() {
 		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.ser.std.ToStringSerializer;
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -23,20 +24,19 @@ import io.swagger.annotations.ApiModelProperty;
 public class ScanBatchPaper implements Serializable {
 
     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)
     @ApiModelProperty(value = "批次ID")
+    @MppMultiId(value = "batch_id")
     private Long batchId;
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "考生ID")
+    @MppMultiId(value = "student_id")
     private Long studentId;
 
     @ApiModelProperty(value = "试卷页数")
+    @MppMultiId(value = "paper_index")
     private Integer paperIndex;
 
     @JsonSerialize(using = ToStringSerializer.class)
@@ -48,14 +48,6 @@ public class ScanBatchPaper implements Serializable {
 
     private Boolean assigned;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
     public Long getBatchId() {
         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.metadata.IPage;
 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.AnswerQueryVo;
 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);
 
 	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;
 
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
 import com.qmth.teachcloud.mark.entity.ScanBatchPaper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author xf
  * @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);
 
-    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);
 

+ 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.MarkStatusDto;
 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.MarkResult;
 
@@ -35,7 +31,7 @@ public interface MarkService {
 
     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);
 

+ 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
     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

+ 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
-	public void resetProblem(List<Long> taskIds) {
+	public void resetProblem(List<Long> ids) {
 		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) {
 				try {
 					lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
 					lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
 							markTask.getGroupNumber());
 					if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
-						markService.rejectMarkTask(markTask, sysUser.getId());
+						markService.rejectMarkTask(markProblemHistory, markTask, sysUser.getId());
 					}
 				} catch (Exception e) {
 					log.error("back library error", e);
@@ -112,7 +113,7 @@ public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistor
 	}
 
 	@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.lambda().set(MarkProblemHistory::getUpdateUserId, userId).set(MarkProblemHistory::getStatus, back)
 				.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
-    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) {
             return false;
         }
@@ -184,7 +183,7 @@ public class MarkServiceImpl implements MarkService {
             markTrackService.deleteByTaskId(markTask.getId());
             resetStudentGroup(markTask.getStudentId(), markTask.getExamId(), markTask.getPaperNumber(),
                     markTask.getGroupNumber());
-            markProblemHistoryService.resetByMarkTaskId(markTask.getId(), MarkProblemStatus.WAITING, userId,
+            markProblemHistoryService.resetByMarkProblemId(markProblemHistory.getId(), MarkProblemStatus.WAITING, userId,
                     MarkProblemStatus.BACK, now);
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
             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.QueryWrapper;
 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.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -272,16 +273,20 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (paperCount > 0) {
             ScanAnswerCard answerCard = answerCardService.findByExamAndNumber(student.getExamId(),
                     student.getCardNumber());
+            student.setUpload(true);
             student.setIncomplete(paperCount != answerCard.getPaperCount());
             student.setScanStatus(ScanStatus.SCANNED);
             // 更新图片数量和图片地址
-            updateStudentSheetInfo(studentId, studentPaperList);
+            updateStudentSheetInfo(student, studentPaperList);
         } else {
             student.setScanStatus(ScanStatus.UNEXIST);
         }
 //        student.setUpdaterId(userId);
 //        student.setUpdateTime(System.currentTimeMillis());
         this.saveOrUpdate(student);
+
+        // 更新课程表中上传人数
+        updateMarkPaperUploadCount(student.getExamId(), student.getPaperNumber());
         if (updateOmrTask) {
             // 清除识别对照任务
             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<>();
         for (ScanStudentPaper scanStudentPaper : studentPaperList) {
             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
@@ -394,11 +412,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Override
     public boolean updateScanInfo(MarkStudent student) {
         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::getAbsent, student.getAbsent())
-                .set(MarkStudent::getUpload, true)
                 .set(MarkStudent::getUploadTime, System.currentTimeMillis())
                 .set(MarkStudent::getObjectiveScore, student.getObjectiveScore())
                 .set(MarkStudent::getObjectiveScoreList, student.getObjectiveScoreList())
@@ -754,11 +770,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (ret.getOverview() != null) {
             double total = ret.getOverview().getStudentCount() - ret.getOverview().getAbsentCount();
             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(
-                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2)
-                            + "%");
+                    Calculator.divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
         }
 
         fillScoreRange(ret, examId, paperNumber);
@@ -767,9 +781,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (CollectionUtils.isNotEmpty(ret.getCollege())) {
             for (CollegeVo vo : ret.getCollege()) {
                 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) + "%");
+                        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())) {
             for (ClassVo vo : ret.getClassData()) {
                 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) + "%");
+                        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())) {
             for (TeacherVo vo : ret.getTeacher()) {
                 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(
-                        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;
 
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -22,7 +23,7 @@ import com.qmth.teachcloud.mark.service.ScanBatchPaperService;
  * @since 2023-09-22
  */
 @Service
-public class ScanBatchPaperServiceImpl extends ServiceImpl<ScanBatchPaperMapper, ScanBatchPaper> implements ScanBatchPaperService {
+public class ScanBatchPaperServiceImpl extends MppServiceImpl<ScanBatchPaperMapper, ScanBatchPaper> implements ScanBatchPaperService {
 
     @Override
     public ScanBatchPaper findByBatchIdAndStudentIdAndPaperNumber(Long batchId, Long studentId, Integer paperIndex) {
@@ -38,13 +39,12 @@ public class ScanBatchPaperServiceImpl extends ServiceImpl<ScanBatchPaperMapper,
     @Transactional
     public void update(ScanBatch batch, ScanPaper paper, Long studentId, Integer paperNumber) {
     	ScanBatchPaper batchPaperEntity = new ScanBatchPaper();
-        batchPaperEntity.setId(SystemConstant.getDbUuid());
         batchPaperEntity.setBatchId(batch.getId());
         batchPaperEntity.setStudentId(studentId);
         batchPaperEntity.setPaperIndex(paperNumber);
         batchPaperEntity.setPaperId(paper.getId());
         batchPaperEntity.setCardNumber(paper.getCardNumber());
         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("卡格式信息未找到");
         }
         // 验证卡格式所属科目
-        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有变化,都需要重新识别
         if ((!paper.getNumber().equals(domain.getPaperNumber())
                 || !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) {
 			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()) {
 			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 != ''">
                 AND t.course_code = #{req.courseCode}
             </if>
+            AND t.status = 'FINISH'
         group by t.course_code,t.course_name,t.paper_number
         ORDER BY t.course_code
     </select>

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

@@ -347,4 +347,20 @@
           AND t.scan_status = 'UNEXIST'
         order by t.student_code
     </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>

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

@@ -5,8 +5,8 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.qmth.teachcloud.mark.entity.ScanBatchPaper">
         <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="card_number" property="cardNumber" />
         <result column="assigned" property="assigned" />