TaskController.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package com.mooctest.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.mooctest.data.BugDTO;
  5. import com.mooctest.data.SimpleResponse;
  6. import com.mooctest.data.TaskDTO;
  7. import com.mooctest.model.BugData;
  8. import com.mooctest.model.MasterReport;
  9. import com.mooctest.model.Task;
  10. import com.mooctest.service.*;
  11. import com.mooctest.util.ReportUtil;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.ui.Model;
  16. import org.springframework.web.bind.annotation.GetMapping;
  17. import org.springframework.web.bind.annotation.PostMapping;
  18. import org.springframework.web.bind.annotation.RequestParam;
  19. import org.springframework.web.bind.annotation.ResponseBody;
  20. import org.springframework.web.multipart.MultipartFile;
  21. import java.sql.Timestamp;
  22. import java.util.ArrayList;
  23. import java.util.Collections;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.function.Function;
  27. import java.util.stream.Collectors;
  28. import static java.util.stream.Collectors.toMap;
  29. @Controller
  30. public class TaskController {
  31. @Autowired
  32. TaskService taskService;
  33. @Autowired
  34. BugReportService bugReportService;
  35. @Autowired
  36. HistoryService historyService;
  37. @Autowired
  38. MasterReportService masterReportService;
  39. @Autowired
  40. BugDataService bugDataService;
  41. @Autowired
  42. JobService jobService;
  43. @Value("${report.host}")
  44. String reportHost;
  45. @Value("${useOss}")
  46. boolean useOss;
  47. @Value("${urlPath}")
  48. String urlPrefix;
  49. @GetMapping("/crowdTask")
  50. public String home(Model model) {
  51. // 获得所有taskDTO,包括本地和慕测端
  52. List<TaskDTO> tasks = taskService.getAllTasks();
  53. List<TaskDTO> localTasks = taskService.findTask();
  54. tasks.addAll(localTasks);
  55. Collections.sort(tasks,(o1,o2)->{
  56. return (int)(o2.getExamId()-o1.getExamId());
  57. });
  58. // 将获得任务传给前端
  59. model.addAttribute("tasks", tasks);
  60. // 转到task_list页面
  61. return "task_list";
  62. }
  63. @GetMapping("/home")
  64. public String home2(Model model ){
  65. // 获得所有taskDTO,包括本地和慕测端
  66. List<TaskDTO> tasks = taskService.getAllTasks();
  67. List<TaskDTO> localTasks = taskService.findTask();
  68. tasks.addAll(localTasks);
  69. Collections.sort(tasks,(o1,o2)->{
  70. return (int)(o2.getExamId()-o1.getExamId());
  71. });
  72. JSONArray jsonArray = jobService.getJobs(); // 所有的数据
  73. List<Object> list = new ArrayList<>();
  74. for (Object single : jsonArray){
  75. changeTime2Long(single); // 修改创建时间的格式 以便前段展示
  76. list.add(single);
  77. }
  78. model.addAttribute("jobs",list.subList(0,Math.min(15,list.size())));
  79. model.addAttribute("tasks", tasks.subList(0,Math.min(15,tasks.size())));
  80. return "home";
  81. }
  82. @GetMapping("/taskDashBoard")
  83. public String dashBoard ( @RequestParam("taskId") long taskId ,
  84. @RequestParam("caseId") long caseId ,
  85. Model model){
  86. JSONObject data = taskService.getAllTaskDashboard(caseId, taskId);
  87. model.addAttribute("task",data);
  88. return "crowdTaskDashboard";
  89. }
  90. // TODO: 2020/4/1 sweager崩了没有测试
  91. @GetMapping("/distribute")
  92. @ResponseBody
  93. public String distributePeople (@RequestParam("examId") String examId,
  94. @RequestParam("caseId")String caseId){
  95. if(caseId == null || caseId.length()==0) return "fail";
  96. return taskService.distribute(examId,caseId)?"success":"fail";
  97. }
  98. @GetMapping("/")
  99. public String root(Model model) {
  100. return "redirect:/home";
  101. }
  102. @GetMapping("/task_detail")
  103. public String taskDetail(@RequestParam("examId") long examId,
  104. @RequestParam("caseId") long caseId,
  105. Model model) {
  106. // first check is there some data in bugData document
  107. // 将bug表中的信息同步到BugData中
  108. bugDataService.importBugData(examId, caseId);// 访问任务的时候同步报告信息
  109. // after import the bug data
  110. // 在MasterReport表中查找融合报告的数量,若大于0,则认为已经融合
  111. boolean aggregated = masterReportService.isAggregated(examId, caseId); // 检查报告是否已经聚合
  112. // 在bug表中查找所有的bug报告数
  113. List<BugDTO> allReports = bugReportService.getAllBugs(examId, caseId); // 得到所有的报告
  114. // 在BugData表中查找bug数据,<bugid,BugData>
  115. Map<String , BugData> bugIds2Data = bugDataService.bugId2BugData(examId, caseId);
  116. // 将单一状报告转化成树状
  117. Map<String,String> single2rootMap = historyService.getSingle2Root(caseId, examId);
  118. // 若被融合
  119. if (aggregated) { // add the information that where present when reports have been aggregated
  120. List<String> bugIds = allReports.stream().map(BugDTO::getId).collect(Collectors.toList());
  121. // MasterReport表中获得所有的报告
  122. List<MasterReport> mrs = masterReportService.getByBugIds(bugIds);
  123. Map<String, MasterReport> mrMap = mrs.stream().collect(toMap(MasterReport::getBugId, Function.identity()));
  124. allReports.forEach(bug -> {
  125. bug.setMasterId(mrMap.get(bug.getId()).getMasterId());
  126. });
  127. }
  128. allReports.forEach(bug->{
  129. String te = single2rootMap.get(bug.getId());
  130. bug.setTreeId(te==null?"null":te);
  131. bug.setStatus(bugIds2Data.get(bug.getId()).getStatus());
  132. bug.setReviewerId(bugIds2Data.get(bug.getId()).getReviewerId());
  133. });
  134. // 从json中获得的task数据保存到TaskDTO中返回
  135. TaskDTO task = taskService.getByExamIdAndCaseId(examId, caseId);
  136. String encodedUrl = taskService.getEncodeTaskReportUrl(examId, caseId) ;
  137. model.addAttribute("aggregated", aggregated);
  138. // allReport是ButDTO集合
  139. model.addAttribute("allReports", allReports);
  140. model.addAttribute("severity2String", ReportUtil.severity2String);
  141. model.addAttribute("recurrent2String", ReportUtil.recurrent2String);
  142. model.addAttribute("task", task);
  143. model.addAttribute("reviewMap", ReportUtil.reviewerMap);
  144. model.addAttribute("examId", examId);
  145. model.addAttribute("caseId", caseId);
  146. model.addAttribute("reportHost",reportHost);
  147. model.addAttribute("encodedUrl",encodedUrl);
  148. return "task_detail";
  149. }
  150. private void changeTime2Long ( Object input){
  151. JSONObject temp = (JSONObject) input;
  152. temp.put("create_time",new Timestamp(Long.parseLong(temp.get("create_time").toString()))); // 修改创建时间的格式 以便前段展示
  153. }
  154. @GetMapping("/addCrowdTask")
  155. public String addCrowdTask(Model model){
  156. model.addAttribute("templateUrl",useOss?"http://mooctest-site.oss-cn-shanghai.aliyuncs.com/excel-template.xlsx":urlPrefix+"excel-template.xlsx");
  157. return "addCrowdTask";
  158. }
  159. @GetMapping("/importTask")
  160. public String importTask(Model model){
  161. return "importTask";
  162. }
  163. @PostMapping("/addCrowdTask")
  164. @ResponseBody
  165. public SimpleResponse addCrowdTask2(@RequestParam("name")String name, @RequestParam("description")String description,
  166. @RequestParam("time")String time, @RequestParam("type")String type,
  167. @RequestParam("os")String os, @RequestParam("threePage") MultipartFile threePage,
  168. Model model){
  169. return taskService.addCrowdTask(name, description, time, type, os, threePage);
  170. }
  171. @PostMapping("/importTask")
  172. @ResponseBody
  173. public String importTask2(@RequestParam("number")String number,@RequestParam("number")String originId,
  174. @RequestParam("zipFile") MultipartFile zipFile,@RequestParam("jsonFile") MultipartFile jsonFile){
  175. return taskService.importTask(number, originId, zipFile, jsonFile)?"success":"导出失败";
  176. }
  177. @PostMapping("/exportTask")
  178. @ResponseBody
  179. public String exportTask(@RequestParam("caseId") String caseId) {
  180. return taskService.exportTask(caseId) ? "success" : "导出失败";
  181. }
  182. }