zhubaomin
5 天以前 531c35275bc1700214ef26442380ad3a80d95838
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/CommandSv.java
New file
@@ -0,0 +1,146 @@
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";
        }
    }
}