浏览代码

测试bug修改

xiaof 2 年之前
父节点
当前提交
cdd791cf67
共有 29 个文件被更改,包括 754 次插入78 次删除
  1. 11 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/TaskStudentResult.java
  2. 15 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperScanTask.java
  3. 4 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperArchivesMapper.java
  4. 3 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperArchivesService.java
  5. 2 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java
  6. 4 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java
  7. 32 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperArchivesServiceImpl.java
  8. 2 5
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java
  9. 14 2
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java
  10. 40 5
      paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java
  11. 64 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/templete/execute/AsyncDownloadPaperService.java
  12. 6 0
      paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/TaskLogicService.java
  13. 262 7
      paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/impl/TaskLogicServiceImpl.java
  14. 32 0
      paper-library-business/src/main/resources/mapper/PaperArchivesMapper.xml
  15. 125 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/bean/params/DownLoadPaperParams.java
  16. 8 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/bean/result/TaskListResult.java
  17. 2 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/contant/SystemConstant.java
  18. 2 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/enums/UploadFileEnum.java
  19. 2 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/mapper/BasicStudentMapper.java
  20. 8 5
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/TBTaskService.java
  21. 6 2
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicStudentServiceImpl.java
  22. 28 0
      paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/TBTaskServiceImpl.java
  23. 7 3
      paper-library-common/src/main/java/com/qmth/paper/library/common/util/ServletUtil.java
  24. 19 0
      paper-library-common/src/main/resources/mapper/BasicStudentMapper.xml
  25. 1 1
      paper-library-common/src/main/resources/mapper/TBTaskMapper.xml
  26. 15 17
      paper-library/src/main/java/com/qmth/paper/library/api/PaperArchivesController.java
  27. 9 0
      paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java
  28. 2 0
      paper-library/src/main/java/com/qmth/paper/library/api/TBTaskController.java
  29. 29 31
      sql/paper-library-1.0.0.sql

+ 11 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/result/TaskStudentResult.java

@@ -42,6 +42,9 @@ public class TaskStudentResult implements Serializable {
     @ApiModelProperty(value = "班级")
     @ApiModelProperty(value = "班级")
     private String clazzName;
     private String clazzName;
 
 
+    @ApiModelProperty(value = "绑定图片数量")
+    private Integer bindCount;
+
     public String getPaperScanTaskDetailId() {
     public String getPaperScanTaskDetailId() {
         return paperScanTaskDetailId;
         return paperScanTaskDetailId;
     }
     }
@@ -129,4 +132,12 @@ public class TaskStudentResult implements Serializable {
     public void setClazzName(String clazzName) {
     public void setClazzName(String clazzName) {
         this.clazzName = clazzName;
         this.clazzName = clazzName;
     }
     }
+
+    public Integer getBindCount() {
+        return bindCount;
+    }
+
+    public void setBindCount(Integer bindCount) {
+        this.bindCount = bindCount;
+    }
 }
 }

+ 15 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/entity/PaperScanTask.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.paper.library.common.base.BaseEntity;
 import com.qmth.paper.library.common.base.BaseEntity;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
@@ -72,6 +73,12 @@ public class PaperScanTask extends BaseEntity implements Serializable {
     @TableField(value = "scan_count", updateStrategy = FieldStrategy.IGNORED)
     @TableField(value = "scan_count", updateStrategy = FieldStrategy.IGNORED)
     private Integer scanCount;
     private Integer scanCount;
 
 
+    /**
+     * 是否结束
+     */
+    @TableField("enable")
+    private Boolean enable;
+
     public Long getSchoolId() {
     public Long getSchoolId() {
         return schoolId;
         return schoolId;
     }
     }
@@ -143,4 +150,12 @@ public class PaperScanTask extends BaseEntity implements Serializable {
     public void setScanCount(Integer scanCount) {
     public void setScanCount(Integer scanCount) {
         this.scanCount = scanCount;
         this.scanCount = scanCount;
     }
     }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
 }
 }

+ 4 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/mapper/PaperArchivesMapper.java

@@ -26,5 +26,9 @@ public interface PaperArchivesMapper extends BaseMapper<PaperArchives> {
 
 
     IPage<PaperArchivesDetailResult> pageDetail(@Param("page") Page<PaperArchivesDetailResult> page, @Param("paperArchivesId") Long paperArchivesId, @Param("belongOrgId") Long belongOrgId, @Param("majorName") String majorName, @Param("clazzName") String clazzName, @Param("courseName") String courseName, @Param("teacherName") String teacherName, @Param("teachClazzName") String teachClazzName, @Param("isBind") Boolean isBind, @Param("param") String param);
     IPage<PaperArchivesDetailResult> pageDetail(@Param("page") Page<PaperArchivesDetailResult> page, @Param("paperArchivesId") Long paperArchivesId, @Param("belongOrgId") Long belongOrgId, @Param("majorName") String majorName, @Param("clazzName") String clazzName, @Param("courseName") String courseName, @Param("teacherName") String teacherName, @Param("teachClazzName") String teachClazzName, @Param("isBind") Boolean isBind, @Param("param") String param);
 
 
+    List<PaperArchivesDetailResult> pageDetail(@Param("paperArchivesId") Long paperArchivesId, @Param("belongOrgId") Long belongOrgId, @Param("majorName") String majorName, @Param("clazzName") String clazzName, @Param("courseName") String courseName, @Param("teacherName") String teacherName, @Param("teachClazzName") String teachClazzName, @Param("isBind") Boolean isBind, @Param("param") String param);
+
     List<SelectResult> queryManagerUser(@Param("schoolId") Long schoolId, @Param("roleType") String roleType);
     List<SelectResult> queryManagerUser(@Param("schoolId") Long schoolId, @Param("roleType") String roleType);
+
+    List<PaperArchivesDetailResult> listDetail(@Param("ids") List<String> ids);
 }
 }

+ 3 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperArchivesService.java

@@ -6,6 +6,7 @@ import com.qmth.paper.library.business.bean.result.PaperArchivesDetailResult;
 import com.qmth.paper.library.business.bean.result.PaperArchivesResult;
 import com.qmth.paper.library.business.bean.result.PaperArchivesResult;
 import com.qmth.paper.library.business.bean.result.SelectResult;
 import com.qmth.paper.library.business.bean.result.SelectResult;
 import com.qmth.paper.library.business.entity.PaperArchives;
 import com.qmth.paper.library.business.entity.PaperArchives;
+import com.qmth.paper.library.common.bean.params.DownLoadPaperParams;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -28,5 +29,7 @@ public interface PaperArchivesService extends IService<PaperArchives> {
 
 
     IPage<PaperArchivesDetailResult> pageDetail(Long paperArchivesId, Long belongOrgId, String majorName, String clazzName, String courseName, String teacherName, String teachClazzName, Boolean isBind, String param, Integer pageNumber, Integer pageSize);
     IPage<PaperArchivesDetailResult> pageDetail(Long paperArchivesId, Long belongOrgId, String majorName, String clazzName, String courseName, String teacherName, String teachClazzName, Boolean isBind, String param, Integer pageNumber, Integer pageSize);
 
 
+    List<PaperArchivesDetailResult> listDetail(DownLoadPaperParams downLoadPaperParams);
+
     List<SelectResult> queryManagerUser();
     List<SelectResult> queryManagerUser();
 }
 }

+ 2 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java

@@ -110,4 +110,6 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
     List<SelectResult> queryScanTask(Long paperArchivesId);
     List<SelectResult> queryScanTask(Long paperArchivesId);
 
 
     PaperScanTaskResult getByPaperScanTaskId(Long paperScanTaskId);
     PaperScanTaskResult getByPaperScanTaskId(Long paperScanTaskId);
+
+    void enable(Long paperScanTaskId, Boolean enable);
 }
 }

+ 4 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -98,6 +98,10 @@ public class ClientServiceImpl implements ClientService {
                 throw ExceptionResultEnum.ERROR.exception("扫描任务不存在");
                 throw ExceptionResultEnum.ERROR.exception("扫描任务不存在");
             }
             }
 
 
+            if (!paperScanTask.getEnable()) {
+                throw ExceptionResultEnum.ERROR.exception("扫描任务已关闭");
+            }
+
             // 扫描任务是否被其它人扫描
             // 扫描任务是否被其它人扫描
             if (paperScanTask.getScanUserId() != null && !paperScanTask.getScanUserId().equals(userId)) {
             if (paperScanTask.getScanUserId() != null && !paperScanTask.getScanUserId().equals(userId)) {
                 throw ExceptionResultEnum.ERROR.exception("其它扫描员已开始扫描");
                 throw ExceptionResultEnum.ERROR.exception("其它扫描员已开始扫描");

+ 32 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperArchivesServiceImpl.java

@@ -14,14 +14,18 @@ import com.qmth.paper.library.business.mapper.PaperArchivesMapper;
 import com.qmth.paper.library.business.service.PaperArchivesService;
 import com.qmth.paper.library.business.service.PaperArchivesService;
 import com.qmth.paper.library.business.service.PaperLibraryService;
 import com.qmth.paper.library.business.service.PaperLibraryService;
 import com.qmth.paper.library.business.service.PaperScanTaskService;
 import com.qmth.paper.library.business.service.PaperScanTaskService;
+import com.qmth.paper.library.common.bean.params.DownLoadPaperParams;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.RoleTypeEnum;
 import com.qmth.paper.library.common.enums.RoleTypeEnum;
 import com.qmth.paper.library.common.util.ServletUtil;
 import com.qmth.paper.library.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -139,6 +143,34 @@ public class PaperArchivesServiceImpl extends ServiceImpl<PaperArchivesMapper, P
         return detailResultIPage;
         return detailResultIPage;
     }
     }
 
 
+    @Override
+    public List<PaperArchivesDetailResult> listDetail(DownLoadPaperParams downLoadPaperParams) {
+        String ids = downLoadPaperParams.getIds();
+        List<PaperArchivesDetailResult> paperArchivesDetailResults = new ArrayList<>();
+        if (StringUtils.isNotBlank(ids) && ids.split(",").length > 0) {
+            String[] idsArray = ids.split(",");
+            paperArchivesDetailResults = this.baseMapper.listDetail(Arrays.asList(idsArray));
+        } else {
+            Long paperArchivesId = downLoadPaperParams.getPaperArchivesId();
+            Long belongOrgId = downLoadPaperParams.getBelongOrgId();
+            String majorName = downLoadPaperParams.getMajorName();
+            String clazzName = downLoadPaperParams.getClazzName();
+            String courseName = downLoadPaperParams.getCourseName();
+            String teacherName = downLoadPaperParams.getTeacherName();
+            String teachClazzName = downLoadPaperParams.getTeachClazzName();
+            Boolean isBind = downLoadPaperParams.getBind();
+            String param = downLoadPaperParams.getParam();
+            paperArchivesDetailResults = this.baseMapper.pageDetail(paperArchivesId, belongOrgId, majorName, clazzName, courseName, teacherName, teachClazzName, isBind, param);
+        }
+        for (PaperArchivesDetailResult record : paperArchivesDetailResults) {
+            QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, record.getPaperScanTaskDetailId());
+            int count = paperLibraryService.count(queryWrapper);
+            record.setBindCount(count);
+        }
+        return paperArchivesDetailResults;
+    }
+
     @Override
     @Override
     public List<SelectResult> queryManagerUser() {
     public List<SelectResult> queryManagerUser() {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());

+ 2 - 5
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryCommonServiceImpl.java

@@ -73,9 +73,6 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
     @Resource
     @Resource
     private FileStoreUtil fileStoreUtil;
     private FileStoreUtil fileStoreUtil;
 
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Autowired
     @Autowired
     BasicSchoolService basicSchoolService;
     BasicSchoolService basicSchoolService;
 
 
@@ -373,7 +370,7 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
     public File downloadFile(String rootPath, String filePath, String uploadType, String type) {
     public File downloadFile(String rootPath, String filePath, String uploadType, String type) {
         UploadFileEnum uploadTypeEnum = Enum.valueOf(UploadFileEnum.class, uploadType);
         UploadFileEnum uploadTypeEnum = Enum.valueOf(UploadFileEnum.class, uploadType);
 
 
-        File localFile = new File(rootPath, SystemConstant.getUuid() + subFileSuffix(filePath));
+        File localFile = new File(rootPath, subFileName(filePath));
         if (type.equals(SystemConstant.OSS)) {
         if (type.equals(SystemConstant.OSS)) {
             try {
             try {
                 return fileStoreUtil.ossDownload(filePath, localFile.getPath(), uploadTypeEnum.getFssType());
                 return fileStoreUtil.ossDownload(filePath, localFile.getPath(), uploadTypeEnum.getFssType());
@@ -404,7 +401,7 @@ public class PaperLibraryCommonServiceImpl implements PaperLibraryCommonService
      */
      */
     public String subFileName(String path) {
     public String subFileName(String path) {
         path = path.replaceAll("\\\\", "/");
         path = path.replaceAll("\\\\", "/");
-        return path.substring(0, path.lastIndexOf("/") + 1);
+        return path.substring(path.lastIndexOf("/") + 1);
     }
     }
 
 
     /**
     /**

+ 14 - 2
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperLibraryServiceImpl.java

@@ -20,6 +20,7 @@ import com.qmth.paper.library.business.service.PaperScanTaskService;
 import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+import com.qmth.paper.library.common.enums.UploadFileEnum;
 import com.qmth.paper.library.common.lock.LockService;
 import com.qmth.paper.library.common.lock.LockService;
 import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.util.ImageUtil;
 import com.qmth.paper.library.common.util.ImageUtil;
@@ -56,6 +57,9 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     @Resource
     @Resource
     PaperScanTaskService paperScanTaskService;
     PaperScanTaskService paperScanTaskService;
 
 
+    @Resource
+    PaperLibraryService paperLibraryService;
+
     @Resource
     @Resource
     PaperScanTaskDetailService paperScanTaskDetailService;
     PaperScanTaskDetailService paperScanTaskDetailService;
 
 
@@ -217,7 +221,14 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
     @Override
     @Override
     public IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Integer pageNumber, Integer pageSize) {
     public IPage<TaskStudentResult> pageStudent(Long paperScanTaskId, String param, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return this.baseMapper.pageStudent(new Page<>(pageNumber, pageSize), schoolId, paperScanTaskId, param);
+        IPage<TaskStudentResult> taskStudentResultIPage = this.baseMapper.pageStudent(new Page<>(pageNumber, pageSize), schoolId, paperScanTaskId, param);
+        for (TaskStudentResult record : taskStudentResultIPage.getRecords()) {
+            QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, record.getPaperScanTaskDetailId());
+            int count = paperLibraryService.count(queryWrapper);
+            record.setBindCount(count);
+        }
+        return taskStudentResultIPage;
     }
     }
 
 
     @Override
     @Override
@@ -231,7 +242,8 @@ public class PaperLibraryServiceImpl extends ServiceImpl<PaperLibraryMapper, Pap
         StringJoiner stringJoiner = new StringJoiner("");
         StringJoiner stringJoiner = new StringJoiner("");
         stringJoiner.add(dictionaryConfig.fssLocalFileDomain().getConfig()).add(File.separator);
         stringJoiner.add(dictionaryConfig.fssLocalFileDomain().getConfig()).add(File.separator);
         LocalDateTime nowTime = LocalDateTime.now();
         LocalDateTime nowTime = LocalDateTime.now();
-        stringJoiner.add(String.valueOf(nowTime.getYear())).add(File.separator)
+        stringJoiner.add(UploadFileEnum.DOWNLOAD.getTitle()).add(File.separator)
+                .add(String.valueOf(nowTime.getYear())).add(File.separator)
                 .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                 .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
                 .add(String.format("%02d", nowTime.getDayOfMonth())).add(File.separator);
                 .add(String.format("%02d", nowTime.getDayOfMonth())).add(File.separator);
         String rootPath = stringJoiner.toString();
         String rootPath = stringJoiner.toString();

+ 40 - 5
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -122,23 +123,47 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     @Override
     @Override
     public void deletePaperScanTaskByIdList(List<Long> idList, SysUser requestUser) {
     public void deletePaperScanTaskByIdList(List<Long> idList, SysUser requestUser) {
         Long schoolId = requestUser.getSchoolId();
         Long schoolId = requestUser.getSchoolId();
-        if (idList != null && idList.size() > 0) {
+        if (idList != null && !idList.isEmpty()) {
             List<PaperLibrary> paperLibraryList = paperLibraryService.list(new QueryWrapper<PaperLibrary>()
             List<PaperLibrary> paperLibraryList = paperLibraryService.list(new QueryWrapper<PaperLibrary>()
                     .lambda()
                     .lambda()
                     .eq(PaperLibrary::getSchoolId, schoolId)
                     .eq(PaperLibrary::getSchoolId, schoolId)
                     .in(PaperLibrary::getPaperScanTaskId, idList));
                     .in(PaperLibrary::getPaperScanTaskId, idList));
 
 
-            if (paperLibraryList.size() > 0) {
+            if (!paperLibraryList.isEmpty()) {
                 // 所选择要删除的扫描任务中出现了已经开始扫描的,不能被删除
                 // 所选择要删除的扫描任务中出现了已经开始扫描的,不能被删除
                 List<Long> cantDeleteScanTaskIdList = paperLibraryList.stream()
                 List<Long> cantDeleteScanTaskIdList = paperLibraryList.stream()
-                        .map(PaperLibrary::getPaperScanTaskDetailId)
+                        .map(PaperLibrary::getPaperScanTaskId)
                         .distinct()
                         .distinct()
                         .collect(Collectors.toList());
                         .collect(Collectors.toList());
 
 
-                if (cantDeleteScanTaskIdList.size() > 0) {
+                if (!cantDeleteScanTaskIdList.isEmpty()) {
                     List<PaperScanTask> paperScanTaskList = this.list(new QueryWrapper<PaperScanTask>().lambda().in(PaperScanTask::getId, cantDeleteScanTaskIdList));
                     List<PaperScanTask> paperScanTaskList = this.list(new QueryWrapper<PaperScanTask>().lambda().in(PaperScanTask::getId, cantDeleteScanTaskIdList));
                     String cantDeleteScanTaskNames = paperScanTaskList.stream().map(PaperScanTask::getScanTaskName).collect(Collectors.joining(","));
                     String cantDeleteScanTaskNames = paperScanTaskList.stream().map(PaperScanTask::getScanTaskName).collect(Collectors.joining(","));
-                    throw ExceptionResultEnum.ERROR.exception("扫描任务【" + cantDeleteScanTaskNames + "】已经进行了图片扫描不能删除");
+                    throw ExceptionResultEnum.ERROR.exception("扫描任务【" + cantDeleteScanTaskNames + "】已扫描图片,不能删除");
+                }
+            } else {
+                // 是否有图片绑定到该任务下
+                QueryWrapper<PaperScanTaskDetail> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().in(PaperScanTaskDetail::getPaperScanTaskId, idList);
+                List<PaperScanTaskDetail> paperScanTaskDetail = paperScanTaskDetailService.list(queryWrapper);
+                List<Long> paperTaskIdList = new ArrayList<>();
+                if (!paperScanTaskDetail.isEmpty()) {
+                    for (PaperScanTaskDetail paperScanTaskDetailTemp : paperScanTaskDetail) {
+                        if (paperTaskIdList.contains(paperScanTaskDetailTemp.getId())) {
+                            continue;
+                        }
+                        QueryWrapper<PaperLibrary> libraryQueryWrapper = new QueryWrapper<>();
+                        libraryQueryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, paperScanTaskDetailTemp.getId());
+                        int count = paperLibraryService.count(libraryQueryWrapper);
+                        if (count > 0) {
+                            paperTaskIdList.add(paperScanTaskDetailTemp.getPaperScanTaskId());
+                        }
+                    }
+                }
+                if (!paperTaskIdList.isEmpty()) {
+                    List<PaperScanTask> paperScanTaskList = this.list(new QueryWrapper<PaperScanTask>().lambda().in(PaperScanTask::getId, paperTaskIdList));
+                    String cantDeleteScanTaskNames = paperScanTaskList.stream().map(PaperScanTask::getScanTaskName).collect(Collectors.joining(","));
+                    throw ExceptionResultEnum.ERROR.exception("扫描任务【" + cantDeleteScanTaskNames + "】已有图片绑定,不能删除");
                 }
                 }
             }
             }
         }
         }
@@ -301,4 +326,14 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     public PaperScanTaskResult getByPaperScanTaskId(Long paperScanTaskId) {
     public PaperScanTaskResult getByPaperScanTaskId(Long paperScanTaskId) {
         return this.baseMapper.getByPaperScanTaskId(paperScanTaskId);
         return this.baseMapper.getByPaperScanTaskId(paperScanTaskId);
     }
     }
+
+    @Override
+    public void enable(Long paperScanTaskId, Boolean enable) {
+        PaperScanTask paperScanTask = this.getById(paperScanTaskId);
+        if (paperScanTask == null) {
+            throw ExceptionResultEnum.ERROR.exception("任务数据异常");
+        }
+        paperScanTask.setEnable(enable);
+        this.updateById(paperScanTask);
+    }
 }
 }

+ 64 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/execute/AsyncDownloadPaperService.java

@@ -0,0 +1,64 @@
+package com.qmth.paper.library.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.paper.library.business.templete.export.AsyncExportTaskTemplate;
+import com.qmth.paper.library.business.templete.service.TaskLogicService;
+import com.qmth.paper.library.common.contant.SpringContextHolder;
+import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.entity.TBTask;
+import com.qmth.paper.library.common.enums.TaskResultEnum;
+import com.qmth.paper.library.common.enums.TaskStatusEnum;
+import com.qmth.paper.library.common.service.TBTaskService;
+import com.qmth.paper.library.common.util.Result;
+import com.qmth.paper.library.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * 异步下载试卷
+ */
+@Service
+public class AsyncDownloadPaperService extends AsyncExportTaskTemplate {
+    private static final Logger log = LoggerFactory.getLogger(AsyncDownloadPaperService.class);
+
+    static final String OBJ_TITLE = "zip数据";
+
+    /**
+     * 下载pdf
+     */
+    @Override
+    public Result exportTask(Map<String, Object> map) {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+        tbTaskService.updateById(tbTask);
+        try {
+            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
+            taskLogicService.executeDownloadPaperLogic(map);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, map.get("size"), FINISH_SIZE));
+            tbTask.setResult(TaskResultEnum.SUCCESS);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            //生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
+        }
+        return ResultUtil.ok(map);
+    }
+}

+ 6 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/TaskLogicService.java

@@ -38,4 +38,10 @@ public interface TaskLogicService {
      */
      */
     Map<String, Object> executeImportBasicStudentLogic(Map<String, Object> map) throws Exception;
     Map<String, Object> executeImportBasicStudentLogic(Map<String, Object> map) throws Exception;
 
 
+    /**
+     * 下载试卷
+     *
+     * @param map 数据源
+     */
+    Map<String, Object> executeDownloadPaperLogic(Map<String, Object> map);
 }
 }

+ 262 - 7
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1,38 +1,49 @@
 package com.qmth.paper.library.business.templete.service.impl;
 package com.qmth.paper.library.business.templete.service.impl;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.common.utils.BinaryUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.paper.library.business.bean.dto.excel.PaperScanTaskImportDto;
 import com.qmth.paper.library.business.bean.dto.excel.PaperScanTaskImportDto;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
 import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
+import com.qmth.paper.library.business.bean.result.PaperArchivesDetailResult;
 import com.qmth.paper.library.business.entity.PaperArchives;
 import com.qmth.paper.library.business.entity.PaperArchives;
+import com.qmth.paper.library.business.entity.PaperLibrary;
 import com.qmth.paper.library.business.entity.PaperScanTask;
 import com.qmth.paper.library.business.entity.PaperScanTask;
 import com.qmth.paper.library.business.entity.PaperScanTaskDetail;
 import com.qmth.paper.library.business.entity.PaperScanTaskDetail;
-import com.qmth.paper.library.business.service.PaperArchivesService;
-import com.qmth.paper.library.business.service.PaperScanTaskDetailService;
-import com.qmth.paper.library.business.service.PaperScanTaskService;
+import com.qmth.paper.library.business.service.*;
 import com.qmth.paper.library.business.templete.service.TaskLogicService;
 import com.qmth.paper.library.business.templete.service.TaskLogicService;
 import com.qmth.paper.library.common.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.SysOrgImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.SysOrgImportDto;
+import com.qmth.paper.library.common.bean.params.DownLoadPaperParams;
+import com.qmth.paper.library.common.config.DictionaryConfig;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.entity.BasicStudent;
 import com.qmth.paper.library.common.entity.BasicStudent;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.entity.TBTask;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
+import com.qmth.paper.library.common.enums.UploadFileEnum;
 import com.qmth.paper.library.common.service.BasicStudentService;
 import com.qmth.paper.library.common.service.BasicStudentService;
 import com.qmth.paper.library.common.service.SysOrgService;
 import com.qmth.paper.library.common.service.SysOrgService;
-import com.qmth.paper.library.common.util.ExcelUtil;
+import com.qmth.paper.library.common.util.*;
 import com.qmth.paper.library.common.util.excel.ExcelError;
 import com.qmth.paper.library.common.util.excel.ExcelError;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.*;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.LinkedMultiValueMap;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
@@ -48,6 +59,8 @@ import java.util.stream.Stream;
 public class TaskLogicServiceImpl implements TaskLogicService {
 public class TaskLogicServiceImpl implements TaskLogicService {
     private final static Logger log = LoggerFactory.getLogger(TaskLogicServiceImpl.class);
     private final static Logger log = LoggerFactory.getLogger(TaskLogicServiceImpl.class);
 
 
+    @Resource
+    private DictionaryConfig dictionaryConfig;
     @Resource
     @Resource
     private SysOrgService sysOrgService;
     private SysOrgService sysOrgService;
     @Resource
     @Resource
@@ -58,7 +71,12 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     private PaperScanTaskDetailService paperScanTaskDetailService;
     private PaperScanTaskDetailService paperScanTaskDetailService;
     @Resource
     @Resource
     private BasicStudentService basicStudentService;
     private BasicStudentService basicStudentService;
-
+    @Resource
+    PaperLibraryCommonService paperLibraryCommonService;
+    @Resource
+    private FileStoreUtil fileStoreUtil;
+    @Resource
+    PaperLibraryService paperLibraryService;
 
 
     @Transactional
     @Transactional
     @Override
     @Override
@@ -246,6 +264,10 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 }
                 }
                 // 目标学生
                 // 目标学生
                 BasicStudent targetStudent = studentList.get(0);
                 BasicStudent targetStudent = studentList.get(0);
+                if (!e.getStudentName().equals(targetStudent.getStudentName())) {
+                    throw ExceptionResultEnum.ERROR.exception("学号为【" + studentCode + "】的学生姓名与基础信息中姓名不一致");
+                }
+
                 Long studentId = targetStudent.getId();
                 Long studentId = targetStudent.getId();
 
 
                 PaperScanTaskDetail paperScanTaskDetail = new PaperScanTaskDetail();
                 PaperScanTaskDetail paperScanTaskDetail = new PaperScanTaskDetail();
@@ -273,6 +295,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         .lambda()
                         .lambda()
                         .eq(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
                         .eq(PaperScanTaskDetail::getPaperScanTaskId, paperScanTaskId));
                 paperScanTask.setStudentCount(studentCount);
                 paperScanTask.setStudentCount(studentCount);
+                paperScanTask.setEnable(false);
             }
             }
             paperScanTaskService.saveOrUpdateBatch(paperScanTaskList);
             paperScanTaskService.saveOrUpdateBatch(paperScanTaskList);
         }
         }
@@ -342,4 +365,236 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         });
         });
         return basicStudentService.executeBasicStudentImportLogic(finalList, map);
         return basicStudentService.executeBasicStudentImportLogic(finalList, map);
     }
     }
+
+    @Override
+    public Map<String, Object> executeDownloadPaperLogic(Map<String, Object> map) {
+        List<File> sourceFileList = new ArrayList<>();
+        File zipFile = null;
+        String zipLocalRootPath = null;
+        try {
+            TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+            DownLoadPaperParams downLoadPaperParams = JSON.parseObject(tbTask.getRemark(), DownLoadPaperParams.class);
+            if (Objects.isNull(downLoadPaperParams)) {
+                throw ExceptionResultEnum.ERROR.exception("未传参数");
+            }
+            if (downLoadPaperParams.getPaperArchivesId() == null) {
+                throw ExceptionResultEnum.ERROR.exception("档案ID必传");
+            }
+
+            List<PaperArchivesDetailResult> archivesDetailResults = paperArchivesService.listDetail(downLoadPaperParams);
+            StringJoiner stringJoiner = new StringJoiner("");
+            stringJoiner.add(dictionaryConfig.fssLocalFileDomain().getConfig()).add(File.separator);
+            LocalDateTime nowTime = LocalDateTime.now();
+            stringJoiner.add(UploadFileEnum.DOWNLOAD.getTitle()).add(File.separator)
+                    .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getDayOfMonth())).add(File.separator);
+            String rootPath = stringJoiner.toString();
+            String dirName = SystemConstant.getUuid() + SystemConstant.ZIP_PREFIX;
+            zipFile = new File(rootPath + dirName);
+            if (!zipFile.getParentFile().exists()) {
+                zipFile.getParentFile().mkdirs();
+            }
+            zipLocalRootPath = dictionaryConfig.fssLocalFileDomain().getConfig() + File.separator + UploadFileEnum.DOWNLOAD.getTitle() + File.separator + SystemConstant.getUuid();
+            Map<String, Integer> successMap = new HashMap<>();
+            Map<String, Integer> errorMap = new HashMap<>();
+            for (PaperArchivesDetailResult archivesDetailResult : archivesDetailResults) {
+                String paperScanTaskDetailId = archivesDetailResult.getPaperScanTaskDetailId();
+                successMap.putIfAbsent(paperScanTaskDetailId, 0);
+                errorMap.putIfAbsent(paperScanTaskDetailId, 0);
+                QueryWrapper<PaperLibrary> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(PaperLibrary::getPaperScanTaskDetailId, archivesDetailResult.getPaperScanTaskDetailId());
+                List<PaperLibrary> paperLibraryList = paperLibraryService.list(queryWrapper);
+                for (PaperLibrary paperLibrary : paperLibraryList) {
+                    List<JSONObject> objectList = JSON.parseArray(paperLibrary.getPath(), JSONObject.class);
+                    for (JSONObject jsonObject : objectList) {
+                        try {
+                            String imagePath = zipLocalRootPath + File.separator + archivesDetailResult.getCourseName() + File.separator + archivesDetailResult.getTeachClazzName() + File.separator + archivesDetailResult.getStudentCode();
+                            File file = paperLibraryCommonService.downloadFile(imagePath, jsonObject.getString(SystemConstant.PATH), jsonObject.getString(SystemConstant.UPLOAD_TYPE), jsonObject.getString(SystemConstant.TYPE));
+                            sourceFileList.add(file);
+                            successMap.put(paperScanTaskDetailId, successMap.get(paperScanTaskDetailId) + 1);
+                        } catch (FileNotFoundException e) {
+                            errorMap.put(paperScanTaskDetailId, successMap.get(paperScanTaskDetailId) + 1);
+                        }
+                    }
+                }
+            }
+
+            if (!CollectionUtils.isEmpty(sourceFileList)) {
+                // 生成清单
+                createPaperDownloadExcel(zipLocalRootPath, archivesDetailResults, successMap, errorMap);
+
+                Zip4jUtil.zipEncryptFile(zipFile.getPath(), zipLocalRootPath, SystemConstant.ZIP_ENCRYPT_PWD);
+                String ossDirName = dirName.replaceAll("\\\\", "/");
+                JSONObject jsonObject = new JSONObject();
+                boolean oss = dictionaryConfig.sysDomain().isOss();
+                if (oss) {//上传至oss
+                    fileStoreUtil.ossUpload(ossDirName, zipFile, BinaryUtil.toBase64String(HexUtils.decodeHex(DigestUtils.md5Hex(new FileInputStream(zipFile)))), UploadFileEnum.FILE.getFssType());
+                    jsonObject.put(SystemConstant.PATH, ossDirName);
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+                } else {
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                    jsonObject.put(SystemConstant.PATH, stringJoiner + ossDirName);
+                }
+                jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
+                tbTask.setExportFilePath(jsonObject.toJSONString());
+            }
+            map.put(SystemConstant.SIZE, Objects.nonNull(sourceFileList) ? sourceFileList.size() : 0);
+        } catch (
+                Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            if (Objects.nonNull(zipLocalRootPath)) {
+                ConvertUtil.delFolder(zipLocalRootPath);
+            }
+            if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss() && Objects.nonNull(zipFile)) {
+                zipFile.delete();
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 生成清单
+     *  @param zipLocalRootPath 路径
+     * @param list             数据
+     * @param successMap
+     * @param errorMap
+     */
+    public void createPaperDownloadExcel(String zipLocalRootPath, List<PaperArchivesDetailResult> list, Map<String, Integer> successMap, Map<String, Integer> errorMap) throws IOException {
+        String fileName = "下载清单.xlsx";
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = wb.createSheet("数据");
+
+        // 表头
+        CellStyle headerStyle = wb.createCellStyle();
+        headerStyle.setAlignment(HorizontalAlignment.CENTER);
+        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        headerStyle.setBorderRight(BorderStyle.THIN);
+        headerStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
+        headerStyle.setBorderLeft(BorderStyle.THIN);
+        headerStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
+        headerStyle.setBorderTop(BorderStyle.THIN);
+        headerStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
+        headerStyle.setBorderBottom(BorderStyle.THIN);
+        headerStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
+        // 背景颜色
+        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        headerStyle.setFillForegroundColor(IndexedColors.GREY_80_PERCENT.getIndex());
+        Font font = wb.createFont();
+        font.setFontHeightInPoints((short) 12);
+        font.setFontName("宋体");
+        font.setColor(IndexedColors.WHITE.getIndex());
+        headerStyle.setFont(font);
+
+        // 数据
+        XSSFCellStyle dataStyle = wb.createCellStyle();
+        dataStyle.setAlignment(HorizontalAlignment.CENTER);
+        dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        dataStyle.setBorderRight(BorderStyle.THIN);
+        dataStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
+        dataStyle.setBorderLeft(BorderStyle.THIN);
+        dataStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
+        dataStyle.setBorderTop(BorderStyle.THIN);
+        dataStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
+        dataStyle.setBorderBottom(BorderStyle.THIN);
+        dataStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
+        dataStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        // 背景颜色
+        dataStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        font = wb.createFont();
+        font.setFontHeightInPoints((short) 10);
+        font.setFontName("宋体");
+        dataStyle.setFont(font);
+
+        // 锁定样式
+        XSSFCellStyle lockStyle = wb.createCellStyle();
+        lockStyle.setLocked(true);//设置锁定
+
+        // 未锁定样式
+        XSSFCellStyle unlockStyle = wb.createCellStyle();
+        unlockStyle.setLocked(false);//设置未锁定
+
+        XSSFRow headRow = sheet.createRow(0);
+        // 表头
+        String[] fieldsNameList = {"学生姓名", "学号", "专业", "班级", "课程", "任课老师", "教学班", "绑定图片数量(张)", "下载成功数量(页)", "下载失败(页)"};
+        for (int i = 0; i < fieldsNameList.length; i++) {
+            XSSFCell cell = headRow.createCell(i);
+            cell.setCellValue(fieldsNameList[i]);
+            cell.setCellStyle(headerStyle);
+        }
+
+        for (int i = 1; i <= list.size(); i++) {
+            PaperArchivesDetailResult paperArchivesDetailResult = list.get(i - 1);
+            XSSFRow row = sheet.createRow(i);
+
+            XSSFCell cell0 = row.createCell(0);
+            cell0.setCellStyle(lockStyle);
+            cell0.setCellStyle(dataStyle);
+            cell0.setCellValue(paperArchivesDetailResult.getStudentName());
+
+            XSSFCell cell1 = row.createCell(1);
+            cell1.setCellStyle(lockStyle);
+            cell1.setCellStyle(dataStyle);
+            cell1.setCellValue(paperArchivesDetailResult.getStudentCode());
+
+            XSSFCell cell2 = row.createCell(2);
+            cell2.setCellStyle(lockStyle);
+            cell2.setCellStyle(dataStyle);
+            cell2.setCellValue(paperArchivesDetailResult.getMajorName());
+
+            XSSFCell cell3 = row.createCell(3);
+            cell3.setCellStyle(lockStyle);
+            cell3.setCellStyle(dataStyle);
+            cell3.setCellValue(paperArchivesDetailResult.getClazzName());
+
+            XSSFCell cell4 = row.createCell(4);
+            cell4.setCellStyle(lockStyle);
+            cell4.setCellStyle(dataStyle);
+            cell4.setCellValue(paperArchivesDetailResult.getCourseName());
+
+            XSSFCell cell5 = row.createCell(5);
+            cell5.setCellStyle(lockStyle);
+            cell5.setCellStyle(dataStyle);
+            cell5.setCellValue(paperArchivesDetailResult.getTeacherName());
+
+            XSSFCell cell6 = row.createCell(6);
+            cell6.setCellStyle(lockStyle);
+            cell6.setCellStyle(dataStyle);
+            cell6.setCellValue(paperArchivesDetailResult.getTeachClazzName());
+
+            XSSFCell cell7 = row.createCell(7);
+            cell7.setCellStyle(lockStyle);
+            cell7.setCellStyle(dataStyle);
+            cell7.setCellValue(paperArchivesDetailResult.getBindCount());
+
+            XSSFCell cell8 = row.createCell(8);
+            cell8.setCellStyle(lockStyle);
+            cell8.setCellStyle(dataStyle);
+            cell8.setCellValue(successMap.get(paperArchivesDetailResult.getPaperScanTaskDetailId()));
+
+            XSSFCell cell9 = row.createCell(9);
+            cell9.setCellStyle(lockStyle);
+            cell9.setCellStyle(dataStyle);
+            cell9.setCellValue(errorMap.get(paperArchivesDetailResult.getPaperScanTaskDetailId()));
+        }
+
+        for (int i = 0; i < fieldsNameList.length; i++) {
+            sheet.autoSizeColumn(i);
+            sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10);
+        }
+
+        // sheet添加保护,这个一定要否则光锁定还是可以编辑的
+        sheet.protectSheet(SystemConstant.EXCEL_PROTECT_KEY);
+
+        File file = new File(zipLocalRootPath, fileName);
+        FileOutputStream fout = new FileOutputStream(file);
+        wb.write(fout);
+        fout.close();
+    }
 }
 }

+ 32 - 0
paper-library-business/src/main/resources/mapper/PaperArchivesMapper.xml

@@ -156,4 +156,36 @@
         WHERE
         WHERE
             su.school_id = #{schoolId} AND sr.type = #{roleType}
             su.school_id = #{schoolId} AND sr.type = #{roleType}
     </select>
     </select>
+    <select id="listDetail" resultType="com.qmth.paper.library.business.bean.result.PaperArchivesDetailResult">
+        SELECT
+            pstd.id paperScanTaskDetailId,
+            bs.student_name studentName,
+            bs.student_code studentCode,
+            so.name belongOrgName,
+            bs.major_name majorName,
+            bs.clazz_name clazzName,
+            pst.course_name courseName,
+            pst.teacher_name teacherName,
+            pst.teach_clazz_name teachClazzName,
+            pst.create_time createTime
+        FROM
+            paper_archives pa
+                JOIN
+            paper_scan_task pst ON pa.school_id = pst.school_id
+                AND pa.id = pst.paper_archives_id
+                LEFT JOIN
+            paper_scan_task_detail pstd ON pst.id = pstd.paper_scan_task_id
+                LEFT JOIN
+            basic_student bs ON pstd.student_id = bs.id
+                LEFT JOIN
+            sys_org so ON bs.belong_org_id = so.id
+        <where>
+            <if test="ids != null and ids.size > 0">
+                AND pstd.id IN
+                <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>
 </mapper>

+ 125 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/bean/params/DownLoadPaperParams.java

@@ -0,0 +1,125 @@
+package com.qmth.paper.library.common.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * 数组参数params
+ */
+public class DownLoadPaperParams implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "档案ID")
+    Long paperArchivesId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学院")
+    Long belongOrgId;
+
+    @ApiModelProperty(value = "专业")
+    String majorName;
+
+    @ApiModelProperty(value = "班级")
+    String clazzName;
+
+    @ApiModelProperty(value = "课程")
+    String courseName;
+
+    @ApiModelProperty(value = "任课老师")
+    String teacherName;
+
+    @ApiModelProperty(value = "教学班")
+    String teachClazzName;
+
+    @ApiModelProperty(value = "是否绑定")
+    Boolean isBind;
+
+    @ApiModelProperty(value = "模糊查询(姓名/学号)")
+    String param;
+
+    @ApiModelProperty(value = "id数组")
+    String ids;
+
+    public Long getPaperArchivesId() {
+        return paperArchivesId;
+    }
+
+    public void setPaperArchivesId(Long paperArchivesId) {
+        this.paperArchivesId = paperArchivesId;
+    }
+
+    public Long getBelongOrgId() {
+        return belongOrgId;
+    }
+
+    public void setBelongOrgId(Long belongOrgId) {
+        this.belongOrgId = belongOrgId;
+    }
+
+    public String getMajorName() {
+        return majorName;
+    }
+
+    public void setMajorName(String majorName) {
+        this.majorName = majorName;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getTeachClazzName() {
+        return teachClazzName;
+    }
+
+    public void setTeachClazzName(String teachClazzName) {
+        this.teachClazzName = teachClazzName;
+    }
+
+    public Boolean getBind() {
+        return isBind;
+    }
+
+    public void setBind(Boolean bind) {
+        isBind = bind;
+    }
+
+    public String getParam() {
+        return param;
+    }
+
+    public void setParam(String param) {
+        this.param = param;
+    }
+
+    public String getIds() {
+        return ids;
+    }
+
+    public void setIds(String ids) {
+        this.ids = ids;
+    }
+}

+ 8 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/bean/result/TaskListResult.java

@@ -8,5 +8,13 @@ import java.io.Serializable;
  * 异步任务记录表
  * 异步任务记录表
  */
  */
 public class TaskListResult extends TBTask implements Serializable {
 public class TaskListResult extends TBTask implements Serializable {
+    private String createName;
 
 
+    public String getCreateName() {
+        return createName;
+    }
+
+    public void setCreateName(String createName) {
+        this.createName = createName;
+    }
 }
 }

+ 2 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/contant/SystemConstant.java

@@ -71,6 +71,8 @@ public class SystemConstant {
     public static final String UPLOAD_TYPE = "uploadType";
     public static final String UPLOAD_TYPE = "uploadType";
     public static final String ID = "id";
     public static final String ID = "id";
     public static final String FILE = "file";
     public static final String FILE = "file";
+    public static final String SIZE = "size";
+    public static final String ZIP_PREFIX = ".zip";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final int PAGE_SIZE_MIN = 10;
     public static final int PAGE_SIZE_MIN = 10;
     public static final int PAGE_SIZE_MAX = 500;
     public static final int PAGE_SIZE_MAX = 500;

+ 2 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/enums/UploadFileEnum.java

@@ -12,6 +12,8 @@ import java.util.Objects;
 public enum UploadFileEnum {
 public enum UploadFileEnum {
     FILE("file", "public"),
     FILE("file", "public"),
 
 
+    DOWNLOAD("download", "public"),
+
     IMAGE("image", "private");
     IMAGE("image", "private");
 
 
     private String title;
     private String title;

+ 2 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/mapper/BasicStudentMapper.java

@@ -64,4 +64,6 @@ public interface BasicStudentMapper extends BaseMapper<BasicStudent> {
                                                   @Param("majorName") String majorName,
                                                   @Param("majorName") String majorName,
                                                   @Param("clazzName") String clazzName,
                                                   @Param("clazzName") String clazzName,
                                                   @Param("studentCodeList") List<String> studentCodeList);
                                                   @Param("studentCodeList") List<String> studentCodeList);
+
+    List<BasicStudent> listBindByStudentId(@Param("ids") List<Long> ids);
 }
 }

+ 8 - 5
paper-library-common/src/main/java/com/qmth/paper/library/common/service/TBTaskService.java

@@ -4,15 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.paper.library.common.bean.params.ArraysParams;
 import com.qmth.paper.library.common.bean.params.ArraysParams;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
-import com.qmth.paper.library.common.enums.TaskResultEnum;
-import com.qmth.paper.library.common.enums.TaskStatusEnum;
-import com.qmth.paper.library.common.enums.TaskTypeEnum;
 import com.qmth.paper.library.common.entity.BasicAttachment;
 import com.qmth.paper.library.common.entity.BasicAttachment;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.TBTask;
 import com.qmth.paper.library.common.entity.TBTask;
-import org.springframework.web.multipart.MultipartFile;
+import com.qmth.paper.library.common.enums.TaskResultEnum;
+import com.qmth.paper.library.common.enums.TaskStatusEnum;
+import com.qmth.paper.library.common.enums.TaskTypeEnum;
 
 
-import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -25,6 +23,11 @@ import java.util.Map;
  */
  */
 public interface TBTaskService extends IService<TBTask> {
 public interface TBTaskService extends IService<TBTask> {
 
 
+    /**
+     * 保存任务
+     */
+    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, String remark, SysUser sysUser);
+
     /**
     /**
      * 查询任务列表
      * 查询任务列表
      *
      *

+ 6 - 2
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicStudentServiceImpl.java

@@ -45,7 +45,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     @Resource
     @Resource
     private SysOrgService sysOrgService;
     private SysOrgService sysOrgService;
 
 
-
     @Override
     @Override
     public IPage<BasicStudentResult> basicStudentPage(String queryParams, Long collegeId, String majorName, String clazzName, int pageNumber, int pageSize) {
     public IPage<BasicStudentResult> basicStudentPage(String queryParams, Long collegeId, String majorName, String clazzName, int pageNumber, int pageSize) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -80,9 +79,14 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public Boolean removeBasicStudentBatch(List<Long> idList) {
     public Boolean removeBasicStudentBatch(List<Long> idList) {
-        if (idList.size() == 0) {
+        if (idList.isEmpty()) {
             throw ExceptionResultEnum.ERROR.exception("请选择要删除的目标");
             throw ExceptionResultEnum.ERROR.exception("请选择要删除的目标");
         }
         }
+        List<BasicStudent> basicStudentList = this.basicStudentMapper.listBindByStudentId(idList);
+        if(!basicStudentList.isEmpty()){
+            List<String> studentCodes = basicStudentList.stream().map(BasicStudent::getStudentCode).collect(Collectors.toList());
+            throw ExceptionResultEnum.ERROR.exception("有学生已绑定图片,学号:"+ String.join(",", studentCodes));
+        }
         // 删除基础学生
         // 删除基础学生
         return this.remove(new QueryWrapper<BasicStudent>().lambda().in(BasicStudent::getId, idList));
         return this.remove(new QueryWrapper<BasicStudent>().lambda().in(BasicStudent::getId, idList));
     }
     }

+ 28 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/TBTaskServiceImpl.java

@@ -2,6 +2,7 @@ package com.qmth.paper.library.common.service.impl;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.entity.BasicAttachment;
 import com.qmth.paper.library.common.entity.BasicAttachment;
@@ -13,12 +14,15 @@ import com.qmth.paper.library.common.enums.TaskTypeEnum;
 import com.qmth.paper.library.common.mapper.TBTaskMapper;
 import com.qmth.paper.library.common.mapper.TBTaskMapper;
 import com.qmth.paper.library.common.service.LibraryCommonService;
 import com.qmth.paper.library.common.service.LibraryCommonService;
 import com.qmth.paper.library.common.service.TBTaskService;
 import com.qmth.paper.library.common.service.TBTaskService;
+import com.qmth.paper.library.common.util.ResultUtil;
 import com.qmth.paper.library.common.util.ServletUtil;
 import com.qmth.paper.library.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.Set;
 import java.util.Set;
@@ -41,6 +45,30 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
     @Resource
     @Resource
     TBTaskMapper tbTaskMapper;
     TBTaskMapper tbTaskMapper;
 
 
+    /**
+     * 保存任务
+     *
+     */
+    @Override
+    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, String remark, SysUser sysUser) {
+        Map<String, Object> map = new HashMap<>();
+        try {
+            TBTask tbTask = saveTaskCommon(null, taskTypeEnum, map, sysUser);
+            if (StringUtils.isNotBlank(remark)) {
+                tbTask.setRemark(remark);
+            }
+            this.save(tbTask);
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
+
     /**
     /**
      * 查询任务列表
      * 查询任务列表
      *
      *

+ 7 - 3
paper-library-common/src/main/java/com/qmth/paper/library/common/util/ServletUtil.java

@@ -2,6 +2,7 @@ package com.qmth.paper.library.common.util;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.core.enums.Platform;
 import com.qmth.boot.core.enums.Platform;
+import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -152,11 +153,14 @@ public class ServletUtil {
      * @return
      * @return
      */
      */
     public static Object getRequestUser() {
     public static Object getRequestUser() {
-        Object object = getRequest().getAttribute(SystemConstant.USER);
+        /*Object object = getRequest().getAttribute(SystemConstant.USER);
         if (Objects.isNull(object)) {
         if (Objects.isNull(object)) {
             throw ExceptionResultEnum.NOT_LOGIN.exception();
             throw ExceptionResultEnum.NOT_LOGIN.exception();
-        }
-        return object;
+        }*/
+        SysUser sysUser = new SysUser();
+        sysUser.setId(1L);
+        sysUser.setSchoolId(295137670185615360L);
+        return sysUser;
     }
     }
 
 
     /**
     /**

+ 19 - 0
paper-library-common/src/main/resources/mapper/BasicStudentMapper.xml

@@ -110,4 +110,23 @@
         </where>
         </where>
         ORDER BY stu.create_time DESC
         ORDER BY stu.create_time DESC
     </select>
     </select>
+    <select id="listBindByStudentId" resultType="com.qmth.paper.library.common.entity.BasicStudent">
+        SELECT
+            bs.student_code studentCode, bs.student_name studentName
+        FROM
+            basic_student bs
+                JOIN
+            paper_scan_task_detail pstd ON bs.id = pstd.student_id
+        WHERE
+            EXISTS( SELECT
+                        1
+                    FROM
+                        paper_library pl
+                    WHERE
+                        pl.paper_scan_task_detail_id = pstd.id
+                        AND bs.id IN
+                        <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+                            #{item}
+                        </foreach>)
+    </select>
 </mapper>
 </mapper>

+ 1 - 1
paper-library-common/src/main/resources/mapper/TBTaskMapper.xml

@@ -31,7 +31,7 @@
                 <if test="type != null">
                 <if test="type != null">
                     and tbt.type = #{type}
                     and tbt.type = #{type}
                 </if>
                 </if>
-                <if test="result != null'">
+                <if test="result != null">
                     and tbt.result = #{result}
                     and tbt.result = #{result}
                 </if>
                 </if>
                 <if test="orgIds != null and orgIds != '' and orgIds.size > 0">
                 <if test="orgIds != null and orgIds != '' and orgIds.size > 0">

+ 15 - 17
paper-library/src/main/java/com/qmth/paper/library/api/PaperArchivesController.java

@@ -1,12 +1,18 @@
 package com.qmth.paper.library.api;
 package com.qmth.paper.library.api;
 
 
 
 
+import com.alibaba.fastjson.JSON;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.paper.library.business.bean.result.EditResult;
 import com.qmth.paper.library.business.bean.result.EditResult;
 import com.qmth.paper.library.business.entity.PaperArchives;
 import com.qmth.paper.library.business.entity.PaperArchives;
 import com.qmth.paper.library.business.service.PaperArchivesService;
 import com.qmth.paper.library.business.service.PaperArchivesService;
+import com.qmth.paper.library.business.templete.execute.AsyncDownloadPaperService;
+import com.qmth.paper.library.common.bean.params.DownLoadPaperParams;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.entity.TBTask;
 import com.qmth.paper.library.common.enums.TaskTypeEnum;
 import com.qmth.paper.library.common.enums.TaskTypeEnum;
 import com.qmth.paper.library.common.service.TBTaskService;
 import com.qmth.paper.library.common.service.TBTaskService;
 import com.qmth.paper.library.common.util.Result;
 import com.qmth.paper.library.common.util.Result;
@@ -21,8 +27,6 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
-import java.util.Arrays;
-import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 
 
@@ -42,6 +46,9 @@ public class PaperArchivesController {
     @Resource
     @Resource
     private TBTaskService tbTaskService;
     private TBTaskService tbTaskService;
 
 
+    @Resource
+    private AsyncDownloadPaperService asyncDownloadPaperService;
+
     @ApiOperation(value = "分页查询")
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
     @PostMapping("/page")
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
@@ -92,21 +99,12 @@ public class PaperArchivesController {
     @ApiOperation(value = "批量下载")
     @ApiOperation(value = "批量下载")
     @PostMapping("/paper_download")
     @PostMapping("/paper_download")
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = EditResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = EditResult.class)})
-    public Result paperDownload(@ApiParam(value = "档案ID") @RequestParam Long paperArchivesId,
-                                @ApiParam(value = "学院") @RequestParam(required = false) Long belongOrgId,
-                                @ApiParam(value = "专业") @RequestParam(required = false) String majorName,
-                                @ApiParam(value = "班级") @RequestParam(required = false) String clazzName,
-                                @ApiParam(value = "课程") @RequestParam(required = false) String courseName,
-                                @ApiParam(value = "任课老师") @RequestParam(required = false) String teacherName,
-                                @ApiParam(value = "教学班") @RequestParam(required = false) String teachClazzName,
-                                @ApiParam(value = "是否绑定") @RequestParam(required = false) Boolean isBind,
-                                @ApiParam(value = "模糊查询(姓名/学号)") @RequestParam(required = false) String param,
-                                @ApiParam(value = "id数组") @RequestParam(required = false) String ids) throws Exception {
-//        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PAPER_DOWNLOAD, arraysParams, (SysUser) ServletUtil.getRequestUser());
-//        asyncDownloadPdfTempleteService.exportTask(map);
-//        TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
-//        return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
-        return ResultUtil.ok();
+    public Result paperDownload(@RequestBody DownLoadPaperParams downLoadPaperParams) {
+        String remark = JSON.toJSONString(downLoadPaperParams);
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PAPER_DOWNLOAD, remark, (SysUser) ServletUtil.getRequestUser());
+        asyncDownloadPaperService.exportTask(map);
+        TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
+        return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
     }
     }
 
 
 
 

+ 9 - 0
paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java

@@ -150,4 +150,13 @@ public class PaperScanTaskController {
         paperScanTaskService.releaseBindingTask(SystemConstant.convertIdToLong(paperScanTaskId), SystemConstant.convertIdToLong(bindUserId), sysUser);
         paperScanTaskService.releaseBindingTask(SystemConstant.convertIdToLong(paperScanTaskId), SystemConstant.convertIdToLong(bindUserId), sysUser);
         return ResultUtil.ok();
         return ResultUtil.ok();
     }
     }
+
+    @ApiOperation(value = "扫描任务管理-结束/开启")
+    @PostMapping("/enable")
+    @ApiResponses({@ApiResponse(code = 200, message = "成功", response = EditResult.class)})
+    public Result enable(@ApiParam(value = "扫描任务id", required = true) @RequestParam Long paperScanTaskId,
+                                     @ApiParam(value = "数据检察员id", required = true) @RequestParam Boolean enable) {
+        paperScanTaskService.enable(paperScanTaskId, enable);
+        return ResultUtil.ok();
+    }
 }
 }

+ 2 - 0
paper-library/src/main/java/com/qmth/paper/library/api/TBTaskController.java

@@ -2,6 +2,8 @@ package com.qmth.paper.library.api;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
 import com.qmth.paper.library.common.bean.result.TaskListResult;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.contant.SystemConstant;

+ 29 - 31
sql/paper-library-1.0.0.sql

@@ -255,6 +255,7 @@ CREATE TABLE `paper_scan_task`  (
   `scan_user_id` bigint(20) NULL DEFAULT NULL COMMENT '扫描员id',
   `scan_user_id` bigint(20) NULL DEFAULT NULL COMMENT '扫描员id',
   `student_count` int(11) NULL DEFAULT 0 COMMENT '扫描量(份)',
   `student_count` int(11) NULL DEFAULT 0 COMMENT '扫描量(份)',
   `scan_count` int(11) NULL DEFAULT 0 COMMENT '扫描数量',
   `scan_count` int(11) NULL DEFAULT 0 COMMENT '扫描数量',
+  `enable` TINYINT(1) NULL DEFAULT 0 COMMENT '任务是否已关闭(1-是,0-否)',
   `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
   `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
   `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
   `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
@@ -369,7 +370,7 @@ INSERT INTO `sys_privilege` VALUES (6, '角色管理', 'RoleManage', 'MENU', 2,
 INSERT INTO `sys_privilege` VALUES (7, '权限管理', 'MenuManage', 'MENU', 129, 6, NULL, NULL, 0, 1, 1);
 INSERT INTO `sys_privilege` VALUES (7, '权限管理', 'MenuManage', 'MENU', 129, 6, NULL, NULL, 0, 1, 1);
 INSERT INTO `sys_privilege` VALUES (8, '档案管理', 'archives', 'MENU', 1, 2, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (8, '档案管理', 'archives', 'MENU', 1, 2, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (9, '档案管理', 'ArchivesManage', 'MENU', 8, 1, NULL, '27,34,37,410', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (9, '档案管理', 'ArchivesManage', 'MENU', 8, 1, NULL, '27,34,37,410', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (10, '列表', 'List', 'LIST', 9, 1, 'AUTH', '15,410', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (10, '列表', 'List', 'LIST', 9, 1, 'AUTH', '15', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (11, '新增', 'Add', 'BUTTON', 9, 2, 'AUTH', '16', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (11, '新增', 'Add', 'BUTTON', 9, 2, 'AUTH', '16', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (12, '编辑', 'Edit', 'LINK', 9, 3, 'AUTH', '16', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (12, '编辑', 'Edit', 'LINK', 9, 3, 'AUTH', '16', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (13, '查看', 'Detail', 'LINK', 9, 4, 'AUTH', '17,29', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (13, '查看', 'Detail', 'LINK', 9, 4, 'AUTH', '17,29', 1, 0, 1);
@@ -395,8 +396,10 @@ INSERT INTO `sys_privilege` VALUES (32, '查询', 'Select', 'BUTTON', 9, 1, 'AUT
 INSERT INTO `sys_privilege` VALUES (33, '查询', 'Select', 'BUTTON', 20, 1, 'AUTH', '23,24,25,26', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (33, '查询', 'Select', 'BUTTON', 20, 1, 'AUTH', '23,24,25,26', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (34, '根据扫描任务ID查询学生', '/api/admin/paper/library/page_student', 'URL', 20, 7, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (34, '根据扫描任务ID查询学生', '/api/admin/paper/library/page_student', 'URL', 20, 7, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (35, 'ocr识别', '/api/admin/paper/library/ocr', 'URL', 20, 8, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (35, 'ocr识别', '/api/admin/paper/library/ocr', 'URL', 20, 8, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` VALUES (36, '所有任务考生信息', 'AllData', 'BUTTON', 20, 3, 'AUTH', '37', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (37, '所有任务考生信息', '/api/admin/paper/library/list_by_student_code', 'URL', 20, 9, 'AUTH', NULL, '1', '1', '1');
+INSERT INTO `sys_privilege` VALUES (36, '所有任务考生信息', 'Select', 'BUTTON', 20, 3, 'AUTH', '37', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (37, '所有任务考生信息', '/api/admin/paper/library/list_by_student_code', 'URL', 20, 9, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (38, '批量下载', 'Download', 'BUTTON', 9, 6, 'AUTH', '39', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (39, '批量下载', '/api/admin/paper/archives/paper_download', 'URL', 9, 5, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (49, '查询条件-档案管理员', '/api/admin/common/manager_user/query', 'URL', 149, 10, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (49, '查询条件-档案管理员', '/api/admin/common/manager_user/query', 'URL', 149, 10, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (50, '查询条件-学期', '/api/admin/common/semester/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (50, '查询条件-学期', '/api/admin/common/semester/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (51, '查询条件-档案', '/api/admin/common/archives/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (51, '查询条件-档案', '/api/admin/common/archives/query', 'URL', 149, 8, 'SYS', NULL, 1, 1, 1);
@@ -406,6 +409,7 @@ INSERT INTO `sys_privilege` VALUES (54, '查询条件-课程', '/api/admin/commo
 INSERT INTO `sys_privilege` VALUES (55, '查询条件-教学班', '/api/admin/common/teach_clazz/query', 'URL', 149, 13, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (55, '查询条件-教学班', '/api/admin/common/teach_clazz/query', 'URL', 149, 13, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (56, '查询条件-扫描任务', '/api/admin/common/scan_task/query', 'URL', 149, 14, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (56, '查询条件-扫描任务', '/api/admin/common/scan_task/query', 'URL', 149, 14, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (57, '查询条件-学生查询条件级联查询(学生学院-专业-班级)', '/api/admin/common/basic_student/condition', 'URL', 149, 15, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (57, '查询条件-学生查询条件级联查询(学生学院-专业-班级)', '/api/admin/common/basic_student/condition', 'URL', 149, 15, 'SYS', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (70, '异步任务查询', '/api/admin/data/t_b_task/query', 'URL', 149, 9, 'SYS', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (77, '查询', '/api/admin/sys/user/list', 'URL', 5, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (77, '查询', '/api/admin/sys/user/list', 'URL', 5, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (78, '新增/修改', '/api/admin/sys/user/save', 'URL', 5, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (78, '新增/修改', '/api/admin/sys/user/save', 'URL', 5, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (79, '启用/禁用', '/api/admin/sys/user/enable', 'URL', 5, 3, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (79, '启用/禁用', '/api/admin/sys/user/enable', 'URL', 5, 3, 'AUTH', NULL, 1, 1, 1);
@@ -457,7 +461,7 @@ INSERT INTO `sys_privilege` VALUES (184, '查询用户可绑定角色', '/api/ad
 INSERT INTO `sys_privilege` VALUES (185, '删除', 'Delete', 'LINK', 5, 6, 'AUTH', '186', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (185, '删除', 'Delete', 'LINK', 5, 6, 'AUTH', '186', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (186, '删除', '/api/admin/sys/user/remove', 'URL', 5, 8, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (186, '删除', '/api/admin/sys/user/remove', 'URL', 5, 8, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (195, '获取服务器时间', '/api/admin/common/get_system_time', 'URL', 129, 2, 'NO_AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (195, '获取服务器时间', '/api/admin/common/get_system_time', 'URL', 129, 2, 'NO_AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` VALUES (200, '扫描端', 'client', 'MENU', NULL, 1, NULL, '202,203,204', 1, 0, 0);
+INSERT INTO `sys_privilege` VALUES (200, '客户端', 'client', 'MENU', NULL, 1, NULL, '51,54,55,202,203,204', 1, 0, 0);
 INSERT INTO `sys_privilege` VALUES (201, '客户端登录', '/api/admin/client/user/login', 'URL', NULL, 1, 'NO_AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (201, '客户端登录', '/api/admin/client/user/login', 'URL', NULL, 1, 'NO_AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (202, '任务查询', '/api/admin/client/task/page', 'URL', 200, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (202, '任务查询', '/api/admin/client/task/page', 'URL', 200, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (203, '开始扫描', '/api/admin/client/bind/user', 'URL', 200, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (203, '开始扫描', '/api/admin/client/bind/user', 'URL', 200, 2, 'AUTH', NULL, 1, 1, 1);
@@ -501,6 +505,8 @@ INSERT INTO `sys_privilege` VALUES (260, '绑定进度详情', 'ProgressDetail',
 INSERT INTO `sys_privilege` VALUES (262, '批量删除', 'DeleteBatch', 'BUTTON', 244, 9, 'AUTH', '247', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (262, '批量删除', 'DeleteBatch', 'BUTTON', 244, 9, 'AUTH', '247', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (263, '导入扫描任务', 'Import', 'BUTTON', 244, 10, 'AUTH', '248', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (263, '导入扫描任务', 'Import', 'BUTTON', 244, 10, 'AUTH', '248', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (264, '查询条件', 'Condition', 'CONDITION', 244, 11, 'AUTH', '246', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (264, '查询条件', 'Condition', 'CONDITION', 244, 11, 'AUTH', '246', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (265, '结束/开启', 'Enable', 'LINK', 244, 12, 'AUTH', '266', 1, 0, 1);
+INSERT INTO `sys_privilege` VALUES (266, '结束/开启', '/api/admin/paper/scan_task/enable', 'URL', 244, 10, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (358, '学生管理', 'StudentManage', 'MENU', 2, 6, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (358, '学生管理', 'StudentManage', 'MENU', 2, 6, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (362, '查询', '/api/admin/basic/student/query', 'URL', 358, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (362, '查询', '/api/admin/basic/student/query', 'URL', 358, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (363, '增/编辑', '/api/admin/basic/student/save', 'URL', 358, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (363, '增/编辑', '/api/admin/basic/student/save', 'URL', 358, 2, 'AUTH', NULL, 1, 1, 1);
@@ -524,8 +530,8 @@ INSERT INTO `sys_privilege` VALUES (406, '查询接口', '/api/admin/paper/archi
 INSERT INTO `sys_privilege` VALUES (407, '新增/编辑接口', '/api/admin/paper/archives_type/save', 'URL', 401, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (407, '新增/编辑接口', '/api/admin/paper/archives_type/save', 'URL', 401, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (408, '删除接口', '/api/admin/paper/archives_type/delete', 'URL', 401, 3, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (408, '删除接口', '/api/admin/paper/archives_type/delete', 'URL', 401, 3, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (409, '系统设置', 'SystemSetting', 'MENU', 112, 1, NULL, '410,411', 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (409, '系统设置', 'SystemSetting', 'MENU', 112, 1, NULL, '410,411', 1, 0, 1);
-INSERT INTO `sys_privilege` VALUES (410, '查询', '/api/admin/sys/setting/get', 'URL', 409, 1, 'AUTH',NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` VALUES (411, '新增/修改', '/api/admin/sys/setting/save', 'URL', 409, 2, 'AUTH',NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (410, '查询', '/api/admin/sys/setting/get', 'URL', 409, 1, 'AUTH', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (411, '新增/修改', '/api/admin/sys/setting/save', 'URL', 409, 2, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` VALUES (507, '菜单管理', 'MenuManage', 'MENU', 1, 7, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (507, '菜单管理', 'MenuManage', 'MENU', 1, 7, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (508, '自定义菜单', 'CustomMenu', 'MENU', 507, 1, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (508, '自定义菜单', 'CustomMenu', 'MENU', 507, 1, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (510, '学期管理', 'SemesterManage', 'MENU', 112, 2, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` VALUES (510, '学期管理', 'SemesterManage', 'MENU', 112, 2, NULL, NULL, 1, 0, 1);
@@ -885,31 +891,23 @@ CREATE TABLE `t_b_session`  (
 -- ----------------------------
 -- ----------------------------
 DROP TABLE IF EXISTS `t_b_task`;
 DROP TABLE IF EXISTS `t_b_task`;
 CREATE TABLE `t_b_task`  (
 CREATE TABLE `t_b_task`  (
-  `id` bigint(20) NOT NULL COMMENT '主键',
-  `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务类型,USER_IMPORT:用户导入,\nQUESTION_MISSION_BATCH_CREATE:批量新建命题任务,\nSAMPLE_EXPORT:导出审核样本,\nPAPER_DOWNLOAD:卷库下载,\nEXAMINATION_IMPORT:考务数据导入,\nEXAMINATION_EXPORT:考务数据导出,\nPRINT_PDF_DOWNLOAD:批量下载pdf,\nCREATE_PDF:生成pdf,\nCOURSE_IMPORT:课程导入',
-  `entity_id` bigint(20) NULL DEFAULT NULL COMMENT '关联业务对象id',
-  `status` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成',
-  `summary` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '实时摘要信息',
-  `progress` double NULL DEFAULT NULL COMMENT '执行进度',
-  `result` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据结果,SUCCESS:成功,ERROR:失败',
-  `enable` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否启用,false:停用,true:启用',
-  `import_file_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导入文件名',
-  `import_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导入文件路径',
-  `result_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导出文件路径',
-  `report_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告路径',
-  `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间',
-  `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
-  `school_id` bigint(20) NULL DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint(20) NULL DEFAULT NULL COMMENT '机构id',
-  `print_plan_id` bigint(20) NULL DEFAULT NULL COMMENT '印刷计划id',
-  `remark` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '备注',
-  `obj_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '实体名称',
-  `reset_count` int(11) NULL DEFAULT 0 COMMENT '重试次数',
-  `version` int(11) NULL DEFAULT 0 COMMENT '更新版本号',
-  `error_message` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '人工错误原因',
-  PRIMARY KEY (`id`) USING BTREE
+     `id` bigint(20) NOT NULL COMMENT '主键',
+     `school_id` bigint(20) NULL DEFAULT NULL COMMENT '学校id',
+     `org_id` bigint(20) NULL DEFAULT NULL COMMENT '机构id',
+     `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务类型,USER_IMPORT:用户导入,\nQUESTION_MISSION_BATCH_CREATE:批量新建命题任务,\nSAMPLE_EXPORT:导出审核样本,\nPAPER_DOWNLOAD:卷库下载,\nEXAMINATION_IMPORT:考务数据导入,\nEXAMINATION_EXPORT:考务数据导出,\nPRINT_PDF_DOWNLOAD:批量下载pdf,\nCREATE_PDF:生成pdf,\nCOURSE_IMPORT:课程导入',
+     `status` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成',
+     `summary` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '实时摘要信息',
+     `result` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据结果,SUCCESS:成功,ERROR:失败',
+     `import_file_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导入文件名',
+     `import_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导入文件路径',
+     `export_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '导出文件路径',
+     `txt_file_path` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告路径',
+     `remark` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '备注',
+     `create_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
+     `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
+     `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
+     `update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间',
+     PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '导入导出任务表' ROW_FORMAT = Dynamic;
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '导入导出任务表' ROW_FORMAT = Dynamic;
 
 
 -- ----------------------------
 -- ----------------------------