diff --git a/src/main/java/neatlogic/module/inspect/service/InspectService.java b/src/main/java/neatlogic/module/inspect/service/InspectService.java new file mode 100644 index 0000000000000000000000000000000000000000..580a6d9df01bea3e7fc4268afe1545cfc053dc40 --- /dev/null +++ b/src/main/java/neatlogic/module/inspect/service/InspectService.java @@ -0,0 +1,62 @@ +/* + * 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.inspect.service; + +import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; +import neatlogic.framework.inspect.dto.InspectConfigFilePathSearchVo; +import neatlogic.framework.inspect.dto.InspectConfigFilePathVo; +import neatlogic.framework.inspect.dto.InspectResourceVo; + +import java.util.List; + +public interface InspectService { + + List getInspectResourceListByIdList(List idList); + + List getInspectResourceListByIdList(List idList, List selectFieldNameList); + + List getInspectResourceListByIdListAndJobId(List idList, Long jobId); + + List getInspectResourceListByIdListAndJobId(List idList, Long jobId, List selectFieldNameList); + + int getInspectResourceCount(ResourceSearchVo searchVo); + + int getInspectResourceCountByIpKeyword(ResourceSearchVo searchVo); + + int getInspectResourceCountByNameKeyword(ResourceSearchVo searchVo); + + List getInspectResourceIdList(ResourceSearchVo searchVo); + + int getInspectAutoexecJobNodeResourceCount(ResourceSearchVo searchVo, Long jobId); + + int getInspectAutoexecJobNodeResourceCountByIpKeyword(ResourceSearchVo searchVo, Long jobId); + + int getInspectAutoexecJobNodeResourceCountByNameKeyword(ResourceSearchVo searchVo, Long jobId); + + List getInspectAutoexecJobNodeResourceIdList(ResourceSearchVo searchVo, Long jobId); + + List getInspectConfigFileResourceIdList(ResourceSearchVo inspectConfigFilePathSearchVo); + + int getInspectConfigFilePathCount(InspectConfigFilePathSearchVo inspectConfigFilePathSearchVo); + + List getInspectConfigFilePathIdList(InspectConfigFilePathSearchVo inspectConfigFilePathSearchVo); + + List getInspectConfigFilePathList(List idList); + + List getInspectConfigFilePathListByJobId(Long jobId); +} diff --git a/src/main/java/neatlogic/module/inspect/service/InspectServiceImpl.java b/src/main/java/neatlogic/module/inspect/service/InspectServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0df2bdc9131521a5ec0be8fb72accac1c48d4da3 --- /dev/null +++ b/src/main/java/neatlogic/module/inspect/service/InspectServiceImpl.java @@ -0,0 +1,538 @@ +/* + * 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.inspect.service; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.cmdb.crossover.IResourceBuildSqlCrossoverService; +import neatlogic.framework.cmdb.crossover.IResourceCrossoverMapper; +import neatlogic.framework.cmdb.dto.resourcecenter.ResourceSearchVo; +import neatlogic.framework.cmdb.enums.CmdbTenantConfig; +import neatlogic.framework.config.ConfigManager; +import neatlogic.framework.crossover.CrossoverServiceFactory; +import neatlogic.framework.inspect.dao.mapper.InspectMapper; +import neatlogic.framework.inspect.dto.InspectConfigFilePathSearchVo; +import neatlogic.framework.inspect.dto.InspectConfigFilePathVo; +import neatlogic.framework.inspect.dto.InspectResourceVo; +import neatlogic.module.inspect.dao.mapper.InspectConfigFileMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; + +@Service +public class InspectServiceImpl implements InspectService { + + private final Logger logger = LoggerFactory.getLogger(InspectServiceImpl.class); + + private final String MYBATIS_MODE = "mybatis"; + + private final String JSQLPARSER_MODE = "jsqlparser"; + + private final String COMPARISON_ENABLED = "1"; + + @Resource + private InspectConfigFileMapper inspectConfigFileMapper; + + @Resource + private InspectMapper inspectMapper; + + @Override + public List getInspectResourceListByIdList(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)) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceListByIdListSql(idList); + newResourceList = inspectMapper.getInspectResourceListByIdListSql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = inspectMapper.getInspectResourceListByIdList(idList); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkInspectResourceListIsEquals(newResourceList, oldResourceList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newResourceList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldResourceList; + } + return new ArrayList<>(); + } + + @Override + public List getInspectResourceListByIdList(List idList, List selectFieldNameList) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceListByIdListSql(idList, selectFieldNameList); + return inspectMapper.getInspectResourceListByIdListSql(sql); + } + + @Override + public List getInspectResourceListByIdListAndJobId(List idList, Long jobId) { + 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)) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceListByIdListAndJobIdSql(idList, jobId); + newResourceList = inspectMapper.getInspectResourceListByIdListSql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = inspectMapper.getInspectResourceListByIdListAndJobId(idList, jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkInspectResourceListIsEquals(newResourceList, oldResourceList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newResourceList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldResourceList; + } + return new ArrayList<>(); + } + + @Override + public List getInspectResourceListByIdListAndJobId(List idList, Long jobId, List selectFieldNameList) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceListByIdListAndJobIdSql(idList, jobId, selectFieldNameList); + return inspectMapper.getInspectResourceListByIdListSql(sql); + } + + @Override + public int getInspectResourceCount(ResourceSearchVo searchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceCountSql(searchVo); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectResourceCount(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public int getInspectResourceCountByIpKeyword(ResourceSearchVo searchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceCountByIpKeywordSql(searchVo); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectResourceCountByIpKeyword(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public int getInspectResourceCountByNameKeyword(ResourceSearchVo searchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceCountByNameKeywordSql(searchVo); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectResourceCountByNameKeyword(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public List getInspectResourceIdList(ResourceSearchVo 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)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectResourceIdListSql(searchVo); + newIdList = resourceCrossoverMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = inspectMapper.getInspectResourceIdList(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkLongListIsEquals(newIdList, oldIdList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newIdList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldIdList; + } + return new ArrayList<>(); + } + + @Override + public int getInspectAutoexecJobNodeResourceCount(ResourceSearchVo searchVo, Long jobId) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectAutoexecJobNodeResourceCountSql(searchVo, jobId); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectAutoexecJobNodeResourceCount(searchVo, jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public int getInspectAutoexecJobNodeResourceCountByIpKeyword(ResourceSearchVo searchVo, Long jobId) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectAutoexecJobNodeResourceCountByIpKeywordSql(searchVo, jobId); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectAutoexecJobNodeResourceCountByIpKeyword(searchVo, jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public int getInspectAutoexecJobNodeResourceCountByNameKeyword(ResourceSearchVo searchVo, Long jobId) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectAutoexecJobNodeResourceCountByNameKeywordSql(searchVo, jobId); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectMapper.getInspectAutoexecJobNodeResourceCountByNameKeyword(searchVo, jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public List getInspectAutoexecJobNodeResourceIdList(ResourceSearchVo searchVo, Long jobId) { + 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)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectAutoexecJobNodeResourceIdListSql(searchVo, jobId); + newIdList = resourceCrossoverMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = inspectMapper.getInspectAutoexecJobNodeResourceIdList(searchVo, jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkLongListIsEquals(newIdList, oldIdList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newIdList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldIdList; + } + return new ArrayList<>(); + } + + @Override + public List getInspectConfigFileResourceIdList(ResourceSearchVo 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)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectConfigFileResourceIdListSql(searchVo); + newIdList = resourceCrossoverMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = inspectConfigFileMapper.getInspectResourceIdList(searchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkLongListIsEquals(newIdList, oldIdList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newIdList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldIdList; + } + return new ArrayList<>(); + } + + @Override + public int getInspectConfigFilePathCount(InspectConfigFilePathSearchVo inspectConfigFilePathSearchVo) { + String enable = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_DATA_COMPARISON_MODE_ENABLE); + String mode = ConfigManager.getConfig(CmdbTenantConfig.RESOURCECENTER_SQL_MODE); + int newCount = 0; + int oldCount = 0; + if (Objects.equals(mode, JSQLPARSER_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + ResourceSearchVo searchVo = JSONObject.parseObject(JSONObject.toJSONString(inspectConfigFilePathSearchVo), ResourceSearchVo.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectConfigFilePathCountSql(searchVo); + newCount = resourceCrossoverMapper.getCountBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldCount = inspectConfigFileMapper.getInspectConfigFilePathCount(inspectConfigFilePathSearchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkIntIsEquals(newCount, oldCount); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newCount; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldCount; + } + return 0; + } + + @Override + public List getInspectConfigFilePathIdList(InspectConfigFilePathSearchVo inspectConfigFilePathSearchVo) { + 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)) { + IResourceCrossoverMapper resourceCrossoverMapper = CrossoverServiceFactory.getApi(IResourceCrossoverMapper.class); + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + ResourceSearchVo searchVo = JSONObject.parseObject(JSONObject.toJSONString(inspectConfigFilePathSearchVo), ResourceSearchVo.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectConfigFilePathIdListSql(searchVo); + newIdList = resourceCrossoverMapper.getIdListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldIdList = inspectConfigFileMapper.getInspectConfigFilePathIdList(inspectConfigFilePathSearchVo); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkLongListIsEquals(newIdList, oldIdList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newIdList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldIdList; + } + return new ArrayList<>(); + } + + @Override + public List getInspectConfigFilePathList(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)) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectConfigFilePathListSql(idList); + newResourceList = inspectConfigFileMapper.getInspectConfigFilePathListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = inspectConfigFileMapper.getInspectConfigFilePathList(idList); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkInspectConfigFilePathListIsEquals(newResourceList, oldResourceList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newResourceList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldResourceList; + } + return new ArrayList<>(); + } + + @Override + public List getInspectConfigFilePathListByJobId(Long jobId) { + 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)) { + IResourceBuildSqlCrossoverService resourceBuildSqlCrossoverService = CrossoverServiceFactory.getApi(IResourceBuildSqlCrossoverService.class); + String sql = resourceBuildSqlCrossoverService.buildGetInspectConfigFilePathListByJobIdSql(jobId); + newResourceList = inspectConfigFileMapper.getInspectConfigFilePathListBySql(sql); + } + if (Objects.equals(mode, MYBATIS_MODE) || Objects.equals(enable, COMPARISON_ENABLED)) { + oldResourceList = inspectConfigFileMapper.getInspectConfigFilePathListByJobId(jobId); + } + if (Objects.equals(enable, COMPARISON_ENABLED)) { + checkInspectConfigFilePathListIsEquals(newResourceList, oldResourceList); + } + if (Objects.equals(mode, JSQLPARSER_MODE)) { + return newResourceList; + } else if (Objects.equals(mode, MYBATIS_MODE)) { + return oldResourceList; + } + return new ArrayList<>(); + } + + private boolean checkLongListIsEquals(List newIdList, List oldIdList) { + if (!Objects.equals(oldIdList, newIdList)) { + JSONObject resultObj = new JSONObject(); + resultObj.put("idList", newIdList); + resultObj.put("oldIdList", oldIdList); + logger.error("资产清单新旧SQL获取结果不一致:{}", resultObj); + return false; + } + return true; + } + + private boolean checkIntIsEquals(int newCount, int oldCount) { + if (!Objects.equals(oldCount, newCount)) { + JSONObject resultObj = new JSONObject(); + resultObj.put("newCount", newCount); + resultObj.put("oldCount", oldCount); + logger.error("资产清单新旧SQL获取结果不一致:{}", resultObj); + return false; + } + return true; + } + + private boolean checkInspectResourceListIsEquals(List resourceList, List oldResourceList) { + if (oldResourceList.size() != resourceList.size()) { + JSONObject errorObj = new JSONObject(); + errorObj.put("resourceList.size()", resourceList.size()); + errorObj.put("oldResourceList.size()", oldResourceList.size()); + logger.error("资产清单新旧SQL获取tbodyList结果不一致:{}", errorObj); + return false; + } + boolean flag = true; + resourceList.sort(Comparator.comparing(InspectResourceVo::getId)); + oldResourceList.sort(Comparator.comparing(InspectResourceVo::getId)); + for (int i = 0; i < resourceList.size(); i++) { + InspectResourceVo resourceVo = resourceList.get(i); + InspectResourceVo oldResourceVo = oldResourceList.get(i); + String resourceString = JSONObject.toJSONString(resourceVo); + String oldResourceString = JSONObject.toJSONString(oldResourceVo); + if (!Objects.equals(resourceString, oldResourceString)) { + JSONObject errorObj = new JSONObject(); + errorObj.put("index", i); + errorObj.put("resourceVo", resourceVo); + errorObj.put("oldResourceVo", oldResourceVo); + logger.error("资产清单新旧SQL获取tbodyObj结果不一致:{}", errorObj); + flag = false; + } + } + return flag; + } + + private boolean checkInspectConfigFilePathListIsEquals(List resourceList, List oldResourceList) { + if (oldResourceList.size() != resourceList.size()) { + JSONObject errorObj = new JSONObject(); + errorObj.put("resourceList.size()", resourceList.size()); + errorObj.put("oldResourceList.size()", oldResourceList.size()); + logger.error("资产清单新旧SQL获取tbodyList结果不一致:{}", errorObj); + return false; + } + boolean flag = true; + resourceList.sort(Comparator.comparing(InspectConfigFilePathVo::getId)); + oldResourceList.sort(Comparator.comparing(InspectConfigFilePathVo::getId)); + for (int i = 0; i < resourceList.size(); i++) { + InspectConfigFilePathVo resourceVo = resourceList.get(i); + InspectConfigFilePathVo oldResourceVo = oldResourceList.get(i); + String resourceString = JSONObject.toJSONString(resourceVo); + String oldResourceString = JSONObject.toJSONString(oldResourceVo); + if (!Objects.equals(resourceString, oldResourceString)) { + JSONObject errorObj = new JSONObject(); + errorObj.put("index", i); + errorObj.put("resourceVo", resourceVo); + errorObj.put("oldResourceVo", oldResourceVo); + logger.error("资产清单新旧SQL获取tbodyObj结果不一致:{}", errorObj); + flag = false; + } + } + return flag; + } +}