package edu.nju.service; import edu.nju.dao.*; import edu.nju.entities.*; import edu.nju.model.CrowdReviewReportDTO; import edu.nju.model.CrowdReviewReportVO; import edu.nju.model.ReviewPaperVO; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; @Service public class ReviewPaperService { @Autowired ReviewItemDao itemDao; @Autowired ReviewAnswerDao answerDao; @Autowired ReviewService reviewService; @Autowired ReviewReportDao reviewReportDao; @Autowired ReviewPaperJsonDao reviewPaperJsonDao; @Autowired ReviewPaperDao reviewPaperDao; @Autowired ReviewJobDao reviewJobDao; @Autowired ReviewWorkerDao reviewWorkerDao; @Autowired ReviewGroupDao reviewGroupDao; public ReviewPaperJson getReviewPaperJson(String paperId) { return reviewPaperJsonDao.findJsonByPaper(paperId); } public ReviewPaper getPaper(String paperId){ return reviewPaperDao.findPaper(paperId); } public List getReportsByPaperId(String paperId){ return reviewReportDao.getReportsByPaperId(paperId); } public List getPapers(){ return reviewPaperDao.findPapers(); } public CrowdReviewReportVO uploadReport(CrowdReviewReportDTO crowdReviewReportDTO){ JSONArray reportArray= new JSONObject(crowdReviewReportDTO).getJSONArray("crowdReviewReportItems"); try { String paperName=crowdReviewReportDTO.getName(); String paperType=crowdReviewReportDTO.getType(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String paperId = reviewPaperDao.save(new ReviewPaper(paperName,df.format(System.currentTimeMillis()),paperType)); String paperJson=initPaperJson(reportArray,paperName,Long.toString(System.currentTimeMillis()),paperType); reviewPaperJsonDao.save(new ReviewPaperJson(paperId,paperJson)); for (int i = 0; i < reportArray.length(); i++) { JSONObject reportObject = reportArray.getJSONObject(i); saveReport(reportObject, paperId); } String testUrl="http://47.99.140.117:9004/changePaper?id="; return new CrowdReviewReportVO("success",testUrl+paperId); } catch (Exception e) { return new CrowdReviewReportVO("fail",e.getMessage()); } } private String initPaperJson(JSONArray reportArray,String name, String createTime, String type) throws Exception{ try { JSONObject object=new JSONObject(); object.put("description",""); object.put("name",name); object.put("create_time",createTime); object.put("type",type); object.put("application_url",""); object.put("requirement_url",""); object.put("report_list",reportArray); object.put("item_group_list",new JSONArray()); return object.toString(); }catch (Exception e){ throw new Exception(e.getMessage()); } } public JSONObject uploadPaper(String paperJson){ JSONObject object = new JSONObject(); String result=checkPaper(paperJson); if(!result.equals("success")){ object.put("status","fail"); object.put("message",result); return object; } try { JSONObject jsonObject = new JSONObject(paperJson); ReviewPaperVO reviewPaperVO = getReviewPaperVO(jsonObject); reviewPaperVO.setCreate_time(Long.toString(System.currentTimeMillis())); ReviewPaper reviewPaper = new ReviewPaper(reviewPaperVO); String paperId=reviewPaperDao.save(reviewPaper); reviewPaperJsonDao.save(new ReviewPaperJson(paperId,paperJson)); saveReportAndItem(paperId, jsonObject); object.put("status","success"); object.put("paperId",paperId); }catch (Exception e){ object.put("status","fail"); object.put("message",e.getMessage()); } return object; } public JSONObject updatePaper(String paperId,String paperJson){ JSONObject object = new JSONObject(); String result=checkPaper(paperJson); if(!result.equals("success")){ object.put("status","fail"); object.put("message",result); return object; } try { JSONObject jsonObject = new JSONObject(paperJson); ReviewPaperVO reviewPaperVO = getReviewPaperVO(jsonObject); ReviewPaper reviewPaper = reviewPaperDao.findPaper(paperId); reviewPaper.setReviewPaper(reviewPaperVO); reviewPaperDao.save(reviewPaper); //实际是update reviewPaperJsonDao.update(paperId, paperJson); reviewReportDao.removeByPaper(paperId); itemDao.removeByPaper(paperId); saveReportAndItem(paperId, jsonObject); object.put("status","success"); object.put("paperId",paperId); }catch (Exception e){ object.put("status","fail"); object.put("message",e.getMessage()); } return object; } private void saveReportAndItem(String paperId,JSONObject jsonObject)throws Exception{ try { JSONArray reportArray = jsonObject.getJSONArray("report_list"); HashMap reportIndexToId = new HashMap<>(); for (int i = 0; i < reportArray.length(); i++) { JSONObject reportObject = reportArray.getJSONObject(i); int reportIndex = reportObject.getInt("index"); String id = saveReport(reportObject, paperId); reportIndexToId.put(reportIndex, id); } JSONArray itemGroupArray = jsonObject.getJSONArray("item_group_list"); //save item //item index-id HashMap itemIdToOptionNum = new HashMap<>(); HashMap itemIndexToId = new HashMap<>(); for (int i = 0; i < itemGroupArray.length(); i++) { JSONObject itemGroupObject = itemGroupArray.getJSONObject(i); saveItem(itemGroupObject, paperId, itemIdToOptionNum, reportIndexToId, itemIndexToId); } }catch (Exception e){ throw new Exception(e.getMessage()); } } private ReviewPaperVO getReviewPaperVO(JSONObject jsonObject)throws Exception{ try { String description = jsonObject.getString("description"); String name = jsonObject.getString("name"); String time = jsonObject.getString("create_time"); String type = jsonObject.getString("type"); String applicationLocation = jsonObject.getString("application_url"); String requirementLocation = jsonObject.getString("requirement_url"); ReviewPaperVO reviewPaperVO=new ReviewPaperVO(description, name, time, type, applicationLocation, requirementLocation); return reviewPaperVO; }catch (Exception e){ throw new Exception(e.getMessage()); } } private String saveReport(JSONObject reportObject,String paper_id)throws Exception{ try { JSONArray imgArray=new JSONArray(); if(reportObject.has("img_url")) { imgArray = reportObject.getJSONArray("img_url"); } List img_urls=new ArrayList<>(); for(int i=0;i file_urls=new ArrayList<>(); for(int i=0;iitem_id_to_option_num,HashMapreport_index_to_id,HashMapitem_index_to_id)throws Exception{ //ListitemIds=new ArrayList<>(); List reportIds=new ArrayList<>(); try { JSONArray reportArray=itemGroupObject.getJSONArray("report_list"); for (int j=0;joptions=new ArrayList<>(); JSONArray optionArray=itemObject.getJSONArray("options"); for(int k=0;k reportIndexs=new HashSet<>(); JSONArray reportList=jsonObject.getJSONArray("report_list"); for(int i=0;iitemReportIndexs=new HashSet<>(); for(int i=0;iitemIndexs=new HashSet<>(); JSONObject itemGroup=itemGroupArray.getJSONObject(i); JSONArray itemReportList=itemGroup.getJSONArray("report_list"); for(int j=0;jworkers=new HashSet<>(); // for(int i=0;iworkerList){ String jobId=reviewJobDao.save(new ReviewJob(examId,paperId,Long.toString(System.currentTimeMillis()))); ListworkerIds=new ArrayList<>(); for(int i=0;ireviewReports=getReportsByPaperId(paperId); ListreportIds=new ArrayList<>(); for(int i=0;i