123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- 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
- ReviewJobDao jobDao;
- @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 paper_id) {
- return reviewPaperJsonDao.findJsonByPaper(paper_id);
- }
- public ReviewPaper getPaper(String paper_id){
- return reviewPaperDao.findPaper(paper_id);
- }
- public List<ReviewReport> getReportsByPaperId(String paper_id){
- return reviewReportDao.getReportsByPaperId(paper_id);
- }
- public List<ReviewPaper> 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<Integer, String> 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<String, Integer> itemIdToOptionNum = new HashMap<>();
- HashMap<Integer, String> 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=reportObject.getJSONArray("img_url");
- List<String> img_urls=new ArrayList<>();
- for(int i=0;i<imgArray.length();i++){
- img_urls.add(String.valueOf(imgArray.get(i)));
- }
- JSONArray fileArray=reportObject.getJSONArray("file_url");
- List<String> file_urls=new ArrayList<>();
- for(int i=0;i<fileArray.length();i++){
- file_urls.add(String.valueOf(fileArray.get(i)));
- }
- String name=reportObject.getString("name");
- String description=reportObject.getString("description");
- String original_id=reportObject.getString("original_id");
- ReviewReport reviewReport=new ReviewReport(original_id,paper_id,name,description,img_urls,file_urls);
- return reviewReportDao.save(reviewReport);
- }catch (Exception e){
- throw new Exception("report 创建失败: "+e.getMessage());
- }
- }
- 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{
- //List<String>itemIds=new ArrayList<>();
- List<String> reportIds=new ArrayList<>();
- try {
- JSONArray reportArray=itemGroupObject.getJSONArray("report_list");
- for (int j=0;j<reportArray.length();j++){
- int reportIndex= Integer.parseInt(String.valueOf(reportArray.get(j)));
- reportIds.add(report_index_to_id.get(reportIndex));
- }
- JSONArray itemArray=itemGroupObject.getJSONArray("item_list");
- for (int j=0;j<itemArray.length();j++){
- JSONObject itemObject=itemArray.getJSONObject(j);
- int index=itemObject.getInt("index");
- Boolean isRequired=itemObject.getBoolean("is_required");
- String description=itemObject.getString("description");
- String type=itemObject.getString("type");
- List<String>options=new ArrayList<>();
- JSONArray optionArray=itemObject.getJSONArray("options");
- for(int k=0;k<optionArray.length();k++){
- options.add(String.valueOf(optionArray.get(k)));
- }
- ReviewItem item=new ReviewItem(paper_id,isRequired,options,description,reportIds,type);
- String item_id = itemDao.saveItem(item);
- // itemIds.add(item_id);
- // item_id_to_option_num.put(item_id,options.size());
- item_index_to_id.put(index,item_id);
- }
- }catch (Exception e){
- throw new Exception("item 创建失败: "+e.getMessage());
- }
- // try {
- // for(int j=0;j<reportIds.size();j++){
- // ReviewReport report=reviewReportDao.findReviewReport(reportIds.get(j));
- // report.setItem_id(itemIds);
- // reviewReportDao.save(report);
- // }
- // }catch (Exception e){
- // throw new Exception("item创建失败,请检查配置的report_index是否存在! ");
- // }
- }
- public String checkPaper(String paperJson){
- String result="success";
- try {
- JSONObject jsonObject=new JSONObject(paperJson);
- String description=jsonObject.getString("description");
- String name=jsonObject.getString("name");
- String time=jsonObject.getString("create_time");
- String type=jsonObject.getString("type");
- String application_location=jsonObject.getString("application_url");
- String requirement_location=jsonObject.getString("requirement_url");
- Set<Integer> reportIndexs=new HashSet<>();
- JSONArray reportList=jsonObject.getJSONArray("report_list");
- for(int i=0;i<reportList.length();i++){
- JSONObject report=reportList.getJSONObject(i);
- int index=report.getInt("index");
- if(reportIndexs.contains(index)){
- throw new Exception("report_list中report的index不能重复");
- }else{
- reportIndexs.add(index);
- }
- String reportName=report.getString("name");
- String originalId=report.getString("original_id");
- String reportDescription=report.getString("description");
- JSONArray imgUrls=report.getJSONArray("img_url");
- JSONArray fileUrls=report.getJSONArray("file_url");
- }
- JSONArray itemGroupArray=jsonObject.getJSONArray("item_group_list");
- Set<Integer>itemReportIndexs=new HashSet<>();
- for(int i=0;i<itemGroupArray.length();i++){
- Set<Integer>itemIndexs=new HashSet<>();
- JSONObject itemGroup=itemGroupArray.getJSONObject(i);
- JSONArray itemReportList=itemGroup.getJSONArray("report_list");
- for(int j=0;j<itemReportList.length();j++){
- int reportIndex=Integer.parseInt(String.valueOf(itemReportList.get(j)));
- if(!reportIndexs.contains(reportIndex)){
- throw new Exception("item_group_list中包含不存在的report ");
- }else{
- if(itemReportIndexs.contains(reportIndex)){
- throw new Exception("item_group_list中的report不能重复");
- }
- else{
- itemReportIndexs.add(reportIndex);
- }
- }
- }
- JSONArray itemList=itemGroup.getJSONArray("item_list");
- for(int j=0;j<itemList.length();j++){
- JSONObject item=itemList.getJSONObject(j);
- int index=item.getInt("index");
- if(itemIndexs.contains(index)){
- throw new Exception("item_group_list中的item_index不能重复");
- }
- else {
- itemIndexs.add(index);
- }
- String itemDescription=item.getString("description");
- Boolean isRequired=item.getBoolean("is_required");
- String itemType=item.getString("type");
- JSONArray options=item.getJSONArray("options");
- }
- }
- // JSONArray groupList=jsonObject.getJSONArray("group_list");
- // Set<String>workers=new HashSet<>();
- // for(int i=0;i<groupList.length();i++){
- // JSONObject groupObject=groupList.getJSONObject(i);
- // String groupName=groupObject.getString("name");
- // String groupDescription=groupObject.getString("description");
- // JSONArray workerList=groupObject.getJSONArray("worker_list");
- // for(int j=0;j<workerList.length();j++){
- // String workerId=String.valueOf(workerList.get(j));
- // if(workers.contains(workerId)){
- // throw new Exception("同一个worker不能属于不同的group");
- // }else{
- // workers.add(workerId);
- // }
- // }
- // JSONArray workerReportList=groupObject.getJSONArray("report_list");
- // for(int j=0;j<workerReportList.length();j++){
- // int reportIndex= Integer.parseInt(String.valueOf(workerReportList.get(j)));
- // if(!reportIndexs.contains(reportIndex)){
- // throw new Exception("group_report_list中包含不存在的report ");
- // }
- // }
- // }
- }catch (Exception e){
- return e.getMessage();
- }
- return result;
- }
- public boolean delPaper(String paperId){
- try {
- reviewPaperDao.remove(paperId);
- reviewPaperJsonDao.remove(paperId);
- reviewReportDao.removeByPaper(paperId);
- itemDao.removeByPaper(paperId);
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
- public boolean addWorker(String examId,String paperId, List<String>workerList){
- try {
- String jobId=reviewJobDao.save(new ReviewJob(examId,paperId));
- List<String>workerIds=new ArrayList<>();
- for(int i=0;i<workerList.size();i++){
- String workerId=workerList.get(i);
- workerIds.add(workerId);
- reviewWorkerDao.save(new ReviewWorker(workerId,paperId,examId,jobId));
- }
- List<ReviewReport>reviewReports=getReportsByPaperId(paperId);
- List<String>reportIds=new ArrayList<>();
- for(int i=0;i<reviewReports.size();i++)
- reportIds.add(reviewReports.get(i).getId());
- reviewGroupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds));
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
- public ReviewWorker getWorker(String workerIndex,String examId){
- return reviewWorkerDao.getWorkerByOriginalId(workerIndex,examId);
- }
- }
|