Explorar el Código

Merge branch 'DEV' of git.mooctest.net:summer/main-site into DEV

zhangxin hace 7 años
padre
commit
e8e8712d86
Se han modificado 19 ficheros con 170 adiciones y 14 borrados
  1. 1 1
      mooctest-site-server/pom.xml
  2. 7 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java
  3. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java
  4. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/DetailStatisticsService.java
  5. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/ZipService.java
  6. 15 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImpl.java
  7. 89 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/ZipServiceImpl.java
  8. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/IndexServiceImpl.java
  9. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/KibugCaseService.java
  10. 5 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/KibugCaseServiceImpl.java
  11. 4 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java
  12. 5 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/DetailStatisticsServiceImpl.java
  13. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/PaperController.java
  14. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/DetailStatisticsLogic.java
  15. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImpl.java
  16. 6 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/DetailStatisticsLogicImpl.java
  17. 7 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/OSSLogicImpl.java
  18. 8 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/util/mongodb/MongoAPIUtils.java
  19. 1 0
      mooctest-site-server/src/main/resources/application.yaml

+ 1 - 1
mooctest-site-server/pom.xml

@@ -295,7 +295,7 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-math3</artifactId>
-            <version>3.6.1</version>
+            <version>3.6</version>
         </dependency>
     </dependencies>
 

+ 7 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java

@@ -20,8 +20,13 @@ public interface PaperDao extends PagingAndSortingRepository<Paper, Long>, JpaSp
 
     Paper findById(long paperId);
 
-    @Query("select p from Paper p,Task2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0")
-    Page<Paper> findByCaseId(@Param("caseId") Long caseId,Pageable pageable);
+    @Query("select p from Paper p,Task2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=1")
+    Page<Paper> findByCaseId(@Param("caseId") Long caseId, Pageable pageable);
+
+    @Query("select p from Paper p,Task2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=0 " +
+            "and p.ownerId=:ownerId")
+    Page<Paper> findByCaseIdPrivate(@Param("caseId") Long caseId,
+                                    @Param("ownerId") Long ownerId, Pageable pageable);
 
 //    @Query("select p from Paper p where p.ownerId=:ownerId")
 //    Page<Paper> findByOwnerId(@Param("ownerId")long ownerId, String keyword, Pageable pageable);

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java

@@ -26,6 +26,8 @@ public interface CaseTakeDao  extends PagingAndSortingRepository<CaseTake, Long>
 
     List<CaseTake> findByTaskIdAndCaseIdAndParticipantId(long taskId,long caseId,long participantId);
 
+    List<CaseTake> findByTaskIdAndParticipantId(long taskId,long participantId);
+
     @Modifying
     @Query("UPDATE CaseTake ct set ct.manual=(select AVG(ms.score) from ManagerScore ms where ct.id=ms.caseTakeId) where ct.taskId=:taskId and ct.caseId=:caseId")
     void updateManual(@Param("taskId") long taskId,@Param("caseId") long caseId);

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/DetailStatisticsService.java

@@ -21,5 +21,7 @@ public interface DetailStatisticsService {
 
     Page<Paper> findPaperByCaseId(long caseId, Pageable pageable);
 
+    Page<Paper> findPaperByCaseId(long caseId, long ownerId, Pageable pageable);
+
     List<Task> findTaskByPaperId(long paperId);
 }

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/ZipService.java

@@ -0,0 +1,11 @@
+package cn.iselab.mooctest.site.service.common;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午12:06 2018/1/2
+ * @Modified By:
+ */
+public interface ZipService {
+    void zipForReport(long examId,long participantId,String path) throws Exception;
+}

+ 15 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/PdfServiceImpl.java

@@ -128,7 +128,11 @@ public class PdfServiceImpl implements PdfService{
             CaseExtends caseExtends=caseService.getCaseExtendsById(caseId);
             pdf.setCaseName(caseExtends.getName());
             pdf.setDescription(caseExtends.getDescription());
-            pdf.setCaseScore(String.valueOf(cases.stream().findAny().filter(casse->  casse.getCaseId()==caseId).get().getMaxScore()));
+            for (AssignedCase assignedCase:cases){
+                if(assignedCase.getCaseId()==caseId){
+                    pdf.setCaseScore(String.valueOf(assignedCase.getMaxScore()));
+                }
+            }
             if(caseExtends.getAnswerWay()== AnswerWayConstants.REPORT)
                 pdf.setReport(this.getReport(examId,workerId,caseId));
             pdfs.add(pdf);
@@ -199,15 +203,21 @@ public class PdfServiceImpl implements PdfService{
         List<CasePDF> casePDFS=pdf.getCases();
         if (casePDFS != null) {
             for(CasePDF casePDF:casePDFS){
+                document.newPage();
                 Paragraph paragraph=new Paragraph("题目"+(pdf.getCases().indexOf(casePDF)+1), PdfUtils.getTitle());
                 paragraph.setLeading(22f);
                 document.add(paragraph);
                 document.add(new Paragraph("案例名称:"+casePDF.getCaseName()+"    案例分数:"+casePDF.getCaseScore(),PdfUtils.getContent()));
                 document.add(new Paragraph("案例描述:"+casePDF.getDescription(),PdfUtils.getContent()));
-                document.add(new Paragraph("考试结果:",PdfUtils.getContent()));
+
                 ReportForMongoDTO report=casePDF.getReport();
                 //如果case的answerWay为report,则将测试用例和缺陷报告写入pdf中
                 if(report!=null) {
+                    if(report.getBugVOS()==null&&report.getReportCases()==null){
+                        document.add(new Paragraph("考试结果:请下载zip文件包查看报告中的测试脚本等附件。",PdfUtils.getContent()));
+                    }else {
+                        document.add(new Paragraph("考试结果:",PdfUtils.getContent()));
+                    }
                     document.add(new Paragraph("测试用例:",PdfUtils.getContent()));
                     List<ReportCaseVO> caseVOS=report.getReportCases();
                     if (caseVOS != null) {
@@ -223,6 +233,9 @@ public class PdfServiceImpl implements PdfService{
                         }
                     }
                 }
+                else {
+                    document.add(new Paragraph("考试结果:请下载zip文件包查看报告中的测试脚本等附件。",PdfUtils.getContent()));
+                }
             }
         }
         document.close();

+ 89 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/common/impl/ZipServiceImpl.java

@@ -0,0 +1,89 @@
+package cn.iselab.mooctest.site.service.common.impl;
+
+import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
+import cn.iselab.mooctest.site.models.fromKibug.Report;
+import cn.iselab.mooctest.site.service.CaseService;
+import cn.iselab.mooctest.site.service.common.MongoAPIService;
+import cn.iselab.mooctest.site.service.common.ZipService;
+import cn.iselab.mooctest.site.service.fromKibug.KibugCaseService;
+import cn.iselab.mooctest.site.service.fromKibug.ReportService;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.GetObjectRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午12:06 2018/1/2
+ * @Modified By:
+ */
+@Service
+public class ZipServiceImpl implements ZipService {
+
+    private final String MAIN_SITE="mooctest-site";
+    private final String APP_SITE="kikbug-public";
+
+    @Autowired
+    KibugCaseService kibugCaseService;
+
+    @Autowired
+    CaseService caseService;
+
+    @Autowired
+    MongoAPIService mongoAPIService;
+
+    @Autowired
+    ReportService reportService;
+
+    @Value("${aliOSS.endPoint}")
+    private String endPoint;
+    @Value("${aliOSS.accessKeyId}")
+    private String accessKeyId;
+    @Value("${aliOSS.accessKeySecret}")
+    private String accessKeySecret;
+    @Value("${aliOSS.bucketName.dev}")
+    private String bucketNameDev;
+    @Value("${aliOSS.bucketName.main}")
+    private String bucketName;
+    @Value("${aliOSS.bucketName.app}")
+    private String bucketNameApp;
+
+    @Override
+    public void zipForReport(long examId,long participantId,String path) throws Exception{
+        OSSClient ossClient = new OSSClient(endPoint, accessKeyId, accessKeySecret);
+        List<CaseTake> caseTakes=kibugCaseService.getCaseTakeList2(examId,participantId);
+        for (CaseTake caseTake:caseTakes){
+            Report report=reportService.getReportByCaseTakeId(caseTake.getId());
+            if(report==null){
+                continue;
+            }
+            if(report.getScriptLocation()!=null&&!report.getScriptLocation().equals("")){
+                downloadFromOSS(path,report.getScriptLocation(),ossClient);
+            }
+            if(report.getReportLocation()!=null&&!report.getReportLocation().equals("")&&!report.getReportLocation().equals("empty")){
+                downloadFromOSS(path,report.getReportLocation(),ossClient);
+            }
+            if(report.getLogLocation()!=null&&!report.getLogLocation().equals("")){
+                String[] logs=report.getLogLocation().split(";");
+                for (String str:logs){
+                    downloadFromOSS(path,str,ossClient);
+                }
+            }
+        }
+        ossClient.shutdown();
+    }
+
+    private void downloadFromOSS(String path,String ossUrl,OSSClient ossClient){
+        String name=ossUrl.split("/")[ossUrl.split("/").length-1];
+        if(ossUrl.indexOf(MAIN_SITE)>-1){
+            ossClient.getObject(new GetObjectRequest(bucketName,ossUrl.substring(50)),new File(path+"/"+name));
+        }else if(ossUrl.indexOf(APP_SITE)>-1){
+            ossClient.getObject(new GetObjectRequest(bucketNameApp,name),new File(path+"/"+name));
+        }
+    }
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/IndexServiceImpl.java

@@ -15,6 +15,7 @@ import cn.iselab.mooctest.site.web.data.fromDev.WeightVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.net.URLEncoder;
 import java.util.List;
 
 /**
@@ -129,7 +130,7 @@ public class IndexServiceImpl implements IndexService{
     @Override
     public String getEntrance(long caseId, String caseName, String dockerImgName){
         try {
-            String secret = EncryptionUtil.encryptDES(caseId + "_" + caseName+ "_" + dockerImgName);
+            String secret = EncryptionUtil.encryptDES(caseId + "_" + URLEncoder.encode(caseName,"utf-8")+ "_" + dockerImgName);
             return secret;
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/KibugCaseService.java

@@ -28,5 +28,7 @@ public interface KibugCaseService {
 
     List<CaseTake> getCaseTakeList(long examId,long caseId) throws Exception;
 
+    List<CaseTake> getCaseTakeList2(long examId,long participantId) throws Exception;
+
     CaseTake getCaseTake(long examId,long caseId,long participantId) throws Exception;
 }

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/KibugCaseServiceImpl.java

@@ -117,6 +117,11 @@ public class KibugCaseServiceImpl implements KibugCaseService {
     public List<CaseTake> getCaseTakeList(long examId,long caseId) throws Exception{
         return caseTakeDao.findByTaskIdAndCaseId(examId,caseId);
     }
+
+    @Override
+    public List<CaseTake> getCaseTakeList2(long examId,long participantId) throws Exception{
+        return caseTakeDao.findByTaskIdAndParticipantId(examId,participantId);
+    }
     @Override
     public CaseTake getCaseTake(long examId,long caseId,long participantId) throws Exception{
         List<CaseTake> caseTakes = caseTakeDao.findByTaskIdAndCaseIdAndParticipantId(examId,caseId,participantId);

+ 4 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java

@@ -22,6 +22,7 @@ import org.hibernate.annotations.SourceType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.DecimalFormat;
 import java.util.*;
 
 /**
@@ -107,13 +108,14 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
         List<Double> result=new ArrayList<>();
         result.add(stat.getMax());
         result.add(stat.getMin());
+        DecimalFormat decimalFormat=new DecimalFormat("######0.00");
         double avg=stat.getAverage();
         double sum=0;
-        result.add(avg);
+        result.add(Double.valueOf(decimalFormat.format(avg)));
         for(Double score:scores){
             sum+=(score-avg)*(score-avg);
         }
-        result.add(sum/(scores.size()-1));
+        result.add(Double.valueOf(decimalFormat.format(sum/(scores.size()-1))));
         return result;
     }
 

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/DetailStatisticsServiceImpl.java

@@ -68,6 +68,11 @@ public class DetailStatisticsServiceImpl implements DetailStatisticsService {
     }
 
     @Override
+    public Page<Paper> findPaperByCaseId(long caseId, long ownerId,Pageable pageable) {
+        return paperDao.findByCaseIdPrivate(caseId,ownerId,pageable);
+    }
+
+    @Override
     public List<Task> findTaskByPaperId(long paperId) {
         List<Exam2Paper> exam2Papers = exam2PaperDao.findByPaperId(paperId);
         List<Long> examIds = exam2Papers.stream().map(Exam2Paper::getExamId).collect(Collectors.toList());

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/PaperController.java

@@ -109,7 +109,7 @@ public class PaperController {
         if(caseId == null) {
             return paperLogic.getPaperList(isPublic, keyword, pageable);
         }else {
-            return detailStatisticsLogic.findPapersByCaseId(caseId,pageable);
+            return detailStatisticsLogic.findPapersByCaseId(caseId,isPublic,pageable);
         }
 
     }

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/DetailStatisticsLogic.java

@@ -18,7 +18,7 @@ public interface DetailStatisticsLogic {
 
     List<PaperVO> findPapersByCaseId(long caseId);
 
-    Page<PaperVO> findPapersByCaseId(long caseId, Pageable pageable);
+    Page<PaperVO> findPapersByCaseId(long caseId, boolean isPublic,Pageable pageable);
 
     List<ExamVO> findExamsByCaseId(long caseId);
 

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImpl.java

@@ -349,7 +349,7 @@ public class CaseLogicImpl implements CaseLogic {
             if (isWorker == true && (caseExtendsVO.getAnswerWay() == AnswerWayConstants.DEV_ECLIPSE || caseExtendsVO.getAnswerWay() == AnswerWayConstants.APP_ECLIPSE
                     || caseExtendsVO.getAnswerWay() == AnswerWayConstants.WEB_ECLIPSE || caseExtendsVO.getAnswerWay() == AnswerWayConstants.JMETER)) {
                 caseExtendsVO.setSecret(indexService.getSecret(userId, examId));
-                caseExtendsVO.setWebIDE("http://47.97.4.113:8081/ws?token="+indexService.getSecret(userId,examId)+"&extraCode="+indexService.getEntrance(caseid,caseExtends.getName(),"java"));
+                caseExtendsVO.setWebIDE("http://47.97.4.113:8081/?token="+indexService.getSecret(userId,examId)+"&extraCode="+indexService.getEntrance(caseid,caseExtends.getName(),"java"));
                 caseExtendsVO.setSubmitted(assignedTaskService.isSubmitted(examId, userId, caseExtendsVO.getId(), caseExtendsVO.getCaseId()));
             }
             if (caseExtendsVO.getAnswerWay() == AnswerWayConstants.REPORT) {

+ 6 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/DetailStatisticsLogicImpl.java

@@ -11,6 +11,7 @@ import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.PaperVOWrapper;
 import cn.iselab.mooctest.site.web.logic.DetailStatisticsLogic;
 import cn.iselab.mooctest.site.web.util.Converter;
+import org.apache.shiro.SecurityUtils;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -65,8 +66,12 @@ public class DetailStatisticsLogicImpl implements DetailStatisticsLogic {
     }
 
     @Override
-    public Page<PaperVO> findPapersByCaseId(long caseId, Pageable pageable) {
+    public Page<PaperVO> findPapersByCaseId(long caseId,boolean isPublic ,Pageable pageable) {
         Page<Paper> paperList = detailStatisticsService.findPaperByCaseId(caseId,pageable);
+        if(!isPublic) {
+            long userId = ((User)SecurityUtils.getSubject().getSession().getAttribute("User")).getId();
+            paperList = detailStatisticsService.findPaperByCaseId(caseId,userId,pageable);
+        }
         return paperVOWrapper.wrapPaperList(paperList);
     }
 

+ 7 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/OSSLogicImpl.java

@@ -6,6 +6,7 @@ import cn.iselab.mooctest.site.data.CasePDF;
 import cn.iselab.mooctest.site.data.ReportPDF;
 import cn.iselab.mooctest.site.data.config.OSSClientConfig;
 import cn.iselab.mooctest.site.service.common.PdfService;
+import cn.iselab.mooctest.site.service.common.ZipService;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.OSSLogic;
 import com.aliyun.oss.HttpMethod;
@@ -53,6 +54,9 @@ public class OSSLogicImpl implements OSSLogic {
     @Autowired
     private PdfService pdfService;
 
+    @Autowired
+    private ZipService zipService;
+
     @Value("${aliOSS.endPoint}")
     private String endPoint;
     @Value("${aliOSS.accessKeyId}")
@@ -234,6 +238,7 @@ public class OSSLogicImpl implements OSSLogic {
                 ossClient.getObject(new GetObjectRequest(bucketNameDev, key), new File(FileUtils.getUserDirectory()+"/"+fileName+"/"+name));
             }
             ossClient.shutdown();
+            zipService.zipForReport(examId,workerId,FileUtils.getUserDirectory()+"/"+fileName);
             ZipFile zipFile=new ZipFile(file);
             ZipParameters parameters=new ZipParameters();
             parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
@@ -269,8 +274,8 @@ public class OSSLogicImpl implements OSSLogic {
     @Override
     public String getPdf(Long examId, Long workerId, String fileName) throws Exception{
         ReportPDF reportPDF=pdfService.getReportPDF(examId,workerId);
-        OSSClient client = new OSSClient(endPoint, accessKeyId, accessKeySecret);
-        if(client.doesObjectExist(bucketName,getBarGraphKey(examId.toString()))){
+        File file=new File(SAVE_PATH+getBarGraphKey(examId.toString()));
+        if(file.exists()){
             reportPDF.setBarGraph(SAVE_PATH+getBarGraphKey(examId.toString()));
         }else {
             reportPDF.setBarGraph(null);

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/util/mongodb/MongoAPIUtils.java

@@ -13,6 +13,14 @@ import java.util.Map;
  */
 @Component
 public class MongoAPIUtils {
+    public static final String MONGODB_HOST = "114.55.91.27";
+    public static final String MONGODB_PORT = "80";
+    public static final String MONGODB_DB = "testdb";
+    public static final String MONGODB_COLLECTION_REPORT= "report";
+    public static final String MONGODB_COLLECTION_MUTATION = "mutation";
+    public static final String MONGODB_COLLECTION_CASE_GRAPH = "caseGraph";
+    public static final String MONGODB_COLLECTION_CAUGHT_NODE = "caughtNode";
+    public static final String MONGODB_COLLECTION_USER_CATCH = "userCatch";
 
 
 

+ 1 - 0
mooctest-site-server/src/main/resources/application.yaml

@@ -49,6 +49,7 @@ aliOSS:
         dev: mooctest-dev
         static: mooctest-mutation
         main: mooctest-site
+        app: kikbug-public
 ---
 # 开发环境
 spring: