ReviewJobService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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. //是教育版则调用分配服务
  52. if(examId!=null&!examId.equals("")){
  53. try {
  54. invokeJobDistributionService(name, paperId, examId, singleTime, totalWorkload);
  55. } catch (Exception e) {
  56. jsonObject.put("status","fail");
  57. jsonObject.put("jobId","分配服务调用失败");
  58. return jsonObject;
  59. }
  60. }
  61. //默认分配
  62. if(workerDistribution.equals("")||workerDistribution.equals("[]")){
  63. List<String>workerIds=new ArrayList<>();
  64. for(int i=0;i<workerList.size();i++){
  65. String workerIndex=workerList.get(i);
  66. String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
  67. workerIds.add(workerId);
  68. }
  69. List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
  70. List<String>reportIds=new ArrayList<>();
  71. List<String>paperOriginalIds=new ArrayList<>();
  72. List<String>originalIds=new ArrayList<>();
  73. for(int i=0;i<reviewReports.size();i++) {
  74. ReviewReport reviewReport=reviewReports.get(i);
  75. reportIds.add(reviewReport.getId());
  76. originalIds.add(reviewReport.getOriginal_id());
  77. paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
  78. }
  79. groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
  80. System.out.println("job存储成功");
  81. }
  82. else {
  83. saveJobDistribution(workerDistribution, jobId);
  84. }
  85. jsonObject.put("status","success");
  86. jsonObject.put("jobId",jobId);
  87. return jsonObject;
  88. }
  89. private void invokeJobDistributionService(String name,String paperId,String examId,int singleTime,int totalWorkload) throws Exception{
  90. ReviewPaper reviewPaper=reviewPaperService.getPaper(paperId);
  91. String type=reviewPaper.getType();
  92. ReviewPaperJson reviewPaperJson=reviewPaperService.getReviewPaperJson(paperId);
  93. String json=reviewPaperJson.getJson();
  94. JSONObject jsonObject=new JSONObject(json);
  95. JSONArray reports= (JSONArray) jsonObject.get("report_list");
  96. JSONObject result=new JSONObject();
  97. result.put("taskName",name);
  98. result.put("type",type);
  99. result.put("singleTime",singleTime);
  100. result.put("totalWorkload",totalWorkload);
  101. result.put("reports",reports);
  102. String jobJson=result.toString();
  103. String invokeResult = HTTP.sendGet("http://129.211.26.227:8082/reportsDistribution/" + examId, jobJson);
  104. }
  105. private String checkJobDistribution(String workerDistribution){
  106. try {
  107. if(workerDistribution.equals("")||workerDistribution.equals("[]")){
  108. return "success";
  109. }
  110. JSONArray jsonArray=new JSONArray(workerDistribution);
  111. for(int i=0;i<jsonArray.length();i++){
  112. JSONObject jsonObject=jsonArray.getJSONObject(i);
  113. String name=jsonObject.getString("name");
  114. String desciption=jsonObject.getString("description");
  115. JSONArray jsonArray1=jsonObject.getJSONArray("worker");
  116. JSONArray jsonArray2=jsonObject.getJSONArray("report");
  117. }
  118. }catch (Exception e){
  119. return "分配信息不正确:"+e.getMessage();
  120. }
  121. return "success";
  122. }
  123. private void saveJobDistribution(String workerDistribution,String jobId){
  124. String paperId=jobDao.findJob(jobId).getPaper_id();
  125. JSONArray jsonArray=new JSONArray(workerDistribution);
  126. for(int i=0;i<jsonArray.length();i++){
  127. JSONObject jsonObject=jsonArray.getJSONObject(i);
  128. String name=jsonObject.getString("name");
  129. String desciption=jsonObject.getString("description");
  130. JSONArray jsonArray1=jsonObject.getJSONArray("worker");
  131. List<String>workerIds=new ArrayList<>();
  132. for(int j=0;j<jsonArray1.length();j++){
  133. workerIds.add(String.valueOf(jsonArray1.get(j)));
  134. }
  135. JSONArray jsonArray2=jsonObject.getJSONArray("report");
  136. List<String>reportIds=new ArrayList<>();
  137. List<String>paperOriginalIds=new ArrayList<>();
  138. List<String>originalIds=new ArrayList<>();
  139. for(int j=0;j<jsonArray2.length();j++){
  140. String originalId=String.valueOf(jsonArray2.get(j));
  141. String paperOriginalId=paperId+"-"+originalId;
  142. String reportId=reportDao.findReportByPaperOriginalId(paperId,originalId).getId();
  143. paperOriginalIds.add(paperOriginalId);
  144. reportIds.add(reportId);
  145. originalIds.add(originalId);
  146. }
  147. groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
  148. }
  149. }
  150. public MessageVO uploadJobByJson(JobJsonDTO jobJsonDTO){
  151. String jobName=jobJsonDTO.getJob_name();
  152. String jobDescription=jobJsonDTO.getJob_description();
  153. String startTime=jobJsonDTO.getStart_time();
  154. String endTime=jobJsonDTO.getEnd_time();
  155. String examId=jobJsonDTO.getExamId();
  156. String caseId=jobJsonDTO.getCaseId();
  157. JSONArray workerList_Array=new JSONArray(jobJsonDTO.getWorker_list());
  158. String paperUrl=jobJsonDTO.getPaperUrl();
  159. System.out.println("基本读取成功");
  160. List<String>workerList=new ArrayList<>();
  161. for(int i=0;i<workerList_Array.length();i++){
  162. workerList.add(String.valueOf(workerList_Array.get(i)));
  163. }
  164. MessageVO messageVO=new MessageVO();
  165. try {
  166. String paperJson=readStringFromUrl(paperUrl);
  167. JSONObject paperResult=reviewPaperService.uploadPaper(paperJson);
  168. System.out.println("paperJson拉成功");
  169. if(!paperResult.getString("status").equals("success")){
  170. messageVO.setStatus("500");
  171. messageVO.setMessage("创建paper失败");
  172. return messageVO;
  173. }
  174. String paperId=paperResult.getString("paperId");
  175. //是众测考试的话存对应的众测考试id
  176. if (examId!=null&&(!examId.equals(""))){
  177. crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId,examId+"-"+caseId,paperUrl));
  178. }
  179. List<ReviewReport>reports=reviewPaperService.getReportsByPaperId(paperId);
  180. List<String>reportIds=new ArrayList<>();
  181. for(int i=0;i<reports.size();i++){
  182. reportIds.add(reports.get(i).getId());
  183. }
  184. JSONObject jsonObject=uploadJob("",examId,caseId,jobName,jobDescription,paperId,startTime,endTime,0,0,workerList,"","",0);
  185. // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
  186. if(jsonObject.getString("status").equals("success")) {
  187. messageVO.setStatus("200");
  188. messageVO.setMessage(jsonObject.getString("jobId"));
  189. }
  190. else{
  191. messageVO.setStatus("500");
  192. messageVO.setMessage(jsonObject.getString("message"));
  193. }
  194. } catch (IOException e) {
  195. messageVO.setStatus("500");
  196. messageVO.setMessage(e.getMessage());
  197. }
  198. return messageVO;
  199. }
  200. 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){
  201. ReviewJob reviewJob=jobDao.findJob(jobId);
  202. reviewJob.setName(name);
  203. reviewJob.setDescription(description);
  204. reviewJob.setStart_time(startTime);
  205. reviewJob.setEnd_time(endTime);
  206. reviewJob.setMax_worker(maxWorker);
  207. jobDao.save(reviewJob);
  208. groupDao.removeByJob(jobId);
  209. reviewWorkerDao.removeByJob(jobId);
  210. JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,singleTime,totalWorkload,workerList,workerDistribution,groupId,maxWorker);
  211. return jsonObject1;
  212. }
  213. public boolean deleteJob(String jobId){
  214. try {
  215. jobDao.remove(jobId);
  216. groupDao.removeByJob(jobId);
  217. reviewWorkerDao.removeByJob(jobId);
  218. return true;
  219. } catch (Exception e) {
  220. e.printStackTrace();
  221. return false;
  222. }
  223. }
  224. public JSONArray getJobDistribution(String jobId){
  225. List<ReviewGroup>reviewGroups=groupDao.getGroupsByJob(jobId);
  226. JSONArray jsonArray=new JSONArray();
  227. for(int i=0;i<reviewGroups.size();i++){
  228. ReviewGroup reviewGroup=reviewGroups.get(i);
  229. JSONObject jsonObject=new JSONObject();
  230. jsonObject.put("name",reviewGroup.getName());
  231. jsonObject.put("description",reviewGroup.getDescription());
  232. jsonObject.put("worker",reviewGroup.getWorkers_id());
  233. jsonObject.put("report",reviewGroup.getOriginal_id());
  234. jsonArray.put(jsonObject);
  235. }
  236. return jsonArray;
  237. }
  238. public List<ReviewJob>getJobsByPaper(String paperId){
  239. return jobDao.findJobsByPaper(paperId);
  240. }
  241. public ReviewJob findJobByExamCase(String examId,String caseId){
  242. return jobDao.findJobByExamCase(examId, caseId);
  243. }
  244. }