diff --git a/src/main/java/com/keyware/composeanalysis/config/GlobalExceptionHandler.java b/src/main/java/com/keyware/composeanalysis/config/GlobalExceptionHandler.java index 14c2da8..4e57a7b 100644 --- a/src/main/java/com/keyware/composeanalysis/config/GlobalExceptionHandler.java +++ b/src/main/java/com/keyware/composeanalysis/config/GlobalExceptionHandler.java @@ -13,20 +13,20 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { - //全局异常处理 - @ExceptionHandler(value = Exception.class) + //全局异常处理 + @ExceptionHandler(value = Exception.class) public Result defaultErrorHandler(Exception e) { - log.error("全局异常信息,ex={}",e.getMessage(),e); - return Result.fail(ResultCode.FAIL.getCode(), e.getMessage()); + log.error("全局异常信息,ex={}", e.getMessage(), e); + return Result.fail(ResultCode.FAIL.getCode(), e.getMessage()); } - //自定义异常处理 - //业务异常 - @ExceptionHandler(value = BusinessException.class) - @ResponseBody - public Result businessExceptionHandler(BusinessException e) { - log.error("业务异常信息",e); - return Result.fail(e.getCode(), e.getMsg()); - } + //自定义异常处理 + //业务异常 + @ExceptionHandler(value = BusinessException.class) + @ResponseBody + public Result businessExceptionHandler(BusinessException e) { + log.error("业务异常信息", e); + return Result.fail(e.getCode(), e.getMsg()); + } } diff --git a/src/main/java/com/keyware/composeanalysis/task/CodeBlockAnalysisTask.java b/src/main/java/com/keyware/composeanalysis/task/CodeBlockAnalysisTask.java index ec4dc35..4a4aefa 100644 --- a/src/main/java/com/keyware/composeanalysis/task/CodeBlockAnalysisTask.java +++ b/src/main/java/com/keyware/composeanalysis/task/CodeBlockAnalysisTask.java @@ -172,7 +172,6 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { return; } - //保存所有匹配的特征代码块MD5信息,方便统计总的匹配行数 Set matchingTraitLineSet = new HashSet<>(); @@ -190,8 +189,11 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { matchCodeBlockLineCount += traitsFeatureMd5AndFeatureLineNumMap.get(matchFeatureMd5); } + //特征行总数 + int totalFeatureLineCount = traitsFeatureMd5AndFeatureLineNumMap.values().stream().mapToInt(Integer::intValue).sum(); + //计算文件的总体特征相似度 - BigDecimal featureSimilarity = new BigDecimal(matchCodeBlockLineCount).divide(new BigDecimal(analysisFile.getCodeRowNum()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); + BigDecimal featureSimilarity = new BigDecimal(matchCodeBlockLineCount).divide(new BigDecimal(totalFeatureLineCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); //计算文件的总体开源率 BigDecimal openRate = new BigDecimal(matchedLineRowsNum.size()).divide(new BigDecimal(analysisFile.getCodeRowNum()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2); @@ -344,12 +346,13 @@ public class CodeBlockAnalysisTask extends IAnalysisTask { } /** - * 或者特征代码块的md5 和 当前md5包含的特征行数 + * 获取每个特征代码块包含的特征行数 * * @param codeBlockInfos * @return */ private Map getTraitsFeatureMd5AndFeatureLineNumMap(List codeBlockInfos) { + //按照特征代码块的md5进行分组 Map> traitMd5GroupMap = codeBlockInfos.stream().collect(Collectors.groupingBy(LineModel::getTraitLineMd5)); Map resultMap = new HashMap<>(); for (String traitMd5 : traitMd5GroupMap.keySet()) { diff --git a/src/main/java/com/keyware/composeanalysis/task/FunctionAnalysisTask.java b/src/main/java/com/keyware/composeanalysis/task/FunctionAnalysisTask.java index 40c5118..09934b2 100644 --- a/src/main/java/com/keyware/composeanalysis/task/FunctionAnalysisTask.java +++ b/src/main/java/com/keyware/composeanalysis/task/FunctionAnalysisTask.java @@ -106,15 +106,15 @@ public class FunctionAnalysisTask extends IAnalysisTask { //根据文件的名称获取函数解析器 Analysis analysis = AnalysisFactory.getAnalysis(fileName); - if (analysis == null){ - throw new BusinessException("获取文件解析器失败,文件名称:"+fileName); + if (analysis == null) { + throw new BusinessException("获取文件解析器失败,文件名称:" + fileName); } //解析文件 CodeFile codeFile = analysis.analysisFile(new FileInputStream(filePath)); //根据函数特征去匹配到开源文件 - SolrDocumentList matchOpenFiles = getFeatureSimilarityFromSolr(featureCoreName, codeFile.getFunctionList()); + SolrDocumentList matchOpenFiles = getFeatureSimilarityFromSolr(featureCoreName, codeFile.getFunctionList()); //计算开源率 doAnalysis(matchOpenFiles, sourceFileBaseCoreName, codeFile); @@ -238,7 +238,7 @@ public class FunctionAnalysisTask extends IAnalysisTask { //被测件文本内容 - String sourcefileContent= FileUtil.readUtf8String(analysisFile.getFileUrl()); + String sourcefileContent = FileUtil.readUtf8String(analysisFile.getFileUrl()); //将文本内容解析成行信息,用于后续文件的开源率计算 List analysisFileLineInfo = SimilarityUtil.getSplitWords(sourcefileContent); @@ -291,7 +291,9 @@ public class FunctionAnalysisTask extends IAnalysisTask { SolrDocument openEntries = md5VersionInfoMap.get(openSourceFileMd5); VersionTree versionInfo = versionIdVersionInfoMap.get(openEntries.get("versionId")); String openFilePath = (String) md5VersionInfoMap.get(openSourceFileMd5).getFieldValue("fullPath"); - + if (versionInfo == null){ + throw new BusinessException("根据版本ID,未查询到相关的版本信息。versionId:" + openEntries.get("versionId")); + } //组装当前开源文件的开源项目信息 MatchOpenFile matchOpenFileInfo = new MatchOpenFile(); matchOpenFileInfo.setId(IdGenerator.uuid32()) diff --git a/src/main/java/com/keyware/composeanalysis/task/PorjectAnalysisTask.java b/src/main/java/com/keyware/composeanalysis/task/PorjectAnalysisTask.java index 3088a45..9681654 100644 --- a/src/main/java/com/keyware/composeanalysis/task/PorjectAnalysisTask.java +++ b/src/main/java/com/keyware/composeanalysis/task/PorjectAnalysisTask.java @@ -76,7 +76,7 @@ public class PorjectAnalysisTask { if (!matchedPrject) { List unMatchedFiles = matchByAllFilesMd5(); - //剩余没有匹配文件,用文件的md5去匹配solr库的versionTree + //剩余没有匹配文件,用文件的md5去批量匹配solr库的versionTree if (CollectionUtils.isNotEmpty(unMatchedFiles)) { matchByFileMd5s(unMatchedFiles); } diff --git a/src/main/java/com/keyware/composeanalysis/util/SolrUtils.java b/src/main/java/com/keyware/composeanalysis/util/SolrUtils.java index f337c45..5152898 100644 --- a/src/main/java/com/keyware/composeanalysis/util/SolrUtils.java +++ b/src/main/java/com/keyware/composeanalysis/util/SolrUtils.java @@ -7,7 +7,6 @@ import lombok.Data; import lombok.extern.log4j.Log4j2; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 2fde845..fd187f0 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -8,7 +8,7 @@ spring: mongodb: uri: mongodb://127.0.0.1:27017/KEYSWAN redis: - host: 127.0.0.1 + host: 172.16.36.7 port: 6379 password: 123456 datasource: @@ -30,7 +30,7 @@ spring: #solr检索库地址 solr: - solrUrl: http://172.16.36.7:8993/solr/ + solrUrl: http://172.16.36.5:8993/solr/ #批量匹配时,返回的匹配数量 row: 5