xiaofei hai 1 ano
pai
achega
e6d5184809
Modificáronse 21 ficheiros con 237 adicións e 80 borrados
  1. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  2. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  3. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  4. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicExamStudentService.java
  5. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  6. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java
  7. 4 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  8. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  9. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamStudentServiceImpl.java
  10. 8 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientUpgradeServiceImpl.java
  11. 0 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  12. 1 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  13. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  14. 157 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  15. 17 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  16. 0 15
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  17. 14 0
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  18. 0 13
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  19. 3 1
      distributed-print/install/mysql/upgrade/3.3.1.sql
  20. 4 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  21. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

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

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.teachcloud.common.bean.result.TbTaskDetailResult;
 import com.qmth.teachcloud.common.entity.BasicCourse;
@@ -29,8 +30,6 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
-    List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("examId") Long examId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);
-
     List<ExamDetailCourse> listExamDetailByExamIdAndPaperNumber(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
     TbTaskDetailResult getByExamDetailId(Long examDetailId);

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

@@ -121,4 +121,6 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
     List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(@Param("printStatus") String printStatus, @Param("startTime") long startTime, @Param("markStatus") String markStatus);
 
     int countMakeupUsedByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+
+    List<ExamDetail> listByExamIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 }

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

@@ -103,8 +103,6 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
      */
     public WorkResult getFlowInfo(@Param("flowId") Long flowId, @Param("taskId") Long taskId);
 
-    List<ExamTask> getExamTaskByCourseCodeAndCardId(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("cardId") String cardId);
-
     IPage<MakeupExamTaskDto> listMakeupExamTask(@Param("page") Page<MakeupExamTaskDto> page, @Param("printPlanId") Long printPlanId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("collegeId") Long collegeId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userName") String userName);
 
 }

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

@@ -107,4 +107,5 @@ public interface BasicExamStudentService extends IService<BasicExamStudent> {
      */
     BasicExamStudent editEntityHelp(BasicExamStudentParam basicExamStudentParam, BasicExam basicExam, SysUser requestUser);
 
+    List<BasicExamStudent> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseFieldsDto;
 import com.qmth.distributed.print.business.bean.params.SingleExamStudentAddParam;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.teachcloud.common.bean.result.TbTaskDetailResult;
 import com.qmth.teachcloud.common.entity.BasicCourse;
@@ -32,8 +33,6 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
 
-    List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber);
-
     List<ExamDetailCourse> listExamDetailByExamIdAndPaperNumber(Long schoolId, Long examId, String paperNumber);
 
     TbTaskDetailResult getByExamDetailId(Long examDetailId);

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

@@ -40,6 +40,7 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
      */
     Map<String, Object> taskRestart(ExamTaskDetail examTaskDetail);
 
+    ExamTaskDetail getByExamTaskIdNotValid(Long examTaskId);
     ExamTaskDetail getByExamTaskId(Long examTaskId);
 
     /**

+ 4 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java

@@ -10,13 +10,11 @@ import com.qmth.distributed.print.business.bean.params.MakeupExamTaskTotalParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
-import com.qmth.distributed.print.business.entity.ExamTask;
-import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
-import com.qmth.distributed.print.business.entity.ExamTaskDetail;
-import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.tiku.TikuPaperInfo;
+import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
@@ -203,8 +201,6 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     boolean savePreviewLog(Long examTaskId, String paperType, String type);
 
-    List<ExamTask> getExamTaskByCourseCodeAndCardId(Long schoolId, String courseCode, String cardId);
-
     List<String> listPaperNumber(String param, List<Long> printPlanIdList);
 
     ExamTask getByExamIdAndCourseCodeAndPaperNumber(Long examId, String courseCode, String paperNumber);
@@ -216,4 +212,6 @@ public interface ExamTaskService extends IService<ExamTask> {
     IPage<TikuPaperInfo> pageTikuPaper(String courseCode, String paperName, String account, Integer pageNumber, Integer pageSize);
 
     Map<String, Object> getTikuPaperData(Long examId, Long paperId, String uuid);
+
+    List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, ExamTaskDetail examTaskDetail, SysUser user);
 }

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

@@ -252,8 +252,8 @@ public interface PrintCommonService {
      * @param sysUser                        请求用户
      * @return 结果
      */
-    List<ExamStudent> createBatchStudentByStudentList(Long schoolId, Long examId, String semesterId, ExamTask examTask,
-                                                      String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, Long cardRuleId, SysUser sysUser);
+    List<ExamStudent> createBatchStudentByStudentList(Long examId, ExamTask examTask,
+                                                      String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, SysUser sysUser);
 
     /**
      * 保存任务附件(导出)

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

@@ -331,4 +331,13 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
         return basicExamStudent;
     }
 
+    @Override
+    public List<BasicExamStudent> listByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        QueryWrapper<BasicExamStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicExamStudent::getExamId, examId)
+                .eq(BasicExamStudent::getPaperNumber, paperNumber)
+                .orderByAsc(BasicExamStudent::getStudentCode);
+        return this.list(queryWrapper);
+    }
+
 }

+ 8 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientUpgradeServiceImpl.java

@@ -8,10 +8,12 @@ import com.qmth.distributed.print.business.entity.ClientUpgrade;
 import com.qmth.distributed.print.business.mapper.ClientUpgradeMapper;
 import com.qmth.distributed.print.business.service.ClientUpgradeService;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.enums.clientpackage.ClientPackageEnum;
 import com.qmth.teachcloud.common.service.FileUploadService;
+import com.qmth.teachcloud.common.util.Zip4jUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.io.FilenameUtils;
@@ -96,12 +98,17 @@ public class ClientUpgradeServiceImpl extends ServiceImpl<ClientUpgradeMapper, C
                 clientUpgrade.setBuild(build);
                 clientUpgrade.setSupportMin(supportMin);
                 clientUpgrade.setUpgradePath(JSON.toJSONString(filePathVo));
+
+                // 升级包文件上传
+                File parentDirVar = SystemConstant.getFileTempParentDirVar(SystemConstant.ZIP_PREFIX);
+                Zip4jUtil.unzip(filePathName, parentDirVar.getPath());
             } else {
                 throw ExceptionResultEnum.ERROR.exception("请选择正确的包类型");
             }
             // 保存或更新
             this.saveOrUpdate(clientUpgrade);
-            // 升级包
+
+
         } catch (IOException e) {
             throw new RuntimeException(e);
         } finally {

+ 0 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -86,11 +86,6 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
         return this.baseMapper.listByPrintPlanIdAndCourseCodeAndPaperNumber(schoolId, printPlanId, courseCode, paperNumber);
     }
 
-    @Override
-    public List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber) {
-        return this.baseMapper.listByAndCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
-    }
-
     @Override
     public List<ExamDetailCourse> listExamDetailByExamIdAndPaperNumber(Long schoolId, Long examId, String paperNumber) {
         return this.baseMapper.listExamDetailByExamIdAndPaperNumber(schoolId, examId, paperNumber);

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

@@ -888,13 +888,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Override
     public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber) {
-        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
-        if (examDetailCourses != null && examDetailCourses.size() > 0) {
-            Set<Long> examDetailIds = examDetailCourses.stream().map(m -> m.getExamDetailId()).collect(Collectors.toSet());
-            List<ExamDetail> examDetails = this.listByIds(examDetailIds);
-            return examDetails;
-        }
-        return null;
+        return this.baseMapper.listByExamIdAndCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
     }
 
     @Override

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -499,6 +499,17 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return mapVar;
     }
 
+    @Override
+    public ExamTaskDetail getByExamTaskIdNotValid(Long examTaskId) {
+        ExamTask examTask = examTaskService.getById(examTaskId);
+        if (examTask == null) {
+            throw ExceptionResultEnum.ERROR.exception("命题任务不存在");
+        }
+        QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskId);
+        return this.getOne(queryWrapper);
+    }
+
     @Override
     public ExamTaskDetail getByExamTaskId(Long examTaskId) {
         ExamTask examTask = examTaskService.getById(examTaskId);

+ 157 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -14,6 +14,8 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.dto.excel.ExamStudentImportDto;
+import com.qmth.distributed.print.business.bean.examRule.CodeNameEnableValue;
+import com.qmth.distributed.print.business.bean.examRule.FieldsDto;
 import com.qmth.distributed.print.business.bean.params.*;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
@@ -48,6 +50,7 @@ import com.qmth.teachcloud.common.util.excel.ExcelError;
 import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.task.Task;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -55,7 +58,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -68,6 +70,7 @@ import java.io.InputStream;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -84,6 +87,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     private static final Logger logger = LoggerFactory.getLogger(ExamTaskServiceImpl.class);
 
+    @Resource
+    private BasicTeachClazzService basicTeachClazzService;
+    @Resource
+    private BasicExamStudentService basicExamStudentService;
     @Resource
     private ExamTaskTempService examTaskTempService;
     @Resource
@@ -96,8 +103,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Lazy
     private PrintCommonService printCommonService;
     @Resource
-    ExamTaskMapper examTaskMapper;
-    @Resource
     private BasicCourseService basicCourseService;
     @Resource
     private SysUserService sysUserService;
@@ -428,7 +433,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     } else {
                         List<SysUserResult> courseUserList = Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getCourseUserList() : new ArrayList<>();
                         Map<String, String> courseUserMap = courseUserList.stream().collect(Collectors.toMap(SysUserResult::getLoginName, SysUserResult::getRealName));
-                        if (!CollectionUtils.isEmpty(courseUserMap)) {
+                        if (!courseUserMap.isEmpty()) {
                             userMap.putAll(courseUserMap);
                         }
                         if (StringUtils.isNotBlank(excelTeacherAccount)) {
@@ -789,8 +794,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 .eq(ExamTask::getId, examTask.getId());
         this.update(updateWrapper);
 
-//        ExamTaskDetail detail = examTaskDetailService.getByExamTaskId(examTaskDetail.getExamTaskId());
-        ExamTaskDetail detail = null;
+        ExamTaskDetail detail = examTaskDetailService.getByExamTaskIdNotValid(examTaskDetail.getExamTaskId());
         if (detail != null) {
             examTaskDetail.setId(detail.getId());
             // 已曝光试卷和未曝光试卷赋值
@@ -1066,7 +1070,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      */
     @Override
     public IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, Long schoolId, Long orgId, Long userId) {
-        return examTaskMapper.getFlowTaskReadyList(iPage, schoolId, orgId, String.valueOf(userId));
+        return this.baseMapper.getFlowTaskReadyList(iPage, schoolId, orgId, String.valueOf(userId));
     }
 
     /**
@@ -1078,7 +1082,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      */
     @Override
     public WorkResult getFlowInfo(Long flowId, Long taskId) {
-        return examTaskMapper.getFlowInfo(flowId, taskId);
+        return this.baseMapper.getFlowInfo(flowId, taskId);
     }
 
     /**
@@ -1092,7 +1096,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      */
     @Override
     public ExamTask findExamTaskByFlowStatus(Long schoolId, Long examId, String courseCode, String paperNumber, FlowStatusEnum flowStatus) {
-        List<ExamTask> examTaskList = examTaskMapper.findExamTaskByFlowStatus(schoolId, examId, courseCode, paperNumber, Objects.nonNull(flowStatus) ? flowStatus.name() : null);
+        List<ExamTask> examTaskList = this.baseMapper.findExamTaskByFlowStatus(schoolId, examId, courseCode, paperNumber, Objects.nonNull(flowStatus) ? flowStatus.name() : null);
         if (CollectionUtils.isEmpty(examTaskList)) {
             throw ExceptionResultEnum.EXAM_TASK_IS_NULL.exception();
         } else if (examTaskList.size() != 1) {
@@ -1123,6 +1127,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             if (StringUtils.isNotBlank(paperAttachmentIds)) {
                 List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(paperAttachmentIds);
                 for (PaperInfoVo paperInfoVo : paperInfoVoList) {
+                    if(StringUtils.isBlank(paperInfoVo.getCardId())){
+                        continue;
+                    }
                     Long cardId = Long.valueOf(paperInfoVo.getCardId());
                     ExamCard examCard = examCardService.getById(cardId);
                     if (examCard.getType().equals(CardTypeEnum.CUSTOM) || (examCard.getType().equals(CardTypeEnum.GENERIC) && examCard.getCreateMethod().equals(CardCreateMethodEnum.STANDARD))) {
@@ -1395,7 +1402,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
                         // 更新实际考生数量
                         List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList = examDetailList.getExamTaskStudentObjectParamList();
-                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(schoolId, examPrintPlan.getExamId(), basicExam.getSemesterId(), examTask, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), basicPrintConfig.getCardRuleId(), sysUser);
+                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(examPrintPlan.getExamId(), examTask, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), sysUser);
 
                         Set<String> classNameSet = new HashSet<>();
                         for (ExamStudent examStudent : examStudents) {
@@ -1650,7 +1657,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      */
     @Override
     public ExamTask findByFlowId(Long flowId) {
-        ExamTask examTask = examTaskMapper.findByFlowId(flowId);
+        ExamTask examTask = this.baseMapper.findByFlowId(flowId);
         Optional.ofNullable(examTask).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("命题计划为空"));
         return examTask;
     }
@@ -1965,11 +1972,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return true;
     }
 
-    @Override
-    public List<ExamTask> getExamTaskByCourseCodeAndCardId(Long schoolId, String courseCode, String cardId) {
-        return this.baseMapper.getExamTaskByCourseCodeAndCardId(schoolId, courseCode, cardId);
-    }
-
     @Override
     public List<String> listPaperNumber(String param, List<Long> printPlanIdList) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -2124,6 +2126,145 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         }
     }
 
+    @Transactional
+    @Override
+    public List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, ExamTaskDetail examTaskDetail, SysUser sysUser) {
+        List<BasicExamStudent> basicExamStudentList = basicExamStudentService.listByExamIdAndPaperNumber(examTask.getExamId(), examTask.getPaperNumber());
+        // 创建印刷计划
+        ExamPrintPlan examPrintPlan = new ExamPrintPlan();
+        examPrintPlan.insertInfo(sysUser.getId());
+        examPrintPlan.setSchoolId(sysUser.getSchoolId());
+        examPrintPlan.setExamId(examTask.getExamId());
+        examPrintPlan.setOrgId(sysUser.getOrgId());
+        examPrintPlan.setName(examTask.getCourseName() + examTask.getPaperNumber());
+        examPrintPlan.setExamStartTime(System.currentTimeMillis());
+        examPrintPlan.setExamEndTime(System.currentTimeMillis());
+        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(basicExam.getId());
+        List<String> stringList = JSONObject.parseArray(basicPrintConfig.getPrintContent(), String.class);
+        if (!stringList.contains("PAPER")) {
+            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
+            long count = paperInfoVoList.stream().filter(m -> Objects.isNull(m.getAttachmentId())).count();
+            if (count == 0) {
+                stringList.add("PAPER");
+            }
+        }
+        examPrintPlan.setPrintContent(String.join(",", stringList));
+        examPrintPlan.setBackupMethod(BackupMethodEnum.valueOf(basicPrintConfig.getBackupMethod()));
+        examPrintPlan.setBackupCount(basicPrintConfig.getBackupCount());
+        examPrintPlan.setDrawRule(basicPrintConfig.getDrawRule());
+        examPrintPlan.setVariableContent(basicPrintConfig.getVariableContent());
+        examPrintPlan.setOrdinaryContent(basicPrintConfig.getOrdinaryContent());
+        examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+        examPrintPlanService.save(examPrintPlan);
+
+        List<Map<String, Object>> examDetailKeyList = basicExamStudentList.stream().flatMap(e -> {
+            Long schoolIdId = e.getSchoolId();
+            Map<String, Object> map = new HashMap<>();
+            map.put("schoolId", schoolIdId);
+            map.put("examPlace", e.getExamPlace());
+            map.put("examRoom", e.getExamRoom());
+            map.put("examStartTime", e.getExamStartTime());
+            map.put("examEndTime", e.getExamEndTime());
+            return Stream.of(map);
+        }).distinct().collect(Collectors.toList());
+
+        List<ExamDetail> examDetailList = new ArrayList<>();
+        for (Map<String, Object> map : examDetailKeyList) {
+            Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
+            String examPlace = String.valueOf(map.get("examPlace"));
+            String examRoom = String.valueOf(map.get("examRoom"));
+            Long examStartTime = Long.valueOf(String.valueOf(map.get("examStartTime")));
+            Long examEndTime = Long.valueOf(String.valueOf(map.get("examEndTime")));
+
+            List<BasicExamStudent> examDetailStudentList = basicExamStudentList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
+                            e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
+                    .collect(Collectors.toList());
+
+            ExamDetail examDetail = new ExamDetail();
+            examDetail.setId(SystemConstant.getDbUuid());
+            examDetail.setPackageCode("1" + redisCounterUtil.getCounter(schoolId, 6, "packageCode"));
+            examDetail.setSchoolId(schoolId);
+            examDetail.setOrgId(sysUser.getOrgId());
+            examDetail.setPrintPlanId(examPrintPlan.getId());
+            examDetail.setPrintPlanName(examPrintPlan.getName());
+            examDetail.setExamId(examPrintPlan.getExamId());
+            examDetail.setExamPlace(examPlace);
+            examDetail.setExamRoom(examRoom);
+            examDetail.setStatus(ExamDetailStatusEnum.NEW);
+            examDetail.setTotalSubjects(examDetailStudentList.size());
+            examDetail.setExamStartTime(examStartTime);
+            examDetail.setExamEndTime(examEndTime);
+            examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
+            examDetail.setNormal(true);
+            examDetail.setCreateId(sysUser.getId());
+            examDetail.setBackupCount(examPrintPlan.getBackupCount());
+            examDetailService.save(examDetail);
+
+            //组装exam_detail_course数据
+            List<Map<String, Object>> examDetailCourseKeyList = examDetailStudentList.stream().flatMap(e -> {
+                Map<String, Object> examDetailCourseMap = new HashMap<>();
+                examDetailCourseMap.put("courseCode", e.getCourseCode());
+                examDetailCourseMap.put("paperNumber", e.getPaperNumber());
+                return Stream.of(examDetailCourseMap);
+            }).distinct().collect(Collectors.toList());
+
+
+            for (Map<String, Object> examDetailCourseMap : examDetailCourseKeyList) {
+                String courseCode = String.valueOf(examDetailCourseMap.get("courseCode"));
+                String paperNumber = String.valueOf(examDetailCourseMap.get("paperNumber"));
+
+                // 获取该科目下的考生人数
+                List<BasicExamStudent> examDetailCourseStudentList = examDetailStudentList.stream().filter(e -> e.getCourseCode().equals(courseCode) &&
+                        e.getPaperNumber().equals(paperNumber)).collect(Collectors.toList());
+
+                ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+                examDetailCourse.setId(SystemConstant.getDbUuid());
+                examDetailCourse.setSchoolId(schoolId);
+                examDetailCourse.setExamDetailId(examDetail.getId());
+                examDetailCourse.setCourseCode(courseCode);
+                examDetailCourse.setCourseName(examTask.getCourseName());
+                examDetailCourse.setPaperNumber(paperNumber);
+                examDetailCourse.setCoursePaperId(courseCode.concat(examTask.getSequence()));
+                examDetailCourse.setTotalSubjects(examDetailCourseStudentList.size());
+                examDetailCourse.setCreateId(sysUser.getId());
+                Set<Long> teachClazzIds = examDetailCourseStudentList.stream().filter(m -> m.getClazzId() != null).map(BasicExamStudent::getClazzId).collect(Collectors.toSet());
+                List<BasicTeachClazz> basicTeachClazzes = basicTeachClazzService.listByIds(teachClazzIds);
+                if (CollectionUtils.isNotEmpty(basicTeachClazzes)) {
+                    examDetailCourse.setClazzName(basicTeachClazzes.stream().map(BasicTeachClazz::getClazzName).collect(Collectors.joining(",")));
+                }
+                examDetailCourseService.save(examDetailCourse);
+
+                //组装exam_student数据
+                List<ExamStudent> examStudentList = new ArrayList<>();
+                AtomicInteger atomicInteger = new AtomicInteger(1);
+                for (BasicExamStudent basicExamStudent : examDetailCourseStudentList) {
+                    ExamStudent examStudent = new ExamStudent();
+                    examStudent.setId(SystemConstant.getDbUuid());
+                    examStudent.setSchoolId(schoolId);
+                    examStudent.setOrgId(sysUser.getOrgId());
+                    examStudent.setExamId(examTask.getExamId());
+                    examStudent.setExamDetailCourseId(examDetailCourse.getId());
+                    examStudent.setPaperNumber(paperNumber);
+                    examStudent.setCoursePaperId(examDetailCourse.getCoursePaperId());
+                    examStudent.setStudentCode(basicExamStudent.getStudentCode());
+                    examStudent.setStudentName(basicExamStudent.getStudentName());
+                    examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
+                    examStudent.setCollegeName(basicExamStudent.getCollege());
+                    examStudent.setMajorName(basicExamStudent.getMajor());
+                    examStudent.setTeacherId(basicExamStudent.getTeacherId());
+                    BasicTeachClazz basicTeachClazz = basicTeachClazzService.getById(basicExamStudent.getClazzId());
+                    examStudent.setTeachClazzId(basicExamStudent.getClazzId());
+                    examStudent.setTeachClazzName(basicTeachClazz != null ? basicTeachClazz.getClazzName() : null);
+                    examStudent.setCreateId(sysUser.getId());
+                    examStudentList.add(examStudent);
+                }
+                examStudentService.saveBatch(examStudentList);
+                examDetailList.add(examDetail);
+            }
+        }
+        return examDetailList;
+    }
+
     private ExamTaskPaperData saveTikuPaperData(Long examId, Long paperId, String uuid, File zipFile) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         String zipDestPath = null;

+ 17 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -1321,7 +1321,21 @@ public class PrintCommonServiceImpl implements PrintCommonService {
                         // 更新考场状态为初始新建状态
                         examDetailService.updateStatusById(examDetail.getId(), ExamDetailStatusEnum.NEW);
 
-                        //所有考场都撤回,印刷任务状态改为就绪
+                        // 所有考场都撤回,印刷任务状态改为就绪
+                        examPrintPlanService.updateStatusById(examDetail.getPrintPlanId(), PrintPlanStatusEnum.READY);
+                        TbTaskDetailResult tbTaskDetailResult = examDetailCourseService.getByExamDetailId(examDetail.getId());
+                        tbTaskPdfService.saveTask(tbTaskDetailResult, TaskTypeEnum.CREATE_PDF, examDetail.getPrintPlanId(), user, examDetail.getId());
+                    }
+                }
+            } else {
+                if (ExamModelEnum.MODEL1.equals(basicExam.getExamModel()) || ExamModelEnum.MODEL4.equals(basicExam.getExamModel())) {
+                    // 自动关联考生表中数据,并生成考场信息
+                    List<ExamDetail> examDetailList1 = examTaskService.matchBasicExamStudent(basicExam, examTask, examTaskDetail, user);
+                    for (ExamDetail examDetail : examDetailList1) {
+                        // 更新考场状态为初始新建状态
+                        examDetailService.updateStatusById(examDetail.getId(), ExamDetailStatusEnum.NEW);
+
+                        // 所有考场都撤回,印刷任务状态改为就绪
                         examPrintPlanService.updateStatusById(examDetail.getPrintPlanId(), PrintPlanStatusEnum.READY);
                         TbTaskDetailResult tbTaskDetailResult = examDetailCourseService.getByExamDetailId(examDetail.getId());
                         tbTaskPdfService.saveTask(tbTaskDetailResult, TaskTypeEnum.CREATE_PDF, examDetail.getPrintPlanId(), user, examDetail.getId());
@@ -1379,7 +1393,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, Long examId, String semesterId, ExamTask examTask, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, Long cardRuleId, SysUser sysUser) {
+    public List<ExamStudent> createBatchStudentByStudentList(Long examId, ExamTask examTask, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, SysUser sysUser) {
         AtomicInteger atomicInteger = new AtomicInteger(1);
 
         List<ExamStudent> examStudentList = new ArrayList<>();
@@ -1390,7 +1404,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
                 throw ExceptionResultEnum.ERROR.exception("ID[" + studentId + "]的考生不存在");
             }
             ExamStudent examStudent = new ExamStudent();
-            examStudent.setSchoolId(schoolId);
+            examStudent.setSchoolId(sysUser.getSchoolId());
             examStudent.setId(SystemConstant.getDbUuid());
             examStudent.setOrgId(sysUser.getOrgId());
             examStudent.setExamDetailCourseId(examDetailCourseId);

+ 0 - 15
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -105,21 +105,6 @@
                 AND a.course_code = #{courseCode}
                 AND a.paper_number = #{paperNumber}
     </select>
-    <select id="listByAndCourseCodeAndPaperNumber" resultMap="BaseResultMap">
-        SELECT
-            a.*
-        FROM
-            exam_detail_course a
-                LEFT JOIN
-            exam_detail b ON a.exam_detail_id = b.id
-                LEFT JOIN
-            exam_print_plan c ON b.print_plan_id = c.id
-        WHERE
-            a.school_id = #{schoolId}
-                AND c.exam_id = #{examId}
-                AND a.course_code = #{courseCode}
-                AND a.paper_number = #{paperNumber}
-    </select>
     <select id="listExamDetailByExamIdAndPaperNumber"
             resultMap="BaseResultMap">
         SELECT

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

@@ -721,4 +721,18 @@
                           ed.print_plan_id = epp.id
                         AND epp.category = 'MAKEUP')
     </select>
+    <select id="listByExamIdAndCourseCodeAndPaperNumber"
+            resultType="com.qmth.distributed.print.business.entity.ExamDetail">
+        SELECT
+            b.*
+        FROM
+            exam_detail_course a
+                JOIN
+            exam_detail b ON a.exam_detail_id = b.id
+        WHERE
+            a.school_id = #{schoolId}
+          AND b.exam_id = #{examId}
+          AND a.course_code = #{courseCode}
+          AND a.paper_number = #{paperNumber}
+    </select>
 </mapper>

+ 0 - 13
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -1217,19 +1217,6 @@
               </if>
           </where>
     </select>
-    <select id="getExamTaskByCourseCodeAndCardId"
-            resultMap="BaseResultMap">
-        SELECT
-            *
-        FROM
-            exam_task et
-                LEFT JOIN
-            exam_task_detail etd ON et.id = etd.exam_task_id
-        WHERE
-            et.school_id = #{schoolId}
-          AND et.course_code = #{courseCode}
-          and FIND_IN_SET(#{cardId}, REPLACE(REPLACE(substring_index(substring_index(CONVERT((etd.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"',''))
-    </select>
     <select id="listMakeupExamTask"
             resultType="com.qmth.distributed.print.business.bean.dto.MakeupExamTaskDto">
         SELECT

+ 3 - 1
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -682,5 +682,7 @@ ALTER TABLE `basic_school` ADD COLUMN `has_paper_number` TINYINT(1) NULL DEFAULT
 -- 2024/03/25
 UPDATE `sys_privilege` SET `enable` = '0', `front_display` = '0' WHERE (`id` = '1131');
 
--- 2024/0326
+-- 2024/03/26
 ALTER TABLE `mark_subjective_score` CHANGE COLUMN `sub_number` `sub_number` INT(11) NOT NULL COMMENT '小题号' ;
+
+-- 2024/03/27

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

@@ -282,10 +282,10 @@ public class MarkServiceImpl implements MarkService {
             }
             if (markTask.getStatus() == MarkTaskStatus.MARKED) {
                 validCount++;
-                // 有效分数里,管理员打分数量(主观题检查)
-                if (markTask.getHeaderScore() != null) {
-                    headerFinishCount++;
-                }
+            }
+            // 管理员打分数量(主观题检查,仲裁)
+            if ((markTask.getStatus() == MarkTaskStatus.MARKED || markTask.getStatus() == MarkTaskStatus.ARBITRATED) && markTask.getHeaderScore() != null) {
+                headerFinishCount++;
             }
             double score = markTask.getMarkerScore() != null && markTask.getMarkerScore() != UN_SELECTIVE_SCORE
                     ? markTask.getMarkerScore()

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

@@ -1524,7 +1524,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         BasicCourse basicCourse = basicCourseService.getByCode(basicExamStudent.getCourseCode());
         BasicTeachClazz basicTeachClazz = this.baseMapper.getBasicTeachClazzById(basicExamStudent.getClazzId());
         if (markStudent == null) {
-            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz.getClazzName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), basicExamStudent.getCreateId());
+            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz.getClazzName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
             if (markStudent.getSecretNumber() == null) {
                 markStudent.randomSecretNumber();
                 while (secretNumberSet.contains(markStudent.getSecretNumber())