BlockChainAspect.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  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.beans.factory.annotation.Value;
  17. import org.springframework.stereotype.Component;
  18. import javax.servlet.http.HttpServletResponse;
  19. import java.util.List;
  20. /**
  21. * @Author JiaWei Xu
  22. * @Date 2020-01-03 16:43
  23. * @Email xjwhhh233@outlook.com
  24. */
  25. @Aspect
  26. @Component
  27. public class BlockChainAspect {
  28. @Autowired
  29. BugDao bugDao;
  30. @Autowired
  31. ReportDao reportDao;
  32. @Autowired
  33. TaskDao taskDao;
  34. @Autowired
  35. StuInfoDao stuInfoDao;
  36. private static final String blockChainHost="http://111.231.68.200:8082/";
  37. @Value("${mooctest.url}")
  38. private String MOOCTEST_HOST;
  39. /**
  40. * 定义切入点,切入点为com.example.demo.aop.AopController中的所有函数
  41. *通过@Pointcut注解声明频繁使用的切点表达式
  42. */
  43. @Pointcut("execution(public * edu.nju.controller.UploadController.submit(..))")
  44. public void bugSubmit(){
  45. }
  46. @Pointcut("execution(public * edu.nju.controller.AnalyzeController.saveGrade(..))")
  47. public void saveBugGrade(){
  48. }
  49. /**
  50. * @description 保存bug分数后传递给区块链
  51. */
  52. @AfterReturning(value="saveBugGrade()",returning = "keys")
  53. public void doAfterReturningSaveBugGrade(JoinPoint joinPoint,Object keys){
  54. System.out.println("传递给区块链");
  55. Object[] obj = joinPoint.getArgs();
  56. for (Object argItem : obj) {
  57. System.out.println("---->now-->argItem:" + argItem);
  58. }
  59. //todo 将该信息传递给区块链服务
  60. //任务ID、缺陷报告ID、分数、报告评审人ID
  61. String bugId= (String) obj[0];
  62. String grade=(String) obj[1];
  63. Bug bug=bugDao.findByid(bugId);
  64. Report report=reportDao.findById(bug.getReport_id());
  65. String defaultString="慕测管理员";
  66. JSONObject bugReviewVO=new JSONObject();
  67. if(report==null){
  68. bugReviewVO.put("bugReportId",bugId);
  69. bugReviewVO.put("bugReportScore",Integer.parseInt(grade));
  70. bugReviewVO.put("reportReviewer",defaultString);
  71. bugReviewVO.put("taskId",defaultString);
  72. bugReviewVO.put("taskName",defaultString);
  73. bugReviewVO.put("testReportId",defaultString);
  74. bugReviewVO.put("type",0);
  75. bugReviewVO.put("updateTime",System.currentTimeMillis());
  76. }else{
  77. bugReviewVO.put("bugReportId",bugId);
  78. bugReviewVO.put("bugReportScore",Integer.parseInt(grade));
  79. bugReviewVO.put("reportReviewer",defaultString);
  80. bugReviewVO.put("taskId",report.getCase_take_id());
  81. Task task=taskDao.findById(report.getTask_id());
  82. if(task==null){
  83. task=getAndSaveTaskInfo(report.getTask_id());
  84. if(task==null){
  85. bugReviewVO.put("taskName",defaultString);
  86. }else{
  87. bugReviewVO.put("taskName",task.getName());
  88. }
  89. }else {
  90. bugReviewVO.put("taskName",task.getName());
  91. }
  92. bugReviewVO.put("testReportId",report.getId());
  93. bugReviewVO.put("type",0);
  94. bugReviewVO.put("updateTime",System.currentTimeMillis());
  95. }
  96. // System.out.println(bugReviewVO);
  97. String url=blockChainHost+"reportReview";
  98. try {
  99. String result = HTTP.postBody(url, bugReviewVO.toString());
  100. if (!result.equals("")) {
  101. JSONObject resultJson = new JSONObject(result);
  102. System.out.println(resultJson);
  103. }
  104. }catch (Exception e){
  105. e.printStackTrace();
  106. }
  107. }
  108. private Task getAndSaveTaskInfo(String id){
  109. String result = HTTP.sendGet(MOOCTEST_HOST+"/api/exam/" + id + "/info", "");
  110. if (!"".equals(result)) {
  111. JSONObject json = new JSONObject(result);
  112. long beginTime = json.getLong("beginTime");
  113. long endTime = json.getLong("endTime");
  114. String name=json.getString("name");
  115. double totalMins = (endTime - beginTime) / 1000 / 60.0;
  116. Task newTask = new Task(id, name,beginTime, endTime, totalMins, totalMins);
  117. taskDao.save(newTask);
  118. return newTask;
  119. }else{
  120. return null;
  121. }
  122. }
  123. //将一场众测的所有报告上传至区块链
  124. public void uploadTestReportInfo(String case_take_id){
  125. String defaultString="defaultString";
  126. List<Report> reportList=reportDao.findByCaseTakeId(case_take_id);
  127. if(reportList!=null){
  128. for(Report report:reportList){
  129. JSONObject testReportVO=new JSONObject();
  130. testReportVO.put("reportHash",defaultString);
  131. testReportVO.put("taskId",report.getCase_take_id());
  132. Task task=taskDao.findById(report.getTask_id());
  133. if(task==null){
  134. task=getAndSaveTaskInfo(report.getTask_id());
  135. if(task==null){
  136. testReportVO.put("taskName",defaultString);
  137. }else{
  138. testReportVO.put("taskName",task.getName());
  139. }
  140. }else {
  141. testReportVO.put("taskName",task.getName());
  142. }
  143. testReportVO.put("testReportId",report.getId());
  144. testReportVO.put("testReportName",report.getName());
  145. testReportVO.put("type",0);
  146. testReportVO.put("updateTime",System.currentTimeMillis());
  147. testReportVO.put("workerId",report.getWorker_id());
  148. String workerName=stuInfoDao.findWorkerName(report.getId());
  149. if(!"null".equals(workerName)){
  150. testReportVO.put("workerName",workerName);
  151. }else{
  152. testReportVO.put("workerName",defaultString);
  153. }
  154. List<Bug> bugList=bugDao.findByReport(report.getId(),case_take_id);
  155. JSONArray bugReportList=new JSONArray();
  156. for(Bug bug:bugList){
  157. JSONObject bugInfo=new JSONObject();
  158. bugInfo.put("bugId",bug.getId());
  159. bugInfo.put("bugName",bug.getTitle());
  160. bugReportList.put(bugInfo);
  161. }
  162. testReportVO.put("bugReportList",bugReportList);
  163. // System.out.println(testReportVO);
  164. String url=blockChainHost+"testReport";
  165. try {
  166. String result = HTTP.postBody(url, testReportVO.toString());
  167. // if (!result.equals("")) {
  168. // JSONObject resultJson = new JSONObject(result);
  169. // System.out.println(resultJson);
  170. // }
  171. }catch (Exception e){
  172. e.printStackTrace();
  173. }
  174. }
  175. }
  176. }
  177. public boolean uploadTestReportInfoToBlockChain(String bug_id){
  178. Bug bug=bugDao.findByid(bug_id);
  179. String report_id=bug.getReport_id();
  180. String defaultString="defaultString";
  181. Report report=reportDao.findById(report_id);
  182. if(report!=null) {
  183. JSONObject testReportVO = new JSONObject();
  184. testReportVO.put("reportHash", defaultString);
  185. testReportVO.put("taskId", report.getCase_take_id());
  186. Task task = taskDao.findById(report.getTask_id());
  187. if (task == null) {
  188. task = getAndSaveTaskInfo(report.getTask_id());
  189. if (task == null) {
  190. testReportVO.put("taskName", defaultString);
  191. } else {
  192. testReportVO.put("taskName", task.getName());
  193. }
  194. } else {
  195. testReportVO.put("taskName", task.getName());
  196. }
  197. testReportVO.put("testReportId", report.getId());
  198. testReportVO.put("testReportName", report.getName());
  199. testReportVO.put("type", 0);
  200. testReportVO.put("updateTime", System.currentTimeMillis());
  201. testReportVO.put("workerId", report.getWorker_id());
  202. String workerName = stuInfoDao.findWorkerName(report.getId());
  203. if (!"null".equals(workerName)) {
  204. testReportVO.put("workerName", workerName);
  205. } else {
  206. testReportVO.put("workerName", defaultString);
  207. }
  208. List<Bug> bugList = bugDao.findByReport(report.getId(), report.getCase_take_id());
  209. JSONArray bugReportList = new JSONArray();
  210. JSONObject bugInfo = new JSONObject();
  211. bugInfo.put("bugId", bug.getId());
  212. bugInfo.put("bugName", bug.getTitle());
  213. bugReportList.put(bugInfo);
  214. testReportVO.put("bugReportList", bugReportList);
  215. String url = blockChainHost + "testReport";
  216. try {
  217. String result = HTTP.postBody(url, testReportVO.toString());
  218. if (!result.equals("")) {
  219. JSONObject resultJson = new JSONObject(result);
  220. // System.out.println(resultJson);
  221. // System.out.println(resultJson.get("code").toString());
  222. if("200".equals(resultJson.get("code").toString())){
  223. return true;
  224. }else{
  225. return false;
  226. }
  227. }
  228. } catch (Exception e) {
  229. e.printStackTrace();
  230. }
  231. }
  232. return false;
  233. }
  234. // public static void main(String[] args){
  235. // String url=blockChainHost+"testReport";
  236. //// 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\":\"。。。。\"}]}";
  237. //// 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\":\"。。。。\"}]}";
  238. // String json="{\n" +
  239. // " \"bugReportList\": [\n" +
  240. // " {\n" +
  241. // " \"bugId\": \"string\",\n" +
  242. // " \"bugName\": \"string\"\n" +
  243. // " },\n" +
  244. // " {\n" +
  245. // " \"bugId\": \"string\",\n" +
  246. // " \"bugName\": \"string\"\n" +
  247. // " }\n" +
  248. // "\n" +
  249. // " ],\n" +
  250. // " \"reportHash\": \"string\",\n" +
  251. // " \"taskId\": \"string\",\n" +
  252. // " \"taskName\": \"string\",\n" +
  253. // " \"testReportId\": \"string\",\n" +
  254. // " \"testReportName\": \"string\",\n" +
  255. // " \"type\": 0,\n" +
  256. // " \"updateTime\": 0,\n" +
  257. // " \"workerId\": \"string\",\n" +
  258. // " \"workerName\": \"string\"\n" +
  259. // "}";
  260. // try {
  261. // String result = HTTP.postBody(url, json);
  262. // if(!result.equals("")){
  263. // JSONObject resultJson = new JSONObject(result);
  264. // System.out.println(resultJson);
  265. // }
  266. // }catch (Exception e){
  267. // e.printStackTrace();
  268. // }
  269. //
  270. // }
  271. }