diff --git a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CiViewRebuildHandler.java b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CiViewRebuildHandler.java index b99c67fd152721ca6c466d8dc2f8eb1bdab8d356..e34a1e8adaf199ff35fdc3e200f940241faaf4b3 100644 --- a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CiViewRebuildHandler.java +++ b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CiViewRebuildHandler.java @@ -15,8 +15,10 @@ along with this program. If not, see .*/ package neatlogic.module.cmdb.rebuilddatabaseview.handler; +import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.cmdb.dto.ci.CiVo; import neatlogic.framework.common.dto.BasePageVo; +import neatlogic.framework.dao.mapper.SchemaMapper; import neatlogic.framework.rebuilddatabaseview.core.IRebuildDataBaseView; import neatlogic.framework.rebuilddatabaseview.core.ViewStatusInfo; import neatlogic.module.cmdb.dao.mapper.ci.CiMapper; @@ -26,6 +28,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Component public class CiViewRebuildHandler implements IRebuildDataBaseView { @@ -36,39 +39,77 @@ public class CiViewRebuildHandler implements IRebuildDataBaseView { @Resource private CiService ciService; + @Resource + private SchemaMapper schemaMapper; + @Override public String getDescription() { return "重建配置项中虚拟模型视图"; } @Override - public List execute() { + public List createViewIfNotExists() { List resultList = new ArrayList<>(); int rowNum = ciMapper.getVirtualCiCount(); - if (rowNum == 0) { - return resultList; + if (rowNum > 0) { + BasePageVo searchVo = new BasePageVo(); + searchVo.setRowNum(rowNum); + searchVo.setPageSize(100); + int pageCount = searchVo.getPageCount(); + for (int currentPage = 1; currentPage <= pageCount; currentPage++) { + searchVo.setCurrentPage(currentPage); + List ciList = ciMapper.getVirtualCiList(searchVo); + for (CiVo ciVo : ciList) { + String tableType = schemaMapper.checkTableOrViewIsExists(TenantContext.get().getDataDbName(), "cmdb_" + ciVo.getId()); + if (Objects.equals(tableType, "VIEW")) { + continue; + } + ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); + viewStatusInfo.setName("cmdb_" + ciVo.getId()); + viewStatusInfo.setLabel(ciVo.getLabel() + "(" + ciVo.getName() + ")"); + String viewXml = ciMapper.getCiViewXmlById(ciVo.getId()); + ciVo.setViewXml(viewXml); + try { + ciService.buildCiView(ciVo); + viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); + } catch (Exception e) { + viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); + viewStatusInfo.setError(e.getMessage()); + } + resultList.add(viewStatusInfo); + } + } } - BasePageVo searchVo = new BasePageVo(); - searchVo.setRowNum(rowNum); - searchVo.setPageSize(100); - int pageCount = searchVo.getPageCount(); - for (int currentPage = 1; currentPage <= pageCount; currentPage++) { - searchVo.setCurrentPage(currentPage); - List ciList = ciMapper.getVirtualCiList(searchVo); - for (CiVo ciVo : ciList) { - ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); - viewStatusInfo.setName("cmdb_" + ciVo.getId()); - viewStatusInfo.setLabel(ciVo.getLabel() + "(" + ciVo.getName() + ")"); - String viewXml = ciMapper.getCiViewXmlById(ciVo.getId()); - ciVo.setViewXml(viewXml); - try { - ciService.buildCiView(ciVo); - viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); - } catch (Exception e) { - viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); - viewStatusInfo.setError(e.getMessage()); + return resultList; + } + + @Override + public List createOrReplaceView() { + List resultList = new ArrayList<>(); + int rowNum = ciMapper.getVirtualCiCount(); + if (rowNum > 0) { + BasePageVo searchVo = new BasePageVo(); + searchVo.setRowNum(rowNum); + searchVo.setPageSize(100); + int pageCount = searchVo.getPageCount(); + for (int currentPage = 1; currentPage <= pageCount; currentPage++) { + searchVo.setCurrentPage(currentPage); + List ciList = ciMapper.getVirtualCiList(searchVo); + for (CiVo ciVo : ciList) { + ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); + viewStatusInfo.setName("cmdb_" + ciVo.getId()); + viewStatusInfo.setLabel(ciVo.getLabel() + "(" + ciVo.getName() + ")"); + String viewXml = ciMapper.getCiViewXmlById(ciVo.getId()); + ciVo.setViewXml(viewXml); + try { + ciService.buildCiView(ciVo); + viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); + } catch (Exception e) { + viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); + viewStatusInfo.setError(e.getMessage()); + } + resultList.add(viewStatusInfo); } - resultList.add(viewStatusInfo); } } return resultList; diff --git a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CustomViewRebuildHandler.java b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CustomViewRebuildHandler.java index ddf5f233cc1aafa2af1bf65d0951cd16d2f0177d..281c761cea9a511aaf3b4487603da2678fd0a9cc 100644 --- a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CustomViewRebuildHandler.java +++ b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/CustomViewRebuildHandler.java @@ -15,7 +15,9 @@ along with this program. If not, see .*/ package neatlogic.module.cmdb.rebuilddatabaseview.handler; +import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.cmdb.dto.customview.CustomViewVo; +import neatlogic.framework.dao.mapper.SchemaMapper; import neatlogic.framework.rebuilddatabaseview.core.IRebuildDataBaseView; import neatlogic.framework.rebuilddatabaseview.core.ViewStatusInfo; import neatlogic.module.cmdb.dao.mapper.customview.CustomViewMapper; @@ -26,6 +28,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Component public class CustomViewRebuildHandler implements IRebuildDataBaseView { @@ -36,13 +39,43 @@ public class CustomViewRebuildHandler implements IRebuildDataBaseView { @Resource private CustomViewService customViewService; + @Resource + private SchemaMapper schemaMapper; + @Override public String getDescription() { return "重建配置管理中自定义视图的视图"; } @Override - public List execute() { + public List createViewIfNotExists() { + List resultList = new ArrayList<>(); + List idList = customViewMapper.getAllIdList(); + for (Long id : idList) { + String tableType = schemaMapper.checkTableOrViewIsExists(TenantContext.get().getDataDbName(), "customview_" + id); + if (Objects.equals(tableType, "VIEW")) { + continue; + } + CustomViewVo customViewVo = customViewMapper.getCustomViewById(id); + customViewService.parseConfig(customViewVo); + ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); + viewStatusInfo.setName("customview_" + id); + viewStatusInfo.setLabel(customViewVo.getName()); + try { + CustomViewBuilder builder = new CustomViewBuilder(customViewVo); + builder.buildView(); + viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); + } catch (Exception e) { + viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); + viewStatusInfo.setError(e.getMessage()); + } + resultList.add(viewStatusInfo); + } + return resultList; + } + + @Override + public List createOrReplaceView() { List resultList = new ArrayList<>(); List idList = customViewMapper.getAllIdList(); for (Long id : idList) { diff --git a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/ResourceViewRebuildHandler.java b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/ResourceViewRebuildHandler.java index ea63a0e2f49c2cdf6d7fdaf0a9e3a4af3e4cdf1f..aa449a5b82113c671fdda2c7bce7670af259b098 100644 --- a/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/ResourceViewRebuildHandler.java +++ b/src/main/java/neatlogic/module/cmdb/rebuilddatabaseview/handler/ResourceViewRebuildHandler.java @@ -15,11 +15,17 @@ along with this program. If not, see .*/ package neatlogic.module.cmdb.rebuilddatabaseview.handler; +import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.cmdb.dto.resourcecenter.config.ResourceEntityVo; +import neatlogic.framework.cmdb.dto.resourcecenter.config.SceneEntityVo; import neatlogic.framework.cmdb.enums.resourcecenter.Status; +import neatlogic.framework.cmdb.resourcecenter.sceneview.core.SceneViewDefinitionFactory; +import neatlogic.framework.dao.mapper.SchemaMapper; import neatlogic.framework.rebuilddatabaseview.core.IRebuildDataBaseView; import neatlogic.framework.rebuilddatabaseview.core.ViewStatusInfo; +import neatlogic.module.cmdb.dao.mapper.resourcecenter.ResourceEntityMapper; import neatlogic.module.cmdb.service.resourcecenter.resource.IResourceCenterResourceService; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -33,30 +39,73 @@ public class ResourceViewRebuildHandler implements IRebuildDataBaseView { @Resource private IResourceCenterResourceService resourceCenterResourceService; + @Resource + private ResourceEntityMapper resourceEntityMapper; + + @Resource + private SchemaMapper schemaMapper; + @Override public String getDescription() { return "重建资源中心视图"; } @Override - public List execute() { + public List createViewIfNotExists() { List resultList = new ArrayList<>(); - List resourceEntityList = resourceCenterResourceService.rebuildResourceEntity(); - for (ResourceEntityVo resourceEntityVo : resourceEntityList) { - ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); - viewStatusInfo.setName(resourceEntityVo.getName()); - viewStatusInfo.setLabel(resourceEntityVo.getLabel()); - viewStatusInfo.setError(resourceEntityVo.getError()); - if (Objects.equals(resourceEntityVo.getStatus(), Status.ERROR.getValue())) { - viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); - } else { - viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); + List sceneEntityList = SceneViewDefinitionFactory.getSceneEntityList(); + for (SceneEntityVo sceneEntityVo : sceneEntityList) { + String tableType = schemaMapper.checkTableOrViewIsExists(TenantContext.get().getDataDbName(), sceneEntityVo.getName()); + if (Objects.equals(tableType, "VIEW")) { + continue; } + ViewStatusInfo viewStatusInfo = rebuildSceneEntity(sceneEntityVo); + resultList.add(viewStatusInfo); + } + return resultList; + } + + @Override + public List createOrReplaceView() { + List resultList = new ArrayList<>(); + List sceneEntityList = SceneViewDefinitionFactory.getSceneEntityList(); + for (SceneEntityVo sceneEntityVo : sceneEntityList) { + ViewStatusInfo viewStatusInfo = rebuildSceneEntity(sceneEntityVo); resultList.add(viewStatusInfo); } return resultList; } + private ViewStatusInfo rebuildSceneEntity(SceneEntityVo sceneEntityVo) { + ResourceEntityVo resourceEntityVo = new ResourceEntityVo(); + resourceEntityVo.setName(sceneEntityVo.getName()); + resourceEntityVo.setLabel(sceneEntityVo.getLabel()); + String config = resourceEntityMapper.getResourceEntityConfigByName(resourceEntityVo.getName()); + if (StringUtils.isNotBlank(config)) { + resourceEntityVo.setConfigStr(config); + String error = resourceCenterResourceService.buildResourceView(resourceEntityVo.getName(), resourceEntityVo.getConfig()); + resourceEntityVo.setError(error); + if (StringUtils.isNotBlank(error)) { + resourceEntityVo.setStatus(Status.ERROR.getValue()); + } else { + resourceEntityVo.setStatus(Status.READY.getValue()); + } + resourceEntityMapper.updateResourceEntityStatusAndError(resourceEntityVo); + } else { + resourceEntityVo.setStatus(Status.PENDING.getValue()); + } + ViewStatusInfo viewStatusInfo = new ViewStatusInfo(); + viewStatusInfo.setName(resourceEntityVo.getName()); + viewStatusInfo.setLabel(resourceEntityVo.getLabel()); + viewStatusInfo.setError(resourceEntityVo.getError()); + if (Objects.equals(resourceEntityVo.getStatus(), Status.ERROR.getValue())) { + viewStatusInfo.setStatus(ViewStatusInfo.Status.FAILURE.toString()); + } else { + viewStatusInfo.setStatus(ViewStatusInfo.Status.SUCCESS.toString()); + } + return viewStatusInfo; + } + @Override public int getSort() { return 4; diff --git a/src/main/java/neatlogic/module/cmdb/startup/handler/CreateResourceViewStartupHandler.java b/src/main/java/neatlogic/module/cmdb/startup/handler/CreateResourceViewStartupHandler.java deleted file mode 100644 index e2f2e3851cf7ac00ae4d58582a1b305c20d66094..0000000000000000000000000000000000000000 --- a/src/main/java/neatlogic/module/cmdb/startup/handler/CreateResourceViewStartupHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -/*Copyright (C) $today.year 深圳极向量科技有限公司 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.cmdb.startup.handler; - -import neatlogic.framework.rebuilddatabaseview.core.RebuildDataBaseViewManager; -import neatlogic.framework.tenantinit.TenantInitBase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -/** - * @author linbq - * @since 2022/2/9 12:12 - **/ -@Component -public class CreateResourceViewStartupHandler extends TenantInitBase { - private final Logger logger = LoggerFactory.getLogger(CreateResourceViewStartupHandler.class); - - /** - * 作业名称 - * - * @return 字符串 - */ - @Override - public String getName() { - return "创建资源中心视图"; - } - - /** - * 每个租户分别执行 - */ - @Override - public void execute() { - RebuildDataBaseViewManager.execute(); - } - - /** - * 排序 - * - * @return 顺序 - */ - @Override - public int sort() { - return 4; - } -}