ReviewPaperService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. package edu.nju.service;
  2. import edu.nju.dao.*;
  3. import edu.nju.entities.*;
  4. import edu.nju.model.CrowdReviewReportDTO;
  5. import edu.nju.model.CrowdReviewReportVO;
  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 java.util.*;
  12. @Service
  13. public class ReviewPaperService {
  14. @Autowired
  15. ReviewJobDao jobDao;
  16. @Autowired
  17. ReviewItemDao itemDao;
  18. @Autowired
  19. ReviewAnswerDao answerDao;
  20. @Autowired
  21. ReviewService reviewService;
  22. @Autowired
  23. ReviewReportDao reviewReportDao;
  24. @Autowired
  25. ReviewPaperJsonDao reviewPaperJsonDao;
  26. @Autowired
  27. ReviewPaperDao reviewPaperDao;
  28. @Autowired
  29. ReviewJobDao reviewJobDao;
  30. @Autowired
  31. ReviewWorkerDao reviewWorkerDao;
  32. public ReviewPaperJson getReviewPaperJson(String paper_id) {
  33. return reviewPaperJsonDao.findJsonByPaper(paper_id);
  34. }
  35. public ReviewPaper getPaper(String paper_id){
  36. return reviewPaperDao.findPaper(paper_id);
  37. }
  38. public List<ReviewReport> getReportsByPaperId(String paper_id){
  39. return reviewReportDao.getReportsByPaperId(paper_id);
  40. }
  41. public List<ReviewPaper> getPapers(){
  42. return reviewPaperDao.findPapers();
  43. }
  44. public CrowdReviewReportVO uploadReport(CrowdReviewReportDTO crowdReviewReportDTO){
  45. JSONArray reportArray= new JSONObject(crowdReviewReportDTO).getJSONArray("crowdReviewReportItems");
  46. try {
  47. String paperId = reviewPaperDao.save(new ReviewPaper());
  48. String paperJson=initPaperJson(reportArray);
  49. reviewPaperJsonDao.save(new ReviewPaperJson(paperId,paperJson));
  50. for (int i = 0; i < reportArray.length(); i++) {
  51. JSONObject reportObject = reportArray.getJSONObject(i);
  52. saveReport(reportObject, paperId);
  53. }
  54. String testUrl="http://47.99.140.117:9090/changeAuditTask?id=";
  55. return new CrowdReviewReportVO("success",testUrl+paperId);
  56. // object.put("status","success");
  57. // object.put("paperId",paperId);
  58. // object.put("url",testUrl+paperId);
  59. } catch (Exception e) {
  60. return new CrowdReviewReportVO("fail",e.getMessage());
  61. // object.put("status","fail");
  62. // object.put("message",e.getMessage());
  63. }
  64. // return object;
  65. }
  66. private String initPaperJson(JSONArray reportArray) throws Exception{
  67. try {
  68. JSONObject object=new JSONObject();
  69. object.put("description","");
  70. object.put("name","");
  71. object.put("create_time","");
  72. object.put("type","");
  73. object.put("application_url","");
  74. object.put("requirement_url","");
  75. object.put("report_list",reportArray);
  76. object.put("item_group_list",new JSONArray());
  77. return object.toString();
  78. }catch (Exception e){
  79. throw new Exception(e.getMessage());
  80. }
  81. }
  82. public JSONObject uploadPaper(String paperJson){
  83. JSONObject object = new JSONObject();
  84. String result=checkPaper(paperJson);
  85. if(!result.equals("success")){
  86. object.put("status","fail");
  87. object.put("message",result);
  88. return object;
  89. }
  90. try {
  91. JSONObject jsonObject = new JSONObject(paperJson);
  92. ReviewPaperVO reviewPaperVO = getReviewPaperVO(jsonObject);
  93. ReviewPaper reviewPaper = new ReviewPaper(reviewPaperVO);
  94. String paperId=reviewPaperDao.save(reviewPaper);
  95. reviewPaperJsonDao.save(new ReviewPaperJson(paperId,paperJson));
  96. saveReportAndItem(paperId, jsonObject);
  97. object.put("status","success");
  98. object.put("paperId",paperId);
  99. }catch (Exception e){
  100. object.put("status","fail");
  101. object.put("message",e.getMessage());
  102. }
  103. return object;
  104. }
  105. public JSONObject updatePaper(String paperId,String paperJson){
  106. JSONObject object = new JSONObject();
  107. String result=checkPaper(paperJson);
  108. if(!result.equals("success")){
  109. object.put("status","fail");
  110. object.put("message",result);
  111. return object;
  112. }
  113. try {
  114. JSONObject jsonObject = new JSONObject(paperJson);
  115. ReviewPaperVO reviewPaperVO = getReviewPaperVO(jsonObject);
  116. ReviewPaper reviewPaper = reviewPaperDao.findPaper(paperId);
  117. reviewPaper.setReviewPaper(reviewPaperVO);
  118. reviewPaperDao.save(reviewPaper); //实际是update
  119. reviewPaperJsonDao.update(paperId, paperJson);
  120. reviewReportDao.removeByPaper(paperId);
  121. itemDao.removeByPaper(paperId);
  122. saveReportAndItem(paperId, jsonObject);
  123. object.put("status","success");
  124. object.put("paperId",paperId);
  125. }catch (Exception e){
  126. object.put("status","fail");
  127. object.put("message",e.getMessage());
  128. }
  129. return object;
  130. }
  131. private void saveReportAndItem(String paperId,JSONObject jsonObject)throws Exception{
  132. try {
  133. JSONArray reportArray = jsonObject.getJSONArray("report_list");
  134. HashMap<Integer, String> reportIndexToId = new HashMap<>();
  135. for (int i = 0; i < reportArray.length(); i++) {
  136. JSONObject reportObject = reportArray.getJSONObject(i);
  137. int reportIndex = reportObject.getInt("index");
  138. String id = saveReport(reportObject, paperId);
  139. reportIndexToId.put(reportIndex, id);
  140. }
  141. JSONArray itemGroupArray = jsonObject.getJSONArray("item_group_list");
  142. //save item
  143. //item index-id
  144. HashMap<String, Integer> itemIdToOptionNum = new HashMap<>();
  145. HashMap<Integer, String> itemIndexToId = new HashMap<>();
  146. for (int i = 0; i < itemGroupArray.length(); i++) {
  147. JSONObject itemGroupObject = itemGroupArray.getJSONObject(i);
  148. saveItem(itemGroupObject, paperId, itemIdToOptionNum, reportIndexToId, itemIndexToId);
  149. }
  150. }catch (Exception e){
  151. throw new Exception(e.getMessage());
  152. }
  153. }
  154. private ReviewPaperVO getReviewPaperVO(JSONObject jsonObject)throws Exception{
  155. try {
  156. String description = jsonObject.getString("description");
  157. String name = jsonObject.getString("name");
  158. String time = jsonObject.getString("create_time");
  159. String type = jsonObject.getString("type");
  160. String applicationLocation = jsonObject.getString("application_url");
  161. String requirementLocation = jsonObject.getString("requirement_url");
  162. ReviewPaperVO reviewPaperVO=new ReviewPaperVO(description, name, time, type, applicationLocation, requirementLocation);
  163. return reviewPaperVO;
  164. }catch (Exception e){
  165. throw new Exception(e.getMessage());
  166. }
  167. }
  168. private String saveReport(JSONObject reportObject,String paper_id)throws Exception{
  169. try {
  170. JSONArray imgArray=reportObject.getJSONArray("img_url");
  171. List<String> img_urls=new ArrayList<>();
  172. for(int i=0;i<imgArray.length();i++){
  173. img_urls.add(String.valueOf(imgArray.get(i)));
  174. }
  175. JSONArray fileArray=reportObject.getJSONArray("file_url");
  176. List<String> file_urls=new ArrayList<>();
  177. for(int i=0;i<fileArray.length();i++){
  178. file_urls.add(String.valueOf(fileArray.get(i)));
  179. }
  180. String name=reportObject.getString("name");
  181. String description=reportObject.getString("description");
  182. String original_id=reportObject.getString("original_id");
  183. ReviewReport reviewReport=new ReviewReport(original_id,paper_id,name,description,img_urls,file_urls);
  184. return reviewReportDao.save(reviewReport);
  185. }catch (Exception e){
  186. throw new Exception("report 创建失败: "+e.getMessage());
  187. }
  188. }
  189. private void saveItem(JSONObject itemGroupObject,String paper_id,HashMap<String,Integer>item_id_to_option_num,HashMap<Integer,String>report_index_to_id,HashMap<Integer,String>item_index_to_id)throws Exception{
  190. //List<String>itemIds=new ArrayList<>();
  191. List<String> reportIds=new ArrayList<>();
  192. try {
  193. JSONArray reportArray=itemGroupObject.getJSONArray("report_list");
  194. for (int j=0;j<reportArray.length();j++){
  195. int reportIndex= Integer.parseInt(String.valueOf(reportArray.get(j)));
  196. reportIds.add(report_index_to_id.get(reportIndex));
  197. }
  198. JSONArray itemArray=itemGroupObject.getJSONArray("item_list");
  199. for (int j=0;j<itemArray.length();j++){
  200. JSONObject itemObject=itemArray.getJSONObject(j);
  201. int index=itemObject.getInt("index");
  202. Boolean isRequired=itemObject.getBoolean("is_required");
  203. String description=itemObject.getString("description");
  204. String type=itemObject.getString("type");
  205. List<String>options=new ArrayList<>();
  206. JSONArray optionArray=itemObject.getJSONArray("options");
  207. for(int k=0;k<optionArray.length();k++){
  208. options.add(String.valueOf(optionArray.get(k)));
  209. }
  210. ReviewItem item=new ReviewItem(paper_id,isRequired,options,description,reportIds,type);
  211. String item_id = itemDao.saveItem(item);
  212. // itemIds.add(item_id);
  213. // item_id_to_option_num.put(item_id,options.size());
  214. item_index_to_id.put(index,item_id);
  215. }
  216. }catch (Exception e){
  217. throw new Exception("item 创建失败: "+e.getMessage());
  218. }
  219. // try {
  220. // for(int j=0;j<reportIds.size();j++){
  221. // ReviewReport report=reviewReportDao.findReviewReport(reportIds.get(j));
  222. // report.setItem_id(itemIds);
  223. // reviewReportDao.save(report);
  224. // }
  225. // }catch (Exception e){
  226. // throw new Exception("item创建失败,请检查配置的report_index是否存在! ");
  227. // }
  228. }
  229. public String checkPaper(String paperJson){
  230. String result="success";
  231. try {
  232. JSONObject jsonObject=new JSONObject(paperJson);
  233. String description=jsonObject.getString("description");
  234. String name=jsonObject.getString("name");
  235. String time=jsonObject.getString("create_time");
  236. String type=jsonObject.getString("type");
  237. String application_location=jsonObject.getString("application_url");
  238. String requirement_location=jsonObject.getString("requirement_url");
  239. Set<Integer> reportIndexs=new HashSet<>();
  240. JSONArray reportList=jsonObject.getJSONArray("report_list");
  241. for(int i=0;i<reportList.length();i++){
  242. JSONObject report=reportList.getJSONObject(i);
  243. int index=report.getInt("index");
  244. if(reportIndexs.contains(index)){
  245. throw new Exception("report_list中report的index不能重复");
  246. }else{
  247. reportIndexs.add(index);
  248. }
  249. String reportName=report.getString("name");
  250. String originalId=report.getString("original_id");
  251. String reportDescription=report.getString("description");
  252. JSONArray imgUrls=report.getJSONArray("img_url");
  253. JSONArray fileUrls=report.getJSONArray("file_url");
  254. }
  255. JSONArray itemGroupArray=jsonObject.getJSONArray("item_group_list");
  256. Set<Integer>itemReportIndexs=new HashSet<>();
  257. for(int i=0;i<itemGroupArray.length();i++){
  258. Set<Integer>itemIndexs=new HashSet<>();
  259. JSONObject itemGroup=itemGroupArray.getJSONObject(i);
  260. JSONArray itemReportList=itemGroup.getJSONArray("report_list");
  261. for(int j=0;j<itemReportList.length();j++){
  262. int reportIndex=Integer.parseInt(String.valueOf(itemReportList.get(j)));
  263. if(!reportIndexs.contains(reportIndex)){
  264. throw new Exception("item_group_list中包含不存在的report ");
  265. }else{
  266. if(itemReportIndexs.contains(reportIndex)){
  267. throw new Exception("item_group_list中的report不能重复");
  268. }
  269. else{
  270. itemReportIndexs.add(reportIndex);
  271. }
  272. }
  273. }
  274. JSONArray itemList=itemGroup.getJSONArray("item_list");
  275. for(int j=0;j<itemList.length();j++){
  276. JSONObject item=itemList.getJSONObject(j);
  277. int index=item.getInt("index");
  278. if(itemIndexs.contains(index)){
  279. throw new Exception("item_group_list中的item_index不能重复");
  280. }
  281. else {
  282. itemIndexs.add(index);
  283. }
  284. String itemDescription=item.getString("description");
  285. Boolean isRequired=item.getBoolean("is_required");
  286. String itemType=item.getString("type");
  287. JSONArray options=item.getJSONArray("options");
  288. }
  289. }
  290. // JSONArray groupList=jsonObject.getJSONArray("group_list");
  291. // Set<String>workers=new HashSet<>();
  292. // for(int i=0;i<groupList.length();i++){
  293. // JSONObject groupObject=groupList.getJSONObject(i);
  294. // String groupName=groupObject.getString("name");
  295. // String groupDescription=groupObject.getString("description");
  296. // JSONArray workerList=groupObject.getJSONArray("worker_list");
  297. // for(int j=0;j<workerList.length();j++){
  298. // String workerId=String.valueOf(workerList.get(j));
  299. // if(workers.contains(workerId)){
  300. // throw new Exception("同一个worker不能属于不同的group");
  301. // }else{
  302. // workers.add(workerId);
  303. // }
  304. // }
  305. // JSONArray workerReportList=groupObject.getJSONArray("report_list");
  306. // for(int j=0;j<workerReportList.length();j++){
  307. // int reportIndex= Integer.parseInt(String.valueOf(workerReportList.get(j)));
  308. // if(!reportIndexs.contains(reportIndex)){
  309. // throw new Exception("group_report_list中包含不存在的report ");
  310. // }
  311. // }
  312. // }
  313. }catch (Exception e){
  314. return e.getMessage();
  315. }
  316. return result;
  317. }
  318. public boolean delPaper(String paperId){
  319. try {
  320. reviewPaperDao.remove(paperId);
  321. reviewPaperJsonDao.remove(paperId);
  322. reviewReportDao.removeByPaper(paperId);
  323. itemDao.removeByPaper(paperId);
  324. return true;
  325. } catch (Exception e) {
  326. e.printStackTrace();
  327. return false;
  328. }
  329. }
  330. public boolean addWorker(String examId,String paperId, List<String>workerList){
  331. try {
  332. reviewJobDao.save(new ReviewJob(examId,paperId));
  333. for(int i=0;i<workerList.size();i++){
  334. String workerId=workerList.get(i);
  335. reviewWorkerDao.save(new ReviewWorker(workerId,paperId,examId));
  336. }
  337. return true;
  338. } catch (Exception e) {
  339. e.printStackTrace();
  340. return false;
  341. }
  342. }
  343. // public ReviewPaper getPaperByWorker(String examId, String workerId){
  344. // ReviewWorker actualWorkerId=reviewWorkerDao.getWorkerByOriginalId(workerId,examId);
  345. // String paperId=actualWorkerId.getPaper_id();
  346. //
  347. // reviewJobDao.save(new ReviewJob(examId,paperId));
  348. // for(int i=0;i<workerList.size();i++){
  349. // String workerId=workerList.get(i);
  350. // reviewWorkerDao.save(new ReviewWorker(workerId,paperId,examId));
  351. // }
  352. // return true;
  353. //
  354. // }
  355. }