Explorar el Código

Merge branch 'fix-wechat' into 'Release'

fix wechat & fix mutation



See merge request !362

huangyong hace 8 años
padre
commit
d07def43ae

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/internal/ContestResultVO.java

@@ -10,5 +10,5 @@ public class ContestResultVO {
 
     private String name;
     private Double score;
-    private Long rank;
+    private Double rank;
 }

+ 11 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/fromDev/impl/APFDLogicImpl.java

@@ -13,6 +13,7 @@ import cn.iselab.mooctest.site.web.data.forMongo.MutationForMongoDTO;
 import cn.iselab.mooctest.site.web.data.fromDev.StResponse;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
+import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
 import cn.iselab.mooctest.site.web.logic.fromDev.APFDLogic;
 import cn.iselab.mooctest.site.web.data.forMongo.MutationForMongoDTO;
@@ -31,7 +32,7 @@ import java.util.stream.Collectors;
  * @date 2017-09-05.
  */
 @Service
-public class APFDLogicImpl implements APFDLogic {
+public class APFDLogicImpl extends BaseLogic implements APFDLogic{
 
     @Autowired
     CaseService caseService;
@@ -69,8 +70,10 @@ public class APFDLogicImpl implements APFDLogic {
         if(participantId==null) {
             List<AssignedTask> assignedTasks = assignedTaskService.getSubmittedRecordsByExamId(examId);
             List<Long> submittedWorkerIds = assignedTasks.stream().map(assignedTask -> assignedTask.getParticipantId()).collect(Collectors.toList());
+            LOG.info("---------------------------------start apfd analysis--------------------------------");
             List<ApbcDTO> apbcDTOList = submittedWorkerIds.stream().map(submittedWorkerId ->
                     getAPFDAnalyseByExamIdAndParticipantId(examId,caseId,submittedWorkerId,weight)).collect(Collectors.toList());
+            LOG.info("---------------------------------end apfd analysis--------------------------------");
             if (apbcDTOList.size() != 0 && !apbcDTOList.isEmpty()) {
                 return StResponse.success(apbcDTOList);
             } else {
@@ -107,8 +110,10 @@ public class APFDLogicImpl implements APFDLogic {
         if(participantId==null) {
             List<AssignedTask> assignedTasks = assignedTaskService.getSubmittedRecordsByExamId(examId);
             List<Long> submittedWorkerIds = assignedTasks.stream().map(assignedTask -> assignedTask.getParticipantId()).collect(Collectors.toList());
+            LOG.info("---------------------------------start mutation analysis--------------------------------");
             List<MutationDTO> mutationDTOS =submittedWorkerIds.stream().map( submittedWorkerId ->
                     getMutationAnalyseByExamIdAndParticipantId(examId,caseId,submittedWorkerId)).filter(dTO-> dTO!=null).collect(Collectors.toList());
+            LOG.info("---------------------------------end mutation analysis--------------------------------");
             if (mutationDTOS.size() != 0 && !mutationDTOS.isEmpty()) {
                 return StResponse.success(mutationDTOS);
             } else {
@@ -134,12 +139,12 @@ public class APFDLogicImpl implements APFDLogic {
             double mutationScore=0;
             if(mutationDTO.getTotal()!=0)
                  mutationScore= (double) mutationDTO.getKilled() / mutationDTO.getTotal() * 100;
-            List<Grade> grades = analysisService.saveMutationScore(participantId, examId, caseId, mutationScore);
-            if (grades != null && !grades.isEmpty()) {
-                calculateScoreService.calculatePersonalDevScore(examId, caseId, participantId);
-                calculateSocreLogic.calculateExamScoreAuto(examId,participantId);
-            }
             try {
+                List<Grade> grades = analysisService.saveMutationScore(participantId, examId, caseId, mutationScore);
+                if (grades != null && !grades.isEmpty()) {
+                    calculateScoreService.calculatePersonalDevScore(examId, caseId, participantId);
+                    calculateSocreLogic.calculateExamScoreAuto(examId,participantId);
+                }
                 List<MutationForMongoDTO> list = mongoAPIService.getMutationFromMongo(participantId, examId, caseId);
                 if(list!=null) {
                     MutationForMongoDTO mutationForMongoDTO = list.get(0);

+ 13 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/WechatLogicImpl.java

@@ -15,10 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -314,8 +311,12 @@ public class WechatLogicImpl implements WechatLogic {
             List<Double> scores = tasks.stream().map(AssignedTask::getScore).collect(Collectors.toList());
             int sum=wechatService.getContestParticipant(assignedTask.getName());
             Collections.sort(scores);
-            double index = (double) (sum-scores.indexOf(assignedTask.getScore())) / sum * 100;
-            vo.setRank((long) index);
+            if(assignedTask.getScore()==0)
+                vo.setRank(0.0);
+            else {
+                double index = (double) (sum-scores.indexOf(assignedTask.getScore())-1) / sum * 100;
+                vo.setRank((index));
+            }
             return generateResponse(HTTP_OK,"",new JSONObject(vo).toString());
         }
     }
@@ -348,7 +349,6 @@ public class WechatLogicImpl implements WechatLogic {
             return generateResponse(HTTP_INTERNAL_ERROR, "none exam", "{}");
         examIds.forEach(examId-> {
             List<ContestMentorAssignedTask> contestMentorAssignedTasks=assignedTaskService.getConestAssignedTasks(examId,userId);
-            System.out.println("taskId:"+examId+";我的学生人数:"+contestMentorAssignedTasks.size());
             contestMentorAssignedTasks.sort(new Comparator<ContestMentorAssignedTask>() {
                 @Override
                 public int compare(ContestMentorAssignedTask o1, ContestMentorAssignedTask o2) {
@@ -357,10 +357,8 @@ public class WechatLogicImpl implements WechatLogic {
             });
             if(contestMentorAssignedTasks!=null&&contestMentorAssignedTasks.size()!=0) {
                 ContestMentorAssignedTask contestMentorAssignedTask = contestMentorAssignedTasks.get(0);
-                System.out.println("taskId:"+examId+";最高分:"+contestMentorAssignedTask.getParticipantId());
                 User user1=userService.findByUserId(contestMentorAssignedTask.getParticipantId());
                 List<AssignedTask> assignedTasks = assignedTaskService.getAssignedTasks(examId);
-                System.out.println("taskId:"+examId+";总共人数:"+assignedTasks.size());
                 List<Double> scores = assignedTasks.stream().map(AssignedTask::getScore).collect(Collectors.toList());
                 Collections.sort(scores);
                 JSONObject jsonObject = new JSONObject();
@@ -368,9 +366,12 @@ public class WechatLogicImpl implements WechatLogic {
                 jsonObject.put("score",contestMentorAssignedTask.getScore());
                 jsonObject.put("workerName",user1.getName());
                 int sum=wechatService.getContestParticipant(contestMentorAssignedTask.getName());
-                double index = (double) (sum-scores.indexOf(contestMentorAssignedTask.getScore()))/sum * 100;
-                System.out.println("该学生击败了:"+index);
-                jsonObject.put("rank",(long) index);
+                if(contestMentorAssignedTask.getScore()==0)
+                    jsonObject.put("rank",(Double)0.0);
+                else {
+                    double index = (sum - scores.indexOf(contestMentorAssignedTask.getScore()) - 1) / (double) sum * 100;
+                    jsonObject.put("rank", new Formatter().format("%.2f", index));
+                }
                 jsonArray.put(jsonObject);
             }
         });