|
@@ -2,11 +2,14 @@ package com.mooctest.controller;
|
|
|
|
|
|
import com.mooctest.cluster.ClusterAnalyzer;
|
|
|
import com.mooctest.cluster.Group;
|
|
|
+import com.mooctest.event.EventUtil;
|
|
|
+import com.mooctest.event.TaskStartEvent;
|
|
|
import com.mooctest.image.ImageDownload;
|
|
|
import com.mooctest.data.BugDTO;
|
|
|
import com.mooctest.data.DiffImg;
|
|
|
import com.mooctest.data.DiffText;
|
|
|
import com.mooctest.data.ReportDTO;
|
|
|
+import com.mooctest.model.AggTaskStatus;
|
|
|
import com.mooctest.model.MasterReport;
|
|
|
import com.mooctest.nlp.DistanceMatrix;
|
|
|
import com.mooctest.service.*;
|
|
@@ -34,15 +37,12 @@ public class AggController {
|
|
|
@Autowired
|
|
|
MasterReportService masterReportService;
|
|
|
|
|
|
- @Autowired
|
|
|
- DiffTextService diffTextService;
|
|
|
|
|
|
@Autowired
|
|
|
- DiffImgService diffImgService;
|
|
|
+ AggTaskStatusService aggTaskStatusService;
|
|
|
|
|
|
@Autowired
|
|
|
- SupplementService supplementService;
|
|
|
-
|
|
|
+ EventUtil eventUtil;
|
|
|
@GetMapping("/aggregate_info")
|
|
|
public MasterReport getAggInfo(@RequestParam("bugId") String bugId) {
|
|
|
return masterReportService.getByBugId(bugId);
|
|
@@ -51,146 +51,25 @@ public class AggController {
|
|
|
@GetMapping("/aggregate")
|
|
|
public String aggregate(@RequestParam("examId") long examId,
|
|
|
@RequestParam("caseId") long caseId) throws IOException {
|
|
|
- List<ReportDTO> reports = bugReportService.getReports(examId, caseId);
|
|
|
-// List<ReportDTO> reports = bugReportService.getReports(2614, 1490);
|
|
|
- List<BugDTO> bugs = bugReportService.mergeAllBugs(reports);
|
|
|
-
|
|
|
- ClusterAnalyzer<String> analyzer = new ClusterAnalyzer<>();
|
|
|
- List<String> bugIds = bugs.stream().map(BugDTO::getId).collect(Collectors.toList());
|
|
|
- double[][] distMatrix = DistanceMatrix.genHybridDist(bugs);
|
|
|
- List<Set<String>> clusters = analyzer.HAC(distMatrix, bugIds, 0.23);
|
|
|
-
|
|
|
- Map<String, BugDTO> bugMap = bugs.stream().collect(toMap(BugDTO::getId, Function.identity()));
|
|
|
- bugs = null;
|
|
|
- Map<String, Set<String>> masterClusterMap = new HashMap<>();
|
|
|
- masterReportService.deleteAll();
|
|
|
- for (Set<String> cluster : clusters) {
|
|
|
- String masterReport = masterReportService.findMasterReport(cluster, bugMap);
|
|
|
- masterReportService.saveMasterReport(masterReport, examId, caseId, cluster);
|
|
|
- masterClusterMap.put(masterReport, cluster);
|
|
|
- }
|
|
|
- clusters = null;
|
|
|
-
|
|
|
- showClusterResult(masterClusterMap, bugMap);
|
|
|
-
|
|
|
- //gen diff text
|
|
|
- Map<String, List<DiffText>> masterDiffTextMap = diffTextService.genMasterDiffTextMap(masterClusterMap, bugMap);
|
|
|
-
|
|
|
- showTextDiffResult(masterDiffTextMap, bugMap);
|
|
|
-
|
|
|
- //gen diff img
|
|
|
- Map<String, List<DiffImg>> masterDiffImgMap = diffImgService.genMasterDiffImgMap(masterClusterMap, bugMap);
|
|
|
-
|
|
|
- //cluster diff text
|
|
|
- Map<String, List<Group<String, DiffText>>> masterDiffTextClustersMap = diffTextService.genDiffTextClusters(masterDiffTextMap);
|
|
|
-
|
|
|
- //cluster diff img
|
|
|
- Map<String, List<Group<String, DiffImg>>> masterDiffImgClustersMap = diffImgService.genDiffImgClusters(masterDiffImgMap);
|
|
|
-
|
|
|
- //combine cluster
|
|
|
- combineCluster(masterDiffTextClustersMap, masterDiffImgClustersMap);
|
|
|
-
|
|
|
- //top
|
|
|
- supplementService.rankAndStoreDiffText(masterDiffTextClustersMap);
|
|
|
- supplementService.rankAndStoreDiffImg(masterDiffImgClustersMap);
|
|
|
+ TaskStartEvent e = new TaskStartEvent(examId, caseId);
|
|
|
+ eventUtil.post(e);
|
|
|
|
|
|
return "ok";
|
|
|
}
|
|
|
|
|
|
- public void combineCluster(Map<String, List<Group<String, DiffText>>> masterDiffTextClustersMap,
|
|
|
- Map<String, List<Group<String, DiffImg>>> masterDiffImgClustersMap) {
|
|
|
- double LINK_THRESHOLD = 0.2;
|
|
|
- masterDiffTextClustersMap.forEach((masterId, diffTextClusters) -> {
|
|
|
- List<Group<String, DiffImg>> diffImgClusters = masterDiffImgClustersMap.get(masterId);
|
|
|
- if (diffImgClusters != null) {
|
|
|
-
|
|
|
- for (int i = 0; i < diffTextClusters.size(); i++) {
|
|
|
- Set<String> textBugIds = diffTextClusters.get(i).getCluster().stream().map(DiffText::getBugId).collect(Collectors.toSet());
|
|
|
- for (int j = 0; j < diffImgClusters.size(); j++) {
|
|
|
- Set<String> imgBugIds = diffImgClusters.get(j).getCluster().stream().map(DiffImg::getBugId).collect(Collectors.toSet());
|
|
|
- int inter = CollectionUtils.intersection(textBugIds, imgBugIds).size();
|
|
|
- int union = CollectionUtils.union(textBugIds, imgBugIds).size();
|
|
|
- double dist = 1.0 - (1.0 * inter) / (1.0 * union);
|
|
|
- if (dist > LINK_THRESHOLD) {
|
|
|
- diffImgClusters.get(j).setId(diffTextClusters.get(i).getId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- public void showClusterResult(Map<String, Set<String>> masterClusterMap, Map<String, BugDTO> bugMap) {
|
|
|
- System.out.println("showMasterReportResult:");
|
|
|
- masterClusterMap.entrySet().forEach(entry -> {
|
|
|
- System.out.println("[");
|
|
|
- System.out.println("master:");
|
|
|
- System.out.println(entry.getKey() + " " + bugMap.get(entry.getKey()).getDescription());
|
|
|
- System.out.println();
|
|
|
-
|
|
|
- entry.getValue().forEach(bugId -> {
|
|
|
- System.out.println(bugId + " " + bugMap.get(bugId).getDescription());
|
|
|
- });
|
|
|
- System.out.println("]");
|
|
|
- });
|
|
|
-
|
|
|
+ @GetMapping("/agg_task_status")
|
|
|
+ public int getAggStatus(@RequestParam("examId") long examId,
|
|
|
+ @RequestParam("caseId") long caseId) {
|
|
|
+ AggTaskStatus status = aggTaskStatusService.getByTaskId(examId, caseId);
|
|
|
+ if (status == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return status.getStatus();
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void showTextDiffResult(Map<String, List<DiffText>> masterDiffTextMap, Map<String, BugDTO> bugMap) {
|
|
|
- System.out.println("showDiffResult:");
|
|
|
- masterDiffTextMap.entrySet().forEach(entry -> {
|
|
|
- System.out.println("[");
|
|
|
- System.out.println("master:");
|
|
|
- System.out.println(entry.getKey() + " " + bugMap.get(entry.getKey()).getDescription());
|
|
|
- System.out.println();
|
|
|
|
|
|
- entry.getValue().forEach(diffText -> {
|
|
|
- System.out.println(diffText.getBugId() + "_" + diffText.getIndex() + diffText.getSentence());
|
|
|
- });
|
|
|
- System.out.println("]");
|
|
|
- });
|
|
|
|
|
|
- }
|
|
|
- public void showClusterResult(List<Set<String>> results, Map<String, BugDTO> bugMap) {
|
|
|
- System.out.println("size: " + results.size());
|
|
|
- results.forEach(cluster -> {
|
|
|
- System.out.println("[");
|
|
|
- cluster.forEach(bugId -> {
|
|
|
- System.out.println(bugId + " " + bugMap.get(bugId).getDescription());
|
|
|
- });
|
|
|
- System.out.println("]");
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @GetMapping("/down_img")
|
|
|
- public String downImg() {
|
|
|
-
|
|
|
- List<ReportDTO> reports = bugReportService.getReports(2613, 1489);
|
|
|
- List<BugDTO> bugs = bugReportService.mergeAllBugs(reports);
|
|
|
-
|
|
|
- bugs.forEach(bug -> {
|
|
|
- if (bug.getImgUrls() != null && bug.getImgUrls().length > 0) {
|
|
|
- String[] imgUrls = bug.getImgUrls();
|
|
|
- for (int i = 0; i < imgUrls.length; i++) {
|
|
|
- if (imgUrls[i] == null || !imgUrls[i].startsWith("http")) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- String fileName = bug.getId() + "_" + i;
|
|
|
- System.out.println("正在下载 " + fileName);
|
|
|
- try {
|
|
|
-
|
|
|
- ImageDownload.createImage(imgUrls[i], fileName);
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println(imgUrls[i]);
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- });
|
|
|
- return "ok";
|
|
|
- }
|
|
|
|
|
|
|
|
|
}
|