|
@@ -12,18 +12,23 @@ import cn.seecoder.data.server.repository.knowledge.KnowledgeRepository;
|
|
|
import cn.seecoder.data.server.service.EvaluateService;
|
|
import cn.seecoder.data.server.service.EvaluateService;
|
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.core.ParameterizedTypeReference;
|
|
import org.springframework.core.ParameterizedTypeReference;
|
|
|
import org.springframework.http.HttpMethod;
|
|
import org.springframework.http.HttpMethod;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
public class EvaluateServiceImpl implements EvaluateService {
|
|
public class EvaluateServiceImpl implements EvaluateService {
|
|
|
|
|
|
|
|
|
|
+ @Value("${sys.bok.url}")
|
|
|
|
|
+ private String bokBaseUrl;
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private GeneralRecordRepository generalRecordRepository;
|
|
private GeneralRecordRepository generalRecordRepository;
|
|
|
|
|
|
|
@@ -36,27 +41,24 @@ public class EvaluateServiceImpl implements EvaluateService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public double getQuestionScore(int userId,String dataSource) {
|
|
public double getQuestionScore(int userId,String dataSource) {
|
|
|
- double ans = 0;
|
|
|
|
|
|
|
+ double ans = 0.0;
|
|
|
try {
|
|
try {
|
|
|
- SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seec.seecoder.cn");
|
|
|
|
|
List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSource(userId, dataSource);
|
|
List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSource(userId, dataSource);
|
|
|
- ArrayList<String> questionIds = new ArrayList<String>();
|
|
|
|
|
- for (int i = 0; i < generalRecordDaoList.size(); i++)
|
|
|
|
|
- questionIds.add(generalRecordDaoList.get(i).getQuestionId());
|
|
|
|
|
- double scoreTotal = 0;
|
|
|
|
|
- double score = 0;
|
|
|
|
|
- double[] weight = {1, 1, 1, 1.05, 1.1};
|
|
|
|
|
- List<QuestionVO> questionVOS = seecoderBokClient.getQuestionListByIds(questionIds);
|
|
|
|
|
- for (int i = 0; i < generalRecordDaoList.size(); i++) {
|
|
|
|
|
- QuestionVO questionVO = questionVOS.get(i);
|
|
|
|
|
- GeneralRecordDao generalRecordDao = generalRecordDaoList.get(i);
|
|
|
|
|
- scoreTotal = scoreTotal + generalRecordDao.getScoreTotal();
|
|
|
|
|
- if (questionVO.getWeight() == null || questionVO.getWeight() == 0)
|
|
|
|
|
- score = score + generalRecordDao.getScore();
|
|
|
|
|
- else
|
|
|
|
|
- score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
|
|
|
|
|
- }
|
|
|
|
|
- ans = score / scoreTotal;
|
|
|
|
|
|
|
+ ans = getScoreOnList(generalRecordDaoList);
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ LoggerFactory.getLogger(this.getClass()).error("score: "+dataSource+"得分计算失败" + " userId: "+userId, e);
|
|
|
|
|
+ }
|
|
|
|
|
+ return ans;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public double getQuestionScoreByWeek(int userId, String dataSource) {
|
|
|
|
|
+ double ans = 0;
|
|
|
|
|
+ try {
|
|
|
|
|
+ LocalDateTime end = LocalDateTime.now();
|
|
|
|
|
+ LocalDateTime start = end.minusDays(7);
|
|
|
|
|
+ List<GeneralRecordDao> generalRecordDaoList = generalRecordRepository.getByUserIdAndDataSourceAndCreateTimeBetween(userId,dataSource,start,end);
|
|
|
|
|
+ ans = getScoreOnList(generalRecordDaoList);
|
|
|
}catch (Exception e){
|
|
}catch (Exception e){
|
|
|
LoggerFactory.getLogger(this.getClass()).error("score: "+dataSource+"得分计算失败" + " userId: "+userId, e);
|
|
LoggerFactory.getLogger(this.getClass()).error("score: "+dataSource+"得分计算失败" + " userId: "+userId, e);
|
|
|
}
|
|
}
|
|
@@ -156,4 +158,31 @@ public class EvaluateServiceImpl implements EvaluateService {
|
|
|
|
|
|
|
|
return evalTestResult;
|
|
return evalTestResult;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private double getScoreOnList(List<GeneralRecordDao> generalRecordDaoList){
|
|
|
|
|
+ SeecoderBokClient seecoderBokClient = new SeecoderBokClient(bokBaseUrl);
|
|
|
|
|
+ double ans = 0.0;
|
|
|
|
|
+ ArrayList<String> questionIds = new ArrayList<String>();
|
|
|
|
|
+ for (int i = 0; i < generalRecordDaoList.size(); i++)
|
|
|
|
|
+ questionIds.add(generalRecordDaoList.get(i).getQuestionId());
|
|
|
|
|
+ double scoreTotal = 0;
|
|
|
|
|
+ double score = 0;
|
|
|
|
|
+ double[] weight = {1, 1, 1, 1.05, 1.1};
|
|
|
|
|
+ List<QuestionVO> questionVOS = new ArrayList<>();
|
|
|
|
|
+ for(int i=0;i<questionIds.size();i=i+10)
|
|
|
|
|
+ questionVOS.addAll(seecoderBokClient.getQuestionListByIds(questionIds.subList(i,i+10>questionIds.size()?questionIds.size():i+10)));
|
|
|
|
|
+ for (int i = 0; i < generalRecordDaoList.size(); i++) {
|
|
|
|
|
+ QuestionVO questionVO = questionVOS.get(i);
|
|
|
|
|
+ GeneralRecordDao generalRecordDao = generalRecordDaoList.get(i);
|
|
|
|
|
+ scoreTotal = scoreTotal + generalRecordDao.getScoreTotal();
|
|
|
|
|
+ if (questionVO.getWeight() == null || questionVO.getWeight() == 0)
|
|
|
|
|
+ score = score + generalRecordDao.getScore();
|
|
|
|
|
+ else
|
|
|
|
|
+ score = score + generalRecordDao.getScore() * weight[questionVO.getWeight()];
|
|
|
|
|
+ }
|
|
|
|
|
+ if(scoreTotal!=0)
|
|
|
|
|
+ ans = score / scoreTotal;
|
|
|
|
|
+ ans = ans>100?100:ans;
|
|
|
|
|
+ return ans;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|