Browse Source

修复 交卷。

tom 5 months ago
parent
commit
0804cc7a62

+ 3 - 2
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommReceiveService.java

@@ -84,8 +84,9 @@ public class CommReceiveService {
      * @param s
      * @param reF
      * @param f
+     * @param refState RealExamFault.State.LOOP_READ
      */
-    public void setFaultAnswerValue(SimMsg sm, Sim s, RealExamFault reF, Fault f) {
+    public void setFaultAnswerValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String refState) {
         // check
         if (reF == null) {
             l.info("reF null!");
@@ -99,7 +100,7 @@ public class CommReceiveService {
             return;
         }
         l.info("faultAnswerValue = {}", faultAnswerValue);
-        reF.setRefState(RealExamFault.State.LOOP_READ);
+        reF.setRefState(refState);
         reF.setSimFaultAnswerValue(faultAnswerValue);
         realExamFaultService.updateRealExamFault(reF);
     }

+ 14 - 25
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommSendService.java

@@ -133,7 +133,7 @@ public class CommSendService {
                         Fault.TYPE_3.equals(f.getFaultType()) &&
                         Fault.State.ENABLE.equals(f.getFaultState())
                 ) {
-                    readOneFaultResistance(s, ref, f);
+                    readOneFaultResistance(s, ref, f, RealExamFault.State.LOOP_READ);
                 }
             });
         });
@@ -148,42 +148,25 @@ public class CommSendService {
     }
 
     public void readOneExamAtLast(RealExam re) {
+        l.info("readOneExamAtLast");
         List<RealExamFault> listREF = realExamFaultService.listAllType2LoopReadStateByExamId(re.getExamId());
         listREF.forEach(ref -> {
             Sim s = simService.selectSimBySimId(re.getSimId());
             Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
-            readOneFaultResistance(s, ref, f);
+            readOneFaultResistance(s, ref, f, RealExamFault.State.FINISH);
         });
-
-        submit(re.getExamId());
+        // 计算扣分。
         {
-            calculateScoreAsync(re.getExamId());
+            calculateScore(re.getExamId());
         }
     }
 
-    /**
-     * @param examId
-     */
-    @Transactional
-    public void submit(long examId) {
-        l.info("submit");
-        RealExam re1 = realExamService.selectRealExamByExamId(examId);
-        re1.setExamStatus(RealExam.State.SUBMITTED);
-        re1.setEndTime(DateUtils.getNowDate());
-        realExamService.updateRealExam(re1);
-    }
-
     @Async("tp-comm")
     public void readOneExamAtLastAsync(RealExam re) {
+        l.info("readOneExamAtLastAsync");
         readOneExamAtLast(re);
     }
 
-    // todo:
-    // @Async
-    public void calculateScoreAsync(Long realExamId) {
-        calculateScore(realExamId);
-    }
-
     /**
      * 计算减分(不包括超时)。汇总到deduction_total_score字段。
      *
@@ -418,7 +401,7 @@ public class CommSendService {
     }
 
 
-    public void readOneFaultResistance(Sim s, RealExamFault reF, Fault f) {
+    public void readOneFaultResistance(Sim s, RealExamFault reF, Fault f, String refState) {
         l.info("readOneFaultResistance");
         try {
             SimMsg sm = new SimMsg();
@@ -426,12 +409,18 @@ public class CommSendService {
             sm.setSendMsg(sendMsg);
             String receiveMsg = send(sendMsg, s);
             sm.setReceiveMsg(receiveMsg);
-            simReceiveService.setFaultAnswerValue(sm, s, reF, f);
+            simReceiveService.setFaultAnswerValue(sm, s, reF, f, refState);
         } catch (IOException e) {
             catchException(e);
         }
     }
 
+    @Async("tp-comm")
+    public void readOneFaultResistanceAsync(Sim s, RealExamFault reF, Fault f, String refState) {
+        l.info("readOneFaultResistanceAsync");
+        readOneFaultResistance(s, reF, f, refState);
+    }
+
     public void test() {
         try {
             {

+ 16 - 1
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/RealExamService.java

@@ -138,7 +138,8 @@ public class RealExamService {
     @Transactional
     public int updateOneState(long examId, final String state) {
         RealExam q = selectRealExamByExamId(examId);
-        if (RealExam.State.SUBMITTED.equals(state)) {
+        // todo:屏蔽
+        if (false && RealExam.State.SUBMITTED.equals(state)) {
             // 关联故障list同步锁死。
             realExamFaultService.listAllType2LoopReadStateByExamId(q.getExamId())
                     .forEach(ref -> {
@@ -291,10 +292,24 @@ public class RealExamService {
         RealExam re1 = selectRealExamByExamId(examId);
         commSendService.readOneExamAtLastAsync(re1);
 
+        submit(examId);
+
         return AjaxResult.success(re1);
     }
 
     /**
+     * @param examId
+     */
+    @Transactional
+    public void submit(long examId) {
+        l.info("submit");
+        RealExam re2 = selectRealExamByExamId(examId);
+        re2.setExamStatus(RealExam.State.SUBMITTED);
+        re2.setEndTime(DateUtils.getNowDate());
+        updateRealExam(re2);
+    }
+
+    /**
      * [轮询][学生]结束考试界面。
      *
      * @param examId