|  | @@ -4,7 +4,10 @@ import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.github.jsonzou.jmockdata.JMockData;
 | 
	
		
			
				|  |  | +import com.ruoyi.common.core.domain.AjaxResult;
 | 
	
		
			
				|  |  |  import com.ruoyi.common.utils.DateUtils;
 | 
	
		
			
				|  |  | +import com.ruoyi.sim.constant.CommConst;
 | 
	
		
			
				|  |  | +import com.ruoyi.sim.constant.FaultConst;
 | 
	
		
			
				|  |  |  import com.ruoyi.sim.domain.vo.RealExamFaultReportPart1Vo;
 | 
	
		
			
				|  |  |  import com.ruoyi.sim.domain.vo.RealExamFaultReportPart2Vo;
 | 
	
		
			
				|  |  |  import com.ruoyi.sim.domain.vo.RealExamFaultReportPart3Vo;
 | 
	
	
		
			
				|  | @@ -150,18 +153,16 @@ public class RealExamFaultService {
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      @Transactional
 | 
	
		
			
				|  |  |      public void resetAllType2(final Long examId) {
 | 
	
		
			
				|  |  | -        listAllType2(examId)
 | 
	
		
			
				|  |  | -                .stream()
 | 
	
		
			
				|  |  | -                .forEach(ref -> {
 | 
	
		
			
				|  |  | -                    ref.setRefState(RealExamFault.State.INIT);
 | 
	
		
			
				|  |  | -                    ref.setAnswerRight(RealExamFault.AnswerRight.UNKNOWN);
 | 
	
		
			
				|  |  | -                    ref.setChoiceQuestionValue("");
 | 
	
		
			
				|  |  | -                    ref.setChoiceAnswerValue("");
 | 
	
		
			
				|  |  | -                    ref.setSimFaultQuestionValue("");
 | 
	
		
			
				|  |  | -                    ref.setSimFaultAnswerValue("");
 | 
	
		
			
				|  |  | -                    ref.setMinus(0L);
 | 
	
		
			
				|  |  | -                    updateRealExamFault(ref);
 | 
	
		
			
				|  |  | -                });
 | 
	
		
			
				|  |  | +        listAllType2(examId).stream().forEach(ref -> {
 | 
	
		
			
				|  |  | +            ref.setRefState(RealExamFault.State.INIT);
 | 
	
		
			
				|  |  | +            ref.setAnswerRight(RealExamFault.AnswerRight.UNKNOWN);
 | 
	
		
			
				|  |  | +            ref.setChoiceQuestionValue("");
 | 
	
		
			
				|  |  | +            ref.setChoiceAnswerValue("");
 | 
	
		
			
				|  |  | +            ref.setSimFaultQuestionValue("");
 | 
	
		
			
				|  |  | +            ref.setSimFaultAnswerValue("");
 | 
	
		
			
				|  |  | +            ref.setMinus(0L);
 | 
	
		
			
				|  |  | +            updateRealExamFault(ref);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void reset(final Long examId) {
 | 
	
	
		
			
				|  | @@ -276,54 +277,69 @@ public class RealExamFaultService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * 计算减分。
 | 
	
		
			
				|  |  | +     * 计算减分 + 判断对错。
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @param refId
 | 
	
		
			
				|  |  | +     * @return 每条关联计算结果。
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      @Transactional
 | 
	
		
			
				|  |  | -    public void calculateMinus(Long refId) {
 | 
	
		
			
				|  |  | -        l.info("calculate refId : {}", refId);
 | 
	
		
			
				|  |  | -        RealExamFault f = selectRealExamFaultByRefId(refId);
 | 
	
		
			
				|  |  | -        if (f == null) {
 | 
	
		
			
				|  |  | +    public AjaxResult calculateMinus(Long refId) {
 | 
	
		
			
				|  |  | +        l.info("calculateMinus refId : {}", refId);
 | 
	
		
			
				|  |  | +        RealExamFault ref = selectRealExamFaultByRefId(refId);
 | 
	
		
			
				|  |  | +        // check
 | 
	
		
			
				|  |  | +        if (ref == null) {
 | 
	
		
			
				|  |  |              throw new RuntimeException("calculateMinus");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (!RealExamFault.Flag.YES.equals(f.getFlag())) {
 | 
	
		
			
				|  |  | +        if (!RealExamFault.Flag.YES.equals(ref.getFlag())) {
 | 
	
		
			
				|  |  |              // throw new RuntimeException("calculateMinus");
 | 
	
		
			
				|  |  |              l.warn("not yes");
 | 
	
		
			
				|  |  | -            return;
 | 
	
		
			
				|  |  | +            return AjaxResult.error("not yes");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        // default minus 0
 | 
	
		
			
				|  |  |          int minus = 0;
 | 
	
		
			
				|  |  |          String answerRight = RealExamFault.AnswerRight.UNKNOWN;
 | 
	
		
			
				|  |  | -        l.info("f = {}", f);
 | 
	
		
			
				|  |  | +        l.info("f = {}", ref);
 | 
	
		
			
				|  |  | +        String refType = ref.getRefType();
 | 
	
		
			
				|  |  | +        final String qV = ref.getSimFaultQuestionValue();
 | 
	
		
			
				|  |  | +        final String aV = ref.getSimFaultAnswerValue();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (RealExamFault.Type.TYPE_1.equals(f.getRefType())) {
 | 
	
		
			
				|  |  | +        if (RealExamFault.Type.TYPE_1.equals(refType)) {
 | 
	
		
			
				|  |  |              // todo:选择题的算减分
 | 
	
		
			
				|  |  | -            final String q = f.getChoiceQuestionValue();
 | 
	
		
			
				|  |  | -            final String a = f.getChoiceAnswerValue();
 | 
	
		
			
				|  |  | -        } else if (RealExamFault.Type.TYPE_2.equals(f.getRefType())) {
 | 
	
		
			
				|  |  | -            final String q = f.getSimFaultQuestionValue();
 | 
	
		
			
				|  |  | -            final String a = f.getSimFaultAnswerValue();
 | 
	
		
			
				|  |  | -            // 模拟器故障的算减分
 | 
	
		
			
				|  |  | -            if (StringUtils.isAllBlank(q, a)) {
 | 
	
		
			
				|  |  | -                // todo:不应该出现的情况
 | 
	
		
			
				|  |  | -                minus = 25;
 | 
	
		
			
				|  |  | -                answerRight = RealExamFault.AnswerRight.NO;
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                if (!StringUtils.equals(q, a)) {
 | 
	
		
			
				|  |  | -                    // 扣0分
 | 
	
		
			
				|  |  | +            // todo:细化实现
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (RealExamFault.Type.TYPE_2.equals(refType)) {
 | 
	
		
			
				|  |  | +            // check
 | 
	
		
			
				|  |  | +            if (StringUtils.isAnyBlank(qV, aV)) {
 | 
	
		
			
				|  |  | +                // todo:一般不应该出现的情况
 | 
	
		
			
				|  |  | +                return AjaxResult.error("数据报文异常!");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            // 模拟器故障 的 计算减分 + 判断对错
 | 
	
		
			
				|  |  | +            if (FaultConst.FAULT_SET_JUDGE_RIGHT_FROM_WRONG_SP2.contains(ref.getFaultId())) {
 | 
	
		
			
				|  |  | +                String aVLast = aV.substring(6, 8);
 | 
	
		
			
				|  |  | +                if (CommConst.ANSWER_LAST_RIGHT_MSG.equals(aVLast)) {
 | 
	
		
			
				|  |  |                      minus = 0;
 | 
	
		
			
				|  |  |                      answerRight = RealExamFault.AnswerRight.YES;
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    // 扣25分 故障未排除
 | 
	
		
			
				|  |  | +                } else if (CommConst.ANSWER_LAST_WRONG_MSG.equals(aVLast)) {
 | 
	
		
			
				|  |  |                      minus = 25;
 | 
	
		
			
				|  |  |                      answerRight = RealExamFault.AnswerRight.NO;
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    return AjaxResult.error("数据报文异常!");
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +            } else if (!StringUtils.equals(qV, aV)) {
 | 
	
		
			
				|  |  | +                // 扣0分
 | 
	
		
			
				|  |  | +                minus = 0;
 | 
	
		
			
				|  |  | +                answerRight = RealExamFault.AnswerRight.YES;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                // 扣25分 故障未排除
 | 
	
		
			
				|  |  | +                minus = 25;
 | 
	
		
			
				|  |  | +                answerRight = RealExamFault.AnswerRight.NO;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        f.setMinus((long) minus);
 | 
	
		
			
				|  |  | -        f.setAnswerRight(answerRight);
 | 
	
		
			
				|  |  | +        ref.setMinus((long) minus);
 | 
	
		
			
				|  |  | +        ref.setAnswerRight(answerRight);
 | 
	
		
			
				|  |  |          // 更新减分数据。
 | 
	
		
			
				|  |  | -        updateRealExamFault(f);
 | 
	
		
			
				|  |  | +        updateRealExamFault(ref);
 | 
	
		
			
				|  |  | +        return AjaxResult.success();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public List<RealExamFaultReportPart1Vo> getReportListPart1(final Long examId) {
 |