123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- package edu.nju.service;
- import edu.nju.dao.*;
- import edu.nju.entities.*;
- import edu.nju.model.ReviewWorkerVO;
- import edu.nju.util.OssAliyun;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.text.DecimalFormat;
- import java.util.*;
- @Service
- public class ReviewAnalyzeService {
- @Autowired
- ReviewAnswerDao reviewAnswerDao;
- @Autowired
- ReviewItemDao reviewItemDao;
- @Autowired
- ReviewWorkerDao reviewWorkerDao;
- @Autowired
- ReviewJobDao reviewJobDao;
- @Autowired
- ReviewPaperDao reviewPaperDao;
- @Autowired
- ReviewReportDao reviewReportDao;
- @Autowired
- BugDao bugDao;
- @Autowired
- BugScoreDao bugScoreDao;
- @Autowired
- AnalyzeService analyzeService;
- public JSONObject analyzeItem(String itemId,String reportId,String jobId){
- JSONObject jsonObject=new JSONObject();
- ReviewItem reviewItem=reviewItemDao.findById(itemId);
- String type=reviewItem.getType();
- List<ReviewAnswer>reviewAnswers=reviewAnswerDao.getItemReportJobAnswers(itemId,reportId,jobId);
- if(type.equals("File")){
- Map<String,List<String>>map=new HashMap<>();
- for(int i=0;i<reviewAnswers.size();i++){
- ReviewAnswer reviewAnswer=reviewAnswers.get(i);
- List<String>urls=reviewAnswer.getFile_url();
- if(urls.size()!=0){
- String workerId=reviewAnswer.getWorker_id();
- ReviewWorker worker=reviewWorkerDao.find(workerId);
- ReviewWorkerVO workerVO=reviewWorkerDao.getEduInfo(worker);
- map.put(new JSONObject(workerVO).toString(),urls);
- }
- }
- jsonObject=new JSONObject(map);
- }
- else if(type.equals("Description")){
- Map<String,String>map=new HashMap<>();
- for(int i=0;i<reviewAnswers.size();i++){
- ReviewAnswer reviewAnswer=reviewAnswers.get(i);
- List<String>answers=reviewAnswer.getAnswers();
- if(answers.size()!=0){
- String answer=answers.get(0);
- String workerId=reviewAnswer.getWorker_id();
- ReviewWorker worker=reviewWorkerDao.find(workerId);
- ReviewWorkerVO workerVO=reviewWorkerDao.getEduInfo(worker);
- map.put(new JSONObject(workerVO).toString(),answer);
- }
- }
- jsonObject=new JSONObject(map);
- }
- else{
- Map<Integer,Integer>map=new HashMap<>();
- for(int i=0;i<reviewAnswers.size();i++){
- ReviewAnswer reviewAnswer=reviewAnswers.get(i);
- List<String>answers=reviewAnswer.getAnswers();
- for(int j=0;j<answers.size();j++){
- if(map.containsKey(j)){
- if(answers.get(j).equals("1")){
- map.put(j,map.get(j)+1);
- }
- }else{
- if(answers.get(j).equals("1")){
- map.put(j,1);
- }else {
- map.put(j, 0);
- }
- }
- }
- }
- jsonObject=new JSONObject(map);
- }
- return jsonObject;
- }
- public JSONArray getJsonExportByPaper( String paperId ) {
- List<ReviewJob> jobs = reviewJobDao.findJobsByPaper(paperId);
- JSONArray res = new JSONArray();
- for (ReviewJob job : jobs){
- res.put(getJsonExport(job.getId()));
- }
- return res;
- }
- public JSONObject getJsonExport ( String jobId){
- ReviewJob job = reviewJobDao.findJob(jobId) ;
- JSONObject res = new JSONObject();
- JSONArray reportInfo = new JSONArray();
- List<ReviewReport > reports = reviewReportDao.getReportsByPaperId(job.getPaper_id());
- JSONObject reportJsonInfo ;
- for( ReviewReport r : reports){ // 便利所有的报告,报告报告的信息 和 评审信息
- reportJsonInfo = new JSONObject();
- reportJsonInfo.put("info",new JSONObject(r));
- List<ReviewItem> items = reviewItemDao.findItemsByReport(r.getId());
- JSONArray itemArray = new JSONArray();
- for (ReviewItem i : items){
- JSONObject itemJson = new JSONObject();
- itemJson.put("description" , i.getDescription());
- List<ReviewAnswer> answers = reviewAnswerDao.getItemReportJobAnswers(i.getId(),r.getId(),jobId);
- int [] answerCount = new int [i.getOptions().size()];
- StringBuffer sb = new StringBuffer() ;
- JSONArray answerTemp = new JSONArray();
- JSONObject jsonTemp ;
- itemJson.put("type",i.getType());
- switch (i.getType()){
- case "Single" :
- case "Multiple":
- for(ReviewAnswer answer : answers){
- for( int ii = 0 ;ii < answer.getAnswers().size();ii++){
- answerCount[ii] ++;
- }
- }
- for( int ii =0;ii<i.getOptions().size();ii++){
- jsonTemp = new JSONObject();
- jsonTemp.put(i.getOptions().get(ii),answerCount[ii]);
- answerTemp.put(jsonTemp);
- }
- break;
- case "Description" :
- for(ReviewAnswer answer : answers){
- sb.append(answer.getAnswers().toString()+"\n");
- }
- jsonTemp = new JSONObject();
- jsonTemp.put(i.getDescription(),sb.toString());
- answerTemp.put(jsonTemp);
- break;
- case "File":
- for(ReviewAnswer answer : answers){
- sb.append(answer.getFile_url()+"\n");
- }
- jsonTemp = new JSONObject();
- jsonTemp.put(i.getDescription(),sb.toString());
- answerTemp.put(jsonTemp);
- break;
- default:
- break;
- }
- itemJson.put("answer",answerTemp);
- itemArray.put(itemJson);
- }
- reportJsonInfo.put("checkItem",itemArray);
- reportInfo.put(reportJsonInfo);
- }
- res.put("reportInfo",reportInfo);
- res.put("jobInfo",new JSONObject(job));
- return res;
- }
- public String getExcel (String jobId){
- int rIndex = 0;
- int iIndex = 0;
- int oIndex = 0;
- int tempRI;
- int temp ;
- try {
- HSSFWorkbook wb = new HSSFWorkbook();
- tempRI = 0;
- FileOutputStream fileOut = null; // 为了输出excel 文件
- ReviewJob job = reviewJobDao.findJob(jobId);
- HSSFSheet sheet1 = wb.createSheet(job.getName());
- List<ReviewReport> reports = reviewReportDao.getReportsByPaperId(job.getPaper_id());
- Row rTemp ;
- Cell cTemp;
- DecimalFormat df = new DecimalFormat("#.00");
- for( ReviewReport r : reports){
- List<ReviewItem> items = reviewItemDao.findItemsByReport(r.getId());
- tempRI = 0;
- for (ReviewItem i : items){
- List<ReviewAnswer> answers = reviewAnswerDao.getItemReportJobAnswers(i.getId(),r.getId(),jobId);
- int [] answerCount = new int [answers.size()];
- StringBuffer sb = new StringBuffer() ;
- switch (i.getType()){
- case "Single" :
- case "Multiple":
- for(ReviewAnswer answer : answers){
- for( int ii = 0 ;ii < answer.getAnswers().size();ii++){
- answerCount[ii] ++;
- }
- }
- for( int ii =0;ii<i.getOptions().size();ii++){
- rTemp = sheet1.createRow(oIndex++);
- cTemp = rTemp.createCell(2);
- cTemp.setCellValue(i.getOptions().get(ii)+":"+answerCount[ii]+" - "+df.format(100.0*answerCount[ii]/ (Arrays.stream(answerCount).sum()==0?1:Arrays.stream(answerCount).sum()))+"%");
- }
- break;
- case "Description" :
- for(ReviewAnswer answer : answers){
- sb.append(answer.getAnswers().toString()+"\n");
- }
- rTemp = sheet1.createRow(oIndex++);
- cTemp = rTemp.createCell(2);
- cTemp.setCellValue(sb.toString());
- break;
- case "File":
- for(ReviewAnswer answer : answers){
- sb.append(answer.getFile_url()+"\n");
- }
- rTemp = sheet1.createRow(oIndex++);
- cTemp = rTemp.createCell(2);
- cTemp.setCellValue(sb.toString());
- break;
- default:
- break;
- }
- if(i.getOptions().size()<=1){ // File or description
- temp = iIndex ;
- }else{
- temp = iIndex + i.getOptions().size()-1;
- sheet1.addMergedRegion(new CellRangeAddress(iIndex,temp,1,1));
- }
- rTemp = sheet1.getRow(iIndex);
- cTemp = rTemp.createCell(1);
- cTemp.setCellValue(i.getDescription());
- iIndex = temp+1;
- if(i.getOptions().size()<=1){
- tempRI += 1;
- }else{
- tempRI+=i.getOptions().size();
- }
- }
- if(items.size()!=0){
- // 如果没有item的情况
- tempRI=tempRI==0?1:tempRI;
- temp = rIndex + tempRI -1;
- if(temp!=rIndex){
- sheet1.addMergedRegion(new CellRangeAddress(rIndex,temp,0,0));
- }
- rTemp = sheet1.getRow(rIndex);
- cTemp = rTemp.createCell(0);
- cTemp.setCellValue(r.getName()+"-"+r.getDescription());
- rIndex = temp+1;
- }
- }
- fileOut = new FileOutputStream("/Users/insomnialee/Desktop/temp/"+jobId+".xls");
- wb.write(fileOut);
- File file = new File("/Users/insomnialee/Desktop/temp/"+jobId+".xls");
- OssAliyun.uploadFile("auditExcel/"+jobId+".xls",file);
- return "http://mooctest-site.oss-cn-shanghai.aliyuncs.com/auditExcel/"+jobId+".xls";
- }catch (Exception e){
- e.printStackTrace();
- return null;
- }
- }
- public JSONObject crowdReviewGradeToCrowdTest (String jobId){
- JSONObject result=new JSONObject();
- JSONObject updateBugScore=uploadCrowdTestBugGrade(jobId);
- if("500".equals(updateBugScore.get("status"))){
- return updateBugScore;
- }else{
- ReviewJob reviewJob=reviewJobDao.findJob(jobId);
- if(reviewJob==null){
- result.put("status","500");
- result.put("计算工人分数并上传","不存在该job");
- }else {
- String caseId =reviewJob.getCase_id();
- String examId=reviewJob.getExam_id();
- String caseTakeId =caseId+"-"+examId;
- JSONArray json=analyzeService.getScores(caseTakeId);
- result.put("status","200");
- result.put("计算工人分数并上传","成功");
- result.put("jsonArray",json);
- }
- }
- return result;
- }
- //回写众审结束后的bug分数至bugScore
- private JSONObject uploadCrowdTestBugGrade(String jobId){
- ReviewJob reviewJob=reviewJobDao.findJob(jobId);
- JSONObject result=new JSONObject();
- if(reviewJob==null){
- result.put("status","500");
- result.put("更新bugScore","不存在该job");
- }else {
- ReviewPaper reviewPaper = reviewPaperDao.findPaper(reviewJob.getPaper_id());
- if (reviewPaper.getType().equals("众包测试")) {
- List<ReviewReport> reviewReportList = reviewReportDao.getReportsByPaperId(reviewJob.getPaper_id());
- if(reviewReportList==null){
- result.put("status","500");
- result.put("更新bugScore","该job内不存在report");
- }else {
- //一个report对应一个bug
- for (ReviewReport reviewReport : reviewReportList) {
- String bugId = reviewReport.getOriginal_id();
- List<ReviewItem> reviewItemList = reviewItemDao.findItemsByReport(reviewReport.getId());
- //众测转成的众审,item只有一个,单选题,选择得几分
- if (reviewItemList != null && reviewItemList.size() == 1) {
- ReviewItem reviewItem = reviewItemList.get(0);
- if (reviewItem.getType().equals("Single")) {
- int allScore = 0;//总分
- int count = 0;//共有几人评分
- List<ReviewAnswer> reviewAnswerList = reviewAnswerDao.getItemReportJobAnswers(reviewItem.getId(), reviewReport.getId(), jobId);
- for (ReviewAnswer reviewAnswer : reviewAnswerList) {
- List<String> answers = reviewAnswer.getAnswers();
- //该题进行了选择
- if (answers != null && answers.size() > 0) {
- for (int i = 0; i < answers.size(); i++) {
- if ("1".equals(answers.get(i))) {
- allScore += i;
- count++;
- break;
- }
- }
- }
- }
- int grade = allScore / count;
- //新建bugScore并保存
- BugScore bugScore = new BugScore(bugId, grade, 0);
- bugScoreDao.save(bugScore);
- }
- }
- }
- result.put("status","200");
- result.put("更新bugScore","更新bugScore成功");
- }
- }
- }
- return result;
- }
- }
|