From 795a83a56321139fe6e4c5eb61a02c6d977c602e Mon Sep 17 00:00:00 2001 From: darkmanlee Date: Mon, 6 Jan 2025 19:49:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=88=B020250102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cctp/se/exec/DefaultExecThread.java | 2 +- cctp-atu/atu-execute-plan/Dockerfile-dev | 2 +- cctp-atu/atu-execute-plan/Dockerfile-prod | 2 +- cctp-atu/atu-execute-plan/Dockerfile-test | 2 +- cctp-atu/atu-execute-plan/Dockerfile-uat | 2 +- cctp-atu/atu-execute-plan/pom.xml | 4 - cctp-atu/atu-execute-plan/shell/nk-ms.sh | 2 +- .../executePlan/api/AtuPlanInfoPubCtrl.java | 37 +++++++++ .../execplanTag/AtuExecplanTagQueryCtrl.java | 70 ++++++++++-------- .../service/AtuExecplanTagApiService.java | 1 + .../service/AtuExecplanTagApiServiceImpl.java | 11 +++ .../service/AtuPlanInfoApiServiceImpl.java | 59 ++++++++++++--- .../AtuPlanSceneCaseTaskApiServiceImpl.java | 2 +- .../service/AtuPlanTaskApiServiceImpl.java | 10 +-- .../executePlan/constants/MsgConstant.java | 4 +- .../executePlan/constants/PlanConstant.java | 4 + .../consumer/TaskExecHeartbeatConsumer.java | 31 +++++--- .../db/dao/AtuPlanTaskRecordDao.java | 2 - .../db/impl/AtuPlanTaskRecordServiceImpl.java | 5 -- .../db/service/AtuPlanTaskRecordService.java | 2 - .../dto/planInfo/AtuPlanInfoAddDto.java | 21 ++++++ .../dto/planInfo/AtuPlanInfoDetailDto.java | 21 ++++++ .../executePlan/exception/ExecPlanError.java | 5 +- .../feign/ApiMixHandlerService.java | 21 ++++++ .../executePlan/job/TaskExecTimeoutJob.java | 12 --- .../mybatis/ext/AtuPlanTaskRecord.Dao.xml | 12 --- .../src/main/resources/templates/pdfTemp.pdf | Bin 39626 -> 66299 bytes cctp-atu/atu-execute-plan/testDockerfile | 2 +- 28 files changed, 240 insertions(+), 108 deletions(-) create mode 100644 cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/feign/ApiMixHandlerService.java diff --git a/cctp-atu/atu-engine/atu-script-engine/src/main/java/net/northking/cctp/se/exec/DefaultExecThread.java b/cctp-atu/atu-engine/atu-script-engine/src/main/java/net/northking/cctp/se/exec/DefaultExecThread.java index ebceb4b..85d55c7 100644 --- a/cctp-atu/atu-engine/atu-script-engine/src/main/java/net/northking/cctp/se/exec/DefaultExecThread.java +++ b/cctp-atu/atu-engine/atu-script-engine/src/main/java/net/northking/cctp/se/exec/DefaultExecThread.java @@ -919,7 +919,7 @@ public class DefaultExecThread implements AtuExecThread{ } } try { - if (task.getRetryStrategy() != null && AtuExecConstant.TASK_RETRY_STRATEGY_PACKAGE.equals(task.getRetryStrategy())) { + if (task.getRetryStrategy() != null && AtuExecConstant.TASK_RETRY_STRATEGY_PACKAGE.equals(task.getRetryStrategy())) { // count = task.getCurrentRetryNum(); } if(null==executeResult){ diff --git a/cctp-atu/atu-execute-plan/Dockerfile-dev b/cctp-atu/atu-execute-plan/Dockerfile-dev index 14718c8..05b4df2 100644 --- a/cctp-atu/atu-execute-plan/Dockerfile-dev +++ b/cctp-atu/atu-execute-plan/Dockerfile-dev @@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR ${CCTP_HOME} -ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"] +ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"] #CMD [""] diff --git a/cctp-atu/atu-execute-plan/Dockerfile-prod b/cctp-atu/atu-execute-plan/Dockerfile-prod index a59eab4..bb3ea72 100644 --- a/cctp-atu/atu-execute-plan/Dockerfile-prod +++ b/cctp-atu/atu-execute-plan/Dockerfile-prod @@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR ${CCTP_HOME} -ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"] +ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"] #CMD [""] diff --git a/cctp-atu/atu-execute-plan/Dockerfile-test b/cctp-atu/atu-execute-plan/Dockerfile-test index a59eab4..bb3ea72 100644 --- a/cctp-atu/atu-execute-plan/Dockerfile-test +++ b/cctp-atu/atu-execute-plan/Dockerfile-test @@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR ${CCTP_HOME} -ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"] +ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"] #CMD [""] diff --git a/cctp-atu/atu-execute-plan/Dockerfile-uat b/cctp-atu/atu-execute-plan/Dockerfile-uat index 8ac40c2..5eab25f 100644 --- a/cctp-atu/atu-execute-plan/Dockerfile-uat +++ b/cctp-atu/atu-execute-plan/Dockerfile-uat @@ -35,6 +35,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR ${CCTP_HOME} -ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} ${JACOCO_AGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"] +ENTRYPOINT ["sh", "-c", "java -jar -Xms${XMX} -Xmx${XMX} ${TRACE_JAVAAGENT_OPTS} ${JACOCO_AGENT_OPTS} -Dfile.encoding=UTF-8 -DAPP_PROFILE=${APP_PROFILE} -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"] #CMD [""] diff --git a/cctp-atu/atu-execute-plan/pom.xml b/cctp-atu/atu-execute-plan/pom.xml index 5e61ca3..a46d2d4 100644 --- a/cctp-atu/atu-execute-plan/pom.xml +++ b/cctp-atu/atu-execute-plan/pom.xml @@ -32,10 +32,6 @@ org.apache.maven.plugins maven-jar-plugin - - org.apache.maven.plugins - maven-dependency-plugin - org.springframework.boot spring-boot-maven-plugin diff --git a/cctp-atu/atu-execute-plan/shell/nk-ms.sh b/cctp-atu/atu-execute-plan/shell/nk-ms.sh index f61bb4c..f3d1cc8 100644 --- a/cctp-atu/atu-execute-plan/shell/nk-ms.sh +++ b/cctp-atu/atu-execute-plan/shell/nk-ms.sh @@ -10,7 +10,7 @@ APP_VERSION=3.0-SNAPSHOT JAR_FILE=${APP_NAME}-${APP_VERSION}.ms.jar APP_PORT=8300 -JAVA_OPTIONS="-Xmx256M -Dfile.encoding=UTF-8 -Dloader.path=.,lib" +JAVA_OPTIONS="-Xmx256M -Dfile.encoding=UTF-8 " PORT_OPTIONS="--server.port=${APP_PORT}" if [ 0"$NK_HOME" = "0" ]; then diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/AtuPlanInfoPubCtrl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/AtuPlanInfoPubCtrl.java index 009c219..808007b 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/AtuPlanInfoPubCtrl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/AtuPlanInfoPubCtrl.java @@ -1,6 +1,8 @@ package net.northking.cctp.executePlan.api; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson2.JSON; +import com.google.common.collect.HashBiMap; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -9,12 +11,22 @@ import net.northking.cctp.executePlan.api.service.AtuPlanBatchApiService; import net.northking.cctp.executePlan.api.service.AtuPlanInfoApiService; import net.northking.cctp.executePlan.api.service.AtuPlanTaskApiService; import net.northking.cctp.executePlan.dto.planBatch.AtuExceptionCase; +import org.redisson.client.RedisConnection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.io.Serializable; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -46,6 +58,9 @@ public class AtuPlanInfoPubCtrl { @Autowired private AtuPlanBatchApiService planBatchApiService; + @Autowired + private RedisTemplate redisTemplate; + /** * 更新任务执行结果文件 * @param params 参数 {“taskId”:"", "filePath": ""} @@ -105,4 +120,26 @@ public class AtuPlanInfoPubCtrl { return responseVO; } + /** + * 获取redis指定Key的数据 + * + * @return 引擎运行信息 + */ + @ApiOperation(value = "获取redis指定Key的数据") + @GetMapping(value = "/getRedisKey/{key}") + public ResultWrapper getRedisKey(@PathVariable("key") String key) + { + ResultWrapper wrapper = new ResultWrapper<>(); + Object info = redisTemplate.execute((RedisCallback>) connection->{ + byte[] bytes = connection.get(key.getBytes(StandardCharsets.UTF_8)); + if (bytes==null) { + return Collections.emptyMap(); + } + return JSON.parseObject(bytes, HashMap.class); + }); + wrapper.success(info); + return wrapper; + } + + } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/AtuExecplanTagQueryCtrl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/AtuExecplanTagQueryCtrl.java index 35fcc4a..5bf106c 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/AtuExecplanTagQueryCtrl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/AtuExecplanTagQueryCtrl.java @@ -1,13 +1,13 @@ /* -* Copyright (c) 京北方信息技术股份有限公司 Corporation 2023 . All rights reserved. -* -*/ + * Copyright (c) 京北方信息技术股份有限公司 Corporation 2023 . All rights reserved. + * + */ package net.northking.cctp.executePlan.api.execplanTag; +import cn.gjing.tools.auth.annotation.RequiredPermissions; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.constants.BaseDefineDependencyConstants; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.TagDto; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO; -import cn.gjing.tools.auth.annotation.RequiredPermissions; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import net.northking.cctp.executePlan.api.execplanTag.service.AtuExecplanTagApiService; @@ -15,44 +15,50 @@ import net.northking.cctp.executePlan.constants.MsgConstant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import org.springframework.web.bind.annotation.*; import java.util.List; +import static com.hzbank.testteam.autotest.dependencies.authDependency.constants.AuthDependencyConstants.REQUEST_HEADER_PROJECT_ID; + @Api(tags = "执行计划标签表") @RequestMapping("/v1") @RestController -public class AtuExecplanTagQueryCtrl -{ - /** - * 日志 - */ - private final static Logger logger = LoggerFactory.getLogger(AtuExecplanTagQueryCtrl.class); +public class AtuExecplanTagQueryCtrl { + /** + * 日志 + */ + private final static Logger logger = LoggerFactory.getLogger(AtuExecplanTagQueryCtrl.class); - @Autowired - private AtuExecplanTagApiService apiService; + @Autowired + private AtuExecplanTagApiService apiService; - @RequiredPermissions("ui-queryPlanTag") - @ApiOperation(value = "获取执行计划引用的标签列表") - @GetMapping("/queryExecplanTag/{execplanId}") - public ResponseVO> queryExecplanTag(@PathVariable("execplanId") String execplanId) - { - logger.debug("start queryExecplanTag, execplanId:{}", execplanId); - ResponseVO> responseVO = new ResponseVO<>(); - List tagDtos = apiService.queryExecplanTag(execplanId); - logger.debug("end queryExecplanTag"); - responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS); - responseVO.setData(tagDtos); - responseVO.setMessage(MsgConstant.RESPONSE_VO_GET_EXE_PLAN_LAB_SUCCESSFULLY); - return responseVO; - } - + @RequiredPermissions("ui-queryPlanTag") + @ApiOperation(value = "获取执行计划引用的标签列表") + @GetMapping("/queryExecplanTag/{execplanId}") + public ResponseVO> queryExecplanTag(@PathVariable("execplanId") String execplanId) { + logger.debug("start queryExecplanTag, execplanId:{}", execplanId); + ResponseVO> responseVO = new ResponseVO<>(); + List tagDtos = apiService.queryExecplanTag(execplanId); + logger.debug("end queryExecplanTag"); + responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS); + responseVO.setData(tagDtos); + responseVO.setMessage(MsgConstant.RESPONSE_VO_GET_EXE_PLAN_LAB_SUCCESSFULLY); + return responseVO; + } + @ApiOperation(value = "获取UI计划类型标签列表") + @GetMapping("/queryUIPlanTagOptions") + public ResponseVO> queryUIPlanTagOptions(@RequestHeader(value = REQUEST_HEADER_PROJECT_ID) Long projectId) { + logger.debug("start queryUIScriptTagOptions, projectId:{}", projectId); + ResponseVO> responseVO = new ResponseVO<>(); + List res = apiService.queryUIPlanTagOptions(projectId); + logger.debug("end queryScriptTag"); + responseVO.setCode(BaseDefineDependencyConstants.SYSTEM_RESPONSE_CODE_SUCCESS); + responseVO.setData(res); + return responseVO; + } } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiService.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiService.java index 004288b..8a096e4 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiService.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiService.java @@ -38,4 +38,5 @@ public interface AtuExecplanTagApiService */ Integer deleteByExecplanIdAndTagId(String execplanId,Long tagId); + List queryUIPlanTagOptions(Long projectId); } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiServiceImpl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiServiceImpl.java index e2c0ac3..c93c323 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiServiceImpl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/execplanTag/service/AtuExecplanTagApiServiceImpl.java @@ -11,6 +11,7 @@ import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.form.TagFo import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO; import net.northking.cctp.common.exception.PlatformRuntimeException; import net.northking.cctp.executePlan.constants.MsgConstant; +import net.northking.cctp.executePlan.constants.PlanConstant; import net.northking.cctp.executePlan.db.dao.AtuPlanInfoDao; import net.northking.cctp.executePlan.db.entity.AtuPlanInfo; import net.northking.cctp.executePlan.dto.execplanTag.AtuExecplanTagAddDto; @@ -24,6 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; /** @@ -122,4 +124,13 @@ public class AtuExecplanTagApiServiceImpl implements AtuExecplanTagApiService return 1; } + @Override + public List queryUIPlanTagOptions(Long projectId) { + List tagsByTypeAndProjectId = apiTagService.getTagsByTypeAndProjectId(PlanConstant.UI_PLAN_TAG_TYPE, projectId); + if (CollectionUtils.isEmpty(tagsByTypeAndProjectId)){ + return new ArrayList<>(); + } + return tagsByTypeAndProjectId; + } + } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanInfoApiServiceImpl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanInfoApiServiceImpl.java index 6101f57..f05e09b 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanInfoApiServiceImpl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanInfoApiServiceImpl.java @@ -26,9 +26,11 @@ import com.github.pagehelper.page.PageMethod; import com.google.common.collect.Sets; import com.hzbank.testteam.autotest.dependencies.authDependency.utils.RequestUtil; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.constants.BaseDefineDependencyConstants; +import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.RequestDTO; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.TagDto; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.entity.Environment; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.exception.InvalidException; +import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.form.TagForm; import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.vo.ResponseVO; import com.hzbank.testteam.autotest.dependencies.monsterDependency.dto.TestGroupDTO; import com.hzbank.testteam.autotest.dependencies.monsterDependency.dto.TestGroupUserDTO; @@ -221,6 +223,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService MonsterCommonFeignClient monsterCommonFeignClient; @Autowired private AttachmentFeignClient attachmentFeignClient; + @Autowired + private ApiMixHandlerService apiMixHandlerService; /** * 单次删除最大数量 */ @@ -325,6 +329,15 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService PageMethod.orderBy(sort.toString()); } Pagination query = this.atuPlanInfoService.queryPlanInfoPage(queryByPage); + Map> tagMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(query.getRecords())) { + List planIds = query.getRecords().stream().map(AtuPlanInfoDetailDto::getId).collect(Collectors.toList()); + ArrayList requestList = new ArrayList<>(); + requestList.add(new RequestDTO(RequestDTO.RequestContent.tagByObjectIds, planIds)); + List mixData = apiMixHandlerService.getMixData(requestList); + List tagDtos = JSON.parseArray(JSON.toJSONString(mixData.get(0)), TagDto.class); + tagMap = tagDtos.stream().collect(Collectors.groupingBy(TagDto::getObjectId)); + } for (AtuPlanInfoDetailDto record : query.getRecords()) { String projectName = entityNameCache.translateById(EntityNameCatalog.MONSTER_SYSTEM, record.getProjectId()); String principalName = entityNameCache.translateById(EntityNameCatalog.MONSTER_USER, record.getPrincipalId()); @@ -346,6 +359,9 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService record.setNextExecTime(null); } } + if (!CollectionUtils.isEmpty(tagMap.get(record.getId()))) { + record.setTags(tagMap.get(record.getId()).stream().map(TagDto::getName).collect(Collectors.toList())); + } } return query; } @@ -547,6 +563,13 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService dto.setAppIdList(appIdList); } } + List tagDtos = apiTagService.listTagByObjectId(uuid); + if (!CollectionUtils.isEmpty(tagDtos)) { + dto.setTags(tagDtos.stream().map(TagDto::getName).collect(Collectors.toList())); + } + if (dto.getPrincipalId() != null) { + dto.setPrincipalName(entityNameCache.translateById(EntityNameCatalog.MONSTER_USER.name(), dto.getPrincipalId())); + } return dto; } @@ -664,6 +687,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService attachmentFeignClient.associatedFiles(associatedFilesDto); } atuPlanBatchService.deleteByExample(planBatch); + logger.debug("删除标签"); + apiTagService.removeByObjectId(uuid); }); } return row; @@ -1057,6 +1082,10 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService @Override public String savePlanData(AtuPlanInfoAddDto dto) { logger.info("-------------------->开始保存计划信息"); + //校验责任人 + if (dto.getPrincipalId() == null || dto.getPrincipalId() == "") { + throw new PlatformRuntimeException(ExecPlanError.PRINCIPALID_IS_NULL); + } //校验关联设备、应用是否为空 checkDeviceAndApp(dto); logger.info("-------------------->校验关联设备、应用是否为空"); @@ -1149,7 +1178,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService //判断是否存在 AtuPlanInfo planInfo = this.atuPlanInfoService.findByPrimaryKey(uuid); if (planInfo != null) { - entity.setPrincipalId(planInfo.getPrincipalId()); + entity.setPrincipalId(dto.getPrincipalId()); if (!entity.getHasCorn()) { Scheduler scheduler = factoryBean.getScheduler(); if (ScheduleUtils.checkExists(scheduler, entity.getId())) { @@ -1241,7 +1270,15 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService savePlanScriptData(uuid, mdList); logger.info("-------------------->保存用例集"); // 保存环境 - saveEnv(uuid, dto.getEnvList()); + saveEnv(uuid, dto.getProjectId(), dto.getEnvList()); + logger.info("-------------------->保存环境"); + // 保存标签 + TagForm form = new TagForm(); + form.setTags(dto.getTags()); + form.setProjectId(RequestUtil.getProjectId()); + form.setObjectId(uuid); + form.setType(PlanConstant.UI_PLAN_TAG_TYPE); + apiTagService.saveTags(form); logger.info("-------------------->保存环境"); return uuid; } @@ -1264,12 +1301,16 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService } - private void saveEnv(String planId, List envList) { + private void saveEnv(String planId, String projectId, List envList) { if (envList == null || envList.isEmpty()) { return; } - Long projectId = RequestUtil.getProjectId(); - ResponseVO> responseVO = apiAtsEnviromentFeign.listByProject(projectId); + Long envProjectId = null; + if (StringUtils.isNotBlank(projectId)) { + envProjectId = Long.parseLong(projectId); + } + + ResponseVO> responseVO = apiAtsEnviromentFeign.listByProject(envProjectId); List data = responseVO.getData(); List envIds = data.stream().map(e -> e.getId().toString()).collect(Collectors.toList()); for (String id : envList) { @@ -1691,8 +1732,8 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService ExcelWriter writer = ExcelUtil.getWriter(); writer.addHeaderAlias("scriptCode", "脚本编号"); writer.addHeaderAlias("scriptName", "脚本名称"); - writer.addHeaderAlias("caseName", "用例名称"); - writer.addHeaderAlias("caseType", "用例类型"); + writer.addHeaderAlias("caseName", "轮次名称"); + writer.addHeaderAlias("caseType", "轮次类型"); writer.addHeaderAlias("elapsedTime", "耗时(毫秒)"); writer.addHeaderAlias("deviceName", "执行设备"); writer.addHeaderAlias("status", "执行状态"); @@ -1933,7 +1974,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService return new ArrayList<>(); } List tagNames = new ArrayList<>(data.values()); - List tagDtos = apiTagService.getTagDtosByNameAndType(tagNames, 4); + List tagDtos = apiTagService.getTagDtosByNameAndType(tagNames, PlanConstant.UI_PLAN_TAG_TYPE); if (tagDtos == null) { logger.error("根据标签和类型获取关联计划Id异常,响应信息:" + JSON.toJSONString(responseVO)); throw new InvalidException("根据标签和类型获取关联计划Id异常"); @@ -1958,7 +1999,7 @@ public class AtuPlanInfoApiServiceImpl extends AbstractExcelService PlanPageQueryDto queryDto = new PlanPageQueryDto(); Set collect = atuPlanScriptLinkList.stream().map(AtuPlanScriptLink::getScriptId).collect(Collectors.toSet()); queryDto.setAllList(new ArrayList<>(collect)); - + //查询所有脚本类型 List atuScriptInfoList = scriptCaseFeignClient.queryScriptByIds(new ArrayList<>(collect)); diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanSceneCaseTaskApiServiceImpl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanSceneCaseTaskApiServiceImpl.java index 8142c1f..84f7cdf 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanSceneCaseTaskApiServiceImpl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanSceneCaseTaskApiServiceImpl.java @@ -133,7 +133,6 @@ public class AtuPlanSceneCaseTaskApiServiceImpl implements AtuPlanSceneCaseTaskA logger.debug("批次[" + planTask.getBatchId() + "]开始执行,更新计划的状态"); planInfoService.updatePlanByLastBatchId(planTask.getBatchId(), PlanConstant.PLAN_EXECUTING_STATUS); } - // 更新批次统计数据 planBatchApiService.updateCacheBatchSumData(planTask); } @@ -329,6 +328,7 @@ public class AtuPlanSceneCaseTaskApiServiceImpl implements AtuPlanSceneCaseTaskA atuTaskExecDto.setAppSet(planInfo.getAppSet()); atuTaskExecDto.setScreenRecordSet(planInfo.getScreenRecordSet()); atuTaskExecDto.setScreenshotSet(planInfo.getScreenshotSet()); + // TODO: 是不是要先做判断是否勾选了失败重试才去设置这两个值 atuTaskExecDto.setFailRetryNum(planInfo.getFailRetryCount()); // 重试策略 atuTaskExecDto.setRetryStrategy(planInfo.getRetryStrategy()); diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanTaskApiServiceImpl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanTaskApiServiceImpl.java index 001890b..75c1ca8 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanTaskApiServiceImpl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/api/service/AtuPlanTaskApiServiceImpl.java @@ -1514,7 +1514,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService logger.info("普通脚本任务id:{},执行结果文件:{}", task.getId(), task.getExecResultFile()); taskIds.add(task.getId()); String execResultFile = task.getExecResultFile(); - if (StringUtils.isNotBlank(execResultFile)){ + if (StringUtils.isNotBlank(execResultFile)) { deletedFilePath.add(execResultFile); getActualImagePath(deletedFilePath, execResultFile); } @@ -1534,7 +1534,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService if (!CollectionUtils.isEmpty(taskIds)) { List atuPlanSceneCaseTaskList = atuPlanSceneCaseTaskService.querySceneCaseTasksByTaskIds(taskIds); atuPlanSceneCaseTaskList.forEach(atuPlanSceneCaseTask -> { - logger.info("场景任务id:{},节点任务id:{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(),atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile()); + logger.info("场景任务id:{},节点任务id:{},执行结果文件:{}", atuPlanSceneCaseTask.getTaskId(), atuPlanSceneCaseTask.getId(), atuPlanSceneCaseTask.getExecResultFile()); String videoUrl = atuPlanSceneCaseTask.getVideoUrl(); if (StringUtils.isNotBlank(videoUrl)) { deletedFilePath.add("/" + MinioPathUtils.idToPath(videoUrl)[1]); @@ -1613,8 +1613,8 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService planTask.setVersionName(atuScriptDetailDto.getVersionName()); planTask.setScriptName(atuScriptDetailDto.getScriptName()); planTask.setScriptJson(atuScriptDetailDto.getScriptPath()); - planTask.setAppId(queryAppId(planInfo.getId(),atuScriptDetailDto.getPlatformType(), - atuScriptDetailDto.getAppPackage(),atuScriptDetailDto.getScriptType())); + planTask.setAppId(queryAppId(planInfo.getId(), atuScriptDetailDto.getPlatformType(), + atuScriptDetailDto.getAppPackage(), atuScriptDetailDto.getScriptType())); } logger.debug("生成任务执行信息"); @@ -1729,7 +1729,7 @@ public class AtuPlanTaskApiServiceImpl extends AbstractExcelService planTask.setBugId(""); if (sceneNodeExecDto != null && sceneNodeExecDto.getSceneScriptUrl() != null) { planTask.setScriptJson(sceneNodeExecDto.getSceneScriptUrl()); - }else { + } else { logger.info("首节点返回sceneScriptUrl为空" + sceneNodeExecDto); } int rows = atuPlanTaskService.updateByPrimaryKey(planTask); diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/MsgConstant.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/MsgConstant.java index 05d7739..a642e59 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/MsgConstant.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/MsgConstant.java @@ -75,8 +75,8 @@ public class MsgConstant { //tableHeardList public static final String TABLE_HEARD_LIST_SCRIPT_NUM= "脚本编号"; public static final String TABLE_HEARD_LIST_SCRIPT_NAME= "脚本名称"; - public static final String TABLE_HEARD_LIST_TEST_CASE_NAME= "用例名称"; - public static final String TABLE_HEARD_LIST_TEST_CASE_TYPE= "用例类型"; + public static final String TABLE_HEARD_LIST_TEST_CASE_NAME= "轮次名称"; + public static final String TABLE_HEARD_LIST_TEST_CASE_TYPE= "轮次类型"; public static final String TABLE_HEARD_LIST_TIME_CONSUMING= "耗时(毫秒)"; public static final String TABLE_HEARD_LIST_EXEC_DEVICE= "执行设备"; public static final String TABLE_HEARD_LIST_EXEC_STATUS= "执行状态"; diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/PlanConstant.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/PlanConstant.java index 5826170..a196975 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/PlanConstant.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/constants/PlanConstant.java @@ -323,5 +323,9 @@ public class PlanConstant { * 输入项数据集引用类型-模糊数据 */ public static final String INPUT_SET_QUOTE_TYPE_FUZZY = "2"; + /** + * 通用标签UI执行计划标签类型码 + */ + public static final Integer UI_PLAN_TAG_TYPE = 4; } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/consumer/TaskExecHeartbeatConsumer.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/consumer/TaskExecHeartbeatConsumer.java index a7ba3b1..c0d9a54 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/consumer/TaskExecHeartbeatConsumer.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/consumer/TaskExecHeartbeatConsumer.java @@ -59,18 +59,25 @@ public class TaskExecHeartbeatConsumer { } private void handleTaskHeartbeat(String taskId, String taskType){ - AtuPlanTask planTask = new AtuPlanTask(); - planTask.setId(taskId); - planTask.setLastHeartbeatTime(new Date()); - if (PlanConstant.SCRIPT_TYPE_SCENE.equals(taskType)){ - // 场景任务 - AtuPlanSceneCaseTask sceneCaseTask = planSceneCaseTaskService.findByPrimaryKey(taskId); - sceneCaseTask.setLastHeartbeatTime(new Date()); - planSceneCaseTaskService.updateByPrimaryKey(sceneCaseTask); - // 更新场景节点对应的任务心跳 - planTask.setId(sceneCaseTask.getTaskId()); + try { + AtuPlanTask planTask = new AtuPlanTask(); + planTask.setId(taskId); + planTask.setLastHeartbeatTime(new Date()); + if (PlanConstant.SCRIPT_TYPE_SCENE.equals(taskType)) { + // 场景任务 + AtuPlanSceneCaseTask sceneCaseTask = planSceneCaseTaskService.findByPrimaryKey(taskId); + if (sceneCaseTask != null) { + sceneCaseTask.setLastHeartbeatTime(new Date()); + planSceneCaseTaskService.updateByPrimaryKey(sceneCaseTask); + // 更新场景节点对应的任务心跳 + planTask.setId(sceneCaseTask.getTaskId()); + } + } + // 普通任务 + planTaskService.updateByPrimaryKey(planTask); + } catch (Exception e) { + logger.error("更新{}任务心跳失败", taskId); + logger.error("更新任务心跳失败,原因", e); } - // 普通任务 - planTaskService.updateByPrimaryKey(planTask); } } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/dao/AtuPlanTaskRecordDao.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/dao/AtuPlanTaskRecordDao.java index 3df593b..4912b26 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/dao/AtuPlanTaskRecordDao.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/dao/AtuPlanTaskRecordDao.java @@ -25,6 +25,4 @@ public interface AtuPlanTaskRecordDao extends AtuPlanTaskRecordMapper { List queryTotalTake(@Param("taskIds") List taskIds); - List queryReTryTaskByTaskIds(@Param("taskIds") List taskIds); - } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/impl/AtuPlanTaskRecordServiceImpl.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/impl/AtuPlanTaskRecordServiceImpl.java index 6a25c2e..5c1c49a 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/impl/AtuPlanTaskRecordServiceImpl.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/impl/AtuPlanTaskRecordServiceImpl.java @@ -64,11 +64,6 @@ public class AtuPlanTaskRecordServiceImpl extends PaginationService queryReTryTaskByTaskIds(List ids) { - return atuPlanTaskRecordDao.queryReTryTaskByTaskIds(ids); - } - } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/service/AtuPlanTaskRecordService.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/service/AtuPlanTaskRecordService.java index 95e109b..e570538 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/service/AtuPlanTaskRecordService.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/db/service/AtuPlanTaskRecordService.java @@ -25,6 +25,4 @@ public interface AtuPlanTaskRecordService extends BasicService queryTotalTake(List ids); - - List queryReTryTaskByTaskIds(List ids); } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoAddDto.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoAddDto.java index 3f67ad4..367f475 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoAddDto.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoAddDto.java @@ -143,6 +143,19 @@ public class AtuPlanInfoAddDto implements Serializable @ApiModelProperty("是否存在移动脚本") private boolean hasMob; + @ApiModelProperty("是否存在移动脚本") + private List tags; + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + + @ApiModelProperty("计划负责人") + private String principalId; public boolean isHasAPI() { return hasAPI; @@ -351,4 +364,12 @@ public class AtuPlanInfoAddDto implements Serializable public void setRetryStrategy(String retryStrategy) { this.retryStrategy = retryStrategy; } + + public String getPrincipalId() { + return principalId; + } + + public void setPrincipalId(String principalId) { + this.principalId = principalId; + } } \ No newline at end of file diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoDetailDto.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoDetailDto.java index 837dad9..6a7c53a 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoDetailDto.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/dto/planInfo/AtuPlanInfoDetailDto.java @@ -260,12 +260,25 @@ public class AtuPlanInfoDetailDto implements Serializable @ApiModelProperty("负责人") private String principalId; + @ApiModelProperty("负责人姓名") + private String principalName; + @ApiModelProperty("最后批次脚本统计数据") private Map lastBatchScriptSumMap; @ApiModelProperty("绑定应用id集合") private List appIdList; + @ApiModelProperty("是否存在移动脚本") + private List tags; + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } public List getAppIdList() { return appIdList; } @@ -634,6 +647,14 @@ public class AtuPlanInfoDetailDto implements Serializable this.principalId = principalId; } + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + public Map getLastBatchScriptSumMap() { return lastBatchScriptSumMap; } diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/exception/ExecPlanError.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/exception/ExecPlanError.java index 9d6f023..58f5751 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/exception/ExecPlanError.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/exception/ExecPlanError.java @@ -21,6 +21,7 @@ public enum ExecPlanError implements PlatformError { PLAN_NAME_ERROR("系统下的计划名称不能重复"), PLAN_NAME_TOO_LONG("计划名称超过30位,请修改计划名称!"), + PRINCIPALID_IS_NULL("责任人不能为空"), PLAN_IS_NULL("计划信息不存在"), PLAN_CASE_SET_IS_NULL("计划用例集信息不存在"), PLAN_IS_UN_ENABLE("计划被禁用,执行失败!"), @@ -85,10 +86,8 @@ public enum ExecPlanError implements PlatformError { PARSE_DATE_ERROR("格式化日期出错,请检查参数"), - EMPTY_BATCH_ID("批次id不能为空"), - GET_FILE_FAIL("获取文件失败"), - + EMPTY_BATCH_ID("批次id不能为空"), BATCH_IS_DEALING_WITH_RETRY("批次的任务重试正在处理中..."), /** diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/feign/ApiMixHandlerService.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/feign/ApiMixHandlerService.java new file mode 100644 index 0000000..e08fabd --- /dev/null +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/feign/ApiMixHandlerService.java @@ -0,0 +1,21 @@ +package net.northking.cctp.executePlan.feign; + +import com.hzbank.testteam.autotest.dependencies.baseDefineDependency.dto.RequestDTO; +import net.northking.cctp.common.feign.FeignCctpConfig; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@FeignClient(contextId = "apiMixHandleService", value = "common-center", path = "/common-center/api/mix-handler", configuration = {FeignCctpConfig.class}) +public interface ApiMixHandlerService { + /** + * 获取各类基础信息数据 + * + * @return 数据集合 + */ + @PostMapping("/get") + List getMixData(@RequestBody List requestList); + +} diff --git a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/job/TaskExecTimeoutJob.java b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/job/TaskExecTimeoutJob.java index ccb48c0..3993702 100644 --- a/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/job/TaskExecTimeoutJob.java +++ b/cctp-atu/atu-execute-plan/src/main/java/net/northking/cctp/executePlan/job/TaskExecTimeoutJob.java @@ -7,9 +7,7 @@ import net.northking.cctp.executePlan.config.AtuPlanConfig; import net.northking.cctp.executePlan.constants.PlanConstant; import net.northking.cctp.executePlan.db.entity.AtuPlanSceneCaseTask; import net.northking.cctp.executePlan.db.entity.AtuPlanTask; -import net.northking.cctp.executePlan.db.entity.AtuPlanTaskRecord; import net.northking.cctp.executePlan.db.service.AtuPlanSceneCaseTaskService; -import net.northking.cctp.executePlan.db.service.AtuPlanTaskRecordService; import net.northking.cctp.executePlan.dto.planTask.AtuPlanTaskExtendDto; import net.northking.cctp.executePlan.dto.planTask.AtuTaskExecResultDto; import org.slf4j.Logger; @@ -23,7 +21,6 @@ import org.springframework.scheduling.annotation.Scheduled; import java.util.List; import java.util.concurrent.locks.Lock; -import java.util.stream.Collectors; @EnableScheduling @Configuration @@ -48,9 +45,6 @@ public class TaskExecTimeoutJob { @Autowired private AtuPlanConfig atuPlanConfig; - @Autowired - private AtuPlanTaskRecordService atuPlanTaskRecordService; - /** * 超时时间,默认3分钟,单位秒 @@ -73,9 +67,6 @@ public class TaskExecTimeoutJob { taskTimeoutHandle(taskList, PlanConstant.TASK_TIMEOUT_STATUS, ERROR_MSG); List waitTimeoutTask = planTaskApiService.queryWaitTimeoutTask(atuPlanConfig.getWaitTimeout()); - List reTryTasks = atuPlanTaskRecordService.queryReTryTaskByTaskIds(waitTimeoutTask.stream().map(AtuPlanTask::getId).collect(Collectors.toList())); - List reTryTaskIds = reTryTasks.stream().map(AtuPlanTaskRecord::getTaskId).collect(Collectors.toList()); - waitTimeoutTask.removeIf(task -> reTryTaskIds.contains(task.getId())); logger.debug("等待超时任务数量:{}", waitTimeoutTask.size()); taskTimeoutHandle(waitTimeoutTask, PlanConstant.TASK_CANCEL_STATUS, WAIT_TIMEOUT_ERROR_MSG); @@ -83,9 +74,6 @@ public class TaskExecTimeoutJob { logger.debug("场景节点执行超时任务数量:{}", sceneCaseTaskList.size()); sceneTaskTimeoutHandle(sceneCaseTaskList, PlanConstant.TASK_TIMEOUT_STATUS, ERROR_MSG); List sceneWaitTimeoutTask = sceneCaseTaskService.queryWaitTimeoutTask(atuPlanConfig.getWaitTimeout()); - List reTrySceneCaseTask = atuPlanTaskRecordService.queryReTryTaskByTaskIds(sceneWaitTimeoutTask.stream().map(AtuPlanSceneCaseTask::getTaskId).collect(Collectors.toList())); - List reTrySceneCaseTaskIds = reTrySceneCaseTask.stream().map(AtuPlanTaskRecord::getTaskId).collect(Collectors.toList()); - sceneWaitTimeoutTask.removeIf(sceneCaseTask -> reTrySceneCaseTaskIds.contains(sceneCaseTask.getId())); logger.debug("场景节点等待超时任务数量:{}", sceneWaitTimeoutTask.size()); sceneTaskTimeoutHandle(sceneWaitTimeoutTask, PlanConstant.TASK_CANCEL_STATUS, WAIT_TIMEOUT_ERROR_MSG); } diff --git a/cctp-atu/atu-execute-plan/src/main/resources/mybatis/ext/AtuPlanTaskRecord.Dao.xml b/cctp-atu/atu-execute-plan/src/main/resources/mybatis/ext/AtuPlanTaskRecord.Dao.xml index 4c5e785..b1ae418 100644 --- a/cctp-atu/atu-execute-plan/src/main/resources/mybatis/ext/AtuPlanTaskRecord.Dao.xml +++ b/cctp-atu/atu-execute-plan/src/main/resources/mybatis/ext/AtuPlanTaskRecord.Dao.xml @@ -24,16 +24,4 @@ ) AS temp GROUP BY task_id - - \ No newline at end of file diff --git a/cctp-atu/atu-execute-plan/src/main/resources/templates/pdfTemp.pdf b/cctp-atu/atu-execute-plan/src/main/resources/templates/pdfTemp.pdf index 3bf058a6400f4ac4a48726ad6b709de932f6b9d1..96b0fa4ab80f116e2f81cf8c1db67f276ed7cc94 100644 GIT binary patch delta 30500 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 IVo&RT0HCvgoB#j- diff --git a/cctp-atu/atu-execute-plan/testDockerfile b/cctp-atu/atu-execute-plan/testDockerfile index 00aab66..c3c72bd 100644 --- a/cctp-atu/atu-execute-plan/testDockerfile +++ b/cctp-atu/atu-execute-plan/testDockerfile @@ -26,6 +26,6 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR ${CCTP_HOME} -ENTRYPOINT ["sh", "-c", "java -jar -Xmx256M -Dfile.encoding=UTF-8 -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} -Dloader.path=.,lib ${JAR_FILE}"] +ENTRYPOINT ["sh", "-c", "java -jar -Xmx256M -Dfile.encoding=UTF-8 -DNACOS_NAMESPACE=${NACOS_SPACE} -DNACOS_SERVER_URL=${NACOS_URL} ${JAR_FILE}"] #CMD [""]