Bladeren bron

debug 下发故障 和 读取当前状态 api基本实现。

tom 3 maanden geleden
bovenliggende
commit
8e97b17002

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

@@ -114,7 +114,7 @@ public class FaultController extends BaseController {
     @GetMapping("/listTypeRealGZBW/{simType}")
     @ApiOperation("list某模拟器型号,所有的真实的[故障部位]基础数据。")
     public AjaxResult listType3(@PathVariable(value = "simType") String simType) {
-        return faultService.listType3(simType);
+        return faultService.listType3Ar(simType);
     }
 
     @GetMapping("/listTypeGZXX/{simType}")

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

@@ -44,6 +44,12 @@ public class HardwareCommDebugController extends BaseController {
         return success(commSendService.debugReadAllFaultResistance(simNum));
     }
 
+    @GetMapping(value = "/debugReadAllFaultResistanceBySimNum/{simNum}")
+    @ApiOperation("debug通过simNum读取一台模拟器所有故障答题值,保存debug_fault表中,类似交卷")
+    public AjaxResult debugReadAllFaultResistanceBySimNum(@PathVariable("simNum") final String simNum) {
+        return commSendService.debugReadAllFaultResistanceBySimNum(simNum);
+    }
+
     @GetMapping(value = "/debugClearOneFault/{simNum}/{bindHardwareMsg}")
     @ApiOperation("debug清除一个故障")
     public AjaxResult debugClearOneFault(@PathVariable("simNum") final String simNum,
@@ -51,7 +57,7 @@ public class HardwareCommDebugController extends BaseController {
         return success(commSendService.debugClearOneFault(simNum, bindHardwareMsg));
     }
 
-    @GetMapping(value = "/debugClearAllFaultViaSimNum/{simNum}")
+    @GetMapping(value = "/debugClearAllFaultBySimNum/{simNum}")
     @ApiOperation("debug通过simNum清除一台模拟器所有故障")
     public AjaxResult debugClearAllFaultBySimNum(@PathVariable("simNum") final String simNum) {
         return commSendService.debugClearAllFaultBySimNum(simNum);
@@ -76,11 +82,11 @@ public class HardwareCommDebugController extends BaseController {
         return success(commSendService.debugWriteAllFault(simNum));
     }
 
-    @GetMapping(value = "/debugWriteSelectedFault/{simNum}/{faultIds}")
-    @ApiOperation("debug下发所选故障")
-    public AjaxResult debugWriteAllFault(@PathVariable("simNum") final String simNum,
-                                         @PathVariable("faultIds") final String[] faultIds,
-                                         @RequestParam final Boolean checkReplace) {
-        return success(commSendService.debugWriteSelectedFaultBySimNum(simNum, faultIds, checkReplace));
+    @GetMapping(value = "/debugWriteSelectedFaultBySimNum/{simNum}/{faultIds}")
+    @ApiOperation("debug下发所选故障,保存debug_fault表中,类似开始考试")
+    public AjaxResult debugWriteSelectedFaultBySimNum(@PathVariable("simNum") final String simNum,
+                                                      @PathVariable("faultIds") final String[] faultIds,
+                                                      @RequestParam final Boolean checkReplace) {
+        return commSendService.debugWriteSelectedFaultBySimNum(simNum, faultIds, checkReplace);
     }
 }

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

@@ -69,7 +69,7 @@ public class CommBuildService {
 
     public SimMsg buildSendMsg(final String simNum, final String cmd, final String cmdId, final String data) {
         SimMsg smS = new SimMsg();
-        smS.setSimId(idService.nextId());
+        smS.setSimMsgId(idService.nextId());
         if (StringUtils.isEmpty(simNum) || StringUtils.isEmpty(cmd) || StringUtils.isEmpty(cmdId) || StringUtils.isEmpty(data)) {
             throw new IllegalArgumentException("buildSendMsg error 01");
         }

+ 41 - 21
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommReceiveService.java

@@ -1,10 +1,8 @@
 package com.ruoyi.sim.service.impl;
 
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.sim.domain.Fault;
-import com.ruoyi.sim.domain.RealExamFault;
-import com.ruoyi.sim.domain.Sim;
-import com.ruoyi.sim.domain.SimMsg;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.sim.domain.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,6 +23,8 @@ public class CommReceiveService {
     private RealExamFaultService realExamFaultService;
     @Autowired
     private SimService simService;
+    @Autowired
+    private DebugFaultService debugFaultService;
 
     /**
      * 只要返回信息,即认为在线。
@@ -71,13 +71,25 @@ public class CommReceiveService {
             return;
         }
         l.info("faultQuestionValue = {}", faultQuestionValue);
-        // 修改关联状态。
-        reF.setSimFaultQuestionValue(faultQuestionValue);
-        realExamFaultService.updateRealExamFault(reF);
-        if (RealExamFault.Flag.YES.equals(reF.getFlag())) {
-            realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.WRITTEN);
-        } else if (RealExamFault.Flag.NO.equals(reF.getFlag())) {
-            realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.LOOP_READ);
+        if (reF != null) {
+            // 修改关联状态。
+            reF.setSimFaultQuestionValue(faultQuestionValue);
+            realExamFaultService.updateRealExamFault(reF);
+            if (RealExamFault.Flag.YES.equals(reF.getFlag())) {
+                realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.WRITTEN);
+            } else if (RealExamFault.Flag.NO.equals(reF.getFlag())) {
+                realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.LOOP_READ);
+            }
+        } else {
+            DebugFault df = debugFaultService.exist(s.getSimId(), f.getFaultId());
+            if (df == null) {
+                df = new DebugFault();
+                df.setSimFaultQuestionValue(faultQuestionValue);
+                debugFaultService.insertDebugFault(df);
+            } else {
+                df.setSimFaultQuestionValue(faultQuestionValue);
+                debugFaultService.updateDebugFault(df);
+            }
         }
     }
 
@@ -86,16 +98,12 @@ public class CommReceiveService {
      *
      * @param sm
      * @param s
-     * @param reF
+     * @param reF      debug模式为null
      * @param f
-     * @param refState 轮询时候为null
+     * @param refState 轮询时候为null debug模式为null
      */
     public void setFaultAnswerValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String refState) {
         // check
-        if (reF == null) {
-            l.info("reF null!");
-            return;
-        }
         //
         String faultAnswerValue = parseGetData(sm.getReceiveMsg());
         // todo:
@@ -104,11 +112,23 @@ public class CommReceiveService {
             return;
         }
         l.info("faultAnswerValue = {}", faultAnswerValue);
-        if (StringUtils.isNotBlank(refState)) {
-            reF.setRefState(refState);
+        if (reF != null && refState != null) {
+            if (StringUtils.isNotBlank(refState)) {
+                reF.setRefState(refState);
+            }
+            reF.setSimFaultAnswerValue(faultAnswerValue);
+            realExamFaultService.updateRealExamFault(reF);
+        } else {
+            DebugFault df = debugFaultService.exist(s.getSimId(), f.getFaultId());
+            if (df == null) {
+                df = new DebugFault();
+                df.setSimFaultAnswerValue(faultAnswerValue);
+                debugFaultService.insertDebugFault(df);
+            } else {
+                df.setSimFaultAnswerValue(faultAnswerValue);
+                debugFaultService.updateDebugFault(df);
+            }
         }
-        reF.setSimFaultAnswerValue(faultAnswerValue);
-        realExamFaultService.updateRealExamFault(reF);
     }
 
     /**

+ 127 - 26
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/CommSendService.java

@@ -107,6 +107,35 @@ public class CommSendService {
         }
     }
 
+    public void readOneSimAtLastByDebug(Sim s) {
+        l.info("readOneSimAtLastByDebug");
+        List<Fault> list = faultService.listType3(s.getSimType());
+        for (Fault f : list) {
+            readOneSimOneFaultResistance(s, null, f, null);
+        }
+    }
+
+    public AjaxResult debugReadAllFaultResistanceBySimNum(String simNum) {
+        // check
+
+        //
+        // 打开socket
+        {
+            AjaxResult ar1 = openSocket();
+            if (ar1.isError()) {
+                return ar1;
+            }
+        }
+        //
+        Sim s = simService.uniqueBySimNum(simNum);
+        if (s == null || !Sim.State.ONLINE.equals(s.getSimState())) {
+            return AjaxResult.error("未连接维修模拟器,请检查连接!");
+        }
+        // todo: aj改造
+        readOneSimAtLastByDebug(s);
+        return AjaxResult.success("成功读取!");
+    }
+
     @Async("tp-comm")
     public void readOneExamAtLastAsync(RealExam re) {
         l.info("readOneExamAtLastAsync");
@@ -277,18 +306,28 @@ public class CommSendService {
         if (list != null) {
             l.info("清除exam list = {}", list.size());
         }
-        list.forEach(ref -> {
-            Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
-            if (faultService.isDisable(f.getFaultId())) {
-                l.warn("故障 {} -被禁用", f.getName());
-                throw new IllegalArgumentException("故障被禁用");
-            }
-            Sim s = simService.selectSimBySimId(re.getSimId());
-            // check
+        assert list != null;
+        list
+                .forEach(ref -> {
+                    Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
+                    if (faultService.isDisable(f.getFaultId())) {
+                        l.warn("故障 {} -被禁用", f.getName());
+                        throw new IllegalArgumentException("故障被禁用");
+                    }
+                    Sim s = simService.selectSimBySimId(re.getSimId());
+                    // check
 
-            //
-            clearOneSimOneFault(s, ref, f);
-        });
+                    //
+                    clearOneSimOneFault(s, ref, f);
+                });
+    }
+
+    public void clearOneSimAllFaultBySim(Sim s) {
+        l.info("clearOneSimAllFaultBySim = {}", s);
+        faultService.listType3EnableBySimType(s.getSimType())
+                .forEach(f -> {
+                    clearOneSimOneFault(s, null, f);
+                });
     }
 
     /**
@@ -369,7 +408,7 @@ public class CommSendService {
 
     /**
      * @param s
-     * @param reF 可以为空,表示不关联考试的,单独执行的。
+     * @param reF 可以为空,表示不关联考试的,单独执行的。调试模式下为空。
      * @param f
      */
     public void clearOneSimOneFault(Sim s, RealExamFault reF, Fault f) {
@@ -380,7 +419,12 @@ public class CommSendService {
         // step1
         SimMsg smS = commBuildService.buildSendMsgClearFault(s.getSimNum(), f.getBindHardwareMsg());
         SimMsg smR = send(smS, s, RETRY_COUNT_CLEAR_ONE_FAULT, SLEEP_LONG);
-        simReceiveService.clearOneFault(smR, s, reF, f);
+        if (reF != null) {
+            simReceiveService.clearOneFault(smR, s, reF, f);
+        } else {
+            l.info("reF == null");
+        }
+
         // step2
 
         // 下发故障独立运行。下面屏蔽。
@@ -427,16 +471,56 @@ public class CommSendService {
 
     /**
      * todo:尚未实现
+     * 实现方式类似 studentStartRealExam方法。
      *
      * @param simNum
      * @param faultIds
+     * @param checkReplace 是否进行可换件检查
      * @return
      */
     public AjaxResult debugWriteSelectedFaultBySimNum(final String simNum,
                                                       final String[] faultIds,
                                                       final Boolean checkReplace) {
+        // check faultIds 有效性
 
-        return null;
+        //
+        Sim s = simService.uniqueBySimNum(simNum);
+        // check sim
+        // 打开socket
+        {
+            AjaxResult ar1 = openSocket();
+            if (ar1.isError()) {
+                return ar1;
+            }
+        }
+        // Step 2
+        // msg判断,是否含有"故障部位"字符串
+        {
+            if (checkReplace) {
+
+                AjaxResult arE2 = readOneSimAllFaultCheck(s);
+                if (arE2.isError()) {
+                    return arE2;
+                }
+            }
+        }
+        // Step 3 清除对应一台模拟器 所有故障部位故障。
+        {
+            clearOneSimAllFaultBySim(s);
+        }
+        // Step 4 下发对应一台模拟器 出题选中的 故障位置故障。
+        {
+            Fault[] faults = new Fault[faultIds.length];
+            for (int i = 0; i < faultIds.length; i++) {
+                faults[i] = faultService.selectFaultByFaultId(faultIds[i]);
+            }
+            writeOneSimAllSelectFaultByDebug(s, faults);
+        }
+        // Step 5 读取
+        {
+            readOneSimAllFaultFirstTimeBySim(s);
+        }
+        return AjaxResult.success("下发故障流程执行成功!");
     }
 
     private String[] getGZBWBySimType(String simType) {
@@ -464,7 +548,7 @@ public class CommSendService {
      *
      * @param re
      */
-    public void writeOneSimAllSelectFault(RealExam re) {
+    public void writeOneSimAllSelectFaultByExam(RealExam re) {
         // 更新Exam状态。
         realExamService.updateOneState(re.getExamId(), RealExam.State.SIM_WRITING);
         List<RealExamFault> list = realExamFaultService.listAllType2FlagYesClearedStateByExamId(re.getExamId());
@@ -476,6 +560,12 @@ public class CommSendService {
         }
     }
 
+    public void writeOneSimAllSelectFaultByDebug(Sim s, Fault[] faults) {
+        for (Fault f : faults) {
+            writeOneSimOneFault(s, null, f);
+        }
+    }
+
     public void writeOneSimOneFault(Sim s, RealExamFault ref, Fault f) {
         l.info("下发故障:getSimId = {},fault.getName = {}", s.getSimId(), f.getName());
         // todo:ref is null.
@@ -485,7 +575,7 @@ public class CommSendService {
     }
 
     /**
-     * 检查读取。
+     * 开始考试前检查读取。
      *
      * @param s
      * @return
@@ -535,7 +625,7 @@ public class CommSendService {
      *
      * @param re
      */
-    public void readOneSimAllFaultFirstTime(RealExam re) {
+    public void readOneSimAllFaultFirstTimeByExam(RealExam re) {
         List<RealExamFault> list = realExamFaultService.listAllType2(re.getExamId());
         for (RealExamFault ref : list) {
             Sim s = simService.selectSimBySimId(re.getSimId());
@@ -544,11 +634,18 @@ public class CommSendService {
         }
     }
 
+    public void readOneSimAllFaultFirstTimeBySim(Sim s) {
+        List<Fault> list = faultService.listType3(s.getSimType());
+        for (Fault f : list) {
+            readOneSimOneFaultFirstTime(s, null, f);
+        }
+    }
+
     /**
      * 第一次读取,作为出题值。
      *
      * @param s
-     * @param ref
+     * @param ref debug调试模式为空。
      * @param f
      */
     public void readOneSimOneFaultFirstTime(Sim s, RealExamFault ref, Fault f) {
@@ -601,10 +698,14 @@ public class CommSendService {
         l.info("readOneFaultResistance");
         SimMsg sm1 = commBuildService.buildSendMsgReadFaultResistance(s.getSimNum(), f.getBindHardwareMsg());
         SimMsg sm2 = null;
-        if (RealExamFault.State.FINISH.equals(refState)) { // 是否最后一次读取。
-            sm2 = send(sm1, s, RETRY_COUNT_READ_ONE_RESISTANCE, SLEEP_SHORT);
+        if (reF != null && refState != null) {
+            if (RealExamFault.State.FINISH.equals(refState)) { // 是否最后一次读取。
+                sm2 = send(sm1, s, RETRY_COUNT_READ_ONE_RESISTANCE, SLEEP_SHORT);
+            } else {
+                sm2 = send(sm1, s, RETRY_COUNT_0, SLEEP_SHORT);
+            }
         } else {
-            sm2 = send(sm1, s, RETRY_COUNT_0, SLEEP_SHORT);
+            sm2 = send(sm1, s, RETRY_COUNT_READ_ONE_RESISTANCE, SLEEP_SHORT);
         }
         simReceiveService.setFaultAnswerValue(sm2, s, reF, f, refState);
     }
@@ -680,7 +781,7 @@ public class CommSendService {
             // 先考虑一台模拟器演示。
             // 进行重试 start
             if (sm.getRetryCount() == RETRY_COUNT_0) {
-                l.warn("####RetryTotalCount不重试RETRY_COUNT_0#### = {}", sm);
+                l.warn("####RetryTotalCount不重试RETRY_COUNT_0#### = getSimMsgId = {}", sm.getSimMsgId());
                 return sm;
             }
             if (sm.getRetryCount() < retryTotalCount) {
@@ -742,11 +843,11 @@ public class CommSendService {
             }
         } catch (IOException e) {
             e.printStackTrace();
-            return AjaxResult.error("openSocket IOException");
+            return AjaxResult.error("开启连接失败!请检查物联网网关连接或配置。");
         } finally {
 
         }
-        return AjaxResult.success();
+        return AjaxResult.success("开启连接成功!");
     }
 
     /**
@@ -770,12 +871,12 @@ public class CommSendService {
             }
         } catch (IOException e) {
             e.printStackTrace();
-            return AjaxResult.success("closeSocket IOException");
+            return AjaxResult.success("关闭连接失败!请检查物联网网关连接或配置。");
         } finally {
             cachedSocket = null;
             commFailCountClearAll();
         }
-        return AjaxResult.success();
+        return AjaxResult.success("关闭连接成功!");
     }
 
     /**

+ 21 - 0
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/DebugFaultService.java

@@ -3,6 +3,9 @@ package com.ruoyi.sim.service.impl;
 import java.util.List;
 
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.sim.domain.Fault;
+import com.ruoyi.sim.domain.Sim;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.sim.mapper.DebugFaultMapper;
@@ -80,4 +83,22 @@ public class DebugFaultService {
     public int deleteDebugFaultByRefId(Long refId) {
         return debugFaultMapper.deleteDebugFaultByRefId(refId);
     }
+
+    // -------------------------------- tom add  --------------------------------
+    public DebugFault exist(Long simId, String faultId) {
+        if (simId == null || simId == 0L) {
+            return null;
+        }
+        if (StringUtils.isEmpty(faultId)) {
+            return null;
+        }
+        DebugFault q = new DebugFault();
+        q.setSimId(simId);
+        q.setFaultId(faultId);
+        List<DebugFault> list = selectDebugFaultList(q);
+        if (!list.isEmpty()) {
+            return list.get(0);
+        }
+        return null;
+    }
 }

+ 15 - 8
ruoyi-sim/src/main/java/com/ruoyi/sim/service/impl/FaultService.java

@@ -220,7 +220,7 @@ public class FaultService {
      * @param simType
      * @return
      */
-    public AjaxResult listType3(final String simType) {
+    public AjaxResult listType3Ar(final String simType) {
         // check
         if (StringUtils.isEmpty(simType)) {
             return AjaxResult.error("simType empty!");
@@ -228,6 +228,17 @@ public class FaultService {
         if (!simService.checkSimTypeOk(simType)) {
             return AjaxResult.error("simType value error!");
         }
+        List<Fault> list1 = listType3(simType);
+        List<FaultShowVo> list2 = new ArrayList<>();
+        for (Fault f : list1) {
+            FaultShowVo vo = new FaultShowVo();
+            BeanUtils.copyProperties(f, vo);
+            list2.add(vo);
+        }
+        return AjaxResult.success(list2);
+    }
+
+    public List<Fault> listType3(final String simType) {
         // do query.
         List<Fault> list1 = new ArrayList<>();
         Fault q3 = new Fault();
@@ -235,14 +246,9 @@ public class FaultService {
         q3.setFaultState(Fault.State.ENABLE);
         q3.setFaultType(Fault.Type.REAL_GZBW);
         list1.addAll(selectFaultList(q3));
+        // faultId 升序排序
         Collections.sort(list1);
-        List<FaultShowVo> list2 = new ArrayList<>();
-        for (Fault f : list1) {
-            FaultShowVo vo = new FaultShowVo();
-            BeanUtils.copyProperties(f, vo);
-            list2.add(vo);
-        }
-        return AjaxResult.success(list2);
+        return list1;
     }
 
     /**
@@ -277,6 +283,7 @@ public class FaultService {
 
     /**
      * todo: 修改成数据库查询。
+     *
      * @param simType
      * @param faultType
      * @return

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

@@ -320,16 +320,14 @@ public class RealExamService {
         }
         // Step 3 下发对应一台模拟器 出题选中的 故障位置故障。
         {
-
+            commSendService.writeOneSimAllSelectFaultByExam(re);
         }
-        commSendService.writeOneSimAllSelectFault(re);
         // Step 4 读取对应一台模拟器 所有的 真实的 故障部位 电阻值 作为出题值。
         // 修改关联状态
         {
-            commSendService.readOneSimAllFaultFirstTime(re);
+            commSendService.readOneSimAllFaultFirstTimeByExam(re);
         }
         // Step 5 修改Exam状态
-
         if (realExamFaultService.isType2ExamPrepareStartOk(re.getExamId())) {
             updateOneState(re.getExamId(), RealExam.State.SIM_PREPARE_OK);
             updateOneState(re.getExamId(), RealExam.State.ANSWERING);

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

@@ -117,9 +117,9 @@ public class SimService {
     public Sim uniqueBySimNum(final String simNum) {
         Sim q = new Sim();
         q.setSimNum(simNum);
-        List<Sim> simList = simMapper.selectSimList(q);
-        if (!simList.isEmpty()) {
-            return simList.get(0);
+        List<Sim> list = simMapper.selectSimList(q);
+        if (!list.isEmpty()) {
+            return list.get(0);
         }
         return null;
     }