| 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 org.springframework.transaction.annotation.Transactional; | 
|   | 
| 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 | 
|      */ | 
|     @Transactional(rollbackFor = Exception.class) | 
|     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); | 
|         int count = rmCommandHistoryDao.insertSelective(po) ; | 
|         if(count == 0){ | 
|             po = null ; | 
|         } | 
|         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"; | 
|         } | 
|     } | 
|   | 
| } |