FinalReportService.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package com.mooctest.service;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.mooctest.dao.FinalReportDao;
  5. import com.mooctest.data.BugDTO;
  6. import com.mooctest.data.FinalReportDTO;
  7. import com.mooctest.data.TaskDTO;
  8. import com.mooctest.model.FinalReport;
  9. import com.mooctest.util.HttpUtil;
  10. import com.mooctest.util.ReportUtil;
  11. import org.springframework.beans.BeanUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.http.HttpEntity;
  15. import org.springframework.http.HttpHeaders;
  16. import org.springframework.http.MediaType;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.web.client.RestTemplate;
  19. import java.util.Date;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.stream.Collectors;
  23. @Service
  24. public class FinalReportService {
  25. @Autowired
  26. FinalReportDao finalReportDao;
  27. @Value("${baseUrl.report.export}")
  28. String reportExportAddr;
  29. @Value("${baseUrl.report.excel}")
  30. String reportExportExcelAttr;
  31. // @Autowired
  32. // BlockchainService blockchainService;
  33. public FinalReportDTO save(FinalReportDTO dto) {
  34. FinalReport finalReport = new FinalReport();
  35. BeanUtils.copyProperties(dto, finalReport);
  36. finalReport.setImgUrls(String.join(",", dto.getImgUrls()));
  37. finalReport.setCreateTime(new Date());
  38. // 将创建的报告保存到FinalReport表中
  39. finalReport = finalReportDao.save(finalReport);
  40. BeanUtils.copyProperties(finalReport, dto);
  41. // try {
  42. // blockchainService.addFinalToBlockChain(finalReport);
  43. // } catch (InterruptedException e) {
  44. // e.printStackTrace();
  45. // }
  46. return dto;
  47. }
  48. public FinalReportDTO update(long reportId, FinalReportDTO dto) {
  49. FinalReport report = finalReportDao.findById(reportId).orElse(null);
  50. dto.setCreateTime(report.getCreateTime());
  51. BeanUtils.copyProperties(dto, report);
  52. report.setImgUrls(String.join(",", dto.getImgUrls()));
  53. finalReportDao.save(report);
  54. return dto;
  55. }
  56. public List<FinalReportDTO> getByExamIdAndCaseId(long examId, long caseId) {
  57. List<FinalReport> frs = finalReportDao.findByExamIdAndCaseId(examId, caseId);
  58. return wrap(frs);
  59. }
  60. public List<FinalReportDTO> getBySourceId(String sourceId) {
  61. List<FinalReport> frs = finalReportDao.findBySourceId(sourceId);
  62. return wrap(frs);
  63. }
  64. private List<FinalReportDTO> wrap(List<FinalReport> frs) {
  65. return frs.stream().map(finalReport -> {
  66. FinalReportDTO dto = new FinalReportDTO();
  67. BeanUtils.copyProperties(finalReport, dto);
  68. if(finalReport.getImgUrls()!=null&&!finalReport.getImgUrls().equals("")){
  69. dto.setImgUrls(finalReport.getImgUrls().split(","));
  70. }
  71. return dto;
  72. }).collect(Collectors.toList());
  73. }
  74. public void delete(long reportId) {
  75. finalReportDao.deleteById(reportId);
  76. }
  77. public String getExportReportAddr(TaskDTO task) {
  78. List<FinalReport> finalReports = finalReportDao.findByExamIdAndCaseId(task.getExamId(), task.getCaseId());
  79. HttpHeaders headers = new HttpHeaders();
  80. headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
  81. JSONObject reportJson = genJsonForExport(task, finalReports);
  82. HttpEntity<String> request = new HttpEntity<>(reportJson.toJSONString(), headers);
  83. RestTemplate rt = HttpUtil.getRestTemplate();
  84. String url = rt.postForObject(reportExportAddr, request, String.class);
  85. return url;
  86. }
  87. public String getReportExportExcelAttr(TaskDTO task){
  88. List<FinalReport> finalReports = finalReportDao.findByExamIdAndCaseId(task.getExamId(), task.getCaseId());
  89. HttpHeaders headers = new HttpHeaders();
  90. headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
  91. JSONObject reportJson = genJsonForExport(task, finalReports);
  92. HttpEntity<String> request = new HttpEntity<>(reportJson.toJSONString(), headers);
  93. RestTemplate rt = HttpUtil.getRestTemplate();
  94. String url = rt.postForObject(reportExportExcelAttr, request, String.class);
  95. return url;
  96. }
  97. public JSONObject getReportExportData(TaskDTO task){
  98. List<FinalReport> finalReports = finalReportDao.findByExamIdAndCaseId(task.getExamId(), task.getCaseId());
  99. HttpHeaders headers = new HttpHeaders();
  100. headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
  101. JSONObject reportJson = genJsonForExport(task, finalReports);
  102. return reportJson;
  103. }
  104. private JSONObject genJsonForExport(TaskDTO task, List<FinalReport> finalReports) {
  105. JSONObject root = new JSONObject();
  106. JSONArray projects = new JSONArray();
  107. JSONObject project = new JSONObject();
  108. project.put("projectId", task.getExamId() + "-" +task.getCaseId());
  109. project.put("icon", task.getIcon());
  110. project.put("name", task.getName());
  111. project.put("version", task.getVersion());
  112. project.put("startTime", task.getStartTime());
  113. project.put("endTime", task.getEndTime());
  114. project.put("reports", finalReports);
  115. projects.add(project);
  116. root.put("projects", projects);
  117. root.put("menus", new JSONArray().fluentAdd("众包测试报告"));
  118. JSONObject projectStatistics = new JSONObject();
  119. projectStatistics.put("categorys", genAttrArray(ReportUtil.category2String));
  120. projectStatistics.put("severity", genAttrArray(ReportUtil.severity2String));
  121. projectStatistics.put("recurrent", genAttrArray(ReportUtil.recurrent2String));
  122. root.put("projectStatistics", projectStatistics);
  123. return root;
  124. }
  125. private JSONArray genAttrArray(Map map) {
  126. JSONArray arr = new JSONArray();
  127. map.forEach((k, v) -> {
  128. JSONObject obj = new JSONObject();
  129. obj.put("name", v);
  130. obj.put("value", k);
  131. arr.add(obj);
  132. });
  133. return arr;
  134. }
  135. public void transAllBug2FinalReport(List<BugDTO> bugs, long examId, long caseId) {
  136. List<FinalReport> finalReports = bugs.parallelStream().map(bug -> {
  137. FinalReport finalReport = new FinalReport();
  138. finalReport.setDescription(bug.getDescription());
  139. finalReport.setImgUrls(String.join(",", bug.getImgUrls()));
  140. finalReport.setSeverity(bug.getSeverity());
  141. finalReport.setRecurrent(bug.getRecurrent());
  142. Integer category = ReportUtil.string2Category.get(bug.getBugCategory());
  143. if (category == null) {
  144. category = 7;
  145. }
  146. finalReport.setCategory(category);
  147. finalReport.setCreateTime(new Date());
  148. finalReport.setWriterId(1);
  149. finalReport.setExamId(examId);
  150. finalReport.setCaseId(caseId);
  151. return finalReport;
  152. }).collect(Collectors.toList());
  153. finalReportDao.saveAll(finalReports);
  154. }
  155. }