Parcourir la source

studentRefreshSimState 添加userId参数。

tom il y a 2 semaines
Parent
commit
64bfcff818

+ 5 - 3
ruoyi-sim/src/main/java/com/ruoyi/sim/controller/RealExamController.java

@@ -91,10 +91,11 @@ public class RealExamController extends BaseController {
     }
 
     @GetMapping("/student/refresh-sim-state")
-    @ApiOperation("刷新模拟器状态")
+    @ApiOperation("[学员]刷新模拟器状态")
     public AjaxResult studentRefreshSimState(@RequestParam final String ip) {
-        l.info("刷新模拟器状态;ip = {}", ip);
-        return realExamService.studentRefreshSimState(ip);
+        // @RequestParam final Long userId,
+//        l.info("[学员]刷新模拟器状态;userId = {};ip = {}", userId, ip);
+        return realExamService.studentRefreshSimState(0L, ip);
     }
 
     @GetMapping("/student/exam/answering/{examId}")
@@ -133,6 +134,7 @@ public class RealExamController extends BaseController {
     @GetMapping("/student/exam/login-success")
     @ApiOperation("[学员]登录成功后调用")
     public AjaxResult studentLoginSuccess(@RequestParam final Long userId, @RequestParam final String ip) {
+        l.info("[学员]登录成功后调用;userId = {};ip = {}", userId, ip);
         return realExamService.studentLoginSuccess(userId, ip);
     }
 

+ 4 - 3
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommCheckService.java

@@ -118,7 +118,7 @@ public class CommCheckService {
      *
      * @param seat      座次
      * @param important true:重要的场景 开始考试 重试次数不同,也会进行序列号检查。false:不重要场景 定时巡查。
-     * @return 在线的话,带一个Sim对象出来。离线Sim对象为空
+     * @return 在线的话,带一个Sim对象出来。离线虚拟构建Sim对象。success data 是sim
      */
     public AjaxResult checkOneSeatState(final Seat seat, final boolean important) {
         // check args.
@@ -155,9 +155,9 @@ public class CommCheckService {
             String msg = MessageFormat.format(msgTemp, seat.getSeatNum(), Sim.TYPE_NAME_MAP.get(sim.getSimType()), sim.getSimNum());
             String msgSpec = checkOneSeatStateSpecBySimType(sim);
             // 成功的话,Obj为Sim对象。
-            return AjaxResult.success(msg, sim + msgSpec);
+            return AjaxResult.success(msg + msgSpec, sim);
         } else if (Objects.equals(result, SimMsg.Result.READ_TIMEOUT_EXCEPTION)) { // 正常情况:模拟器离线
-            // 更新Sim状态
+            // 更新Sim状态 更新当前座上sim的状态。
             if (!seat.getCurrentSimId().equals(Sim.ID_0)) {
                 Sim simPre = simService.selectSimBySimId(seat.getCurrentSimId());
                 simService.updateSimStateBySimId(simPre.getSimId(), Sim.State.OFFLINE);
@@ -180,6 +180,7 @@ public class CommCheckService {
     }
 
     /**
+     * 针对 特定模拟器 型号 的特殊处理。
      *
      * @param sim
      * @return

+ 21 - 4
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/RealExamService.java

@@ -419,8 +419,9 @@ public class RealExamService {
             } else {
                 l.info("Who模拟器校验正确");
             }
-            // 其他的异常情况。
-            if (ar.isError()) {
+            if (ar.isSuccess()) {
+
+            } else if (ar.isError()) { // 其他的异常情况。
                 return ar;
             }
         }
@@ -523,14 +524,28 @@ public class RealExamService {
         }
     }
 
-    public AjaxResult studentRefreshSimState(final String studentBindIp) {
-        Seat seat = seatService.uniqueByBindIp(studentBindIp);
+    /**
+     * 刷新模拟器状态。
+     *
+     * @param userId
+     * @param ip
+     * @return
+     */
+    public AjaxResult studentRefreshSimState(final Long userId, final String ip) {
+        l.info("studentLoginSuccess userId = 1,ip = {}", ip);
+        Seat seat = seatService.uniqueByBindIp(ip);
         // Check:Seat有效性。
         {
             if (seat == null) {
                 return AjaxResult.error("没有IP对应座次数据!");
             }
         }
+        // 既然已经刷新模拟器状态,则认为已经登录。
+        // 如果是先登录,后创建的考试集合。覆盖执行。
+        if (false) {
+            AjaxResult ar = studentLoginSuccess(userId, ip);
+            l.info("studentLoginSuccess ar = {}", ar);
+        }
         return commCheckService.checkOneSeatState(seat, true);
     }
 
@@ -689,6 +704,8 @@ public class RealExamService {
 
         // Step:最后读取一下模拟器电阻值。
         commSendService.readOneExamAtLast(re);
+        // 
+
         // Step:
         if (realExamFaultService.isType2ExamPrepareSubmitOk(re.getExamId())) {
             re.setExamStatus(RealExam.State.SUBMITTED);

+ 7 - 0
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/SimService.java

@@ -225,6 +225,13 @@ public class SimService {
         return !Sim.STATE_SET.contains(simState);
     }
 
+    /**
+     * 修改模拟器状态,并重置充电计数。
+     *
+     * @param simId
+     * @param simState
+     * @return
+     */
     @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE)
     public int updateSimStateBySimId(final Long simId, final String simState) {
         // check