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 86e49964d2b09c50e416f3864081d4617c652b1d..ab966f4418e67ee32519a0d77fe34c9e3cdeed3f 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 @@ -18,6 +18,7 @@ package neatlogic.module.cmdb.service.resourcecenter.resource; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.cmdb.dto.resourcecenter.*; import neatlogic.framework.cmdb.dto.tag.TagVo; +import neatlogic.framework.common.dto.BasePageVo; import java.util.List; import java.util.Map; @@ -163,4 +164,10 @@ public interface IResourceCenterResourceService { List getAppSystemIdListById(String viewName, Long id); + int searchVendorCount(BasePageVo searchVo); + + List searchVendorIdList(BasePageVo searchVo); + + List searchVendorListByIdList(List idList); + } diff --git a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlService.java b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlService.java index 82f06344e57772579b536f4988fd5fc284a745a4..7d64fe2aba16022e58841100db5f10a5a98852d8 100644 --- a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlService.java +++ b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlService.java @@ -21,6 +21,7 @@ import neatlogic.framework.cmdb.dto.resourcecenter.AccountComponentVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; import neatlogic.framework.cmdb.dto.resourcecenter.ResourceVo; import neatlogic.framework.cmdb.dto.resourcecenter.config.ResourceEntityVo; +import neatlogic.framework.common.dto.BasePageVo; import java.util.List; @@ -147,6 +148,12 @@ public interface ResourceBuildSqlService { String buildGetAppSystemIdListByIdSql(String viewName, Long id); + String buildSearchVendorCountSql(BasePageVo searchVo); + + String buildSearchVendorIdListSql(BasePageVo searchVo); + + String buildSearchVendorListByIdListSql(List idList); + // InspectMapper String buildGetInspectResourceListByIdListSql(List idList, List selectFieldNameList); diff --git a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlServiceImpl.java b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlServiceImpl.java index 436665bbc51f62f23c04f4f5e024760f95635613..e769a25f446cc683b5d55d3349444a1a0fea0ee2 100644 --- a/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlServiceImpl.java +++ b/src/main/java/neatlogic/module/cmdb/service/resourcecenter/resource/ResourceBuildSqlServiceImpl.java @@ -34,6 +34,7 @@ import neatlogic.framework.cmdb.exception.ci.CiNotFoundException; import neatlogic.framework.cmdb.exception.resourcecenter.ResourceViewFieldMappingException; import neatlogic.framework.cmdb.utils.ResourceViewGenerateSqlUtil; import neatlogic.framework.cmdb.utils.ResourceViewGenerateSqlUtilForTiDB; +import neatlogic.framework.common.dto.BasePageVo; import neatlogic.framework.dao.mapper.DataBaseViewInfoMapper; import neatlogic.framework.dao.mapper.SchemaMapper; import neatlogic.framework.dto.DataBaseViewInfoVo; @@ -1360,6 +1361,101 @@ public class ResourceBuildSqlServiceImpl implements ResourceBuildSqlService, IRe return null; } + @Override + public String buildSearchVendorCountSql(BasePageVo searchVo) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_vendor"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); + List filterItemFieldNameList = new ArrayList<>(); + filterItemFieldNameList.add("id"); + filterItemFieldNameList.add("name"); + filterItemFieldNameList.add("description"); + config.setFilterItemFieldNameList(filterItemFieldNameList); + List selectItemFieldNameList = new ArrayList<>(); + selectItemFieldNameList.add("id"); + config.setSelectItemFieldNameList(selectItemFieldNameList); + Map fieldName2ColumnMap = new HashMap<>(); + PlainSelect plainSelect = getPlainSelect(config, fieldName2ColumnMap); + String keyword = searchVo.getKeyword(); + if (StringUtils.isNotBlank(keyword)) { + keyword = "%" + keyword + "%"; + Column nameColumn = fieldName2ColumnMap.get("name"); + Column descriptionColumn = fieldName2ColumnMap.get("description"); + $sql.addWhereExpression(plainSelect, + $sql.exp("(", + $sql.exp(nameColumn.toString(), "like", $sql.value(keyword)), + "OR", + $sql.exp(descriptionColumn.toString(), "like", $sql.value(keyword)), + ")")); + } + Column column = fieldName2ColumnMap.get("id"); + $sql.setSelectColumn(plainSelect, $sql.fun("COUNT", column.toString()).withDistinct(true)); + return plainSelect.toString(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + @Override + public String buildSearchVendorIdListSql(BasePageVo searchVo) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_vendor"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); + List filterItemFieldNameList = new ArrayList<>(); + filterItemFieldNameList.add("id"); + filterItemFieldNameList.add("name"); + filterItemFieldNameList.add("description"); + config.setFilterItemFieldNameList(filterItemFieldNameList); + List selectItemFieldNameList = new ArrayList<>(); + selectItemFieldNameList.add("id"); + config.setSelectItemFieldNameList(selectItemFieldNameList); + Map fieldName2ColumnMap = new HashMap<>(); + PlainSelect plainSelect = getPlainSelect(config, fieldName2ColumnMap); + String keyword = searchVo.getKeyword(); + if (StringUtils.isNotBlank(keyword)) { + keyword = "%" + keyword + "%"; + Column nameColumn = fieldName2ColumnMap.get("name"); + Column descriptionColumn = fieldName2ColumnMap.get("description"); + $sql.addWhereExpression(plainSelect, + $sql.exp("(", + $sql.exp(nameColumn.toString(), "like", $sql.value(keyword)), + "OR", + $sql.exp(descriptionColumn.toString(), "like", $sql.value(keyword)), + ")")); + } + $sql.setLimit(plainSelect, searchVo.getStartNum(), searchVo.getPageSize()); + return plainSelect.toString(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + @Override + public String buildSearchVendorListByIdListSql(List idList) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_vendor"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); + List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName("scence_vendor"); + List selectItemFieldNameList = new ArrayList<>(fieldNameList); + List filterItemFieldNameList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(idList)) { + filterItemFieldNameList.add("id"); + } + config.setSelectItemFieldNameList(selectItemFieldNameList); + config.setFilterItemFieldNameList(filterItemFieldNameList); + Map fieldName2ColumnMap = new HashMap<>(); + PlainSelect plainSelect = getPlainSelect(config, fieldName2ColumnMap); + Column column = fieldName2ColumnMap.get("id"); + $sql.addWhereExpression(plainSelect, $sql.exp(column.toString(), "in", idList)); + return plainSelect.toString(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + @Override public String buildGetInspectResourceListByIdListSql(List idList, List selectFieldNameList) { try { 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 79904cf8b216a4a03d0fde38b61a30bd683460d9..86929843cae0d9d0e4020e086a52cfa49c87d4b8 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 @@ -31,6 +31,7 @@ import neatlogic.framework.cmdb.dto.resourcecenter.config.ResourceEntityVo; import neatlogic.framework.cmdb.dto.tag.TagVo; import neatlogic.framework.cmdb.enums.CmdbTenantConfig; import neatlogic.framework.cmdb.exception.ci.CiNotFoundException; +import neatlogic.framework.common.dto.BasePageVo; import neatlogic.framework.config.ConfigManager; import neatlogic.framework.dao.mapper.DataBaseViewInfoMapper; import neatlogic.framework.dao.mapper.SchemaMapper; @@ -1507,6 +1508,88 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc return new ArrayList<>(); } + @Override + public int searchVendorCount(BasePageVo searchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int oldRowNum = 0; + int newRowNum = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + String sql = resourceBuildSqlService.buildSearchVendorCountSql(searchVo); + newRowNum = resourceMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldRowNum = resourceMapper.searchVendorCount(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + if (oldRowNum != newRowNum) { + JSONObject errorObj = new JSONObject(); + errorObj.put("newRowNum", newRowNum); + errorObj.put("oldRowNum", oldRowNum); + logger.error("资产清单新旧SQL获取rowNum结果不一致:{}", errorObj); + } + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newRowNum; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldRowNum; + } + return 0; + } + + @Override + public List searchVendorIdList(BasePageVo searchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + List newIdList = new ArrayList<>(); + List oldIdList = new ArrayList<>(); + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + String sql = resourceBuildSqlService.buildSearchVendorIdListSql(searchVo); + newIdList = resourceMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = resourceMapper.searchVendorIdList(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + if (!Objects.equals(oldIdList, newIdList)) { + JSONObject errorObj = new JSONObject(); + errorObj.put("newIdList", newIdList); + errorObj.put("oldIdList", oldIdList); + logger.error("资产清单新旧SQL获取idList结果不一致:{}", errorObj); + } + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newIdList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldIdList; + } + return new ArrayList<>(); + } + + @Override + public List searchVendorListByIdList(List idList) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + List newResourceList = new ArrayList<>(); + List oldResourceList = new ArrayList<>(); + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + String sql = resourceBuildSqlService.buildSearchVendorListByIdListSql(idList); + newResourceList = resourceMapper.getResourceListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = resourceMapper.searchVendorListByIdList(idList); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkResourceListIsEquals(newResourceList, oldResourceList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newResourceList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldResourceList; + } + return new ArrayList<>(); + } + // public Object example() { // String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); // String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE);