|
@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qmth.themis.business.bean.backend.InvigilateListBean;
|
|
@@ -596,7 +597,84 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public void calculateScore(Long recordId) {
|
|
|
- //TODO
|
|
|
+
|
|
|
+ TOeExamRecord rec=this.getById(recordId);
|
|
|
+
|
|
|
+ Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(rec.getPaperId());
|
|
|
+ if (map == null || map.size() == 0) {
|
|
|
+ log.debug("no ObjectiveAnswerCacheBean for calculateObjectiveScore recordId:"+recordId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ QueryWrapper<TOeExamAnswer> wp = new QueryWrapper<>();
|
|
|
+ wp.lambda().eq(TOeExamAnswer::getExamRecordId, recordId);
|
|
|
+ List<TOeExamAnswer> answers=examAnswerService.list(wp);
|
|
|
+ if(answers==null||answers.size()==0) {
|
|
|
+ log.debug("no ObjectiveAnswer for calculateObjectiveScore recordId:"+recordId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ BigDecimal tatolscore = new BigDecimal(0.0);
|
|
|
+ for(TOeExamAnswer answer:answers) {
|
|
|
+ Double score=calculateScoreForQuestion(answer, map);
|
|
|
+ if(score!=null) {
|
|
|
+ tatolscore=tatolscore.add(new BigDecimal(score));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置客观分总分
|
|
|
+ tOeExamRecordMapper.updateObjectiveScore(recordId, tatolscore.doubleValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ private Double calculateScoreForQuestion(TOeExamAnswer answer,Map<String, ObjectiveAnswerCacheBean> map) {
|
|
|
+ Long recordId=answer.getExamRecordId();
|
|
|
+ Integer mainNumber=answer.getMainNumber();
|
|
|
+ Integer subNumber=answer.getSubNumber();
|
|
|
+ Integer subIndex=answer.getSubIndex();
|
|
|
+ String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
|
+ ObjectiveAnswerCacheBean cb = map.get(key);
|
|
|
+ if (cb == null) {
|
|
|
+ log.debug("not a objective question recordId:"+answer.getExamRecordId()+" key:"+key);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cb.getStructType().intValue() == 1) {
|
|
|
+ if (checkSingleChoice(answer.getAnswer(), cb.getChoiceAnswer())) {
|
|
|
+ answer.setScore(cb.getScore());
|
|
|
+ } else {
|
|
|
+ answer.setScore(0.0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (cb.getStructType().intValue() == 2) {
|
|
|
+ ExamCacheBean ec = examService.getExamCacheBean(ExamRecordCacheUtil.getExamId(recordId));
|
|
|
+ int r = checkMultipleChoice(answer.getAnswer(), cb.getChoiceAnswer());
|
|
|
+ if (ec.getObjectiveScorePolicy().equals(ObjectiveScorePolicyEnum.EQUAL)) {// 全对给分
|
|
|
+ if (r == 1) {
|
|
|
+ answer.setScore(cb.getScore());
|
|
|
+ } else {
|
|
|
+ answer.setScore(0.0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (ec.getObjectiveScorePolicy().equals(ObjectiveScorePolicyEnum.PARTIAL)) {// 漏选半分
|
|
|
+ if (r == 1) {
|
|
|
+ answer.setScore(cb.getScore());
|
|
|
+ } else if (r == 0) {
|
|
|
+ BigDecimal b = new BigDecimal(cb.getScore()).divide(new BigDecimal("2"), 1, BigDecimal.ROUND_UP);
|
|
|
+ answer.setScore(b.doubleValue());
|
|
|
+ } else {
|
|
|
+ answer.setScore(0.0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (cb.getStructType().intValue() == 3) {
|
|
|
+ if (Boolean.parseBoolean(answer.getAnswer()) == cb.getBoolAnswer().booleanValue()) {
|
|
|
+ answer.setScore(cb.getScore());
|
|
|
+ } else {
|
|
|
+ answer.setScore(0.0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ examAnswerService.saveOrUpdate(answer);
|
|
|
+
|
|
|
+ return answer.getScore();
|
|
|
}
|
|
|
|
|
|
/**获取考试记录数
|