梅杰 пре 6 година
родитељ
комит
e0b0febf16

+ 24 - 0
src/main/java/com/mooctest/controller/FinalReportController.java

@@ -5,11 +5,17 @@ import com.mooctest.data.TaskDTO;
 import com.mooctest.service.FinalReportService;
 import com.mooctest.service.TaskService;
 import com.mooctest.util.ReportUtil;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.client.ClientHttpRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 @Controller
@@ -67,4 +73,22 @@ public class FinalReportController {
 
         return finalReportService.getExportReportAddr(task);
     }
+
+    @RequestMapping(value = "/yourEndPoint")
+    public void processRequest(
+            @RequestParam("url") String fileToDownloadUri,
+            HttpServletResponse response) {
+        RestTemplate restTemplate = new RestTemplate();
+
+        response.setStatus(HttpStatus.OK.value());
+
+        restTemplate.execute(
+                fileToDownloadUri,
+                HttpMethod.GET,
+                (ClientHttpRequest requestCallback) -> {},
+                responseExtractor -> {
+                    IOUtils.copy(responseExtractor.getBody(), response.getOutputStream());
+                    return null;
+                });
+    }
 }

+ 2 - 1
src/main/java/com/mooctest/controller/ReportController.java

@@ -160,7 +160,8 @@ public class ReportController {
             masterIds = masterIds.stream().filter(masterId -> mrMap.get(masterId).getStatus() == status).collect(Collectors.toList());
         }
 
-        Map<String, List<String>> master2BugIdsMap = supplementService.getMaster2BugIdsMap(masterIds);
+//        Map<String, List<String>> master2BugIdsMap = supplementService.getMaster2BugIdsMap(masterIds);
+        Map<String, List<String>> master2BugIdsMap = masterReportService.getMaster2BugIdsMap(masterIds);
         Map<String, BugDTO> bugsMap = bugReportService.getAllBugsMap(examId, caseId);
 
 //        Map<String, List<BugDTO>> masterBugMap = bugReportService.getMasterBugMap(master2BugIdsMap, bugsMap);

+ 2 - 0
src/main/java/com/mooctest/dao/MasterReportDao.java

@@ -11,6 +11,8 @@ public interface MasterReportDao extends MongoRepository<MasterReport, Long> {
 
     List<MasterReport> findByMasterId(String masterId);
 
+    List<MasterReport> findByMasterIdIn(List<String> masterIds);
+
     List<MasterReport> findByExamIdAndCaseId(long examId, long caseId);
 
     List<MasterReport> findByBugIdIn(List<String> bugIds);

+ 11 - 1
src/main/java/com/mooctest/service/FinalReportService.java

@@ -6,10 +6,14 @@ import com.mooctest.dao.FinalReportDao;
 import com.mooctest.data.FinalReportDTO;
 import com.mooctest.data.TaskDTO;
 import com.mooctest.model.FinalReport;
+import com.mooctest.util.HttpUtil;
 import com.mooctest.util.ReportUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 import java.sql.Timestamp;
 import java.util.Date;
@@ -23,6 +27,9 @@ public class FinalReportService {
     @Autowired
     FinalReportDao finalReportDao;
 
+    @Value("${report.export.addr}")
+    String reportExportAddr;
+
     public FinalReportDTO save(FinalReportDTO dto) {
 
         FinalReport finalReport = new FinalReport();
@@ -70,7 +77,10 @@ public class FinalReportService {
     public String getExportReportAddr(TaskDTO task) {
         List<FinalReport> finalReports = finalReportDao.findByExamIdAndCaseId(task.getExamId(), task.getCaseId());
 
-        return genJsonForExport(task, finalReports).toJSONString();
+        RestTemplate rt = HttpUtil.getRestTemplate();
+        JSONObject reportJson = genJsonForExport(task, finalReports);
+        String url = rt.postForObject(reportExportAddr, reportJson.toJSONString(), String.class);
+        return url;
     }
 
     private JSONObject genJsonForExport(TaskDTO task, List<FinalReport> finalReports) {

+ 9 - 0
src/main/java/com/mooctest/service/MasterReportService.java

@@ -91,6 +91,15 @@ public class MasterReportService {
                 .collect(Collectors.toList());
     }
 
+    public Map<String, List<String>> getMaster2BugIdsMap(List<String> masterIds) {
+        List<MasterReport> mrs = masterReportDao.findByMasterIdIn(masterIds);
+        return mrs.stream().collect(
+                Collectors.groupingBy(
+                        MasterReport::getMasterId,
+                        Collectors.mapping(MasterReport::getBugId, Collectors.toList())));
+
+    }
+
     public List<String> getAllBugIdsByMasterId(String masterId) {
         List<MasterReport> mrs = masterReportDao.findByMasterId(masterId);
         return mrs.stream().map(MasterReport::getBugId).collect(Collectors.toList());

+ 2 - 0
src/main/resources/application.yml

@@ -28,6 +28,8 @@ mongodb2.database: co-report
 mongodb2.host: localhost
 mongodb2.port: 27017
 
+report.export.addr: http://182.254.197.194:9002/generateReport
+
 server:
     port: 8090
 logging:

+ 1 - 1
src/main/resources/templates/agg_report_list.html

@@ -103,7 +103,7 @@
                                     <br/>
                                 </div>
                                 <div style="margin-top: 5px;">
-                                    <span class="agg-title">聚合报告数<span class="badge badge-default agg-badge" th:text="${masterBug.value.size()+1}">10</span></span>
+                                    <span class="agg-title">聚合报告数<span class="badge badge-default agg-badge" th:text="${masterBug.value.size()}">10</span></span>
 
                                 </div>
                             </div>

+ 24 - 0
src/main/resources/templates/final_report_list.html

@@ -61,7 +61,13 @@
     <section class="content container-fluid">
 
         <!-- Report List Table -->
+        <div class="assign-div pull-right">
+            <button id="export-btn" class="btn btn-sm btn-assign pull-right">
+                <i class="fa fa-coffee" style="margin-right: 3px;"></i>
+                <span>导出报告</span>
+            </button>
 
+        </div>
         <table id="report-list" class="table table-striped table-bordered" cellpadding="0" width="100%">
             <thead>
             <tr>
@@ -170,4 +176,22 @@
     function closeImageViewer() {
         $("#imgModal").modal('hide');
     }
+
+    $(function () {
+        $('#export-btn').click(function () {
+            // 修改assign-btn的文字以及让其处于不可用状态
+            $(this).attr('disabled', true);
+            $(this).find('span').text('报告生成中...');
+
+            var urlParams = new URLSearchParams(window.location.search);
+            var examId = urlParams.get('examId');
+            var caseId = urlParams.get('caseId');
+            $.get('/final_report/export', {examId: examId, caseId: caseId}, function (result) {
+                var url = JSON.parse(result).downloadUrl;
+                window.open(url, '_blank');
+
+                location.reload()
+            });
+        });
+    });
 </script>