123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package edu.nju.service;
- import edu.nju.dao.*;
- import edu.nju.entities.*;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.List;
- @Service
- public class NodeService {
- @Autowired
- AnswerNodeDao answerNodeDao;
- @Autowired
- BasicNodeDao basicNodeDao;
- @Autowired
- ReviewItemDao reviewItemDao;
- @Autowired
- ReviewJobDao reviewJobDao;
- @Autowired
- ReviewPaperDao reviewPaperDao;
- @Autowired
- ReviewReportDao reviewReportDao;
- @Autowired
- ReviewCorrectAnswerDao reviewCorrectAnswerDao;
- @Autowired
- ReviewAnswerDao reviewAnswerDao;
- public BasicNode generateBasicNode(String jobId,String teacherId){
- ReviewJob reviewJob=reviewJobDao.findJob(jobId);
- ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
- List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
- //构建元node
- JSONObject nodeJson = new JSONObject();
- JSONArray categoryArray=new JSONArray();
- JSONObject categoryObject=new JSONObject();
- categoryObject.put("name","CrowdReview");
- categoryArray.put(categoryObject);
- nodeJson.put("categories",categoryArray);
- JSONArray nodesArray=new JSONArray();
- for(ReviewReport reviewReport:reviewReportList){
- String reportId=reviewReport.getId();
- List<ReviewItem> reviewItemList=reviewItemDao.findItemsByReport(reportId);
- for(ReviewItem reviewItem:reviewItemList){
- String itemId=reviewItem.getId();
- ReviewCorrectAnswer correctAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId);
- if(reviewItem.getType().equals("Multiple")){
- List<String> answers=correctAnswer.getCorrect_answer();
- int num=0;
- for(int i=0;i<answers.size();i++){
- if(answers.get(i).equals("1")){
- num++;
- }
- }
- if(num!=0){
- for(int i=0;i<answers.size();i++){
- String answer=answers.get(i);
- if(answer.equals("1")){
- JSONObject node=new JSONObject();
- node.put("name", jobId + "/" + reportId + "/" + itemId+"/"+i);
- node.put("location", jobId + "/" + reportId + "/" + itemId+"/"+i);
- node.put("description", reviewItem.getType());
- node.put("category", "CrowdReview");
- node.put("weight", String.valueOf(Double.parseDouble(correctAnswer.getGrade())/num));
- nodesArray.put(node);
- }
- }
- }
- }else {
- JSONObject node=new JSONObject();
- node.put("name", jobId + "/" + reportId + "/" + itemId);
- node.put("location", jobId + "/" + reportId + "/" + itemId);
- node.put("description", reviewItem.getType());
- node.put("category", "CrowdReview");
- node.put("weight", correctAnswer.getGrade());
- nodesArray.put(node);
- }
- }
- }
- nodeJson.put("nodes",nodesArray);
- BasicNode basicNode=new BasicNode(jobId,teacherId,nodesArray.toString());
- System.out.println(nodeJson);
- return basicNode;
- }
- public AnswerNode generateCatchNode(String jobId,String workerId){
- ReviewJob reviewJob=reviewJobDao.findJob(jobId);
- ReviewPaper reviewPaper=reviewPaperDao.findPaper(reviewJob.getPaper_id());
- List<ReviewReport> reviewReportList=reviewReportDao.getReportsByPaperId(reviewPaper.getId());
- //构建catchNode
- JSONArray catchNodeArray = new JSONArray();
- for(ReviewReport reviewReport:reviewReportList){
- String reportId=reviewReport.getId();
- List<ReviewItem> reviewItemList=reviewItemDao.findItemsByReport(reportId);
- for(ReviewItem reviewItem:reviewItemList){
- String itemId=reviewItem.getId();
- //此时reviewAnswer一定已经被创建
- ReviewAnswer reviewAnswer=reviewAnswerDao.findAnswerByWorkerJobReportItem(jobId,reportId,workerId,itemId);
- ReviewCorrectAnswer reviewCorrectAnswer=reviewCorrectAnswerDao.findCorrectAnswerByReportItem(reportId,itemId,jobId);
- //多选题
- if(reviewItem.getType().equals("Multiple")){
- List<String> answers=reviewAnswer.getAnswers();
- List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
- int num=0;
- //共有几个正确选项
- for(int i=0;i<correctAnswers.size();i++){
- if(correctAnswers.get(i).equals("1")){
- num++;
- }
- }
- if(num!=0){
- List<JSONObject> multipleNodeList=new ArrayList<>();
- boolean chooseWrong=false;
- //是否作答
- if(answers.size()!=correctAnswers.size()){
- for (int i = 0; i < correctAnswers.size(); i++) {
- JSONObject node = new JSONObject();
- node.put("category", "CrowdReview");
- node.put("ifCatch", false);
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
- multipleNodeList.add(node);
- }
- chooseWrong=true;
- }else {
- for (int i = 0; i < correctAnswers.size(); i++) {
- String correctAnswer = correctAnswers.get(i);
- String answer = answers.get(i);
- JSONObject node = new JSONObject();
- if (correctAnswer.equals("1")) {
- if (answer.equals("1")) {
- node.put("category", "CrowdReview");
- node.put("ifCatch", true);
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
- } else {
- node.put("category", "CrowdReview");
- node.put("ifCatch", false);
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId + "/" + i);
- }
- multipleNodeList.add(node);
- } else if (correctAnswer.equals("")) {
- if (answer.equals("1")) {
- chooseWrong = true;
- break;
- }
- }
- }
- }
- //有一个选错,则多选题不得分
- if(chooseWrong){
- for(JSONObject node:multipleNodeList){
- node.put("ifCatch",false);
- catchNodeArray.put(node);
- }
- }
- //否则按选中的个数得分
- else{
- for(JSONObject node:multipleNodeList){
- catchNodeArray.put(node);
- }
- }
- }
- }
- //单选题
- else if(reviewItem.getType().equals("Single")) {
- List<String> answers=reviewAnswer.getAnswers();
- List<String> correctAnswers=reviewCorrectAnswer.getCorrect_answer();
- boolean chooseWrong=false;
- if(answers.size()!=correctAnswers.size()){
- chooseWrong=true;
- }else {
- for (int i = 0; i < correctAnswers.size(); i++) {
- String correctAnswer = correctAnswers.get(i);
- String answer = answers.get(i);
- if (!answer.equals(correctAnswer)) {
- chooseWrong = true;
- break;
- }
- }
- }
- JSONObject node=new JSONObject();
- node.put("category", "CrowdReview");
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
- node.put("ifCatch",!chooseWrong);
- catchNodeArray.put(node);
- }
- //描述题和文件题,默认只要有作答就得分
- else if(reviewItem.getType().equals("Description")){
- List<String> answers=reviewAnswer.getAnswers();
- boolean hasContent=false;
- for(String answer:answers){
- if(!answer.equals("")){
- hasContent=true;
- break;
- }
- }
- JSONObject node=new JSONObject();
- node.put("category", "CrowdReview");
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
- node.put("ifCatch",hasContent);
- catchNodeArray.put(node);
- }else if(reviewItem.getType().equals("File")){
- List<String> fileList=reviewAnswer.getFile_url();
- boolean hasContent=false;
- for(String file:fileList){
- if(!file.equals("")){
- hasContent=true;
- break;
- }
- }
- JSONObject node=new JSONObject();
- node.put("category", "CrowdReview");
- node.put("nodeName", jobId + "/" + reportId + "/" + itemId);
- node.put("ifCatch",hasContent);
- catchNodeArray.put(node);
- }
- }
- }
- System.out.println(catchNodeArray);
- AnswerNode answerNode=new AnswerNode(jobId,workerId,catchNodeArray.toString(),"0");
- return answerNode;
- }
- }
|