瀏覽代碼

add strategy

yyy2015 7 年之前
父節點
當前提交
893a2f61bb

+ 3 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GradeGeneralDao.java

@@ -24,7 +24,9 @@ public interface GradeGeneralDao extends JpaRepository<GradeGeneral,Long> {
 
   @Query("select distinct g.workerId from GradeGeneral g "
       + "where g.examId = :examId and g.caseId = :caseId")
-  List<Long> retriveUserIdsByExamIdAndCaseId(@Param("examId") long examId, @Param("caseId") long
+  List<Long> retrieveUserIdsByExamIdAndCaseId(@Param("examId") long examId, @Param("caseId") long
       caseId);
 
+
+
 }

+ 7 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WeightGeneralDao.java

@@ -4,6 +4,8 @@ import cn.iselab.mooctest.site.models.WeightGeneral;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 /**
  * weight general dao
@@ -17,4 +19,9 @@ public interface WeightGeneralDao extends JpaRepository<WeightGeneral,Long> {
 
   List<WeightGeneral> findByExamIdAndCaseId(long taskId, long caseId);
 
+  @Query("select distinct w.type from WeightGeneral w "
+      + "where w.examId = :examId and w.caseId = :caseId")
+  List<String> retrieveCategoriesByExamIdAndCaseId(@Param("examId") long examId, @Param("caseId")
+      long caseId);
+
 }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Exam2Case.java

@@ -28,4 +28,7 @@ public class Exam2Case {
 
     @Column(name = "weight")
     private double weight;
+
+    @Column(name = "score_strategy")
+    private int scoreStrategy;
 }

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

@@ -22,4 +22,6 @@ public interface Exam2CaseService {
     List<CaseBlock> getCaseBlocks(long examId,long paperId);
 
     List<CaseBlock> getCasesByExamId(Long examId);
+
+    int getScoreStrategyByExamIdAndCaseId(Long examId, Long caseId);
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/GeneralCalculateScoreService.java

@@ -18,4 +18,8 @@ public interface GeneralCalculateScoreService {
   double getTypeScore(long workerId, long taskId, long caseId, String type);
 
   List<Long> getUploadUsers(long examId,long caseId);
+
+  double getLatestTypeScore(long workerId, long examId, long caseId, String type);
+
+  double getHighestTypeScore(long workerId, long examId, long caseId, String type);
 }

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

@@ -20,4 +20,6 @@ public interface WeightGeneralService {
   void setWeight(long taskId,long caseId,String type, int weight);
 
   WeightGeneral get(long taskId,long caseId,String type);
+
+  List<String> getCategories(long examId, long caseId);
 }

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

@@ -95,4 +95,9 @@ public class Exam2CaseServiceImpl implements Exam2CaseService {
     public List<CaseBlock> getCasesByExamId(Long examId) {
         return getCaseBlocks(exam2CaseDao.findByExamId(examId));
     }
+
+    @Override
+    public int getScoreStrategyByExamIdAndCaseId(Long examId, Long caseId) {
+        return exam2CaseDao.findByExamIdAndCaseId(examId,caseId).get(0).getScoreStrategy();
+    }
 }

+ 11 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GeneralCalculateScoreServiceImpl.java

@@ -59,6 +59,16 @@ public class GeneralCalculateScoreServiceImpl implements GeneralCalculateScoreSe
 
   @Override
   public List<Long> getUploadUsers(long examId, long caseId) {
-    return gradeGeneralDao.retriveUserIdsByExamIdAndCaseId(examId,caseId);
+    return gradeGeneralDao.retrieveUserIdsByExamIdAndCaseId(examId,caseId);
+  }
+
+  @Override
+  public double getLatestTypeScore(long workerId, long examId, long caseId, String type) {
+    return 0;
+  }
+
+  @Override
+  public double getHighestTypeScore(long workerId, long examId, long caseId, String type) {
+    return 0;
   }
 }

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

@@ -55,5 +55,10 @@ public class WeightGeneralServiceImpl implements WeightGeneralService {
     return weightGeneralDao.findByExamIdAndCaseIdAndType(taskId,caseId,type);
   }
 
+  @Override
+  public List<String> getCategories(long examId, long caseId) {
+    return weightGeneralDao.retrieveCategoriesByExamIdAndCaseId(examId, caseId);
+  }
+
 
 }

+ 2 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/GeneralCalculateScoreLogic.java

@@ -35,17 +35,15 @@ public interface GeneralCalculateScoreLogic {
    * @param examId 考试id
    * @param caseId  题目id
    * @param userId  考生id
-   * @param strategy 算分策略
    */
-  void calculateCaseScore(long examId, long caseId, Long userId, TypeScoreStrategy strategy);
+  void calculateCaseScore(long examId, long caseId, Long userId);
 
   /**
    * 计算所有考生一个case的得分
    * @param examId 考试id
    * @param caseId  题目id
-   * @param strategy 算分策略
    */
-  void calculateCaseScore(long examId, long caseId, TypeScoreStrategy strategy);
+  void calculateCaseScore(long examId, long caseId);
 
 
 }

+ 21 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/GeneralCalculateScoreLogicImpl.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
+import cn.iselab.mooctest.site.service.Exam2CaseService;
 import cn.iselab.mooctest.site.service.SubmitRecordService;
 import cn.iselab.mooctest.site.service.CaseGraphService;
 import cn.iselab.mooctest.site.service.CaughtNodeService;
@@ -9,6 +10,8 @@ import cn.iselab.mooctest.site.service.WeightGeneralService;
 import cn.iselab.mooctest.site.web.data.forMongo.CaseGraphDTO;
 import cn.iselab.mooctest.site.web.data.forMongo.graph.Category;
 import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
+import cn.iselab.mooctest.site.web.logic.strategy.HighestStrategy;
+import cn.iselab.mooctest.site.web.logic.strategy.LatestStrategy;
 import cn.iselab.mooctest.site.web.logic.strategy.TypeScoreStrategy;
 import java.util.List;
 import javax.transaction.Transactional;
@@ -40,6 +43,8 @@ public class GeneralCalculateScoreLogicImpl implements GeneralCalculateScoreLogi
   GeneralCalculateScoreComponent generalCalculateScoreComponent;
   @Autowired
   GeneralCalculateScoreService generalCalculateScoreService;
+  @Autowired
+  Exam2CaseService exam2CaseService;
 
 
   @Override
@@ -55,14 +60,12 @@ public class GeneralCalculateScoreLogicImpl implements GeneralCalculateScoreLogi
 
 
   @Override
-  public void calculateCaseScore(long examId, long caseId, Long userId,
-      TypeScoreStrategy strategy) {
-    CaseGraphDTO basicNode = caseGraphService.getCaseGraph(caseId);
+  public void calculateCaseScore(long examId, long caseId, Long userId) {
+    TypeScoreStrategy strategy = getTypeScoreStrategy(examId,caseId);
     double caseScore = 0;
-    for (Category category : basicNode.getCategories()) {
-      int weight = weightGeneralService.getWeight(examId, caseId, category.getName());
-      double typeScore = strategy.getTypeScore(userId, examId, caseId, category
-          .getName());
+    for (String category : weightGeneralService.getCategories(examId,caseId)) {
+      int weight = weightGeneralService.getWeight(examId, caseId, category);
+      double typeScore = strategy.getTypeScore(userId, examId, caseId, category);
       caseScore += (weight * 0.01 * typeScore);
     }
     submitRecordService.addCase(examId, caseId, userId, "");
@@ -71,9 +74,18 @@ public class GeneralCalculateScoreLogicImpl implements GeneralCalculateScoreLogi
   }
 
   @Override
-  public void calculateCaseScore(long examId, long caseId, TypeScoreStrategy strategy) {
+  public void calculateCaseScore(long examId, long caseId) {
     List<Long> uploadUsers = generalCalculateScoreService.getUploadUsers(examId, caseId);
-    uploadUsers.forEach(uid-> calculateCaseScore(examId, caseId,uid,strategy));
+    uploadUsers.forEach(uid-> calculateCaseScore(examId, caseId,uid));
+  }
+
+  private TypeScoreStrategy getTypeScoreStrategy(long examId, long caseId){
+    int number = exam2CaseService.getScoreStrategyByExamIdAndCaseId(examId,caseId);
+    switch (number){
+      case 0: return new LatestStrategy();
+      case 1: return new HighestStrategy();
+      default: return new LatestStrategy();
+    }
   }
 
 }

+ 15 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/strategy/HighestStrategy.java

@@ -0,0 +1,15 @@
+package cn.iselab.mooctest.site.web.logic.strategy;
+
+/**
+ * 最高分
+ *
+ * @author yyy
+ * @create 2018-06-07 17:40
+ */
+public class HighestStrategy implements TypeScoreStrategy {
+
+  @Override
+  public double getTypeScore(long examId, long caseId, Long userId, String category) {
+    return 0;
+  }
+}

+ 24 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/strategy/LatestStrategy.java

@@ -0,0 +1,24 @@
+package cn.iselab.mooctest.site.web.logic.strategy;
+
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 最新一次成绩
+ *
+ * @author yyy
+ * @create 2018-06-07 17:39
+ */
+public class LatestStrategy implements TypeScoreStrategy {
+
+  @Autowired
+  GeneralCalculateScoreService generalCalculateScoreService;
+
+  @Override
+  public double getTypeScore(long examId, long caseId, Long userId, String category) {
+
+    return 0;
+  }
+
+
+}