ReviewJobService.java 10 KB

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