tom пре 2 недеља
родитељ
комит
9790a38421

+ 1 - 1
ruoyi-sim/src/main/java/com/ruoyi/sim/controller/HardwareCommDebugController.java

@@ -192,7 +192,7 @@ public class HardwareCommDebugController extends BaseController {
     public AjaxResult debugCheck() {
         Seat seat = seatService.selectSeatBySeatId(10L);
         Sim sim = simService.selectSimBySimId(170L);
-        return commSendService.readOneSimAllFaultCheck(seat, sim);
+        return commSendService.readOneSimAllFaultStartCheck(seat, sim);
     }
 
     /**

+ 16 - 15
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommReceiveService.java

@@ -48,12 +48,12 @@ public class CommReceiveService {
      * 设置出题值。
      *
      * @param sm
-     * @param s
+     * @param sim
      * @param reF      debug模式下为null。
-     * @param f
+     * @param fault
      * @param faultIds debug模式必须有值
      */
-    public void setFaultQuestionValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String[] faultIds) {
+    public void setFaultQuestionValue(SimMsg sm, Sim sim, RealExamFault reF, Fault fault, String[] faultIds) {
         // check
 
         //
@@ -68,21 +68,22 @@ public class CommReceiveService {
             // 修改关联状态。
             reF.setSimFaultQuestionValue(faultQuestionValue);
             realExamFaultService.updateRealExamFault(reF);
-            if (RealExamFault.Flag.YES.equals(reF.getFlag())) {
+            String flag = reF.getFlag();
+            if (StringUtils.equals(flag, RealExamFault.Flag.YES)) {
                 realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.WRITTEN);
-            } else if (RealExamFault.Flag.NO.equals(reF.getFlag())) {
+            } else if (StringUtils.equals(flag, RealExamFault.Flag.NO)) {
                 realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.LOOP_READ);
             }
         } else {
             //
             HashSet<String> fTempSet = new HashSet<>(Arrays.asList(faultIds));
             l.info("fTempSet.toArray = {}", fTempSet.toArray());
-            String faultId = f.getFaultId();
+            String faultId = fault.getFaultId();
             l.info("faultId = {}", faultId);
             // 不判断是否存在,因为之前已经删除所有表中数据,所以应该直接插入数据。
             DebugFault df = new DebugFault();
-            df.setSimId(s.getSimId());
-            df.setFaultId(f.getFaultId());
+            df.setSimId(sim.getSimId());
+            df.setFaultId(fault.getFaultId());
             if (fTempSet.contains(faultId)) {
                 df.setFlag(DebugFault.Flag.YES);
             } else {
@@ -100,12 +101,12 @@ public class CommReceiveService {
      * 设置答题值。
      *
      * @param sm
-     * @param s
+     * @param sim
      * @param reF      debug模式为null
-     * @param f
+     * @param fault
      * @param refState 轮询时候为null debug模式为null
      */
-    public void setFaultAnswerValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String refState) {
+    public void setFaultAnswerValue(SimMsg sm, Sim sim, RealExamFault reF, Fault fault, String refState) {
         // check
         //
         String faultAnswerValue = CommParseUtils.subContentData(sm);
@@ -120,18 +121,18 @@ public class CommReceiveService {
                 reF.setRefState(refState);
             }
             // LOOP_READ 没有成功的结果,跳过数据库更新。
-            if (RealExamFault.State.LOOP_READ.equals(refState) && sm.isResultNotOk()) {
+            if (StringUtils.equals(refState, RealExamFault.State.LOOP_READ) && sm.isResultNotOk()) {
                 l.info("nothing change.");
                 return;
             }
             reF.setSimFaultAnswerValue(faultAnswerValue);
             realExamFaultService.updateRealExamFault(reF);
         } else {
-            DebugFault df = debugFaultService.exist(s.getSimId(), f.getFaultId());
+            DebugFault df = debugFaultService.exist(sim.getSimId(), fault.getFaultId());
             if (df == null) {
                 df = new DebugFault();
-                df.setSimId(s.getSimId());
-                df.setFaultId(f.getFaultId());
+                df.setSimId(sim.getSimId());
+                df.setFaultId(fault.getFaultId());
                 df.setSimFaultAnswerValue(faultAnswerValue);
                 debugFaultService.insertDebugFault(df);
             } else {

+ 72 - 56
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommSendService.java

@@ -4,11 +4,13 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.sim.config.SimConfig;
 import com.ruoyi.sim.constant.CommConst;
+import com.ruoyi.sim.constant.FaultIdConst;
 import com.ruoyi.sim.domain.*;
 import com.ruoyi.sim.domain.vo.FaultCheckVo;
 import com.ruoyi.sim.domain.vo.ScanSeatVo;
 import com.ruoyi.sim.domain.vo.SimSocketParamVo;
 import com.ruoyi.sim.util.SimDateUtil;
+import org.apache.commons.collections4.SetUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
@@ -85,9 +87,9 @@ public class CommSendService {
                 RealExam re = realExamService.selectRealExamByExamId(ref.getExamId());
                 Seat seat = seatService.selectSeatBySeatId(re.getSeatId());
                 Sim sim = simService.selectSimBySimId(e.getSimId());
-                Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
-                if (f != null && Fault.Type.REAL_GZBW.equals(f.getFaultType()) && Fault.State.ENABLE.equals(f.getFaultState())) {
-                    readOneSimOneFaultResistance(seat, sim, ref, f, null);
+                Fault fault = faultService.selectFaultByFaultId(ref.getFaultId());
+                if (fault != null && Fault.Type.REAL_GZBW.equals(fault.getFaultType()) && Fault.State.ENABLE.equals(fault.getFaultState())) {
+                    readOneSimOneFaultResistance(seat, sim, ref, fault, null);
                 }
             });
         });
@@ -121,8 +123,8 @@ public class CommSendService {
             }
             Seat seat = seatService.selectSeatBySeatId(re.getSeatId());
             Sim sim = simService.selectSimBySimId(re.getSimId());
-            Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
-            readOneSimOneFaultResistance(seat, sim, ref, f, RealExamFault.State.LOOP_READ);
+            Fault fault = faultService.selectFaultByFaultId(ref.getFaultId());
+            readOneSimOneFaultResistance(seat, sim, ref, fault, RealExamFault.State.LOOP_READ);
         }
     }
 
@@ -137,8 +139,8 @@ public class CommSendService {
         for (RealExamFault ref : list) {
             Seat seat = seatService.selectSeatBySeatId(re.getSeatId());
             Sim sim = simService.selectSimBySimId(re.getSimId());
-            Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
-            readOneSimOneFaultResistance(seat, sim, ref, f, RealExamFault.State.FINISH);
+            Fault fault = faultService.selectFaultByFaultId(ref.getFaultId());
+            readOneSimOneFaultResistance(seat, sim, ref, fault, RealExamFault.State.FINISH);
         }
         // 计算扣分。
         // 最后都读取到,才算扣分。
@@ -151,8 +153,8 @@ public class CommSendService {
     public void readOneSimAtLastByDebug(Seat seat, Sim sim) {
         l.info("readOneSimAtLastByDebug");
         List<Fault> list = faultService.listType3(sim.getSimType());
-        for (Fault f : list) {
-            readOneSimOneFaultResistance(seat, sim, null, f, null);
+        for (Fault fault : list) {
+            readOneSimOneFaultResistance(seat, sim, null, fault, null);
         }
     }
 
@@ -620,7 +622,7 @@ public class CommSendService {
         // msg判断,是否含有"故障部位"字符串
         {
             if (checkReplace) {
-                AjaxResult arE2 = readOneSimAllFaultCheck(seat, sim);
+                AjaxResult arE2 = readOneSimAllFaultStartCheck(seat, sim);
                 if (arE2.isError()) {
                     return arE2;
                 }
@@ -738,15 +740,15 @@ public class CommSendService {
     }
 
     /**
-     * 开始考试前检查读取。
+     * 一个模拟器 所有故障 开始考试前 检查读取。
      * 有两处引用。正式开始和调试。
      *
      * @param seat
      * @param sim
      * @return
      */
-    public AjaxResult readOneSimAllFaultCheck(Seat seat, Sim sim) {
-        // 查询所有真实的故障部位。
+    public AjaxResult readOneSimAllFaultStartCheck(final Seat seat, final Sim sim) {
+        // 查询某型号所有真实的故障部位。
         Fault q = new Fault();
         q.setFaultType(Fault.Type.REAL_GZBW);
         q.setSimType(sim.getSimType());
@@ -754,50 +756,48 @@ public class CommSendService {
         // 未正确安装可换件故障List
         // NG not good
         List<FaultCheckVo> listNGVo = new ArrayList<>();
-//        Map<String, FaultCheckVo> mapVo = new HashMap<>();
+        // not good fault_id HashSet
         Set<String> setNG = new HashSet<>();
-        // 单一检查
+        // 单一故障部位检查
         {
             for (Fault oneF : listF) {
                 FaultCheckVo voOne = new FaultCheckVo();
                 voOne.setSeat(seat);
                 voOne.setSim(sim);
                 voOne.setFault(oneF);
-                AjaxResult ar = readOneSimOneFaultCheck(voOne);
+                AjaxResult ar = readOneSimOneFaultStartSimpleCheck(voOne);
                 // getDefaultErrorAR voReturn 可能为空
                 FaultCheckVo voReturn = (FaultCheckVo) ar.get(AjaxResult.DATA_TAG);
                 if (voReturn != null) {
                     if (voReturn.isCheckOk()) {
-                        l.info("log 故障部位[" + oneF.getBindHardwareMsg() + "][" + oneF.getReplaceName() + "]安装ok;");
+                        l.info("log 故障部位[{}][{}]安装ok;", oneF.getBindHardwareMsg(), oneF.getReplaceName());
                     } else {
-                        l.info("log 故障部位[" + oneF.getBindHardwareMsg() + "][" + oneF.getReplaceName() + "]未正确安装;");
+                        l.info("log 故障部位[{}][{}]未正确安装;", oneF.getBindHardwareMsg(), oneF.getReplaceName());
                         listNGVo.add(voReturn);
-                        // add map.
-                        // mapVo.put(buildKey(voReturn.getSim().getSimType(), voReturn.getFault().getBindHardwareMsg()), voReturn);
                         setNG.add(oneF.getFaultId());
                     }
                 }
-                // readOneSimOneFaultCheck 得出ar有问题直接返回
+                // 得出ar有问题直接返回,不执行后面检查。
                 if (ar.isError()) {
                     return ar;
                 }
             }
-            // 复核条件检查
-            {
-                AjaxResult ar = checkStep2(sim, setNG);
-                if (ar.isError()) {
-                    return ar;
-                }
+        }
+        // 复核条件检查
+        {
+            AjaxResult ar = readOneSimAllFaultStartGlobalCheck(sim, setNG);
+            if (ar.isError()) {
+                return ar;
             }
-            //
-            if (!listNGVo.isEmpty()) {
-                StringBuilder sb = new StringBuilder();
-                for (FaultCheckVo oneVo : listNGVo) {
-                    sb.append(oneVo.getErrorMsg());
-                }
-                sb.append("请正确安装可换件,检查后重新开始!");
-                return AjaxResult.error(sb.toString());
+        }
+        //
+        if (!listNGVo.isEmpty()) {
+            StringBuilder sb = new StringBuilder();
+            for (FaultCheckVo oneVo : listNGVo) {
+                sb.append(oneVo.getErrorMsg());
             }
+            sb.append("请正确安装可换件,检查后重新开始!");
+            return AjaxResult.error(sb.toString());
         }
         return AjaxResult.success("所有故障部位检查没有问题。");
     }
@@ -813,7 +813,17 @@ public class CommSendService {
         return simType + "@" + bindHardwareMsg;
     }
 
-    private AjaxResult checkStep2(Sim sim, Set<String> setNG) {
+    /**
+     * 一个模拟器 全部故障 开始考试前 复合读取检查。
+     *
+     * @param sim
+     * @param setNG
+     * @return
+     */
+    public AjaxResult readOneSimAllFaultStartGlobalCheck(Sim sim, Set<String> setNG) {
+        if (Objects.isNull(setNG) || setNG.isEmpty()) {
+            return AjaxResult.success("");
+        }
         if (StringUtils.equals(sim.getSimType(), Sim.TYPE_0003)) {
 //            if (map.containsKey(buildKeyType0003("01"))) {
 //                SimMsg smR = map.get(buildKeyType0003("01")).getSimMsgReceive();
@@ -825,20 +835,24 @@ public class CommSendService {
 //
 //                }
 //            }
-            if (setNG != null && setNG.contains("0003GZBW0003") && setNG.contains("0003GZBW0004") && setNG.contains("0003GZBW000B") && setNG.contains("0003GZBW000E")) {
+            if (setNG.contains(FaultIdConst.T0003.F03) &&
+                    setNG.contains(FaultIdConst.T0003.F04) &&
+                    setNG.contains(FaultIdConst.T0003.F0B) &&
+                    setNG.contains(FaultIdConst.T0003.F0E)
+            ) {
                 return AjaxResult.error("请检查 显控报警板与主板连接线 连接情况!");
             }
         }
-        return AjaxResult.success("");
+        return AjaxResult.success("复合读取检查 成功。");
     }
 
     /**
-     * 检查读取
+     * 一个模拟器 一个故障 开始考试前 简单读取检查。
      *
      * @param vo
      * @return
      */
-    public AjaxResult readOneSimOneFaultCheck(FaultCheckVo vo) {
+    public AjaxResult readOneSimOneFaultStartSimpleCheck(FaultCheckVo vo) {
         l.info("readOneSimOneFaultCheck vo = {}", vo);
         SimMsg smS = commBuildService.buildSendMsgReadFaultResistance(vo.getSim().getSimNum(), vo.getFault().getBindHardwareMsg());
         SimMsg smR = send(smS, vo.getSeat(), vo.getSim(), RETRY_COUNT_CHECK_ONE_FAULT, commStrategy.getSleepLong());
@@ -895,15 +909,15 @@ public class CommSendService {
      *
      * @param sim
      * @param ref      debug调试模式为空。可以为空。
-     * @param f
+     * @param fault
      * @param faultIds debug模式必须有值
      */
-    public void readOneSimOneFaultFirstTime(Seat seat, Sim sim, RealExamFault ref, Fault f, String[] faultIds) {
+    public void readOneSimOneFaultFirstTime(Seat seat, Sim sim, RealExamFault ref, Fault fault, String[] faultIds) {
         l.info("readOneSimOneFaultFirstTime");
         // 读取一次当前电阻代表值作为出题值。
-        SimMsg sm1 = commBuildService.buildSendMsgReadFaultResistance(sim.getSimNum(), f.getBindHardwareMsg());
-        SimMsg sm2 = send(sm1, seat, sim, RETRY_COUNT_WRITE_ONE_FAULT, commStrategy.getSleepLong());
-        simReceiveService.setFaultQuestionValue(sm2, sim, ref, f, faultIds);
+        SimMsg smS = commBuildService.buildSendMsgReadFaultResistance(sim.getSimNum(), fault.getBindHardwareMsg());
+        SimMsg smR = send(smS, seat, sim, RETRY_COUNT_WRITE_ONE_FAULT, commStrategy.getSleepLong());
+        simReceiveService.setFaultQuestionValue(smR, sim, ref, fault, faultIds);
     }
 
     /**
@@ -937,27 +951,29 @@ public class CommSendService {
     }
 
     /**
+     * 读取一个模拟器的一个故障点位的值。
+     *
      * @param sim
      * @param reF
-     * @param f
+     * @param fault
      * @param refState 修改的目标状态。debug模式下执行为null。
      */
-    public void readOneSimOneFaultResistance(Seat seat, Sim sim, RealExamFault reF, Fault f, String refState) {
+    public void readOneSimOneFaultResistance(Seat seat, Sim sim, RealExamFault reF, Fault fault, final String refState) {
         l.info("readOneSimOneFaultResistance");
-        SimMsg sm1 = commBuildService.buildSendMsgReadFaultResistance(sim.getSimNum(), f.getBindHardwareMsg());
+        SimMsg smS = commBuildService.buildSendMsgReadFaultResistance(sim.getSimNum(), fault.getBindHardwareMsg());
         SimMsg sm2 = null;
         if (reF != null && refState != null) {
-            if (RealExamFault.State.FINISH.equals(refState)) { // 是否最后一次读取。
-                sm2 = send(sm1, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_FINAL, commStrategy.getSleepShort());
-            } else if (RealExamFault.State.LOOP_READ.equals(refState)) { // 是否是中间读取
-                sm2 = send(sm1, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_MIDDLE, commStrategy.getSleepShort(), false);
+            if (StringUtils.equals(refState, RealExamFault.State.LOOP_READ)) { // 是否是中间读取
+                sm2 = send(smS, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_MIDDLE, commStrategy.getSleepShort(), false);
+            } else if (StringUtils.equals(refState, RealExamFault.State.FINISH)) { // 是否最后一次读取。
+                sm2 = send(smS, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_FINAL, commStrategy.getSleepShort());
             } else {
-                sm2 = send(sm1, seat, sim, RETRY_COUNT_0, commStrategy.getSleepShort());
+                sm2 = send(smS, seat, sim, RETRY_COUNT_0, commStrategy.getSleepShort());
             }
         } else {
-            sm2 = send(sm1, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_FINAL, commStrategy.getSleepShort());
+            sm2 = send(smS, seat, sim, RETRY_COUNT_READ_ONE_RESISTANCE_FINAL, commStrategy.getSleepShort());
         }
-        simReceiveService.setFaultAnswerValue(sm2, sim, reF, f, refState);
+        simReceiveService.setFaultAnswerValue(sm2, sim, reF, fault, refState);
     }
 
     public SimMsg send(final SimMsg sm, final Seat seat, final Sim sim, final int retryTotalCount, final long sleep) {
@@ -975,7 +991,7 @@ public class CommSendService {
      * @param sim             可以为空!更新最后发送/接收时间 用。
      * @param retryTotalCount 重试次数
      * @param sleep           不使用传入0,不进行挂起。
-     * @param importantTask
+     * @param importantTask   是否是重要的。
      * @return
      */
     public SimMsg send(final SimMsg sm, final Seat seat, final Sim sim, final int retryTotalCount, final long sleep, final boolean importantTask) {

+ 5 - 0
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/RealExamFaultService.java

@@ -170,6 +170,11 @@ public class RealExamFaultService {
         q.setExamId(examId);
     }
 
+    /**
+     * 
+     * @param examId
+     * @return
+     */
     public List<RealExamFault> listAllType2State2and3ByExamId(Long examId) {
         List<RealExamFault> list = new ArrayList<>();
         {

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

@@ -282,11 +282,11 @@ public class RealExamService {
      * [学生]开始 考试、训练、练习
      *
      * @param examId             考试Id
-     * @param studentBindIp      考试学员IP
+     * @param ip      考试学员IP
      * @param examCollectionType 考试集合类型
      * @return
      */
-    public AjaxResult studentStartRealExam(final Long examId, final String studentBindIp, final String examCollectionType) {
+    public AjaxResult studentStartRealExam(final Long examId, final String ip, final String examCollectionType) {
         // Check:针对训练,进行特殊检查。
         if (StringUtils.equals(RealExamCollection.Type.EXERCISE, examCollectionType)) {
             // 已经open的考试。
@@ -323,7 +323,7 @@ public class RealExamService {
         {
             // 学员Id
             Long userId = re.getUserId();
-            studentLoginSuccess(userId, studentBindIp);
+            studentLoginSuccess(userId, ip);
         }
         // check:考试状态
         if (StringUtils.equals(re.getExamStatus(), RealExam.State.SUBMITTED) ||
@@ -356,12 +356,12 @@ public class RealExamService {
             l.info("考试集合类型校验正确");
         }
         // Check:检查参数studentBindIp有效性
-        if (StringUtils.isBlank(studentBindIp)) {
+        if (StringUtils.isBlank(ip)) {
             return AjaxResult.error("IP地址无效");
         } else {
             l.info("IP地址检验正确");
         }
-        Seat seat = seatService.uniqueByBindIp(studentBindIp);
+        Seat seat = seatService.uniqueByBindIp(ip);
         if (seat == null) {
             return AjaxResult.error("没有IP对应座次数据!");
         } else {
@@ -379,7 +379,7 @@ public class RealExamService {
         // Check:ping通 学员端电脑。
         // 不检查。
         if (false) {
-            AjaxResult ar = commCheckService.checkPingStudentPcState(studentBindIp);
+            AjaxResult ar = commCheckService.checkPingStudentPcState(ip);
             if (ar.isError()) {
                 return ar;
             }
@@ -430,7 +430,7 @@ public class RealExamService {
         {
             // 修改exam表对应examId的一条数据,填充并锁定seat_id和sim_id值。
             re = selectRealExamByExamId(examId);
-            seat = seatService.uniqueByBindIp(studentBindIp);
+            seat = seatService.uniqueByBindIp(ip);
             l.debug("seat = {}", seat);
             // 设置上seatId和simId
             re.setSeatId(seat.getSeatId());
@@ -480,7 +480,7 @@ public class RealExamService {
         // Step:可换件检查,读取对应一台模拟器 所有故障部位值。
         //      检查模拟器所有的 真实的 故障部位 是否异常 或者 空值。特殊的故障部位要单独判断。
         if (SimDebugConfig.CHECK_REPLACE_EMPTY) {
-            AjaxResult ar = commSendService.readOneSimAllFaultCheck(seat, sim);
+            AjaxResult ar = commSendService.readOneSimAllFaultStartCheck(seat, sim);
             if (ar.isError()) {
                 return ar;
             } else {
@@ -704,7 +704,7 @@ public class RealExamService {
 
         // Step:最后读取一下模拟器电阻值。
         commSendService.readOneExamAtLast(re);
-        // 
+        // Check:检查最后读取电阻值的有效性。
 
         // Step:
         if (realExamFaultService.isType2ExamPrepareSubmitOk(re.getExamId())) {