123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- package com.ruoyi.sim.service.impl;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.sim.constant.FaultConst;
- import com.ruoyi.sim.domain.*;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.HashSet;
- import static com.ruoyi.sim.constant.CommConst.*;
- @Service
- // 多实例
- // 异步调用
- // @Scope("prototype")
- public class CommReceiveService {
- private static final Logger l = LoggerFactory.getLogger(CommReceiveService.class);
- @Autowired
- private RealExamFaultService realExamFaultService;
- @Autowired
- private SimService simService;
- @Autowired
- private DebugFaultService debugFaultService;
- @Autowired
- private FaultService faultService;
- /**
- * 只要返回信息,即认为在线。
- *
- * @param sm
- * @param s
- * @return
- */
- public AjaxResult checkOneSimState(SimMsg sm, Sim s) {
- if (s == null) {
- l.warn("s is null");
- return AjaxResult.error("sim is null");
- }
- if (StringUtils.isNotBlank(sm.getReceiveMsg())) {
- simService.updateSimStateBySimId(s.getSimId(), Sim.State.ONLINE);
- }
- return AjaxResult.success();
- }
- public AjaxResult checkOneSimSn(SimMsg sm, Sim s) {
- final String simType = s.getSimType();
- final String r = sm.getReceiveMsg();
- final String msgError = "连接模拟器类型不正确!";
- switch (simType) {
- case Sim.TYPE_0001 -> {
- if (r.startsWith(Sim.TYPE_0001_SN) && r.endsWith(s.getSimNum())) {
- return AjaxResult.success();
- } else {
- return AjaxResult.error(msgError);
- }
- }
- case Sim.TYPE_0002 -> {
- if (r.startsWith(Sim.TYPE_0002_SN) && r.endsWith(s.getSimNum())) {
- return AjaxResult.success();
- } else {
- return AjaxResult.error(msgError);
- }
- }
- case Sim.TYPE_0003 -> {
- if (r.startsWith(Sim.TYPE_0003_SN) && r.endsWith(s.getSimNum())) {
- return AjaxResult.success();
- } else {
- return AjaxResult.error(msgError);
- }
- }
- default -> throw new IllegalStateException("Unexpected value: " + simType);
- }
- }
- public void clearOneFault(SimMsg sm, Sim s, RealExamFault reF, Fault f) {
- // check
- //
- //
- if (reF != null) {
- realExamFaultService.updateRefStateByRefId(reF.getRefId(), RealExamFault.State.CLEARED);
- }
- }
- /**
- * 设置出题值。
- *
- * @param sm
- * @param s
- * @param reF debug模式下为null。
- * @param f
- * @param faultIds debug模式下为null。
- */
- public void setFaultQuestionValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String[] faultIds) {
- // check
- //
- String faultQuestionValue = subContentData(sm.getReceiveMsg());
- // todo:
- if (StringUtils.isBlank(faultQuestionValue)) {
- l.warn("faultQuestionValue is empty!");
- return;
- }
- l.info("faultQuestionValue = {}", faultQuestionValue);
- 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 {
- //
- //
- HashSet<String> fSet = new HashSet<>();
- for (String fId : faultIds) {
- fSet.add(fId);
- }
- l.info("fSet.size() = {}", fSet.size());
- String faultId = f.getFaultId();
- l.info("faultId = {}", faultId);
- DebugFault df = debugFaultService.exist(s.getSimId(), faultId);
- if (df == null) {
- df = new DebugFault();
- df.setSimId(s.getSimId());
- df.setFaultId(f.getFaultId());
- if (fSet.contains(faultId)) {
- df.setFlag(DebugFault.Flag.YES);
- } else {
- df.setFlag(DebugFault.Flag.NO);
- }
- df.setSimFaultQuestionValue(faultQuestionValue);
- df.setSimFaultAnswerValue("");
- df.setAnswerRight(DebugFault.AnswerRight.UNKNOWN);
- debugFaultService.insertDebugFault(df);
- } else {
- if (fSet.contains(faultId)) {
- df.setFlag(DebugFault.Flag.YES);
- } else {
- df.setFlag(DebugFault.Flag.NO);
- }
- df.setSimFaultQuestionValue(faultQuestionValue);
- df.setSimFaultAnswerValue("");
- df.setAnswerRight(DebugFault.AnswerRight.UNKNOWN);
- debugFaultService.updateDebugFault(df);
- }
- }
- }
- /**
- * 设置答题值。
- *
- * @param sm
- * @param s
- * @param reF debug模式为null
- * @param f
- * @param refState 轮询时候为null debug模式为null
- */
- public void setFaultAnswerValue(SimMsg sm, Sim s, RealExamFault reF, Fault f, String refState) {
- // check
- //
- String faultAnswerValue = subContentData(sm.getReceiveMsg());
- // todo:
- if (StringUtils.isBlank(faultAnswerValue)) {
- l.warn("faultAnswerValue is empty!");
- return;
- }
- l.info("faultAnswerValue = {}", faultAnswerValue);
- 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.setSimId(s.getSimId());
- df.setFaultId(f.getFaultId());
- df.setSimFaultAnswerValue(faultAnswerValue);
- debugFaultService.insertDebugFault(df);
- } else {
- df.setSimFaultAnswerValue(faultAnswerValue);
- debugFaultService.updateDebugFault(df);
- }
- }
- }
- /**
- * 截取 内容报文。
- *
- * @param receiveMsg
- * @return
- */
- public String subContentData(String receiveMsg) {
- if (StringUtils.isEmpty(receiveMsg)) {
- return "";
- }
- return StringUtils.substring(receiveMsg, 10, 18);
- }
- /**
- * 开始考试 检查 故障部位 检查
- *
- * @param sm
- * @param s
- * @param f
- * @return
- */
- public AjaxResult getOneFaultCheck(SimMsg sm, Sim s, Fault f) {
- String checkValue = subContentData(sm.getReceiveMsg());
- if (s == null) {
- return AjaxResult.error("没有对应模拟器!");
- }
- // 是否在 故障部位 跳过检查 白名单中。
- if (FaultConst.FAULT_SET_CHECK_PASS.contains(f.getFaultId())) {
- // 跳过检查,直接成功。
- return AjaxResult.success(f);
- }
- // 是否是 2型的维护管 或 3型的维护管
- if (FaultConst.FAULT_SET_WHG.contains(f.getFaultId())) {
- // 判断必须存在
- String WHG_EXIST_MSG = checkValue.substring(4, 6);
- if (WHG_MSG_EXIST_YES.equals(WHG_EXIST_MSG)) {
- return AjaxResult.success(f);
- } else {
- return AjaxResult.error("故障部位[" + f.getBindHardwareMsg() + "][" + f.getReplaceName() + "]未正确安装;", f);
- }
- }
- if (BLANK_CONTENT.equals(checkValue)) {
- l.info("故障部位[" + f.getBindHardwareMsg() + "][" + f.getReplaceName() + "]未正确安装;");
- return AjaxResult.error("故障部位[" + f.getBindHardwareMsg() + "][" + f.getReplaceName() + "]未正确安装;", f);
- } else {
- return AjaxResult.success(f);
- }
- }
- }
|