diff --git a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/IResourceCenterResourceService.java b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/IResourceCenterResourceService.java index b507a314ce5754e0722c2f92f482f2485c867258..828086675eb87e254cb0bb2d9e15b15c5af75cfa 100644 --- a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/IResourceCenterResourceService.java +++ b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/IResourceCenterResourceService.java @@ -108,11 +108,32 @@ public interface IResourceCenterResourceService extends IResourceCenterResourceC */ String buildResourceView(ResourceEntityVo resourceEntityVo); + /** + * 生成SQL等效于{@link neatlogic.module.cmdb.dao.mapper.resourcecenter.ResourceMapper#getResourceIdList(neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo)} + * @param searchVo + * @return + */ String buildGetResourceIdListSql(ResourceSearchVo searchVo); + /** + * 生成SQL等效于{@link neatlogic.module.cmdb.dao.mapper.resourcecenter.ResourceMapper#getResourceCount(neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo)} + * @param searchVo + * @return + */ String buildGetResourceCountSql(ResourceSearchVo searchVo); + /** + * 生成SQL等效于{@link neatlogic.module.cmdb.dao.mapper.resourcecenter.ResourceMapper#getResourceListByIdList(java.util.List)} + * @param idList + * @param selectFieldNameList + * @return + */ String buildGetResourceListSql(List idList, List selectFieldNameList); + /** + * 生成SQL等效于{@link neatlogic.module.cmdb.dao.mapper.resourcecenter.ResourceMapper#getResourceListByIdList(java.util.List)} + * @param idList + * @return + */ String buildGetResourceListSql(List idList); } diff --git a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceCenterResourceServiceImpl.java b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceCenterResourceServiceImpl.java index 37dc4f16db9465c6e0b3bc225f0f4a35c608aca2..d0c5783e2ef442df31e700adfb68929c9a65163d 100644 --- a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceCenterResourceServiceImpl.java +++ b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceCenterResourceServiceImpl.java @@ -603,23 +603,10 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc @Override public String buildResourceView(ResourceEntityVo resourceEntityVo) { String viewName = resourceEntityVo.getName(); - ResourceEntityConfigVo originalConfig = resourceEntityVo.getConfig(); String select = null; String error = StringUtils.EMPTY; try { - List relLinkList = getRelLinkListByRelNode(originalConfig.getRelNode()); - originalConfig.setRelLinkList(relLinkList); - List leftJoinList = getLeftJoinList(originalConfig); - List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(viewName); - if (CollectionUtils.isEmpty(fieldNameList)) { - String sceneTemplateName = originalConfig.getSceneTemplateName(); - if (StringUtils.isNotBlank(sceneTemplateName)) { - fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(sceneTemplateName); - } - } - ResourceEntityConfigVo config = fieldMappingCheckValidityAndFillIdData(viewName, fieldNameList, originalConfig); - config.setLeftJoinList(leftJoinList); - config.setSelectItemFieldNameList(new ArrayList<>(fieldNameList)); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); if (Objects.equals(DatasourceManager.getDatabaseId(), DatabaseVendor.TIDB.getDatabaseId())) { ResourceViewGenerateSqlUtilForTiDB resourceViewGenerateSqlUtilForTiDB = new ResourceViewGenerateSqlUtilForTiDB(config); select = resourceViewGenerateSqlUtilForTiDB.getSql().toString(); @@ -696,28 +683,15 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc @Override public String buildGetResourceIdListSql(ResourceSearchVo searchVo) { - ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); - String viewName = resourceEntityVo.getName(); - ResourceEntityConfigVo originalConfig = resourceEntityVo.getConfig(); - PlainSelect plainSelect = null; try { - List relLinkList = getRelLinkListByRelNode(originalConfig.getRelNode()); - originalConfig.setRelLinkList(relLinkList); - List leftJoinList = getLeftJoinList(originalConfig); - List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(viewName); - if (CollectionUtils.isEmpty(fieldNameList)) { - String sceneTemplateName = originalConfig.getSceneTemplateName(); - if (StringUtils.isNotBlank(sceneTemplateName)) { - fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(sceneTemplateName); - } - } + PlainSelect plainSelect = null; + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); ResourceQueryCriteriaVo queryCriteriaVo = new ResourceQueryCriteriaVo(searchVo); List selectItemFieldNameList = new ArrayList<>(); selectItemFieldNameList.add("id"); List filterItemFieldNameList = getFilterItemFieldNameList(queryCriteriaVo); filterItemFieldNameList.add("id"); - ResourceEntityConfigVo config = fieldMappingCheckValidityAndFillIdData(viewName, fieldNameList, originalConfig); - config.setLeftJoinList(leftJoinList); config.setSelectItemFieldNameList(selectItemFieldNameList); config.setFilterItemFieldNameList(filterItemFieldNameList); Map filterItemFieldName2ColumnMap = new HashMap<>(); @@ -737,10 +711,8 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc countFunction.withName("COUNT"); countFunction.withDistinct(true); countFunction.setParameters(new ExpressionList().addExpressions(new Column("fw.word"))); - SelectExpressionItem countDistinctItem = new SelectExpressionItem(countFunction).withAlias(new Alias("match_count")); - plainSelect.addSelectItems(countDistinctItem); // 排序 - OrderByElement orderByMatchCount = new OrderByElement().withExpression(new Column("match_count")).withAsc(false); + OrderByElement orderByMatchCount = new OrderByElement().withExpression(countFunction).withAsc(false); plainSelect.addOrderByElements(orderByMatchCount); } // 分组 @@ -750,37 +722,24 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.addOrderByElements(orderById); plainSelect.setLimit(new Limit().withOffset(new LongValue(searchVo.getStartNum())).withRowCount(new LongValue(searchVo.getPageSize()))); + return plainSelect.toString(); } catch (Exception e) { logger.error(e.getMessage(), e); } - - return plainSelect.toString(); + return null; } @Override public String buildGetResourceCountSql(ResourceSearchVo searchVo) { try { - ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); - String viewName = resourceEntityVo.getName(); - ResourceEntityConfigVo originalConfig = resourceEntityVo.getConfig(); PlainSelect plainSelect = null; - List relLinkList = getRelLinkListByRelNode(originalConfig.getRelNode()); - originalConfig.setRelLinkList(relLinkList); - List leftJoinList = getLeftJoinList(originalConfig); - List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(viewName); - if (CollectionUtils.isEmpty(fieldNameList)) { - String sceneTemplateName = originalConfig.getSceneTemplateName(); - if (StringUtils.isNotBlank(sceneTemplateName)) { - fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(sceneTemplateName); - } - } + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); ResourceQueryCriteriaVo queryCriteriaVo = new ResourceQueryCriteriaVo(searchVo); List selectItemFieldNameList = new ArrayList<>(); selectItemFieldNameList.add("id"); List filterItemFieldNameList = getFilterItemFieldNameList(queryCriteriaVo); filterItemFieldNameList.add("id"); - ResourceEntityConfigVo config = fieldMappingCheckValidityAndFillIdData(viewName, fieldNameList, originalConfig); - config.setLeftJoinList(leftJoinList); config.setSelectItemFieldNameList(selectItemFieldNameList); config.setFilterItemFieldNameList(filterItemFieldNameList); Map filterItemFieldName2ColumnMap = new HashMap<>(); @@ -811,20 +770,9 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc @Override public String buildGetResourceListSql(List idList, List selectFieldNameList) { try { - ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); - String viewName = resourceEntityVo.getName(); - ResourceEntityConfigVo originalConfig = resourceEntityVo.getConfig(); PlainSelect plainSelect = null; - List relLinkList = getRelLinkListByRelNode(originalConfig.getRelNode()); - originalConfig.setRelLinkList(relLinkList); - List leftJoinList = getLeftJoinList(originalConfig); - List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(viewName); - if (CollectionUtils.isEmpty(fieldNameList)) { - String sceneTemplateName = originalConfig.getSceneTemplateName(); - if (StringUtils.isNotBlank(sceneTemplateName)) { - fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(sceneTemplateName); - } - } + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_ipobject_detail"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); List selectItemFieldNameList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(selectFieldNameList)) { selectItemFieldNameList.addAll(selectFieldNameList); @@ -833,8 +781,6 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc if (CollectionUtils.isNotEmpty(idList)) { filterItemFieldNameList.add("id"); } - ResourceEntityConfigVo config = fieldMappingCheckValidityAndFillIdData(viewName, fieldNameList, originalConfig); - config.setLeftJoinList(leftJoinList); config.setSelectItemFieldNameList(selectItemFieldNameList); config.setFilterItemFieldNameList(filterItemFieldNameList); Map filterItemFieldName2ColumnMap = new HashMap<>(); @@ -882,6 +828,24 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc return buildGetResourceListSql(idList, fieldNameList); } + private ResourceEntityConfigVo getResourceEntityConfigVo(ResourceEntityVo resourceEntityVo) { + String viewName = resourceEntityVo.getName(); + ResourceEntityConfigVo originalConfig = resourceEntityVo.getConfig(); + List relLinkList = getRelLinkListByRelNode(originalConfig.getRelNode()); + originalConfig.setRelLinkList(relLinkList); + List leftJoinList = getLeftJoinList(originalConfig); + List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(viewName); + if (CollectionUtils.isEmpty(fieldNameList)) { + String sceneTemplateName = originalConfig.getSceneTemplateName(); + if (StringUtils.isNotBlank(sceneTemplateName)) { + fieldNameList = ResourceEntityFactory.getFieldNameListByViewName(sceneTemplateName); + } + } + ResourceEntityConfigVo config = fieldMappingCheckValidityAndFillIdData(viewName, fieldNameList, originalConfig); + config.setLeftJoinList(leftJoinList); + config.setSelectItemFieldNameList(new ArrayList<>(fieldNameList)); + return config; + } /** * 对字段映射配置信息进行有效性检查及填充缺省数据 * @@ -1351,6 +1315,17 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc * @return */ private PlainSelect supplementBusinessLogicByResourceSearchVo(ResourceQueryCriteriaVo queryCriteriaVo, PlainSelect plainSelect, Map filterItemFieldName2ColumnMap) { + /* + + JOIN fulltextindex_field_cmdb ffc ON ffc.target_id = a.id AND ffc.target_field IN (#{nameFieldAttrId}, #{ipFieldAttrId}) + JOIN fulltextindex_word fw ON ffc.word_id = fw.id + AND (fw.word IN + + #{item} + + ) + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getKeywordList()) && (queryCriteriaVo.getNameFieldAttrId() != null || queryCriteriaVo.getIpFieldAttrId() != null)) { Table ffcTable = new Table("fulltextindex_field_cmdb").withAlias(new Alias("ffc").withUseAs(false)); { @@ -1378,6 +1353,25 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.addJoins(join); } } + /* + + JOIN fulltextindex_field_cmdb ffc2 ON ffc2.target_id = a.id + + + AND ffc2.target_field = #{nameFieldAttrId} + + + AND ffc2.target_field = #{ipFieldAttrId} + + + JOIN fulltextindex_word fw2 ON ffc2.word_id = fw2.id + AND (fw2.word IN + + #{item} + + ) + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getBatchSearchList()) && StringUtils.isNotBlank(queryCriteriaVo.getSearchField())) { Table ffc2Table = new Table("fulltextindex_field_cmdb").withAlias(new Alias("ffc2").withUseAs(false)); { @@ -1404,6 +1398,19 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.addJoins(join); } } + /* + + LEFT JOIN `cmdb_resourcecenter_resource_account` b ON b.`resource_id` = a.`id` + LEFT JOIN `cmdb_resourcecenter_account` c ON c.`id` = b.`account_id` + + + + AND c.`protocol_id` IN + + #{protocolId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getProtocolIdList())) { Table bTable = new Table("cmdb_resourcecenter_resource_account").withAlias(new Alias("b").withUseAs(false)); { @@ -1430,6 +1437,18 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + LEFT JOIN `cmdb_resourcecenter_resource_tag` d ON d.`resource_id` = a.`id` + + + + AND d.`tag_id` IN + + #{tagId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getTagIdList())) { Table dTable = new Table("cmdb_resourcecenter_resource_tag").withAlias(new Alias("d").withUseAs(false)); { @@ -1450,6 +1469,19 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + left join autoexec_job_resource_inspect ajri on ajri.resource_id=a.id + left join autoexec_job_phase_node ajpn on ajpn.job_phase_id =ajri.phase_id AND ajpn.resource_id = a.id + + + + AND a.`inspect_status` IN + + #{inspectStatus} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getInspectJobPhaseNodeStatusList())) { Table ajriTable = new Table("autoexec_job_resource_inspect").withAlias(new Alias("ajri").withUseAs(false)); { @@ -1477,6 +1509,20 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + LEFT JOIN cmdb_cientity_group ccg ON ccg.cientity_id = a.id + LEFT JOIN cmdb_group_auth cga ON ccg.group_id = cga.group_id + + + LEFT JOIN cmdb_group cg ON cga.group_id = cg.id AND cg.type in ('autoexec') + + + LEFT JOIN cmdb_group cg ON cga.group_id = cg.id AND cg.type in ('readonly','maintain','autoexec') + + + + */ if (Objects.equals(queryCriteriaVo.getIsHasAuth(), false)) { Table ccgTable = new Table("cmdb_cientity_group").withAlias(new Alias("ccg").withUseAs(false)); { @@ -1506,6 +1552,56 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.addJoins(join); } } + /* + + + AND a.`type_id` IN + + #{typeId} + + + + AND ( + + + a.`type_id` IN + + #{authedTypeId} + + + + 1 = 0 + + + or ( + cg.id is not null and + a.`type_id` IN + + #{typeId} + + and + ((cga.auth_type = 'common' AND cga.auth_uuid = 'alluser') + + OR cga.auth_uuid IN ( + #{authenticationInfo.userUuid} + + + #{item} + + + + + #{item} + + + ) + + ) + ) + ) + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getTypeIdList())) { if (Objects.equals(queryCriteriaVo.getIsHasAuth(), true)) { Column column = filterItemFieldName2ColumnMap.get("type_id"); @@ -1533,7 +1629,7 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc orLeftExpression = new EqualsTo(new LongValue(1), new LongValue(0)); } Expression orRightExpression = null; - IsNullExpression IsNullExpression = new IsNullExpression().withLeftExpression(new Column("cg.id")).withUseIsNull(false); + IsNullExpression IsNullExpression = new IsNullExpression().withLeftExpression(new Column("cg.id")).withNot(true); Column column = filterItemFieldName2ColumnMap.get("type_id"); ExpressionList values = new ExpressionList(); for (Long typeId : queryCriteriaVo.getTypeIdList()) { @@ -1542,6 +1638,7 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc InExpression inExpression = new InExpression(column, values); orRightExpression = new AndExpression(IsNullExpression, inExpression); Expression orLeftExpression2 = new AndExpression(new EqualsTo(new Column("cga.auth_type"), new StringValue("common")), new EqualsTo(new Column("cga.auth_uuid"), new StringValue("alluser"))); + orLeftExpression2 = new Parenthesis(orLeftExpression2); Expression orRightExpression2 = null; if (queryCriteriaVo.getAuthenticationInfo() != null) { List uuidList = new ArrayList<>(); @@ -1564,19 +1661,27 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc } } if (orRightExpression2 != null) { - orRightExpression = new AndExpression(orRightExpression, new OrExpression(orLeftExpression2, orRightExpression2)); + orRightExpression = new AndExpression(orRightExpression, new Parenthesis(new OrExpression(orLeftExpression2, orRightExpression2))); } else { orRightExpression = new AndExpression(orRightExpression, orLeftExpression2); } OrExpression orExpression = new OrExpression(orLeftExpression, orRightExpression); Expression where = plainSelect.getWhere(); if (where != null) { - plainSelect.setWhere(new AndExpression(where, orExpression)); + plainSelect.setWhere(new AndExpression(where, new Parenthesis(orExpression))); } else { plainSelect.setWhere(orExpression); } } } + /* + + AND a.`state_id` IN + + #{stateId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getStateIdList())) { Column column = filterItemFieldName2ColumnMap.get("state_id"); ExpressionList values = new ExpressionList(); @@ -1591,6 +1696,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`vendor_id` IN + + #{vendorId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getVendorIdList())) { Column column = filterItemFieldName2ColumnMap.get("vendor_id"); ExpressionList values = new ExpressionList(); @@ -1605,6 +1718,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`env_id` IN + + #{envId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getEnvIdList())) { Column column = filterItemFieldName2ColumnMap.get("env_id"); ExpressionList values = new ExpressionList(); @@ -1619,6 +1740,11 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`env_id` is null + + */ if (Objects.equals(queryCriteriaVo.getExistNoEnv(), true)) { Column column = filterItemFieldName2ColumnMap.get("env_id"); @@ -1631,6 +1757,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(isNullExpression); } } + /* + + AND a.`app_system_id` IN + + #{appSystemId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getAppSystemIdList())) { Column column = filterItemFieldName2ColumnMap.get("app_system_id"); ExpressionList values = new ExpressionList(); @@ -1645,6 +1779,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`app_module_id` IN + + #{appModuleId} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getAppModuleIdList())) { Column column = filterItemFieldName2ColumnMap.get("app_module_id"); ExpressionList values = new ExpressionList(); @@ -1659,6 +1801,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`id` IN + + #{id} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getDefaultValue())) { Column column = filterItemFieldName2ColumnMap.get("id"); ExpressionList values = new ExpressionList(); @@ -1675,6 +1825,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`id` IN + + #{id} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getIdList())) { Column column = filterItemFieldName2ColumnMap.get("id"); ExpressionList values = new ExpressionList(); @@ -1689,6 +1847,14 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc plainSelect.setWhere(inExpression); } } + /* + + AND a.`inspect_status` IN + + #{inspectStatus} + + + */ if (CollectionUtils.isNotEmpty(queryCriteriaVo.getInspectStatusList())) { Column column = filterItemFieldName2ColumnMap.get("inspect_status"); ExpressionList values = new ExpressionList();