Browse Source

修复能力评估分数全部为0的bug,更新域名解析,下载https证书

4228306 5 years ago
parent
commit
b844361b94

+ 27 - 0
doc/www.yaoxiangedu.com.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEAlVo6oUN6b/ShQwAZK/eDiDZR+wDqMVu9R/xji1WRp4Bhr4o3
+Y4zADqiyeHB6ykYV5CezZgSEONGIw+EdZfi6SkD/rJd8QAI5hYPDORBLDWJjBWvh
+wR8yk6Pq7Zib81xOlsaX+ndERHG1gzvaFk8q99tQLlH151xzd7U8KqQwgGKUioIp
+iiIgoZgHx1JM1PKqyocBhDft2RcNh3Ro9QzJfuAujToKcizOPmiGnCby78+TLn1c
+XrfJl2DWf3PzyuwPG9oWM2X9JMm0ZKvI0Ka8zUm8JseraVpU2pbMstBVqpqLnxsW
+AU5RF2V5Oq1OPS+2ZG4y6ckX4N7iLBPDesNKZQIDAQABAoIBAQCPxFFX1srPZl6t
+TjTs28/jmNaFljXZ2YN0/gEcqPwSj0R5Y8U5sM1XzxAtW6j3eUutWoIYnBRjVWAf
+nl1cQXeh7ruu+guC2iFg4ptUHNkCQ0kqeNTRwCRBdrK4kATe2GZWQUkesxwl/odJ
+kp22h/LGsHiYfhEF6zrDatRF/9MoYUK6lp707P5t4tx4pgpSQ9wZfJEdsKEzNVg1
+4oGiESUHmxe931UomYf1b5b0ibSZz5ZfcmXuBeQR9aC9gMuhX0vKjR0a3snQ0nCd
+h4+eeFW85vOeZCNFu0HgpBmnGCtAdkcrIEj+gRGa4HEWhdIU0TI3KvVNsHGvStYd
+JXBvJgopAoGBANYFYKwglWBDoatshDAG4pC+aNNnL/5cUOfM+wLdwgG6LJ6/IxVa
+kzXjhL70Z/LOMKa02jiO6c052Jxvy+f7q/285rA3NVvre9FfXzQqLxlR9YErWjiH
+f/efp/3ztQTnMULptda6SqgRHEhS5kD8NUhcBf1rAmZQw8SWPCS0ViBrAoGBALKl
+p2VkHMM+nyEq2rJEJgmdgvorqj3rj+Dw7dTe6nbmAB8pFLJtrKpNsfRsDQnXBMT8
+sJUVboSdpBHTdm/nAHNe/uyi287DhnLmS7D9qjEVQrbTTbFNXLtHGUK+ByufVHGh
+oq8gqpiKl1jrxmZpnhU1/UWaSC93TTWXnQRX4LRvAoGBAMad7v1Or9HKcfq4lmRL
+v288hePK20tfOOYl4LzkN+uKb2ZTU6e5iuxz3Pmpr94xZA0RwYLDfk6q5E8poT4E
+3bR43k2irq5Dd4Dy1VN/4n3JBeF97hiQBz4yuKCAzvlh5OGIKuy/rhES8ABejri4
+Vmp0nEp2SJ/TTBrgoageg99JAoGAGXy0wyxjRh+7CDpa9S/v1VNZimOMaEUhQ9Bb
+vhEHlmr9/XQY9dPb3Hg1OU/pFExO6+O5NavXFqh+7eQjc5ebYtpcuFoLzhXrKp1c
+kyW9kD8eQ4MmBHOrFTTxj6oYz8pte8C5uw6ICDdNnGwW5CmRWilXtwRp5Au7Qjgd
+OK9o6ZUCgYEAu4jegqqn4uvW00dWQUGShkey0AtawOEEZ+aEZAXekOix5nye0Gji
+DlLAwrCa9bjR7SS/bw1dNivBx8b4vvXBWCqGaVK+PUuSlCEyh46j7AU3K73xaMjn
+XwLRejx0WZK16rf9Ary40o+7glBypKevoGep2AX1REKiayvgA9HWppE=
+-----END RSA PRIVATE KEY-----

+ 59 - 0
doc/www.yaoxiangedu.com.pem

@@ -0,0 +1,59 @@
+-----BEGIN CERTIFICATE-----
+MIIFnDCCBISgAwIBAgIQA1TcKC7bMEXj83PzzzhjdzANBgkqhkiG9w0BAQsFADBu
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
+RFYgVExTIENBIC0gRzEwHhcNMTkwNDE4MDAwMDAwWhcNMjAwNDE3MTIwMDAwWjAe
+MRwwGgYDVQQDExN3d3cueWFveGlhbmdlZHUuY29tMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAlVo6oUN6b/ShQwAZK/eDiDZR+wDqMVu9R/xji1WRp4Bh
+r4o3Y4zADqiyeHB6ykYV5CezZgSEONGIw+EdZfi6SkD/rJd8QAI5hYPDORBLDWJj
+BWvhwR8yk6Pq7Zib81xOlsaX+ndERHG1gzvaFk8q99tQLlH151xzd7U8KqQwgGKU
+ioIpiiIgoZgHx1JM1PKqyocBhDft2RcNh3Ro9QzJfuAujToKcizOPmiGnCby78+T
+Ln1cXrfJl2DWf3PzyuwPG9oWM2X9JMm0ZKvI0Ka8zUm8JseraVpU2pbMstBVqpqL
+nxsWAU5RF2V5Oq1OPS+2ZG4y6ckX4N7iLBPDesNKZQIDAQABo4IChDCCAoAwHwYD
+VR0jBBgwFoAUVXRPsnJP9WC6UNHX5lFcmgGHGtcwHQYDVR0OBBYEFJCYieetnWuZ
+1dC39OksKUmPvlp4MC8GA1UdEQQoMCaCE3d3dy55YW94aWFuZ2VkdS5jb22CD3lh
+b3hpYW5nZWR1LmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH
+AwEGCCsGAQUFBwMCMEwGA1UdIARFMEMwNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH
+AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQIBMH0GCCsG
+AQUFBwEBBHEwbzAhBggrBgEFBQcwAYYVaHR0cDovL29jc3AuZGNvY3NwLmNuMEoG
+CCsGAQUFBzAChj5odHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlv
+bkV2ZXJ5d2hlcmVEVlRMU0NBLUcxLmNydDAJBgNVHRMEAjAAMIIBBAYKKwYBBAHW
+eQIEAgSB9QSB8gDwAHUA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csA
+AAFqMIkOdgAABAMARjBEAiAq4ua/fNTGvT+VVw70uaNMuu/H8gY+wp3TxuDZa0+E
+kAIgNjd9WVPVXcOefglTTrhQlrW1BFo1tGoZ+uamvpZBNTQAdwBep3P531bA57U2
+SH3QSeAyepGaDIShEhKEGHWWgXFFWAAAAWowiQ4QAAAEAwBIMEYCIQClh/kXAOD1
+0sWuwf9kZwuf/XxOB06nX4J3oKtPdlCycAIhAKxpGEGrpm3MZ8BreSwbDgrn46dV
+7rBf4CiLgwByfmyYMA0GCSqGSIb3DQEBCwUAA4IBAQBRG7ePFOvR46QQtVyVY1LV
+Xsp7CTYjrDG80y+iaKdkSaI7C7HzP3+17/uDENW6RW8uX9YvwfdXzw5ypiQ9rP8s
+3L8UOX1KTLtLAdTYuNWI4sx30WOdkpav0unrHPw/jqNCfvUGLmWVLXXlYtisgQrb
+IocnyXF2HG57FJ5EHDbehDGpl04D9wu2/0WoKdLzN1r/mjprtweZ1UMxM3bKaDYv
+rCNm3Xt43Skcx4A4Tp0bf0MngOu4GJXQeFSOkiwjwXWeMuHc/IlmeVCFdAa4cKMs
+IbXEGIc/TPpeiws1EOKRi2alg8lp9pJ0YTxddPnHl920mS66el9SWNaKJ97IzDrB
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
+MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc
+oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo
+lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj
+pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h
+yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n
+wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M
+pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf
+BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
+Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
+Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
+/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
+MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B
+SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW
+M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV
+4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ
+sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy
+rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
+-----END CERTIFICATE-----

+ 5 - 0
src/main/java/edu/math/diagnosis/controller/PaperResultController.java

@@ -8,6 +8,8 @@ import edu.math.diagnosis.service.PaperResultService;
 import edu.math.diagnosis.service.PaperService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -26,12 +28,15 @@ public class PaperResultController {
     @Resource
     private PaperService paperService;
 
+    private static final Logger logger = LoggerFactory.getLogger(PaperResultController.class);
+
     @GetMapping("/rebuild")
     @ApiOperation("根据提交Id重新生成报告结果")
     public Result rebuild(Long commitId) {
         PaperCommit commit = paperCommitRepo.getOne(commitId);
         Paper paper = paperService.getOnePaper(commit.getPid());
         paperResultService.checkAndDelete(paper.getId(), commit.getUid());
+        logger.info("rebuild paper result with commitId {}", commitId);
         return paperResultService.parseResult(commit, paper);
     }
 

+ 6 - 0
src/main/java/edu/math/diagnosis/dao/AbilityScoreRepo.java

@@ -3,5 +3,11 @@ package edu.math.diagnosis.dao;
 import edu.math.diagnosis.entity.AbilityScore;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface AbilityScoreRepo extends JpaRepository<AbilityScore, Long> {
+
+    List<AbilityScore> findBySubjectIdAndGrade(Long subjectId,String grade);
+
+    List<AbilityScore> findByPidAndScoreNot(Long pid,Double score);
 }

+ 12 - 0
src/main/java/edu/math/diagnosis/entity/AbilityScore.java

@@ -32,6 +32,10 @@ public class AbilityScore {
     @ApiModelProperty("问题Id")
     private Long qid;
 
+    @Column(nullable = false)
+    @ApiModelProperty("题目编号")
+    private int number;
+
     @Column(nullable = false, columnDefinition = "double(10,2) default 0")
     @ApiModelProperty("能力分数")
     private Double score;
@@ -108,6 +112,14 @@ public class AbilityScore {
         this.qid = qid;
     }
 
+    public int getNumber() {
+        return number;
+    }
+
+    public void setNumber(int number) {
+        this.number = number;
+    }
+
     public Double getScore() {
         return score;
     }

+ 13 - 0
src/main/java/edu/math/diagnosis/entity/PaperResult.java

@@ -1,11 +1,13 @@
 package edu.math.diagnosis.entity;
 
+import edu.math.diagnosis.model.AbilityEvaluateVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.annotations.CreationTimestamp;
 
 import javax.persistence.*;
 import java.util.Date;
+import java.util.Map;
 
 /**
  * @AUTHOR: DaiFengWen
@@ -154,6 +156,9 @@ public class PaperResult {
     @ApiModelProperty("{\"计算能力\":{\"score\":4.5,\"evaluate\":\"您的成绩...\",\"keep\":[1,0,1,2,0,1,0],\"explain\":\"这是示例与解释\"}}")
     private String abilityEvaluate;
 
+    @Transient
+    private Map<String, AbilityEvaluateVo> abilityEvaluateVo;
+
     @ApiModelProperty("答错的题目,先判断是否选择,没选择则答错;选择了,答错了算错误,若该题没答案,则不算错误")
     private String wrongQuestion;
 
@@ -358,4 +363,12 @@ public class PaperResult {
     public void setMistakeMatters(String mistakeMatters) {
         this.mistakeMatters = mistakeMatters;
     }
+
+    public Map<String, AbilityEvaluateVo> getAbilityEvaluateVo() {
+        return abilityEvaluateVo;
+    }
+
+    public void setAbilityEvaluateVo(Map<String, AbilityEvaluateVo> abilityEvaluateVo) {
+        this.abilityEvaluateVo = abilityEvaluateVo;
+    }
 }

+ 9 - 0
src/main/java/edu/math/diagnosis/model/AbilityEvaluateVo.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 public class AbilityEvaluateVo {
     private Double score;
+    private String ability;
     private String abilityCode;
     private String evaluate;
     private List<Integer> keep;
@@ -17,6 +18,14 @@ public class AbilityEvaluateVo {
         this.score = score;
     }
 
+    public String getAbility() {
+        return ability;
+    }
+
+    public void setAbility(String ability) {
+        this.ability = ability;
+    }
+
     public String getAbilityCode() {
         return abilityCode;
     }

+ 11 - 0
src/main/java/edu/math/diagnosis/service/AbilityScoreService.java

@@ -5,6 +5,9 @@ import edu.math.diagnosis.entity.AbilityScore;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class AbilityScoreService {
@@ -16,4 +19,12 @@ public class AbilityScoreService {
         abilityScoreRepo.save(abilityScore);
     }
 
+    public List<AbilityScore> listBy(Long pid) {
+        return abilityScoreRepo.findByPidAndScoreNot(pid, 0.0);
+    }
+
+    //Map<qid,List<AbilityScore
+    public Map<String, List<AbilityScore>> groupByAbilityCode(List<AbilityScore> list) {
+        return list.stream().collect(Collectors.groupingBy(AbilityScore::getAbilityCode));
+    }
 }

+ 39 - 16
src/main/java/edu/math/diagnosis/service/PaperResultService.java

@@ -479,47 +479,70 @@ public class PaperResultService {
 
         List<ScoreSegment> scoreSegments = scoreSegmentService.findBySubjectId(paper.getSubjectId());
         String subject = subjectService.get(paper.getSubjectId()).getName();
+        logger.info("subject is {}", subject);
         String abilityScore = result.getAbilityScore();
         Map<String, Double> scores = ObjectUtil.json2Map(abilityScore);
+        logger.info("scores is {}", scores);
 
         List<Integer> collects = convertQuestion(result.getCollectQuestion());
+        logger.info("correct questions {}", collects);
         //Map<tag,Set<number>> 知识点与题目对应
-        Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
+//        Map<String, Set<Integer>> tagNumbers = tagNumbers(paper);
         //Map<tag,keep> 每个知识点的掌握情况
-        Map<String, Integer> tagKeep = tagKeep(collects, tagNumbers);
+//        Map<String, Integer> tagKeep = tagKeep(collects, tagNumbers);
+//        logger.info("tag keep is {}", tagKeep);
+//        paper.getScores();
 
         List<SubjectKnowledge> knowledge = knowledgeService.list(paper.getSubjectId(), paper.getGrade());
 
-        //Map<ability,Set<String>> 能力与知识点对应
-        Map<String, Set<String>> abilityKnowledge = new LinkedHashMap<>();
-        knowledge.forEach(k -> {
-            String[] abilityCodes = k.getAbilityCodes().split(",");
-            for (String abilityCode : abilityCodes) {
-                Set<String> ks = abilityKnowledge.getOrDefault(abilityCode, new HashSet<>());
-                ks.add(k.getCode());
-                abilityKnowledge.put(abilityCode, ks);
-            }
+        List<AbilityScore> abilityScores = abilityScoreService.listBy(paper.getId());
+        Map<String, List<AbilityScore>> group = abilityScoreService.groupByAbilityCode(abilityScores);
+
+        //Map<ability,Set<Number>> 能力与题目编号对应
+        Map<String, Set<Integer>> abilityNumber = new LinkedHashMap<>();
+        group.forEach((abilityCode, list) -> {
+            Set<Integer> ks = abilityNumber.getOrDefault(abilityCode, new HashSet<>());
+            ks.addAll(list.stream().map(AbilityScore::getNumber).collect(Collectors.toSet()));
+            abilityNumber.put(abilityCode, ks);
         });
+//        knowledge.forEach(k -> {
+//            String[] abilityCodes = k.getAbilityCodes().split(",");
+//            for (String abilityCode : abilityCodes) {
+//                Set<String> ks = abilityKnowledge.getOrDefault(abilityCode, new HashSet<>());
+//                ks.add(k.getCode());
+//                abilityKnowledge.put(abilityCode, ks);
+//            }
+//        });
+
+        logger.info("abilityNumber is {}", abilityNumber);
 
         Map<String, String> abilities = subjectAbilityService.map(paper.getSubjectId());
+        logger.info("abilities is {}", abilities);
         Map<String, AbilityEvaluateVo> evaluates = new LinkedHashMap<>();
-        for (Map.Entry<String, Set<String>> entry : abilityKnowledge.entrySet()) {
+        for (Map.Entry<String, Set<Integer>> entry : abilityNumber.entrySet()) {
             String code = entry.getKey();
             AbilityEvaluateVo vo = new AbilityEvaluateVo();
             vo.setAbilityCode(code);
-            vo.setScore(scores.getOrDefault(code, 0D));
+            vo.setAbility(abilities.get(code));
+            vo.setScore(scores.getOrDefault(vo.getAbility(), 0D));
 
             ScoreSegment scoreSegment = scoreSegmentService.getLevel(vo.getScore(), scoreSegments, abilities.get(code), subject);
             vo.setEvaluate(scoreSegment.getEvaluate());
             vo.setExplain(scoreSegment.getExplanation());
-
-            Set<String> ks = entry.getValue();
+            //该能力下的所有题目编号
+            Set<Integer> ks = entry.getValue();
+            logger.info("abilityCode is {}, number are {}", code, ks);
             List<Integer> keep = new ArrayList<>();
+
+            ks.forEach(k -> {
+                keep.add(collects.contains(k) ? Constants.KNOWLEDGE_MASTER : Constants.KNOWLEDGE_NOT_MASTER);
+            });
             //未掌握的为0
-            ks.forEach(k -> keep.add(tagKeep.getOrDefault(k, 0)));
+//            ks.forEach(k -> keep.add(tagKeep.getOrDefault(k, 0)));
             vo.setKeep(keep);
             evaluates.put(abilities.get(code), vo);
         }
+        result.setAbilityEvaluateVo(evaluates);
         return ObjectUtil.object2Json(evaluates);
     }
 

+ 14 - 4
src/main/java/edu/math/diagnosis/service/ScoreSegmentService.java

@@ -3,10 +3,16 @@ package edu.math.diagnosis.service;
 import edu.math.diagnosis.config.Constants;
 import edu.math.diagnosis.dao.ScoreSegmentRepo;
 import edu.math.diagnosis.entity.ScoreSegment;
+import edu.math.diagnosis.util.ObjectUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ScoreSegmentService {
@@ -14,19 +20,23 @@ public class ScoreSegmentService {
     @Resource
     private ScoreSegmentRepo scoreSegmentRepo;
 
+    private static final Logger logger = LoggerFactory.getLogger(ScoreSegmentService.class);
+
     public List<ScoreSegment> findBySubjectId(Long subjectId) {
         return scoreSegmentRepo.findBySubjectId(subjectId);
     }
 
-    public ScoreSegment getLevel(Double score, List<ScoreSegment> segment, String ability,String subject) {
+    public ScoreSegment getLevel(Double score, List<ScoreSegment> segment, String ability, String subject) {
         ScoreSegment scoreSegment = new ScoreSegment();
         scoreSegment.setLevel(Constants.DEFAULT_SCORE_LEVEL);
-        scoreSegment.setEvaluate(String.format(Constants.DEFAULT_SCORE_LEVEL_EVALUATE, ability, ability,subject));
+        scoreSegment.setEvaluate(String.format(Constants.DEFAULT_SCORE_LEVEL_EVALUATE, ability, ability, subject));
         for (ScoreSegment s : segment) {
             if (s.getLowerScore() <= score && score < s.getHighScore()) {
+                logger.info("format score segment {}", s.getEvaluate());
                 String params = s.getParams();
-                String[] p = params.split(",");
-                s.setEvaluate(String.format(s.getEvaluate(), (Object[]) p));
+                String[] ps = params.split(",");
+                Object[] p = Arrays.stream(ps).map(a -> Constants.ABILITY.equals(a) ? ability : subject).toArray();
+                s.setEvaluate(String.format(s.getEvaluate(), p));
                 return s;
             }
         }