diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigEnvApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigEnvApi.java index 127c696bc88981111afba748142a10787aeee79a..aac0e56a820fa6a19ef0e5643b5cfc4cef4e7b53 100644 --- a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigEnvApi.java +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigEnvApi.java @@ -19,7 +19,11 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.auth.core.AuthAction; import neatlogic.framework.cmdb.crossover.ICiEntityCrossoverMapper; +import neatlogic.framework.cmdb.crossover.IGlobalAttrCrossoverMapper; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrItemVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.exception.cientity.CiEntityNotFoundException; +import neatlogic.framework.cmdb.exception.globalattr.GlobalAttrItemIsNotExistsException; import neatlogic.framework.common.constvalue.ApiParamType; import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.framework.deploy.auth.DEPLOY_BASE; @@ -30,11 +34,13 @@ import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; import neatlogic.module.deploy.dao.mapper.DeployAppConfigMapper; import neatlogic.module.deploy.service.DeployAppAuthorityService; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @author longrf @@ -53,7 +59,7 @@ public class SaveDeployAppConfigEnvApi extends PrivateApiComponentBase { @Override public String getName() { - return "保存发布应用配置的应用系统环境"; + return "nmdaae.savedeployappconfigenvapi.getname"; } @Override @@ -67,12 +73,12 @@ public class SaveDeployAppConfigEnvApi extends PrivateApiComponentBase { } @Input({ - @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "应用系统id"), - @Param(name = "appModuleId", type = ApiParamType.LONG, isRequired = true, desc = "应用模块id"), - @Param(name = "envIdList", type = ApiParamType.JSONARRAY, isRequired = true, desc = "环境id列表"), + @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "term.cmdb.appsystemid"), + @Param(name = "appModuleId", type = ApiParamType.LONG, isRequired = true, desc = "term.cmdb.appmoduleid"), + @Param(name = "envIdList", type = ApiParamType.JSONARRAY, isRequired = true, desc = "term.cmdb.envidlist"), }) - @Output({@Param(name = "Return", type = ApiParamType.LONG, desc = "环境id")}) - @Description(desc = "保存发布应用配置的应用系统环境") + @Output({}) + @Description(desc = "nmdaae.savedeployappconfigenvapi.getname") @Override public Object myDoService(JSONObject paramObj) throws Exception { JSONArray envIdArray = paramObj.getJSONArray("envIdList"); @@ -80,27 +86,43 @@ public class SaveDeployAppConfigEnvApi extends PrivateApiComponentBase { if (CollectionUtils.isNotEmpty(envIdArray)) { envIdList = envIdArray.toJavaList(Long.class); } - - //校验编辑配置的操作权限 - deployAppAuthorityService.checkOperationAuth(paramObj.getLong("appSystemId"), DeployAppConfigAction.EDIT); - deployAppAuthorityService.checkEnvAuthList(paramObj.getLong("appSystemId"), envIdList); + Long appSystemId = paramObj.getLong("appSystemId"); + Long appModuleId = paramObj.getLong("appModuleId"); //校验应用系统id、应用模块id、环境id是否存在 ICiEntityCrossoverMapper iCiEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); - if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(paramObj.getLong("appSystemId")) == null) { - throw new CiEntityNotFoundException(paramObj.getLong("appSystemId")); + if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(appSystemId) == null) { + throw new CiEntityNotFoundException(appSystemId); } - if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(paramObj.getLong("appModuleId")) == null) { - throw new CiEntityNotFoundException(paramObj.getLong("appModuleId")); + if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(appModuleId) == null) { + throw new CiEntityNotFoundException(appModuleId); } - for (Long envId : envIdList) { - if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(envId) == null) { - throw new CiEntityNotFoundException(envId); + //校验编辑配置的操作权限 + deployAppAuthorityService.checkOperationAuth(appSystemId, DeployAppConfigAction.EDIT); + deployAppAuthorityService.checkEnvAuthList(appSystemId, envIdList); + + IGlobalAttrCrossoverMapper globalAttrCrossoverMapper = CrossoverServiceFactory.getApi(IGlobalAttrCrossoverMapper.class); + List globalAttrItemList = new ArrayList<>(); + GlobalAttrVo globalAttrVo = new GlobalAttrVo(); + globalAttrVo.setIsActive(1); + globalAttrVo.setName("app_environment"); + List globalAttrList = globalAttrCrossoverMapper.searchGlobalAttr(globalAttrVo); + if (CollectionUtils.isNotEmpty(globalAttrList)) { + globalAttrVo = globalAttrList.get(0); + globalAttrItemList = globalAttrVo.getItemList(); + } + List globalAttrItemIdList = globalAttrItemList.stream().map(GlobalAttrItemVo::getId).collect(Collectors.toList()); + List notExistIdList = ListUtils.removeAll(envIdList, globalAttrItemIdList); + if (CollectionUtils.isNotEmpty(notExistIdList)) { + List notExistIdStrList = new ArrayList<>(); + for (Long id : notExistIdList) { + notExistIdStrList.add(id.toString()); } + throw new GlobalAttrItemIsNotExistsException(globalAttrVo, String.join(",", notExistIdStrList)); } - deployAppConfigMapper.insertAppConfigEnv(paramObj.getLong("appSystemId"), paramObj.getLong("appModuleId"), envIdList); + deployAppConfigMapper.insertAppConfigEnv(appSystemId, appModuleId, envIdList); return null; } } diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/module/ListDeployAppConfigAppEnvApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/module/ListDeployAppConfigAppEnvApi.java index cf4aeccc7eeab2522d2a609d64e7d2942dcc1e7c..93017823115cec019af38004e19af01edab20431 100644 --- a/src/main/java/neatlogic/module/deploy/api/appconfig/module/ListDeployAppConfigAppEnvApi.java +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/module/ListDeployAppConfigAppEnvApi.java @@ -17,8 +17,12 @@ package neatlogic.module.deploy.api.appconfig.module; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.cmdb.crossover.IGlobalAttrCrossoverMapper; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrItemVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.resourcecenter.entity.AppEnvironmentVo; import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.framework.deploy.auth.DEPLOY_BASE; import neatlogic.framework.deploy.dto.app.DeployAppEnvironmentVo; import neatlogic.framework.restful.annotation.*; @@ -55,7 +59,7 @@ public class ListDeployAppConfigAppEnvApi extends PrivateApiComponentBase { @Override public String getName() { - return "查询发布应用配置的应用系统环境列表"; + return "nmdaam.listdeployappconfigappenvapi.getname"; } @Override @@ -64,39 +68,53 @@ public class ListDeployAppConfigAppEnvApi extends PrivateApiComponentBase { } @Input({ - @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "应用系统id"), - @Param(name = "appModuleId", type = ApiParamType.LONG, desc = "应用模块id"), - @Param(name = "isHasEnv", type = ApiParamType.INTEGER, desc = "是否拥有环境 (0:查找现没有的环境,1:查找现有的环境)"), + @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "term.cmdb.appsystemid"), + @Param(name = "appModuleId", type = ApiParamType.LONG, desc = "term.cmdb.appmoduleid"), + @Param(name = "isHasEnv", type = ApiParamType.INTEGER, desc = "term.cmdb.isexistingenv", help = "0:查找现没有的环境,1:查找现有的环境"), }) @Output({ - @Param(explode = AppEnvironmentVo[].class, desc = "发布应用配置的应用系统环境列表"), + @Param(explode = AppEnvironmentVo[].class, desc = "common.tbodylist"), }) - @Description(desc = "查询发布应用配置的应用系统环境列表(用于应用树的环境下拉、发布作业时通过模块列表查询环境列表)") + @Description(desc = "nmdaam.listdeployappconfigappenvapi.getname") @Override public Object myDoService(JSONObject paramObj) { Long appSystemId = paramObj.getLong("appSystemId"); Long appModuleId = paramObj.getLong("appModuleId"); - List returnEnvList = null; - if (paramObj.getInteger("isHasEnv") != null && paramObj.getInteger("isHasEnv") == 0) { - returnEnvList = deployAppConfigMapper.getDeployAppHasNotEnvListByAppSystemIdAndModuleIdList(appSystemId, appModuleId); - } else { - - //查找发布的环境 - List deployEnvList = deployAppConfigMapper.getDeployAppEnvListByAppSystemIdAndModuleId(appSystemId, appModuleId); + List returnEnvList = new ArrayList<>(); - //查找cmdb的环境 - List cmdbEnvList = deployAppConfigMapper.getCmdbEnvListByAppSystemIdAndModuleId(appSystemId, appModuleId); + //查找发布的环境 + List deployEnvList = deployAppConfigMapper.getDeployAppEnvListByAppSystemIdAndModuleId(appSystemId, appModuleId); + //查找cmdb的环境 + List cmdbEnvList = deployAppConfigMapper.getCmdbEnvListByAppSystemIdAndModuleId(appSystemId, appModuleId); + List cmdbEnvIdList = cmdbEnvList.stream().map(DeployAppEnvironmentVo::getId).collect(Collectors.toList()); + List deployEnvIdList = deployEnvList.stream().map(DeployAppEnvironmentVo::getId).collect(Collectors.toList()); + if (paramObj.getInteger("isHasEnv") != null && paramObj.getInteger("isHasEnv") == 0) { + IGlobalAttrCrossoverMapper globalAttrCrossoverMapper = CrossoverServiceFactory.getApi(IGlobalAttrCrossoverMapper.class); + List globalAttrItemList = new ArrayList<>(); + GlobalAttrVo globalAttrVo = new GlobalAttrVo(); + globalAttrVo.setIsActive(1); + globalAttrVo.setName("app_environment"); + List globalAttrList = globalAttrCrossoverMapper.searchGlobalAttr(globalAttrVo); + if (CollectionUtils.isNotEmpty(globalAttrList)) { + globalAttrVo = globalAttrList.get(0); + globalAttrItemList = globalAttrVo.getItemList(); + } + for (GlobalAttrItemVo globalAttrItemVo : globalAttrItemList) { + Long id = globalAttrItemVo.getId(); + if (cmdbEnvIdList.contains(id) || deployEnvIdList.contains(id)) { + continue; + } + returnEnvList.add(new DeployAppEnvironmentVo(id, globalAttrItemVo.getValue())); + } + } else { //如果有交集,则删除发布多余的环境idList if (CollectionUtils.isNotEmpty(cmdbEnvList) && CollectionUtils.isNotEmpty(deployEnvList)) { - List cmdbEnvIdList = cmdbEnvList.stream().map(DeployAppEnvironmentVo::getId).collect(Collectors.toList()); - List deployEnvIdList = deployEnvList.stream().map(DeployAppEnvironmentVo::getId).collect(Collectors.toList()); - List sameEnvIdList = new ArrayList<>(cmdbEnvIdList); sameEnvIdList.retainAll(deployEnvIdList); if (sameEnvIdList.size() > 0) { deployAppConfigMapper.deleteAppConfigEnvByAppSystemIdAndAppModuleIdAndEnvIdList(paramObj.getLong("appSystemId"), appModuleId, sameEnvIdList); - for (int i = 0; i < deployEnvList.size(); i++) { + for (int i = deployEnvList.size() - 1; i >= 0; i--) { DeployAppEnvironmentVo deployAppEnvironmentVo = deployEnvList.get(i); if (sameEnvIdList.contains(deployAppEnvironmentVo.getId())) { deployEnvList.remove(i); diff --git a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java index 7835122d0209d5570c30ec670b9ae791bba600c2..9aa02670f1d215b9f309a869027dd071861081cd 100644 --- a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java +++ b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java @@ -67,8 +67,6 @@ public interface DeployAppConfigMapper extends IDeployAppConfigCrossoverMapper { List getDeployAppEnvListByAppSystemIdAndModuleIdList(@Param("appSystemId") Long appSystemId, @Param("appModuleIdList") List appModuleIdList); - List getDeployAppHasNotEnvListByAppSystemIdAndModuleIdList(@Param("appSystemId") Long appSystemId, @Param("appModuleId") Long appModuleId); - List getCmdbEnvListByAppSystemIdAndModuleId(@Param("appSystemId") Long appSystemId, @Param("appModuleId") Long appModuleId); List getDeployAppEnvListByAppSystemIdAndModuleId(@Param("appSystemId") Long appSystemId, @Param("appModuleId") Long appModuleId); diff --git a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml index 41a8122f31046fc17daafa95469d637a49529324..3db0f5fb0580a2c71b0fe4ddba9e5e5bd0753cc6 100644 --- a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml +++ b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml @@ -407,13 +407,13 @@ along with this program. If not, see .--> ) UNION ( SELECT - cc.id AS envId, - cc.name AS envName, + cga.id AS envId, + cga.value AS envName, cce.id AS appModuleId, cce.name AS appModuleName FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id JOIN cmdb_cientity cce ON cce.id = dace.app_module_id @@ -450,11 +450,10 @@ along with this program. If not, see .--> ) UNION ( SELECT - cc.id AS envId + dace.`env_id` AS envId FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id - JOIN cmdb_cientity cce ON cce.id = dace.app_module_id + JOIN `cmdb_global_attritem` cga ON cga.`id` = dace.`env_id` dace.app_system_id = #{value} @@ -480,11 +479,11 @@ along with this program. If not, see .--> where a.`env_id` is not null and a.`app_system_id` = #{appSystemId} UNION - SELECT cc.id AS envId, - cc.name AS envName, + SELECT cga.id AS envId, + cga.value AS envName, dace.app_module_id AS appModuleId FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id where dace.app_system_id = #{value} @@ -507,10 +506,10 @@ along with this program. If not, see .--> #{appModuleId} UNION - SELECT cc.id AS envId, + SELECT cga.id AS envId, dace.app_module_id AS appModuleId FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id where dace.app_system_id = #{appSystemId} and dace.app_module_id in @@ -527,10 +526,10 @@ along with this program. If not, see .--> and a.`app_system_id` = #{systemId} and a.`app_module_id` = #{moduleId} UNION - SELECT cc.id AS envId, - cc.name AS envName + SELECT cga.id AS envId, + cga.value AS envName FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id where dace.app_system_id = #{systemId} and dace.app_module_id = #{moduleId} @@ -594,56 +593,6 @@ along with this program. If not, see .--> - - SELECT - cc.id AS id, - cc.name AS name, + b.`id` AS id, + b.`value` AS name, 1 AS isDeletable - FROM - deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id - JOIN cmdb_cientity cce ON cce.id = dace.app_module_id + FROM deploy_app_config_env a + JOIN `cmdb_global_attritem` b ON b.`id` = a.`env_id` - and dace.app_system_id = #{appSystemId} + and a.app_system_id = #{appSystemId} - and dace.app_module_id = #{appModuleId} + and a.app_module_id = #{appModuleId} @@ -726,7 +673,7 @@ along with this program. If not, see .--> dace.app_module_id FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id dace.app_system_id = #{appSystemId} @@ -1317,10 +1264,10 @@ along with this program. If not, see .--> ) UNION ( - SELECT cc.id AS envId, - cc.name AS envName + SELECT cga.id AS envId, + cga.value AS envName FROM deploy_app_config_env dace - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id where dace.app_system_id = #{appSystemId} and dace.app_module_id = #{appModuleId} and dace.env_id != #{envId} diff --git a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployVersionMapper.xml b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployVersionMapper.xml index cc37b72507a5992ceda267e42b830019e1224bbc..00975aa2d90a140d699e51f1b396030caa386dce 100644 --- a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployVersionMapper.xml +++ b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployVersionMapper.xml @@ -273,12 +273,12 @@ along with this program. If not, see .--> ( SELECT dv.id, dv.version, - cc.id AS envId, - cc.NAME AS envName + cga.id AS envId, + cga.value AS envName FROM deploy_version dv JOIN deploy_app_config_env dace ON dace.app_system_id = dv.app_system_id AND dace.app_module_id = dv.app_module_id - JOIN cmdb_cientity cc ON cc.id = dace.env_id + JOIN cmdb_global_attritem cga ON cga.id = dace.env_id WHERE dv.id IN #{id}