ReviewJobService.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  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. List<String>workerList=new ArrayList<>();
  131. for(int i=0;i<workerList_Array.length();i++){
  132. workerList.add(String.valueOf(workerList_Array.get(i)));
  133. }
  134. MessageVO messageVO=new MessageVO();
  135. ReviewJob reviewJob=findJobByExamCase(examId,caseId);
  136. JSONObject jsonObject=null;
  137. try {
  138. if(reviewJob!=null){
  139. reviewPaperService.delPaper(reviewJob.getPaper_id());
  140. }
  141. String paperJson=readStringFromUrl(paperUrl);
  142. JSONObject paperResult=reviewPaperService.uploadPaper(paperJson);
  143. System.out.println("paperJson拉成功");
  144. if(!paperResult.getString("status").equals("success")) {
  145. messageVO.setStatus("500");
  146. messageVO.setMessage("创建paper失败");
  147. return messageVO;
  148. }
  149. String paperId=paperResult.getString("paperId");
  150. //是众测考试的话存对应的众测考试id
  151. if (examId!=null&&(!examId.equals(""))){
  152. crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId,examId+"-"+caseId,paperUrl));
  153. }
  154. if(reviewJob==null) {
  155. jsonObject = uploadJob("", examId, caseId, jobName, jobDescription, paperId, startTime, endTime, 0, 0, workerList, "", 0);
  156. }
  157. else{
  158. reviewPaperService.delPaper(reviewJob.getPaper_id());
  159. jsonObject = updateJob(reviewJob.getId(), jobName,jobDescription,paperId,startTime,endTime,0, 0, workerList, "", 0);
  160. }
  161. // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
  162. if(jsonObject.getString("status").equals("success")) {
  163. messageVO.setStatus("200");
  164. messageVO.setMessage(jsonObject.getString("jobId"));
  165. }
  166. else{
  167. messageVO.setStatus("500");
  168. messageVO.setMessage(jsonObject.getString("message"));
  169. }
  170. } catch (IOException e) {
  171. messageVO.setStatus("500");
  172. messageVO.setMessage(e.getMessage());
  173. }
  174. return messageVO;
  175. }
  176. 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){
  177. ReviewJob reviewJob=jobDao.findJob(jobId);
  178. reviewJob.setName(name);
  179. reviewJob.setDescription(description);
  180. reviewJob.setStart_time(startTime);
  181. reviewJob.setEnd_time(endTime);
  182. reviewJob.setMax_worker(maxWorker);
  183. reviewJob.setPaper_id(paperId);
  184. jobDao.save(reviewJob);
  185. groupDao.removeByJob(jobId);
  186. reviewWorkerDao.removeByJob(jobId);
  187. JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,singleTime,totalWorkload,workerList,workerDistribution,maxWorker);
  188. return jsonObject1;
  189. }
  190. public boolean deleteJob(String jobId){
  191. try {
  192. jobDao.remove(jobId);
  193. groupDao.removeByJob(jobId);
  194. reviewWorkerDao.removeByJob(jobId);
  195. return true;
  196. } catch (Exception e) {
  197. e.printStackTrace();
  198. return false;
  199. }
  200. }
  201. public JSONArray getJobDistribution(String jobId){
  202. List<ReviewGroup>reviewGroups=groupDao.getGroupsByJob(jobId);
  203. JSONArray jsonArray=new JSONArray();
  204. for(int i=0;i<reviewGroups.size();i++){
  205. ReviewGroup reviewGroup=reviewGroups.get(i);
  206. JSONObject jsonObject=new JSONObject();
  207. jsonObject.put("name",reviewGroup.getName());
  208. jsonObject.put("description",reviewGroup.getDescription());
  209. jsonObject.put("worker",reviewGroup.getWorkers_id());
  210. jsonObject.put("report",reviewGroup.getOriginal_id());
  211. jsonArray.put(jsonObject);
  212. }
  213. return jsonArray;
  214. }
  215. public List<ReviewJob>getJobsByPaper(String paperId){
  216. return jobDao.findJobsByPaper(paperId);
  217. }
  218. public ReviewJob findJobByExamCase(String examId,String caseId){
  219. return jobDao.findJobByExamCase(examId, caseId);
  220. }
  221. public List<ReviewJob>getJobsByExam(String examId){
  222. return jobDao.findJobsByExam(examId);
  223. }
  224. }