浏览代码

上线导出报告功能

insomniaLee 5 年之前
父节点
当前提交
30d67507cf

+ 7 - 0
src/main/java/edu/nju/controller/ReviewAnalyzeController.java

@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletResponse;
@@ -33,4 +34,10 @@ public class ReviewAnalyzeController {
             e.printStackTrace();
         }
     }
+
+    @RequestMapping(value = "/getJobExcel")
+    @ResponseBody
+    public String getExcel (@RequestParam("jobId")String jobId){
+        return reviewAnalyzeService.getExcel(jobId)?"1111":"tmd";
+    }
 }

+ 82 - 6
src/main/java/edu/nju/service/ReviewAnalyzeService.java

@@ -1,16 +1,19 @@
 package edu.nju.service;
 
-import edu.nju.dao.ReviewAnswerDao;
-import edu.nju.dao.ReviewItemDao;
-import edu.nju.dao.ReviewWorkerDao;
-import edu.nju.entities.ReviewAnswer;
-import edu.nju.entities.ReviewItem;
-import edu.nju.entities.ReviewWorker;
+import edu.nju.dao.*;
+import edu.nju.entities.*;
 import edu.nju.model.ReviewWorkerVO;
+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.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.FileOutputStream;
+import java.text.DecimalFormat;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -24,6 +27,12 @@ public class ReviewAnalyzeService {
     ReviewItemDao reviewItemDao;
     @Autowired
     ReviewWorkerDao reviewWorkerDao;
+    @Autowired
+    ReviewJobDao reviewJobDao;
+    @Autowired
+    ReviewPaperDao reviewPaperDao;
+    @Autowired
+    ReviewReportDao reviewReportDao;
 
     public JSONObject analyzeItem(String itemId,String reportId,String jobId){
         JSONObject jsonObject=new JSONObject();
@@ -82,4 +91,71 @@ public class ReviewAnalyzeService {
         }
         return jsonObject;
     }
+
+    public boolean getExcel (String jobId){
+        int rIndex = 0;
+        int iIndex = 0;
+        int oIndex = 0;
+        int tempIO ;
+        int tempRI;
+        int temp  ;
+        try {
+            HSSFWorkbook wb = new HSSFWorkbook();
+            tempIO = 0;
+            tempRI = 0;
+            FileOutputStream fileOut = null; // 为了输出excel 文件
+            ReviewJob job = reviewJobDao.findJob(jobId);
+            HSSFSheet sheet1 = wb.createSheet(job.getName());
+            ReviewPaper paper = reviewPaperDao.findPaper(job.getPaper_id());
+            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());
+                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(1.0*answerCount[ii]/answers.size()));
+                            }
+
+                        case "Description" :
+                        case "File":
+                            for(ReviewAnswer answer : answers){
+                                sb.append(answer.getAnswers().toString()+"\n");
+                            }
+                            rTemp = sheet1.createRow(oIndex++);
+                            cTemp = rTemp.createCell(2);
+                            cTemp.setCellValue(i.getOptions().get(0)+":"+sb.toString());
+                        default:
+                            break;
+                    }
+                    temp = iIndex + i.getOptions().size()-1;
+                    sheet1.addMergedRegion(new CellRangeAddress(iIndex,temp,1,1));
+                    iIndex = temp+1;
+                    tempRI += i.getOptions().size();
+                }
+                temp = rIndex + tempRI-1;
+                sheet1.addMergedRegion(new CellRangeAddress(rIndex,temp,0,0));
+                rIndex = temp+1;
+            }
+            fileOut = new FileOutputStream("/Users/insomnialee/Desktop/temp/1.xls");
+            wb.write(fileOut);
+            return true;
+        }catch (Exception e){
+            return false;
+        }
+    }
 }