Pārlūkot izejas kodu

fix mongo 分页查询的bug

梅杰 7 gadi atpakaļ
vecāks
revīzija
72adfd1532

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

@@ -39,7 +39,7 @@ public class CompeteAnalysisAssignedTaskServiceImpl implements CompeteAnalysisAs
         HttpHeaders headers = MongoAPIUtils.createAuthHeaderForMongo();
         headers.setContentType(MediaType.APPLICATION_JSON);
         HttpEntity<AssignedTaskVO> httpEntity = new HttpEntity<>(assignedTaskVO, headers);
-        if (assignedTaskVO.getId() == null)
+        if (assignedTaskVO.getMongoId() == null)
             return createResult(httpEntity, assignedTaskVO, collection);
         else
             return updateResult(httpEntity, assignedTaskVO, collection);
@@ -81,10 +81,10 @@ public class CompeteAnalysisAssignedTaskServiceImpl implements CompeteAnalysisAs
         RestTemplate rt = new RestTemplate();
         Map queryParams = new HashMap<>();
         if(userId != null) {
-            queryParams.put("userId", userId);
+            queryParams.put("workerId", userId);
         }
         if(examId != null) {
-            queryParams.put("examId", examId);
+            queryParams.put("taskId", examId);
         }
 
         String sortBy = sort.getSortBy();
@@ -107,7 +107,7 @@ public class CompeteAnalysisAssignedTaskServiceImpl implements CompeteAnalysisAs
             JSONObject result = resultArray.getJSONObject(i);
             AssignedTaskVO assignedTaskVO = gson
                     .fromJson(result.toString(), AssignedTaskVO.class);
-            assignedTaskVO.setId(Long.valueOf(result.getJSONObject("_id").getString("$oid")));
+            assignedTaskVO.setMongoId(result.getJSONObject("_id").getString("$oid"));
             assignedTaskVOList.add(assignedTaskVO);
         }
         return assignedTaskVOList;
@@ -134,7 +134,7 @@ public class CompeteAnalysisAssignedTaskServiceImpl implements CompeteAnalysisAs
                                         AssignedTaskVO assignedTaskVO, String collection) {
         RestTemplate rt = new RestTemplate();
         String url = MongoAPIUtils.generateUrlWithResourceId(mongoDBConfig.getDb(), collection,
-                assignedTaskVO.getId().toString());
+                assignedTaskVO.getMongoId());
         rt.exchange(url, HttpMethod.PUT, httpEntity, String.class);
         return assignedTaskVO;
     }

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

@@ -104,7 +104,7 @@ public class ScoreController extends BaseController {
         CompeteAnalysisType competeAnalysisType = "difficult".equals(type) ?
                 CompeteAnalysisType.DifficultAnalysis : CompeteAnalysisType.TimeAnalysis;
         return competeAnalysisAssignedTaskService.getAssignedTaskResultByPage(null, examId,
-                Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage), sort, competeAnalysisType);
+                Integer.parseInt(activePage), Integer.parseInt(rowsOnPage), sort, competeAnalysisType);
     }
 
     @RequestMapping(value = UrlConstants.API + "competeAnalysisAllSite", method = RequestMethod.GET)
@@ -126,6 +126,6 @@ public class ScoreController extends BaseController {
                 CompeteAnalysisType.DifficultAnalysis : CompeteAnalysisType.TimeAnalysis;
 
         return calculateSocreLogic.getCompeteAnalysisByPage(null, null, caseId,
-                Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage), sort, competeAnalysisType);
+                Integer.parseInt(activePage), Integer.parseInt(rowsOnPage), sort, competeAnalysisType);
     }
 }

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/AssignedTaskVO.java

@@ -13,6 +13,8 @@ public class AssignedTaskVO extends BaseVO {
 
     private Long id;
 
+    private String mongoId;
+
     private Long taskId;
 
     private String taskName;
@@ -49,6 +51,14 @@ public class AssignedTaskVO extends BaseVO {
         this.id = id;
     }
 
+    public String getMongoId() {
+        return mongoId;
+    }
+
+    public void setMongoId(String mongoId) {
+        this.mongoId = mongoId;
+    }
+
     public Long getTaskId() {
         return taskId;
     }

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

@@ -240,7 +240,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
         });
 
         //处理初始数据,将原始结果按照AssignedTaskVO的格式存入mongo
-        return generateAndSaveAssignedTasks(examId, CompeteAnalysisType.DifficultAnalysis);
+        return generateAndSaveAssignedTasks(examId, CompeteAnalysisType.DifficultAnalysis, cases);
 
 
     }
@@ -271,7 +271,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
         });
 
         //处理初始数据,将原始结果按照AssignedTaskVO的格式存入mongo
-        return generateAndSaveAssignedTasks(examId, CompeteAnalysisType.TimeAnalysis);
+        return generateAndSaveAssignedTasks(examId, CompeteAnalysisType.TimeAnalysis, cases);
 
     }
 
@@ -292,7 +292,9 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
         });
     }
 
-    private List<AssignedTaskVO> generateAndSaveAssignedTasks(long examId, CompeteAnalysisType competeAnalysisType) {
+    private List<AssignedTaskVO> generateAndSaveAssignedTasks(long examId, CompeteAnalysisType competeAnalysisType,
+                                                              List<CaseBlock> caseBlocks) {
+        Map<Long, Double> caseWeightMap = generateCaseWeightMap(caseBlocks);
         List<AssignedTaskVO> assignedTaskVOs = getOrGenerateAssignedTasks(examId, competeAnalysisType);
 
         assignedTaskVOs.forEach(assignedTaskVO -> {
@@ -310,7 +312,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
             });
 
             double totalScore = assignedTaskVO.getAssignedCases().stream().mapToDouble(assignedCaseVO -> {
-                return assignedCaseVO.getWeight() * assignedCaseVO.getMaxScore();
+                return caseWeightMap.get(assignedCaseVO.getCaseId()) * assignedCaseVO.getMaxScore();
             }).sum();
 
             assignedTaskVO.setScore(totalScore);
@@ -352,6 +354,11 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
         return competeAnalysisResultDTO;
     }
 
+    private Map<Long, Double> generateCaseWeightMap(List<CaseBlock> caseBlocks) {
+        Map<Long, Double> caseWeightMap = new HashMap<>();
+        caseBlocks.forEach(caseBlock -> caseWeightMap.put(caseBlock.getCaseIds().get(0), caseBlock.getWeight()));
+        return caseWeightMap;
+    }
     private double calculateMutationScore(MutationForMongoDTO mutationForMongoDTO, Map<String, Double> mutationScoreMap,
                                           final double baseScore) {
         double sum = 0;

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

@@ -36,7 +36,7 @@ public class MongoAPIUtils {
     }
 
     public static String generateFilterAndPagingUrl(String dbName, String collectionName) {
-        return generateFilterUrl(dbName, collectionName) + "&count&hal=f&np&page={activePage}&pagesize={pageSize}&sort={sort}";
+        return generateFilterUrl(dbName, collectionName) + "&count&hal=f&np&page={activePage}&pagesize={pageSize}&sort={sortBy}";
     }
 
     public static String generateAggrUrl(String dbName, String collectionName, String Aggr) {

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

@@ -54,7 +54,7 @@ aliOSS:
 spring:
     profiles: dev
     datasource:
-        url: jdbc:mysql://101.37.175.111:3306/mooctest_main_dev?useUnicode=yes&characterEncoding=UTF-8
+        url: jdbc:mysql://106.14.81.62:3306/mooctest_main_dev?useUnicode=yes&characterEncoding=UTF-8
         username: mooctest
         password: secr3t!
     dubbo: