Ver Fonte

Merge branch 'DEV' into feature_add_teacher_review

梅杰 há 7 anos atrás
pai
commit
f1beaec962
13 ficheiros alterados com 176 adições e 57 exclusões
  1. 51 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/PythonNodeCallBack.java
  2. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java
  3. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ApplicationStartup.java
  4. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/TargetGraphService.java
  5. 5 26
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/PluginServiceImpl.java
  6. 5 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java
  7. 13 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/TargetGraphServiceImpl.java
  8. 5 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionController.java
  9. 13 21
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionManagementController.java
  10. 8 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/PluginController.java
  11. 13 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/PythonNodeProgressLogic.java
  12. 52 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/impl/PythonNodeProgressLogicImpl.java
  13. 6 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java

+ 51 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/PythonNodeCallBack.java

@@ -0,0 +1,51 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.AsyncScheduleService;
+import cn.iselab.mooctest.site.service.TargetGraphService;
+import cn.iselab.mooctest.site.util.data.JSONUtil;
+import cn.iselab.mooctest.site.web.data.forMongo.TargetGraphDTO;
+import java.util.ArrayList;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * python node callback
+ *
+ * @author yyy
+ * @create 2018-03-22 16:46
+ */
+@Component
+@Slf4j
+public class PythonNodeCallBack implements AsyncTaskCallBack {
+
+  @Autowired
+  TargetGraphService targetGraphService;
+
+  @Autowired
+  AsyncScheduleService asyncScheduleService;
+
+  @Override
+  public void onSuccess(Map<String, String> context, String result) {
+    System.out.println("result is: --------------"+result+"---------------");
+    if(!result.isEmpty()){
+      TargetGraphDTO targetGraphDTO = JSONUtil.json2Obj(result,TargetGraphDTO.class);
+      Long targetId = Long.parseLong(context.get("targetId"));
+      targetGraphDTO.setTargetId(targetId);
+      targetGraphService.saveTargetGraph(targetGraphDTO);
+      try {
+        targetGraphService.saveTargetGraphJson(result,targetId);
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
+  }
+
+  @Override
+  public void onError(Map<String, String> context, String result) {
+      log.error("---------------------python generate node error-----------------------");
+  }
+
+
+}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java

@@ -6,7 +6,8 @@ import lombok.Getter;
  * Created by tangshanshan on 2018/2/26.
  */
 public enum AsyncJobTool {
-    MOCKTOOL("mockTool",(short)1),PDF("pdf",(short)2),MUTATION("mutation",(short)3),MCNODE("mcNode",(short)4);
+    MOCKTOOL("mockTool",(short)1),PDF("pdf",(short)2),MUTATION("mutation",(short)3),MCNODE("mcNode",(short)4),
+    PYTHON_NODE("python-node",(short)5);
 
     @Getter
     private String name;

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ApplicationStartup.java

@@ -14,7 +14,7 @@ public class ApplicationStartup implements ApplicationListener<ContextRefreshedE
         System.out.println("-----------------------------------------------------------------------------------------");
         System.out.println("listener");
         ExamController examController = event.getApplicationContext().getBean(ExamController.class);
-        examController.updateStatusForAllTask();
+        //examController.updateStatusForAllTask();
         examController.startInitExamSchedulerMap();
         System.out.println("exam scheduler map initialized");
         System.out.println("-----------------------------------------------------------------------------------------");

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

@@ -18,4 +18,6 @@ public interface TargetGraphService {
     TargetGraphDTO updateTargetGraph(TargetGraphDTO dto);
 
     void saveTargetGraphJson(TargetGraphDTO dto)throws Exception;
+
+    void saveTargetGraphJson(String targetGraphStr,Long id);
 }

+ 5 - 26
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/PluginServiceImpl.java

@@ -170,32 +170,11 @@ public class PluginServiceImpl extends BaseService implements PluginService{
 
     @Override
     public boolean saveDebugGrade(long workerId, long taskId, long caseId, double score) {
-        List<Grade> gradeList = gradeDao.findByTaskIdAndWorkerIdAndCaseId(taskId, workerId, caseId);
-        //如果已经存在了分数,就改
-        if (gradeList != null && gradeList.size() != 0) {
-            Grade grade = gradeList.get(0);
-            grade.setScore(score);
-
-            try {
-                assignedTaskService.recordScore(taskId,caseId,workerId,score);
-            }catch (Exception e){
-                return false;
-            }
-            return gradeDao.save(grade) != null;
-
-        } else {
-            Grade grade = new Grade();
-            grade.setTaskId(taskId);
-            grade.setWorkerId(workerId);
-            grade.setCaseId(caseId);
-            grade.setScore(score);
-
-            try {
-                assignedTaskService.recordScore(taskId,caseId,workerId,score);
-            }catch (Exception e){
-                return false;
-            }
-            return gradeDao.save(grade) != null;
+        try {
+            assignedTaskService.recordScore(taskId,caseId,workerId,score);
+            return true;
+        }catch (Exception e){
+            return false;
         }
     }
 }

+ 5 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java

@@ -74,7 +74,11 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
     public void calculateDevScore(long taskId, long caseId) {
         List<Grade> grades=gradeDao.findByTaskIdAndCaseId(taskId,caseId);
         Weight weight=weightDao.findByTidAndCid(taskId, caseId);
-        this.dev(taskId,caseId,grades,weight);
+        if(grades!=null&&grades.size()>0&&weight!=null) {
+            this.dev(taskId, caseId, grades, weight);
+        }else {
+            return;
+        }
     }
 
     @Override

+ 13 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/TargetGraphServiceImpl.java

@@ -77,6 +77,19 @@ public class TargetGraphServiceImpl implements TargetGraphService{
     }
 
     @Override
+    public void saveTargetGraphJson(String targetGraphStr,Long id){
+        try{
+            FileWriter fw1 = new FileWriter(DownloadConstants.SAVE_PATH + "node/" + id + "_sc.json");
+            PrintWriter out1 = new PrintWriter(fw1);
+            out1.write(targetGraphStr);
+            out1.close();
+            fw1.close();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
     public void saveTargetGraphJson(TargetGraphDTO dto)throws Exception{
         JSONObject objectSC=new JSONObject();
         objectSC.put("categories","mutation");

+ 5 - 7
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionController.java

@@ -1,8 +1,6 @@
 package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
-import cn.iselab.mooctest.site.models.Competition;
-import cn.iselab.mooctest.site.models.Competition2Task;
 import cn.iselab.mooctest.site.models.Qualification;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.web.data.AddonsVO;
@@ -24,21 +22,21 @@ public class CompetitionController {
 
     @RequestMapping(value = UrlConstants.API + "competition", method = RequestMethod.GET)
     public List<CompetitionVO> getContest() {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
-        return competitionLogic.getCompetitionList(user.getId());
+        Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
+        return competitionLogic.getCompetitionList(userId);
     }
 
     @RequestMapping(value = UrlConstants.API + "competition/enter/{competitionId}", method = RequestMethod.POST)
     public Qualification enterContest(@PathVariable("competitionId") Long competitionId) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
-        return competitionLogic.enterCompetition(competitionId, user.getId());
+        Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
+        return competitionLogic.enterCompetition(competitionId, userId);
     }
 
     @RequestMapping(value = UrlConstants.API + "competition/addons/{qualificationId}/{type}", method = RequestMethod.POST)
     public List<AddonsVO> updateAddons(@PathVariable("qualificationId") Long qualificationId,
                                        @PathVariable("type") Integer type,
                                        @RequestBody List<AddonsVO> addonsVOList) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
+        Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
         if(addonsVOList.size()>3){
             throw new IllegalArgumentException("list size > 3");
         }

+ 13 - 21
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionManagementController.java

@@ -26,28 +26,25 @@ public class CompetitionManagementController {
     private CompetitionLogic competitionLogic;
 
     //获得所有大赛 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition", method = RequestMethod.GET)
     public List<CompetitionVO> getAllCompetitions() {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         List<CompetitionVO> result = competitionLogic.getAllCompetition();
         return result;
     }
 
     //创建大赛 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition", method = RequestMethod.POST)
     public CompetitionVO createCompetition(@RequestBody CompetitionVO competitionVO) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         CompetitionVO result = competitionLogic.createCompetition(competitionVO);
         return result;
     }
 
     //根据id获取大赛基本信息 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}", method = RequestMethod.GET)
     public CompetitionVO getCompetitionById(@PathVariable("competitionId") Long competitionId) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         if(competitionId == null) {
             throw  new HttpBadRequestException("bad competitionId");
         }
@@ -59,10 +56,9 @@ public class CompetitionManagementController {
     }
 
     //更新比赛基本信息 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition", method = RequestMethod.PUT)
     public CompetitionVO updateCompetition(@RequestBody CompetitionVO competitionVO) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         CompetitionVO result = competitionLogic.updateCompetition(competitionVO);
         if(result == null) {
             throw new HttpBadRequestException("Bad CompetitionVO");
@@ -71,40 +67,39 @@ public class CompetitionManagementController {
     }
 
     //为指定比赛批量添加选手资格
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant/batch", method = RequestMethod.POST)
     public void batchAddQualification4Task(@RequestBody QualificationRule dto) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         competitionLogic.batchAddQualification4Task(dto);
 
     }
 
     //为指定比赛单个添加选手资格
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant/single", method = RequestMethod.POST)
     public void addQualification4Task(@RequestBody QualificationRule dto) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         competitionLogic.addQualification4Task(dto);
     }
 
     //查看某个比赛赛后选手的资格
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant/{index}", method = RequestMethod.GET)
     public List<QualificationVO> getAllQualification4Task(@PathVariable("competitionId") Long competitionId, @PathVariable("index") Integer index) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         return competitionLogic.getAllQualification4Task(competitionId, index);
     }
 
     //确认晋级,根据资格导入比赛对应班级
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant", method = RequestMethod.PUT)
     public void addParticipant2TaskByQualification(@RequestBody QualificationRule dto) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         competitionLogic.addParticipant2TaskByQualification(dto.getCompetitionId(), dto.getIndex());
     }
 
     //为指定大赛添加考试 √
 //    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/task", method = RequestMethod.PUT)
     public Competition2TaskVO addTask2Competition(@RequestBody Competition2TaskVO competition2TaskVO) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         if(competition2TaskVO == null) {
             throw new HttpBadRequestException("Bad competition2TaskVO");
         }
@@ -116,10 +111,9 @@ public class CompetitionManagementController {
     }
 
     //根据id获得所有考试信息 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/task", method = RequestMethod.GET)
     public List<ExamVO> getTasksInCompetition(@PathVariable("competitionId") Long competitionId) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         if(competitionId == null) {
             throw new HttpBadRequestException("Bad competitionId");
         }
@@ -128,10 +122,9 @@ public class CompetitionManagementController {
     }
 
     //更新大赛考试状态,记得更新Competition这个实体 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/task/{taskId}", method = RequestMethod.PUT)
     public Competition2TaskVO updateTaskActiveInfo(@RequestBody Competition2TaskVO competition2TaskVO) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         Competition2TaskVO result = competitionLogic.updateTaskActiveInfo(competition2TaskVO);
         if(result == null) {
             throw new HttpBadRequestException("Bad competition2TaskVO");
@@ -140,9 +133,9 @@ public class CompetitionManagementController {
     }
 
     //更新某个比赛的下一阶段比赛
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/task/{taskId}/status", method = RequestMethod.PUT)
     public Competition2TaskVO updateTaskNextStatus(@RequestBody Competition2TaskVO competition2TaskVO) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         Competition2TaskVO result = competitionLogic.updateTaskNextStatus(competition2TaskVO);
         if(result == null) {
             throw new HttpBadRequestException("Bad competition2TaskVO");
@@ -158,10 +151,9 @@ public class CompetitionManagementController {
     }
 
     //删除考试 √
-//    @RequiresRoles(value = "manager")
+    @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/task/{index}", method = RequestMethod.DELETE)
     public List<ExamVO> deleteTask2Competition(@PathVariable("competitionId") Long competitionId, @PathVariable("index") Long index) {
-        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         competitionLogic.deleteTaskInCompetition(competitionId, index);
         return competitionLogic.getTasksInCompetition(competitionId);
     }

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/PluginController.java

@@ -99,6 +99,14 @@ public class PluginController extends BaseController{
 
     }
 
+    /**
+     * This ctrl is for those cases which has no weight
+     * @param score
+     * @param workerId
+     * @param caseId
+     * @param taskId
+     * @return true or false
+     */
     @RequestMapping(value = UrlConstants.API_DEV + "plugin/debug", method = RequestMethod.POST)
     public boolean addDebugGrade(@RequestParam(name = "score") double score,
                                  @RequestParam(name = "workerId") long workerId,

+ 13 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/PythonNodeProgressLogic.java

@@ -0,0 +1,13 @@
+package cn.iselab.mooctest.site.web.logic.asyncProgress;
+
+/**
+ * python node progress logic
+ *
+ * @author yyy
+ * @create 2018-03-26 16:25
+ */
+public interface PythonNodeProgressLogic {
+
+  void triggerTargetAnalysis(Long targetId, String downloadUrl);
+
+}

+ 52 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/impl/PythonNodeProgressLogicImpl.java

@@ -0,0 +1,52 @@
+package cn.iselab.mooctest.site.web.logic.asyncProgress.impl;
+
+import cn.iselab.mooctest.site.common.acyncTask.PythonNodeCallBack;
+import cn.iselab.mooctest.site.common.enums.AsyncJobTool;
+import cn.iselab.mooctest.site.service.AsyncScheduleService;
+import cn.iselab.mooctest.site.service.AsyncTaskService;
+import cn.iselab.mooctest.site.web.data.forMongo.AsyncTaskDTO;
+import cn.iselab.mooctest.site.web.logic.asyncProgress.PythonNodeProgressLogic;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yyy
+ * @create 2018-03-26 16:28
+ */
+@Service
+public class PythonNodeProgressLogicImpl implements PythonNodeProgressLogic{
+
+  @Autowired
+  AsyncTaskService asyncTaskService;
+  @Autowired
+  AsyncScheduleService asyncScheduleService;
+
+  @Override
+  public void triggerTargetAnalysis(Long targetId, String downloadUrl) {
+    AsyncTaskDTO asyncTaskDTO = asyncTaskService.getAsyncTask(AsyncJobTool.PYTHON_NODE,targetId);
+    if(asyncTaskDTO == null){
+      List<Map<String,String>> params = new ArrayList<>();
+      List<Map<String,String>> contexts = new ArrayList<>();
+
+      Map<String,String> param = new HashMap<>();
+      param.put("downloadURL",downloadUrl);
+      param.put("extraArgs",generatePythonNodeTargetExtraArgs(downloadUrl));
+      params.add(param);
+
+      Map<String,String> context = new HashMap<>();
+      context.put("targetId",targetId.toString());
+      contexts.add(context);
+
+      asyncScheduleService.start(AsyncJobTool.PYTHON_NODE,params,contexts,PythonNodeCallBack.class);
+    }
+  }
+
+  private String generatePythonNodeTargetExtraArgs(String downloadUrl){
+    String zipName = downloadUrl.split("/")[downloadUrl.split("/").length - 1];
+    return "-f "+ zipName;
+  }
+}

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

@@ -27,6 +27,7 @@ import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.TargetLogic;
 import cn.iselab.mooctest.site.web.logic.asyncProgress.McNodeProgressLogic;
 import cn.iselab.mooctest.site.web.logic.asyncProgress.MutationProgressLogic;
+import cn.iselab.mooctest.site.web.logic.asyncProgress.PythonNodeProgressLogic;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -89,6 +90,9 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
     @Autowired
     McNodeProgressLogic mcNodeProgressLogic;
 
+    @Autowired
+    PythonNodeProgressLogic pythonNodeProgressLogic;
+
     @Override
     public List<TargetVO> getManagerTargets(long managerId) throws Exception {
 
@@ -195,6 +199,8 @@ public class TargetLogicImpl extends BaseLogic implements TargetLogic {
         if(devTarget.getLanguage().equals(DevLanguageConstants.JAVA)){
             mutationProgressLogic.trigegrTargetAnalysis(app.getId(),app.getUrl());
             mcNodeProgressLogic.trigegrTargetAnalysis(app.getId(),app.getUrl());
+        }else if(devTarget.getLanguage().equals(DevLanguageConstants.PYTHON)){
+            pythonNodeProgressLogic.triggerTargetAnalysis(app.getId(),app.getUrl());
         }
         return app.getId();
     }