package com.dy.pipIrrGlobal.command; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.Command; import com.dy.common.mw.protocol.CommandBackParam; import com.dy.common.mw.protocol.p206V1.CodeV1; import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; import com.dy.common.mw.protocol.p206V2.CodeV2; import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2; import com.dy.common.mw.protocol.p206V202404.CodeV202404; import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404; import com.dy.common.webUtil.BaseResponse; import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; import java.util.Date; /** * @Author: liurunyu * @Date: 2025/5/6 11:41 * @Description */ public class CommandSv extends Web2RtuMw { /** * 从数据库中查询控制器对象 * @param prControllerDao * @param intakeId * @return */ public PrController getRtu(PrControllerMapper prControllerDao, Long intakeId){ return prControllerDao.getRtu(intakeId, null); } /** * 检查协议是否支持 * @param ctrlPo * @return */ public String checkProtocol(PrController ctrlPo){ if(!ctrlPo.getProtocol().equals(ProtocolConstantV206V1.protocolName) && !ctrlPo.getProtocol().equals(ProtocolConstantV206V2.protocolName) && !ctrlPo.getProtocol().equals(ProtocolConstantV206V202404.protocolName)) { return "对应控制器协议" + ctrlPo.getProtocol() + "未实现命令发送逻辑" ; } return null ; } /** * 根据协议获取命令名称 * @param nowComCode * @param ctrlPo * @return */ public String getCommandName(String nowComCode, PrController ctrlPo){ if(ctrlPo.getProtocol().equals(ProtocolConstantV206V1.protocolName)) { return CodeV1.getCodeName(nowComCode) ; }else if(ctrlPo.getProtocol().equals(ProtocolConstantV206V2.protocolName)) { return CodeV2.getCodeName(nowComCode) ; }else if(ctrlPo.getProtocol().equals(ProtocolConstantV206V202404.protocolName)) { return CodeV202404.getCodeName(nowComCode) ; } return null ; } /** * 保存命令历史记录 * @param rmCommandHistoryDao * @param comId * @param protocol * @param commandCode * @param commandName * @param intakeId * @param rtuAddr * @param param * @param operator * @return */ public RmCommandHistory saveComHistoryPo(RmCommandHistoryMapper rmCommandHistoryDao, Long comId, String protocol, String commandCode, String commandName, Long intakeId, String rtuAddr, Object param, Long operator) { RmCommandHistory po = new RmCommandHistory(); po.setComId(comId); po.setCommandCode(commandCode); po.setCommandName(commandName); po.setIntakeId(intakeId); po.setRtuAddr(rtuAddr); po.setProtocol(protocol); po.setParam((JSONObject) JSON.toJSON(param)); po.setSendTime(new Date()); po.setOperator(operator); rmCommandHistoryDao.insertSelective(po) ; return po; } /** * 处理通信中间件返回的命令处理结果 * @param res * @return */ public String dealMwDealResponse(BaseResponse res){ if(res != null){ Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ; CommandBackParam bakParam = JSON.parseObject((reCom== null || reCom.param == null) ? null : JSON.toJSONString(reCom.param), CommandBackParam.class) ; if(res.isSuccess()){ if(bakParam != null){ if(bakParam.getSuccess().booleanValue()){ //通信中间件成功处理了命令 //等待控制器接收并执行命令后的应答,然后通信中间件通知本模块 return null ; }else{ return "通信中间件处理命令失败,失败信息:" + bakParam.getMessage(); } }else{ return "通信中间件返回命令结果中不包含CommandBackParam类型参数"; } }else{ if(bakParam != null){ if(bakParam.getSuccess().booleanValue()){ //通信中间件成功处理了命令 //等待控制器接收并执行命令后的应答,然后通信中间件通知本模块 return "通信中间件处理命令失败,失败信息:" + (res.getMsg() == null? "" : ("," + res.getMsg())) ; }else{ return "通信中间件处理命令失败,失败信息:" + bakParam.getMessage(); } }else{ return "通信中间件处理命令失败,失败信息:" + (res.getMsg() == null? "" : ("," + res.getMsg())) ; } } }else{ return "通信中间件返回命令结果为null"; } } }