ReviewJobService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package edu.nju.service;
  2. import edu.nju.dao.*;
  3. import edu.nju.entities.*;
  4. import edu.nju.model.JobJsonDTO;
  5. import edu.nju.model.MessageVO;
  6. import edu.nju.model.ReviewPaperVO;
  7. import edu.nju.util.HTTP;
  8. import org.json.JSONArray;
  9. import org.json.JSONObject;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.web.bind.annotation.RequestBody;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import java.io.IOException;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import static edu.nju.util.HTTP.readStringFromUrl;
  18. @Service
  19. public class ReviewJobService {
  20. @Autowired
  21. ReviewJobDao jobDao;
  22. @Autowired
  23. ReviewGroupDao groupDao;
  24. @Autowired
  25. ReviewReportDao reportDao;
  26. @Autowired
  27. ReviewWorkerDao reviewWorkerDao;
  28. @Autowired
  29. ReviewPaperService reviewPaperService;
  30. @Autowired
  31. CrowdSourceToReviewPaperDao crowdSourceToReviewPaperDao;
  32. public ReviewJob getJob(String job_id){
  33. return jobDao.findJob(job_id);
  34. }
  35. public List<ReviewJob> getJobs(){
  36. return jobDao.findJobs();
  37. }
  38. public JSONObject uploadJob(String jobId,String examId,String caseId,String name, String description, String paperId, String startTime, String endTime,int singleTime,int totalWorkload, List<String>workerList, String workerDistribution,String groupId,int maxWorker){
  39. JSONObject jsonObject=new JSONObject();
  40. // String checkResult=checkJobDistribution(workerDistribution);
  41. // if(!checkResult.equals("success")){
  42. // jsonObject.put("status","fail");
  43. // jsonObject.put("message",checkResult);
  44. // return jsonObject;
  45. // }
  46. //新建,否则是update
  47. if(jobId.equals("")) {
  48. ReviewJob newReviewJob = new ReviewJob(examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
  49. jobId = jobDao.save(newReviewJob);
  50. }
  51. else{
  52. ReviewJob newReviewJob = new ReviewJob(jobId,examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
  53. jobId = jobDao.save(newReviewJob);
  54. }
  55. List<String>workerIds=new ArrayList<>();
  56. for(int i=0;i<workerList.size();i++){
  57. String workerIndex=workerList.get(i);
  58. String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
  59. workerIds.add(workerId);
  60. }
  61. //是教育版则调用分配服务
  62. // if(examId!=null&!examId.equals("")){
  63. try {
  64. invokeJobDistributionService(name, paperId, jobId, singleTime, totalWorkload);
  65. } catch (Exception e) {
  66. jsonObject.put("status","fail");
  67. jsonObject.put("jobId","分配服务调用失败");
  68. return jsonObject;
  69. }
  70. // }
  71. // //默认分配
  72. // if(workerDistribution.equals("")||workerDistribution.equals("[]")){
  73. // List<String>workerIds=new ArrayList<>();
  74. // for(int i=0;i<workerList.size();i++){
  75. // String workerIndex=workerList.get(i);
  76. // String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
  77. // workerIds.add(workerId);
  78. // }
  79. // List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
  80. // List<String>reportIds=new ArrayList<>();
  81. // List<String>paperOriginalIds=new ArrayList<>();
  82. // List<String>originalIds=new ArrayList<>();
  83. // for(int i=0;i<reviewReports.size();i++) {
  84. // ReviewReport reviewReport=reviewReports.get(i);
  85. // reportIds.add(reviewReport.getId());
  86. // originalIds.add(reviewReport.getOriginal_id());
  87. // paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
  88. // }
  89. // groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
  90. // System.out.println("job存储成功");
  91. // }
  92. // else {
  93. // saveJobDistribution(workerDistribution, jobId);
  94. // }
  95. jsonObject.put("status","success");
  96. jsonObject.put("jobId",jobId);
  97. return jsonObject;
  98. }
  99. private void invokeJobDistributionService(String name,String paperId,String jobId,int singleTime,int totalWorkload) throws Exception{
  100. String url = "http://129.211.26.227:8082/reportsDistribution/"+ jobId;
  101. ReviewPaper reviewPaper=reviewPaperService.getPaper(paperId);
  102. String type=reviewPaper.getType();
  103. ReviewPaperJson reviewPaperJson=reviewPaperService.getReviewPaperJson(paperId);
  104. String json=reviewPaperJson.getJson();
  105. JSONObject jsonObject=new JSONObject(json);
  106. JSONArray reports= (JSONArray) jsonObject.get("report_list");
  107. JSONObject result=new JSONObject();
  108. result.put("taskName",name);
  109. result.put("type",type);
  110. result.put("singleTime",singleTime);
  111. result.put("totalWorkload",totalWorkload);
  112. result.put("reports",reports);
  113. String jobJson=result.toString();
  114. HTTP.postBody(url,jobJson);
  115. }
  116. // private String checkJobDistribution(String workerDistribution){
  117. // try {
  118. // if(workerDistribution.equals("")||workerDistribution.equals("[]")){
  119. // return "success";
  120. // }
  121. // JSONArray jsonArray=new JSONArray(workerDistribution);
  122. // for(int i=0;i<jsonArray.length();i++){
  123. // JSONObject jsonObject=jsonArray.getJSONObject(i);
  124. // String name=jsonObject.getString("name");
  125. // String desciption=jsonObject.getString("description");
  126. // JSONArray jsonArray1=jsonObject.getJSONArray("worker");
  127. // JSONArray jsonArray2=jsonObject.getJSONArray("report");
  128. // }
  129. // }catch (Exception e){
  130. // return "分配信息不正确:"+e.getMessage();
  131. // }
  132. // return "success";
  133. // }
  134. // private void saveJobDistribution(String workerDistribution,String jobId){
  135. // String paperId=jobDao.findJob(jobId).getPaper_id();
  136. // JSONArray jsonArray=new JSONArray(workerDistribution);
  137. // for(int i=0;i<jsonArray.length();i++){
  138. // JSONObject jsonObject=jsonArray.getJSONObject(i);
  139. // String name=jsonObject.getString("name");
  140. // String desciption=jsonObject.getString("description");
  141. // JSONArray jsonArray1=jsonObject.getJSONArray("worker");
  142. // List<String>workerIds=new ArrayList<>();
  143. // for(int j=0;j<jsonArray1.length();j++){
  144. // workerIds.add(String.valueOf(jsonArray1.get(j)));
  145. // }
  146. // JSONArray jsonArray2=jsonObject.getJSONArray("report");
  147. // List<String>reportIds=new ArrayList<>();
  148. // List<String>paperOriginalIds=new ArrayList<>();
  149. // List<String>originalIds=new ArrayList<>();
  150. // for(int j=0;j<jsonArray2.length();j++){
  151. // String originalId=String.valueOf(jsonArray2.get(j));
  152. // String paperOriginalId=paperId+"-"+originalId;
  153. // String reportId=reportDao.findReportByPaperOriginalId(paperId,originalId).getId();
  154. // paperOriginalIds.add(paperOriginalId);
  155. // reportIds.add(reportId);
  156. // originalIds.add(originalId);
  157. // }
  158. // groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
  159. // }
  160. // }
  161. public MessageVO uploadJobByJson(JobJsonDTO jobJsonDTO){
  162. MessageVO messageVO=new MessageVO();
  163. String jobName=jobJsonDTO.getJob_name();
  164. String jobDescription=jobJsonDTO.getJob_description();
  165. String startTime=jobJsonDTO.getStart_time();
  166. String endTime=jobJsonDTO.getEnd_time();
  167. String examId=jobJsonDTO.getExamId();
  168. String caseId=jobJsonDTO.getCaseId();
  169. JSONArray workerList_Array=new JSONArray(jobJsonDTO.getWorker_list());
  170. String paperUrl=jobJsonDTO.getPaperUrl();
  171. List<String>workerList=new ArrayList<>();
  172. for(int i=0;i<workerList_Array.length();i++){
  173. workerList.add(String.valueOf(workerList_Array.get(i)));
  174. }
  175. ReviewJob reviewJob=jobDao.findJobByExamCase(examId,caseId);
  176. if(reviewJob!=null){
  177. String id=reviewJob.getId();
  178. messageVO.setStatus("200");
  179. messageVO.setMessage(id);
  180. }
  181. else {
  182. try {
  183. String paperJson = readStringFromUrl(paperUrl);
  184. JSONObject paperResult = reviewPaperService.uploadPaper(paperJson);
  185. System.out.println("paperJson拉成功");
  186. if (!paperResult.getString("status").equals("success")) {
  187. messageVO.setStatus("500");
  188. messageVO.setMessage("创建paper失败");
  189. return messageVO;
  190. }
  191. String paperId = paperResult.getString("paperId");
  192. //是众测考试的话存对应的众测考试id
  193. if (examId != null && (!examId.equals(""))) {
  194. crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId, examId + "-" + caseId, paperUrl));
  195. }
  196. List<ReviewReport> reports = reviewPaperService.getReportsByPaperId(paperId);
  197. List<String> reportIds = new ArrayList<>();
  198. for (int i = 0; i < reports.size(); i++) {
  199. reportIds.add(reports.get(i).getId());
  200. }
  201. JSONObject jsonObject = uploadJob("", examId, caseId, jobName, jobDescription, paperId, startTime, endTime, 0, 0, workerList, "", "", 0);
  202. // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
  203. if (jsonObject.getString("status").equals("success")) {
  204. messageVO.setStatus("200");
  205. messageVO.setMessage(jsonObject.getString("jobId"));
  206. } else {
  207. messageVO.setStatus("500");
  208. messageVO.setMessage(jsonObject.getString("message"));
  209. }
  210. } catch (IOException e) {
  211. messageVO.setStatus("500");
  212. messageVO.setMessage(e.getMessage());
  213. }
  214. }
  215. return messageVO;
  216. }
  217. public JSONObject updateJob(String jobId,String name, String description, String paperId,String startTime, String endTime,int singleTime, int totalWorkload,List<String>workerList,String workerDistribution,String groupId,int maxWorker){
  218. ReviewJob reviewJob=jobDao.findJob(jobId);
  219. reviewJob.setName(name);
  220. reviewJob.setDescription(description);
  221. reviewJob.setStart_time(startTime);
  222. reviewJob.setEnd_time(endTime);
  223. reviewJob.setMax_worker(maxWorker);
  224. jobDao.save(reviewJob);
  225. groupDao.removeByJob(jobId);
  226. reviewWorkerDao.removeByJob(jobId);
  227. JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,singleTime,totalWorkload,workerList,workerDistribution,groupId,maxWorker);
  228. return jsonObject1;
  229. }
  230. public boolean deleteJob(String jobId){
  231. try {
  232. jobDao.remove(jobId);
  233. groupDao.removeByJob(jobId);
  234. reviewWorkerDao.removeByJob(jobId);
  235. return true;
  236. } catch (Exception e) {
  237. e.printStackTrace();
  238. return false;
  239. }
  240. }
  241. // public JSONArray getJobDistribution(String jobId){
  242. // List<ReviewGroup>reviewGroups=groupDao.getGroupsByJob(jobId);
  243. // JSONArray jsonArray=new JSONArray();
  244. // for(int i=0;i<reviewGroups.size();i++){
  245. // ReviewGroup reviewGroup=reviewGroups.get(i);
  246. // JSONObject jsonObject=new JSONObject();
  247. // jsonObject.put("name",reviewGroup.getName());
  248. // jsonObject.put("description",reviewGroup.getDescription());
  249. // jsonObject.put("worker",reviewGroup.getWorkers_id());
  250. // jsonObject.put("report",reviewGroup.getOriginal_id());
  251. // jsonArray.put(jsonObject);
  252. // }
  253. // return jsonArray;
  254. //
  255. // }
  256. public List<ReviewJob>getJobsByPaper(String paperId){
  257. return jobDao.findJobsByPaper(paperId);
  258. }
  259. public ReviewJob findJobByExamCase(String examId,String caseId){
  260. return jobDao.findJobByExamCase(examId, caseId);
  261. }
  262. }