Selaa lähdekoodia

加入任务列表

wangliang 4 vuotta sitten
vanhempi
commit
cc3b4f2eb8
26 muutettua tiedostoa jossa 1464 lisäystä ja 38 poistoa
  1. 0 27
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/EditResultBean.java
  2. 41 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/query/ChooseParams.java
  3. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/query/LoginParam.java
  4. 190 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TaskListResult.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicSchool.java
  6. 270 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TBTask.java
  7. 91 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TGError.java
  8. 40 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ChooseTypeEnum.java
  9. 42 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskResultEnum.java
  10. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskStatusEnum.java
  11. 52 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskTypeEnum.java
  12. 27 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TBTaskMapper.java
  13. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TGErrorMapper.java
  14. 29 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicAttachmentService.java
  15. 81 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskService.java
  16. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TGErrorService.java
  17. 163 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicAttachmentServiceImpl.java
  18. 145 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBTaskServiceImpl.java
  19. 20 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TGErrorServiceImpl.java
  20. 52 0
      distributed-print-business/src/main/resources/mapper/TBTaskMapper.xml
  21. 5 0
      distributed-print-business/src/main/resources/mapper/TGErrorMapper.xml
  22. 1 0
      distributed-print-common/src/main/java/com/qmth/distributed/print/common/contant/SystemConstant.java
  23. 2 0
      distributed-print-common/src/main/java/com/qmth/distributed/print/common/enums/ExceptionResultEnum.java
  24. 47 8
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  25. 76 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskController.java
  26. 1 0
      distributed-print/src/main/resources/application.properties

+ 0 - 27
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/EditResultBean.java

@@ -1,27 +0,0 @@
-package com.qmth.distributed.print.business.bean;
-
-/**
- * @Description: 新增/更新返回值
- * @Author: CaoZixuan
- * @Date: 2021-03-22
- */
-public class EditResultBean {
-    private Long id;
-    private Long updateTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Long updateTime) {
-        this.updateTime = updateTime;
-    }
-}

+ 41 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/query/ChooseParams.java

@@ -0,0 +1,41 @@
+package com.qmth.distributed.print.business.bean.query;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.ChooseTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 选择参数params
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/24
+ */
+public class ChooseParams implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "数组id")
+    Long[] ids;
+
+    @ApiModelProperty(value = "选择类型")
+    ChooseTypeEnum type;
+
+    public Long[] getIds() {
+        return ids;
+    }
+
+    public void setIds(Long[] ids) {
+        this.ids = ids;
+    }
+
+    public ChooseTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(ChooseTypeEnum type) {
+        this.type = type;
+    }
+}

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/query/LoginParam.java

@@ -25,6 +25,18 @@ public class LoginParam {
     @NotBlank(message = "请输入验证码")
     private String code;
 
+    @ApiModelProperty(value = "学校代码")
+    @NotBlank(message = "学校代码不能为空")
+    private String schoolCode;
+
+    public String getSchoolCode() {
+        return schoolCode;
+    }
+
+    public void setSchoolCode(String schoolCode) {
+        this.schoolCode = schoolCode;
+    }
+
     public String getLoginName() {
         return loginName;
     }

+ 190 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TaskListResult.java

@@ -0,0 +1,190 @@
+package com.qmth.distributed.print.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.enums.TaskTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * @Description: 任务列表result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/25
+ */
+public class TaskListResult implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "id")
+    Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学校id")
+    Long schoolId;
+
+    @ApiModelProperty(value = "学校代码")
+    String schoolCode;
+
+    @ApiModelProperty(value = "学校名称")
+    String schoolName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "项目id")
+    Long projectId;
+
+    @ApiModelProperty(value = "项目代码")
+    String projectCode;
+
+    @ApiModelProperty(value = "项目名称")
+    String projectName;
+
+    @ApiModelProperty(value = "任务类型,IMPORT_STUDENT_PHOTO:照片导入,EXPORT_STUDENT_PHOTO:照片导出,IMPORT_EXAM_STUDENT:考生导入,EXPORT_EXAM_STUDENT:考生导出,IMPORT_BATCH_PAPER:试卷批量导入,EXPORT_BATCH_PAPER:试卷批量导出,IMPORT_CUSTOM_TEMPLATE:模版批量导入,EXPORT_CUSTOM_TEMPLATE:模版批量导出,DOWNLOAD_BOX_STICKER:箱贴下载")
+    String type;
+
+    @ApiModelProperty(value = "任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成")
+    String status;
+
+    @ApiModelProperty(value = "数据结果,SUCCESS:成功,ERROR:失败")
+    String result;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建人id")
+    Long createId;
+
+    @ApiModelProperty(value = "创建人")
+    String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    Long createTime;
+
+    @ApiModelProperty(value = "是否有导出文件")
+    Boolean hasResultFile;
+
+    @ApiModelProperty(value = "是否有报告文件")
+    Boolean hasReportFile;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getSchoolCode() {
+        return schoolCode;
+    }
+
+    public void setSchoolCode(String schoolCode) {
+        this.schoolCode = schoolCode;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+
+    public Long getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(Long projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getProjectCode() {
+        return projectCode;
+    }
+
+    public void setProjectCode(String projectCode) {
+        this.projectCode = projectCode;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getType() {
+        return TaskTypeEnum.valueOf(type).getTitle();
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getStatus() {
+        return Objects.nonNull(status) ? TaskStatusEnum.valueOf(status).getTitle() : status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getResult() {
+        return Objects.nonNull(result) ? TaskResultEnum.valueOf(result).getTitle() : null;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public Long getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
+
+    public String getCreateName() {
+        return createName;
+    }
+
+    public void setCreateName(String createName) {
+        this.createName = createName;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public Boolean getHasResultFile() {
+        return hasResultFile;
+    }
+
+    public void setHasResultFile(Boolean hasResultFile) {
+        this.hasResultFile = hasResultFile;
+    }
+
+    public Boolean getHasReportFile() {
+        return hasReportFile;
+    }
+
+    public void setHasReportFile(Boolean hasReportFile) {
+        this.hasReportFile = hasReportFile;
+    }
+}

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

@@ -21,7 +21,7 @@ public class BasicSchool extends BaseEntity implements Serializable {
 
     private String code;
     private String name;
-    private Boolean enable = true;
+    private Boolean enable;
     @TableField("access_key")
     private String accessKey;
     @TableField("access_secret")

+ 270 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TBTask.java

@@ -0,0 +1,270 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.enums.TaskTypeEnum;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 导入导出任务表
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-19
+ */
+@ApiModel(value = "TBTask对象", description = "导入导出任务表")
+public class TBTask implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "任务类型,USER_IMPORT:用户导入,QUESTION_MISSION_BATCH_CREATE:批量新建命题任务,SAMPLE_EXPORT:导出审核样本,PAPER_DOWNLOAD:卷库下载,EXAMINATION_IMPORT:考务数据导入,EXAMINATION_EXPORT:考务数据导出,PRINT_PDF_DOWNLOAD:批量下载pdf")
+    @TableField(value = "type")
+    private TaskTypeEnum type;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "关联业务对象id")
+    @TableField(value = "entity_id")
+    private Long entityId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学校id")
+    @TableField(value = "school_id")
+    private Long schoolId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "机构id")
+    @TableField(value = "org_id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成")
+    @TableField(value = "status")
+    private TaskStatusEnum status;
+
+    @ApiModelProperty(value = "实时摘要信息")
+    @TableField(value = "summary")
+    private String summary;
+
+    @ApiModelProperty(value = "执行进度")
+    @TableField(value = "progress")
+    private Double progress;
+
+    @ApiModelProperty(value = "数据结果,SUCCESS:成功,ERROR:失败")
+    @TableField(value = "result")
+    private TaskResultEnum result;
+
+    @ApiModelProperty(value = "是否启用,false:停用,true:启用")
+    @TableField(value = "enable")
+    private Boolean enable;
+
+    @ApiModelProperty(value = "导入文件名")
+    @TableField(value = "import_file_name")
+    private String importFileName;
+
+    @ApiModelProperty(value = "导入文件路径")
+    @TableField(value = "import_file_path")
+    private String importFilePath;
+
+    @ApiModelProperty(value = "导出文件路径")
+    @TableField(value = "result_file_path")
+    private String resultFilePath;
+
+    @ApiModelProperty(value = "报告路径")
+    @TableField(value = "report_file_path")
+    private String reportFilePath;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)//新增执行
+    private Long createTime;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建人id")
+    @TableField("create_id")
+    private Long createId;
+
+    public TBTask() {
+
+    }
+
+    public TBTask(TaskTypeEnum type, Long entityId, TaskStatusEnum status, String summary, String importFileName, String importFilePath, Long createId, Long schoolId) {
+        this.id = SystemConstant.getDbUuid();
+        this.type = type;
+        this.entityId = entityId;
+        this.status = status;
+        this.summary = summary;
+        this.importFileName = importFileName;
+        this.importFilePath = importFilePath;
+        this.createId = createId;
+        this.createTime = System.currentTimeMillis();
+        this.schoolId = schoolId;
+    }
+
+    public TBTask(TaskTypeEnum type, TaskStatusEnum status, String summary, String importFileName, String importFilePath, Long createId, Long schoolId) {
+        this.id = SystemConstant.getDbUuid();
+        this.type = type;
+        this.status = status;
+        this.summary = summary;
+        this.importFileName = importFileName;
+        this.importFilePath = importFilePath;
+        this.createId = createId;
+        this.createTime = System.currentTimeMillis();
+        this.schoolId = schoolId;
+    }
+
+    public TBTask(TaskTypeEnum type, TaskStatusEnum status, String importFileName, String importFilePath, Long createId, Long schoolId) {
+        this.id = SystemConstant.getDbUuid();
+        this.type = type;
+        this.status = status;
+        this.importFileName = importFileName;
+        this.importFilePath = importFilePath;
+        this.createId = createId;
+        this.createTime = System.currentTimeMillis();
+        this.schoolId = schoolId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getEntityId() {
+        return entityId;
+    }
+
+    public void setEntityId(Long entityId) {
+        this.entityId = entityId;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public Double getProgress() {
+        return progress;
+    }
+
+    public void setProgress(Double progress) {
+        this.progress = progress;
+    }
+
+    public TaskTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(TaskTypeEnum type) {
+        this.type = type;
+    }
+
+    public TaskStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(TaskStatusEnum status) {
+        this.status = status;
+    }
+
+    public TaskResultEnum getResult() {
+        return result;
+    }
+
+    public void setResult(TaskResultEnum result) {
+        this.result = result;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getImportFileName() {
+        return importFileName;
+    }
+
+    public void setImportFileName(String importFileName) {
+        this.importFileName = importFileName;
+    }
+
+    public String getImportFilePath() {
+        return importFilePath;
+    }
+
+    public void setImportFilePath(String importFilePath) {
+        this.importFilePath = importFilePath;
+    }
+
+    public String getResultFilePath() {
+        return resultFilePath;
+    }
+
+    public void setResultFilePath(String resultFilePath) {
+        this.resultFilePath = resultFilePath;
+    }
+
+    public String getReportFilePath() {
+        return reportFilePath;
+    }
+
+    public void setReportFilePath(String reportFilePath) {
+        this.reportFilePath = reportFilePath;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
+}

+ 91 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TGError.java

@@ -0,0 +1,91 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 全局异常错误信息表
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-24
+ */
+@ApiModel(value = "TGError对象", description = "全局异常错误信息表")
+public class TGError implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id")
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "实体id")
+    @TableField("obj_id")
+    private Long objId;
+
+    @ApiModelProperty(value = "实时摘要信息")
+    @TableField("summary")
+    private String summary;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)//新增执行
+    private Long createTime;
+
+    public TGError() {
+
+    }
+
+    public TGError(Long objId, String summary) {
+        this.id = SystemConstant.getDbUuid();
+        this.objId = objId;
+        this.summary = summary;
+        this.createTime = System.currentTimeMillis();
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getObjId() {
+        return objId;
+    }
+
+    public void setObjId(Long objId) {
+        this.objId = objId;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+}

+ 40 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ChooseTypeEnum.java

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 选择类型enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/31
+ */
+public enum ChooseTypeEnum {
+
+    ALL("全部");
+
+    private String title;
+
+    private ChooseTypeEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        for (ChooseTypeEnum e : ChooseTypeEnum.values()) {
+            if (Objects.equals(value.trim(), e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 42 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskResultEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.distributed.print.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 任务结果enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/29
+ */
+public enum TaskResultEnum {
+
+    SUCCESS("成功"),
+
+    ERROR("失败");
+
+    private String title;
+
+    private TaskResultEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (TaskResultEnum e : TaskResultEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 44 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskStatusEnum.java

@@ -0,0 +1,44 @@
+package com.qmth.distributed.print.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 任务状态enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/29
+ */
+public enum TaskStatusEnum {
+
+    INIT("未开始"),
+
+    RUNNING("进行中"),
+
+    FINISH("已完成");
+
+    private String title;
+
+    private TaskStatusEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (TaskStatusEnum e : TaskStatusEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 52 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskTypeEnum.java

@@ -0,0 +1,52 @@
+package com.qmth.distributed.print.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 任务类型enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/29
+ */
+public enum TaskTypeEnum {
+
+    USER_IMPORT("用户导入"),
+
+    QUESTION_MISSION_BATCH_CREATE("批量新建命题任务"),
+
+    SAMPLE_EXPORT("导出审核样本"),
+
+    PAPER_DOWNLOAD("卷库下载"),
+
+    EXAMINATION_IMPORT("考务数据导入"),
+
+    EXAMINATION_EXPORT("考务数据导出"),
+
+    PRINT_PDF_DOWNLOAD("批量下载pdf");
+
+    private String title;
+
+    private TaskTypeEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (TaskTypeEnum e : TaskTypeEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TBTaskMapper.java

@@ -0,0 +1,27 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.distributed.print.business.bean.result.TaskListResult;
+import com.qmth.distributed.print.business.entity.TBTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 导入导出任务表 Mapper 接口
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-19
+ */
+public interface TBTaskMapper extends BaseMapper<TBTask> {
+
+    public IPage<TaskListResult> query(IPage<Map> iPage,
+                                       @Param("schoolId") Long schoolId,
+                                       @Param("orgId") Long orgId,
+                                       @Param("status") String status,
+                                       @Param("type") String type,
+                                       @Param("result") String result);
+}

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TGErrorMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.entity.TGError;
+
+/**
+ * <p>
+ * 全局异常错误信息表 Mapper 接口
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-24
+ */
+public interface TGErrorMapper extends BaseMapper<TGError> {
+
+}

+ 29 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicAttachmentService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.entity.BasicAttachment;
+import com.qmth.distributed.print.business.enums.UploadFileEnum;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -15,4 +16,32 @@ import org.springframework.web.multipart.MultipartFile;
 public interface BasicAttachmentService extends IService<BasicAttachment> {
 
     BasicAttachment save(MultipartFile file, String md5, Long schoolId, Long userId);
+
+    /**
+     * 保存附件
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @return
+     */
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type);
+
+    /**
+     * 保存附件
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @param objId
+     * @return
+     */
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type, Long objId);
+
+    /**
+     * 删除附件
+     *
+     * @param tbAttachment
+     */
+    public void deleteAttachment(BasicAttachment tbAttachment);
 }

+ 81 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskService.java

@@ -0,0 +1,81 @@
+package com.qmth.distributed.print.business.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.result.TaskListResult;
+import com.qmth.distributed.print.business.entity.TBTask;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.enums.TaskTypeEnum;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 导入导出任务表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-19
+ */
+public interface TBTaskService extends IService<TBTask> {
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @return
+     */
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum);
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param objId
+     * @return
+     */
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Object objId);
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param orgId
+     * @return
+     */
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Long orgId);
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param objId
+     * @param orgId
+     * @return
+     */
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Object objId, Long orgId);
+
+    /**
+     * 查询任务列表
+     *
+     * @param iPage
+     * @param schoolId
+     * @param orgId
+     * @param status
+     * @param type
+     * @param result
+     * @return
+     */
+    public IPage<TaskListResult> query(IPage<Map> iPage,
+                                       Long schoolId,
+                                       Long orgId,
+                                       TaskStatusEnum status,
+                                       TaskTypeEnum type,
+                                       TaskResultEnum result);
+}

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TGErrorService.java

@@ -0,0 +1,16 @@
+package com.qmth.distributed.print.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.entity.TGError;
+
+/**
+ * <p>
+ * 全局异常错误信息表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-24
+ */
+public interface TGErrorService extends IService<TGError> {
+
+}

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

@@ -1,26 +1,39 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.common.utils.BinaryUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.config.DictionaryConfig;
 import com.qmth.distributed.print.business.entity.BasicAttachment;
+import com.qmth.distributed.print.business.entity.SysUser;
+import com.qmth.distributed.print.business.enums.UploadFileEnum;
 import com.qmth.distributed.print.business.mapper.BasicAttachmentMapper;
 import com.qmth.distributed.print.business.service.BasicAttachmentService;
+import com.qmth.distributed.print.business.util.OssUtil;
+import com.qmth.distributed.print.business.util.ServletUtil;
+import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
-import com.qmth.distributed.print.business.enums.StorageLevelEnum;
-import com.qmth.distributed.print.business.enums.StorageTypeEnum;
+import com.qmth.distributed.print.common.util.HexUtils;
+import com.qmth.distributed.print.common.util.ResultUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 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 javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Objects;
 import java.util.StringJoiner;
 
 /**
@@ -33,6 +46,10 @@ import java.util.StringJoiner;
  */
 @Service
 public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMapper, BasicAttachment> implements BasicAttachmentService {
+    private final static Logger log = LoggerFactory.getLogger(BasicAttachmentServiceImpl.class);
+
+    @Resource
+    OssUtil ossUtil;
 
     @Autowired
     private DictionaryConfig dictionaryConfig;
@@ -111,4 +128,148 @@ public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMappe
         }
         return null;
     }
+
+    /**
+     * 保存附件
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @return
+     */
+    @Override
+    @Transactional
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type) {
+        return saveAttachmentCommon(file, md5, type, null);
+    }
+
+    /**
+     * 保存附件
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @param objId
+     * @return
+     */
+    @Override
+    @Transactional
+    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type, Long objId) {
+        return saveAttachmentCommon(file, md5, type, objId);
+    }
+
+    /**
+     * 删除附件
+     *
+     * @param tbAttachment
+     */
+    @Override
+    public void deleteAttachment(BasicAttachment tbAttachment) {
+        if (Objects.nonNull(tbAttachment) && Objects.nonNull(tbAttachment.getPath())) {
+            JSONObject jsonObject = JSONObject.parseObject(tbAttachment.getPath());
+            String type = String.valueOf(jsonObject.get(SystemConstant.TYPE));
+            if (Objects.nonNull(type) && Objects.equals(type, SystemConstant.OSS)) {//删除阿里云附件
+                ossUtil.ossDelete(jsonObject.get(SystemConstant.PATH).toString());
+            } else {//删除服务器附件
+                File file = new File(jsonObject.get(SystemConstant.PATH).toString());
+                file.delete();
+            }
+        }
+    }
+
+    /**
+     * 保存附件公用
+     *
+     * @param file
+     * @param md5
+     * @param type
+     * @param objId
+     * @return
+     */
+    public BasicAttachment saveAttachmentCommon(MultipartFile file, String md5, UploadFileEnum type, Long objId) {
+        if (Objects.isNull(type)) {
+            throw ExceptionResultEnum.ATTACHMENT_TYPE_EMPTY.exception();
+        }
+        BasicAttachment basicAttachment = null;
+        try {
+            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            int temp = file.getOriginalFilename().indexOf(".");
+            String fileName = file.getOriginalFilename().substring(0, temp);
+            String format = file.getOriginalFilename().substring(temp, file.getOriginalFilename().length());
+            List<String> attachmentTypeList = dictionaryConfig.sysDomain().getAttachmentType();
+            if (Objects.nonNull(format)) {
+                long count = attachmentTypeList.stream().filter(s -> format.equalsIgnoreCase(s)).count();
+                if (count == 0) {
+                    throw ExceptionResultEnum.ERROR.exception("文件格式只能为" + attachmentTypeList.toString());
+                }
+            }
+            int attachmentLength = dictionaryConfig.sysDomain().getAttachmentLength().intValue();
+            if (Objects.nonNull(fileName) && fileName.length() > attachmentLength) {
+                throw ExceptionResultEnum.ERROR.exception("文件名长度不能超过" + attachmentLength + "个字符");
+            }
+            long size = file.getSize();
+            BigDecimal b = new BigDecimal(size);
+            BigDecimal num = new BigDecimal(1024);
+            b = b.divide(num, 2, BigDecimal.ROUND_HALF_UP).divide(num, 2, BigDecimal.ROUND_HALF_UP)
+                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            double attachmentSize = dictionaryConfig.sysDomain().getAttachmentSize().doubleValue();
+            if (b.doubleValue() > attachmentSize) {
+                throw ExceptionResultEnum.ERROR.exception("文件大小不能超过" + attachmentSize + "MB");
+            }
+            log.info("fileName:{}", fileName);
+            log.info("format:{}", format);
+            log.info("size:{}", b);
+            log.info("getOriginalFilename:{}", file.getOriginalFilename());
+            String fileMd5 = DigestUtils.md5Hex(file.getBytes());
+            log.info("fileMd5:{}", fileMd5);
+            log.info("md5:{}", md5);
+            if (!Objects.equals(fileMd5, md5)) {
+                throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
+            }
+            boolean oss = dictionaryConfig.sysDomain().isOss();
+            LocalDateTime nowTime = LocalDateTime.now();
+            StringJoiner stringJoiner = new StringJoiner("");
+            if (!oss) {
+                stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
+            }
+            stringJoiner.add(type.getTitle()).add(File.separator);
+//            else if (type == UploadFileEnum.PAPER) {//试卷需要单独
+//                stringJoiner.add(type.getTitle()).add(File.separator);
+//            } else if (type == UploadFileEnum.UPLOAD) {
+//                stringJoiner.add(type.getTitle()).add(File.separator);
+//            }
+            stringJoiner.add(String.valueOf(nowTime.getYear())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getDayOfMonth()));
+
+            JSONObject jsonObject = new JSONObject();
+            stringJoiner.add(File.separator).add(SystemConstant.getUuid()).add(format);
+            if (oss) {//上传至oss
+                ossUtil.ossUpload(stringJoiner.toString(), file.getInputStream(), BinaryUtil.toBase64String(HexUtils.decodeHex(md5)));
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+            } else {//上传至服务器
+                File finalFile = new File(stringJoiner.toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyInputStreamToFile(file.getInputStream(), finalFile);
+                jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+            }
+            jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
+            jsonObject.put(SystemConstant.UPLOAD_TYPE, type);
+
+            basicAttachment = new BasicAttachment(jsonObject.toJSONString(), fileName, format, b, fileMd5, requestUser.getId(), objId);
+            save(basicAttachment);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            deleteAttachment(basicAttachment);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return basicAttachment;
+    }
 }

+ 145 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBTaskServiceImpl.java

@@ -0,0 +1,145 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.bean.result.TaskListResult;
+import com.qmth.distributed.print.business.entity.BasicAttachment;
+import com.qmth.distributed.print.business.entity.SysUser;
+import com.qmth.distributed.print.business.entity.TBTask;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.enums.TaskTypeEnum;
+import com.qmth.distributed.print.business.enums.UploadFileEnum;
+import com.qmth.distributed.print.business.mapper.TBTaskMapper;
+import com.qmth.distributed.print.business.service.BasicAttachmentService;
+import com.qmth.distributed.print.business.service.TBTaskService;
+import com.qmth.distributed.print.business.util.ServletUtil;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+import com.qmth.distributed.print.common.util.ResultUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 导入导出任务表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-19
+ */
+@Service
+public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> implements TBTaskService {
+
+    @Resource
+    BasicAttachmentService basicAttachmentService;
+
+    @Resource
+    TBTaskMapper tbTaskMapper;
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @return
+     */
+    @Override
+    @Transactional
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum) {
+        BasicAttachment basicAttachment = null;
+        Map<String, Object> map = null;
+        try {
+            basicAttachment = basicAttachmentService.saveAttachment(file, ServletUtil.getRequestMd5(), UploadFileEnum.FILE);
+            if (Objects.isNull(basicAttachment)) {
+                throw ExceptionResultEnum.ATTACHMENT_ERROR.exception();
+            } else {
+                SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+                TBTask tbTask = new TBTask(taskTypeEnum,
+                        TaskStatusEnum.INIT,
+                        basicAttachment.getName(),
+                        basicAttachment.getPath(),
+                        requestUser.getId(),
+                        requestUser.getSchoolId());
+                map = new HashMap<>();
+                map.computeIfAbsent(SystemConstant.TASK, v -> tbTask);
+                map.computeIfAbsent(SystemConstant.USER, v -> requestUser);
+                this.save(tbTask);
+            }
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (Objects.nonNull(basicAttachment)) {
+                basicAttachmentService.deleteAttachment(basicAttachment);
+            }
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param objId
+     * @return
+     */
+    @Override
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Object objId) {
+        return null;
+    }
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param projectId
+     * @return
+     */
+    @Override
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Long projectId) {
+        return null;
+    }
+
+    /**
+     * 保存任务
+     *
+     * @param file
+     * @param taskTypeEnum
+     * @param objId
+     * @param projectId
+     * @return
+     */
+    @Override
+    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum, Object objId, Long projectId) {
+        return null;
+    }
+
+    /**
+     * 查询任务列表
+     *
+     * @param iPage
+     * @param schoolId
+     * @param orgId
+     * @param status
+     * @param type
+     * @param result
+     * @return
+     */
+    @Override
+    public IPage<TaskListResult> query(IPage<Map> iPage, Long schoolId, Long orgId, TaskStatusEnum status, TaskTypeEnum type, TaskResultEnum result) {
+        return tbTaskMapper.query(iPage, schoolId, orgId, Objects.nonNull(status) ? status.name() : null, Objects.nonNull(type) ? type.name() : null, Objects.nonNull(result) ? result.name() : null);
+    }
+}

+ 20 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TGErrorServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.entity.TGError;
+import com.qmth.distributed.print.business.mapper.TGErrorMapper;
+import com.qmth.distributed.print.business.service.TGErrorService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 全局异常错误信息表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-24
+ */
+@Service
+public class TGErrorServiceImpl extends ServiceImpl<TGErrorMapper, TGError> implements TGErrorService {
+
+}

+ 52 - 0
distributed-print-business/src/main/resources/mapper/TBTaskMapper.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.distributed.print.business.mapper.TBTaskMapper">
+
+    <select id="query" resultType="com.qmth.distributed.print.business.bean.result.TaskListResult">
+        select
+            tbt.id,
+            tbt.school_id as schoolId,
+            tbs.code as schoolCode,
+            tbs.name as schoolName,
+            tbt.org_id as orgId,
+            so.code as orgCode,
+            so.name as orgName,
+            tbt.`type`,
+            tbt.status,
+            tbt.`result`,
+            tbt.create_time as createTime,
+            tbt.create_id as createId,
+            (
+            select
+                t.name
+            from
+                t_b_user t
+            where
+                t.id = tbt.create_id) as createName,
+            if(ISNULL(tbt.result_file_path),false,true) as hasResultFile,
+            if(ISNULL(tbt.report_file_path),false,true) as hasReportFile
+        from
+            t_b_task tbt
+        left join t_b_school tbs on
+            tbs.id = tbt.school_id
+        left join sys_org so on
+            so.id = tbt.org_id
+            <where>
+                <if test="schoolId != null and schoolId != ''">
+                    and tbt.school_id = #{schoolId}
+                </if>
+                <if test="orgId != null and orgId != ''">
+                    and tbt.org_id = #{orgId}
+                </if>
+                <if test="status != null and status != ''">
+                    and tbt.status = #{status}
+                </if>
+                <if test="type != null and type != ''">
+                    and tbt.type = #{type}
+                </if>
+                <if test="result != null and result != ''">
+                    and tbt.result = #{result}
+                </if>
+            </where>
+    </select>
+</mapper>

+ 5 - 0
distributed-print-business/src/main/resources/mapper/TGErrorMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.digit.print.business.mapper.TGErrorMapper">
+
+</mapper>

+ 1 - 0
distributed-print-common/src/main/java/com/qmth/distributed/print/common/contant/SystemConstant.java

@@ -29,6 +29,7 @@ public class SystemConstant {
     public static final String PDF_TEMP = "pdf-temp";
     public static final String FILE_TEMP = "file-temp";
     public static final String SESSION = "session:";
+    public static final String TASK = "task";
     public static final String USER = "account";
     public static final String SCHOOL = "school";
     public static final String ORG = "org";

+ 2 - 0
distributed-print-common/src/main/java/com/qmth/distributed/print/common/enums/ExceptionResultEnum.java

@@ -59,6 +59,8 @@ public enum ExceptionResultEnum {
 
     SCHOOL_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000020, "学校信息不存在"),
 
+    SCHOOL_ENABLE(HttpStatus.INTERNAL_SERVER_ERROR, 5000021, "学校已停用"),
+
     /**
      * 401
      */

+ 47 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -36,6 +36,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.security.NoSuchAlgorithmException;
+import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -70,6 +71,9 @@ public class SysController {
     @Resource
     RedisUtil redisUtil;
 
+    @Resource
+    CommonService commonService;
+
     /**
      * 登录
      *
@@ -84,13 +88,45 @@ public class SysController {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(SysUser::getLoginName, login.getLoginName());
-        SysUser sysUser = sysUserService.getOne(queryWrapper);
+
+        BasicSchool basicSchool = null;
+        if (!Objects.equals(login.getSchoolCode().toUpperCase(), RoleTypeEnum.ADMIN.name())) {
+            basicSchool = cacheService.schoolCache(login.getSchoolCode());
+            if (Objects.isNull(basicSchool)) {
+                throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+            }
+            if (Objects.nonNull(basicSchool.getEnable()) && !basicSchool.getEnable()) {
+                throw ExceptionResultEnum.SCHOOL_ENABLE.exception();
+            }
+        }
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SysUser::getLoginName, login.getLoginName());
+        if (!Objects.equals(login.getSchoolCode().toUpperCase(), RoleTypeEnum.ADMIN.name())) {
+            wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
+        }
+        List<SysUser> userList = sysUserService.list(wrapper);
         //用户不存在
-        if (Objects.isNull(sysUser)) {
+        if (Objects.isNull(userList) || userList.size() == 0) {
             throw ExceptionResultEnum.USER_NO_DATA.exception();
         }
+        if (Objects.equals(login.getSchoolCode().toUpperCase(), RoleTypeEnum.ADMIN.name())) {
+            userList.forEach(o -> {
+                AuthBean authBean = commonService.getUserAuth(o.getId());
+                if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().size() > 0) {
+                    Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
+                    if (!roleType.contains(RoleTypeEnum.ADMIN)) {
+                        throw ExceptionResultEnum.ERROR.exception("学校代码为admin只允许超级管理员登录");
+                    }
+                }
+            });
+        }
+        if (userList.size() > 1) {
+            throw ExceptionResultEnum.ERROR.exception("查询的用户有多条");
+        }
+        SysUser sysUser = userList.get(0);
+        if (Objects.nonNull(sysUser.getSchoolId()) && sysUser.getSchoolId().longValue() != basicSchool.getId().longValue()) {
+            throw ExceptionResultEnum.ERROR.exception("用户学校不匹配");
+        }
         //密码不正确
         if (!Objects.equals(login.getPassword(), sysUser.getPassword())) {
             throw ExceptionResultEnum.PASSWORD_ERROR.exception();
@@ -204,10 +240,13 @@ public class SysController {
     @ApiResponses({@ApiResponse(code = 200, message = "学校信息", response = SchoolResult.class)})
     @Aac(auth = BOOL.FALSE)
     public Result queryBySchoolCode(@ApiParam(value = "机构code", required = true) @RequestParam String code) {
-        BasicSchool basicSchool = cacheService.schoolCache(code);
-        if (Objects.isNull(basicSchool)) {
-            throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+        BasicSchool basicSchool = null;
+        if (!Objects.equals(code.toUpperCase(), RoleTypeEnum.ADMIN.name())) {
+            basicSchool = cacheService.schoolCache(code);
+            if (Objects.isNull(basicSchool)) {
+                throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+            }
         }
-        return ResultUtil.ok(new SchoolResult(basicSchool));
+        return ResultUtil.ok(Objects.nonNull(basicSchool) ? new SchoolResult(basicSchool) : null);
     }
 }

+ 76 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskController.java

@@ -0,0 +1,76 @@
+package com.qmth.distributed.print.api;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.core.enums.Platform;
+import com.qmth.distributed.print.business.bean.query.ChooseParams;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.bean.result.TaskListResult;
+import com.qmth.distributed.print.business.entity.TBTask;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.enums.TaskTypeEnum;
+import com.qmth.distributed.print.business.service.TBTaskService;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+import com.qmth.distributed.print.common.util.Result;
+import com.qmth.distributed.print.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 导入导出任务表 前端控制器
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-03-19
+ */
+@Api(tags = "数据管理-任务管理Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.data}")
+@Aac(strict = BOOL.TRUE, platform = Platform.WEB)
+public class TBTaskController {
+
+    @Resource
+    TBTaskService tbTaskService;
+
+    @ApiOperation(value = "任务管理查询接口")
+    @RequestMapping(value = "/task/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "任务管理列表信息", response = TaskListResult.class)})
+    public Result taskQuery(@ApiParam(value = "学校id", required = false) @RequestParam(required = false) String schoolId,
+                            @ApiParam(value = "机构id", required = false) @RequestParam(required = false) String orgId,
+                            @ApiParam(value = "任务状态", required = false) @RequestParam(required = false) TaskStatusEnum status,
+                            @ApiParam(value = "任务类型", required = false) @RequestParam(required = false) TaskTypeEnum type,
+                            @ApiParam(value = "任务数据结果", required = false) @RequestParam(required = false) TaskResultEnum result,
+                            @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber,
+                            @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
+        return ResultUtil.ok(tbTaskService.query(new Page<>(pageNumber, pageSize), SystemConstant.convertIdToLong(schoolId), SystemConstant.convertIdToLong(orgId), status, type, result));
+    }
+
+    @ApiOperation(value = "任务管理_批量删除&清空接口")
+    @RequestMapping(value = "/task/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @Transactional
+    public Result taskDelete(@ApiParam(value = "数组id和选择类型", required = true) @RequestBody ChooseParams chooseParams) {
+        if ((Objects.isNull(chooseParams.getIds()) || chooseParams.getIds().length == 0) && Objects.isNull(chooseParams.getType())) {
+            throw ExceptionResultEnum.PARAMS_ERROR.exception("数据id或选择类型必须选一个");
+        }
+        if (Objects.nonNull(chooseParams.getType())) {
+            QueryWrapper<TBTask> tbTaskQueryWrapper = new QueryWrapper<>();
+            tbTaskQueryWrapper.lambda().eq(TBTask::getStatus, TaskStatusEnum.FINISH);
+            tbTaskService.remove(tbTaskQueryWrapper);
+        } else {
+            tbTaskService.removeByIds(Arrays.asList(chooseParams.getIds()));
+        }
+        return ResultUtil.ok();
+    }
+}

+ 1 - 0
distributed-print/src/main/resources/application.properties

@@ -75,6 +75,7 @@ prefix.url.common=admin/common
 prefix.url.sys=admin/sys
 prefix.url.basic=admin/basic
 prefix.url.exam=admin/exam
+prefix.url.data=admin/data
 
 #\u65E5\u5FD7\u914D\u7F6E
 com.qmth.logging.root-level=info