diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/env/DeleteDeployAppConfigInstanceApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/env/DeleteDeployAppConfigInstanceApi.java new file mode 100644 index 0000000000000000000000000000000000000000..70cd0b9d54aa65d402da85a854f7e6601f967829 --- /dev/null +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/env/DeleteDeployAppConfigInstanceApi.java @@ -0,0 +1,137 @@ +package neatlogic.module.deploy.api.appconfig.env; + +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.ICiEntityCrossoverService; +import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; +import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; +import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; +import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; +import neatlogic.framework.cmdb.enums.EditModeType; +import neatlogic.framework.cmdb.enums.TransactionActionType; +import neatlogic.framework.cmdb.exception.cientity.CiEntityNotFoundException; +import neatlogic.framework.cmdb.exception.resourcecenter.AppEnvNotFoundException; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.crossover.CrossoverServiceFactory; +import neatlogic.framework.deploy.auth.DEPLOY_BASE; +import neatlogic.framework.deploy.constvalue.DeployAppConfigAction; +import neatlogic.framework.restful.annotation.*; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.deploy.service.DeployAppAuthorityService; +import neatlogic.module.deploy.service.DeployAppConfigService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Service +@Transactional +@AuthAction(action = DEPLOY_BASE.class) +@OperationType(type = OperationTypeEnum.UPDATE) +public class DeleteDeployAppConfigInstanceApi extends PrivateApiComponentBase { + + @Resource + DeployAppConfigService deployAppConfigService; + + @Resource + DeployAppAuthorityService deployAppAuthorityService; + + @Override + public String getName() { + return "nmdaae.deletedeployappconfiginstanceapi.getname"; + } + + @Override + public String getConfig() { + return null; + } + + @Override + public String getToken() { + return "deploy/app/config/instance/delete"; + } + + @Input({ + @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "应用系统id"), + @Param(name = "appModuleId", type = ApiParamType.LONG, isRequired = true, desc = "应用模块id"), + @Param(name = "envId", type = ApiParamType.LONG, isRequired = true, desc = "环境id"), + @Param(name = "instanceIdList", type = ApiParamType.JSONARRAY, isRequired = true, minSize = 1, desc = "实例id列表") + }) + @Output({ + }) + @Description(desc = "nmdaae.deletedeployappconfiginstanceapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long appSystemId = paramObj.getLong("appSystemId"); + Long appModuleId = paramObj.getLong("appModuleId"); + Long envId = paramObj.getLong("envId"); + //校验环境权限、编辑配置的操作权限 + deployAppAuthorityService.checkEnvAuth(appSystemId, envId); + deployAppAuthorityService.checkOperationAuth(appSystemId, DeployAppConfigAction.EDIT); + + //校验应用系统id、应用模块id、环境id是否存在 + ICiEntityCrossoverMapper iCiEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); + IResourceCrossoverMapper iResourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + CiEntityVo appSystemCiEntity = iCiEntityCrossoverMapper.getCiEntityBaseInfoById(appSystemId); + if (appSystemCiEntity == null) { + throw new CiEntityNotFoundException(appSystemId); + } + if (iCiEntityCrossoverMapper.getCiEntityBaseInfoById(appModuleId) == null) { + throw new CiEntityNotFoundException(appModuleId); + } + ResourceVo env = iResourceCrossoverMapper.getAppEnvById(envId); + if (env == null) { + throw new AppEnvNotFoundException(envId); + } + + //需要解绑关系的实例 + JSONArray instanceIdArray = paramObj.getJSONArray("instanceIdList"); + if (CollectionUtils.isNotEmpty(instanceIdArray)) { + ICiEntityCrossoverService ciEntityService = CrossoverServiceFactory.getApi(ICiEntityCrossoverService.class); + ICiEntityCrossoverMapper ciEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); + List ciEntityTransactionList = new ArrayList<>(); + List instanceIdList = instanceIdArray.toJavaList(Long.class); + for (Long instanceId : instanceIdList) { + //获取实例的具体信息 + CiEntityVo instanceCiEntity = ciEntityCrossoverMapper.getCiEntityBaseInfoById(instanceId); + if (instanceCiEntity == null) { + throw new CiEntityNotFoundException(instanceId); + } + CiEntityVo ciEntityVo = ciEntityService.getCiEntityById(instanceCiEntity.getCiId(), instanceId); + + CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); + ciEntityTransactionVo.setCiEntityId(ciEntityVo.getId()); + ciEntityTransactionVo.setCiId(ciEntityVo.getCiId()); + ciEntityTransactionVo.setAllowCommit(true); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + ciEntityTransactionVo.setEditMode(EditModeType.GLOBAL.getValue()); + JSONObject attrEntityData = ciEntityVo.getAttrEntityData(); + if (MapUtils.isNotEmpty(attrEntityData)) { + ciEntityTransactionVo.setAttrEntityData(JSONObject.parseObject(attrEntityData.toJSONString())); + } + JSONObject relEntityData = ciEntityVo.getRelEntityData(); + if (MapUtils.isNotEmpty(relEntityData)) { + ciEntityTransactionVo.setRelEntityData(JSONObject.parseObject(relEntityData.toJSONString())); + } + JSONObject globalAttrEntityData = ciEntityVo.getGlobalAttrEntityData(); + if (MapUtils.isNotEmpty(globalAttrEntityData)) { + ciEntityTransactionVo.setGlobalAttrEntityData(JSONObject.parseObject(globalAttrEntityData.toJSONString())); + } + + //删除模块关系 + deployAppConfigService.deleteAttrEntityDataAndRelEntityData(ciEntityTransactionVo, paramObj, new ArrayList<>(), Collections.singletonList("APPComponent"), new ArrayList<>()); + ciEntityTransactionList.add(ciEntityTransactionVo); + } + ciEntityService.saveCiEntity(ciEntityTransactionList); + } + return null; + } +} diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/env/GetDeployAppConfigEnvInfoApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/env/GetDeployAppConfigEnvInfoApi.java index 32af5576104fd7b67f9fb38d4cbd1c0fd375ce96..0ed0eb49b3b3288bfbd90ec45cffa6e6e2d9ea8f 100644 --- a/src/main/java/neatlogic/module/deploy/api/appconfig/env/GetDeployAppConfigEnvInfoApi.java +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/env/GetDeployAppConfigEnvInfoApi.java @@ -21,6 +21,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.CollectionUtils; import neatlogic.framework.auth.core.AuthAction; import neatlogic.framework.cmdb.crossover.ICiEntityCrossoverMapper; +import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; import neatlogic.framework.common.constvalue.ApiParamType; @@ -44,10 +45,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -111,6 +109,15 @@ public class GetDeployAppConfigEnvInfoApi extends PrivateApiComponentBase { //获取实例autoConfig if (CollectionUtils.isNotEmpty(instanceIdList)) { List instanceList = deployResourceMapper.getAppInstanceResourceListByIdList(instanceIdList); + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + List resourceList = resourceCrossoverMapper.getResourceListByIdList(instanceIdList); + Map resourceMap = resourceList.stream().filter(Objects::nonNull).collect(Collectors.toMap(ResourceVo::getId, e -> e)); + for (ResourceVo instanceVo : instanceList) { + ResourceVo resourceVo = resourceMap.get(instanceVo.getId()); + if (resourceVo != null) { + instanceVo.setMaintenanceWindow(resourceVo.getMaintenanceWindow()); + } + } // 补充实例当前版本信息 List instanceVersionVoList = deployInstanceVersionMapper.getDeployInstanceVersionByEnvIdAndInstanceIdList(envAutoConfigVo.getAppSystemId(), envAutoConfigVo.getAppModuleId(), envAutoConfigVo.getEnvId(), instanceIdList); //补充蓝绿 diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigInstanceApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigInstanceApi.java index aef69da299955c91243b676ccc752f19a2be4105..dfe1cb5f138092db006a589a76fd6a340c126bae 100644 --- a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigInstanceApi.java +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SaveDeployAppConfigInstanceApi.java @@ -29,6 +29,7 @@ import neatlogic.module.deploy.service.DeployAppConfigService; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -73,7 +74,8 @@ public class SaveDeployAppConfigInstanceApi extends PrivateApiComponentBase { @Param(name = "appSystemId", type = ApiParamType.LONG, isRequired = true, desc = "应用系统id"), @Param(name = "appModuleId", type = ApiParamType.LONG, isRequired = true, desc = "应用模块id"), @Param(name = "envId", type = ApiParamType.LONG, isRequired = true, desc = "环境id"), - @Param(name = "instanceIdList", type = ApiParamType.JSONARRAY, desc = "实例id"), + @Param(name = "instanceIdList", type = ApiParamType.JSONARRAY, desc = "实例id列表"), + @Param(name = "id", type = ApiParamType.LONG, desc = "实例id"), @Param(name = "ciId", type = ApiParamType.LONG, desc = "模型id"), @Param(name = "ip", type = ApiParamType.STRING, desc = "ip"), @Param(name = "port", type = ApiParamType.INTEGER, desc = "端口"), @@ -84,37 +86,39 @@ public class SaveDeployAppConfigInstanceApi extends PrivateApiComponentBase { }) @Override public Object myDoService(JSONObject paramObj) throws Exception { - + Long appSystemId = paramObj.getLong("appSystemId"); + Long appModuleId = paramObj.getLong("appModuleId"); + Long envId = paramObj.getLong("envId"); //校验环境权限、编辑配置的操作权限 - deployAppAuthorityService.checkEnvAuth(paramObj.getLong("appSystemId"), paramObj.getLong("envId")); - deployAppAuthorityService.checkOperationAuth(paramObj.getLong("appSystemId"), DeployAppConfigAction.EDIT); + deployAppAuthorityService.checkEnvAuth(appSystemId, envId); + deployAppAuthorityService.checkOperationAuth(appSystemId, DeployAppConfigAction.EDIT); //校验应用系统id、应用模块id、环境id是否存在 ICiEntityCrossoverMapper iCiEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); IResourceCrossoverMapper iResourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); - CiEntityVo appSystemCiEntity = iCiEntityCrossoverMapper.getCiEntityBaseInfoById(paramObj.getLong("appSystemId")); + CiEntityVo appSystemCiEntity = iCiEntityCrossoverMapper.getCiEntityBaseInfoById(appSystemId); if (appSystemCiEntity == null) { - throw new CiEntityNotFoundException(paramObj.getLong("appSystemId")); + 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); } - ResourceVo env = iResourceCrossoverMapper.getAppEnvById(paramObj.getLong("envId")); + ResourceVo env = iResourceCrossoverMapper.getAppEnvById(envId); if (env == null) { - throw new AppEnvNotFoundException(paramObj.getLong("envId")); + throw new AppEnvNotFoundException(envId); } + ICiEntityCrossoverService ciEntityService = CrossoverServiceFactory.getApi(ICiEntityCrossoverService.class); + ICiEntityCrossoverMapper ciEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); //实例挂环境 JSONArray instanceIdArray = paramObj.getJSONArray("instanceIdList"); if (CollectionUtils.isNotEmpty(instanceIdArray)) { List instanceIdList = instanceIdArray.toJavaList(Long.class); for (Long instanceId : instanceIdList) { //获取实例的具体信息 - ICiEntityCrossoverMapper ciEntityCrossoverMapper = CrossoverServiceFactory.getApi(ICiEntityCrossoverMapper.class); CiEntityVo instanceCiEntity = ciEntityCrossoverMapper.getCiEntityBaseInfoById(instanceId); if (instanceCiEntity == null) { throw new CiEntityNotFoundException(instanceId); } - ICiEntityCrossoverService ciEntityService = CrossoverServiceFactory.getApi(ICiEntityCrossoverService.class); CiEntityVo instanceCiEntityInfo = ciEntityService.getCiEntityById(instanceCiEntity.getCiId(), instanceId); CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(instanceCiEntityInfo); @@ -124,7 +128,6 @@ public class SaveDeployAppConfigInstanceApi extends PrivateApiComponentBase { //添加环境属性、模块关系 deployAppConfigService.addAttrEntityDataAndRelEntityData(ciEntityTransactionVo, instanceCiEntity.getCiId(), paramObj, Collections.singletonList("app_environment"), Collections.singletonList("APPComponent"), Collections.singletonList("app_environment")); - //设置基础信息 ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); ciEntityTransactionVo.setEditMode(EditModeType.GLOBAL.getValue()); @@ -134,23 +137,65 @@ public class SaveDeployAppConfigInstanceApi extends PrivateApiComponentBase { ciEntityService.saveCiEntity(ciEntityTransactionList); } } else { - //新增实例到cmdb + Long ciId = paramObj.getLong("ciId"); ICiCrossoverMapper ciCrossoverMapper = CrossoverServiceFactory.getApi(ICiCrossoverMapper.class); - CiVo paramCiVo = ciCrossoverMapper.getCiById(paramObj.getLong("ciId")); + CiVo paramCiVo = ciCrossoverMapper.getCiById(ciId); if (paramCiVo == null) { - throw new CiNotFoundException(paramObj.getLong("ciId")); + throw new CiNotFoundException(ciId); } CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); - - //添加环境属性、模块关系 - deployAppConfigService.addAttrEntityDataAndRelEntityData(ciEntityTransactionVo, paramCiVo.getId(), paramObj, Arrays.asList("name", "ip", "port", "maintenance_window"), Collections.singletonList("APPComponent"), Collections.singletonList("app_environment")); + Long id = paramObj.getLong("id"); + if (id != null) { + //获取实例的具体信息 + CiEntityVo instanceCiEntity = ciEntityCrossoverMapper.getCiEntityBaseInfoById(id); + if (instanceCiEntity == null) { + throw new CiEntityNotFoundException(id); + } + CiEntityVo ciEntityVo = ciEntityService.getCiEntityById(instanceCiEntity.getCiId(), id); + ciEntityTransactionVo.setCiEntityId(ciEntityVo.getId()); + ciEntityTransactionVo.setCiId(ciEntityVo.getCiId()); + ciEntityTransactionVo.setAllowCommit(true); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + ciEntityTransactionVo.setEditMode(EditModeType.GLOBAL.getValue()); + JSONObject attrEntityData = ciEntityVo.getAttrEntityData(); + if (MapUtils.isNotEmpty(attrEntityData)) { + ciEntityTransactionVo.setAttrEntityData(JSONObject.parseObject(attrEntityData.toJSONString())); + } + JSONObject relEntityData = ciEntityVo.getRelEntityData(); + if (MapUtils.isNotEmpty(relEntityData)) { + ciEntityTransactionVo.setRelEntityData(JSONObject.parseObject(relEntityData.toJSONString())); + } + JSONObject globalAttrEntityData = ciEntityVo.getGlobalAttrEntityData(); + if (MapUtils.isNotEmpty(globalAttrEntityData)) { + ciEntityTransactionVo.setGlobalAttrEntityData(JSONObject.parseObject(globalAttrEntityData.toJSONString())); + } + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + //修改属性值 + deployAppConfigService.addAttrEntityDataAndRelEntityData( + ciEntityTransactionVo, + paramCiVo.getId(), + paramObj, + Arrays.asList("name", "ip", "port", "maintenance_window"), + new ArrayList<>(), + new ArrayList<>() + ); + } else { + ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); + //添加环境属性、模块关系 + deployAppConfigService.addAttrEntityDataAndRelEntityData( + ciEntityTransactionVo, + paramCiVo.getId(), + paramObj, + Arrays.asList("name", "ip", "port", "maintenance_window"), + Collections.singletonList("APPComponent"), + Collections.singletonList("app_environment") + ); + } ciEntityTransactionVo.setEditMode(EditModeType.PARTIAL.getValue()); - ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); List ciEntityTransactionList = new ArrayList<>(); ciEntityTransactionList.add(ciEntityTransactionVo); - ICiEntityCrossoverService ciEntityService = CrossoverServiceFactory.getApi(ICiEntityCrossoverService.class); ciEntityService.saveCiEntity(ciEntityTransactionList); } diff --git a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SearchDeployAppConfigInstanceApi.java b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SearchDeployAppConfigInstanceApi.java index b714526c16c8c6bfb2fda6a4a97ba87450bd35da..9d45264b1263c2c34e47035a301cf1119cc752a5 100644 --- a/src/main/java/neatlogic/module/deploy/api/appconfig/env/SearchDeployAppConfigInstanceApi.java +++ b/src/main/java/neatlogic/module/deploy/api/appconfig/env/SearchDeployAppConfigInstanceApi.java @@ -12,6 +12,7 @@ import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; import neatlogic.framework.util.TableResultUtil; import neatlogic.module.deploy.dao.mapper.DeployAppConfigMapper; import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -66,7 +67,10 @@ public class SearchDeployAppConfigInstanceApi extends PrivateApiComponentBase { int count = deployAppConfigMapper.getAppConfigEnvInstanceCount(searchVo); if (count > 0) { searchVo.setRowNum(count); - instanceList = deployAppConfigMapper.searchAppConfigEnvInstanceList(searchVo); + List instanceIdList = deployAppConfigMapper.searchAppConfigEnvInstanceIdList(searchVo); + if (CollectionUtils.isNotEmpty(instanceIdList)) { + instanceList = deployAppConfigMapper.searchAppConfigEnvInstanceListByIdList(instanceIdList); + } } return TableResultUtil.getResult(instanceList, searchVo); } diff --git a/src/main/java/neatlogic/module/deploy/api/bluegreen/BatchSaveInstanceBlueGreenApi.java b/src/main/java/neatlogic/module/deploy/api/bluegreen/BatchSaveInstanceBlueGreenApi.java new file mode 100644 index 0000000000000000000000000000000000000000..82707a88f60915b4b9b571f63b6f230a16c2246a --- /dev/null +++ b/src/main/java/neatlogic/module/deploy/api/bluegreen/BatchSaveInstanceBlueGreenApi.java @@ -0,0 +1,92 @@ +/* + * 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.deploy.api.bluegreen; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.auth.core.AuthAction; +import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.deploy.auth.DEPLOY_BASE; +import neatlogic.framework.deploy.dto.app.DeployInstanceBlueGreenVo; +import neatlogic.framework.restful.annotation.Description; +import neatlogic.framework.restful.annotation.Input; +import neatlogic.framework.restful.annotation.OperationType; +import neatlogic.framework.restful.annotation.Param; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; +import neatlogic.module.deploy.dao.mapper.DeployBlueGreenMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashSet; +import java.util.Set; + +@Service +@AuthAction(action = DEPLOY_BASE.class) +@OperationType(type = OperationTypeEnum.CREATE) +public class BatchSaveInstanceBlueGreenApi extends PrivateApiComponentBase { + + @Resource + DeployBlueGreenMapper deployBlueGreenMapper; + + @Override + public String getName() { + return "nmdab.batchsaveinstancebluegreenapi.getname"; + } + + @Override + public String getToken() { + return "deploy/app/instance/bluegreen/batchsave"; + } + + @Override + public String getConfig() { + return null; + } + + @Input({ + @Param(name = "appSystemId", type = ApiParamType.LONG, desc = "应用id", isRequired = true), + @Param(name = "appModuleId", type = ApiParamType.LONG, desc = "模块id", isRequired = true), + @Param(name = "envId", type = ApiParamType.LONG, desc = "环境id", isRequired = true), + @Param(name = "resourceIdList", type = ApiParamType.JSONARRAY, desc = "实例id列表", minSize = 1, isRequired = true), + @Param(name = "blueGreenId", type = ApiParamType.LONG, isRequired = true, desc = "蓝绿id") + }) + @Description(desc = "nmdab.batchsaveinstancebluegreenapi.getname") + @Override + public Object myDoService(JSONObject paramObj) throws Exception { + Long appSystemId = paramObj.getLong("appSystemId"); + Long appModuleId = paramObj.getLong("appModuleId"); + Long envId = paramObj.getLong("envId"); + Long blueGreenId = paramObj.getLong("blueGreenId"); + DeployInstanceBlueGreenVo instanceBlueGreenVo = new DeployInstanceBlueGreenVo(); + instanceBlueGreenVo.setAppSystemId(appSystemId); + instanceBlueGreenVo.setAppModuleId(appModuleId); + instanceBlueGreenVo.setEnvId(envId); + instanceBlueGreenVo.setBlueGreenId(blueGreenId); + Set resourceIdSet = new HashSet<>(); + JSONArray resourceIdList = paramObj.getJSONArray("resourceIdList"); + for (int i = 0; i < resourceIdList.size(); i++) { + Long resourceId = resourceIdList.getLong(i); + if (resourceId != null && !resourceIdSet.contains(resourceId)) { + instanceBlueGreenVo.setResourceId(resourceId); + deployBlueGreenMapper.insertInstanceBlueGreen(instanceBlueGreenVo); + resourceIdSet.add(resourceId); + } + } + return null; + } +} 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 d187f49d2a09b7ce9c03116735a07e8ef7005d17..009434563a2b3357e0f0cdde4c603135d55b2671 100644 --- a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java +++ b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.java @@ -67,7 +67,17 @@ public interface DeployAppConfigMapper extends IDeployAppConfigCrossoverMapper { DeployAppConfigVo getAppConfigDraft(DeployAppConfigVo deployAppConfigDraftVo); - List searchAppConfigEnvInstanceList(DeployAppConfigInstanceVo searchVo); + /** + * 查询发布应用配置的应用实例下的无模块无环境、无模块同环境、同模块无环境的实例个数 + * + * @param searchVo searchVo + * @return count + */ + int getAppConfigEnvInstanceCount(DeployAppConfigInstanceVo searchVo); + + List searchAppConfigEnvInstanceIdList(DeployAppConfigInstanceVo searchVo); + + List searchAppConfigEnvInstanceListByIdList(List idList); List getDeployAppEnvListByAppSystemIdAndModuleIdList(@Param("appSystemId") Long appSystemId, @Param("appModuleIdList") List appModuleIdList); @@ -196,14 +206,6 @@ public interface DeployAppConfigMapper extends IDeployAppConfigCrossoverMapper { int getAppModuleEnvAutoConfigInstanceIdCount(DeployAppEnvAutoConfigVo searchVo); - /** - * 查询发布应用配置的应用实例下的无模块无环境、无模块同环境、同模块无环境的实例个数 - * - * @param searchVo searchVo - * @return count - */ - int getAppConfigEnvInstanceCount(DeployAppConfigInstanceVo searchVo); - int checkDeployAppConfigEnvDBSchemaIsRepeat(DeployAppConfigEnvDBConfigVo configVo); // int getAppModuleCountBySystemIdAndEnvId(@Param("appSystemId") Long appSystemId, @Param("envId") Long envId); 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 ee01bf36d8016eb061290986a38b218b9df62a03..3a0111e4452ab1c3128c47979c4e54077635e9cd 100644 --- a/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml +++ b/src/main/java/neatlogic/module/deploy/dao/mapper/DeployAppConfigMapper.xml @@ -904,19 +904,32 @@ along with this program. If not, see .--> - + +