diff --git a/src/main/java/neatlogic/module/autoexec/api/combop/AutoexecCombopProcessConfigInitApi.java b/src/main/java/neatlogic/module/autoexec/api/combop/AutoexecCombopProcessConfigInitApi.java index fc984e52743888a47cfe4bf3f9cdc7e9782fafec..6c2acd84c78525d1100974b82fdc7cabf3352da9 100644 --- a/src/main/java/neatlogic/module/autoexec/api/combop/AutoexecCombopProcessConfigInitApi.java +++ b/src/main/java/neatlogic/module/autoexec/api/combop/AutoexecCombopProcessConfigInitApi.java @@ -253,6 +253,14 @@ public class AutoexecCombopProcessConfigInitApi extends PrivateApiComponentBase JSONArray executeParamList = new JSONArray(); if (executeConfigVo != null) { if (needExecuteNode) { + //补充前置过滤器 + if(executeConfigVo.getPreCondition() != null) { + JSONObject preCondition = new JSONObject(); + preCondition.put("key", "preCondition"); + preCondition.put("name", "前置过滤器"); + preCondition.put("value", executeConfigVo.getPreCondition()); + executeParamList.add(preCondition); + } JSONObject executeNode = new JSONObject(); executeNode.put("key", "executeNodeConfig"); executeNode.put("name", "执行目标"); diff --git a/src/main/java/neatlogic/module/autoexec/api/combop/RefreshCombopExecuteNodeConfigFilter.java b/src/main/java/neatlogic/module/autoexec/api/combop/RefreshCombopExecuteNodeConfigFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..21525f11aeabc52fdafa97a07e6acb85d7de5564 --- /dev/null +++ b/src/main/java/neatlogic/module/autoexec/api/combop/RefreshCombopExecuteNodeConfigFilter.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2025 深圳极向量科技有限公司 All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package neatlogic.module.autoexec.api.combop; + +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopVersionConfigVo; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopVersionVo; +import neatlogic.framework.autoexec.exception.AutoexecCombopVersionNotFoundException; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.common.dto.BasePageVo; +import neatlogic.framework.restful.annotation.Description; +import neatlogic.framework.restful.annotation.Input; +import neatlogic.framework.restful.annotation.Param; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.autoexec.dao.mapper.AutoexecCombopVersionMapper; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 临时刷新数据用,后续废除 + */ +@Service +public class RefreshCombopExecuteNodeConfigFilter extends PrivateApiComponentBase { + + @Resource + AutoexecCombopVersionMapper autoexecCombopVerMapper; + + @Input({ + @Param(name = "combopId", type = ApiParamType.LONG, desc = "组合工具ID") + }) + @Description(desc = "刷新历史执行时再指定执行目标的过滤器到前置过滤器") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long combopId = paramObj.getLong("combopId"); + if (combopId != null) { + AutoexecCombopVersionVo activeCombopVersionVo = autoexecCombopVerMapper.getAutoexecCombopActiveVersionByCombopId(combopId); + if (activeCombopVersionVo == null) { + throw new AutoexecCombopVersionNotFoundException(combopId.toString()); + } + exchange(activeCombopVersionVo); + } else { + //更新所有组合工具 + BasePageVo basePageVo = new BasePageVo(); + int rowNum = autoexecCombopVerMapper.getAutoexecCombopVersionCountForUpdateConfig(); + basePageVo.setPageSize(100); + basePageVo.setRowNum(rowNum); + if (rowNum > 0) { + for (int i = 0; i < basePageVo.getPageSize(); i++) { + basePageVo.setCurrentPage(i+1); + List> versionList = autoexecCombopVerMapper.getAutoexecCombopVersionListForUpdateConfig(basePageVo); + for (Map versionVo : versionList) { + Long id = (Long) versionVo.get("id"); + String configStr = (String) versionVo.get("config"); + if (StringUtils.isBlank(configStr)) { + continue; + } + JSONObject config = null; + try { + config = JSONObject.parseObject(configStr); + } catch (JSONException e) { + //System.out.println("格式不对"); + } + if (MapUtils.isEmpty(config)) { + continue; + } + AutoexecCombopVersionVo autoexecCombopVersionVo = new AutoexecCombopVersionVo(); + autoexecCombopVersionVo.setId(id); + autoexecCombopVersionVo.setConfigStr(configStr); + exchange(autoexecCombopVersionVo); + } + } + + } + } + + return null; + } + + /** + * 将历史执行时再指定执行目标的过滤器迁移到前置过滤器 + * + * @param versionVo 组合工具版本 + */ + private void exchange(AutoexecCombopVersionVo versionVo) { + AutoexecCombopVersionConfigVo configVo = versionVo.getConfig(); + if (configVo != null && configVo.getExecuteConfig() != null && configVo.getExecuteConfig().getExecuteNodeConfig() != null && MapUtils.isNotEmpty(configVo.getExecuteConfig().getExecuteNodeConfig().getFilter())) { + configVo.getExecuteConfig().setPreCondition(configVo.getExecuteConfig().getExecuteNodeConfig().getFilter()); + configVo.getExecuteConfig().getExecuteNodeConfig().setFilter(null); + } + autoexecCombopVerMapper.updateAutoexecCombopVersionConfigById(versionVo.getId(), JSONObject.toJSONString(configVo)); + } + + @Override + public String getToken() { + return "combop/executenodeconfig/filter/refresh"; + } + + @Override + public String getName() { + return "刷新历史执行时再指定执行目标的过滤器"; + } +} diff --git a/src/main/java/neatlogic/module/autoexec/api/job/ExportAutoexecJobApi.java b/src/main/java/neatlogic/module/autoexec/api/job/ExportAutoexecJobApi.java index fa15608c2a31b7619911ba4074ae976f397a76fa..9ce1f3b721d23e553e6a6b700d9839fb7e71c982 100644 --- a/src/main/java/neatlogic/module/autoexec/api/job/ExportAutoexecJobApi.java +++ b/src/main/java/neatlogic/module/autoexec/api/job/ExportAutoexecJobApi.java @@ -110,7 +110,7 @@ public class ExportAutoexecJobApi extends PrivateBinaryStreamApiComponentBase { } } List phaseVoList = autoexecJobMapper.getJobPhaseListWithGroupByJobId(jobId); - if (phaseVoList.size() > 0) { + if (!phaseVoList.isEmpty()) { ExcelBuilder builder = new ExcelBuilder(SXSSFWorkbook.class); builder.withBorderColor(HSSFColor.HSSFColorPredefined.GREY_40_PERCENT) .withHeadFontColor(HSSFColor.HSSFColorPredefined.WHITE) @@ -122,21 +122,16 @@ public class ExportAutoexecJobApi extends PrivateBinaryStreamApiComponentBase { handler.exportJobPhaseNodeWithNodeOutputParam(jobVo, phaseVo, phaseOutputParamMap.get(phaseVo.getName()), builder, getHeadList(phaseVo.getExecMode()), getColumnList(phaseVo.getExecMode())); } } - Workbook workbook = builder.build(); - if (workbook != null) { - String fileName = FileUtil.getEncodedFileName(jobVo.getName() + ".xlsx"); - response.setContentType("application/vnd.ms-excel;charset=utf-8"); - response.setHeader("Content-Disposition", " attachment; filename=\"" + fileName + "\""); - - try (OutputStream os = response.getOutputStream()) { + try (Workbook workbook = builder.build(); + OutputStream os = response.getOutputStream()) { + if (workbook != null) { + String fileName = FileUtil.getEncodedFileName(jobVo.getName() + ".xlsx"); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); workbook.write(os); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } finally { - if (workbook != null) { - ((SXSSFWorkbook) workbook).dispose(); - } } + } catch (IOException e) { + logger.error(e.getMessage(), e); } } return null; diff --git a/src/main/java/neatlogic/module/autoexec/api/job/exec/DownloadAutoexecJobPhaseNodesApi.java b/src/main/java/neatlogic/module/autoexec/api/job/exec/DownloadAutoexecJobPhaseNodesApi.java index 318c429f8300ca320322ceefa2061b23d99b7ace..9a97f39a6e7325c40348c8f54068412f23f7815a 100644 --- a/src/main/java/neatlogic/module/autoexec/api/job/exec/DownloadAutoexecJobPhaseNodesApi.java +++ b/src/main/java/neatlogic/module/autoexec/api/job/exec/DownloadAutoexecJobPhaseNodesApi.java @@ -42,6 +42,7 @@ import neatlogic.framework.autoexec.source.AutoexecJobSourceFactory; import neatlogic.framework.autoexec.source.IAutoexecJobSource; import neatlogic.framework.cmdb.crossover.IResourceAccountCrossoverMapper; import neatlogic.framework.cmdb.crossover.IResourceCenterAccountCrossoverService; +import neatlogic.framework.cmdb.crossover.IResourceCenterResourceCrossoverService; import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.resourcecenter.AccountBaseVo; import neatlogic.framework.cmdb.dto.resourcecenter.AccountProtocolVo; @@ -293,13 +294,13 @@ public class DownloadAutoexecJobPhaseNodesApi extends PrivateBinaryStreamApiComp autoexecJobSourceActionHandler.addExtraJobPhaseNodeBlueGreenInfoByList(jobVo.getId(), autoexecJobPhaseNodeVoList); } - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceCenterResourceCrossoverService resourceCenterResourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); List resourceIdList = autoexecJobPhaseNodeVoList.stream().map(AutoexecJobPhaseNodeVo::getResourceId).filter(Objects::nonNull).collect(Collectors.toList()); List resourceIncludeOsIdList = new ArrayList<>(resourceIdList); //针对巡检 批量补充对应资产的appSystemId if (CollectionUtils.isNotEmpty(resourceIdList)) { if (isInspect) { - List ipObjectResourceList = resourceCrossoverMapper.getResourceListByIdList(resourceIdList); + List ipObjectResourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(resourceIdList); if (CollectionUtils.isNotEmpty(ipObjectResourceList)) { resourceAppSystemMap.putAll(ipObjectResourceList.stream().filter(o -> o.getAppSystemId() != null).collect(Collectors.toMap(ResourceVo::getId, o -> { List appSystemIdList = new ArrayList<>(); diff --git a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByFilterHandler.java b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByFilterHandler.java index f6633094e34c72d65630c2907e5b15967a0ef47b..f9caacfe77e5c7a1ba05c2858eb4e2831be3ac5e 100644 --- a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByFilterHandler.java +++ b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByFilterHandler.java @@ -17,19 +17,14 @@ package neatlogic.module.autoexec.job.node; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import neatlogic.framework.autoexec.constvalue.AutoexecJobPhaseNodeFrom; -import neatlogic.framework.autoexec.constvalue.CombopNodeSpecify; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopConfigVo; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteNodeConfigVo; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteConfigVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobVo; import neatlogic.framework.autoexec.job.node.IUpdateNodes; -import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; +import neatlogic.framework.cmdb.crossover.IResourceCenterResourceCrossoverService; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; import neatlogic.framework.crossover.CrossoverServiceFactory; -import neatlogic.module.autoexec.dao.mapper.AutoexecResourceMapper; import neatlogic.module.autoexec.service.AutoexecJobService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -40,30 +35,23 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.Objects; @Service public class UpdateNodesByFilterHandler implements IUpdateNodes { @Resource AutoexecJobService autoexecJobService; - @Resource - private AutoexecResourceMapper autoexecResourceMapper; private static final Logger logger = LoggerFactory.getLogger(UpdateNodesByFilterHandler.class); + @Override - public boolean update(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - boolean isHasNode = false; - if (executeNodeConfigVo == null) { + public boolean update(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + if (MapUtils.isEmpty(executeConfigVo.getExecuteNodeConfig().getFilter())) { return false; } - if (MapUtils.isNotEmpty(executeNodeConfigVo.getFilter())) { - logger.debug("##updateNodeResourceByFilter:-------------------------------------------------------------------------------start"); - //long updateNodeResourceByFilter = System.currentTimeMillis(); - isHasNode = updateNodeResourceByFilter(executeNodeConfigVo, jobVo, userName, protocolId); - //System.out.println((System.currentTimeMillis() - updateNodeResourceByFilter) + " ##updateNodeResourceByFilter:-------------------------------------------------------------------------------"); - logger.debug("##updateNodeResourceByFilter:-------------------------------------------------------------------------------end"); - - } + logger.debug("##updateNodeResourceByFilter:-------------------------------------------------------------------------------start"); + //long updateNodeResourceByFilter = System.currentTimeMillis(); + boolean isHasNode = updateNodeResourceByFilter(executeConfigVo, jobVo, userName, protocolId); + //System.out.println((System.currentTimeMillis() - updateNodeResourceByFilter) + " ##updateNodeResourceByFilter:-------------------------------------------------------------------------------"); + logger.debug("##updateNodeResourceByFilter:-------------------------------------------------------------------------------end"); return isHasNode; } @@ -71,48 +59,24 @@ public class UpdateNodesByFilterHandler implements IUpdateNodes { * filter * 根据过滤器 更新节点 * - * @param executeNodeConfigVo 执行节点配置 - * @param jobVo 作业 - * @param userName 执行用户 - * @param protocolId 协议id + * @param executeConfigVo 执行节点配置 + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id */ - public boolean updateNodeResourceByFilter(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - JSONObject filterJson = executeNodeConfigVo.getFilter(); + public boolean updateNodeResourceByFilter(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + JSONObject filterJson = executeConfigVo.getExecuteNodeConfig().getFilter(); boolean isHasNode = false; if (MapUtils.isNotEmpty(filterJson)) { - //如果作业层面的节点则补充前置filter - if (Objects.equals(jobVo.getNodeFrom(), AutoexecJobPhaseNodeFrom.JOB.getValue())) { - AutoexecCombopConfigVo config = jobVo.getConfig(); - JSONObject preFilter = null; - if (config != null && config.getExecuteConfig() != null && config.getExecuteConfig().getCombopNodeConfig() != null && MapUtils.isNotEmpty(config.getExecuteConfig().getCombopNodeConfig().getFilter())) { - if (Objects.equals(config.getExecuteConfig().getWhenToSpecify(), CombopNodeSpecify.RUNTIME.getValue())) { - preFilter = config.getExecuteConfig().getCombopNodeConfig().getFilter(); - //以preFilter为主 - for (Map.Entry entry : preFilter.entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - if (value == null || (value instanceof JSONArray && CollectionUtils.isEmpty((JSONArray) value))) { - continue; - } - if (filterJson.containsKey(key)) { - filterJson.put(key, value); - } - } - } - } - } ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, filterJson); + JSONObject preCondition = executeConfigVo.getPreCondition(); + if (MapUtils.isNotEmpty(preCondition)) { + searchVo.setPreCondition(autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preCondition)); + } searchVo.setMaxPageSize(50000); searchVo.setPageSize(50000); - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - List idList; - StringBuilder sqlSb = new StringBuilder(); - if (searchVo.isCustomCondition()) { - searchVo.buildConditionWhereSql(sqlSb, searchVo); - idList = resourceCrossoverMapper.getResourceIdListByDynamicCondition(searchVo, sqlSb.toString()); - } else { - idList = resourceCrossoverMapper.getResourceIdList(searchVo); - } + IResourceCenterResourceCrossoverService resourceCenterResourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); + List idList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); int count = idList.size(); if (count > 0) { int index = 0; @@ -126,7 +90,7 @@ public class UpdateNodesByFilterHandler implements IUpdateNodes { i--; logger.debug("##getResourceListByIdList:-------------------------------------------------------------------------------start"); //long bbb = System.currentTimeMillis(); - List resourceList = resourceCrossoverMapper.getResourceListByIdList(idPageList); + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(idPageList); //System.out.println((System.currentTimeMillis() - bbb) + " ##bbb:-------------------------------------------------------------------------------"); logger.debug("##getResourceListByIdList:-------------------------------------------------------------------------------end"); if (CollectionUtils.isNotEmpty(resourceList)) { @@ -143,7 +107,7 @@ public class UpdateNodesByFilterHandler implements IUpdateNodes { if (CollectionUtils.isNotEmpty(idPageList)) { logger.debug("##getResourceListByIdList last:-------------------------------------------------------------------------------start"); //long bbb = System.currentTimeMillis(); - List resourceList = resourceCrossoverMapper.getResourceListByIdList(idPageList); + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(idPageList); //System.out.println((System.currentTimeMillis() - bbb) + " ##bbb:-------------------------------------------------------------------------------"); logger.debug("##getResourceListByIdList last:-------------------------------------------------------------------------------end"); if (CollectionUtils.isNotEmpty(resourceList)) { diff --git a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByInputHandler.java b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByInputHandler.java index 2452568a3d889c439abfefd12e61ae42b0e72f8d..5caa3a400b3c9c07313df5efacd00e684b954b64 100644 --- a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByInputHandler.java +++ b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByInputHandler.java @@ -18,26 +18,21 @@ package neatlogic.module.autoexec.job.node; import com.alibaba.fastjson.JSONObject; -import neatlogic.framework.autoexec.constvalue.AutoexecJobPhaseNodeFrom; -import neatlogic.framework.autoexec.constvalue.CombopNodeSpecify; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopConfigVo; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteNodeConfigVo; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteConfigVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobVo; import neatlogic.framework.autoexec.dto.node.AutoexecNodeVo; import neatlogic.framework.autoexec.exception.job.AutoexecInputOutOfCountException; import neatlogic.framework.autoexec.job.node.IUpdateNodes; -import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; -import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.module.autoexec.service.AutoexecJobService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; @Service public class UpdateNodesByInputHandler implements IUpdateNodes { @@ -45,29 +40,24 @@ public class UpdateNodesByInputHandler implements IUpdateNodes { AutoexecJobService autoexecJobService; @Override - public boolean update(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - boolean isHasNode = false; - if (executeNodeConfigVo == null) { + public boolean update(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + if (CollectionUtils.isEmpty(executeConfigVo.getExecuteNodeConfig().getInputNodeList())) { return false; } - - if (CollectionUtils.isNotEmpty(executeNodeConfigVo.getInputNodeList())) { - isHasNode = updateNodeResourceByInput(executeNodeConfigVo, jobVo, userName, protocolId); - } - return isHasNode; + return updateNodeResourceByInput(executeConfigVo, jobVo, userName, protocolId); } /** * inputNodeList、selectNodeList * 根据输入和选择节点 更新作业节点 * - * @param executeNodeConfigVo 执行节点配置 - * @param jobVo 作业 - * @param userName 执行用户 - * @param protocolId 协议id + * @param executeConfigVo 执行节点配置 + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id */ - private boolean updateNodeResourceByInput(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - List nodeVoList = executeNodeConfigVo.getInputNodeList(); + private boolean updateNodeResourceByInput(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + List nodeVoList = executeConfigVo.getExecuteNodeConfig().getInputNodeList(); boolean isHasNode = false; List ipPortNameList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(nodeVoList)) { @@ -75,47 +65,12 @@ public class UpdateNodesByInputHandler implements IUpdateNodes { throw new AutoexecInputOutOfCountException(1000); } nodeVoList.forEach(o -> ipPortNameList.add(new ResourceVo(o.getIp(), o.getPort(), o.getName()))); - JSONObject preFilter = null; - if (Objects.equals(jobVo.getNodeFrom(), AutoexecJobPhaseNodeFrom.JOB.getValue())) { - //如果作业层面的节点则补充前置filter - AutoexecCombopConfigVo config = jobVo.getConfig(); - if (config != null && config.getExecuteConfig() != null - && config.getExecuteConfig().getCombopNodeConfig() != null - && MapUtils.isNotEmpty(config.getExecuteConfig().getCombopNodeConfig().getFilter()) - && (Objects.equals(config.getExecuteConfig().getWhenToSpecify(), CombopNodeSpecify.RUNTIME.getValue()))) { - preFilter = config.getExecuteConfig().getCombopNodeConfig().getFilter(); - } - } - ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preFilter); - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - - Set resourceIdSet = new HashSet<>(); - List inputNodeResourceList = new ArrayList<>(); - for (ResourceVo resourceVo : ipPortNameList) { - inputNodeResourceList.add(resourceVo); - if (inputNodeResourceList.size() > 500) { - searchVo.setInputNodeList(inputNodeResourceList); - List resourceList = resourceCrossoverMapper.getResourceListByIpAndPortAndNameWithFilter(searchVo); - if (CollectionUtils.isNotEmpty(resourceList)) { - resourceIdSet.addAll(resourceList.stream().map(ResourceVo::getId).collect(Collectors.toList())); - } - inputNodeResourceList.clear(); - } - } - if (CollectionUtils.isNotEmpty(inputNodeResourceList)) { - searchVo.setInputNodeList(inputNodeResourceList); - List resourceList = resourceCrossoverMapper.getResourceListByIpAndPortAndNameWithFilter(searchVo); - if (CollectionUtils.isNotEmpty(resourceList)) { - resourceIdSet.addAll(resourceList.stream().map(ResourceVo::getId).collect(Collectors.toList())); - } - inputNodeResourceList.clear(); - } - if (CollectionUtils.isNotEmpty(resourceIdSet)) { - searchVo.setIdList(new ArrayList<>(resourceIdSet)); - searchVo.setMaxPageSize(1000); - searchVo.setPageSize(1000); - isHasNode = autoexecJobService.updateNode(jobVo, userName, protocolId, searchVo); + ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, null); + JSONObject preCondition = executeConfigVo.getPreCondition(); + if (MapUtils.isNotEmpty(preCondition)) { + searchVo.setPreCondition(autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preCondition)); } + isHasNode = autoexecJobService.updateNodeByIpPortNameList(ipPortNameList, searchVo, jobVo, userName, protocolId); } return isHasNode; } diff --git a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByParamsHandler.java b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByParamsHandler.java index 056201c6af70c230ae672f24640431cc34e736fa..7c55b76edfa63f0c02c17fb22fc390e801ea72c7 100644 --- a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByParamsHandler.java +++ b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByParamsHandler.java @@ -20,16 +20,15 @@ package neatlogic.module.autoexec.job.node; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.autoexec.dto.AutoexecParamVo; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteNodeConfigVo; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteConfigVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobVo; import neatlogic.framework.autoexec.exception.job.JobParamNodeNullException; import neatlogic.framework.autoexec.job.node.IUpdateNodes; -import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; -import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.module.autoexec.service.AutoexecJobService; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -46,34 +45,30 @@ public class UpdateNodesByParamsHandler implements IUpdateNodes { AutoexecJobService autoexecJobService; @Override - public boolean update(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - boolean isHasNode = false; - if (executeNodeConfigVo == null) { + public boolean update(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + if (CollectionUtils.isEmpty(executeConfigVo.getExecuteNodeConfig().getParamList())) { return false; } - - if (CollectionUtils.isNotEmpty(executeNodeConfigVo.getParamList())) { - isHasNode = updateNodeResourceByParam(jobVo, executeNodeConfigVo, userName, protocolId); - } - return isHasNode; + return updateNodeResourceByParam(jobVo, executeConfigVo, userName, protocolId); } /** * param * 根据运行参数中定义的节点参数 更新作业节点 * - * @param executeNodeConfigVo 执行节点配置 - * @param jobVo 作业 - * @param userName 执行用户 - * @param protocolId 协议id + * @param executeConfigVo 执行节点配置 + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id */ - private boolean updateNodeResourceByParam(AutoexecJobVo jobVo, AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, String userName, Long protocolId) { - List paramList = executeNodeConfigVo.getParamList(); + private boolean updateNodeResourceByParam(AutoexecJobVo jobVo, AutoexecCombopExecuteConfigVo executeConfigVo, String userName, Long protocolId) { + boolean isHasNode = false; + List paramList = executeConfigVo.getExecuteNodeConfig().getParamList(); if (CollectionUtils.isNotEmpty(paramList)) { List runTimeParamList = jobVo.getRunTimeParamList(); Set resourceIdSet = new HashSet<>(); - List resourceSearchList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(runTimeParamList)) { + List ipPortNameList = new ArrayList<>(); List paramObjList = runTimeParamList.stream().filter(p -> paramList.contains(p.getKey())).collect(Collectors.toList()); paramObjList.forEach(p -> { if (!(p.getValue() instanceof JSONArray) || CollectionUtils.isEmpty((JSONArray) p.getValue())) { @@ -91,36 +86,31 @@ public class UpdateNodesByParamsHandler implements IUpdateNodes { if (StringUtils.isNotBlank(ip)) { Integer port = valueObj.getInteger("port"); String name = valueObj.getString("name"); - ResourceSearchVo resourceSearchVo = new ResourceSearchVo(); - resourceSearchVo.setIp(ip); - if (port != null) { - resourceSearchVo.setPort(port.toString()); - } - resourceSearchVo.setName(name); - resourceSearchList.add(resourceSearchVo); + ipPortNameList.add(new ResourceVo(ip, port, name)); } } } } }); - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - if (CollectionUtils.isNotEmpty(resourceSearchList)) { - for (ResourceSearchVo resourceSearchVo : resourceSearchList) { - Long id = resourceCrossoverMapper.getResourceIdByIpAndPortAndName(resourceSearchVo); - if (id != null) { - resourceIdSet.add(id); - } + ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, null); + JSONObject preCondition = executeConfigVo.getPreCondition(); + if (MapUtils.isNotEmpty(preCondition)) { + searchVo.setPreCondition(autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preCondition)); + } + if (CollectionUtils.isNotEmpty(ipPortNameList)) { + boolean isHasNodeTmp = autoexecJobService.updateNodeByIpPortNameList(ipPortNameList, searchVo, jobVo, userName, protocolId); + if (isHasNodeTmp) { + isHasNode = true; } } if (CollectionUtils.isNotEmpty(resourceIdSet)) { - List resourceVoList = resourceCrossoverMapper.getResourceByIdList(new ArrayList<>(resourceIdSet)); - if (CollectionUtils.isNotEmpty(resourceVoList)) { - autoexecJobService.updateJobPhaseNode(jobVo, resourceVoList, userName, protocolId); - return true; + boolean isHasNodeTmp = autoexecJobService.updateNodeByResourceIdList(new ArrayList<>(resourceIdSet), searchVo, jobVo, userName, protocolId); + if (isHasNodeTmp) { + isHasNode = true; } } } } - return false; + return isHasNode; } } diff --git a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByPrePhaseOutputHandler.java b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByPrePhaseOutputHandler.java index e69abca5bb83f1da551f4f85964b57270fba1fd3..170664637f9b7ccf0075b1777a01df420222f4cd 100644 --- a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByPrePhaseOutputHandler.java +++ b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesByPrePhaseOutputHandler.java @@ -22,7 +22,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.autoexec.constvalue.ExecMode; import neatlogic.framework.autoexec.dao.mapper.AutoexecJobMapper; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteNodeConfigVo; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteConfigVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobPhaseNodeVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobPhaseOperationVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobVo; @@ -31,10 +31,8 @@ import neatlogic.framework.autoexec.exception.AutoexecJobNodePreParamValueNotInv import neatlogic.framework.autoexec.exception.AutoexecJobPhaseOperationNotFoundException; import neatlogic.framework.autoexec.exception.AutoexecJobUpdateNodeByPreOutPutListException; import neatlogic.framework.autoexec.job.node.IUpdateNodes; -import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; -import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.module.autoexec.service.AutoexecJobService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -58,29 +56,24 @@ public class UpdateNodesByPrePhaseOutputHandler implements IUpdateNodes { private MongoTemplate mongoTemplate; @Override - public boolean update(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - boolean isHasNode = false; - if (executeNodeConfigVo == null) { + public boolean update(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + if (CollectionUtils.isEmpty(executeConfigVo.getExecuteNodeConfig().getPreOutputList())) { return false; } - - if (CollectionUtils.isNotEmpty(executeNodeConfigVo.getPreOutputList())) { - isHasNode = updateNodeResourceByPrePhaseOutput(jobVo, executeNodeConfigVo, userName, protocolId); - } - return isHasNode; + return updateNodeResourceByPrePhaseOutput(jobVo, executeConfigVo, userName, protocolId); } /** * param * 根据上游阶段出参 更新作业节点 * - * @param executeNodeConfigVo 执行节点配置 - * @param jobVo 作业 - * @param userName 执行用户 - * @param protocolId 协议id + * @param executeConfigVo 执行节点配置 + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id */ - private boolean updateNodeResourceByPrePhaseOutput(AutoexecJobVo jobVo, AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, String userName, Long protocolId) { - List preOutputList = executeNodeConfigVo.getPreOutputList(); + private boolean updateNodeResourceByPrePhaseOutput(AutoexecJobVo jobVo, AutoexecCombopExecuteConfigVo executeConfigVo, String userName, Long protocolId) { + List preOutputList = executeConfigVo.getExecuteNodeConfig().getPreOutputList(); if (CollectionUtils.isEmpty(preOutputList) && preOutputList.size() != 3) { throw new AutoexecJobUpdateNodeByPreOutPutListException(jobVo); } @@ -137,16 +130,12 @@ public class UpdateNodesByPrePhaseOutputHandler implements IUpdateNodes { List ipPortNameList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(nodeVoList)) { nodeVoList.forEach(o -> ipPortNameList.add(new ResourceVo(o.getIp(), o.getPort(), o.getName()))); - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo); - List resourceVoList = resourceCrossoverMapper.getResourceListByResourceVoList(ipPortNameList, searchVo); - if (CollectionUtils.isNotEmpty(resourceVoList)) { - autoexecJobService.updateJobPhaseNode(jobVo, resourceVoList, userName, protocolId); - //重置节点状态 - //List jobNodeVoList = autoexecJobMapper.getJobPhaseNodeListWithRunnerByJobPhaseIdAndExceptStatusList(jobVo.getCurrentPhase().getId(), Collections.singletonList(JobNodeStatus.IGNORED.getValue())); - //resetJobNodeStatus(jobVo, jobNodeVoList); - return true; + ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, null); + JSONObject preCondition = executeConfigVo.getPreCondition(); + if (MapUtils.isNotEmpty(preCondition)) { + searchVo.setPreCondition(autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preCondition)); } + return autoexecJobService.updateNodeByIpPortNameList(ipPortNameList, searchVo, jobVo, userName, protocolId); } return false; } diff --git a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesSelectHandler.java b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesSelectHandler.java index 625cc587fcba50ddd6f1cdc43997e2e210cc7ea9..61443afbc4fe2ab294a867e2fd920a460884c9d1 100644 --- a/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesSelectHandler.java +++ b/src/main/java/neatlogic/module/autoexec/job/node/UpdateNodesSelectHandler.java @@ -17,15 +17,16 @@ package neatlogic.module.autoexec.job.node; -import com.alibaba.fastjson.JSONObject; -import neatlogic.framework.autoexec.constvalue.AutoexecJobPhaseNodeFrom; -import neatlogic.framework.autoexec.constvalue.CombopNodeSpecify; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopConfigVo; -import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteNodeConfigVo; +import com.alibaba.fastjson.JSON; +import neatlogic.framework.autoexec.dto.combop.AutoexecCombopExecuteConfigVo; import neatlogic.framework.autoexec.dto.job.AutoexecJobVo; import neatlogic.framework.autoexec.dto.node.AutoexecNodeVo; import neatlogic.framework.autoexec.job.node.IUpdateNodes; +import neatlogic.framework.cmdb.crossover.IResourceCenterResourceCrossoverService; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; +import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; +import neatlogic.framework.common.util.PageUtil; +import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.module.autoexec.service.AutoexecJobService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -33,7 +34,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; -import java.util.Objects; import static java.util.stream.Collectors.toList; @@ -43,44 +43,48 @@ public class UpdateNodesSelectHandler implements IUpdateNodes { AutoexecJobService autoexecJobService; @Override - public boolean update(AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { - boolean isHasNode = false; - if (executeNodeConfigVo == null) { + public boolean update(AutoexecCombopExecuteConfigVo executeConfigVo, AutoexecJobVo jobVo, String userName, Long protocolId) { + if (CollectionUtils.isEmpty(executeConfigVo.getExecuteNodeConfig().getSelectNodeList())) { return false; } - - if (CollectionUtils.isNotEmpty(executeNodeConfigVo.getSelectNodeList())) { - isHasNode = updateNodeResourceBySelect(jobVo, executeNodeConfigVo, userName, protocolId); - } - return isHasNode; + return updateNodeResourceBySelect(jobVo, executeConfigVo, userName, protocolId); } /** * selectNodeList * 根据输入和选择节点 更新作业节点 * - * @param executeNodeConfigVo 执行节点配置 - * @param jobVo 作业 - * @param userName 执行用户 - * @param protocolId 协议id + * @param executeConfigVo 执行节点配置 + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id */ - private boolean updateNodeResourceBySelect(AutoexecJobVo jobVo, AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo, String userName, Long protocolId) { - List nodeVoList = executeNodeConfigVo.getSelectNodeList(); + private boolean updateNodeResourceBySelect(AutoexecJobVo jobVo, AutoexecCombopExecuteConfigVo executeConfigVo, String userName, Long protocolId) { + List nodeVoList = executeConfigVo.getExecuteNodeConfig().getSelectNodeList(); boolean isHasNode = false; if (CollectionUtils.isNotEmpty(nodeVoList)) { - JSONObject preFilter = null; - if (Objects.equals(jobVo.getNodeFrom(), AutoexecJobPhaseNodeFrom.JOB.getValue())) { - //如果作业层面的节点则补充前置filter - AutoexecCombopConfigVo config = jobVo.getConfig(); - if (config != null && config.getExecuteConfig() != null && config.getExecuteConfig().getCombopNodeConfig() != null && MapUtils.isNotEmpty(config.getExecuteConfig().getCombopNodeConfig().getFilter())) { - if (Objects.equals(config.getExecuteConfig().getWhenToSpecify(), CombopNodeSpecify.RUNTIME.getValue())) { - preFilter = config.getExecuteConfig().getCombopNodeConfig().getFilter(); + ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, null); + if (MapUtils.isNotEmpty(executeConfigVo.getPreCondition())) { + searchVo.setPreCondition(JSON.toJavaObject(executeConfigVo.getPreCondition(), ResourceSearchVo.class)); + } + searchVo.setIdList(nodeVoList.stream().map(AutoexecNodeVo::getId).collect(toList())); + int count; + IResourceCenterResourceCrossoverService resourceCenterResourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); + count = resourceCenterResourceCrossoverService.getResourceCount(searchVo); + if (count > 0) { + int pageCount = PageUtil.getPageCount(count, searchVo.getPageSize()); + for (int i = 1; i <= pageCount; i++) { + searchVo.setCurrentPage(i); + List idList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); + if (CollectionUtils.isNotEmpty(idList)) { + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(idList); + if (CollectionUtils.isNotEmpty(resourceList)) { + autoexecJobService.updateJobPhaseNode(jobVo, resourceList, userName, protocolId); + isHasNode = true; + } } } } - ResourceSearchVo searchVo = autoexecJobService.getResourceSearchVoWithCmdbGroupType(jobVo, preFilter); - searchVo.setIdList(nodeVoList.stream().map(AutoexecNodeVo::getId).collect(toList())); - isHasNode = autoexecJobService.updateNode(jobVo, userName, protocolId, searchVo); } return isHasNode; } diff --git a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobActionServiceImpl.java b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobActionServiceImpl.java index 2ba11b2143c91f6075b918cfc3a85a6dae583e4d..eeeef2d6dab9545754d90ec8918668c13ec19c4e 100644 --- a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobActionServiceImpl.java +++ b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobActionServiceImpl.java @@ -488,7 +488,6 @@ public class AutoexecJobActionServiceImpl implements AutoexecJobActionService, I if (combopExecuteConfigVo == null) { combopExecuteConfigVo = new AutoexecCombopExecuteConfigVo(); } - combopExecuteConfigVo.setCombopNodeConfig(combopExecuteConfigVo.getExecuteNodeConfig()); if (autoexecJobParam.getExecuteConfig().getProtocolId() != null) { combopExecuteConfigVo.setProtocolId(autoexecJobParam.getExecuteConfig().getProtocolId()); } diff --git a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobService.java b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobService.java index cf4ab574ade35b683f5f91e8a23397eff3633d97..ed2006c6f97ac58a34afd6f268fd67ace30d3954 100644 --- a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobService.java +++ b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobService.java @@ -332,11 +332,12 @@ public interface AutoexecJobService { /** * 获取最终的阶段状态 - * @param statusList 节点或阶段runner的状态列表 + * + * @param statusList 节点或阶段runner的状态列表 * @param currentPhaseStatus 当前阶段状态,目前只有updateStatusApi用到 * @return 作业状态 */ - String getJobPhaseStatus(List statusList,String currentPhaseStatus); + String getJobPhaseStatus(List statusList, String currentPhaseStatus); String updatePartialNodeJobAndPhaseWithRunnerId(AutoexecJobPhaseVo jobPhaseVo, Long runnerId, AutoexecJobVo jobVo, String currentPhaseStatus, Integer phaseRunnerWarnCount); @@ -344,10 +345,22 @@ public interface AutoexecJobService { /** * 更新节点 - * @param jobVo 作业 - * @param userName 执行用户 + * + * @param jobVo 作业 + * @param userName 执行用户 + * @param protocolId 协议id + * @param searchVo 过滤条件 + */ + boolean updateNodeByIpPortNameList(List ipPortNameList, ResourceSearchVo searchVo, AutoexecJobVo jobVo, String userName, Long protocolId); + + + /** + * 更新节点 + * + * @param jobVo 作业 + * @param userName 执行用户 * @param protocolId 协议id - * @param searchVo 过滤条件 + * @param searchVo 过滤条件 */ - boolean updateNode(AutoexecJobVo jobVo, String userName, Long protocolId, ResourceSearchVo searchVo); -} + boolean updateNodeByResourceIdList(List resourceIdList, ResourceSearchVo searchVo, AutoexecJobVo jobVo, String userName, Long protocolId); +} \ No newline at end of file diff --git a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobServiceImpl.java b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobServiceImpl.java index 5bdce26e5d69501fbf1bfeed6596bba3c2e3dba4..e6077ca6d8a111b3440b1d6406c60be3e476bf14 100644 --- a/src/main/java/neatlogic/module/autoexec/service/AutoexecJobServiceImpl.java +++ b/src/main/java/neatlogic/module/autoexec/service/AutoexecJobServiceImpl.java @@ -49,14 +49,12 @@ import neatlogic.framework.autoexec.source.IAutoexecJobSource; import neatlogic.framework.autoexec.util.AutoexecUtil; import neatlogic.framework.cmdb.crossover.IResourceAccountCrossoverMapper; import neatlogic.framework.cmdb.crossover.IResourceCenterResourceCrossoverService; -import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.resourcecenter.AccountProtocolVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; import neatlogic.framework.cmdb.exception.resourcecenter.ResourceCenterAccountProtocolNotFoundException; import neatlogic.framework.common.constvalue.RunnerStatus; import neatlogic.framework.common.constvalue.systemuser.SystemUser; -import neatlogic.framework.common.util.PageUtil; import neatlogic.framework.config.ConfigManager; import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.framework.dao.mapper.UserMapper; @@ -388,6 +386,7 @@ public class AutoexecJobServiceImpl implements AutoexecJobService, IAutoexecJobC */ @Override public void updateNodeByPreOutput(AutoexecJobVo jobVo, AutoexecJobPhaseVo currentJobPhaseVo) { + getAutoexecJobDetail(jobVo); jobVo.setPreOutputPhase(currentJobPhaseVo); List combopPhaseVoList = new ArrayList<>(); List jobPhaseVoList = getJobPhaseListByPreOutput(jobVo, currentJobPhaseVo, combopPhaseVoList); @@ -610,6 +609,10 @@ public class AutoexecJobServiceImpl implements AutoexecJobService, IAutoexecJobC Integer parallelCount = null; AutoexecJobPhaseVo jobPhase = jobVo.getExecutePhase(); AutoexecJobGroupVo jobGroupVo = jobVo.getExecutePhase().getJobGroupVo(); + //动态节点是在上游节点执行完后才更新节点动态节点,需要依赖创建作业时的groupTag参数 + if(jobVo.getRunnerGroupTag() == null){ + jobVo.setRunnerGroupTag(combopExecuteConfigVo.getRunnerGroupTag()); + } //作业层执行用户引用作业参数且抛作业参数为空 String jobUserNameParamNullKey = StringUtils.EMPTY; if (combopExecuteConfigVo != null) { @@ -1049,8 +1052,7 @@ public class AutoexecJobServiceImpl implements AutoexecJobService, IAutoexecJobC } jobVo.getExecutePhase().setLcd(updateTime); - AutoexecCombopExecuteNodeConfigVo executeNodeConfigVo = combopExecuteConfigVo.getExecuteNodeConfig(); - boolean isHasNode = UpdateNodesFactory.updateNodes(executeNodeConfigVo, jobVo, userName, protocolId); + boolean isHasNode = UpdateNodesFactory.updateNodes(combopExecuteConfigVo, jobVo, userName, protocolId); logger.debug("##AfterUpdateNodes:-------------------------------------------------------------------------------start"); //long ccc = System.currentTimeMillis(); AutoexecJobPhaseVo jobPhaseVo = jobVo.getExecutePhase(); @@ -1165,8 +1167,8 @@ public class AutoexecJobServiceImpl implements AutoexecJobService, IAutoexecJobC } IResourceCenterResourceCrossoverService resourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); ResourceSearchVo searchVo = resourceCrossoverService.assembleResourceSearchVo(filterJson); - resourceCrossoverService.handleBatchSearchList(searchVo); - resourceCrossoverService.setIpFieldAttrIdAndNameFieldAttrId(searchVo); +// resourceCrossoverService.handleBatchSearchList(searchVo); +// resourceCrossoverService.setIpFieldAttrIdAndNameFieldAttrId(searchVo); return searchVo; } @@ -2186,34 +2188,68 @@ public class AutoexecJobServiceImpl implements AutoexecJobService, IAutoexecJobC } @Override - public boolean updateNode(AutoexecJobVo jobVo, String userName, Long protocolId, ResourceSearchVo searchVo) { - int count; + public boolean updateNodeByIpPortNameList(List ipPortNameList, ResourceSearchVo searchVo, AutoexecJobVo jobVo, String userName, Long protocolId) { boolean isHasNode = false; - StringBuilder sqlSb = new StringBuilder(); - IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - if (searchVo.isCustomCondition()) { - searchVo.buildConditionWhereSql(sqlSb, searchVo); - count = resourceCrossoverMapper.getResourceCountByDynamicCondition(searchVo, sqlSb.toString()); - } else { - count = resourceCrossoverMapper.getResourceCount(searchVo); - } - if (count > 0) { - int pageCount = PageUtil.getPageCount(count, searchVo.getPageSize()); - for (int i = 1; i <= pageCount; i++) { - searchVo.setCurrentPage(i); - List idList; - if (searchVo.isCustomCondition()) { - idList = resourceCrossoverMapper.getResourceIdListByDynamicCondition(searchVo, sqlSb.toString()); - } else { - idList = resourceCrossoverMapper.getResourceIdList(searchVo); - } + IResourceCenterResourceCrossoverService resourceCenterResourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); + List inputNodeResourceList = new ArrayList<>(); + for (ResourceVo resourceVo : ipPortNameList) { + inputNodeResourceList.add(resourceVo); + if (inputNodeResourceList.size() > 1000) { + searchVo.setInputNodeList(inputNodeResourceList); + List idList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); if (CollectionUtils.isNotEmpty(idList)) { - List resourceList = resourceCrossoverMapper.getResourceListByIdList(idList); + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(idList); if (CollectionUtils.isNotEmpty(resourceList)) { updateJobPhaseNode(jobVo, resourceList, userName, protocolId); isHasNode = true; } } + inputNodeResourceList.clear(); + } + } + if (CollectionUtils.isNotEmpty(inputNodeResourceList)) { + searchVo.setInputNodeList(inputNodeResourceList); + List idList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); + if (CollectionUtils.isNotEmpty(idList)) { + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(idList); + if (CollectionUtils.isNotEmpty(resourceList)) { + updateJobPhaseNode(jobVo, resourceList, userName, protocolId); + isHasNode = true; + } + } + } + return isHasNode; + } + + @Override + public boolean updateNodeByResourceIdList(List idList,ResourceSearchVo searchVo,AutoexecJobVo jobVo,String userName,Long protocolId) { + boolean isHasNode = false; + IResourceCenterResourceCrossoverService resourceCenterResourceCrossoverService = CrossoverServiceFactory.getApi(IResourceCenterResourceCrossoverService.class); + List resourceIdList = new ArrayList<>(); + for (Long id : idList) { + resourceIdList.add(id); + if (resourceIdList.size() > 1000) { + searchVo.setIdList(resourceIdList); + List invalidIdList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); + if (CollectionUtils.isNotEmpty(invalidIdList)) { + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(invalidIdList); + if (CollectionUtils.isNotEmpty(resourceList)) { + updateJobPhaseNode(jobVo, resourceList, userName, protocolId); + isHasNode = true; + } + } + resourceIdList.clear(); + } + } + if (CollectionUtils.isNotEmpty(resourceIdList)) { + searchVo.setIdList(resourceIdList); + List invalidIdList = resourceCenterResourceCrossoverService.getResourceIdList(searchVo); + if (CollectionUtils.isNotEmpty(invalidIdList)) { + List resourceList = resourceCenterResourceCrossoverService.getResourceListByIdList(invalidIdList); + if (CollectionUtils.isNotEmpty(resourceList)) { + updateJobPhaseNode(jobVo, resourceList, userName, protocolId); + isHasNode = true; + } } } return isHasNode;