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