Browse Source

审核考试对象

caozixuan 3 năm trước cách đây
mục cha
commit
c4056d08f4

+ 80 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamObject/ExamObjectDto.java

@@ -0,0 +1,80 @@
+package com.qmth.distributed.print.business.bean.dto.ExamObject;
+
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ExamRoomInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: CaoZixuan
+ * @Date:
+ */
+public class ExamObjectDto {
+
+    @ApiModelProperty(value = "考试开始时间")
+    private Long examStartTime;
+
+    @ApiModelProperty(value = "考试结束时间")
+    private Long examEndTime;
+
+    @ApiModelProperty(value = "总印量")
+    private Integer printTotalCount;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷名称")
+    private String paperName;
+
+    @ApiModelProperty(value = "考场信息集合")
+    private List<ExamRoomInfo> examRoomInfoList;
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public Integer getPrintTotalCount() {
+        return printTotalCount;
+    }
+
+    public void setPrintTotalCount(Integer printTotalCount) {
+        this.printTotalCount = printTotalCount;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getPaperName() {
+        return paperName;
+    }
+
+    public void setPaperName(String paperName) {
+        this.paperName = paperName;
+    }
+
+    public List<ExamRoomInfo> getExamRoomInfoList() {
+        return examRoomInfoList;
+    }
+
+    public void setExamRoomInfoList(List<ExamRoomInfo> examRoomInfoList) {
+        this.examRoomInfoList = examRoomInfoList;
+    }
+}

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

@@ -8,6 +8,7 @@ import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ExamPackageDeta
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import org.apache.ibatis.annotations.Param;
@@ -132,8 +133,10 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
 
     /**
      * 根据试卷编号查询考场详细数据集(印刷计划状态为‘PRINTING’、‘PRINTING_FINISH‘的)
-     * @param paperNumber 试卷编号
+     *
+     * @param paperNumber             试卷编号
+     * @param printPlanStatusEnumList 印刷计划状态集合
      * @return 数据集
      */
-    List<ExamPackageDetail> findExamPackageDetailByPaperNumber(@Param("paperNumber") String paperNumber);
+    List<ExamPackageDetail> findExamPackageDetailByPaperNumber(@Param("paperNumber") String paperNumber, @Param("printPlanStatusEnumList") List<PrintPlanStatusEnum> printPlanStatusEnumList);
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ExamTaskApprovalFormDto;
+import com.qmth.distributed.print.business.bean.dto.ExamObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
@@ -20,7 +21,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.List;
 import java.util.Map;
 
@@ -223,4 +223,11 @@ public interface ExamTaskService extends IService<ExamTask> {
 
 
     void findExamTaskApprovalPdf(HttpServletResponse response,Long examTaskId, String htmlContext) throws Exception;
+
+    /**
+     * 根据试卷编号查找考试对象
+     * @param paperNumber 试卷编号
+     * @return 考试对象
+     */
+    ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber);
 }

+ 99 - 61
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.qmth.distributed.print.business.bean.dto.ApprovalForm.*;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.ExamObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.params.ExamDetailList;
 import com.qmth.distributed.print.business.bean.params.ExamDetailParams;
 import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
@@ -156,6 +157,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     FileStoreUtil fileStoreUtil;
 
+    @Resource
+    ExamTaskService examTaskService;
+
     @Override
     public List<ExamTask> listByCourseCode(Long schoolId, String code) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
@@ -1687,68 +1691,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             throw ExceptionResultEnum.ERROR.exception("找不到教研室");
         }
         String teachingRoomName = teachingRoom.getName();
-        Long examStartTime = null;
-        Long examEndTime = null;
         // 流程id
         Long flowId = examTask.getFlowId();
 
         // 2.ExamRoomInfo 部分
-        List<ExamRoomInfo> examRoomInfoList = new ArrayList<>();
-        List<ExamPackageDetail> examPackageDetailDatasource = this.baseMapper.findExamPackageDetailByPaperNumber(paperNumber);
-        if (examPackageDetailDatasource.size() > 0) {
-            Set<Long> examDetailIdSet = examPackageDetailDatasource.stream().map(ExamPackageDetail::getExamDetailId).collect(Collectors.toSet());
-            for (Long examDetailId : examDetailIdSet) {
-                // 一个考场下
-                // 班级
-                String classNames = "";
-                int studentCount = 0;
-                String printCount = "";
-
-                List<ExamPackageDetail> examPackageDetailCell = examPackageDetailDatasource.stream()
-                        .filter(e -> examDetailId.equals(e.getExamDetailId()))
-                        .collect(Collectors.toList());
-
-                List<BackupMethodEnum> backupMethodEnums = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupMethod).distinct().collect(Collectors.toList());
-                if (backupMethodEnums.size() != 1 && backupMethodEnums.get(0) != BackupMethodEnum.ROOM) {
-                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份方式必须按考场");
-                }
-                List<Integer> backupCountList = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupCount).distinct().collect(Collectors.toList());
-                if (backupCountList.size() != 1) {
-                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份数量异常");
-                }
-                // 试卷该考场备份数量
-                Integer backupCount = backupCountList.get(0);
-                // 班级主键','隔开
-                String clazzIds = "";
-                final String separator = ",";
-                for (ExamPackageDetail examPackageDetail : examPackageDetailCell) {
-                    // 处理考试开始结束时间
-                    Long cellStartTime = examPackageDetail.getExamStartTime();
-                    Long cellEndTime = examPackageDetail.getExamEndTime();
-                    if (examStartTime == null || cellStartTime < examStartTime) {
-                        examStartTime = cellStartTime;
-                    }
-                    if (examEndTime == null || cellEndTime > examEndTime) {
-                        examEndTime = cellEndTime;
-                    }
-                    // 处理班级和数量
-                    Integer studentCellCount = examPackageDetail.getExamDetailCourseTotalSubjects();
-                    String clazzIdCell = examPackageDetail.getClazzIds();
-                    studentCount = studentCount + studentCellCount;
-                    clazzIds = clazzIds + clazzIdCell + separator;
-                }
-                clazzIds = clazzIds.substring(0, clazzIds.length() - separator.length());
-                classNames = basicClazzService.findClazzNamesByClazzIds(clazzIds, separator);
-                printCount = studentCount + " + " + backupCount;
-
-                // 组装examRoom
-                ExamRoomInfo examRoomInfo = new ExamRoomInfo();
-                examRoomInfo.setClazzNames(classNames);
-                examRoomInfo.setStudentCount(studentCount);
-                examRoomInfo.setPrintCount(printCount);
-                examRoomInfoList.add(examRoomInfo);
-            }
-        }
+        List<PrintPlanStatusEnum> printPlanStatusEnumList = new ArrayList<>();
+        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINTING);
+        printPlanStatusEnumList.add(PrintPlanStatusEnum.PRINT_FINISH);
+        List<ExamPackageDetail> examPackageDetailDatasource = this.baseMapper.findExamPackageDetailByPaperNumber(paperNumber,printPlanStatusEnumList);
+        ExamObjectDto examObjectDto = this.buildExamObjectDtoByPackageDatasource(examPackageDetailDatasource);
 
         // 3.ApprovalInfo部分
         List<ApprovalInfo> approvalInfoList = new ArrayList<>();
@@ -1786,12 +1737,12 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         basicInfo.setPaperName(paperName);
         basicInfo.setPaperNumber(paperNumber);
         basicInfo.setTeacherName(examTask.getTeacherName());
-        basicInfo.setExamStartTime(examStartTime);
-        basicInfo.setExamEndTime(examEndTime);
+        basicInfo.setExamStartTime(examObjectDto.getExamStartTime());
+        basicInfo.setExamEndTime(examObjectDto.getExamEndTime());
 
 
         examTaskApprovalFormDto.setBasicInfo(basicInfo);
-        examTaskApprovalFormDto.setExamRoomInfoList(examRoomInfoList);
+        examTaskApprovalFormDto.setExamRoomInfoList(examObjectDto.getExamRoomInfoList());
         examTaskApprovalFormDto.setApprovalInfoList(approvalInfoList);
 
         return examTaskApprovalFormDto;
@@ -1827,6 +1778,25 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         ConvertUtil.outputFile(response, inputStream, fileName + SystemConstant.PDF_PREFIX);
     }
 
+    @Transactional
+    @Override
+    public ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        List<PrintPlanStatusEnum> printPlanStatusEnumList = new ArrayList<>();
+        printPlanStatusEnumList.add(PrintPlanStatusEnum.NEW);
+        printPlanStatusEnumList.add(PrintPlanStatusEnum.READY);
+        List<ExamPackageDetail> examPackageDetailDatasource = this.baseMapper.findExamPackageDetailByPaperNumber(paperNumber,printPlanStatusEnumList);
+        ExamObjectDto examObjectDto = this.buildExamObjectDtoByPackageDatasource(examPackageDetailDatasource);
+
+        ExamTask examTask = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda().eq(ExamTask::getPaperNumber,paperNumber).eq(ExamTask::getSchoolId,schoolId));
+        if (Objects.isNull(examTask)){
+            throw ExceptionResultEnum.ERROR.exception("未找到命题任务");
+        }
+        examObjectDto.setPaperName(examTask.getPaperName());
+        examObjectDto.setPaperNumber(examTask.getPaperNumber());
+        return examObjectDto;
+    }
+
     /**
      * 简单校验提交参数
      *
@@ -1870,4 +1840,72 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
         }
     }
+
+    private ExamObjectDto buildExamObjectDtoByPackageDatasource(List<ExamPackageDetail> examPackageDetailDatasource){
+        Long examStartTime = null;
+        Long examEndTime = null;
+        int printTotalCount = 0;
+        List<ExamRoomInfo> examRoomInfoList = new ArrayList<>();
+        if (examPackageDetailDatasource.size() > 0){
+            Set<Long> examDetailIdSet = examPackageDetailDatasource.stream().map(ExamPackageDetail::getExamDetailId).collect(Collectors.toSet());
+            for (Long examDetailId : examDetailIdSet) {
+                // 一个考场下
+                // 班级
+                String classNames = "";
+                int studentCount = 0;
+                String printCount = "";
+
+                List<ExamPackageDetail> examPackageDetailCell = examPackageDetailDatasource.stream()
+                        .filter(e -> examDetailId.equals(e.getExamDetailId()))
+                        .collect(Collectors.toList());
+
+                List<BackupMethodEnum> backupMethodEnums = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupMethod).distinct().collect(Collectors.toList());
+                if (backupMethodEnums.size() != 1 && backupMethodEnums.get(0) != BackupMethodEnum.ROOM){
+                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份方式必须按考场");
+                }
+                List<Integer> backupCountList = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupCount).distinct().collect(Collectors.toList());
+                if (backupCountList.size() != 1){
+                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份数量异常");
+                }
+                // 试卷该考场备份数量
+                Integer backupCount = backupCountList.get(0);
+                // 班级主键','隔开
+                String clazzIds = "";
+                final String separator = ",";
+                for (ExamPackageDetail examPackageDetail : examPackageDetailCell) {
+                    // 处理考试开始结束时间
+                    Long cellStartTime = examPackageDetail.getExamStartTime();
+                    Long cellEndTime = examPackageDetail.getExamEndTime();
+                    if (examStartTime == null || cellStartTime < examStartTime){
+                        examStartTime = cellStartTime;
+                    }
+                    if (examEndTime == null || cellEndTime > examEndTime){
+                        examEndTime = cellEndTime;
+                    }
+                    // 处理班级和数量
+                    Integer studentCellCount = examPackageDetail.getExamDetailCourseTotalSubjects();
+                    String clazzIdCell = examPackageDetail.getClazzIds();
+                    studentCount = studentCount + studentCellCount;
+                    clazzIds = clazzIds + clazzIdCell + separator;
+                }
+                clazzIds = clazzIds.substring(0,clazzIds.length() - separator.length());
+                classNames = basicClazzService.findClazzNamesByClazzIds(clazzIds,separator);
+                printCount = studentCount + " + " + backupCount;
+                printTotalCount = printTotalCount + studentCount + backupCount;
+
+                // 组装examRoom
+                ExamRoomInfo examRoomInfo = new ExamRoomInfo();
+                examRoomInfo.setClazzNames(classNames);
+                examRoomInfo.setStudentCount(studentCount);
+                examRoomInfo.setPrintCount(printCount);
+                examRoomInfoList.add(examRoomInfo);
+            }
+        }
+        ExamObjectDto examObjectDto = new ExamObjectDto();
+        examObjectDto.setExamEndTime(examEndTime);
+        examObjectDto.setExamStartTime(examStartTime);
+        examObjectDto.setExamRoomInfoList(examRoomInfoList);
+        examObjectDto.setPrintTotalCount(printTotalCount);
+        return examObjectDto;
+    }
 }

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/export/AsyncExportTaskTemplete.java

@@ -82,6 +82,7 @@ public abstract class AsyncExportTaskTemplete {
                 jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
             }
             String path = (String) jsonObject.get(SystemConstant.PATH);
+            path = path.replaceAll("\\\\","/");
             String type = (String) jsonObject.get(SystemConstant.TYPE);
 
             out = new ByteArrayOutputStream();

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/importData/AsyncImportTaskTemplete.java

@@ -105,6 +105,7 @@ public abstract class AsyncImportTaskTemplete {
                 jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
             }
             String path = (String) jsonObject.get(SystemConstant.PATH);
+            path = path.replaceAll("\\\\","/");
             String type = (String) jsonObject.get(SystemConstant.TYPE);
 
             out = new ByteArrayOutputStream();

+ 6 - 1
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -1066,7 +1066,12 @@
             <if test="paperNumber != null and paperNumber != ''">
                 AND edc.paper_number = #{paperNumber}
             </if>
-            AND (epp.status = 'PRINTING' OR epp.status = 'PRINT_FINISH')
+            <if test="printPlanStatusEnumList != null and printPlanStatusEnumList != ''">
+                and epp.status in
+                <foreach item="item" collection="printPlanStatusEnumList" separator="," open="(" close=")" index="">
+                    #{item}
+                </foreach>
+            </if>
         </where>
     </select>
 </mapper>

+ 7 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -816,7 +816,6 @@ public class ExamTaskController {
     @ApiOperation(value = "命题任务-审批-获取试卷审批表pdf")
     @RequestMapping(value = "/find_approve_form_pdf", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-//    @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
     public void findApproveFormPdf(@Valid @RequestBody ApproveFormParams approveFormParams, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             throw ExceptionResultEnum.ERROR.exception(bindingResult.getAllErrors().get(0).getDefaultMessage());
@@ -825,5 +824,12 @@ public class ExamTaskController {
         examTaskService.findExamTaskApprovalPdf(response,approveFormParams.getExamTaskId(), approveFormParams.getHtmlContent());
     }
 
+    @ApiOperation(value = "命题任务-考试对象查询")
+    @RequestMapping(value = "/find_exam_object", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findExamObject(@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
+        return ResultUtil.ok((Object) examTaskService.findExamObjectDtoByPaperNumber(paperNumber));
+    }
+
 }
 

+ 8 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.bean.dto.ExamObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
@@ -141,4 +142,11 @@ public class ServiceTest {
         System.out.println(JSON.toJSONString(basicAttachment));
     }
 
+    @Test
+    public void findExamObject(){
+        String paperNumber = "cn004-0906-001";
+        ExamObjectDto examObjectDto = examTaskService.findExamObjectDtoByPaperNumber(paperNumber);
+        System.out.println(JSON.toJSONString(examObjectDto));
+    }
+
 }

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/OrgCenterDataDisposeService.java

@@ -23,6 +23,7 @@ public interface OrgCenterDataDisposeService {
      *     将新增或更新的学校设置为启用状态
      *     4.根据新增的或更新的学校id查询机构表中对应的学校级别机构。
      *     5.如果没有学校级别机构则新增学校级机构,并且将该学校下的所有学院级、印刷室级、没有parentId的机构的父机构指向该学校机构;如果有则更新
+     *     6.权限表未匹配到的学校权限新增
      * </p>
      * @throws IOException 异常
      */