pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/VoAllRound/VoArIntakeRemote.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.writer.ObjectWriterImplToString; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import lombok.Data; @@ -33,16 +34,19 @@ /** * 最新报警时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date alarmDt ; /** * 最后开阀时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date lastOpenDt ; /** * 最后关闭时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public Date lastCloseDt ; pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoAllRound/Ar4RemoteMapper.java
New file @@ -0,0 +1,33 @@ package com.dy.pipIrrGlobal.daoAllRound; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.VoAllRound.VoArIntakeRemote; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @Author: liurunyu * @Date: 2025/1/14 16:45 * @Description */ @Mapper public interface Ar4RemoteMapper extends BaseMapper<Object> { /** * 查询取水口最新报警信息 * @param intakeId * @return */ List<VoArIntakeRemote> alarmInfo(@Param("intakeId") Long intakeId) ; /** * 查询取水口最新开关阀信息 * @param intakeId * @return */ List<VoArIntakeRemote> openCloseValveInfo(@Param("intakeId") Long intakeId) ; } pipIrr-platform/pipIrr-global/src/main/resources/mapper/Ar4RemoteMapper.xml
New file @@ -0,0 +1,26 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dy.pipIrrGlobal.daoAllRound.Ar4RemoteMapper"> <select id="alarmInfo" resultType="com.dy.pipIrrGlobal.VoAllRound.VoArIntakeRemote"> select CONCAT( IF(alarm_loss = 1, '漏损报警,', ''), IF(alarm_battery_volt = 1, '电池电压报警,', ''), IF(alarm_valve = 1, '阀门报警,', ''), IF(alarm_water_meter_fault = 1, '流量计故障报警,', '') ) AS alarm, dt AS alarmDt from rm_alarm_state_last rasl where intake_id = #{intakeId,jdbcType=BIGINT} </select> <select id="openCloseValveInfo" resultType="com.dy.pipIrrGlobal.VoAllRound.VoArIntakeRemote"> select op_dt AS lastOpenDt, cl_dt AS lastCloseDt from rm_open_close_valve_last rocvl where intake_id = #{intakeId,jdbcType=BIGINT} </select> </mapper> pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java
@@ -75,15 +75,16 @@ Long lastDownComTime = tcpSe.lastDownComTime ; boolean nowSend = false ; if(this.result.isQuickSend){ //在命令构建时,只有在低功耗情况下,才会把isQuickSend付值为true //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前是速发命令,满足发送命令条件,执行发送命令 nowSend = true ; }else if(lastDownComTime == null){ //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,当前RTU上线以来未曾下发过命令,满足发送命令条件,执行发送命令 nowSend = true ; }else if(this.result.isFastCom && now - lastDownComTime >= ServerProperties.fastCommandSendInterval){ }else if(this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.fastCommandSendInterval){ //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令是快速命令且超过命令下发间隔,满足发送命令条件,执行发送命令 nowSend = true ; }else if(!this.result.isFastCom && now - lastDownComTime >= ServerProperties.commandSendInterval){ }else if(!this.result.isFastCom && (now - lastDownComTime) >= ServerProperties.commandSendInterval){ //未收到命令结果,未达到最大发送次数,RTU在线,离上行数据时刻不近,RTU上线以来曾下发过命令,当前命令非快速命令,RTU下发命令间隔超过命令下发间隔,满足发送命令条件,执行发送命令 nowSend = true ; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/allRound/Ar4RemoteSv.java
@@ -7,6 +7,7 @@ import com.dy.common.webUtil.QueryResultVo; 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 com.dy.pipIrrGlobal.voPr.VoOnLineIntake; @@ -32,6 +33,9 @@ private Ar4BaseMapper baseDao; @Autowired private Ar4RemoteMapper remoteDao; @Autowired private Environment env; @Autowired @@ -43,12 +47,33 @@ */ public QueryResultVo<VoArIntakeRemote> intakeInfo(Long intakeId){ VoArIntakeRemote rVo = new VoArIntakeRemote() ; String rtuAddr = this.getRtuAddr(intakeId); this.getRtuOnLine(intakeId, rtuAddr, rVo); this.getAlarmInfo(intakeId, rtuAddr, rVo); this.getOpenCloseValveInfo(intakeId, rtuAddr, rVo); return null ; } String rtuAddr = null ; /** * 获取取水口对应的RTU地址 * @param intakeId 取水口ID * @return RTU地址 */ private String getRtuAddr(Long intakeId){ List<String> rtuAddrs = baseDao.intakeRtuAddr(intakeId) ; if(rtuAddrs != null && rtuAddrs.size() > 0){ rtuAddr = rtuAddrs.get(0) ; return rtuAddrs.get(0) ; } return null ; } /** * 得到取水RTU在线情况 * @param intakeId * @param rtuAddr * @param rVo */ private void getRtuOnLine(Long intakeId, String rtuAddr, VoArIntakeRemote rVo){ if(rtuAddr != null){ //向通信中间件发关命令,查询部分RTU在线情况 Command com = this.createInnerCommand(CodeLocal.onLinePart); @@ -77,7 +102,29 @@ log.error("通信中间件返回内部命令结果为null"); } } return null ; } /** * 得到取水口最新报警信息 * @param intakeId */ private void getAlarmInfo(Long intakeId, String rtuAddr, VoArIntakeRemote rVo){ List<VoArIntakeRemote> list = remoteDao.alarmInfo(intakeId); if(list != null && list.size() > 0){ VoArIntakeRemote vo = list.get(0) ; rVo.alarm = vo.alarm ; rVo.alarmDt = vo.alarmDt ; } } /** * 得到取水口最新开关阀信息 * @param intakeId */ private void getOpenCloseValveInfo(Long intakeId, String rtuAddr, VoArIntakeRemote rVo){ List<VoArIntakeRemote> list = remoteDao.openCloseValveInfo(intakeId); if(list != null && list.size() > 0){ VoArIntakeRemote vo = list.get(0) ; rVo.lastOpenDt = vo.lastOpenDt ; rVo.lastCloseDt = vo.lastCloseDt ; } } }