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 ab966f4418e67ee32519a0d77fe34c9e3cdeed3f..9d1c44e65b9c8503559b6da9eac18a6a0bd8b5c5 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 @@ -170,4 +170,10 @@ public interface IResourceCenterResourceService { List searchVendorListByIdList(List idList); + int searchStateCount(BasePageVo searchVo); + + List searchStateIdList(BasePageVo searchVo); + + List searchStateListByIdList(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 7d64fe2aba16022e58841100db5f10a5a98852d8..f27d77a9d2ac35f203e6f368786df5a169974e00 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 @@ -154,6 +154,11 @@ public interface ResourceBuildSqlService { String buildSearchVendorListByIdListSql(List idList); + String buildSearchStateCountSql(BasePageVo searchVo); + + String buildSearchStateIdListSql(BasePageVo searchVo); + + String buildSearchStateListByIdListSql(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 e769a25f446cc683b5d55d3349444a1a0fea0ee2..79fd2903cddd08312a948227e022184b03e3b6a1 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 @@ -1456,6 +1456,101 @@ public class ResourceBuildSqlServiceImpl implements ResourceBuildSqlService, IRe return null; } + @Override + public String buildSearchStateCountSql(BasePageVo searchVo) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_state"); + 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 buildSearchStateIdListSql(BasePageVo searchVo) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_state"); + 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 buildSearchStateListByIdListSql(List idList) { + try { + ResourceEntityVo resourceEntityVo = resourceEntityMapper.getResourceEntityByName("scence_state"); + ResourceEntityConfigVo config = getResourceEntityConfigVo(resourceEntityVo); + List fieldNameList = ResourceEntityFactory.getFieldNameListByViewName("scence_state"); + 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 86929843cae0d9d0e4020e086a52cfa49c87d4b8..86fc5e77ed4298b29cc12b739e37ec09e5052fec 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 @@ -1590,6 +1590,88 @@ public class ResourceCenterResourceServiceImpl implements IResourceCenterResourc return new ArrayList<>(); } + @Override + public int searchStateCount(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.buildSearchStateCountSql(searchVo); + newRowNum = resourceMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldRowNum = resourceMapper.searchStateCount(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 searchStateIdList(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.buildSearchStateIdListSql(searchVo); + newIdList = resourceMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = resourceMapper.searchStateIdList(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 searchStateListByIdList(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.buildSearchStateListByIdListSql(idList); + newResourceList = resourceMapper.getResourceListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = resourceMapper.searchStateListByIdList(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);