Quellcode durchsuchen

Merge branch 'Develop' into enhance_onlinejudge_support_new_oss_upload_logic

menduo vor 6 Jahren
Ursprung
Commit
941ac28343

+ 4 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ScoreRuleKey.java

@@ -21,6 +21,9 @@ public enum ScoreRuleKey {
     //selenium
     ELEMENT,
     OPERATION,
-    PAGE
+    PAGE,
+
+    //python社区
+    cases
 
 }

+ 8 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImpl.java

@@ -8,6 +8,7 @@ import cn.iselab.mooctest.site.models.WeightGeneral;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRulePK;
 import cn.iselab.mooctest.site.service.CalculateScoreService;
+import cn.iselab.mooctest.site.service.ExamPythonCommunityService;
 import cn.iselab.mooctest.site.service.WeightGeneralService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.web.data.forMongo.CaseGraphDTO;
@@ -37,6 +38,8 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
     private WeightGeneralService weightGeneralService;
     @Autowired
     private WeightGeneralDao weightGeneralDao;
+    @Autowired
+    private ExamPythonCommunityService examPythonCommunityService;
 
     @Override
     public List<ScoreRuleItemVO> getKibugScoreRule(long taskId, long caseId){
@@ -68,7 +71,11 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
                 weightGeneralService.setWeight(taskId, caseId, nodeTypeList.get(0), 100);
             });
             if(!opNodeTypeList.isPresent())
-                weightGeneralService.setWeight(taskId, caseId, ScoreRuleKey.manual.toString(), 100);
+                if(examPythonCommunityService.isPythonCommunityExam(taskId)){
+                    weightGeneralService.setWeight(taskId, caseId, ScoreRuleKey.cases.toString(),100);
+                }else{
+                    weightGeneralService.setWeight(taskId, caseId, ScoreRuleKey.manual.toString(), 100);
+                }
 
         }
 

+ 63 - 25
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ScoreController.java

@@ -6,19 +6,17 @@ import cn.iselab.mooctest.site.common.enums.SortOrder;
 import cn.iselab.mooctest.site.data.PageData;
 import cn.iselab.mooctest.site.data.Sort;
 import cn.iselab.mooctest.site.models.ApplyUploadRecord;
-import cn.iselab.mooctest.site.models.Exam;
 import cn.iselab.mooctest.site.service.CaughtNodeService;
 import cn.iselab.mooctest.site.service.CompeteAnalysisAssignedTaskService;
-import cn.iselab.mooctest.site.service.enums.ExamStatus;
 import cn.iselab.mooctest.site.web.data.AssignedTaskVO;
 import cn.iselab.mooctest.site.web.data.CompeteAnalysisVO;
 import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.TypeScoreJson;
 import cn.iselab.mooctest.site.web.data.UploadCaughtNodeJson;
 import cn.iselab.mooctest.site.web.data.WeightDirtyVO;
 import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CaughtNodeDTO;
 import cn.iselab.mooctest.site.web.data.response.ResponseVO;
 import cn.iselab.mooctest.site.web.data.response.ServerCode;
-import cn.iselab.mooctest.site.web.exception.ServerException;
 import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
 import cn.iselab.mooctest.site.web.logic.ExamLogic;
 import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
@@ -106,6 +104,21 @@ public class ScoreController extends BaseController {
     }
 
     @RequestMapping(value = UrlConstants.API_COMMON +
+            "generalUploadCaughtNode", method = RequestMethod.PUT)
+    public ResponseVO generalCatchNode(@RequestBody UploadCaughtNodeJson uploadCaughtNodeJson)
+            throws Exception {
+
+        return generalCatchNode(
+                uploadCaughtNodeJson.getCaseId(),
+                uploadCaughtNodeJson.getUploadTime(),
+                uploadCaughtNodeJson.getUploadId(),
+                uploadCaughtNodeJson.getSource(),
+                uploadCaughtNodeJson.getCaughtNodeDTOs()
+        );
+
+    }
+
+    @RequestMapping(value = UrlConstants.API_COMMON +
             "generalUploadCaughtNode/{caseId}/{uploadTime}/{uploadId}/{source}", method =
             RequestMethod.PUT)
     public ResponseVO generalCatchNode(
@@ -115,18 +128,11 @@ public class ScoreController extends BaseController {
             @PathVariable("source") String source,
             @RequestBody List<CaughtNodeDTO> caughtNodeDTOs) throws Exception {
 
-        ApplyUploadRecord applyUploadRecord = generalCalculateScoreLogic
-                .getApplyUploadRecord(uploadId);
-        if(applyUploadRecord == null){
-            return new ResponseVO(ServerCode.NO_APPLY_FOUND);
-        }
-
-        ExamVO exam = examLogic.getExamById(applyUploadRecord.getExamId());
-        long endTime = exam.getEndTime();
-        long applyTime = Long.parseLong(applyUploadRecord.getApplyTime());
-        if(applyTime > endTime){
-            return new ResponseVO(ServerCode.EXAM_ENDED);
+        ResponseVO<ApplyUploadRecord> responseVO = validateSubmit(uploadId);
+        if(responseVO.getCode() != ServerCode.SUCCESS.getCode()){
+            return responseVO;
         }
+        ApplyUploadRecord applyUploadRecord = responseVO.getData();
         calculateSocreLogic.recordNode(
                 applyUploadRecord.getExamId(),
                 caseId,
@@ -135,22 +141,54 @@ public class ScoreController extends BaseController {
                 source,
                 caughtNodeDTOs,applyUploadRecord.getOssUrl());
         return new ResponseVO(ServerCode.SUCCESS);
-
     }
 
     @RequestMapping(value = UrlConstants.API_COMMON +
-            "generalUploadCaughtNode", method = RequestMethod.PUT)
-    public ResponseVO generalCatchNode(@RequestBody UploadCaughtNodeJson uploadCaughtNodeJson)
-            throws Exception {
+            "generalUploadTypeScore/{caseId}/{uploadTime}/{uploadId}/{source}", method =
+            RequestMethod.PUT)
+    public ResponseVO uploadTypeScore(
+            @PathVariable("caseId")long caseId,
+            @PathVariable("uploadTime")String uploadTime,
+            @PathVariable("uploadId")long uploadId,
+            @PathVariable("source")String source,
+            @RequestBody List<TypeScoreJson> typeScoreJsonList
+            ){
+        ResponseVO<ApplyUploadRecord> responseVO = validateSubmit(uploadId);
+        if(responseVO.getCode() != ServerCode.SUCCESS.getCode()){
+            return responseVO;
+        }
+        ApplyUploadRecord applyUploadRecord = responseVO.getData();
+        calculateSocreLogic.recordTypeScoreDirectly(
+                applyUploadRecord.getExamId(),
+                caseId,
+                applyUploadRecord.getWorkerId(),
+                uploadTime,
+                applyUploadRecord.getOssUrl(),
+                source,
+                typeScoreJsonList);
 
-        return generalCatchNode(
-                uploadCaughtNodeJson.getCaseId(),
-                uploadCaughtNodeJson.getUploadTime(),
-                uploadCaughtNodeJson.getUploadId(),
-                uploadCaughtNodeJson.getSource(),
-                uploadCaughtNodeJson.getCaughtNodeDTOs()
-                );
+        return new ResponseVO(ServerCode.SUCCESS);
+    }
 
+    /**
+     * 在上传分数前做申请判断和超时判断
+     * @param uploadId
+     * @return
+     */
+    private ResponseVO<ApplyUploadRecord> validateSubmit(long uploadId){
+        ApplyUploadRecord applyUploadRecord = generalCalculateScoreLogic
+                .getApplyUploadRecord(uploadId);
+        if(applyUploadRecord == null){
+            return new ResponseVO<>(ServerCode.NO_APPLY_FOUND);
+        }
+
+        ExamVO exam = examLogic.getExamById(applyUploadRecord.getExamId());
+        long endTime = exam.getEndTime();
+        long applyTime = Long.parseLong(applyUploadRecord.getApplyTime());
+        if(applyTime > endTime){
+            return new ResponseVO<>(ServerCode.EXAM_ENDED);
+        }
+        return new ResponseVO<>(ServerCode.SUCCESS, applyUploadRecord);
     }
 
     @RequestMapping(value = UrlConstants.API_COMMON +

+ 6 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ScoreRuleController.java

@@ -6,6 +6,7 @@ import cn.iselab.mooctest.site.common.enums.ScoreRuleKey;
 import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.Exam;
 import cn.iselab.mooctest.site.service.CaseService;
+import cn.iselab.mooctest.site.service.ExamPythonCommunityService;
 import cn.iselab.mooctest.site.service.ExamService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.web.ctrl.BaseController;
@@ -39,6 +40,8 @@ public class ScoreRuleController  extends BaseController {
     private CaseService caseService;
     @Autowired
     private ScoreRuleLogic scoreRuleLogic;
+    @Autowired
+    private ExamPythonCommunityService examPythonCommunityService;
 
     @RequestMapping(value= UrlConstants.API_KIBUG+"scoreRule", method = RequestMethod.GET)
     public Map<String, Object> get(@RequestParam(name = "taskId") Long taskId,
@@ -47,6 +50,9 @@ public class ScoreRuleController  extends BaseController {
         CaseExtends caseExtends = caseService.getCaseExtendsById(caseId);
         List<ScoreRuleItemVO> scoreRules = scoreRuleService.getGenaralScoreRule(taskId, caseId);
         List<String> options = new ArrayList<>();
+        if(examPythonCommunityService.isPythonCommunityExam(taskId)){
+            options.add(ScoreRuleKey.cases.toString());
+        }
         options.add(ScoreRuleKey.manual.toString());
         options.addAll(scoreRuleService.getOptionsFromNode(taskId, caseId));
 //        switch(caseExtends.getAnswerWay().intValue()){

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/TypeScoreJson.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.web.data;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Created on 2019/2/26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TypeScoreJson {
+
+    private String type;
+    private double score;
+}

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CalculateSocreLogic.java

@@ -5,6 +5,7 @@ import cn.iselab.mooctest.site.data.PageData;
 import cn.iselab.mooctest.site.data.Sort;
 import cn.iselab.mooctest.site.web.data.AssignedTaskVO;
 import cn.iselab.mooctest.site.web.data.CompeteAnalysisVO;
+import cn.iselab.mooctest.site.web.data.TypeScoreJson;
 import cn.iselab.mooctest.site.web.data.WeightDirtyVO;
 import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CaughtNodeDTO;
 
@@ -43,4 +44,7 @@ public interface CalculateSocreLogic {
 
     void addNode(Long examId, Long caseId, Long userId, String uploadTime,
             List<CaughtNodeDTO> caughtNodeDTOs, long uploadId) throws Exception;
+
+    void recordTypeScoreDirectly(long examId, long caseId, long userId, String uploadTime, String
+            ossUrl,String source, List<TypeScoreJson> typeScoreList);
 }

+ 44 - 16
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CalculateScoreLogicImpl.java

@@ -3,6 +3,7 @@ package cn.iselab.mooctest.site.web.logic.impl;
 import cn.iselab.mooctest.site.common.constant.AnswerWayConstants;
 import cn.iselab.mooctest.site.common.enums.CompeteAnalysisType;
 import cn.iselab.mooctest.site.data.CaseBlock;
+import cn.iselab.mooctest.site.data.GeneralGradeDTO;
 import cn.iselab.mooctest.site.data.PageData;
 import cn.iselab.mooctest.site.data.Sort;
 import cn.iselab.mooctest.site.data.UploadRecordDTO;
@@ -19,6 +20,7 @@ import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.web.data.AssignedTaskVO;
 import cn.iselab.mooctest.site.web.data.CompeteAnalysisVO;
+import cn.iselab.mooctest.site.web.data.TypeScoreJson;
 import cn.iselab.mooctest.site.web.data.WeightDirtyVO;
 import cn.iselab.mooctest.site.web.data.forMongo.MutationForMongoDTO;
 import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CatchDTO;
@@ -505,22 +507,8 @@ public class CalculateScoreLogicImpl extends BaseLogic implements CalculateSocre
         //上传caughtNode
         recordNodeOnly(examId,caseId,userId,uploadTime,caughtNodeDTOs);
         //存储上传记录
-        UploadRecordDTO uploadRecordDTO = generalCalculateScoreService.getUploadRecord(userId,
-                examId,caseId,uploadTime);
-        if(uploadRecordDTO == null){
-            uploadRecordDTO = new UploadRecordDTO();
-            uploadRecordDTO.setExamId(examId);
-            uploadRecordDTO.setCaseId(caseId);
-            uploadRecordDTO.setWorkerId(userId);
-            uploadRecordDTO.setUploadTime(uploadTime);
-        }
-        uploadRecordDTO.setOSSUrl(ossUrl);
-        uploadRecordDTO.setSource(source);
-
-        uploadRecordDTO = generalCalculateScoreService.saveUploadRecords(uploadRecordDTO);
-        if(uploadRecordDTO == null){
-            throw new ServerException(ServerCode.UPLOAD_RECORD_FAIL);
-        }
+        UploadRecordDTO uploadRecordDTO = saveUploadRecord(examId,caseId, userId, uploadTime,
+                ossUrl, source);
         //调用算分
         generalCalculateScoreComponent.saveCaughtDetails(uploadRecordDTO.getId(),examId, caseId,
                 userId, caughtNodeDTOs);
@@ -536,9 +524,49 @@ public class CalculateScoreLogicImpl extends BaseLogic implements CalculateSocre
                 caughtNodeDTOs);
     }
 
+
     private void recordNodeOnly(Long examId, Long caseId, Long userId, String uploadTime,
             List<CaughtNodeDTO> caughtNodeDTOs) throws Exception {
         nodeOperationComponent.writeNode(examId, caseId, userId, uploadTime, caughtNodeDTOs);
     }
 
+    @Override
+    public void recordTypeScoreDirectly(long examId, long caseId, long userId,
+            String uploadTime, String ossUrl, String source, List<TypeScoreJson> typeScoreList) {
+        //存储上传记录
+        UploadRecordDTO uploadRecordDTO = saveUploadRecord(examId,caseId, userId, uploadTime,
+                ossUrl, source);
+
+        List<GeneralGradeDTO> generalGradeDTOList = typeScoreList.stream()
+                .map(typeScore -> new GeneralGradeDTO(typeScore.getType(),typeScore.getScore(),
+                        uploadRecordDTO.getId()))
+                .collect(Collectors.toList());
+        generalCalculateScoreService.updateTypeGrade(generalGradeDTOList);
+        generalCalculateScoreComponent.calculateCaseScore(examId, caseId, userId);
+    }
+
+    private UploadRecordDTO saveUploadRecord(long examId, long caseId, long userId,
+            String uploadTime, String ossUrl, String source){
+        //存储上传记录
+        UploadRecordDTO uploadRecordDTO = generalCalculateScoreService.getUploadRecord(userId,
+                examId,caseId,uploadTime);
+        if(uploadRecordDTO == null){
+            uploadRecordDTO = new UploadRecordDTO();
+            uploadRecordDTO.setExamId(examId);
+            uploadRecordDTO.setCaseId(caseId);
+            uploadRecordDTO.setWorkerId(userId);
+            uploadRecordDTO.setUploadTime(uploadTime);
+        }
+        uploadRecordDTO.setOSSUrl(ossUrl);
+        uploadRecordDTO.setSource(source);
+
+        uploadRecordDTO = generalCalculateScoreService.saveUploadRecords(uploadRecordDTO);
+        if(uploadRecordDTO == null){
+            throw new ServerException(ServerCode.UPLOAD_RECORD_FAIL);
+        }
+
+        return uploadRecordDTO;
+    }
+
+
 }