package com.qmth.teachcloud.mark.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.qmth.teachcloud.common.bean.dto.DataPermissionRule; import com.qmth.teachcloud.common.entity.BasicExam; import com.qmth.teachcloud.common.entity.BasicExamStudent; import com.qmth.teachcloud.common.entity.SysUser; import com.qmth.teachcloud.common.enums.ScanStatus; import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus; import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus; import com.qmth.teachcloud.mark.bean.UpdateTimeVo; import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery; import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo; import com.qmth.teachcloud.mark.bean.archivescore.MarkStudentScoreVo; import com.qmth.teachcloud.mark.bean.archivescore.ScoreReportVo; import com.qmth.teachcloud.mark.bean.omredit.OmrEditDomain; import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryDomain; import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryVo; import com.qmth.teachcloud.mark.bean.scanexaminfo.ScanExamCheckInfoVo; import com.qmth.teachcloud.mark.bean.scanexaminfo.ScanExamInfoVo; import com.qmth.teachcloud.mark.bean.student.AbsentManualUpdateVo; import com.qmth.teachcloud.mark.bean.student.MarkStudentQuery; import com.qmth.teachcloud.mark.bean.student.StudentQuery; import com.qmth.teachcloud.mark.bean.student.StudentVo; import com.qmth.teachcloud.mark.dto.ScanOmrTaskStatusDto; import com.qmth.teachcloud.mark.dto.mark.AbInfoVo; import com.qmth.teachcloud.mark.dto.mark.MarkStudentVo; import com.qmth.teachcloud.mark.dto.mark.manage.Task; import com.qmth.teachcloud.mark.dto.mark.score.SheetUrlDto; import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveDetailDto; import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto; import com.qmth.teachcloud.mark.entity.MarkPaper; import com.qmth.teachcloud.mark.entity.MarkStudent; import com.qmth.teachcloud.mark.entity.ScanStudentPaper; import com.qmth.teachcloud.mark.enums.PaperTypeCheckStatus; import com.qmth.teachcloud.mark.params.MarkHeaderResult; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.util.List; import java.util.Set; /** *

* 考试考生库 服务类 *

* * @author xf * @since 2023-09-22 */ public interface MarkStudentService extends IService { List listClassByExamIdAndCourseCode(Long examId, String paperNumber); void updateSubjectiveStatusAndScore(Long studentId, SubjectiveStatus status, Double score, String scoreList); void updateSubjectiveStatusAndScore(Long examId, String paperNumber, SubjectiveStatus status, Double score, String scoreList); ScanExamInfoVo getScanExamInfo(BasicExam exam, Long courseId, String coursePaperId); IPage pageStudentScore(Long examId, String paperNumber, String college, String majorName, String teachClassName, String className, String teacher, Integer filter, String status, Boolean breach, Double startScore, Double endScore, Double subjectiveStartScore, Double subjectiveEndScore, Double objectiveStartScore, Double objectiveEndScore, Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, String secretNumber, String orderType, String orderField, Integer pageNumber, Integer pageSize); /** * 评卷管理/成绩检查/成绩详情导出 * * @param examId * @param paperNumber * @param college * @param majorName * @param teachClassName * @param className * @param teacher * @param filter * @param status * @param breach * @param startScore * @param endScore * @param subjectiveStartScore * @param subjectiveEndScore * @param objectiveStartScore * @param objectiveEndScore * @param subScore * @param objectiveScoreRateLt * @param studentName * @param studentCode * @param orderType * @param orderField * @return */ List pageStudentScoreExport(Long examId, String paperNumber, String college, String majorName, String teachClassName, String className, String teacher, Integer filter, String status, Boolean breach, Double startScore, Double endScore, Double subjectiveStartScore, Double subjectiveEndScore, Double objectiveStartScore, Double objectiveEndScore, Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, String secretNumber, String orderType, String orderField); List buildSheetUrls(Long studentId); int getPaperTypeCheckCount(Long examId, Long courseId, String coursePaperId, PaperTypeCheckStatus status, DataPermissionRule dpr); ScanExamCheckInfoVo checkInfo(BasicExam exam, Long courseId, String coursePaperId); /** * 根据考生当前绑定的paper刷新考生状态,需要在外部调用处对考生上锁 * * @param userId userId * @param studentId studentId * @param updateOmrTask updateOmrTask * @param omrEdit 是否是'修改答题卡识别结果'调用 */ void updateStudentByPaper(@NotNull Long userId, @NotNull Long studentId, @NotNull boolean updateOmrTask, @NotNull boolean omrEdit, @NotNull boolean omrAssigned); MarkStudent findByExamIdAndCoursePaperIdAndStudentCode(Long examId, String coursePaperId, String studentCode); MarkStudent findByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode); List listByStudentId(Long studentId); StudentObjectiveDetailDto getObjectiveInspectedTask(Long studentId); Boolean saveObjectiveInspectedTask(Long studentId, String answers); int countUploadedByExamIdAndPaperNumber(Long examId, String paperNumber); boolean updateScanInfo(MarkStudent student); List listAbsentOrBreachMarkTaskStudent(Long examId, String paperNumber); List listUnMarkTaskStudent(Long examId, String paperNumber, Integer groupNumber, int pageSize); void calculateObjectiveScore(MarkStudent student); void updateStudentAndPaper(SysUser user, Long studentId, List studentPaperList, boolean clearMarkTask); StudentVo findOne(StudentQuery query); int countByExamIdAndSecretNumber(Long examId, String secretNumber); List listByExamIdAndCoursePaperId(Long examId, String coursePaperId); IPage query(AnswerQueryDomain query); List summary(AnswerQueryDomain query); UpdateTimeVo omrEdit(Long userId, OmrEditDomain domain); long countByExamIdAndPaperNumber(Long examId, String paperNumber); long countByExamIdAndPaperNumberAndSerialNumber(Long examId, String paperNumber, Integer serialNumber); AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode, Boolean manualAbsent); UpdateTimeVo confirm(Long examId, String coursePaperId, String studentCode, Boolean omrAbsent); List findIdByExamIdAndPaperNumber(Long examId, String paperNumber); Task getSubjectiveInspectedTask(Long studentId); void saveSubjectiveInspectedTask(MarkHeaderResult markResult); IPage studentList(ArchiveStudentQuery query); void scoreExport(ArchiveStudentQuery query, HttpServletResponse response); ScoreReportVo scoreReport(ArchiveStudentQuery query); void exportUnexist(Long examId, Long courseId, String coursePaperId, HttpServletResponse response); int countByExamIdAndPaperNumberAndMarkStatus(Long examId, String paperNumber, SubjectiveStatus status); void updateCheckInfo(Long studentId, Long userId); int countOmrAbsentStudent(Long examId, String paperNumber, boolean isOmrAbsentConfirm); int countOmrAbsentStudent(Long examId, String paperNumber, boolean isOmrAbsentConfirm, String teachClassName); void scoreReportDownload(MultipartFile file, HttpServletResponse response); void deleteByExamIdAndPaperNumber(Long examId, String paperNumber); boolean calcObjectiveScore(Long examId, String paperNumber); IPage pageByExamAndPaperNumber(Long examId, String paperNumber, int pageNumber, int pageSize); void updateObjectiveScoreAndScoreList(MarkStudent markStudent); boolean updateAssignConfirm(Long studentId, boolean assignConfirm); int getAssignedCount(Long examId, Boolean checked, Long courseId, String coursePaperId, MarkPaperStatus status, DataPermissionRule dpr); int getAssignedCount(Long examId, Boolean checked, Long courseId, String coursePaperId, MarkPaperStatus status, DataPermissionRule dpr, String teachClassName); int countAbsentByExamIdAndPaperNumber(Long examId, String paperNumber); List listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(Long examId, Long courseId, String coursePaperId, String status, DataPermissionRule dpr); int countUnexistByExamIdAndPaperNumber(Long examId, String paperNumber); void updateStudentAnswer(@NotNull Long studentId); List listMarkStudentScoreList(Long examId, String paperNumber); void trackExport(Long examId, String paperNumber, HttpServletResponse response); void sheetExport(Long examId, String paperNumber, HttpServletResponse response); MarkStudent assembleByBasicExamStudent(BasicExamStudent basicExamStudent, MarkPaper markPaper, Set secretNumberSet, boolean containPaperType); void deleteByBasicStudentId(List basicExamStudentIds); Integer maxCardNumber(Long examId, String paperNumber); void scoreDownload(ArchiveStudentQuery query, HttpServletResponse response); Boolean missScanUpdate(Long examId, String coursePaperId, String studentCode, Boolean missScan); MarkStudentVo getMarkStudentVoByStudentId(Long studentId); List listMarkStudentVo(MarkStudentQuery markStudentQuery); IPage pageMarkStudentVo(Page page, MarkStudentQuery markStudentQuery); MarkStudent findByBasicStudentId(Long basicStudentId); void updateBasicExamStudentPaperType(Long markStudentId); boolean calcBatchObjectiveScore(List ids); List listByBasicStudentIds(List basicExamStudentIds); void confirmSubjectiveInspectedTask(Long studentId); MarkStudentVo getDetailById(Long studentId); /** * 获取卷型检查状态数量 * * @param examId 考试id * @param courseId 课程id * @param coursePaperId 特殊试卷编号 * @return 已办和待办数量 */ ScanOmrTaskStatusDto getStatus(Long examId, Long courseId, String coursePaperId); /** * 处理卷型检查 * * @param studentId 考生id * @param paperType 试卷类型 * @return 更新时间 */ UpdateTimeVo disposePaperTypeCheck(Long studentId, String paperType); AbInfoVo findExamTaskPaperTypeOpenStatus(Long examId, String paperNumber); UpdateTimeVo breachUpdate(Long studentId, Boolean breach); }