Ver código fonte

异步任务

xiatian 8 meses atrás
pai
commit
00938ff2ed

+ 147 - 0
src/main/java/cn/com/qmth/scancentral/controller/admin/AsyncTaskController.java

@@ -0,0 +1,147 @@
+package cn.com.qmth.scancentral.controller.admin;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.collection.PageResult;
+
+import cn.com.qmth.scancentral.bean.User;
+import cn.com.qmth.scancentral.controller.BaseController;
+import cn.com.qmth.scancentral.entity.ExamEntity;
+import cn.com.qmth.scancentral.exception.ParameterExceptions;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.vo.ExamConfigVo;
+import cn.com.qmth.scancentral.vo.ExamVo;
+import cn.com.qmth.scancentral.vo.ResultVo;
+import cn.com.qmth.scancentral.vo.UpdateTimeVo;
+import cn.com.qmth.scancentral.vo.examinfo.ExamEdit;
+import cn.com.qmth.scancentral.vo.examinfo.ExamOverview;
+import cn.com.qmth.scancentral.vo.examinfo.ExamQuery;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@Api(tags = "异步任务接口")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/async-task")
+@Aac(strict = false, auth = true)
+public class AsyncTaskController extends BaseController {
+
+    @Autowired
+    private ExamService examService;
+
+    @ApiOperation(value = "扫描点代码获取")
+    @PostMapping(value = "scan-site")
+    public String getScanSite(@RequestParam Long examId) {
+        return examService.getScanSite(examId);
+    }
+
+    @ApiOperation(value = "扫描点代码设置")
+    @PostMapping(value = "scan-site/save")
+    public UpdateTimeVo scanSiteSave(@RequestParam Long examId, @RequestParam String scanSite) {
+        examService.scanSiteSave(examId, scanSite);
+        return UpdateTimeVo.create();
+    }
+
+    @ApiOperation(value = "考试概览数据")
+    @RequestMapping(value = "/overview", method = RequestMethod.POST)
+    public ExamOverview overview(@RequestParam Long examId) {
+        User user = getAccessUser();
+        return examService.getExamOverview(examId, user);
+    }
+
+    @ApiOperation(value = "获取考试列表")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public PageResult<ExamVo> list(ExamQuery query) {
+        User user = getAccessUser();
+        return examService.pageQuery(query, user);
+    }
+
+    @ApiOperation(value = "新建、修改考试")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public ResultVo save(ExamEdit exam) {
+        exam.setOperateUserId(getAccessUser().getId());
+        examService.save(exam);
+        return new ResultVo(System.currentTimeMillis());
+    }
+
+    @ApiOperation(value = "获取基础数据配置")
+    @RequestMapping(value = "/config/info", method = RequestMethod.POST)
+    public ExamConfigVo getConfigInfo(@RequestParam Long examId) {
+        return examService.getConfigInfo(examId);
+    }
+
+    @ApiOperation(value = "保存基础数据配置")
+    @RequestMapping(value = "/config/save", method = RequestMethod.POST)
+    public ResultVo saveConfig(@Valid @RequestBody ExamConfigVo config) {
+        User user = getAccessUser();
+        examService.saveConfig(config, user);
+        return new ResultVo(System.currentTimeMillis());
+    }
+
+    @ApiOperation(value = "启用、禁用考试")
+    @RequestMapping(value = "/toggle", method = RequestMethod.POST)
+    public ResultVo updateEnable(@RequestParam Long examId, @RequestParam Boolean enable) {
+        User user = getAccessUser();
+        ExamEntity exam = examService.getById(examId);
+        if (exam == null) {
+            throw ParameterExceptions.EXAM_NOT_FOUND;
+        }
+
+        LambdaUpdateWrapper<ExamEntity> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ExamEntity::getEnable, enable);
+        updateWrapper.set(ExamEntity::getUpdateTime, System.currentTimeMillis());
+        updateWrapper.set(ExamEntity::getUpdaterId, user.getId());
+        updateWrapper.eq(ExamEntity::getId, exam.getId());
+        examService.update(updateWrapper);
+
+        return new ResultVo(System.currentTimeMillis());
+    }
+
+    // @ApiOperation(value = "修改考试上传状态")
+    // @RequestMapping(value = "/upload", method = RequestMethod.POST)
+    // public ExamUploadVo upload(@RequestParam Long id, @RequestParam Boolean
+    // enable) {
+    // User user = getAccessUser();
+    // ExamUploadVo vo = new ExamUploadVo();
+    // ExamEntity exam = examService.getById(id);
+    // if (exam == null) {
+    // throw ParameterExceptions.EXAM_NOT_FOUND;
+    // }
+    //
+    // exam.setEnableUpload(enable);
+    // examService.saveOrUpdate(exam);
+    // vo.setEnable(exam.getEnableUpload());
+    // vo.setUpdateTime(exam.getUpdateTime());
+    // vo.setProgress(studentService.getUploadProgress(id));
+    // return vo;
+    // }
+    //
+    // @ApiOperation(value = "修改考试科目参数")
+    // @RequestMapping(value = "/subject/config", method = RequestMethod.POST)
+    // public SubjectConfigVo subjectConfig(@Validated SubjectConfigDomain
+    // domain) {
+    // User user = getAccessUser();
+    // return subjectService.config(user, domain);
+    // }
+    //
+    // @ApiOperation(value = "修改考试实时审核状态")
+    // @RequestMapping(value = "/syncVerify", method = RequestMethod.POST)
+    // public ResultVo syncVerify(@RequestParam Long examId, @RequestParam
+    // Boolean enable) {
+    // User user = getAccessUser();
+    // ExamEntity exam = examService.updateEnableSyncVerify(user, examId,
+    // enable);
+    // return new ResultVo(System.currentTimeMillis());
+    // }
+
+}

+ 8 - 11
src/main/java/cn/com/qmth/scancentral/controller/admin/SubjectController.java

@@ -17,10 +17,10 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.core.exception.ParameterException;
 
 import cn.com.qmth.scancentral.controller.BaseController;
-import cn.com.qmth.scancentral.service.DataExportTaskService;
+import cn.com.qmth.scancentral.service.AsyncTaskService;
 import cn.com.qmth.scancentral.service.SubjectService;
 import cn.com.qmth.scancentral.util.Calculator;
-import cn.com.qmth.scancentral.vo.subject.DataExportProgressVo;
+import cn.com.qmth.scancentral.vo.asynctask.AsyncTaskVo;
 import cn.com.qmth.scancentral.vo.subject.DataExportTaskVo;
 import cn.com.qmth.scancentral.vo.subject.ScanProgressVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectBreachVo;
@@ -39,7 +39,7 @@ public class SubjectController extends BaseController {
     private SubjectService subjectService;
 
     @Autowired
-    private DataExportTaskService dataExportTaskService;
+    private AsyncTaskService asyncTaskService;
 
     @ApiOperation(value = "科目扫描进度查询")
     @PostMapping("scan/progress")
@@ -73,22 +73,19 @@ public class SubjectController extends BaseController {
 
     @ApiOperation(value = "导出扫描答案DBF、打包DBF下载进度查询")
     @PostMapping("data/progress")
-    public DataExportProgressVo dataProgress(@RequestParam String taskId) {
-        DataExportTaskVo vo = dataExportTaskService.getTask(taskId);
+    public AsyncTaskVo dataProgress(@RequestParam String taskId) {
+        DataExportTaskVo vo = asyncTaskService.getDataExportTask(taskId);
         if (vo == null) {
             throw new ParameterException("未找到导出任务");
         }
-        DataExportProgressVo ret = new DataExportProgressVo();
-        ret.setSuccess(vo.getSuccess());
-        ret.setErrMsg(vo.getErrMsg());
-        ret.setProgress(Calculator.percentageDouble(vo.getProgressCount(), vo.getTotalCount()));
-        return ret;
+        vo.setProgress(Calculator.percentageDouble(vo.getProgressCount(), vo.getTotalCount()));
+        return vo;
     }
 
     @ApiOperation(value = "扫描答案DBF、打包DBF下载")
     @PostMapping("data/down")
     public void dataDown(HttpServletResponse response, @RequestParam String taskId) throws Exception {
-        DataExportTaskVo vo = dataExportTaskService.getTask(taskId);
+        DataExportTaskVo vo = asyncTaskService.getDataExportTask(taskId);
         if (vo == null) {
             throw new ParameterException("未找到导出任务");
         }

+ 14 - 0
src/main/java/cn/com/qmth/scancentral/service/AsyncTaskService.java

@@ -0,0 +1,14 @@
+package cn.com.qmth.scancentral.service;
+
+import cn.com.qmth.scancentral.vo.asynctask.AsyncTaskVo;
+import cn.com.qmth.scancentral.vo.subject.DataExportTaskVo;
+
+public interface AsyncTaskService {
+
+    void clearTimeOut();
+
+    DataExportTaskVo getDataExportTask(String taskId);
+
+    void addTask(AsyncTaskVo vo);
+
+}

+ 0 - 13
src/main/java/cn/com/qmth/scancentral/service/DataExportTaskService.java

@@ -1,13 +0,0 @@
-package cn.com.qmth.scancentral.service;
-
-import cn.com.qmth.scancentral.vo.subject.DataExportTaskVo;
-
-public interface DataExportTaskService {
-
-    void clearTimeOut();
-
-    DataExportTaskVo getTask(String taskId);
-
-    void addTask(DataExportTaskVo vo);
-
-}

+ 8 - 7
src/main/java/cn/com/qmth/scancentral/service/impl/DataExportTaskServiceImpl.java → src/main/java/cn/com/qmth/scancentral/service/impl/AsyncTaskServiceImpl.java

@@ -6,22 +6,23 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.springframework.stereotype.Service;
 
-import cn.com.qmth.scancentral.service.DataExportTaskService;
+import cn.com.qmth.scancentral.service.AsyncTaskService;
 import cn.com.qmth.scancentral.util.FileUtil;
+import cn.com.qmth.scancentral.vo.asynctask.AsyncTaskVo;
 import cn.com.qmth.scancentral.vo.subject.DataExportTaskVo;
 
 @Service
-public class DataExportTaskServiceImpl implements DataExportTaskService {
+public class AsyncTaskServiceImpl implements AsyncTaskService {
 
     // 30分钟
     private static long timeOut = 30 * 60 * 1000;
 
-    private final static Map<String, DataExportTaskVo> tasks = new ConcurrentHashMap<>();
+    private final static Map<String, AsyncTaskVo> tasks = new ConcurrentHashMap<>();
 
     private final static Map<String, Long> taskActive = new ConcurrentHashMap<>();
 
     @Override
-    public void addTask(DataExportTaskVo vo) {
+    public void addTask(AsyncTaskVo vo) {
         tasks.put(vo.getTaskId(), vo);
         taskActive.put(vo.getTaskId(), System.currentTimeMillis());
     }
@@ -35,7 +36,7 @@ public class DataExportTaskServiceImpl implements DataExportTaskService {
         Long now = System.currentTimeMillis();
         for (String k : taskActive.keySet()) {
             if (now - taskActive.get(k) > timeOut) {
-                DataExportTaskVo vo = tasks.get(k);
+                AsyncTaskVo vo = tasks.get(k);
                 if (vo != null) {
                     if (vo.getFilePath() != null) {
                         File f = new File(vo.getFilePath()).getParentFile();
@@ -49,9 +50,9 @@ public class DataExportTaskServiceImpl implements DataExportTaskService {
     }
 
     @Override
-    public DataExportTaskVo getTask(String taskId) {
+    public DataExportTaskVo getDataExportTask(String taskId) {
         updateTaskActive(taskId);
-        return tasks.get(taskId);
+        return (DataExportTaskVo) tasks.get(taskId);
     }
 
 }

+ 4 - 4
src/main/java/cn/com/qmth/scancentral/service/impl/SubjectServiceImpl.java

@@ -48,8 +48,8 @@ import cn.com.qmth.scancentral.entity.ExamEntity;
 import cn.com.qmth.scancentral.entity.MarkSiteEntity;
 import cn.com.qmth.scancentral.entity.SubjectEntity;
 import cn.com.qmth.scancentral.enums.ExamStatus;
+import cn.com.qmth.scancentral.service.AsyncTaskService;
 import cn.com.qmth.scancentral.service.BatchPaperService;
-import cn.com.qmth.scancentral.service.DataExportTaskService;
 import cn.com.qmth.scancentral.service.ExamService;
 import cn.com.qmth.scancentral.service.FileService;
 import cn.com.qmth.scancentral.service.MarkSiteService;
@@ -93,7 +93,7 @@ public class SubjectServiceImpl extends MppServiceImpl<SubjectDao, SubjectEntity
     private BatchPaperService batchPaperService;
 
     @Autowired
-    private DataExportTaskService dataExportTaskService;
+    private AsyncTaskService asyncTaskService;
 
     @Autowired
     private MarkSiteService markSiteService;
@@ -321,7 +321,7 @@ public class SubjectServiceImpl extends MppServiceImpl<SubjectDao, SubjectEntity
         AnswerDataExportConsumer com = SpringContextHolder.getBean(AnswerDataExportConsumer.class);
         com.setVo(vo);
         exec.execute(com);
-        dataExportTaskService.addTask(vo);
+        asyncTaskService.addTask(vo);
         return TaskIdVo.create(vo.getTaskId());
     }
 
@@ -344,7 +344,7 @@ public class SubjectServiceImpl extends MppServiceImpl<SubjectDao, SubjectEntity
         SliceDataExportConsumer com = SpringContextHolder.getBean(SliceDataExportConsumer.class);
         com.setVo(vo);
         exec.execute(com);
-        dataExportTaskService.addTask(vo);
+        asyncTaskService.addTask(vo);
         return TaskIdVo.create(vo.getTaskId());
     }
 

+ 3 - 3
src/main/java/cn/com/qmth/scancentral/task/DataExportTaskJob.java

@@ -4,17 +4,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
-import cn.com.qmth.scancentral.service.DataExportTaskService;
+import cn.com.qmth.scancentral.service.AsyncTaskService;
 
 @Service
 public class DataExportTaskJob {
 
     @Autowired
-    private DataExportTaskService dataExportTaskService;
+    private AsyncTaskService asyncTaskService;
 
     @Scheduled(fixedDelay = 30 * 1000, initialDelay = 30 * 1000)
     public void run() {
-        dataExportTaskService.clearTimeOut();
+        asyncTaskService.clearTimeOut();
     }
 
 }

+ 22 - 2
src/main/java/cn/com/qmth/scancentral/vo/subject/DataExportProgressVo.java → src/main/java/cn/com/qmth/scancentral/vo/asynctask/AsyncTaskVo.java

@@ -1,6 +1,10 @@
-package cn.com.qmth.scancentral.vo.subject;
+package cn.com.qmth.scancentral.vo.asynctask;
 
-public class DataExportProgressVo {
+public class AsyncTaskVo {
+
+    private String taskId;
+
+    private String filePath;
 
     private Double progress;
 
@@ -8,6 +12,14 @@ public class DataExportProgressVo {
 
     private String errMsg;
 
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
     public Double getProgress() {
         return progress;
     }
@@ -32,4 +44,12 @@ public class DataExportProgressVo {
         this.errMsg = errMsg;
     }
 
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
 }

+ 2 - 50
src/main/java/cn/com/qmth/scancentral/vo/subject/DataExportTaskVo.java

@@ -1,67 +1,19 @@
 package cn.com.qmth.scancentral.vo.subject;
 
-public class DataExportTaskVo {
+import cn.com.qmth.scancentral.vo.asynctask.AsyncTaskVo;
 
-    private String taskId;
+public class DataExportTaskVo extends AsyncTaskVo {
 
     private Long examId;
 
     private String subjectCode;
 
-    private Double progress;
-
-    private Boolean success;
-
-    private String errMsg;
-
-    private String filePath;
-
     private String fileName;
 
     private int totalCount;
 
     private int progressCount;
 
-    public String getTaskId() {
-        return taskId;
-    }
-
-    public void setTaskId(String taskId) {
-        this.taskId = taskId;
-    }
-
-    public Double getProgress() {
-        return progress;
-    }
-
-    public void setProgress(Double progress) {
-        this.progress = progress;
-    }
-
-    public String getFilePath() {
-        return filePath;
-    }
-
-    public void setFilePath(String filePath) {
-        this.filePath = filePath;
-    }
-
-    public Boolean getSuccess() {
-        return success;
-    }
-
-    public void setSuccess(Boolean success) {
-        this.success = success;
-    }
-
-    public String getErrMsg() {
-        return errMsg;
-    }
-
-    public void setErrMsg(String errMsg) {
-        this.errMsg = errMsg;
-    }
-
     public Long getExamId() {
         return examId;
     }