BlockChainAspect.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package edu.nju.util;
  2. import edu.nju.dao.BugDao;
  3. import edu.nju.dao.ReportDao;
  4. import edu.nju.dao.StuInfoDao;
  5. import edu.nju.dao.TaskDao;
  6. import edu.nju.entities.Bug;
  7. import edu.nju.entities.Report;
  8. import edu.nju.entities.StuInfo;
  9. import edu.nju.entities.Task;
  10. import org.aspectj.lang.JoinPoint;
  11. import org.aspectj.lang.ProceedingJoinPoint;
  12. import org.aspectj.lang.annotation.*;
  13. import org.json.JSONArray;
  14. import org.json.JSONObject;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.util.List;
  19. /**
  20. * @Author JiaWei Xu
  21. * @Date 2020-01-03 16:43
  22. * @Email xjwhhh233@outlook.com
  23. */
  24. @Aspect
  25. @Component
  26. public class BlockChainAspect {
  27. @Autowired
  28. BugDao bugDao;
  29. @Autowired
  30. ReportDao reportDao;
  31. @Autowired
  32. TaskDao taskDao;
  33. @Autowired
  34. StuInfoDao stuInfoDao;
  35. private static final String blockChainHost="http://111.231.68.200:8082/";
  36. /**
  37. * 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
  38. *通过@Pointcut注解声明频繁使用的切点表达式
  39. */
  40. @Pointcut("execution(public * edu.nju.controller.UploadController.submit(..))")
  41. public void bugSubmit(){
  42. }
  43. @Pointcut("execution(public * edu.nju.controller.AnalyzeController.saveGrade(..))")
  44. public void saveBugGrade(){
  45. }
  46. /**
  47. * @description 保存bug分数后传递给区块链
  48. */
  49. @AfterReturning(value="saveBugGrade()",returning = "keys")
  50. public void doAfterReturningSaveBugGrade(JoinPoint joinPoint,Object keys){
  51. System.out.println("传递给区块链");
  52. Object[] obj = joinPoint.getArgs();
  53. for (Object argItem : obj) {
  54. System.out.println("---->now-->argItem:" + argItem);
  55. }
  56. //todo 将该信息传递给区块链服务
  57. //任务ID、缺陷报告ID、分数、报告评审人ID
  58. String bugId= (String) obj[0];
  59. String grade=(String) obj[1];
  60. Bug bug=bugDao.findByid(bugId);
  61. Report report=reportDao.findById(bug.getReport_id());
  62. String defaultString="default";
  63. JSONObject bugReviewVO=new JSONObject();
  64. if(report==null){
  65. bugReviewVO.put("bugReportId",bugId);
  66. bugReviewVO.put("bugReportScore",Integer.parseInt(grade));
  67. bugReviewVO.put("reportViewer",defaultString);
  68. bugReviewVO.put("taskId",defaultString);
  69. bugReviewVO.put("taskName",defaultString);
  70. bugReviewVO.put("testReportId",defaultString);
  71. bugReviewVO.put("type",0);
  72. bugReviewVO.put("updateTime",System.currentTimeMillis());
  73. }else{
  74. bugReviewVO.put("bugReportId",bugId);
  75. bugReviewVO.put("bugReportScore",Integer.parseInt(grade));
  76. bugReviewVO.put("reportViewer",defaultString);
  77. bugReviewVO.put("taskId",report.getCase_take_id());
  78. Task task=taskDao.findById(report.getTask_id());
  79. if(task==null){
  80. task=getAndSaveTaskInfo(report.getTask_id());
  81. if(task==null){
  82. bugReviewVO.put("taskName",defaultString);
  83. }else{
  84. bugReviewVO.put("taskName",task.getName());
  85. }
  86. }else {
  87. bugReviewVO.put("taskName",task.getName());
  88. }
  89. bugReviewVO.put("testReportId",report.getId());
  90. bugReviewVO.put("type",0);
  91. bugReviewVO.put("updateTime",System.currentTimeMillis());
  92. }
  93. // System.out.println(bugReviewVO);
  94. String url=blockChainHost+"reportReview";
  95. try {
  96. String result = HTTP.postBody(url, bugReviewVO.toString());
  97. if (!result.equals("")) {
  98. JSONObject resultJson = new JSONObject(result);
  99. System.out.println(resultJson);
  100. }
  101. }catch (Exception e){
  102. e.printStackTrace();
  103. }
  104. }
  105. private Task getAndSaveTaskInfo(String id){
  106. String result = HTTP.sendGet("http://www.mooctest.net/api/exam/" + id + "/info", "");
  107. if (!"".equals(result)) {
  108. JSONObject json = new JSONObject(result);
  109. long beginTime = json.getLong("beginTime");
  110. long endTime = json.getLong("endTime");
  111. String name=json.getString("name");
  112. double totalMins = (endTime - beginTime) / 1000 / 60.0;
  113. Task newTask = new Task(id, name,beginTime, endTime, totalMins, totalMins);
  114. taskDao.save(newTask);
  115. return newTask;
  116. }else{
  117. return null;
  118. }
  119. }
  120. //将一场众测的所有报告上传至区块链
  121. public void uploadTestReportInfo(String case_take_id){
  122. String defaultString="defaultString";
  123. List<Report> reportList=reportDao.findByCaseTakeId(case_take_id);
  124. if(reportList!=null){
  125. for(Report report:reportList){
  126. JSONObject testReportVO=new JSONObject();
  127. testReportVO.put("reportHash",defaultString);
  128. testReportVO.put("taskId",report.getCase_take_id());
  129. Task task=taskDao.findById(report.getTask_id());
  130. if(task==null){
  131. task=getAndSaveTaskInfo(report.getTask_id());
  132. if(task==null){
  133. testReportVO.put("taskName",defaultString);
  134. }else{
  135. testReportVO.put("taskName",task.getName());
  136. }
  137. }else {
  138. testReportVO.put("taskName",task.getName());
  139. }
  140. testReportVO.put("testReportId",report.getId());
  141. testReportVO.put("testReportName",report.getName());
  142. testReportVO.put("type",0);
  143. testReportVO.put("updateTime",System.currentTimeMillis());
  144. testReportVO.put("workerId",report.getWorker_id());
  145. String workerName=stuInfoDao.findWorkerName(report.getId());
  146. if(!"null".equals(workerName)){
  147. testReportVO.put("workerName",workerName);
  148. }else{
  149. testReportVO.put("workerName",defaultString);
  150. }
  151. List<Bug> bugList=bugDao.findByReport(report.getId(),case_take_id);
  152. JSONArray bugReportList=new JSONArray();
  153. for(Bug bug:bugList){
  154. JSONObject bugInfo=new JSONObject();
  155. bugInfo.put("bugId",bug.getId());
  156. bugInfo.put("bugName",bug.getTitle());
  157. bugReportList.put(bugInfo);
  158. }
  159. testReportVO.put("bugReportList",bugReportList);
  160. // System.out.println(testReportVO);
  161. String url=blockChainHost+"testReport";
  162. try {
  163. String result = HTTP.postBody(url, testReportVO.toString());
  164. // if (!result.equals("")) {
  165. // JSONObject resultJson = new JSONObject(result);
  166. // System.out.println(resultJson);
  167. // }
  168. }catch (Exception e){
  169. e.printStackTrace();
  170. }
  171. }
  172. }
  173. }
  174. // public static void main(String[] args){
  175. // String url=blockChainHost+"testReport";
  176. //// String json="{\"workerId\":\"22383\",\"reportHash\":\"defaultString\",\"taskName\":\"12-1众包测试\",\"updateTime\":1585284050330,\"type\":0,\"workerName\":\"李陈龙\",\"testReportName\":\"宋少行\",\"taskId\":\"1281-2724\",\"testReportId\":\"5cbc1a9f825a8960cdc7bd4f\",\"bugReportList\":[{\"bugId\":\"5cbc1b5c825a8960cdc7bd53\",\"bugName\":\"我再测试测试这个单独分离的\"},{\"bugId\":\"5cbc1b37825a8960cdc7bd52\",\"bugName\":\"帮助出错了\"},{\"bugId\":\"5cbc38f9825a8960cdc7bd57\",\"bugName\":\"测试图片能不能上传\"},{\"bugId\":\"5cbc1d31825a8960cdc7bd54\",\"bugName\":\"无法打开最近账薄\"},{\"bugId\":\"5cbc3919825a8960cdc7bd58\",\"bugName\":\"测试图片\"},{\"bugId\":\"5cbc3ab3825a8960cdc7bd5a\",\"bugName\":\"测试fork\"},{\"bugId\":\"5cbc3a50825a8960cdc7bd59\",\"bugName\":\"测试图片上传\"},{\"bugId\":\"5cbc3e9b825a8960cdc7bd5b\",\"bugName\":\"测试一键fork\"},{\"bugId\":\"5cde9be7825a8948e757cac1\",\"bugName\":\"测试下不选择页面会咋样\"},{\"bugId\":\"5cdfa0cc825a8948e757cade\",\"bugName\":\"打开一下就闪退了\"},{\"bugId\":\"5d402ef3f00e7a801b85e472\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1ac33c5a507c1c1cda33\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1b003c5a507c1c1cda37\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1c363c5a507c60f0766d\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1d3a3c5a507c9120b76a\",\"bugName\":\"test\"},{\"bugId\":\"5d7e1e1b3c5a507c9120b76f\",\"bugName\":\"继续测试\"},{\"bugId\":\"5d7f4254f52b558caaaee01a\",\"bugName\":\"11\"},{\"bugId\":\"5d7f42e1f52b558cecef1ffd\",\"bugName\":\"222\"},{\"bugId\":\"5dd761e307bcfb195d0dfe56\",\"bugName\":\"test\"},{\"bugId\":\"5df8a2a2eea9d780220b1b24\",\"bugName\":\"mm\"},{\"bugId\":\"5df8af01eea9d78664436920\",\"bugName\":\"kkkkk\"},{\"bugId\":\"5df9e097336bd0ad48b598b2\",\"bugName\":\"cninvorm o\"},{\"bugId\":\"5e463a89709308afcfb15a2c\",\"bugName\":\"。。。。\"}]}";
  177. //// String json="{\"workerId\":\"22383\",\"reportHash\":\"defaultString\",\"taskName\":\"12-1众包测试\",\"updateTime\":1585284050330,\"type\":0,\"workerName\":\"李陈龙\",\"testReportName\":\"宋少行\",\"taskId\":\"1281-2724\",\"testReportId\":\"5cbc1a9f825a8960cdc7bd4f\",\"bugReportList\":[{\"bugId\":\"5cbc1b5c825a8960cdc7bd53\",\"bugName\":\"我再测试测试这个单独分离的\"},{\"bugId\":\"5cbc1b37825a8960cdc7bd52\",\"bugName\":\"帮助出错了\"},{\"bugId\":\"5cbc38f9825a8960cdc7bd57\",\"bugName\":\"测试图片能不能上传\"},{\"bugId\":\"5cbc1d31825a8960cdc7bd54\",\"bugName\":\"无法打开最近账薄\"},{\"bugId\":\"5cbc3919825a8960cdc7bd58\",\"bugName\":\"测试图片\"},{\"bugId\":\"5cbc3ab3825a8960cdc7bd5a\",\"bugName\":\"测试fork\"},{\"bugId\":\"5cbc3a50825a8960cdc7bd59\",\"bugName\":\"测试图片上传\"},{\"bugId\":\"5cbc3e9b825a8960cdc7bd5b\",\"bugName\":\"测试一键fork\"},{\"bugId\":\"5cde9be7825a8948e757cac1\",\"bugName\":\"测试下不选择页面会咋样\"},{\"bugId\":\"5cdfa0cc825a8948e757cade\",\"bugName\":\"打开一下就闪退了\"},{\"bugId\":\"5d402ef3f00e7a801b85e472\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1ac33c5a507c1c1cda33\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1b003c5a507c1c1cda37\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1c363c5a507c60f0766d\",\"bugName\":\"账薄有问题\"},{\"bugId\":\"5d7e1d3a3c5a507c9120b76a\",\"bugName\":\"test\"},{\"bugId\":\"5d7e1e1b3c5a507c9120b76f\",\"bugName\":\"继续测试\"},{\"bugId\":\"5d7f4254f52b558caaaee01a\",\"bugName\":\"11\"},{\"bugId\":\"5d7f42e1f52b558cecef1ffd\",\"bugName\":\"222\"},{\"bugId\":\"5dd761e307bcfb195d0dfe56\",\"bugName\":\"test\"},{\"bugId\":\"5df8a2a2eea9d780220b1b24\",\"bugName\":\"mm\"},{\"bugId\":\"5df8af01eea9d78664436920\",\"bugName\":\"kkkkk\"},{\"bugId\":\"5df9e097336bd0ad48b598b2\",\"bugName\":\"cninvorm o\"},{\"bugId\":\"5e463a89709308afcfb15a2c\",\"bugName\":\"。。。。\"}]}";
  178. // String json="{\n" +
  179. // " \"bugReportList\": [\n" +
  180. // " {\n" +
  181. // " \"bugId\": \"string\",\n" +
  182. // " \"bugName\": \"string\"\n" +
  183. // " },\n" +
  184. // " {\n" +
  185. // " \"bugId\": \"string\",\n" +
  186. // " \"bugName\": \"string\"\n" +
  187. // " }\n" +
  188. // "\n" +
  189. // " ],\n" +
  190. // " \"reportHash\": \"string\",\n" +
  191. // " \"taskId\": \"string\",\n" +
  192. // " \"taskName\": \"string\",\n" +
  193. // " \"testReportId\": \"string\",\n" +
  194. // " \"testReportName\": \"string\",\n" +
  195. // " \"type\": 0,\n" +
  196. // " \"updateTime\": 0,\n" +
  197. // " \"workerId\": \"string\",\n" +
  198. // " \"workerName\": \"string\"\n" +
  199. // "}";
  200. // try {
  201. // String result = HTTP.postBody(url, json);
  202. // if(!result.equals("")){
  203. // JSONObject resultJson = new JSONObject(result);
  204. // System.out.println(resultJson);
  205. // }
  206. // }catch (Exception e){
  207. // e.printStackTrace();
  208. // }
  209. //
  210. // }
  211. }