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 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); } } }