parent
6b3e0333be
commit
58c743a889
|
@ -74,6 +74,7 @@ import org.springframework.http.HttpEntity;
|
|||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.integration.redis.util.RedisLockRegistry;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
@ -82,6 +83,7 @@ import org.springframework.web.client.RestTemplate;
|
|||
import java.io.*;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -148,6 +150,9 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
|
|||
@Autowired
|
||||
private AttachmentFeignClient attachmentFeignClient;
|
||||
|
||||
@Autowired
|
||||
private RedisLockRegistry redisLockRegistry;
|
||||
|
||||
@Value("${zmn.hostStr}")
|
||||
private String hostStr;
|
||||
|
||||
|
@ -1477,264 +1482,274 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService<AtuPlanTask>
|
|||
PlanConstant.BATCH_EXECUTING_STATUS.equals(planBatch.getStatus())) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.BATCH_NOT_FINISH);
|
||||
}
|
||||
logger.debug("根据批次编号[{}]查询计划信息", firstFailTask.getBatchId());
|
||||
AtuPlanInfo planInfo = atuPlanInfoApiService.findByBatchId(firstFailTask.getBatchId());
|
||||
if (planInfo == null) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.PLAN_IS_NULL);
|
||||
// 加个锁,当选择的任务量比较多的时候,需要时间进行处理
|
||||
Lock lock = redisLockRegistry.obtain(String.format("%s%s", RedisConstant.PLAN_BATCH_RETRY_LOCK_PRE, planBatch.getId()));
|
||||
if (!lock.tryLock()) {
|
||||
// 获取不到锁,正在处理重试
|
||||
throw new PlatformRuntimeException(ExecPlanError.BATCH_IS_DEALING_WITH_RETRY);
|
||||
}
|
||||
try {
|
||||
logger.debug("根据批次编号[{}]查询计划信息", firstFailTask.getBatchId());
|
||||
AtuPlanInfo planInfo = atuPlanInfoApiService.findByBatchId(firstFailTask.getBatchId());
|
||||
if (planInfo == null) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.PLAN_IS_NULL);
|
||||
}
|
||||
|
||||
logger.debug("更新计划和批次状态");
|
||||
String planStatus = "";
|
||||
if (planBatch.getTaskTotal() > retryDto.getTaskIdList().size()) {
|
||||
logger.debug("部分任务重试,批次状态为:{},计划状态为:{}", PlanConstant.BATCH_EXECUTING_STATUS,
|
||||
PlanConstant.PLAN_EXECUTING_STATUS);
|
||||
planBatch.setStatus(PlanConstant.BATCH_EXECUTING_STATUS);
|
||||
planStatus = PlanConstant.PLAN_EXECUTING_STATUS;
|
||||
} else {
|
||||
logger.debug("全部任务重试,批次状态为:{},计划状态为:{}", PlanConstant.BATCH_WAITING_STATUS,
|
||||
PlanConstant.PLAN_WAITING_STATUS);
|
||||
planBatch.setStatus(PlanConstant.BATCH_WAITING_STATUS);
|
||||
planStatus = PlanConstant.PLAN_WAITING_STATUS;
|
||||
}
|
||||
List<String> deletedFilePath = new ArrayList<>();
|
||||
List<String> taskIds = new ArrayList<>();
|
||||
planTaskList.forEach(task -> {
|
||||
logger.info("普通脚本任务id:{},执行结果文件:{}", task.getId(), task.getExecResultFile());
|
||||
taskIds.add(task.getId());
|
||||
String execResultFile = task.getExecResultFile();
|
||||
if (StringUtils.isNotBlank(execResultFile)){
|
||||
deletedFilePath.add(execResultFile);
|
||||
getActualImagePath(deletedFilePath, execResultFile);
|
||||
logger.debug("更新计划和批次状态");
|
||||
String planStatus = "";
|
||||
if (planBatch.getTaskTotal() > retryDto.getTaskIdList().size()) {
|
||||
logger.debug("部分任务重试,批次状态为:{},计划状态为:{}", PlanConstant.BATCH_EXECUTING_STATUS,
|
||||
PlanConstant.PLAN_EXECUTING_STATUS);
|
||||
planBatch.setStatus(PlanConstant.BATCH_EXECUTING_STATUS);
|
||||
planStatus = PlanConstant.PLAN_EXECUTING_STATUS;
|
||||
} else {
|
||||
logger.debug("全部任务重试,批次状态为:{},计划状态为:{}", PlanConstant.BATCH_WAITING_STATUS,
|
||||
PlanConstant.PLAN_WAITING_STATUS);
|
||||
planBatch.setStatus(PlanConstant.BATCH_WAITING_STATUS);
|
||||
planStatus = PlanConstant.PLAN_WAITING_STATUS;
|
||||
}
|
||||
String perDataPath = task.getPerDataPath();
|
||||
if (StringUtils.isNotBlank(perDataPath)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(perDataPath)[1]);
|
||||
}
|
||||
String videoUrl = task.getVideoUrl();
|
||||
if (StringUtils.isNotBlank(videoUrl)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]);
|
||||
}
|
||||
// 场景用例脚本json是单独的需要删除
|
||||
if (task.getCaseType().equals("5")) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(task.getScriptJson())[1]);
|
||||
}
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(taskIds)) {
|
||||
List<AtuPlanSceneCaseTask> atuPlanSceneCaseTaskList = atuPlanSceneCaseTaskService.querySceneCaseTasksByTaskIds(taskIds);
|
||||
atuPlanSceneCaseTaskList.forEach(atuPlanSceneCaseTask -> {
|
||||
logger.info("场景任务id:{},节点任务id:{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(),atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile());
|
||||
String videoUrl = atuPlanSceneCaseTask.getVideoUrl();
|
||||
if (StringUtils.isNotBlank(videoUrl)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]);
|
||||
}
|
||||
String perDataPath = atuPlanSceneCaseTask.getPerDataPath();
|
||||
if (StringUtils.isNotBlank(perDataPath)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(perDataPath)[1]);
|
||||
}
|
||||
String execResultFile = atuPlanSceneCaseTask.getExecResultFile();
|
||||
if (StringUtils.isNotBlank(execResultFile)) {
|
||||
List<String> deletedFilePath = new ArrayList<>();
|
||||
List<String> taskIds = new ArrayList<>();
|
||||
planTaskList.forEach(task -> {
|
||||
logger.info("普通脚本任务id:{},执行结果文件:{}", task.getId(), task.getExecResultFile());
|
||||
taskIds.add(task.getId());
|
||||
String execResultFile = task.getExecResultFile();
|
||||
if (StringUtils.isNotBlank(execResultFile)){
|
||||
deletedFilePath.add(execResultFile);
|
||||
getActualImagePath(deletedFilePath, execResultFile);
|
||||
}
|
||||
String perDataPath = task.getPerDataPath();
|
||||
if (StringUtils.isNotBlank(perDataPath)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(perDataPath)[1]);
|
||||
}
|
||||
String videoUrl = task.getVideoUrl();
|
||||
if (StringUtils.isNotBlank(videoUrl)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]);
|
||||
}
|
||||
// 场景用例脚本json是单独的需要删除
|
||||
if (task.getCaseType().equals("5")) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(task.getScriptJson())[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(deletedFilePath)) {
|
||||
AssociatedFilesDto associatedFilesDto = new AssociatedFilesDto();
|
||||
associatedFilesDto.setObjId("-1");
|
||||
associatedFilesDto.setFileIds(deletedFilePath);
|
||||
attachmentFeignClient.associatedFiles(associatedFilesDto);
|
||||
}
|
||||
planBatchApiService.updateByEntity(planBatch);
|
||||
atuPlanInfoApiService.updateStatusByLastBatchId(planBatch.getId(), planStatus);
|
||||
|
||||
logger.info("查询计划数据集中未被选择的意图数据");
|
||||
Set<String> scriptIdSet = new HashSet<>();
|
||||
Map<String, List<String>> envScriptMap = new HashMap<>();
|
||||
Map<String, List<AtuPlanTask>> envScriptTaskMap = new HashMap<>();
|
||||
List<String> taskIdList = new ArrayList<>();
|
||||
for (AtuPlanTask planTask : planTaskList) {
|
||||
taskIdList.add(planTask.getId());
|
||||
scriptIdSet.add(planTask.getScriptId());
|
||||
List<String> scriptIdList = new ArrayList<>();
|
||||
if (envScriptMap.containsKey(planTask.getEnvId())) {
|
||||
scriptIdList = envScriptMap.get(planTask.getEnvId());
|
||||
}
|
||||
scriptIdList.add(planTask.getScriptId());
|
||||
envScriptMap.put(planTask.getEnvId(), scriptIdList);
|
||||
String key = planTask.getEnvId() + "-" + planTask.getScriptId();
|
||||
List<AtuPlanTask> envScriptTaskList = new ArrayList<>();
|
||||
if (envScriptTaskMap.containsKey(key)) {
|
||||
envScriptTaskList = envScriptTaskMap.get(key);
|
||||
}
|
||||
envScriptTaskList.add(planTask);
|
||||
envScriptTaskMap.put(key, envScriptTaskList);
|
||||
}
|
||||
logger.debug("获取最新的输入项数据");
|
||||
Map<String, String> taskParamsMap = getRetryTaskInputInfo(envScriptTaskMap, envScriptMap);
|
||||
logger.debug("最新输入项数据大小:{}", taskParamsMap.size());
|
||||
|
||||
logger.debug("start 初始化批次缓存数据");
|
||||
taskRetryInitCache(taskIdList, planBatch);
|
||||
logger.debug("end 初始化批次缓存数据");
|
||||
|
||||
logger.debug("查询脚本最新数据");
|
||||
logger.debug("脚本数量:{}", scriptIdSet.size());
|
||||
Map<String, AtuScriptDetailDto> scriptMap = queryScriptDetailMap(scriptIdSet);
|
||||
logger.debug("脚本最新信息数量:{}", scriptMap.size());
|
||||
|
||||
Map<String, Object> caseTypeMap = new HashMap<>();
|
||||
caseTypeMap.put("hasPc", false);
|
||||
caseTypeMap.put("hasMob", false);
|
||||
caseTypeMap.put("hasInterface", false);
|
||||
for (AtuPlanTask planTask : planTaskList) {
|
||||
String status = planTask.getStatus();
|
||||
logger.debug("原任务状态为: {}", status);
|
||||
// 判断任务是否开始执行
|
||||
if (PlanConstant.TASK_WAIT_EXECUTE_STATUS.equals(planTask.getStatus()) ||
|
||||
PlanConstant.TASK_START_EXECUTE_STATUS.equals(planTask.getStatus())) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.TASK_NOT_FINISH);
|
||||
}
|
||||
logger.debug("修改任务脚本为最新脚本信息");
|
||||
if (scriptMap.containsKey(planTask.getScriptId())) {
|
||||
AtuScriptDetailDto atuScriptDetailDto = scriptMap.get(planTask.getScriptId());
|
||||
planTask.setVersionId(atuScriptDetailDto.getVersionId());
|
||||
planTask.setVersionName(atuScriptDetailDto.getVersionName());
|
||||
planTask.setScriptName(atuScriptDetailDto.getScriptName());
|
||||
planTask.setScriptJson(atuScriptDetailDto.getScriptPath());
|
||||
planTask.setAppId(queryAppId(planInfo.getId(),atuScriptDetailDto.getPlatformType(),
|
||||
atuScriptDetailDto.getAppPackage(),atuScriptDetailDto.getScriptType()));
|
||||
}
|
||||
|
||||
logger.debug("生成任务执行信息");
|
||||
AtuTaskExecDto taskExecDto = new AtuTaskExecDto();
|
||||
BeanUtil.copyProperties(planInfo, taskExecDto);
|
||||
taskExecDto.setPlanId(planInfo.getId());
|
||||
taskExecDto.setFailRetryNum(planInfo.getFailRetryCount());
|
||||
taskExecDto.setBatchId(planTask.getBatchId());
|
||||
taskExecDto.setTaskId(planTask.getId());
|
||||
taskExecDto.setCaseId(planTask.getCaseId());
|
||||
taskExecDto.setEnvId(planTask.getEnvId());
|
||||
String type = planTask.getCaseType();
|
||||
taskExecDto.setCaseType(type);
|
||||
String scriptPath = planTask.getScriptJson();
|
||||
|
||||
Map<String, Object> caseParams = new HashMap<>();
|
||||
if (taskParamsMap.containsKey(planTask.getId())) {
|
||||
logger.debug("重试使用新数据");
|
||||
caseParams = JSONUtil.toBean(taskParamsMap.get(planTask.getId()), Map.class);
|
||||
} else {
|
||||
if (StrUtil.isNotBlank(planTask.getCaseParam())) {
|
||||
logger.debug("使用旧数据重试");
|
||||
caseParams = JSONUtil.toBean(planTask.getCaseParam(), Map.class);
|
||||
}
|
||||
}
|
||||
// 更新静态数据与模糊数据为最新值
|
||||
caseParams = this.handleQuoteData(caseParams, planTask.getEnvId(), planInfo.getProjectId());
|
||||
planTask.setCaseParam(JSONUtil.toJsonStr(caseParams));
|
||||
|
||||
String appId = planTask.getAppId();
|
||||
AtuSceneNodeExecDto sceneNodeExecDto = null;
|
||||
|
||||
//判断是否场景任务
|
||||
if (PlanConstant.SCRIPT_TYPE_SCENE.equals(planTask.getCaseType())) {
|
||||
// 调用脚本服务获取场景首节点信息,通知脚本服务场景重新发起
|
||||
logger.debug("查询场景脚本的首节点信息");
|
||||
SceneFirstNodeDto firstNodeDto = new SceneFirstNodeDto();
|
||||
firstNodeDto.setTaskId(planTask.getId());
|
||||
firstNodeDto.setCaseId(planTask.getCaseId());
|
||||
String scriptId = planTask.getScriptId();
|
||||
firstNodeDto.setScriptId(scriptId);
|
||||
firstNodeDto.setParamMap(caseParams);
|
||||
logger.debug("查询参数 => {}", JSONUtil.toJsonStr(firstNodeDto));
|
||||
AtuSceneNodeInfoDto nodeInfo;
|
||||
try {
|
||||
ResultWrapper<AtuSceneNodeExecDto> firstNodeResult = publicFeignClient.getFirstNode(firstNodeDto);
|
||||
if (firstNodeResult.isSuccess() && firstNodeResult.getData() != null) {
|
||||
logger.debug("首节点信息为 => " + JSONUtil.toJsonStr(firstNodeResult));
|
||||
sceneNodeExecDto = firstNodeResult.getData();
|
||||
nodeInfo = sceneNodeExecDto.getNodeInfo();
|
||||
} else {
|
||||
throw new RuntimeException("获取场景脚本[ " + scriptId + "]首节点信息异常," + firstNodeResult.getMessage());
|
||||
if (!CollectionUtils.isEmpty(taskIds)) {
|
||||
List<AtuPlanSceneCaseTask> atuPlanSceneCaseTaskList = atuPlanSceneCaseTaskService.querySceneCaseTasksByTaskIds(taskIds);
|
||||
atuPlanSceneCaseTaskList.forEach(atuPlanSceneCaseTask -> {
|
||||
logger.info("场景任务id:{},节点任务id:{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(),atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile());
|
||||
String videoUrl = atuPlanSceneCaseTask.getVideoUrl();
|
||||
if (StringUtils.isNotBlank(videoUrl)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("获取场景首节点信息异常", e);
|
||||
throw new PlatformRuntimeException(ExecPlanError.GET_SCENE_FIRST_NODE_FAIL);
|
||||
String perDataPath = atuPlanSceneCaseTask.getPerDataPath();
|
||||
if (StringUtils.isNotBlank(perDataPath)) {
|
||||
deletedFilePath.add("/" + MinioPathUtils.idToPath(perDataPath)[1]);
|
||||
}
|
||||
String execResultFile = atuPlanSceneCaseTask.getExecResultFile();
|
||||
if (StringUtils.isNotBlank(execResultFile)) {
|
||||
deletedFilePath.add(execResultFile);
|
||||
getActualImagePath(deletedFilePath, execResultFile);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(deletedFilePath)) {
|
||||
AssociatedFilesDto associatedFilesDto = new AssociatedFilesDto();
|
||||
associatedFilesDto.setObjId("-1");
|
||||
associatedFilesDto.setFileIds(deletedFilePath);
|
||||
attachmentFeignClient.associatedFiles(associatedFilesDto);
|
||||
}
|
||||
planBatchApiService.updateByEntity(planBatch);
|
||||
atuPlanInfoApiService.updateStatusByLastBatchId(planBatch.getId(), planStatus);
|
||||
|
||||
logger.info("查询计划数据集中未被选择的意图数据");
|
||||
Set<String> scriptIdSet = new HashSet<>();
|
||||
Map<String, List<String>> envScriptMap = new HashMap<>();
|
||||
Map<String, List<AtuPlanTask>> envScriptTaskMap = new HashMap<>();
|
||||
List<String> taskIdList = new ArrayList<>();
|
||||
for (AtuPlanTask planTask : planTaskList) {
|
||||
taskIdList.add(planTask.getId());
|
||||
scriptIdSet.add(planTask.getScriptId());
|
||||
List<String> scriptIdList = new ArrayList<>();
|
||||
if (envScriptMap.containsKey(planTask.getEnvId())) {
|
||||
scriptIdList = envScriptMap.get(planTask.getEnvId());
|
||||
}
|
||||
if (ObjectUtil.isNull(nodeInfo)) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.SCENE_FIRST_NODE_INFO_IS_NULL);
|
||||
scriptIdList.add(planTask.getScriptId());
|
||||
envScriptMap.put(planTask.getEnvId(), scriptIdList);
|
||||
String key = planTask.getEnvId() + "-" + planTask.getScriptId();
|
||||
List<AtuPlanTask> envScriptTaskList = new ArrayList<>();
|
||||
if (envScriptTaskMap.containsKey(key)) {
|
||||
envScriptTaskList = envScriptTaskMap.get(key);
|
||||
}
|
||||
envScriptTaskList.add(planTask);
|
||||
envScriptTaskMap.put(key, envScriptTaskList);
|
||||
}
|
||||
logger.debug("获取最新的输入项数据");
|
||||
Map<String, String> taskParamsMap = getRetryTaskInputInfo(envScriptTaskMap, envScriptMap);
|
||||
logger.debug("最新输入项数据大小:{}", taskParamsMap.size());
|
||||
|
||||
logger.debug("start 初始化批次缓存数据");
|
||||
taskRetryInitCache(taskIdList, planBatch);
|
||||
logger.debug("end 初始化批次缓存数据");
|
||||
|
||||
logger.debug("查询脚本最新数据");
|
||||
logger.debug("脚本数量:{}", scriptIdSet.size());
|
||||
Map<String, AtuScriptDetailDto> scriptMap = queryScriptDetailMap(scriptIdSet);
|
||||
logger.debug("脚本最新信息数量:{}", scriptMap.size());
|
||||
|
||||
Map<String, Object> caseTypeMap = new HashMap<>();
|
||||
caseTypeMap.put("hasPc", false);
|
||||
caseTypeMap.put("hasMob", false);
|
||||
caseTypeMap.put("hasInterface", false);
|
||||
for (AtuPlanTask planTask : planTaskList) {
|
||||
String status = planTask.getStatus();
|
||||
logger.debug("原任务状态为: {}", status);
|
||||
// 判断任务是否开始执行
|
||||
if (PlanConstant.TASK_WAIT_EXECUTE_STATUS.equals(planTask.getStatus()) ||
|
||||
PlanConstant.TASK_START_EXECUTE_STATUS.equals(planTask.getStatus())) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.TASK_NOT_FINISH);
|
||||
}
|
||||
logger.debug("修改任务脚本为最新脚本信息");
|
||||
if (scriptMap.containsKey(planTask.getScriptId())) {
|
||||
AtuScriptDetailDto atuScriptDetailDto = scriptMap.get(planTask.getScriptId());
|
||||
planTask.setVersionId(atuScriptDetailDto.getVersionId());
|
||||
planTask.setVersionName(atuScriptDetailDto.getVersionName());
|
||||
planTask.setScriptName(atuScriptDetailDto.getScriptName());
|
||||
planTask.setScriptJson(atuScriptDetailDto.getScriptPath());
|
||||
planTask.setAppId(queryAppId(planInfo.getId(),atuScriptDetailDto.getPlatformType(),
|
||||
atuScriptDetailDto.getAppPackage(),atuScriptDetailDto.getScriptType()));
|
||||
}
|
||||
|
||||
String sceneTaskId = IdUtil.simpleUUID();
|
||||
taskExecDto.setTaskId(sceneTaskId);
|
||||
scriptPath = nodeInfo.getScriptPath();
|
||||
caseParams = nodeInfo.getCaseParam();
|
||||
appId = queryAppId(taskExecDto.getPlanId(), nodeInfo.getPlatformType(),
|
||||
nodeInfo.getAppPackage(), nodeInfo.getNodeType());
|
||||
type = nodeInfo.getNodeType();
|
||||
logger.debug("生成任务执行信息");
|
||||
AtuTaskExecDto taskExecDto = new AtuTaskExecDto();
|
||||
BeanUtil.copyProperties(planInfo, taskExecDto);
|
||||
taskExecDto.setPlanId(planInfo.getId());
|
||||
taskExecDto.setFailRetryNum(planInfo.getFailRetryCount());
|
||||
taskExecDto.setBatchId(planTask.getBatchId());
|
||||
taskExecDto.setTaskId(planTask.getId());
|
||||
taskExecDto.setCaseId(planTask.getCaseId());
|
||||
taskExecDto.setEnvId(planTask.getEnvId());
|
||||
String type = planTask.getCaseType();
|
||||
taskExecDto.setCaseType(type);
|
||||
String scriptPath = planTask.getScriptJson();
|
||||
|
||||
logger.debug("清理原节点任务");
|
||||
AtuPlanSceneCaseTask deleteParams = new AtuPlanSceneCaseTask();
|
||||
deleteParams.setTaskId(planTask.getId());
|
||||
int rows = atuPlanSceneCaseTaskService.deleteByExample(deleteParams);
|
||||
Map<String, Object> caseParams = new HashMap<>();
|
||||
if (taskParamsMap.containsKey(planTask.getId())) {
|
||||
logger.debug("重试使用新数据");
|
||||
caseParams = JSONUtil.toBean(taskParamsMap.get(planTask.getId()), Map.class);
|
||||
} else {
|
||||
if (StrUtil.isNotBlank(planTask.getCaseParam())) {
|
||||
logger.debug("使用旧数据重试");
|
||||
caseParams = JSONUtil.toBean(planTask.getCaseParam(), Map.class);
|
||||
}
|
||||
}
|
||||
// 更新静态数据与模糊数据为最新值
|
||||
caseParams = this.handleQuoteData(caseParams, planTask.getEnvId(), planInfo.getProjectId());
|
||||
planTask.setCaseParam(JSONUtil.toJsonStr(caseParams));
|
||||
|
||||
String appId = planTask.getAppId();
|
||||
AtuSceneNodeExecDto sceneNodeExecDto = null;
|
||||
|
||||
//判断是否场景任务
|
||||
if (PlanConstant.SCRIPT_TYPE_SCENE.equals(planTask.getCaseType())) {
|
||||
// 调用脚本服务获取场景首节点信息,通知脚本服务场景重新发起
|
||||
logger.debug("查询场景脚本的首节点信息");
|
||||
SceneFirstNodeDto firstNodeDto = new SceneFirstNodeDto();
|
||||
firstNodeDto.setTaskId(planTask.getId());
|
||||
firstNodeDto.setCaseId(planTask.getCaseId());
|
||||
String scriptId = planTask.getScriptId();
|
||||
firstNodeDto.setScriptId(scriptId);
|
||||
firstNodeDto.setParamMap(caseParams);
|
||||
logger.debug("查询参数 => {}", JSONUtil.toJsonStr(firstNodeDto));
|
||||
AtuSceneNodeInfoDto nodeInfo;
|
||||
try {
|
||||
ResultWrapper<AtuSceneNodeExecDto> firstNodeResult = publicFeignClient.getFirstNode(firstNodeDto);
|
||||
if (firstNodeResult.isSuccess() && firstNodeResult.getData() != null) {
|
||||
logger.debug("首节点信息为 => " + JSONUtil.toJsonStr(firstNodeResult));
|
||||
sceneNodeExecDto = firstNodeResult.getData();
|
||||
nodeInfo = sceneNodeExecDto.getNodeInfo();
|
||||
} else {
|
||||
throw new RuntimeException("获取场景脚本[ " + scriptId + "]首节点信息异常," + firstNodeResult.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("获取场景首节点信息异常", e);
|
||||
throw new PlatformRuntimeException(ExecPlanError.GET_SCENE_FIRST_NODE_FAIL);
|
||||
}
|
||||
if (ObjectUtil.isNull(nodeInfo)) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.SCENE_FIRST_NODE_INFO_IS_NULL);
|
||||
}
|
||||
|
||||
String sceneTaskId = IdUtil.simpleUUID();
|
||||
taskExecDto.setTaskId(sceneTaskId);
|
||||
scriptPath = nodeInfo.getScriptPath();
|
||||
caseParams = nodeInfo.getCaseParam();
|
||||
appId = queryAppId(taskExecDto.getPlanId(), nodeInfo.getPlatformType(),
|
||||
nodeInfo.getAppPackage(), nodeInfo.getNodeType());
|
||||
type = nodeInfo.getNodeType();
|
||||
|
||||
logger.debug("清理原节点任务");
|
||||
AtuPlanSceneCaseTask deleteParams = new AtuPlanSceneCaseTask();
|
||||
deleteParams.setTaskId(planTask.getId());
|
||||
int rows = atuPlanSceneCaseTaskService.deleteByExample(deleteParams);
|
||||
if (rows <= 0) {
|
||||
logger.error("清理原场景节点任务失败");
|
||||
throw new PlatformRuntimeException(ExecPlanError.CLEAR_SCENE_NODE_TASK_FAIL);
|
||||
}
|
||||
logger.debug("插入新节点任务");
|
||||
AtuPlanSceneCaseTask planSceneCaseTask = new AtuPlanSceneCaseTask();
|
||||
planSceneCaseTask.setId(sceneTaskId);
|
||||
planSceneCaseTask.setTaskId(planTask.getId());
|
||||
planSceneCaseTask.setScriptId(nodeInfo.getScriptId());
|
||||
planSceneCaseTask.setVersionId(nodeInfo.getVersionId());
|
||||
planSceneCaseTask.setVersionName(nodeInfo.getVersionName());
|
||||
planSceneCaseTask.setScriptName(nodeInfo.getScriptName());
|
||||
planSceneCaseTask.setScriptJson(nodeInfo.getScriptPath());
|
||||
planSceneCaseTask.setNodeId(nodeInfo.getNodeId());
|
||||
planSceneCaseTask.setNodeType(nodeInfo.getNodeType());
|
||||
if (CollUtil.isNotEmpty(nodeInfo.getCaseParam())) {
|
||||
planSceneCaseTask.setNodeParams(JSONUtil.toJsonStr(nodeInfo.getCaseParam()));
|
||||
}
|
||||
planSceneCaseTask.setCreatedTime(new Date());
|
||||
planSceneCaseTask.setStatus(PlanConstant.TASK_WAIT_EXECUTE_STATUS);
|
||||
planSceneCaseTask.setScriptJson(nodeInfo.getScriptPath());
|
||||
atuPlanSceneCaseTaskService.insert(planSceneCaseTask);
|
||||
|
||||
}
|
||||
taskExecDto.setScriptPath(scriptPath);
|
||||
taskExecDto.setCaseParams(caseParams);
|
||||
taskExecDto.setAppId(appId);
|
||||
|
||||
logger.debug("修改原任务状态");
|
||||
planTask.setEngineId("");
|
||||
planTask.setDeviceId("");
|
||||
planTask.setAppId("");
|
||||
planTask.setStatus(PlanConstant.TASK_WAIT_EXECUTE_STATUS);
|
||||
planTask.setStartTime(null);
|
||||
planTask.setEndTime(null);
|
||||
planTask.setErrorMsg("");
|
||||
planTask.setVideoUrl("");
|
||||
planTask.setExecResultFile("");
|
||||
planTask.setBugId("");
|
||||
if (sceneNodeExecDto != null && sceneNodeExecDto.getSceneScriptUrl() != null) {
|
||||
planTask.setScriptJson(sceneNodeExecDto.getSceneScriptUrl());
|
||||
}else {
|
||||
logger.info("首节点返回sceneScriptUrl为空" + sceneNodeExecDto);
|
||||
}
|
||||
int rows = atuPlanTaskService.updateByPrimaryKey(planTask);
|
||||
if (rows <= 0) {
|
||||
logger.error("清理原场景节点任务失败");
|
||||
throw new PlatformRuntimeException(ExecPlanError.CLEAR_SCENE_NODE_TASK_FAIL);
|
||||
throw new PlatformRuntimeException(ExecPlanError.INIT_TASK_INFO_FAIL);
|
||||
}
|
||||
logger.debug("插入新节点任务");
|
||||
AtuPlanSceneCaseTask planSceneCaseTask = new AtuPlanSceneCaseTask();
|
||||
planSceneCaseTask.setId(sceneTaskId);
|
||||
planSceneCaseTask.setTaskId(planTask.getId());
|
||||
planSceneCaseTask.setScriptId(nodeInfo.getScriptId());
|
||||
planSceneCaseTask.setVersionId(nodeInfo.getVersionId());
|
||||
planSceneCaseTask.setVersionName(nodeInfo.getVersionName());
|
||||
planSceneCaseTask.setScriptName(nodeInfo.getScriptName());
|
||||
planSceneCaseTask.setScriptJson(nodeInfo.getScriptPath());
|
||||
planSceneCaseTask.setNodeId(nodeInfo.getNodeId());
|
||||
planSceneCaseTask.setNodeType(nodeInfo.getNodeType());
|
||||
if (CollUtil.isNotEmpty(nodeInfo.getCaseParam())) {
|
||||
planSceneCaseTask.setNodeParams(JSONUtil.toJsonStr(nodeInfo.getCaseParam()));
|
||||
}
|
||||
planSceneCaseTask.setCreatedTime(new Date());
|
||||
planSceneCaseTask.setStatus(PlanConstant.TASK_WAIT_EXECUTE_STATUS);
|
||||
planSceneCaseTask.setScriptJson(nodeInfo.getScriptPath());
|
||||
atuPlanSceneCaseTaskService.insert(planSceneCaseTask);
|
||||
|
||||
}
|
||||
taskExecDto.setScriptPath(scriptPath);
|
||||
taskExecDto.setCaseParams(caseParams);
|
||||
taskExecDto.setAppId(appId);
|
||||
logger.debug("发送任务执行信息至消息队列");
|
||||
sendToQueue(taskExecDto.getBatchId(), taskExecDto, type);
|
||||
|
||||
logger.debug("修改原任务状态");
|
||||
planTask.setEngineId("");
|
||||
planTask.setDeviceId("");
|
||||
planTask.setAppId("");
|
||||
planTask.setStatus(PlanConstant.TASK_WAIT_EXECUTE_STATUS);
|
||||
planTask.setStartTime(null);
|
||||
planTask.setEndTime(null);
|
||||
planTask.setErrorMsg("");
|
||||
planTask.setVideoUrl("");
|
||||
planTask.setExecResultFile("");
|
||||
planTask.setBugId("");
|
||||
if (sceneNodeExecDto != null && sceneNodeExecDto.getSceneScriptUrl() != null) {
|
||||
planTask.setScriptJson(sceneNodeExecDto.getSceneScriptUrl());
|
||||
}else {
|
||||
logger.info("首节点返回sceneScriptUrl为空" + sceneNodeExecDto);
|
||||
}
|
||||
int rows = atuPlanTaskService.updateByPrimaryKey(planTask);
|
||||
if (rows <= 0) {
|
||||
throw new PlatformRuntimeException(ExecPlanError.INIT_TASK_INFO_FAIL);
|
||||
atuPlanInfoApiService.handleAutoType(PlanConstant.SCRIPT_TYPE_SCENE, caseTypeMap);
|
||||
}
|
||||
|
||||
logger.debug("发送任务执行信息至消息队列");
|
||||
sendToQueue(taskExecDto.getBatchId(), taskExecDto, type);
|
||||
|
||||
atuPlanInfoApiService.handleAutoType(PlanConstant.SCRIPT_TYPE_SCENE, caseTypeMap);
|
||||
logger.debug("计划批次重新发起委托");
|
||||
atuPlanInfoApiService.handlePlanDevice(planInfo.getId(), planInfo.getPriority(), planBatch.getId(),
|
||||
retryDto.getHasOfflineDevice(), caseTypeMap, true);
|
||||
return true;
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
logger.debug("计划批次重新发起委托");
|
||||
atuPlanInfoApiService.handlePlanDevice(planInfo.getId(), planInfo.getPriority(), planBatch.getId(),
|
||||
retryDto.getHasOfflineDevice(), caseTypeMap, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -59,4 +59,9 @@ public class RedisConstant {
|
|||
*/
|
||||
public static final String BATCH_MESSAGE_LOCK_PRE = "BATCH_MESSAGE_LOCK_PRE";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String PLAN_BATCH_RETRY_LOCK_PRE = "LOCK:PLAN:PLAN-BATCH-RETRY-LOCK-PRE:";
|
||||
|
||||
}
|
||||
|
|
|
@ -89,6 +89,8 @@ public enum ExecPlanError implements PlatformError {
|
|||
|
||||
GET_FILE_FAIL("获取文件失败"),
|
||||
|
||||
BATCH_IS_DEALING_WITH_RETRY("批次的任务重试正在处理中..."),
|
||||
|
||||
/**
|
||||
* 错误码结束值
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue