zhubaomin
2025-04-07 e67870fff62635cd14beb0d5988f08aeef4b22fa
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/allRound/Ar4RemoteSv.java
New file
@@ -0,0 +1,147 @@
package com.dy.pipIrrRemote.allRound;
import com.alibaba.fastjson2.JSON;
import com.dy.common.mw.protocol.Command;
import com.dy.common.mw.protocol.CommandBackParam;
import com.dy.common.webUtil.BaseResponse;
import com.dy.pipIrrGlobal.voAllRound.VoArIntakeRemote;
import com.dy.pipIrrGlobal.daoAllRound.Ar4BaseMapper;
import com.dy.pipIrrGlobal.daoAllRound.Ar4RemoteMapper;
import com.dy.pipIrrGlobal.rtuMw.CodeLocal;
import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2025/1/14 16:59
 * @Description
 */
@Slf4j
@Service
public class Ar4RemoteSv extends Web2RtuMw {
    @Autowired
    private Ar4BaseMapper baseDao;
    @Autowired
    private Ar4RemoteMapper remoteDao;
    @Autowired
    private Environment env;
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 取水口基本信息
     * @return 取水口基本信息
     */
    public VoArIntakeRemote intakeInfo(Long intakeId){
        VoArIntakeRemote rVo = new VoArIntakeRemote() ;
        rVo.intakeId = intakeId ;
        String rtuAddr = this.getRtuAddr(intakeId);
        this.getRtuOnLine(rtuAddr, rVo);
        this.getAlarmLastInfo(intakeId, rVo);
        this.getOpenCloseValveLastInfo(intakeId, rVo);
        this.getLossAmountLastInfo(intakeId, rVo);
        return rVo ;
    }
    /**
     * 获取取水口对应的RTU地址
     * @param intakeId 取水口ID
     * @return RTU地址
     */
    private String getRtuAddr(Long intakeId){
        List<String> rtuAddrs = baseDao.intakeRtuAddr(intakeId) ;
        if(rtuAddrs != null && rtuAddrs.size() > 0){
            return rtuAddrs.get(0) ;
        }
        return null ;
    }
    /**
     * 得到取水RTU在线情况
     * @param rtuAddr
     * @param rVo
     */
    private void getRtuOnLine(String rtuAddr, VoArIntakeRemote rVo){
        if(rtuAddr != null){
            //向通信中间件发关命令,查询部分RTU在线情况
            Command com = this.createInnerCommand(CodeLocal.onLinePart);
            com.setParam(rtuAddr) ;
            String rqUrl = this.get2MwRequestUrl(this.env, ContextComSend) ;
            BaseResponse res = sendPostRequest2Mw(restTemplate, rqUrl, com) ;
            if(res != null){
                if(res.isSuccess()){
                    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(bakParam != null){
                        if(bakParam.getSuccess().booleanValue()){
                            //通信中间件成功返回命令结果
                            HashMap<String, Boolean> onLineMap = JSON.parseObject(JSON.toJSONString(reCom.getAttachment()), HashMap.class);
                            if(onLineMap != null && onLineMap.size() > 0){
                                rVo.onLine = onLineMap.get(rtuAddr) ;
                            }
                        }
                    }else{
                        log.error("通信中间件返回内部命令结果中不包含CommandBackParam类型参数");
                    }
                }else{
                    log.error("通信中间件返回内部命令执行失败" + (res.getMsg() == null? "" : ("," + res.getMsg()))) ;
                }
            }else{
                log.error("通信中间件返回内部命令结果为null");
            }
        }
    }
    /**
     * 得到取水口最新报警信息
     * @param intakeId
     * @param rVo
     */
    private void getAlarmLastInfo(Long intakeId, VoArIntakeRemote rVo){
        List<VoArIntakeRemote> list = remoteDao.alarmLastInfo(intakeId);
        if(list != null && list.size() > 0){
            VoArIntakeRemote vo = list.get(0) ;
            rVo.alarm = vo.alarm ;
            if(rVo.alarm == null || rVo.alarm.trim().equals("")){
                rVo.alarm = "无报警" ;
            }
            rVo.alarmDt = vo.alarmDt ;
        }
    }
   /**
     * 得到取水口最新开关阀信息
     * @param intakeId
     * @param rVo
     */
    private void getOpenCloseValveLastInfo(Long intakeId, VoArIntakeRemote rVo){
        List<VoArIntakeRemote> list = remoteDao.openCloseValveLastInfo(intakeId);
        if(list != null && list.size() > 0){
            VoArIntakeRemote vo = list.get(0) ;
            rVo.lastOpenDt = vo.lastOpenDt ;
            rVo.lastCloseDt = vo.lastCloseDt ;
        }
    }
   /**
     * 得到取水口最新漏损信息
     * @param intakeId
     * @param rVo
    */
    private void getLossAmountLastInfo(Long intakeId, VoArIntakeRemote rVo){
        List<VoArIntakeRemote> list = remoteDao.lossLastInfo(intakeId);
        if(list != null && list.size() > 0){
            VoArIntakeRemote vo = list.get(0) ;
            rVo.lossDt = vo.lossDt ;
            rVo.lossAmount = vo.lossAmount ;
        }
    }
}