Browse Source

fix: 同步管理

caozixuan 3 years ago
parent
commit
531f7e7b15

+ 28 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TBSyncTaskMapper.java

@@ -1,7 +1,16 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
+import com.qmth.teachcloud.common.bean.result.SyncListResult;
+import com.qmth.teachcloud.common.enums.PushTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
 
 /**
  * <p>
@@ -9,4 +18,23 @@ import com.qmth.distributed.print.business.entity.TBSyncTask;
  * </p>
  */
 public interface TBSyncTaskMapper extends BaseMapper<TBSyncTask> {
+
+    /**
+     * 同步任务管理分页查询
+     * @param iPage 分页参数
+     * @param schoolId 学校id
+     * @param status 任务状态
+     * @param type 同步任务类型
+     * @param result 任务结果
+     * @param createId 创建人主键
+     * @param orgIds 数据权限集合
+     * @return 分页结果
+     */
+    IPage<SyncListResult> query(@Param("iPage") Page<SyncListResult> iPage,
+                                @Param("schoolId") Long schoolId,
+                                @Param("status") TaskStatusEnum status,
+                                @Param("type") PushTypeEnum type,
+                                @Param("result") TaskResultEnum result,
+                                @Param("createId") Long createId,
+                                @Param("orgIds") Set<Long> orgIds);
 }

+ 16 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBSyncTaskService.java

@@ -1,11 +1,14 @@
 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.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
+import com.qmth.teachcloud.common.bean.result.SyncListResult;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
-import com.qmth.teachcloud.common.enums.TaskTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 
 import java.util.Map;
 
@@ -19,4 +22,16 @@ public interface TBSyncTaskService extends IService<TBSyncTask> {
     TBSyncTask saveTask(ExamPrintPlan examPrintPlan);
 
     TBSyncTask savePushCommon(PushTypeEnum pushTypeEnum, Map map, SysUser sysUser);
+
+    /**
+     * 同步任务管理分页查询
+     * @param schoolId 学校id
+     * @param status 任务状态
+     * @param type 同步任务类型
+     * @param result 任务结果
+     * @param pageNumber 分页页数
+     * @param pageSize 分页容量
+     * @return 分页结果
+     */
+    IPage<SyncListResult> query(Long schoolId, TaskStatusEnum status, PushTypeEnum type, TaskResultEnum result,int pageNumber,int pageSize);
 }

+ 23 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java

@@ -1,28 +1,37 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.mapper.TBSyncTaskMapper;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
+import com.qmth.teachcloud.common.bean.result.SyncListResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * @Date: 2021/5/20.
  */
 @Service
 public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncTask> implements TBSyncTaskService {
+    @Resource
+    TBSyncTaskMapper tbSyncTaskMapper;
     @Override
     public TBSyncTask saveTask(ExamPrintPlan examPrintPlan) {
         QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
@@ -61,4 +70,18 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         map.computeIfAbsent(SystemConstant.TB_SYNC_TASK_ID, v -> tbSyncTask.getId());
         return tbSyncTask;
     }
+
+    @Override
+    public IPage<SyncListResult> query(Long schoolId, TaskStatusEnum status, PushTypeEnum type, TaskResultEnum result, int pageNumber, int pageSize) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Set<Long> orgIds = null;
+        IPage<SyncListResult> page = tbSyncTaskMapper.query(new Page<>(pageNumber,pageSize),schoolId,status,type,result,sysUser.getId(),orgIds);
+        List<SyncListResult> list = page.getRecords();
+        for (SyncListResult syncListResult : list) {
+            syncListResult.setStatus(TaskStatusEnum.valueOf(syncListResult.getStatus()).getTitle());
+            syncListResult.setType(PushTypeEnum.valueOf(syncListResult.getType()).getTitle());
+            syncListResult.setResult(TaskResultEnum.valueOf(syncListResult.getResult()).getTitle());
+        }
+        return page;
+    }
 }

+ 40 - 0
distributed-print-business/src/main/resources/mapper/TBSyncTaskMapper.xml

@@ -1,4 +1,44 @@
 <?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.TBSyncTaskMapper">
+    <select id="query" resultType="com.qmth.teachcloud.common.bean.result.SyncListResult">
+        SELECT
+            tbst.id,
+            tbst.type,
+            tbst.status,
+            tbst.result,
+            if(ISNULL(tbst.report_file_path),false,true) as hasReportFile,
+            tbst.error_message as errorMessage,
+            tbst.create_id as createId,
+            tbst.create_time as createTime,
+            su.real_name as createName
+        FROM
+            t_b_sync_task tbst
+                LEFT JOIN
+            sys_user su ON tbst.create_id = su.id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                and tbst.school_id = #{schoolId}
+            </if>
+            <if test="status != null">
+                and tbst.status = #{status}
+            </if>
+            <if test="type != null">
+                and tbst.type = #{type}
+            </if>
+            <if test="result != null">
+                and tbst.result = #{result}
+            </if>
+            <if test="orgIds != null">
+                AND su.org_id IN
+                <foreach collection="orgIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="orgIds == null and createId != null and createId != ''">
+                and tbst.create_id = #{createId}
+            </if>
+        </where>
+        order by tbst.create_time desc
+    </select>
 </mapper>

+ 27 - 14
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -9,10 +9,12 @@ import com.qmth.distributed.print.business.bean.params.LoginParam;
 import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
+import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.enums.DictionaryEnum;
 import com.qmth.distributed.print.business.service.BasicVerifyCodeService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.distributed.print.business.service.TBSyncTaskService;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.bean.result.UserLoginCheckResult;
@@ -95,6 +97,9 @@ public class SysController {
     @Resource
     ExamPrintPlanService examPrintPlanService;
 
+    @Resource
+    TBSyncTaskService tbSyncTaskService;
+
     /**
      * 登录
      *
@@ -270,21 +275,29 @@ public class SysController {
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     public Result fileDownload(@ApiParam(value = "任务id", required = true) @RequestParam String id,
                                @ApiParam(value = "下载文件类型", required = true) @RequestParam DownloadFileEnum type) {
-        TBTask tbTask = tbTaskService.getById(Long.parseLong(id));
-        if (Objects.isNull(tbTask)) {
-            throw ExceptionResultEnum.TASK_NO_DATA.exception();
-        }
         String path = null;
-        switch (type.ordinal()) {
-            case 0:
-                path = tbTask.getImportFilePath();
-                break;
-            case 1:
-                path = tbTask.getReportFilePath();
-                break;
-            default:
-                path = tbTask.getResultFilePath();
-                break;
+        if (DownloadFileEnum.SYNC_REPORT.equals(type)){
+            TBSyncTask tbSyncTask = tbSyncTaskService.getById(SystemConstant.convertIdToLong(id));
+            if (Objects.isNull(tbSyncTask)){
+                throw ExceptionResultEnum.SYNC_TASK_NO_DATA.exception();
+            }
+            path = tbSyncTask.getReportFilePath();
+        }else {
+            TBTask tbTask = tbTaskService.getById(Long.parseLong(id));
+            if (Objects.isNull(tbTask)) {
+                throw ExceptionResultEnum.TASK_NO_DATA.exception();
+            }
+            switch (type) {
+                case IMPORT_FILE:
+                    path = tbTask.getImportFilePath();
+                    break;
+                case TASK_REPORT:
+                    path = tbTask.getReportFilePath();
+                    break;
+                case RESULT:
+                    path = tbTask.getResultFilePath();
+                    break;
+            }
         }
         if (Objects.isNull(path)) {
             throw ExceptionResultEnum.PATH_NO_DATA.exception();

+ 55 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TBSyncTaskController.java

@@ -0,0 +1,55 @@
+package com.qmth.distributed.print.api;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.service.TBSyncTaskService;
+import com.qmth.teachcloud.common.bean.result.SyncListResult;
+import com.qmth.teachcloud.common.bean.result.TaskListResult;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.PushTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+/**
+ * @Description: 同步任务管理-前端控制器
+ * @Author: CaoZixuan
+ * @Date: 2021-11-08
+ */
+@Api(tags = "数据管理-任务管理Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.data}")
+@Validated
+public class TBSyncTaskController {
+    private final static Logger log = LoggerFactory.getLogger(TBSyncTaskController.class);
+
+    @Resource
+    TBSyncTaskService tbSyncTaskService;
+
+    @ApiOperation(value = "同步管理查询接口")
+    @RequestMapping(value = "/sync/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "任务管理列表信息", response = TaskListResult.class)})
+    public Result syncQuery(@ApiParam(value = "任务状态") @RequestParam(required = false) TaskStatusEnum status,
+                            @ApiParam(value = "同步类型") @RequestParam(required = false) PushTypeEnum type,
+                            @ApiParam(value = "同步数据结果") @RequestParam(required = false) TaskResultEnum result,
+                            @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        Long schoolId = SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolId()));
+        IPage<SyncListResult> page = tbSyncTaskService.query(schoolId,status,type,result,pageNumber,pageSize);
+        return ResultUtil.ok(page);
+    }
+}

+ 116 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SyncListResult.java

@@ -0,0 +1,116 @@
+package com.qmth.teachcloud.common.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 同步任务列表结果
+ * @Author: CaoZixuan
+ * @Date: 2021-11-08
+ */
+public class SyncListResult implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "同步任务类型:USER_PUSH(用户推送),EXAM_PUSH(考试、考生、题卡推送),STRUCTURE_PUSH(试卷结构推送),SCORE_PUSH(成绩推送)")
+    private String type;
+
+    @ApiModelProperty(value = "任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成")
+    private String status;
+
+    @ApiModelProperty(value = "数据结果,SUCCESS:成功,ERROR:失败")
+    private String result;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建人id")
+    private Long createId;
+
+    @ApiModelProperty(value = "创建人")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Long createTime;
+
+    @ApiModelProperty(value = "是否有报告文件")
+    private Boolean hasReportFile;
+
+    @ApiModelProperty(value = "人工错误原因")
+    private String errorMessage;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    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 getHasReportFile() {
+        return hasReportFile;
+    }
+
+    public void setHasReportFile(Boolean hasReportFile) {
+        this.hasReportFile = hasReportFile;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
+}

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/DownloadFileEnum.java

@@ -13,7 +13,9 @@ public enum DownloadFileEnum {
 
     IMPORT_FILE("导入文件"),
 
-    REPORT("报告文件"),
+    TASK_REPORT("任务报告文件"),
+
+    SYNC_REPORT("同步报告文件"),
 
     RESULT("导出文件");
 

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

@@ -83,6 +83,8 @@ public enum ExceptionResultEnum {
 
     DATA_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, 5000032, "数据异常"),
 
+    SYNC_TASK_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000033, "同步任务不存在"),
+
     /**
      * 401
      */

+ 6 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -141,6 +141,9 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                         basicCampus = basicCampusService.getOne(new QueryWrapper<BasicCampus>().lambda()
                                 .eq(BasicCampus::getSchoolId, schoolId)
                                 .eq(BasicCampus::getCampusName, campusName));
+                        if (Objects.isNull(basicCampus)){
+                            throw ExceptionResultEnum.ERROR.exception("系统中不存在【校区】:" + campusName);
+                        }
                         campusMap.put(campusName, basicCampus);
                     }
                     campusId = basicCampus.getId();
@@ -156,6 +159,9 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                         sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
                                 .eq(SysOrg::getSchoolId, schoolId)
                                 .eq(SysOrg::getName, collegeName));
+                        if (Objects.isNull(sysOrg)){
+                            throw ExceptionResultEnum.ERROR.exception("系统中不存在【学院】:" + collegeName);
+                        }
                         collegeMap.put(collegeName, sysOrg);
                     }
                     collegeId = sysOrg.getId();

+ 12 - 12
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/StmmsUtils.java

@@ -99,17 +99,17 @@ public class StmmsUtils {
         map.put("enable", validParam(enable, true, false, "是否启用"));
 //
 //
-//        String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, userSaveUrl), map, null, null, null);
-//        JSONObject jsonObject = JSONObject.parseObject(result);
-//        if (jsonObject.containsKey("updateTime")) {
-//            return true;
-//        } else {
-//            log.warn("用户推送(同步)失败");
-//            return false;
-//        }
+        String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, userSaveUrl), map, null, null, null);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        if (jsonObject.containsKey("updateTime")) {
+            return true;
+        } else {
+            log.warn("用户推送(同步)失败");
+            return false;
+        }
 
-        {
-            // 模拟云阅卷返回结果 3/5的成功率
+//        {
+//            // 模拟云阅卷返回结果 3/5的成功率
 //            int x = (int) (Math.random() * 10);
 //            if (x > 0) {
 //                // 失败
@@ -118,8 +118,8 @@ public class StmmsUtils {
 //            } else {
 //                return true;
 //            }
-            return false;
-        }
+//            return false;
+//        }
     }
 
     /**