Browse Source

命题任务

xiaof 4 years ago
parent
commit
f9683dac7f

+ 125 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskDetailDto.java

@@ -0,0 +1,125 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+/**
+ * @Date: 2021/3/31.
+ */
+public class ExamTaskDetailDto {
+
+    private String id;
+    private String paperNumber;
+    private String courseCode;
+    private String courseName;
+    private String specialty;
+    private String userId;
+    private String userName;
+    private String status;
+    private Boolean enable;
+    private String createId;
+    private Long createTime;
+    private String exposedPaperType;
+    private String unexposedPaperType;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getSpecialty() {
+        return specialty;
+    }
+
+    public void setSpecialty(String specialty) {
+        this.specialty = specialty;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getExposedPaperType() {
+        return exposedPaperType;
+    }
+
+    public void setExposedPaperType(String exposedPaperType) {
+        this.exposedPaperType = exposedPaperType;
+    }
+
+    public String getUnexposedPaperType() {
+        return unexposedPaperType;
+    }
+
+    public void setUnexposedPaperType(String unexposedPaperType) {
+        this.unexposedPaperType = unexposedPaperType;
+    }
+}

+ 16 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.base.BaseEntity;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.enums.ReviewStatusEnum;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -73,11 +74,15 @@ public class ExamTask extends BaseEntity implements Serializable {
      * NEW-新建任务,STAGE-暂存(命题中),SUBMIT-确认提交,CANCEL-撤回
      */
     private ExamStatusEnum status;
+    /**
+     * 0-禁用,1-启用
+     */
+    private Boolean review;
     /**
      * 审核状态:PASS-审核通过,NOT_PASS-审核不通过,默认为空-未审核
      */
     @TableField("review_status")
-    private String reviewStatus;
+    private ReviewStatusEnum reviewStatus;
     /**
      * 0-禁用,1-启用
      */
@@ -168,11 +173,19 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.status = status;
     }
 
-    public String getReviewStatus() {
+    public Boolean getReview() {
+        return review;
+    }
+
+    public void setReview(Boolean review) {
+        this.review = review;
+    }
+
+    public ReviewStatusEnum getReviewStatus() {
         return reviewStatus;
     }
 
-    public void setReviewStatus(String reviewStatus) {
+    public void setReviewStatus(ReviewStatusEnum reviewStatus) {
         this.reviewStatus = reviewStatus;
     }
 

+ 21 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java

@@ -1,7 +1,6 @@
 package com.qmth.distributed.print.business.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -81,6 +80,11 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     @TableField("unexposed_paper_type")
     private String unexposedPaperType;
 
+    private Boolean enable;
+
+    @TableField(exist = false)
+    private String operateType;
+
 
     public Long getExamTaskId() {
         return examTaskId;
@@ -153,4 +157,20 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     public void setUnexposedPaperType(String unexposedPaperType) {
         this.unexposedPaperType = unexposedPaperType;
     }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getOperateType() {
+        return operateType;
+    }
+
+    public void setOperateType(String operateType) {
+        this.operateType = operateType;
+    }
 }

+ 15 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskReviewLog.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.base.BaseEntity;
+import com.qmth.distributed.print.business.enums.ReviewStatusEnum;
 
 import java.io.Serializable;
 
@@ -32,7 +33,7 @@ public class ExamTaskReviewLog extends BaseEntity implements Serializable {
      * PASS-通过,NOT_PASS-不通过
      */
     @TableField("review_status")
-    private String reviewStatus;
+    private ReviewStatusEnum reviewStatus;
     /**
      * 审核意见
      */
@@ -45,6 +46,9 @@ public class ExamTaskReviewLog extends BaseEntity implements Serializable {
     @TableField("operate_time")
     private Long operateTime;
 
+    @TableField(exist = false)
+    private Long[] examTaskIds;
+
     public Long getExamTaskId() {
         return examTaskId;
     }
@@ -53,11 +57,11 @@ public class ExamTaskReviewLog extends BaseEntity implements Serializable {
         this.examTaskId = examTaskId;
     }
 
-    public String getReviewStatus() {
+    public ReviewStatusEnum getReviewStatus() {
         return reviewStatus;
     }
 
-    public void setReviewStatus(String reviewStatus) {
+    public void setReviewStatus(ReviewStatusEnum reviewStatus) {
         this.reviewStatus = reviewStatus;
     }
 
@@ -84,4 +88,12 @@ public class ExamTaskReviewLog extends BaseEntity implements Serializable {
     public void setOperateTime(Long operateTime) {
         this.operateTime = operateTime;
     }
+
+    public Long[] getExamTaskIds() {
+        return examTaskIds;
+    }
+
+    public void setExamTaskIds(Long[] examTaskIds) {
+        this.examTaskIds = examTaskIds;
+    }
 }

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

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.BlurryUserDto;
+import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDto;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -25,4 +27,10 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
     List<BlurryUserDto> listUser(@Param("schoolId") Long schoolId, @Param("param") String param);
 
     IPage<ExamTaskDto> listTaskApply(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("auditStatus") String auditStatus, @Param("reviewStatus") String reviewStatus, @Param("cardRuleId") Long cardRuleId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
+
+    IPage<ExamTaskDto> listTaskReviewUnaudited(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("cardRuleId") Long cardRuleId, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
+
+    IPage<ExamTaskDto> listTaskReviewAudited(Page<ExamTaskDto> page, @Param("schoolId") Long schoolId, @Param("reviewStatus") String reviewStatus, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userId") Long userId, @Param("cardRuleId") Long cardRuleId, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
+
+    IPage<ExamTaskDetailDto> listTaskPaper(Page<ExamTaskDetailDto> page, Long schoolId, String courseCode, String paperNumber, Long startTime, Long endTime);
 }

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

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 
 /**
@@ -13,4 +14,9 @@ import com.qmth.distributed.print.business.entity.ExamTaskDetail;
  */
 public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
 
+    boolean saveExamTaskDetail(ExamTaskDetail examTaskDetail);
+
+    boolean status(ExamTask examTask);
+
+    boolean enable(ExamTaskDetail examTaskDetail);
 }

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

@@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.ApiUser;
 import com.qmth.distributed.print.business.bean.dto.BlurryUserDto;
+import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskImportDto;
-import com.qmth.distributed.print.business.bean.query.BlurryParam;
-import com.qmth.distributed.print.business.bean.query.ExamTaskParam;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -42,4 +42,14 @@ public interface ExamTaskService extends IService<ExamTask> {
     boolean saveBatch(ExamTask task);
 
     IPage<ExamTaskDto> listTaskApply(Long schoolId, String auditStatus, String reviewStatus, Long cardRuleId, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
+
+    IPage<ExamTaskDto> listTaskReviewUnaudited(Long schoolId, String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
+
+    IPage<ExamTaskDto> listTaskReviewAudited(Long schoolId, String reviewStatus, String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
+
+    boolean taskReviewSave(ExamTaskReviewLog taskReviewLog);
+
+    boolean taskReviewSaveBatch(ExamTaskReviewLog taskReviewLog);
+
+    IPage<ExamTaskDetailDto> listTaskPaper(Long schoolId, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
 }

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

@@ -1,9 +1,17 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
 import com.qmth.distributed.print.business.service.ExamTaskDetailService;
+import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +25,53 @@ import org.springframework.stereotype.Service;
 @Service
 public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper, ExamTaskDetail> implements ExamTaskDetailService {
 
+    @Autowired
+    private ExamTaskService examTaskService;
+
+    @Override
+    public boolean saveExamTaskDetail(ExamTaskDetail examTaskDetail) {
+        if (examTaskDetail.getExamTaskId() == null) {
+            throw ExceptionResultEnum.ERROR.exception("命题任务ID不能为空");
+        }
+        if (StringUtils.isBlank(examTaskDetail.getOperateType())) {
+            throw ExceptionResultEnum.ERROR.exception("保存类型不能为空");
+        }
+        // 提交时,校验
+        if (ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
+            if (StringUtils.isBlank(examTaskDetail.getPaperType())) {
+                throw ExceptionResultEnum.ERROR.exception("试卷类型不能为空");
+            }
+            if (StringUtils.isBlank(examTaskDetail.getPaperAttachmentIds())) {
+                throw ExceptionResultEnum.ERROR.exception("试卷ID不能为空");
+            }
+            if (examTaskDetail.getCardId() == null) {
+                throw ExceptionResultEnum.ERROR.exception("题卡ID不能为空");
+            }
+            if (StringUtils.isBlank(examTaskDetail.getPaperConfirmAttachmentIds())) {
+                throw ExceptionResultEnum.ERROR.exception("入库审核ID不能为空");
+            }
+            QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
+            ExamTaskDetail detail = this.getOne(queryWrapper);
+            if (detail != null) {
+                examTaskDetail.setId(detail.getId());
+            }
+        }
+
+        return this.saveOrUpdate(examTaskDetail);
+    }
+
+    @Override
+    public boolean status(ExamTask examTask) {
+        UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamTask::getStatus, examTask.getStatus()).eq(ExamTask::getId, examTask.getId());
+        return this.examTaskService.update(updateWrapper);
+    }
+
+    @Override
+    public boolean enable(ExamTaskDetail examTaskDetail) {
+        UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamTaskDetail::getEnable, examTaskDetail.getEnable()).eq(ExamTaskDetail::getId, examTaskDetail.getId());
+        return this.update(updateWrapper);
+    }
 }

+ 67 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -7,19 +7,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.ApiUser;
 import com.qmth.distributed.print.business.bean.dto.BlurryUserDto;
+import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskImportDto;
-import com.qmth.distributed.print.business.bean.query.BlurryParam;
-import com.qmth.distributed.print.business.entity.ExamTask;
-import com.qmth.distributed.print.business.entity.ExamTaskTemp;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskMapper;
+import com.qmth.distributed.print.business.service.BasicExamRuleService;
+import com.qmth.distributed.print.business.service.ExamTaskReviewLogService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.service.ExamTaskTempService;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
@@ -40,6 +42,12 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Autowired
     private ExamTaskTempService examTaskTempService;
 
+    @Autowired
+    private BasicExamRuleService basicExamRuleService;
+
+    @Autowired
+    private ExamTaskReviewLogService examTaskReviewLogService;
+
     @Override
     public List<ExamTask> listByCourseCode(Long schoolId, String code) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
@@ -91,6 +99,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public boolean saveExamTask(ExamTask examTask) {
         // todo paperNumber生成问题, 必填字段校验
+        QueryWrapper<BasicExamRule> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicExamRule::getSchoolId, examTask.getSchoolId());
+        BasicExamRule basicExamRule = basicExamRuleService.getOne(queryWrapper);
+        if (basicExamRule == null) {
+            throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+        }
+        examTask.setReview(basicExamRule.getReview());
         return this.save(examTask);
     }
 
@@ -146,4 +161,53 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskApply(page, schoolId, auditStatus, reviewStatus, cardRuleId, courseCode, paperNumber, startTime, endTime);
         return examTaskDtoIPage;
     }
+
+    @Override
+    public IPage<ExamTaskDto> listTaskReviewUnaudited(Long schoolId, String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+        Page<ExamTaskDto> page = new Page<>(pageNumber, pageSize);
+        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewUnaudited(page, schoolId, courseCode, paperNumber, userId, cardRuleId, startTime, endTime);
+        return examTaskDtoIPage;
+    }
+
+    @Override
+    public IPage<ExamTaskDto> listTaskReviewAudited(Long schoolId, String reviewStatus, String courseCode, String paperNumber, Long userId, Long cardRuleId, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+        Page<ExamTaskDto> page = new Page<>(pageNumber, pageSize);
+        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewAudited(page, schoolId, reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime);
+        return examTaskDtoIPage;
+    }
+
+    @Transactional
+    @Override
+    public boolean taskReviewSave(ExamTaskReviewLog taskReviewLog) {
+        // 审核日志
+        examTaskReviewLogService.save(taskReviewLog);
+
+        // 更新命题任务状态
+        UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamTask::getReviewStatus, taskReviewLog.getReviewStatus()).eq(ExamTask::getId, taskReviewLog.getExamTaskId());
+        return this.update(updateWrapper);
+    }
+
+    @Transactional
+    @Override
+    public boolean taskReviewSaveBatch(ExamTaskReviewLog taskReviewLog) {
+        for (Long examTaskId : taskReviewLog.getExamTaskIds()) {
+            // 审核日志
+            taskReviewLog.setExamTaskId(examTaskId);
+            examTaskReviewLogService.save(taskReviewLog);
+
+            // 更新命题任务状态
+            UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(ExamTask::getReviewStatus, taskReviewLog.getReviewStatus()).eq(ExamTask::getId, taskReviewLog.getExamTaskId());
+            this.update(updateWrapper);
+        }
+        return true;
+    }
+
+    @Override
+    public IPage<ExamTaskDetailDto> listTaskPaper(Long schoolId, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
+        Page<ExamTaskDetailDto> page = new Page<>(pageNumber, pageSize);
+        IPage<ExamTaskDetailDto> examTaskDtoIPage = this.baseMapper.listTaskPaper(page, schoolId, courseCode, paperNumber, startTime, endTime);
+        return examTaskDtoIPage;
+    }
 }

+ 2 - 0
distributed-print-business/src/main/resources/db/init-table.sql

@@ -523,6 +523,7 @@ CREATE TABLE `exam_task` (
   `card_rule_id` bigint NOT NULL COMMENT '题卡规则',
   `user_id` bigint DEFAULT NULL COMMENT '命题老师',
   `status` varchar(10) DEFAULT NULL COMMENT 'NEW-新建任务,STAGE-暂存(命题中),SUBMIT-确认提交,CANCEL-撤回',
+  `review` tinyint NOT NULL COMMENT '0-禁用,1-启用',
   `review_status` varchar(8) DEFAULT NULL COMMENT '审核状态:PASS-审核通过,NOT_PASS-审核不通过,默认为空-未审核',
   `enable` tinyint DEFAULT NULL COMMENT '0-禁用,1-启用',
   `batch_no` varchar(32) DEFAULT NULL,
@@ -561,6 +562,7 @@ CREATE TABLE `exam_task_detail` (
   `exposed_paper_type` varchar(20) DEFAULT NULL COMMENT '曝光卷型:已打印卷型,多个以”/“分隔,如A/B/C/D',
   `relate_paper_type` varchar(5) DEFAULT NULL,
   `unexposed_paper_type` varchar(20) DEFAULT NULL,
+  `enable` tinyint DEFAULT NULL COMMENT '0-禁用,1-启用',
   `create_id` bigint DEFAULT NULL,
   `create_time` bigint DEFAULT NULL,
   `update_id` bigint DEFAULT NULL,

+ 144 - 5
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -112,8 +112,8 @@
             a.end_time endTime,
             a.status,
             CASE
-                WHEN d.review = 0 THEN '--'
-                WHEN d.review = 1 AND a.review_status IS NULL THEN 'NOT_AUDITED'
+                WHEN a.review = 0 THEN '--'
+                WHEN a.review = 1 AND a.review_status IS NULL THEN 'NOT_AUDITED'
                 ELSE 'AUDITED'
             END auditStatus,
             CASE
@@ -128,9 +128,7 @@
                 LEFT JOIN
             basic_card_rule b ON a.card_rule_id = b.id
                 LEFT JOIN
-            sys_user c ON a.user_id = c.id
-                LEFT JOIN
-            basic_exam_rule d ON a.school_id = d.school_id) a
+            sys_user c ON a.user_id = c.id) a
         <where>
             <if test="schoolId != null and schoolId != ''">
                 and a.schoolId = #{schoolId}
@@ -158,5 +156,146 @@
             </if>
         </where>
     </select>
+    <select id="listTaskReviewUnaudited" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDto">
+        SELECT
+            a.id,
+            a.school_id schoolId,
+            a.course_code courseCode,
+            a.course_name courseName,
+            a.specialty,
+            a.paper_number paperNumber,
+            a.card_rule_id cardRuleId,
+            b.name cardRuleName,
+            a.user_id userId,
+            c.real_name userName,
+            a.start_time startTime,
+            a.end_time endTime,
+            a.enable,
+            a.create_id createId,
+            a.create_time createTime
+        FROM
+            exam_task a
+        LEFT JOIN
+            basic_card_rule b ON a.card_rule_id = b.id
+        LEFT JOIN
+            sys_user c ON a.user_id = c.id
+        <where>
+            a.review = true and a.review_status is null
+            <if test="schoolId != null and schoolId != ''">
+                and a.school_id = #{schoolId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and a.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and a.paper_number = #{paperNumber}
+            </if>
+            <if test="userId != null and userId != ''">
+                and a.user_id = #{userId}
+            </if>
+            <if test="cardRuleId != null and cardRuleId != ''">
+                and a.card_rule_id = #{cardRuleId}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and a.start_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and a.start_time &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+    <select id="listTaskReviewAudited" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDto">
+        SELECT
+            a.id,
+            a.school_id schoolId,
+            a.course_code courseCode,
+            a.course_name courseName,
+            a.specialty,
+            a.paper_number paperNumber,
+            a.card_rule_id cardRuleId,
+            b.name cardRuleName,
+            a.user_id userId,
+            c.real_name userName,
+            a.start_time startTime,
+            a.end_time endTime,
+            a.review_status reviewStatus,
+            a.enable,
+            a.create_id createId,
+            a.create_time createTime
+        FROM
+            exam_task a
+        LEFT JOIN
+            basic_card_rule b ON a.card_rule_id = b.id
+        LEFT JOIN
+            sys_user c ON a.user_id = c.id
+        <where>
+            a.review = true and a.review_status is not null
+            <if test="schoolId != null and schoolId != ''">
+                and a.school_id = #{schoolId}
+            </if>
+            <if test="reviewStatus != null and reviewStatus != ''">
+                and a.review_status = #{reviewStatus}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and a.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and a.paper_number = #{paperNumber}
+            </if>
+            <if test="userId != null and userId != ''">
+                and a.user_id = #{userId}
+            </if>
+            <if test="cardRuleId != null and cardRuleId != ''">
+                and a.card_rule_id = #{cardRuleId}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and a.start_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and a.start_time &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+    <select id="listTaskPaper" resultType="com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto">
+        SELECT
+            a.id,
+            a.school_id schoolId,
+            a.course_code courseCode,
+            a.course_name courseName,
+            a.specialty,
+            a.paper_number paperNumber,
+            a.user_id userId,
+            c.real_name userName,
+            a.start_time startTime,
+            a.end_time endTime,
+            a.create_id createId,
+            a.create_time createTime,
+            b.enable,
+            b.exposed_paper_type exposedPaperType,
+            b.unexposed_paper_type unexposedPaperType
+        FROM
+            exam_task a
+                LEFT JOIN
+            exam_task_detail b ON a.id = b.exam_task_id
+                LEFT JOIN
+            sys_user c ON a.user_id = c.id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                and a.school_id = #{schoolId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and a.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and a.paper_number = #{paperNumber}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                and a.create_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                and a.create_time &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
 
 </mapper>

+ 204 - 16
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -6,11 +6,11 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.ApiUser;
-import com.qmth.distributed.print.business.bean.dto.BlurryUserDto;
-import com.qmth.distributed.print.business.bean.dto.ExamTaskDto;
-import com.qmth.distributed.print.business.bean.dto.ExamTaskImportDto;
-import com.qmth.distributed.print.business.bean.dto.ReviewLogDto;
+import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
+import com.qmth.distributed.print.business.service.ExamTaskDetailService;
 import com.qmth.distributed.print.business.service.ExamTaskReviewLogService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.util.RequestUtils;
@@ -42,6 +42,9 @@ public class ExamTaskController {
     @Autowired
     private ExamTaskService examTaskService;
 
+    @Autowired
+    private ExamTaskDetailService examTaskDetailService;
+
     @Autowired
     private ExamTaskReviewLogService examTaskReviewLogService;
 
@@ -189,6 +192,7 @@ public class ExamTaskController {
 
     /**
      * 审核历史
+     *
      * @param request
      * @param examTaskId
      * @return
@@ -203,6 +207,7 @@ public class ExamTaskController {
 
     /**
      * 入库申请查询
+     *
      * @param request
      * @param auditStatus
      * @param reviewStatus
@@ -216,21 +221,204 @@ public class ExamTaskController {
      * @return
      */
     @ApiOperation(value = "入库申请查询")
-    @RequestMapping(value = "/task_apply/list", method = RequestMethod.POST)
-    public Result reviewList(HttpServletRequest request,
-                             @RequestParam(value = "auditStatus", required = false) String auditStatus,
-                             @RequestParam(value = "reviewStatus", required = false) String reviewStatus,
-                             @RequestParam(value = "cardRuleId", required = false) Long cardRuleId,
-                             @RequestParam(value = "courseCode", required = false) String courseCode,
-                             @RequestParam(value = "paperNumber", required = false) String paperNumber,
-                             @RequestParam(value = "startTime", required = false) Long startTime,
-                             @RequestParam(value = "endTime", required = false) Long endTime,
-                             @RequestParam("pageNumber") Integer pageNumber,
-                             @RequestParam("pageSize") Integer pageSize
-                             ) {
+    @RequestMapping(value = "/task_apply_list", method = RequestMethod.POST)
+    public Result taskApplyList(HttpServletRequest request,
+                                @RequestParam(value = "auditStatus", required = false) String auditStatus,
+                                @RequestParam(value = "reviewStatus", required = false) String reviewStatus,
+                                @RequestParam(value = "cardRuleId", required = false) Long cardRuleId,
+                                @RequestParam(value = "courseCode", required = false) String courseCode,
+                                @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                @RequestParam(value = "startTime", required = false) Long startTime,
+                                @RequestParam(value = "endTime", required = false) Long endTime,
+                                @RequestParam("pageNumber") Integer pageNumber,
+                                @RequestParam("pageSize") Integer pageSize) {
         ApiUser apiUser = RequestUtils.getApiUser(request);
         IPage<ExamTaskDto> list = examTaskService.listTaskApply(apiUser.getSchoolId(), auditStatus, reviewStatus, cardRuleId, courseCode, paperNumber, startTime, endTime, pageNumber, pageSize);
         return ResultUtil.ok(list);
     }
+
+    /**
+     * 暂存/提交
+     *
+     * @param examTaskDetail
+     * @return
+     */
+    @ApiOperation(value = "暂存/提交")
+    @RequestMapping(value = "/task_apply_save", method = RequestMethod.POST)
+    public Result taskApplySave(@RequestBody ExamTaskDetail examTaskDetail) {
+        boolean isSuccess = examTaskDetailService.saveExamTaskDetail(examTaskDetail);
+        return ResultUtil.ok(isSuccess);
+    }
+
+    /**
+     * 撤回/重新申请
+     *
+     * @param examTask
+     * @return
+     */
+    @ApiOperation(value = "撤回/重新申请")
+    @RequestMapping(value = "/task_apply_status", method = RequestMethod.POST)
+    public Result taskApplyStatus(@RequestBody ExamTask examTask) {
+        boolean isSuccess = examTaskDetailService.status(examTask);
+        return ResultUtil.ok(isSuccess);
+    }
+
+    /**
+     * 入库审核查询-未审核
+     *
+     * @param request
+     * @param courseCode
+     * @param paperNumber
+     * @param userId
+     * @param cardRuleId
+     * @param startTime
+     * @param endTime
+     * @param pageNumber
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "入库审核查询-未审核")
+    @RequestMapping(value = "/task_review_list_unaudited", method = RequestMethod.POST)
+    public Result taskReviewListUnaudited(HttpServletRequest request,
+                                          @RequestParam(value = "courseCode", required = false) String courseCode,
+                                          @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                          @RequestParam(value = "userId", required = false) Long userId,
+                                          @RequestParam(value = "cardRuleId", required = false) Long cardRuleId,
+                                          @RequestParam(value = "startTime", required = false) Long startTime,
+                                          @RequestParam(value = "endTime", required = false) Long endTime,
+                                          @RequestParam("pageNumber") Integer pageNumber,
+                                          @RequestParam("pageSize") Integer pageSize) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        IPage<ExamTaskDto> examTaskDtoIPage = examTaskService.listTaskReviewUnaudited(apiUser.getSchoolId(), courseCode, paperNumber, userId, cardRuleId, startTime, endTime, pageNumber, pageSize);
+        return ResultUtil.ok(examTaskDtoIPage);
+    }
+
+    /**
+     * 入库审核查询-未审核
+     *
+     * @param request
+     * @param courseCode
+     * @param paperNumber
+     * @param userId
+     * @param cardRuleId
+     * @param startTime
+     * @param endTime
+     * @param pageNumber
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "入库审核查询-已审核")
+    @RequestMapping(value = "/task_review_list_audited", method = RequestMethod.POST)
+    public Result taskReviewListAudited(HttpServletRequest request,
+                                        @RequestParam(value = "reviewStatus", required = false) String reviewStatus,
+                                        @RequestParam(value = "courseCode", required = false) String courseCode,
+                                        @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                        @RequestParam(value = "userId", required = false) Long userId,
+                                        @RequestParam(value = "cardRuleId", required = false) Long cardRuleId,
+                                        @RequestParam(value = "startTime", required = false) Long startTime,
+                                        @RequestParam(value = "endTime", required = false) Long endTime,
+                                        @RequestParam("pageNumber") Integer pageNumber,
+                                        @RequestParam("pageSize") Integer pageSize) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        IPage<ExamTaskDto> examTaskDtoIPage = examTaskService.listTaskReviewAudited(apiUser.getSchoolId(), reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, pageNumber, pageSize);
+        return ResultUtil.ok(examTaskDtoIPage);
+    }
+
+    /**
+     * 审核
+     *
+     * @param request
+     * @param taskReviewLog
+     * @return
+     */
+    @ApiOperation(value = "审核")
+    @RequestMapping(value = "/task_review_save", method = RequestMethod.POST)
+    public Result taskReviewSave(HttpServletRequest request,
+                                 @RequestBody ExamTaskReviewLog taskReviewLog) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        taskReviewLog.setOperateId(apiUser.getUserData().getId());
+        taskReviewLog.setOperateTime(System.currentTimeMillis());
+        boolean isSuccess = examTaskService.taskReviewSave(taskReviewLog);
+        return ResultUtil.ok(isSuccess);
+    }
+
+    /**
+     * 批量审核
+     *
+     * @param request
+     * @param taskReviewLog
+     * @return
+     */
+    @ApiOperation(value = "批量审核")
+    @RequestMapping(value = "/task_review_save_batch", method = RequestMethod.POST)
+    public Result taskReviewSaveBatch(HttpServletRequest request,
+                                      @RequestBody ExamTaskReviewLog taskReviewLog) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        taskReviewLog.setOperateId(apiUser.getUserData().getId());
+        taskReviewLog.setOperateTime(System.currentTimeMillis());
+        boolean isSuccess = examTaskService.taskReviewSaveBatch(taskReviewLog);
+        return ResultUtil.ok(isSuccess);
+    }
+
+    @ApiOperation(value = "导出审核样本")
+    @RequestMapping(value = "/task_review_export", method = RequestMethod.POST)
+    public Result taskReviewExport(HttpServletRequest request,
+                                   @RequestBody ExamTaskReviewLog taskReviewLog) {
+//        boolean isSuccess = examTaskService.taskReviewSaveBatch(taskReviewLog);
+        // todo 导出
+        return ResultUtil.ok(true);
+    }
+
+    /**
+     * 卷库查询
+     * @param request
+     * @param courseCode
+     * @param paperNumber
+     * @param startTime
+     * @param endTime
+     * @param pageNumber
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "卷库查询")
+    @RequestMapping(value = "/task_paper_list", method = RequestMethod.POST)
+    public Result taskPaperList(HttpServletRequest request,
+                                @RequestParam(value = "courseCode", required = false) String courseCode,
+                                @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                @RequestParam(value = "startTime", required = false) Long startTime,
+                                @RequestParam(value = "endTime", required = false) Long endTime,
+                                @RequestParam("pageNumber") Integer pageNumber,
+                                @RequestParam("pageSize") Integer pageSize) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        IPage<ExamTaskDetailDto> examTaskDtoIPage = examTaskService.listTaskPaper(apiUser.getSchoolId(), courseCode, paperNumber, startTime, endTime, pageNumber, pageSize);
+        return ResultUtil.ok(examTaskDtoIPage);
+    }
+
+    @ApiOperation(value = "预览")
+    @RequestMapping(value = "/task_paper_preview", method = RequestMethod.POST)
+    public Result taskPaperPreview(HttpServletRequest request) {
+        // todo 预览
+        return ResultUtil.ok(true);
+    }
+
+    @ApiOperation(value = "下载")
+    @RequestMapping(value = "/task_paper_download", method = RequestMethod.POST)
+    public Result taskPaperDownload(HttpServletRequest request) {
+        // todo 预览
+        return ResultUtil.ok(true);
+    }
+
+    /**
+     * 启用/禁用
+     * @param request
+     * @param examTaskDetail
+     * @return
+     */
+    @ApiOperation(value = "启用/禁用")
+    @RequestMapping(value = "/task_paper_enable", method = RequestMethod.POST)
+    public Result taskPaperEnable(HttpServletRequest request, @RequestBody ExamTaskDetail examTaskDetail) {
+        boolean isSuccess = examTaskDetailService.enable(examTaskDetail);
+        return ResultUtil.ok(isSuccess);
+    }
 }