|
@@ -0,0 +1,542 @@
|
|
|
|
+package cn.iselab.mooctest.site.web.logic.impl;
|
|
|
|
+
|
|
|
|
+import cn.iselab.mooctest.site.common.constant.ThirdPartToolJobTypeConstants;
|
|
|
|
+import cn.iselab.mooctest.site.data.UserDTOForMT;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.ThirdPartToolJobDTO;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.ThirdPartToolJobVO;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.app.statusResponse.ThirdPartToolAppStatusResponseAppScore;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.app.statusResponse.ThirdPartToolAppStatusResponseCode;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.report.ReportStartResponseStatusConstants;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.web.startCommand.ThirdPartToolWebStartConfig;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.web.statusResponse.ThirdPartToolWebStatusResponseCode;
|
|
|
|
+import cn.iselab.mooctest.site.data.inspect.web.statusResponse.ThirdPartToolWebStatusResponseDataScoreModel;
|
|
|
|
+import cn.iselab.mooctest.site.models.*;
|
|
|
|
+import cn.iselab.mooctest.site.service.*;
|
|
|
|
+import cn.iselab.mooctest.site.web.data.ExamVO;
|
|
|
|
+import cn.iselab.mooctest.site.web.data.PaperVO;
|
|
|
|
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
|
|
|
|
+import cn.iselab.mooctest.site.web.logic.ThirdPartToolLogic;
|
|
|
|
+import com.google.gson.Gson;
|
|
|
|
+import com.google.gson.reflect.TypeToken;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import net.sf.json.JSONObject;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
|
+import org.springframework.data.domain.Pageable;
|
|
|
|
+import org.springframework.scheduling.annotation.EnableScheduling;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.LinkedList;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author sunjh
|
|
|
|
+ * @date 2020/2/7 14:57
|
|
|
|
+ */
|
|
|
|
+@Configuration //1.主要用于标记配置类,兼备Component的效果。
|
|
|
|
+@EnableScheduling // 2.开启定时任务
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+public class ThirdPartToolLogicImpl implements ThirdPartToolLogic {
|
|
|
|
+ @Autowired
|
|
|
|
+ private ThirdPartToolAppService thirdPartToolAppService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ThirdPartToolWebService thirdPartToolWebService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ThirdPartToolService thirdPartToolService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private UserService userService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private CaseService caseService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private Exam2CaseService exam2CaseService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamLogic examLogic;
|
|
|
|
+
|
|
|
|
+ private final Logger log = LoggerFactory.getLogger(getClass());
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleRunningJob() throws Exception {
|
|
|
|
+ //获取进行中App任务队列
|
|
|
|
+ List<Long> appRunningJobIdList = thirdPartToolAppService.getRunningThirdPartToolJobIdList();
|
|
|
|
+ //获取进行中web任务队列
|
|
|
|
+ List<Long> webRunningJobIdList = thirdPartToolWebService.getRunningThirdPartToolJobIdList();
|
|
|
|
+ if (null != appRunningJobIdList) {
|
|
|
|
+ for (Long jobId : appRunningJobIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long jobStatus = thirdPartToolAppService.getJobStatus(jobId);
|
|
|
|
+ if (null == jobStatus) {
|
|
|
|
+ throw new Exception("获取job当前状态信息失败[jobId:" + jobId + "]");
|
|
|
|
+ }
|
|
|
|
+ if (jobStatus.equals(ThirdPartToolAppStatusResponseCode.FINISH)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToRunFinish(jobId);
|
|
|
|
+ } else if (jobStatus.equals(ThirdPartToolAppStatusResponseCode.RUN_FAIL)
|
|
|
|
+ || jobStatus.equals(ThirdPartToolAppStatusResponseCode.APK_UNZIP_FAIL)
|
|
|
|
+ || jobStatus.equals(ThirdPartToolAppStatusResponseCode.DOWNLOAD_FAIL)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(jobId, "获取job当前状态信息失败[jobId:" + jobId + "]");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("当前job运行失败:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(jobId, "当前job运行失败:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (null != webRunningJobIdList) {
|
|
|
|
+ for (Long taskId : webRunningJobIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long taskStatus = thirdPartToolWebService.getJobStatus(taskId);
|
|
|
|
+ if (null == taskStatus) {
|
|
|
|
+ throw new Exception("获取任务当前状态信息失败[taskId:" + taskId + "]");
|
|
|
|
+ }
|
|
|
|
+ if (taskStatus.equals(ThirdPartToolWebStatusResponseCode.SUCCESS)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToRunFinish(taskId);
|
|
|
|
+ } else if (taskStatus.equals(ThirdPartToolWebStatusResponseCode.FAIL)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "获取任务当前状态信息失败[taskId:" + taskId + "]");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("当前任务运行失败:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "当前任务运行失败:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handlePendingJob() throws Exception {
|
|
|
|
+ //获取进行中的app任务队列
|
|
|
|
+ List<Long> runningAppTaskIdList = thirdPartToolAppService.getRunningThirdPartToolJobIdList();
|
|
|
|
+ //获取排队中app任务队列
|
|
|
|
+ List<Long> pendingAppTaskIdList = thirdPartToolAppService.getPendingThirdPartToolJobIdList();
|
|
|
|
+
|
|
|
|
+ //获取进行中的web任务队列
|
|
|
|
+ List<Long> runningWebTaskIdList = thirdPartToolWebService.getRunningThirdPartToolJobIdList();
|
|
|
|
+ //获取排队中web任务队列
|
|
|
|
+ List<Long> pendingWebTaskIdList = thirdPartToolWebService.getPendingThirdPartToolJobIdList();
|
|
|
|
+
|
|
|
|
+ //TODO 判断运行中app队列是否已满,未满则启动排队中任务
|
|
|
|
+ while (!thirdPartToolAppService.isRunningQueueFull(runningAppTaskIdList) && null != pendingAppTaskIdList && !pendingAppTaskIdList.isEmpty()) {
|
|
|
|
+ Long tempAppTaskId = pendingAppTaskIdList.remove(0);
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolAppService.runJob(tempAppTaskId);
|
|
|
|
+ thirdPartToolService.changeJobStatusToRunning(tempAppTaskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(tempAppTaskId, e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ runningAppTaskIdList.add(tempAppTaskId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //TODO 判断运行中web队列是否已满,未满则启动排队中任务
|
|
|
|
+ while (!thirdPartToolWebService.isRunningQueueFull(runningWebTaskIdList) && null != pendingWebTaskIdList && !pendingWebTaskIdList.isEmpty()) {
|
|
|
|
+ Long tempWebTaskId = pendingWebTaskIdList.remove(0);
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolWebService.runJob(tempWebTaskId);
|
|
|
|
+ thirdPartToolService.changeJobStatusToRunning(tempWebTaskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(tempWebTaskId, e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ runningWebTaskIdList.add(tempWebTaskId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleRunFinishJob() throws Exception {
|
|
|
|
+ //获取运行完成的app任务队列
|
|
|
|
+ List<Long> runFinishAppTaskIdList = thirdPartToolAppService.getRunFinishThirdPartToolJobIdList();
|
|
|
|
+ //TODO 获取运行完成的web任务队列
|
|
|
|
+ List<Long> runFinishWebTaskIdList = thirdPartToolWebService.getRunFinishThirdPartToolJobList();
|
|
|
|
+
|
|
|
|
+ //TODO app写数据
|
|
|
|
+ if (null != runFinishAppTaskIdList) {
|
|
|
|
+ for (Long taskId : runFinishAppTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolService.changeJobStatusToWriteResult(taskId);
|
|
|
|
+ thirdPartToolAppService.recordScore(taskId);
|
|
|
|
+ thirdPartToolService.changeJobStatusToWriteFinish(taskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("写结果--error[" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "写结果--error[" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //TODO web写数据
|
|
|
|
+ if (null != runFinishWebTaskIdList) {
|
|
|
|
+ for (Long taskId : runFinishWebTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolService.changeJobStatusToWriteResult(taskId);
|
|
|
|
+ thirdPartToolWebService.recordScore(taskId);
|
|
|
|
+ thirdPartToolService.changeJobStatusToWriteFinish(taskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("写结果--error[" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "写结果--error[" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleWriteResultFinishJob() throws Exception {
|
|
|
|
+ List<Long> writeFinishAppTaskIdList = thirdPartToolAppService.getWriteFinishThirdPartToolJobIdList();
|
|
|
|
+ List<Long> writeFinishWebTaskIdList = thirdPartToolWebService.getWriteFinishThirdPartToolJobIdList();
|
|
|
|
+ if (null != writeFinishAppTaskIdList) {
|
|
|
|
+ for (Long taskId : writeFinishAppTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportPending(taskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("启动报告服务--error[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告服务--error[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (null != writeFinishWebTaskIdList) {
|
|
|
|
+ for (Long taskId : writeFinishWebTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportPending(taskId);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("启动报告服务--error[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告服务--error[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleGenReportPendingJob() throws Exception {
|
|
|
|
+ List<Long> generateReportPendingAppTaskIdList = thirdPartToolAppService.getGenReportPendingThirdPartToolJobIdList();
|
|
|
|
+ List<Long> generateReportPendingWebTaskIdList = thirdPartToolWebService.getGenReportPendingThirdPartToolJobIdList();
|
|
|
|
+
|
|
|
|
+ if (null != generateReportPendingAppTaskIdList && !generateReportPendingAppTaskIdList.isEmpty()) {
|
|
|
|
+ for (Long taskId : generateReportPendingAppTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long status = thirdPartToolAppService.runGenerateReport(taskId);
|
|
|
|
+ if (status.equals(ReportStartResponseStatusConstants.SUCCESS)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportRunning(taskId);
|
|
|
|
+ } else {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告服务失败[taskId:" + taskId + "]");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("启动报告失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告服务失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (null != generateReportPendingWebTaskIdList && !generateReportPendingWebTaskIdList.isEmpty()) {
|
|
|
|
+ for (Long taskId : generateReportPendingWebTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long status = thirdPartToolWebService.runGenerateReport(taskId);
|
|
|
|
+ if (status.equals(ReportStartResponseStatusConstants.SUCCESS)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportRunning(taskId);
|
|
|
|
+ } else {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告失败[taskId:" + taskId + "]:");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("启动报告失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "启动报告服务失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void handleGenReportRunningJob() throws Exception {
|
|
|
|
+ List<Long> generateReportRunningAppTaskIdList = thirdPartToolAppService.getGenReportRunningThirdPartToolJobIdList();
|
|
|
|
+ List<Long> generateReportRunningWebTaskIdList = thirdPartToolWebService.getGenReportRunningThirdPartToolJobIdList();
|
|
|
|
+
|
|
|
|
+ if (null != generateReportRunningAppTaskIdList && !generateReportRunningAppTaskIdList.isEmpty()) {
|
|
|
|
+ for (Long taskId : generateReportRunningAppTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long generateReportStatus = thirdPartToolService.getGenerateStatus(taskId);
|
|
|
|
+ if (generateReportStatus.equals(ReportStartResponseStatusConstants.SUCCESS)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportFinish(taskId);
|
|
|
|
+ } else if (generateReportStatus.equals(ReportStartResponseStatusConstants.FAIL)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "获取报告信息失败[taskId:" + taskId + "]");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("获取报告信息失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "获取报告信息失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (null != generateReportRunningWebTaskIdList && !generateReportRunningWebTaskIdList.isEmpty()) {
|
|
|
|
+ for (Long taskId : generateReportRunningWebTaskIdList) {
|
|
|
|
+ try {
|
|
|
|
+ Long generateReportStatus = thirdPartToolService.getGenerateStatus(taskId);
|
|
|
|
+ if (generateReportStatus.equals(ReportStartResponseStatusConstants.SUCCESS)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToGenReportFinish(taskId);
|
|
|
|
+ } else if (generateReportStatus.equals(ReportStartResponseStatusConstants.FAIL)) {
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "获取报告信息失败[taskId:" + taskId + "]");
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.info("获取报告信息失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ thirdPartToolService.changeJobStatusToFail(taskId, "获取报告信息失败[taskId:" + taskId + "]:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public ThirdPartToolJob createThirdPartToolJob(ThirdPartToolJobDTO thirdPartToolJobDTO, Long userId) throws Exception {
|
|
|
|
+ return thirdPartToolService.create(thirdPartToolJobDTO, thirdPartToolJobDTO.getExamId(), userId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void startThirdPartToolJob(Long userId, Long examId) throws Exception {
|
|
|
|
+ thirdPartToolService.startThirdPartToolJob(userId, examId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void batchStartThirdPartToolJob(Long examId) throws Exception {
|
|
|
|
+ thirdPartToolService.batchStartThirdPartToolJob(examId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void stopThirdPartToolJob(Long userId, Long examId) throws Exception {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<ThirdPartToolJobVO> getAllThirdPartToolJobsByExamId(Long examId) throws Exception {
|
|
|
|
+ List<ThirdPartToolJob> thirdPartToolJobList = thirdPartToolService.getAllThirdPartToolJobsByExamId(examId);
|
|
|
|
+ List<ThirdPartToolJobVO> thirdPartToolJobVOList = new LinkedList<>();
|
|
|
|
+ Gson gson = new Gson();
|
|
|
|
+ for (ThirdPartToolJob thirdPartToolJob : thirdPartToolJobList) {
|
|
|
|
+ UserDTOForMT user = userService.findByUserId(thirdPartToolJob.getOwnerId());
|
|
|
|
+ if (null == user) {
|
|
|
|
+ throw new Exception("this user is not exist:" + thirdPartToolJob.getOwnerId());
|
|
|
|
+ }
|
|
|
|
+ ThirdPartToolJobVO thirdPartToolJobVO = new ThirdPartToolJobVO();
|
|
|
|
+ thirdPartToolJobVO.setUserId(thirdPartToolJob.getOwnerId());
|
|
|
|
+ thirdPartToolJobVO.setExamId(thirdPartToolJob.getGroupId());
|
|
|
|
+ thirdPartToolJobVO.setOwnerName(user.getName());
|
|
|
|
+ thirdPartToolJobVO.setSchool(user.getSchool());
|
|
|
|
+ thirdPartToolJobVO.setName(thirdPartToolJob.getName());
|
|
|
|
+ thirdPartToolJobVO.setStatus(thirdPartToolJob.getStatus());
|
|
|
|
+ thirdPartToolJobVO.setCreateTime(thirdPartToolJob.getCreateTime());
|
|
|
|
+ thirdPartToolJobVO.setInformation(thirdPartToolJob.getInformation());
|
|
|
|
+ thirdPartToolJobVO.setType(thirdPartToolJob.getType());
|
|
|
|
+ thirdPartToolJobVO.setReportUrl(thirdPartToolJob.getReportUrl());
|
|
|
|
+ thirdPartToolJobVO.setFile(thirdPartToolJob.getFile());
|
|
|
|
+ if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.WEB)) {
|
|
|
|
+ ThirdPartToolWebStatusResponseDataScoreModel score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolWebStatusResponseDataScoreModel.class);
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getComplexity());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", score.getSecurity());
|
|
|
|
+ thirdPartToolJobVO.setScore(score.getTotalScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ } else if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.APP)) {
|
|
|
|
+ ThirdPartToolAppStatusResponseAppScore score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolAppStatusResponseAppScore.class);
|
|
|
|
+ try {
|
|
|
|
+ JSONObject config = JSONObject.fromObject(thirdPartToolJob.getConfig());
|
|
|
|
+ thirdPartToolJobVO.setConfig(config);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ thirdPartToolJobVO.setConfig(null);
|
|
|
|
+ }
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getStability());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", 0);
|
|
|
|
+ thirdPartToolJobVO.setScore(thirdPartToolJob.getScore() == null?"0":thirdPartToolJob.getScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ thirdPartToolJobVOList.add(thirdPartToolJobVO);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ return thirdPartToolJobVOList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public ThirdPartToolJobVO getThirdPartToolJobByExamIdAndUserId(Long examId, Long userId) throws Exception {
|
|
|
|
+ ThirdPartToolJob thirdPartToolJob = thirdPartToolService.getThirdPartToolJobsByExamIdAndUserId(examId, userId);
|
|
|
|
+ if (null == thirdPartToolJob) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ UserDTOForMT user = userService.findByUserId(thirdPartToolJob.getOwnerId());
|
|
|
|
+ if (null == user) {
|
|
|
|
+ throw new Exception("this user is not exist:" + thirdPartToolJob.getOwnerId());
|
|
|
|
+ }
|
|
|
|
+ Gson gson = new Gson();
|
|
|
|
+ ThirdPartToolJobVO thirdPartToolJobVO = new ThirdPartToolJobVO();
|
|
|
|
+ thirdPartToolJobVO.setUserId(thirdPartToolJob.getOwnerId());
|
|
|
|
+ thirdPartToolJobVO.setExamId(thirdPartToolJob.getGroupId());
|
|
|
|
+ thirdPartToolJobVO.setOwnerName(user.getName());
|
|
|
|
+ thirdPartToolJobVO.setSchool(user.getSchool());
|
|
|
|
+ thirdPartToolJobVO.setName(thirdPartToolJob.getName());
|
|
|
|
+ thirdPartToolJobVO.setUrl(thirdPartToolJob.getUrl());
|
|
|
|
+ thirdPartToolJobVO.setStatus(thirdPartToolJob.getStatus());
|
|
|
|
+ thirdPartToolJobVO.setCreateTime(thirdPartToolJob.getCreateTime());
|
|
|
|
+ thirdPartToolJobVO.setInformation(thirdPartToolJob.getInformation());
|
|
|
|
+ thirdPartToolJobVO.setType(thirdPartToolJob.getType());
|
|
|
|
+ thirdPartToolJobVO.setReportUrl(thirdPartToolJob.getReportUrl());
|
|
|
|
+ thirdPartToolJobVO.setFile(thirdPartToolJob.getFile());
|
|
|
|
+ if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.WEB)) {
|
|
|
|
+ ThirdPartToolWebStartConfig thirdPartToolWebStartConfig;
|
|
|
|
+ try {
|
|
|
|
+ thirdPartToolWebStartConfig = gson.fromJson(thirdPartToolJob.getConfig(), ThirdPartToolWebStartConfig.class);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new Exception("[jobs status:pending]fail to get config:" + thirdPartToolJob.getId());
|
|
|
|
+ }
|
|
|
|
+ thirdPartToolJobVO.setConfig(thirdPartToolWebStartConfig);
|
|
|
|
+ ThirdPartToolWebStatusResponseDataScoreModel score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolWebStatusResponseDataScoreModel.class);
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getComplexity());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", score.getSecurity());
|
|
|
|
+ thirdPartToolJobVO.setScore(score.getTotalScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ } else if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.APP)) {
|
|
|
|
+ ThirdPartToolAppStatusResponseAppScore score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolAppStatusResponseAppScore.class);
|
|
|
|
+ try {
|
|
|
|
+ JSONObject config = JSONObject.fromObject(thirdPartToolJob.getConfig());
|
|
|
|
+ thirdPartToolJobVO.setConfig(config);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ thirdPartToolJobVO.setConfig(null);
|
|
|
|
+ }
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getStability());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", 0);
|
|
|
|
+ thirdPartToolJobVO.setScore(thirdPartToolJob.getScore() == null?"0":thirdPartToolJob.getScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return thirdPartToolJobVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getCaseTypeByCaseId(Long caseId) throws Exception {
|
|
|
|
+ CaseExtends caseExtends = caseService.getCaseExtendsById(caseId);
|
|
|
|
+ Map<String, String> properties = new Gson().fromJson(caseExtends.getProperties(), new
|
|
|
|
+ TypeToken<HashMap<String, String>>() {
|
|
|
|
+ }.getType());
|
|
|
|
+ return properties.get("testType");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getExamTypeByExamId(Long examId) throws Exception {
|
|
|
|
+ Long caseId = exam2CaseService.getCaseIdsByExamId(examId).get(0);
|
|
|
|
+ CaseExtends caseExtends = caseService.getCaseExtendsById(caseId);
|
|
|
|
+ Map<String, String> properties = new Gson().fromJson(caseExtends.getProperties(), new
|
|
|
|
+ TypeToken<HashMap<String, String>>() {
|
|
|
|
+ }.getType());
|
|
|
|
+ return properties.get("testType");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, Object> test(String url) throws Exception {
|
|
|
|
+ thirdPartToolAppService.readObjectByUrl(url);
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public ExamVO saveOrUpdateInspectExam(ExamVO exam, Long testType, Long userId) throws Exception {
|
|
|
|
+ exam.setStatus(0);
|
|
|
|
+ //创建target
|
|
|
|
+ Target savedTarget = thirdPartToolService.createDefaultInspectTarget(userId);
|
|
|
|
+ //创建case
|
|
|
|
+ CaseExtends savedCase = thirdPartToolService.createDefaultInspectCase(userId, savedTarget.getId(), testType);
|
|
|
|
+ //创建paper
|
|
|
|
+ Paper savedPaper = thirdPartToolService.createDefaultInspectPaper(userId, savedCase.getId());
|
|
|
|
+ //创建exam
|
|
|
|
+ ExamVO savedExam = examLogic.createExam(exam);
|
|
|
|
+ PaperVO paperVO = new PaperVO();
|
|
|
|
+ //创建exam_2_case;
|
|
|
|
+ Exam2Case exam2Case = thirdPartToolService.createExam2Case(savedExam.getId(), savedPaper.getId(), savedCase.getId());
|
|
|
|
+ //创建exam_2_paper;
|
|
|
|
+ Exam2Paper exam2Paper = thirdPartToolService.createExam2Paper(savedExam.getId(), savedPaper.getId());
|
|
|
|
+ //创建paper_2_case
|
|
|
|
+ Paper2Case paper2Case = thirdPartToolService.createPaper2Case(savedPaper.getId(), savedCase.getId());
|
|
|
|
+ savedExam.setPaperId(savedPaper.getId());
|
|
|
|
+ return savedExam;
|
|
|
|
+ //return thirdPartToolService.saveOrUpdateInspectExam(exam, testType, userId);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Page<ThirdPartToolJobVO> getJobsPageByExamId(Long examId, String keyword, Boolean needFilter, Pageable pageable) {
|
|
|
|
+ Page<ThirdPartToolJob> thirdPartToolJobs = thirdPartToolService.getJobByExamIdPage(examId, keyword, pageable);
|
|
|
|
+ Page<ThirdPartToolJobVO> thirdPartToolJobVOS = thirdPartToolJobs.map(thirdPartToolJob -> {
|
|
|
|
+ ThirdPartToolJobVO thirdPartToolJobVO = new ThirdPartToolJobVO();
|
|
|
|
+ thirdPartToolJobVO.setScore(thirdPartToolJob.getScore());
|
|
|
|
+ thirdPartToolJobVO.setExamId(thirdPartToolJob.getGroupId());
|
|
|
|
+ thirdPartToolJobVO.setCreateTime(thirdPartToolJob.getCreateTime());
|
|
|
|
+ thirdPartToolJobVO.setInformation(thirdPartToolJob.getInformation());
|
|
|
|
+ thirdPartToolJobVO.setOwnerName(userService.findByUserId(thirdPartToolJob.getOwnerId()).getName());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Gson gson = new Gson();
|
|
|
|
+ thirdPartToolJobVO.setReportUrl(thirdPartToolJob.getReportUrl());
|
|
|
|
+ if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.WEB)) {
|
|
|
|
+ ThirdPartToolWebStatusResponseDataScoreModel score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolWebStatusResponseDataScoreModel.class);
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getComplexity());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", score.getSecurity());
|
|
|
|
+ thirdPartToolJobVO.setScore(score.getTotalScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ } else if (thirdPartToolJob.getType().equals(ThirdPartToolJobTypeConstants.APP)) {
|
|
|
|
+ ThirdPartToolAppStatusResponseAppScore score = gson.fromJson(thirdPartToolJob.getResult(), ThirdPartToolAppStatusResponseAppScore.class);
|
|
|
|
+ if (null != score) {
|
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
|
+ json.put("compatibility", score.getCompatibility());
|
|
|
|
+ json.put("complexity", score.getStability());
|
|
|
|
+ json.put("performance", score.getPerformance());
|
|
|
|
+ json.put("robustness", score.getRobustness());
|
|
|
|
+ json.put("security", 0);
|
|
|
|
+ thirdPartToolJobVO.setScore(thirdPartToolJob.getScore() == null?"0":thirdPartToolJob.getScore());
|
|
|
|
+ thirdPartToolJobVO.setResult(json);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ thirdPartToolJobVO.setSchool(userService.findByUserId(thirdPartToolJob.getOwnerId()).getSchool());
|
|
|
|
+ thirdPartToolJobVO.setStatus(thirdPartToolJob.getStatus());
|
|
|
|
+ thirdPartToolJobVO.setType(thirdPartToolJob.getType());
|
|
|
|
+ thirdPartToolJobVO.setStartTime(thirdPartToolJob.getStartTime());
|
|
|
|
+ thirdPartToolJobVO.setName(thirdPartToolJob.getName());
|
|
|
|
+ thirdPartToolJobVO.setUserId(thirdPartToolJob.getOwnerId());
|
|
|
|
+ return thirdPartToolJobVO;
|
|
|
|
+ });
|
|
|
|
+ return thirdPartToolJobVOS;
|
|
|
|
+ }
|
|
|
|
+}
|