Просмотр исходного кода

Merge remote-tracking branch 'origin/dev_v2.2.0' into dev_v2.2.0

wangliang 3 лет назад
Родитель
Сommit
7a5b4e501f
14 измененных файлов с 590 добавлено и 12 удалено
  1. 47 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskPrintDto.java
  2. 35 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/TaskPrintClassDto.java
  3. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/TaskPrintHouseDto.java
  4. 30 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamTaskApplyParam.java
  5. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java
  6. 5 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicStudentMapper.java
  7. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicStudentService.java
  8. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskPrintService.java
  9. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java
  10. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  11. 238 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  12. 18 0
      distributed-print-business/src/main/resources/mapper/BasicStudentMapper.xml
  13. 96 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  14. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicCourse.java

+ 47 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskPrintDto.java

@@ -0,0 +1,47 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.distributed.print.business.entity.ExamTaskPrint;
+
+/**
+ * @Date: 2021/3/31.
+ */
+public class ExamTaskPrintDto {
+
+    private Long printPlanId;
+    private Long examStartTime;
+    private Long examEndTime;
+    private IPage<ExamTaskPrint> iPage;
+
+    public Long getPrintPlanId() {
+        return printPlanId;
+    }
+
+    public void setPrintPlanId(Long printPlanId) {
+        this.printPlanId = printPlanId;
+    }
+
+    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 IPage<ExamTaskPrint> getiPage() {
+        return iPage;
+    }
+
+    public void setiPage(IPage<ExamTaskPrint> iPage) {
+        this.iPage = iPage;
+    }
+}

+ 35 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/TaskPrintClassDto.java

@@ -0,0 +1,35 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+/**
+ * @Date: 2021/3/29.
+ */
+public class TaskPrintClassDto {
+
+    private String classId;
+    private String className;
+    private Integer studentCount;
+
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+}

+ 44 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/TaskPrintHouseDto.java

@@ -0,0 +1,44 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+/**
+ * @Date: 2021/3/29.
+ */
+public class TaskPrintHouseDto {
+
+    private String houseId;
+    private String houseName;
+    private String campusId;
+    private String campusName;
+
+    public String getHouseId() {
+        return houseId;
+    }
+
+    public void setHouseId(String houseId) {
+        this.houseId = houseId;
+    }
+
+    public String getHouseName() {
+        return houseName;
+    }
+
+    public void setHouseName(String houseName) {
+        this.houseName = houseName;
+    }
+
+    public String getCampusId() {
+        return campusId;
+    }
+
+    public void setCampusId(String campusId) {
+        this.campusId = campusId;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+}

+ 30 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamTaskApplyParam.java

@@ -0,0 +1,30 @@
+package com.qmth.distributed.print.business.bean.params;
+
+
+import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+
+/**
+ * @Date: 2021/3/23.
+ */
+public class ExamTaskApplyParam {
+
+    private ExamTask examTask;
+    private ExamTaskDetail examTaskDetail;
+
+    public ExamTask getExamTask() {
+        return examTask;
+    }
+
+    public void setExamTask(ExamTask examTask) {
+        this.examTask = examTask;
+    }
+
+    public ExamTaskDetail getExamTaskDetail() {
+        return examTaskDetail;
+    }
+
+    public void setExamTaskDetail(ExamTaskDetail examTaskDetail) {
+        this.examTaskDetail = examTaskDetail;
+    }
+}

+ 44 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java

@@ -98,6 +98,18 @@ public class ExamTask extends BaseEntity implements Serializable {
     @TableField("batch_no")
     private String batchNo;
 
+    @TableField("draw_count")
+    private Integer drawCount;
+
+    @TableField("teach_org_id")
+    private Long teachOrgId;
+
+    @TableField("teacher_name")
+    private String teacherName;
+
+    @TableField("lecturer_name")
+    private String lecturerName;
+
     @TableField(exist = false)
     private List<Map<String, String>> users;
 
@@ -237,6 +249,38 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.batchNo = batchNo;
     }
 
+    public Integer getDrawCount() {
+        return drawCount;
+    }
+
+    public void setDrawCount(Integer drawCount) {
+        this.drawCount = drawCount;
+    }
+
+    public Long getTeachOrgId() {
+        return teachOrgId;
+    }
+
+    public void setTeachOrgId(Long teachOrgId) {
+        this.teachOrgId = teachOrgId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getLecturerName() {
+        return lecturerName;
+    }
+
+    public void setLecturerName(String lecturerName) {
+        this.lecturerName = lecturerName;
+    }
+
     public List<Map<String, String>> getUsers() {
         return users;
     }

+ 5 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicStudentMapper.java

@@ -1,15 +1,15 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
-import com.qmth.distributed.print.business.bean.result.PrintPlanResult;
 import com.qmth.distributed.print.business.entity.BasicStudent;
-import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import org.apache.ibatis.annotations.Param;
 
-import javax.swing.plaf.basic.BasicSplitPaneDivider;
+import java.util.List;
+
 import java.util.Set;
 
 /**
@@ -22,6 +22,8 @@ import java.util.Set;
  */
 public interface BasicStudentMapper extends BaseMapper<BasicStudent> {
 
+    List<TaskPrintClassDto> listByClass(@Param("schoolId") Long schoolId, @Param("stringList") List<String> stringList);
+
     IPage<BasicStudentResult> findBasicStudentPage(@Param("iPage") Page<BasicStudentResult> iPage,
                                                 @Param("queryParams") String queryParams,
                                                 @Param("schoolId") Long schoolId,

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicStudentService.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.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.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
 import com.qmth.distributed.print.business.entity.BasicStudent;
@@ -20,6 +21,8 @@ import java.util.List;
 public interface BasicStudentService extends IService<BasicStudent> {
 
     IPage<BasicStudent> listPage(Page<BasicStudent> page, String classId);
+
+    List<TaskPrintClassDto> listByClass(Long schoolId, List<String> stringList);
     /**
      * 学生基础信息分页查询
      * @param queryParams 查询参数(学生学号或姓名)

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

@@ -2,6 +2,9 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.dto.ExamTaskPrintDto;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintHouseDto;
 import com.qmth.distributed.print.business.bean.params.TaskPrintParams;
 import com.qmth.distributed.print.business.entity.BasicStudent;
 import com.qmth.distributed.print.business.entity.ExamTaskPrint;
@@ -22,4 +25,12 @@ public interface ExamTaskPrintService extends IService<ExamTaskPrint> {
     IPage<BasicStudent> listStudentByClass(String classId, Integer pageNumber, Integer pageSize);
 
     void remove(Long examTaskPrintId);
+
+    ExamTaskPrintDto listTaskPrint(Long printPlanId, String courseCode, Long paperNumber, Integer pageNumber, Integer pageSize);
+
+    void createTaskPrint(ExamTaskPrint examTaskPrint);
+
+    List<TaskPrintClassDto> listClass(String printPlanId, String courseCode, String paperNumber);
+
+    List<TaskPrintHouseDto> listHouse();
 }

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
 import com.qmth.distributed.print.business.entity.BasicStudent;
@@ -57,6 +58,12 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         queryWrapper.lambda().in(BasicStudent::getClazz, classIds).orderByAsc(BasicStudent::getClazz, BasicStudent::getStudentCode);
         return this.baseMapper.selectPage(page, queryWrapper);
     }
+
+    @Override
+    public List<TaskPrintClassDto> listByClass(Long schoolId, List<String> stringList) {
+        return this.baseMapper.listByClass(schoolId, stringList);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Long saveBasicStudent(BasicStudentParams basicStudentParams) {

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

@@ -767,12 +767,12 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Override
     public void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source) {
         ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
-        if (examPrintPlan.getId() == null || examPrintPlan.getId() <= 0) {
+        if (examPrintPlan == null) {
             throw ExceptionResultEnum.ERROR.exception("未找到印刷计划信息");
         }
         PrintPlanStatusEnum status = examPrintPlan.getStatus();
         if (PrintPlanStatusEnum.NEW != status && PrintPlanStatusEnum.READY != status) {
-            throw ExceptionResultEnum.ERROR.exception(status + "状态下的印刷计划不能删除考务数据");
+            throw ExceptionResultEnum.ERROR.exception(status.getDesc() + "状态下的印刷计划不能删除考务数据");
         }
         // 准备删除的考务-场次表id
         List<Long> examDetailIds = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId).eq(ExamDetail::getExamDataSource, source))

+ 238 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -1,24 +1,38 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.ExamTaskPrintDto;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
+import com.qmth.distributed.print.business.bean.dto.TaskPrintHouseDto;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.bean.params.TaskPrintParams;
-import com.qmth.distributed.print.business.entity.BasicStudent;
-import com.qmth.distributed.print.business.entity.ExamDetailCourse;
-import com.qmth.distributed.print.business.entity.ExamStudent;
-import com.qmth.distributed.print.business.entity.ExamTaskPrint;
+import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskPrintMapper;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
+import com.qmth.teachcloud.common.util.ConvertUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -39,6 +53,18 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
     @Autowired
     private ExamStudentService examStudentService;
 
+    @Autowired
+    private ExamPrintPlanService examPrintPlanService;
+
+    @Autowired
+    private BasicExamRuleService basicExamRuleService;
+
+    @Autowired
+    private BasicCourseService basicCourseService;
+
+    @Resource
+    ConvertUtil convertUtil;
+
     @Override
     public List<ExamTaskPrint> createTaskPrint(TaskPrintParams taskPrintParams) {
         Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolId();
@@ -93,4 +119,211 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
 
 
     }
+
+    @Override
+    public ExamTaskPrintDto listTaskPrint(Long printPlanId, String courseCode, Long paperNumber, Integer pageNumber, Integer pageSize) {
+        QueryWrapper<ExamTaskPrint> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTaskPrint::getPrintPlanId, printPlanId)
+                .eq(ExamTaskPrint::getCourseCode, courseCode)
+                .eq(ExamTaskPrint::getPaperNumber, paperNumber);
+        Page<ExamTaskPrint> page = new Page<>(pageNumber, pageSize);
+        IPage<ExamTaskPrint> examTaskPrintIPage = this.baseMapper.selectPage(page, queryWrapper);
+        ExamTaskPrintDto examTaskPrintDto = new ExamTaskPrintDto();
+        if (examTaskPrintIPage.getRecords().size() > 0) {
+            examTaskPrintDto.setiPage(examTaskPrintIPage);
+            List<Long> startTimes = examTaskPrintIPage.getRecords().stream().map(m -> m.getExamStartTime()).distinct().collect(Collectors.toList());
+            List<Long> endTimes = examTaskPrintIPage.getRecords().stream().map(m -> m.getExamEndTime()).distinct().collect(Collectors.toList());
+            if (startTimes.size() != 1 || endTimes.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("考试时间有误");
+            }
+            examTaskPrintDto.setExamStartTime(startTimes.get(0));
+            examTaskPrintDto.setExamEndTime(endTimes.get(0));
+        }
+        return examTaskPrintDto;
+    }
+
+    @Transactional
+    @Override
+    public void createTaskPrint(ExamTaskPrint examTaskPrint) {
+        Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolId();
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(examTaskPrint.getPrintPlanId());
+        if (examPrintPlan == null) {
+            throw ExceptionResultEnum.ERROR.exception("印刷计划不存在");
+        }
+        PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();
+        if (PrintPlanStatusEnum.NEW != printPlanStatus && PrintPlanStatusEnum.READY != printPlanStatus) {
+            throw ExceptionResultEnum.ERROR.exception(printPlanStatus.getDesc() + "状态下的印刷计划不允许生成考务数据");
+        }
+
+        BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId(schoolId);
+        if (Objects.isNull(basicExamRule)) {
+            throw ExceptionResultEnum.EXAM_RULE_IS_NULL.exception();
+        }
+
+        List<String> classIds = Arrays.asList(examTaskPrint.getClassId().split(","));
+        if (examTaskPrint.getId() == null) {
+            // 校验班级
+            QueryWrapper<ExamTaskPrint> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamTaskPrint::getPrintPlanId, examTaskPrint);
+            List<ExamTaskPrint> examTaskPrints = this.list(queryWrapper);
+            validateClass(examTaskPrints, classIds);
+
+            examTaskPrint.setSchoolId(schoolId);
+            examTaskPrint.setOrgId(sysUser.getOrgId());
+            examTaskPrint.setCreateId(sysUser.getId());
+            examTaskPrint.setCreateTime(System.currentTimeMillis());
+
+            // 卷袋号生成规则
+            SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
+            ExamDetail examDetail = new ExamDetail();
+            examDetail.setId(SystemConstant.getDbUuid());
+            examDetail.setPackageCode(createTempNumber(serialNumberParams));
+            examDetail.setSchoolId(schoolId);
+            examDetail.setPrintPlanId(examTaskPrint.getPrintPlanId());
+            examDetail.setPrintPlanName(examPrintPlan.getName());
+            examDetail.setExamPlace(examTaskPrint.getExamPlace());
+            examDetail.setExamRoom(examTaskPrint.getExamRoom());
+            examDetail.setStatus(ExamDetailStatusEnum.NEW);
+            examDetail.setTotalSubjects(examTaskPrint.getStudentCount());
+            examDetail.setExamStartTime(examTaskPrint.getExamStartTime());
+            examDetail.setExamEndTime(examTaskPrint.getExamEndTime());
+            examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
+            examDetail.setCreateId(examTaskPrint.getCreateId());
+            examDetail.setCreateTime(System.currentTimeMillis());
+            examDetailService.save(examDetail);
+
+            examTaskPrint.setExamDetailId(examDetail.getId());
+            this.save(examTaskPrint);
+
+            ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+            examDetailCourse.setId(SystemConstant.getDbUuid());
+            examDetailCourse.setSchoolId(schoolId);
+            examDetailCourse.setExamDetailId(examDetail.getId());
+            examDetailCourse.setCourseCode(examTaskPrint.getCourseCode());
+            examDetailCourse.setCourseName(examTaskPrint.getCourseName());
+            examDetailCourse.setPaperNumber(examTaskPrint.getPaperNumber());
+            examDetailCourse.setTotalSubjects(examTaskPrint.getStudentCount());
+            examDetailCourse.setCreateId(examTaskPrint.getCreateId());
+            examDetailCourseService.save(examDetailCourse);
+
+            saveBatchStudent(examTaskPrint, classIds, examDetailCourse.getId());
+
+            // 更改印刷计划状态
+            examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+            examPrintPlanService.updateById(examPrintPlan);
+
+        } else {
+            // 校验班级
+            QueryWrapper<ExamTaskPrint> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamTaskPrint::getPrintPlanId, examTaskPrint).ne(ExamTaskPrint::getId, examTaskPrint.getId());
+            List<ExamTaskPrint> examTaskPrints = this.list(queryWrapper);
+            // 校验班级
+            validateClass(examTaskPrints, classIds);
+
+            ExamTaskPrint taskPrint = this.getById(examTaskPrint.getId());
+            taskPrint.setExamPlace(examTaskPrint.getExamPlace());
+            taskPrint.setExamRoom(examTaskPrint.getExamRoom());
+            taskPrint.setInvigilatorTeacher(examTaskPrint.getInvigilatorTeacher());
+            taskPrint.setClassId(examTaskPrint.getClassId());
+            taskPrint.setClassName(examTaskPrint.getClassName());
+            taskPrint.setStudentCount(examTaskPrint.getStudentCount());
+            taskPrint.setPrintHouseId(examTaskPrint.getPrintHouseId());
+            taskPrint.setUpdateId(sysUser.getId());
+            taskPrint.setUpdateTime(System.currentTimeMillis());
+            this.updateById(taskPrint);
+
+            ExamDetail examDetail = examDetailService.getById(taskPrint.getExamDetailId());
+            examDetail.setExamPlace(examTaskPrint.getExamPlace());
+            examDetail.setExamRoom(examTaskPrint.getExamRoom());
+            examDetail.setTotalSubjects(examTaskPrint.getStudentCount());
+            examDetail.setUpdateId(sysUser.getId());
+            examDetail.setUpdateTime(System.currentTimeMillis());
+            examDetailService.updateById(examDetail);
+
+            QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
+            examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getExamDetailId, taskPrint.getExamDetailId());
+            ExamDetailCourse examDetailCourse = examDetailCourseService.getOne(examDetailCourseQueryWrapper);
+
+            UpdateWrapper<ExamStudent> examStudentUpdateWrapper = new UpdateWrapper<>();
+            examStudentUpdateWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
+            examStudentService.remove(examStudentUpdateWrapper);
+
+            saveBatchStudent(taskPrint, classIds, examDetailCourse.getId());
+        }
+    }
+
+    @Override
+    public List<TaskPrintClassDto> listClass(String printPlanId, String courseCode, String paperNumber) {
+        Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolId();
+        QueryWrapper<BasicCourse> courseQueryWrapper = new QueryWrapper<>();
+        courseQueryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode);
+        List<BasicCourse> courseList = basicCourseService.list(courseQueryWrapper);
+        List<String> stringList = courseList.stream().map(m -> m.getClazz()).distinct().collect(Collectors.toList());
+
+        if(!CollectionUtils.isEmpty(stringList)) {
+            QueryWrapper<ExamTaskPrint> examTaskPrintQueryWrapper = new QueryWrapper<>();
+            examTaskPrintQueryWrapper.lambda().eq(ExamTaskPrint::getPrintPlanId, printPlanId).eq(ExamTaskPrint::getCourseCode, courseCode).eq(ExamTaskPrint::getPaperNumber, paperNumber);
+            List<ExamTaskPrint> examTaskPrints = this.list(examTaskPrintQueryWrapper);
+            for (ExamTaskPrint examTaskPrint : examTaskPrints) {
+                List<String> classIds = Arrays.asList(examTaskPrint.getClassId().split(","));
+                for (String classId : classIds) {
+                    if(stringList.contains(classId)){
+                        stringList.remove(classId);
+                    }
+                }
+            }
+
+            List<TaskPrintClassDto> taskPrintClassDtos = basicStudentService.listByClass(schoolId, stringList);
+            return taskPrintClassDtos;
+        }
+        return null;
+    }
+
+    @Override
+    public List<TaskPrintHouseDto> listHouse() {
+        return null;
+    }
+
+    private void saveBatchStudent(ExamTaskPrint examTaskPrint, List<String> classIds, Long examDetailCourseId) {
+        QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, examTaskPrint.getSchoolId()).in(BasicStudent::getClazz, classIds);
+        List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
+        AtomicInteger atomicInteger = new AtomicInteger(1);
+        List<ExamStudent> examStudents = new ArrayList<>();
+        SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + examTaskPrint.getSchoolId(), DateUtil.format(new Date(), "yyyyMM"), 6);
+        for (BasicStudent basicStudent : basicStudents) {
+            ExamStudent examStudent = new ExamStudent();
+            examStudent.setId(SystemConstant.getDbUuid());
+            examStudent.setSchoolId(examTaskPrint.getSchoolId());
+            examStudent.setExamDetailCourseId(examDetailCourseId);
+            examStudent.setStudentName(basicStudent.getStudentName());
+            examStudent.setStudentCode(basicStudent.getStudentCode());
+            // 准考证号(年月+000001)
+            examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
+            examStudent.setExtendFields(JSON.toJSONString(examTaskPrint.getExtendFields()));
+            examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
+            examStudent.setCreateId(examTaskPrint.getCreateId());
+            examStudents.add(examStudent);
+        }
+        examStudentService.saveBatch(examStudents);
+    }
+
+    private void validateClass(List<ExamTaskPrint> examTaskPrints, List<String> classIds) {
+        if (!CollectionUtils.isEmpty(examTaskPrints)) {
+            for (ExamTaskPrint taskPrint : examTaskPrints) {
+                List<String> hisClassIds = Arrays.asList(taskPrint.getClassId().split(","));
+                for (String classId : classIds) {
+                    if (hisClassIds.contains(classId)) {
+                        throw ExceptionResultEnum.ERROR.exception(classId + "已分配考场");
+                    }
+                }
+            }
+        }
+    }
+
+    public String createTempNumber(SerialNumberParams serialNumberParams) {
+        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
+    }
 }

+ 18 - 0
distributed-print-business/src/main/resources/mapper/BasicStudentMapper.xml

@@ -2,6 +2,24 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.distributed.print.business.mapper.BasicStudentMapper">
 
+    <select id="listByClass" resultType="com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto">
+        SELECT
+            s.clazz classId,
+            s.clazz className,
+            COUNT(1) studentCount
+        FROM
+            basic_student s
+        WHERE
+            s.school_id = #{schoolId}
+            <if test="stringList != null">
+                and s.class in
+                <foreach collection="stringList" item="cla" open="(" close=")" separator=",">
+                    #{cla}
+                </foreach>
+            </if>
+        GROUP BY s.clazz
+    </select>
+
     <select id="findBasicStudentPage"
             resultType="com.qmth.distributed.print.business.bean.result.BasicStudentResult">
         SELECT

+ 96 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -6,10 +6,13 @@ import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
 import com.qmth.distributed.print.business.bean.params.TaskPrintParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.*;
+import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.distributed.print.business.enums.ReviewStatusEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncExamTaskPrintService;
 import com.qmth.distributed.print.business.templete.execute.AsyncTaskReviewSampleExportService;
@@ -549,12 +552,61 @@ public class ExamTaskController {
         return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
     }
 
+    /**
+     * 暂存/提交
+     *
+     * @param examTaskApplyParam
+     * @return
+     */
+    @ApiOperation(value = "暂存/提交")
+    @RequestMapping(value = "/apply_save", method = RequestMethod.POST)
+    public Result taskApplySave(@RequestBody ExamTaskApplyParam examTaskApplyParam) throws IOException {
+
+        ExamTask task = examTaskService.saveExamTaskNew(examTaskApplyParam.getExamTask());
+        //发送短信
+        if (task.getId() != null) {
+            basicMessageService.sendNoticeTaskCreate(task);
+        }
+
+        ExamTaskDetail examTaskDetail = examTaskApplyParam.getExamTaskDetail();
+        boolean isSuccess = examTaskService.saveExamTaskDetail(examTaskDetail);
+        ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
+        if (examTaskDetail.getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && !examTask.getReview()) {
+            // 校验是否可以提交打印状态
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+        }
+
+        return ResultUtil.ok(isSuccess);
+    }
+
+    /**
+     * 查看印刷任务发布
+     *
+     * @param printPlanId
+     * @param courseCode
+     * @param paperNumber
+     * @param pageNumber
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "卷库查询-发布印刷任务-查看列表")
+    @RequestMapping(value = "/list_task_print", method = RequestMethod.POST)
+    public Result listTaskPrintStudent(@RequestParam(value = "printPlanId") Long printPlanId,
+                                       @RequestParam(value = "courseCode") String courseCode,
+                                       @RequestParam(value = "paperNumber") Long paperNumber,
+                                       @RequestParam Integer pageNumber,
+                                       @RequestParam Integer pageSize) {
+        ExamTaskPrintDto examTaskPrintDto = examTaskPrintService.listTaskPrint(printPlanId, courseCode, paperNumber, pageNumber, pageSize);
+        return ResultUtil.ok(examTaskPrintDto);
+    }
+
     /**
      * 发布印刷任务
+     *
      * @param taskPrintParams
      * @return
      */
-    @ApiOperation(value = "卷库查询-发布印刷任务")
+    /*@ApiOperation(value = "卷库查询-发布印刷任务")
     @RequestMapping(value = "/create_task_print", method = RequestMethod.POST)
     public Result createTaskPrint(@RequestBody TaskPrintParams taskPrintParams) throws Exception {
         List<ExamTaskPrint> list = examTaskPrintService.createTaskPrint(taskPrintParams);
@@ -563,10 +615,51 @@ public class ExamTaskController {
         asyncExamTaskPrintService.importTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
+    }*/
+
+    /**
+     * 查看考生
+     *
+     * @param printPlanId
+     * @return
+     */
+    @ApiOperation(value = "卷库查询-发布印刷任务-班级列表")
+    @RequestMapping(value = "/list_task_print_class", method = RequestMethod.POST)
+    public Result listTaskPrintClass(@RequestParam(value = "printPlanId") String printPlanId,
+                                       @RequestParam(value = "courseCode") String courseCode,
+                                       @RequestParam(value = "paperNumber") String paperNumber) {
+        List<TaskPrintClassDto> classDtos = examTaskPrintService.listClass(printPlanId, courseCode, paperNumber);
+        return ResultUtil.ok(classDtos);
+    }
+
+    /**
+     * 查看考生
+     *
+     * @return
+     */
+    @ApiOperation(value = "卷库查询-发布印刷任务-印刷室列表")
+    @RequestMapping(value = "/list_task_print_house", method = RequestMethod.POST)
+    public Result listTaskPrintHouse() {
+        List<TaskPrintHouseDto> houseDtos = examTaskPrintService.listHouse();
+        return ResultUtil.ok(houseDtos);
+    }
+
+    /**
+     * 发布印刷任务
+     *
+     * @param examTaskPrint
+     * @return
+     */
+    @ApiOperation(value = "卷库查询-发布印刷任务")
+    @RequestMapping(value = "/save_task_print", method = RequestMethod.POST)
+    public Result createTaskPrint(@RequestBody ExamTaskPrint examTaskPrint) {
+        examTaskPrintService.createTaskPrint(examTaskPrint);
+        return ResultUtil.ok(true, "");
     }
 
     /**
      * 查看考生
+     *
      * @param classId
      * @return
      */
@@ -581,6 +674,7 @@ public class ExamTaskController {
 
     /**
      * 查看考生
+     *
      * @param examTaskPrintId
      * @return
      */

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicCourse.java

@@ -46,6 +46,8 @@ public class BasicCourse extends BaseEntity implements Serializable {
      */
     private String name;
 
+    private String clazz;
+
     @ApiModelProperty(value = "是否可用")
     @TableField("enable")
     private Boolean enable;
@@ -101,4 +103,12 @@ public class BasicCourse extends BaseEntity implements Serializable {
     public void setTeachingRoomId(Long teachingRoomId) {
         this.teachingRoomId = teachingRoomId;
     }
+
+    public String getClazz() {
+        return clazz;
+    }
+
+    public void setClazz(String clazz) {
+        this.clazz = clazz;
+    }
 }