zhubaomin
2025-02-25 842237345ac469b02e9add8f9fd8bae5d4f7cdac
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
71个文件已修改
1164 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd10Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd15Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd16Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd21Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd22Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd23Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd24Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd31Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd55Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd5CVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd65Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd86Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd87Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd92_A2Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd93_A3Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9CVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCdXyVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd02Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd10Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd50Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd55Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd56Vo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd5CVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd65Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd68Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd81Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd84Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd85Vo.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd86Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd87Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd88Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd8AVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCdC2Vo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCdXyVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/说明.txt 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveHistory.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveLast.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealCloseValveReport.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealOpenValveReport.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java 362 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java 300 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealWorkingReportV202404.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(mj梅江).xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(mq民勤).xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(sp沙盘).xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test测试).xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ym元谋).xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/Cd_1601_Down.java
@@ -38,7 +38,7 @@
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        midRs.countdown4Send = 1 ;//倒计时,当此值为小于等于0时才会下发,否则逐次减1
        midRs.countdown4Send = 10 ;//倒计时,当此值为小于等于0时才会下发,否则逐次减1,目的是延迟下发命令,使其他命令可以提前发送
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
@@ -90,12 +90,13 @@
        ByteUtil.int2Bytes_BE(bs, vo.totalByte, 0);
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[2] ;
        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[2] ;
        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
        bs = new byte[4] ;
        byte[] crcBs = new byte[4] ;
        ByteUtil.int2Bytes_BE(crcBs, vo.softCrc, 0);
        bs[0] = crcBs[2] ;
        bs[1] = crcBs[3] ;
        bs[2] = crcBs[2] ;
        bs[3] = crcBs[3] ;
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[4] ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
@@ -38,7 +38,7 @@
                    return false ;
                }
            }else if((byte)(bs[2] & 0xF8) == ProtocolConstantV206V202404.P_Head_Byte){
                //如果控制域、地址域、用户数据域(应用层)的字节总数大于255,则通过扩展第二个开始字符0x68的低3位作为长L的高位扩展
                //如果控制域、地址域、用户数据域(应用层)的字节总数大于255,则通过扩展第二个开始字符0x69的低3位作为长L的高位扩展
                //0xF8二进制: 11111000
                if(bs[3] == (byte)0x80 || bs[3] == (byte)0x81){
                    return true ;
@@ -254,21 +254,46 @@
    /**
     * å¾—到关开阀类型名称
     * 0x00:刷卡闭
     * 0x01:平台关
     * 0x02:APP关
     * 0x03:非法卡关
     * 0x04:水表通讯异常关
     * 0x05:电表异常关
     * 0x06:剩余水量不足关
     * 0x07:剩余金额为0关
     * 0x08:开泵/阀后管道没有流量关
     * 0x09:掉电再上电关,
     * 0x0a:水表瞬时流量为0关,
     * 0x0b:刷卡开泵,远程关。
     * 0x0c:电池低电压关。
     * @param type å­—节
     * @return åç§°
     */
    public static String openCloseValveType(byte type){
    public static String closeValveType(byte type){
        return switch (type) {
            case 1 -> "刷卡开阀";
            case 2 -> "刷卡关阀";
            case 3 -> "中心站开阀";
            case 4 -> "中心站关阀";
            case 5 -> "欠费关阀";
            case 6 -> "流量计故障关阀";
            case 7 -> "紧急关阀";
            case 8 -> "用户远程开阀";
            case 9 -> "用户远程关阀";
            case 16 -> "管道无水自动关阀";
            case 0 -> "刷卡关阀";
            case 1 -> "平台关阀";
            case 2 -> "APP关阀";
            case 3 -> "非法卡关阀";
            case 4 -> "水表通讯异常关阀";
            case 5 -> "电表异常关阀";
            case 6 -> "剩余水量不足关阀";
            case 7 -> "剩余金额为0关阀";
            case 8 -> "管道没有流量关阀";
            case 9 -> "掉电再上电关阀";
            case 10 -> "水表瞬时流量为0关阀";
            case 11 -> "刷卡开远程关阀";
            case 12 -> "电池低电压关阀";
            default -> "未知";
        };
    }
    public static String ctrlDevType(String hex){
        return switch (hex) {
            case "01" -> "测控一体阀";
            case "02" -> "表阀一体机";
            case "57" -> "井电控制器";
            default -> "未知";
        };
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/ProtocolConstantV206V202404.java
@@ -24,13 +24,13 @@
    public static final int headMinLength = 3 ;
    //帧起始
    public static final byte P_Head_Byte = (byte)0x68 ;
    public static final byte P_Head_Byte = (byte)0x69 ;
    public static final byte P_Tail_Byte = (byte)0x16 ;
    //00H时遥测终端在兼容工作状态;01H时遥测终端在自报工作状态;02H时遥测终端在查询/应答工作状态;03H时遥测终端在调试/维修状态。
    public static final byte P_Default_mode = (byte)0x00 ;//默认工作模式
    public static final String P_Head_Hex = "68" ;
    public static final String P_Head_Hex = "69" ;
    public static final String P_Tail_Hex = "16" ;
    public static final byte lenHead2ctrl = 3 ; //从头到控制域(不包括)字节数组长度
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd10Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd10Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String rtuNewAddr ;//控制器新地址
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd15Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd15Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String icCardAddr ;//IC卡地址(8位数字或字母)
    public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX)
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd16Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd16Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer waterAlarm ;//剩余水量报警值,单位:m3。整数,取值范围0~9999
    public Integer moneyAlarm ;//剩余金额报警值,单位:元。整数,取值范围0~9999
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd21Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd21Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer channel ;//IP通道号(取值范围 1、2).
    public String ip ;//IP(例如 125.235.35.89)
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd22Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd22Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer maxAmountYear ;//机井年最大用水量单位:m3 æ•´æ•°ï¼Œå–值范围0~99999999
    public Double limitLevel ;//水位下限 å•位:m å–值范围:0~9999.99
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd23Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd23Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer channel ;//IP通道号(取值范围 1、2).
    public String domain ;//域名(例如 dayuyanjiuyuan.to),最大长度42字符
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd24Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd24Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String registerNo ;//设备注册号,16进制数据,最大16个字节
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd26Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer maxAmountYear ;//设备终端年用水量 å•位:m3 æ•´æ•°ï¼Œå–值范围0~99999999
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd31Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd31Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Boolean valid ;//有效性
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd55Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd55Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer page ;//分页(取值范围1、2、3、4、5、6、7、8、9)
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd5CVo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd5CVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer page ;//分页(取值范围1、2、3、4、5、6、7、8、9)
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd65Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd65Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer page ;//分页,取值范围(1、2、3、4、5、6、7、8、9)
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd86Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd86Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer channel ;//IP通道号(取值范围 1、2).
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd87Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd87Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public Integer channel ;//IP通道号(取值范围 1、2).
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd92_A2Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd92_A2Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX)
    public Double waterRemain ;//用户剩余水量, ä¸¤ä¸ªå°æ•°ç‚¹, å•位m3, 0~99999999.99
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd93_A3Vo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd93_A3Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX)
    public String orderNo ;//订单号(16位数字)
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9CVo.java
@@ -4,7 +4,7 @@
@Data
public class ComCd9CVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型 01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
    public String icCardAddr ;//IC卡地址(8位数字或字母)
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCdXyVo.java
@@ -1,6 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.downVos;
public class ComCdXyVo {
    public String controllerType;//控制器类型:  01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型:  01(0x01):测控一体阀;02(0x02):表阀一体机;57(0x57):井电控制器
    public Integer projectNo ;//项目编号
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1600_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1601_Down.java
@@ -37,6 +37,9 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        midRs.countdown4Send = 10 ;//倒计时,当此值为小于等于0时才会下发,否则逐次减1,目的是延迟下发命令,使其他命令可以提前发送
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
@@ -87,12 +90,13 @@
        ByteUtil.int2Bytes_BE(bs, vo.totalByte, 0);
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[2] ;
        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[2] ;
        ByteUtil.short2Bytes_BE(bs, (short)vo.softCrc, 0);
        bs = new byte[4] ;
        byte[] crcBs = new byte[4] ;
        ByteUtil.int2Bytes_BE(crcBs, vo.softCrc, 0);
        bs[0] = crcBs[2] ;
        bs[1] = crcBs[3] ;
        bs[2] = crcBs[2] ;
        bs[3] = crcBs[3] ;
        bytes = ByteUtil.bytesMerge(bytes, bs) ;
        bs = new byte[4] ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1602_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_1603_Down.java
@@ -36,6 +36,8 @@
        midRs.maxSendTimes = null ;//命令最大发送次数(当收不到应答时,将重发),如果不设置,命令缓存器进行补充设置
        midRs.isCachForOffLine = false ;//RTU不在线,命令是否缓存,低功耗时为true
        midRs.isFastCom = true ;//速发命令,下发数据时间间隔受小值(配置文件中fastCommandSendInterval)限制
        if(isLowPower != null && isLowPower.booleanValue()){
            //低功耗时,尽快发送
            midRs.isQuickSend = true ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java
@@ -123,7 +123,7 @@
        cdData.eleTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
        index += 5 ;
        cdData.moneyRemainUser = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
        cdData.moneyRemainUser = ByteUtil.BCD2Long_LE(bs, index, index + 4)/10000.0D ;//2025-02-24,剩余金额改为4位小数
        index += 5 ;
        cdData.waterRemainUser = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java
@@ -96,24 +96,24 @@
        cdData.projectNo = (int)bs[index];
        index++ ;
        Long lng = ByteUtil.BCD2Long_LE(bs, index, index + 4) ;
        Long lng = ByteUtil.BCD2Long_BE(bs, index, index + 4) ;
        cdData.lng = lng/1000000.0D;
        index += 5 ;
        Long lat = ByteUtil.BCD2Long_LE(bs, index, index + 4) ;
        Long lat = ByteUtil.BCD2Long_BE(bs, index, index + 4) ;
        cdData.lat = lat/1000000.0D;
        index += 5 ;
        int softVersion = ByteUtil.BCD2Int_LE(bs, index, index + 1) ;
        cdData.softVersion = softVersion/10.0F;
        int softVersion = ByteUtil.BCD2Int_BE(bs, index, index + 1) ;
        cdData.softVersion = softVersion/100.0F;
        index += 2 ;
        int hardVersion = ByteUtil.BCD2Int_LE(bs, index, index + 1) ;
        cdData.hardVersion = hardVersion/10.0F;
        int hardVersion = ByteUtil.BCD2Int_BE(bs, index, index + 1) ;
        cdData.hardVersion = hardVersion/100.0F;
        index += 2 ;
        int protocolVersion = ByteUtil.BCD2Int_LE(bs, index, index + 1) ;
        cdData.protocolVersion = protocolVersion/10.0F;
        int protocolVersion = ByteUtil.BCD2Int_BE(bs, index, index + 1) ;
        cdData.protocolVersion = protocolVersion/100.0F;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9601_Up.java
@@ -61,9 +61,9 @@
     * @throws Exception å¼‚常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV2 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd960XVo cdData = new DataCd960XVo() ;
        dV2.subData = cdData ;
        dV202404.subData = cdData ;
        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
            cdData.success = true ;
        }else{
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9602_Up.java
@@ -61,9 +61,9 @@
     * @throws Exception å¼‚常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV2 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd960XVo cdData = new DataCd960XVo() ;
        dV2.subData = cdData ;
        dV202404.subData = cdData ;
        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
            cdData.success = true ;
        }else{
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9603_Up.java
@@ -61,9 +61,9 @@
     * @throws Exception å¼‚常
     */
    protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception {
        DataV202404 dV2 = (DataV202404)data.getSubData() ;
        DataV202404 dV202404 = (DataV202404)data.getSubData() ;
        DataCd960XVo cdData = new DataCd960XVo() ;
        dV2.subData = cdData ;
        dV202404.subData = cdData ;
        if(bs[ProtocolConstantV206V202404.UG_dataIndex] == (byte)0x00){
            cdData.success = true ;
        }else{
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
@@ -124,15 +124,11 @@
            cdData.success = false ;
        }
        if(!cdData.success){
            return ;
        }
        index++ ;
        cdData.orderNo = ByteUtil.BCD2String_BE(bs, index, index + 7) ;
        index += 8 ;
        GlParse.parseRtuDt(bs, index);
        cdData.rtuDt = GlParse.parseRtuDt(bs, index);
        index+= 6 ;
        GlParse.parseAlarmAndState(bs, index, cdData);//四个字节
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -241,7 +241,7 @@
        cdData.projectNo = (int)bs[index];
        index ++ ;
        cdData.opType = bs[index];
        cdData.clType = bs[index];
        index++ ;
        cdData.icCardAddr = ByteUtil.bytes2Hex(bs, false, index, 4) ;
@@ -265,7 +265,7 @@
        cdData.eleTotalAmount = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
        index += 5 ;
        cdData.moneyRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
        cdData.moneyRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/10000.0D ;
        index += 5 ;
        cdData.waterRemain = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ;
@@ -277,7 +277,7 @@
        cdData.thisWater = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ;
        index += 4 ;
        cdData.thisMoney = ByteUtil.BCD2Long_LE(bs, index, index + 3)/100.0D ;
        cdData.thisMoney = ByteUtil.BCD2Long_LE(bs, index, index + 3)/10000.0D ;
        index += 4 ;
        cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd02Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//链路检测
@Data
public class DataCd02Vo {
    public String controllerType ;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType ;//控制器类型
    public Integer projectNo ;//项目编号:
    public String status ;//保持在线状态:  F0 ç™»å½•,F1 é€€å‡ºç™»å½•,F2 åœ¨çº¿ä¿æŒ
@@ -23,7 +24,7 @@
        sb.append(status == null?"未知":(status.equals("F0")?"登录":(status.equals("F1")?"退出登录":(status.equals("F2")?"在线保持":status)))) ;
        sb.append("\n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd10Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//设置设备终端地址
@Data
public class DataCd10Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public String rtuNewAddr ;//控制器新地址
@@ -20,7 +21,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd50Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询设备终端地址
@Data
public class DataCd50Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public String rtuAddr;//控制器新地址
@@ -20,7 +21,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd55Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询设备终端充值记录
@Data
public class DataCd55Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public String icCardAddr ;//IC卡地址(8位数字或字母)
    public String icCardNo ;//用户卡序列号(16位数字)(6字节BCD,2字节HEX)
@@ -26,7 +27,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd56Vo.java
@@ -6,7 +6,7 @@
@Data
public class DataCd56Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Integer waterAlarm ;//剩余水量报警值,单位:m3。整数,取值范围0~65535
    public Integer moneyAlarm ;//剩余金额报警值,单位:元。整数,取值范围0~65535
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd5CVo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询设备终端的历史日记录
@Data
public class DataCd5CVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public String dt ;//观察时间(yyyy-mm-dd HH)
    public Double meterAmountDay ;//当日水表净流量,2个小数点
@@ -23,7 +24,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd65Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询设备终端用户用水记录
@Data
public class DataCd65Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public String icCardAddr ;//IC卡地址(远程开泵/阀时此数据为0)
    public String icCardNo ;//用户卡序列号(16位数字)
@@ -28,7 +29,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd68Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询机井年最大开采量和水位下限
@Data
public class DataCd68Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Integer maxAmountYear ;//机井年最大用水量  å•位:m3 æ•´æ•°ï¼Œå–值范围0~99999999
    public Double limitLevel ;//水位下限 å•位:m å–值范围:0~9999.99
@@ -21,7 +22,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd80_5BVo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +9,7 @@
@EqualsAndHashCode(callSuper=false)
public class DataCd80_5BVo extends AlarmVo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public Byte useWaterType ;//用水方式(0x00:正常刷卡开泵/阀用水 0x01:平台远程开泵/阀用水 0x02:用户远程开泵/阀用水 0x03:测试卡,0x04:其它)
    public String orderNo ;//订单号(16位数字)
@@ -59,7 +60,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd81Vo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +9,7 @@
@EqualsAndHashCode(callSuper=false)
public class DataCd81Vo extends AlarmVo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public String rtuDt ;//设备上报的日期时间(yyyy-mm-dd HH:MM:SS)
@@ -22,7 +23,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//机井定点上报, æ¯å¤©12点上报数据
@Data
public class DataCd83Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Double waterTotalAmountYear ;//本年累计流量
    public Double waterTotalAmountMeter ;//水表累计流量
@@ -29,7 +30,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd84Vo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +9,7 @@
@EqualsAndHashCode(callSuper=false)
public class DataCd84Vo extends AlarmVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public String openDt;//开泵/阀时间(yyyy-mm-dd HH:MM:SS)
    public String icCardAddr ;//IC卡地址(远程关闭时为0)
@@ -29,7 +30,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd85Vo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,21 +9,21 @@
@EqualsAndHashCode(callSuper=false)
public class DataCd85Vo extends AlarmVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Byte opType ;//关泵/阀方式:  0x00:刷卡闭 0x01:平台关 0x02:APP关  0x03:非法卡关 0x04:水表异常关 0x05:电表异常关 0x06:剩余水量不足关 0x07:剩余金额不足关 0x08:开泵/阀后管道没有流量关 0x09:掉电再上电。
    public Byte clType;//关泵/阀方式:  0x00:刷卡闭 0x01:平台关 0x02:APP关  0x03:非法卡关 0x04:水表异常关 0x05:电表异常关 0x06:剩余水量不足关 0x07:剩余金额不足关 0x08:开泵/阀后管道没有流量关 0x09:掉电再上电。
    public String icCardAddr ;//IC卡地址(远程关闭时为0)
    public String icCardNo ;//IC卡编号(17位数字)
    public String orderNo ;//订单号(16位数字)
    public String startDt ;//开始时间(分时日月)
    public String endDt ;//结束时间(分时日月)
    public String startDt ;//开始时间(yyyy-mm-dd HH:MM:SS)
    public String endDt ;//结束时间(yyyy-mm-dd HH:MM:SS)
    public Double waterTotalAmount ;//水表累计流量
    public Double eleTotalAmount ;//电表累计电量
    public Double moneyRemain ;//用户剩余金额,单位0.01元
    public Double moneyRemain ;//用户剩余金额,单位0.0001元
    public Double waterRemain ;//用户剩余水量,保留 é»˜è®¤ 00 00 00 00 00
    public Double thisEle ;//本次使用电量, å•位0.01度
    public Double thisWater ;//本次使用水量, å•位0.01立方米
    public Double thisMoney ;//本次使用金额, å•位0.01元
    public Double thisMoney ;//本次使用金额, å•位0.0001元
    public Integer thisDuration;//本次使用时间长, å•位:分钟
    public String comName ;//命令名称
@@ -36,13 +37,13 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
        sb.append("\n") ;
        sb.append("      å…³æ³µ/阀类型 : ") ;
        sb.append(opType == null?"未知":(opType.byteValue() == 0x00 ? "刷卡":(opType.byteValue() == 0x01 ? "平台":(opType.byteValue() == 0x02 ? "APP":(opType.byteValue() == 0x03 ? "非法卡":(opType.byteValue() == 0x04 ? "水表异常":(opType.byteValue() == 0x05 ? "电表异常":(opType.byteValue() == 0x06 ? "剩余水量不足":(opType.byteValue() == 0x07 ? "剩余金额不足":(opType.byteValue() == 0x08 ? "无流量":(opType.byteValue() == 0x09 ? "掉电再上电":"未知"))))))))))) ;
        sb.append(CommonV202404.closeValveType(clType)) ;
        sb.append("\n") ;
        sb.append("      IC卡地址 : ") ;
        sb.append(icCardAddr == null?"未知":icCardAddr) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd86Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询控制器IP地址
@Data
public class DataCd86Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public Integer channel ;//IP通道号
    public String ip ;//IP
@@ -22,7 +23,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd87Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询控制器域名
@Data
public class DataCd87Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public Integer channel ;//IP通道号
    public String domain ;//域名
@@ -22,7 +23,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd88Vo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询控制器域名
@Data
public class DataCd88Vo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public String registerNo ;//注册号(16字节hex)
@@ -20,7 +21,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd8AVo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//设备登录
@Data
public class DataCd8AVo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public Double lng ;//经度
    public Double lat ;//纬度
@@ -24,7 +25,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd92_A2Vo.java
@@ -1,17 +1,18 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//平台/APP远程关闭水泵/阀门
@Data
public class DataCd92_A2Vo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public String icCardNo ;//IC卡编号(17位数字)
    public String orderNo ;//订单号(16位数字)
    public String opDt ;//开泵/阀时间(yyyy-mm-dd HH:MM:SS)
    public Byte opType ;//开阀类型: 01:平台开泵/阀 02:用户开泵/阀
    public Byte opType ;//开阀类型
    public Byte opResult ;//开启泵/阀结果: 0x00:成功 0x81:失败
    public String comName ;//命令名称
@@ -24,7 +25,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd93_A3Vo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +9,7 @@
@EqualsAndHashCode(callSuper=false)
public class DataCd93_A3Vo extends AlarmVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Byte opResult ;//关泵/阀结果: 0x00:成功 0x81:失败
    public Byte opType ;//关泵/阀方式:  0x00:刷卡闭 0x01:平台关 0x02:APP关  0x03:非法卡关 0x04:水表异常关 0x05:电表异常关 0x06:剩余水量不足关 0x07:剩余金额不足关 0x08:开泵/阀后管道没有流量关 0x09:掉电再上电。
@@ -36,7 +37,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd9AVo.java
@@ -1,12 +1,13 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
//查询设备年用水量
@Data
public class DataCd9AVo {
    public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号
    public Integer maxAmountYear ;//设备终端年用水量 å•位:m3 æ•´æ•°ï¼Œå–值范围0~99999999
@@ -20,7 +21,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCdC2Vo.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -8,7 +9,7 @@
@EqualsAndHashCode(callSuper=false)
public class DataCdC2Vo extends AlarmVo {
    public String controllerType ;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType ;//控制器类型
    public Integer projectNo ;//项目编号:
    public String orderNo ;//订单号(16位数字)
    public Byte opType1 ;//操作方式:0:刷卡开水泵/阀门;1:远程开水泵/阀门;2:APP开水泵/阀门
@@ -26,7 +27,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCdXyVo.java
@@ -1,8 +1,10 @@
package com.dy.common.mw.protocol.p206V202404.upVos;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
public class DataCdXyVo {
    public String controllerType;//控制器类型:   01:测控一体阀;57:井电控制器
    public String controllerType;//控制器类型
    public Integer projectNo ;//项目编号:
    public Boolean success ;//命令结果(true成功, false失败)
@@ -16,7 +18,7 @@
        StringBuffer sb = new StringBuffer() ;
        sb.append("      " + comName + " : \n") ;
        sb.append("      æŽ§åˆ¶å™¨ç±»åž‹ : ") ;
        sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ;
        sb.append(CommonV202404.ctrlDevType(controllerType)) ;
        sb.append("\n") ;
        sb.append("      é¡¹ç›®ç¼–号 : ") ;
        sb.append(projectNo == null?"未知":projectNo) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/˵Ã÷.txt
@@ -2,4 +2,7 @@
靳总版测控一体阀与王江海版测控一体阀不能在同一个中间件运行,
因为两个版本的协议协议头都一样,没法区分开来,如果两种设备
都要应用,需要部署两个通信中间件。
都要应用,需要部署两个通信中间件。
2025-02-24:王江海把包头改为了 69 Lenth 69,例如:
69 0D 69 81 37 14 25 01 02 01 DA 00 02 02 0A F2 A7 16
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveHistory.java
@@ -378,7 +378,7 @@
    public void valueFrom85(DataV202404 dataV202404, DataCd85Vo cdData) throws Exception {
        this.clOpenDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
        this.closeDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
        this.opType = cdData.opType;
        this.opType = cdData.clType;
        this.clIcCardAddr = cdData.icCardAddr;
        this.clIcCardNo = cdData.icCardNo;
        this.clTotalAmount = cdData.waterTotalAmount;
@@ -451,6 +451,35 @@
        }
    }
    public void updateFrom(DataV202404 dataV202404, DataCd84Vo dataCd84Vo, Boolean clearCloseValve) throws Exception {
        this.opDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
        this.opType = null;
        this.opTotalAmount = dataCd84Vo.waterTotalAmount;
        this.opIcCardNo = dataCd84Vo.icCardNo;
        this.opIcCardAddr = dataCd84Vo.icCardAddr;
        this.opRemainMoney = dataCd84Vo.moneyRemainUser;
        this.openDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt);
        if (clearCloseValve != null && clearCloseValve.booleanValue()) {
            this.clDt = null;
            this.clType = null;
            this.clTotalAmount = null;
            this.clIcCardNo = null;
            this.clIcCardAddr = null;
            this.clRemainMoney = null;
            this.clThisAmount = null;
            this.clThisMoney = null;
            this.clThisTime = null;
            this.clPrice = null;
            this.clOpenDt = null;
            this.closeDt = null;
            this.clOrderNo = null;//江海协议特有
            this.clEleTotalAmount = null;//江海协议特有
            this.clWaterRemainUser = null;//江海协议特有
            this.clThisEle = null;//江海协议特有
        }
    }
    public void updateFrom(DataV1 dV1, com.dy.common.mw.protocol.p206V1.upVos.DataCd83CloseVo dataCd83CloseVo, boolean clearOpenValve) throws Exception {
        this.clDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt);
@@ -511,4 +540,35 @@
            this.clThisEle = null;//江海协议特有
        }
    }
    public void updateFrom(DataV202404 dataV202404, DataCd85Vo cdData, boolean clearOpenValve) throws Exception {
        this.clDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
        this.clType = cdData.clType;
        this.clTotalAmount = cdData.waterTotalAmount;
        this.clIcCardNo = cdData.icCardNo;
        this.clIcCardAddr = cdData.icCardAddr;
        this.clRemainMoney = cdData.moneyRemain;
        this.clThisAmount = cdData.thisWater;
        this.clThisMoney = cdData.thisMoney;
        this.clThisTime = cdData.thisDuration;
        this.clPrice = null;
        this.clOpenDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
        this.closeDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt) ;
        if(clearOpenValve){
            this.opDt = null ;
            this.opType = null ;
            this.opTotalAmount = null ;
            this.opIcCardNo = null ;
            this.opIcCardAddr = null ;
            this.opRemainMoney = null ;
            this.openDt = null ;
            this.clOrderNo = null;//江海协议特有
            this.clEleTotalAmount = null;//江海协议特有
            this.clWaterRemainUser = null;//江海协议特有
            this.clThisEle = null;//江海协议特有
        }
    }
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseValveLast.java
@@ -347,7 +347,7 @@
    public void valueFrom85(DataV202404 dataV202404, DataCd85Vo cdData) throws Exception {
        this.clOpenDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
        this.closeDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
        this.opType = cdData.opType;
        this.opType = cdData.clType;
        this.clIcCardAddr = cdData.icCardAddr;
        this.clIcCardNo = cdData.icCardNo;
        this.clTotalAmount = cdData.waterTotalAmount;
@@ -430,6 +430,44 @@
        }
    }
    public void updateFrom(DataV202404 dataV202404, DataCd84Vo cdData, Boolean clearLastCloseValve) throws Exception {
        this.opDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
        this.opType = null;
        this.opTotalAmount = cdData.waterTotalAmount;
        this.opIcCardNo = cdData.icCardNo;
        this.opIcCardAddr = cdData.icCardAddr;
        this.opRemainMoney = cdData.moneyRemainUser;
        this.opOrderNo = cdData.orderNo; //江海协议特有
        this.opEleTotalAmount = cdData.eleTotalAmount; //江海协议特有
        this.opWaterRemainUser = cdData.waterRemainUser; //江海协议特有
        this.openDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.openDt);
        if (clearLastCloseValve != null && clearLastCloseValve.booleanValue()) {
            this.clearCloseValue();
        }
    }
    public void updateFrom(DataV202404 dataV202404, DataCd85Vo cdData, Boolean clearLastOpenValve) throws Exception {
        this.clDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
        this.clType = cdData.clType;
        this.clTotalAmount = cdData.waterTotalAmount;
        this.clIcCardNo = cdData.icCardNo;
        this.clIcCardAddr = cdData.icCardAddr;
        this.clRemainMoney = cdData.moneyRemain;
        this.clThisAmount = cdData.thisWater;
        this.clThisMoney = cdData.thisMoney;
        this.clThisTime = cdData.thisDuration;
        this.clPrice = null;
        this.clOpenDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
        this.closeDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt) ;
        if(clearLastOpenValve != null && clearLastOpenValve.booleanValue()){
            this.clearOpenValue();
        }
    }
    public void clearCloseValue(){
        this.clDt = null;
        this.clType = null;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -215,12 +215,13 @@
    }
    
    /**
     * è®¾ç½®ä¸Šè¡Œæ•°æ®æ—¶åˆ»
     * å½“有上行数据时
     * @param rtuAddr
     */
    public static void cacheUpDataTime(String rtuAddr){
    public static void whenUpData(String rtuAddr){
        TcpSession tcpSe = map.get(rtuAddr) ;
        if(tcpSe != null){
            tcpSe.lastDownComTime = 0L ;//ç½®0,使等待lastUpDataTimeLive(见config.xml配置文件)时长后,即刻下发缓存中的命令
            tcpSe.lastUpDataTime = System.currentTimeMillis() ;
            tcpSe.lastUpDataTimeForOnlineCtrl = System.currentTimeMillis() ;
        }
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealCloseValveReport.java
@@ -80,7 +80,6 @@
     * ä¿å­˜æ•°æ®
     * @param sv æœåŠ¡
     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
     * @param clientVo å†œæˆ·å¯¹è±¡
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dV1 ä¸ŠæŠ¥æ•°æ®
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealOpenValveReport.java
@@ -96,17 +96,17 @@
            //数据库中存在该控制器的开关阀数据
            if(poLast.openDt != null && poLast.opIcCardAddr != null && poLast.opIcCardNo != null){
                if(poLast.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))
                    && poLast.opIcCardAddr.equals(dataCd83OpenVo.icCardAddr)
                    && poLast.opIcCardNo.equals(dataCd83OpenVo.icCardNo)){
                        && poLast.opIcCardAddr.equals(dataCd83OpenVo.icCardAddr)
                        && poLast.opIcCardNo.equals(dataCd83OpenVo.icCardNo)){
                    //重复上报,原因是下行数据处理慢了,就重复上报了
                    return ;
                }
            }
             if(poLast.opType != null){
            if(poLast.opType != null){
                //原记录存在开阀数据,首先进行时间对比
                 if(poLast.openDt != null && poLast.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                     //重复上报的开阀数据,不进行处理
                 }else if(poLast.openDt != null && poLast.openDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                if(poLast.openDt != null && poLast.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                    //重复上报的开阀数据,不进行处理
                }else if(poLast.openDt != null && poLast.openDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                    //补报的许久之前的开阀数据(对于after:等于或晚于都返回true)
                    this.dealSupplyReport() ;
                }else {
@@ -117,12 +117,12 @@
                }
            }else if(poLast.clType != null){
                //原记录不存在开阀数据,但存在关阀数据,首先进行时间比对
                 if(poLast.clOpenDt != null && poLast.clOpenDt.before(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                     //当前上报是新的开阀数据,把最新(last)数据中的关阀内容清空
                     this.updateOpenValve(clientVo, controller, poLast, null, dV1, dataCd83OpenVo, true) ;
                     //生成并保存新的开阀上报历史数据记录
                     this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV1, dataCd83OpenVo, poLast);
                 }else if(poLast.clOpenDt != null && poLast.clOpenDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                if(poLast.clOpenDt != null && poLast.clOpenDt.before(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                    //当前上报是新的开阀数据,把最新(last)数据中的关阀内容清空
                    this.updateOpenValve(clientVo, controller, poLast, null, dV1, dataCd83OpenVo, true) ;
                    //生成并保存新的开阀上报历史数据记录
                    this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV1, dataCd83OpenVo, poLast);
                }else if(poLast.clOpenDt != null && poLast.clOpenDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd83OpenVo.openDt))){
                    //补报的许久之前的开阀报数据(对于after:等于或晚于都返回true)
                    this.dealSupplyReport() ;
                }else {
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java
@@ -3,9 +3,13 @@
import com.dy.common.mw.protocol.Data;
import com.dy.common.mw.protocol.p206V202404.DataV202404;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
import com.dy.common.util.DateTime;
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveHistory;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveLast;
import com.dy.pipIrrGlobal.pojoSe.SeClient;
import com.dy.rtuMw.server.msCenter.MsCenterUnit;
import com.dy.rtuMw.server.msCenter.MsObj;
import com.dy.rtuMw.server.rtuData.TaskSurpport;
import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
import org.apache.logging.log4j.LogManager;
@@ -33,72 +37,334 @@
        Data d = (Data) data;
        DataV202404 dV202404 = (DataV202404) d.getSubData();
        Object cdObj = dV202404.subData;
        if (cdObj != null) {
        if (cdObj != null && cdObj instanceof DataCd85Vo) {
            try {
                Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
                DbSv sv = (DbSv) objs[0];
                PrController controller = (PrController) objs[1];
                if (cdObj instanceof DataCd85Vo) {
                    DataCd85Vo cdData = (DataCd85Vo) (cdObj);
                    this.doDeal(sv, controller, d.getRtuAddr(), dV202404, (DataCd85Vo)cdObj);
                }
                SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值
                this.toMsCenter(clientVo, controller, d.getRtuAddr(), dV202404, (DataCd85Vo)cdObj) ;
                this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV202404, (DataCd85Vo)cdObj);
            } catch (Exception e) {
                log.error("保存控制器开阀报数据时发生异常", e);
            }
        }
    }
    /**
     * å¤„理关阀报数据
     * @param sv æœåŠ¡
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     */
    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData) throws Exception {
        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
    }
    /**
     * ä¿å­˜æˆ–更新控制器关阀报最新数据
     * @param sv æœåŠ¡bean
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     * æŠŠå¼€é˜€æ¶ˆæ¯å­˜å…¥æ¶ˆæ¯ä¸­å¿ƒ
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dV202404
     * @param dataCd85Vo
     */
    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
        RmOpenCloseValveLast po = sv.getRmOpenCloseValveLast(controller.getIntakeId());
        if(po == null){
            po = new RmOpenCloseValveLast();
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.rtuAddr = rtuAddr;
            po.valueFrom85(dataV202404, cdData);
            sv.saveRmOpenCloseValveLast(po);
        }else{
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.valueFrom85(dataV202404, cdData);
            sv.updateRmOpenCloseValveLast(po);
    private void toMsCenter(SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dV202404, DataCd85Vo dataCd85Vo){
        if(clientVo != null && controller != null){
            MsObj msObj = new MsObj() ;
            msObj.put("name", "关阀");
            msObj.put("clientId", clientVo.getId());
            msObj.put("clientName", clientVo.getName());
            msObj.put("clientAddress", clientVo.getAddress());
            msObj.put("icCardNo", dataCd85Vo.icCardNo);
            msObj.put("rtuAddr", rtuAddr);
            msObj.put("intakeId", controller.getIntakeId());
            msObj.put("dt", dV202404.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
    }
    /**
     * ä¿å­˜æŽ§åˆ¶å™¨å…³é˜€æŠ¥åŽ†å²æ•°æ®
     * @param sv æœåŠ¡bean
     * ä¿å­˜æ•°æ®
     * @param sv æœåŠ¡
     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     * @param dV202404 ä¸ŠæŠ¥æ•°æ®
     * @param dataCd85Vo å…³é˜€ä¸ŠæŠ¥æ•°æ®å¯¹è±¡
     */
    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory();
        po.controllerId = controller==null?null:controller.getId();
        po.intakeId = controller==null?null:controller.getIntakeId();
        po.rtuAddr = rtuAddr;
        po.valueFrom85(dataV202404, cdData);
        sv.saveRmOpenCloseValveHistory(po); ;
    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dV202404, DataCd85Vo dataCd85Vo) throws Exception {
        RmOpenCloseValveLast poLast = sv.getRmOpenCloseValveLast(controller.getIntakeId()) ;
        if(poLast == null){
            //数据库中不存在该控制器的开关阀数据
            //首先生成最新数据及历史数据,并先保存
            poLast = this.newRmOpenCloseValveLast(clientVo, controller, rtuAddr, dV202404, dataCd85Vo);
            this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
            //保存最新数据
            sv.saveRmOpenCloseValveLast(poLast);
        }else{
            //数据库中存在该控制器的开关阀数据
            if(poLast.closeDt != null && poLast.clIcCardAddr != null && poLast.clIcCardNo != null){
                if(poLast.closeDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.endDt))
                        && poLast.clIcCardAddr.equals(dataCd85Vo.icCardAddr)
                        && poLast.clIcCardNo.equals(dataCd85Vo.icCardNo)){
                    //重复上报,原因是下行数据处理慢了,就重复上报了
                    return ;
                }
            }
            if(poLast.clType == null){
                //原记录不存在关阀数据,所以当前关阀上报是新的一次关阀
                if(poLast.opType == null || poLast.openDt == null){
                    //原记录中不存在开阀数据(即开阀与关阀数据都没有,这种情况一般不存在),没办法进行匹配
                    //生成并保存新的关阀上报历史数据记录
                    this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
                }else{
                    //原记录中存在开阀数据,进行历史数据匹配
                    RmOpenCloseValveHistory poHistory = null ;
                    if(poLast.lastHistoryId != null){
                        poHistory = sv.getRmOpenCloseValveHistory(poLast.lastHistoryId) ;
                        if(poHistory != null){
                            if(poHistory.openDt != null){
                                //上面已经判断了poLast.openDt == null,所以此处一般会是poHistory.openDt != null
                                if(poHistory.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.startDt))){
                                    //匹配成功
                                    //当前关阀是原记录中开阀的对应关阀
                                    this.updateCloseValve(clientVo, controller, poLast, poHistory, dV202404, dataCd85Vo, false) ;
                                    sv.updateRmOpenCloseValveHistory(poHistory);
                                }else if(poHistory.openDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.startDt))){
                                    //匹配失败(对于after:等于或晚于都返回true)
                                    //本地最新数据中的开阀时间晚于当前关阀上报中的开阀时间,说明是补报
                                    this.dealSupplyReport() ;
                                }else{
                                    //匹配失败
                                    //本地最新数据中的开阀时间早于当前关阀上报中的开阀时间,说明是新的一次关阀报,而且对应关阀报的上一次开阀报未收到
                                    this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, true);
                                }
                            }else{
                                //这种情况不存在,认为匹配失败
                                //当前关阀不是原记录中开阀的对应关阀,生成并保存新的关阀上报历史数据记录
                                this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, true);
                            }
                        }else{
                            //没有历史数据,这种情况不存在,认为匹配失败,生成并保存新的关阀上报历史数据记录
                            this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, true);
                        }
                    }else{
                        //没有历史数据,这种情况不存在,认为匹配失败,生成并保存新的关阀上报历史数据记录
                        this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, true);
                    }
                }
            }else if(poLast.opType != null){
                //原记录存在关阀数据,也存在开阀数据,首先进行开关阀时间对比
                if(poLast.closeDt != null && poLast.closeDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.endDt))){
                    //重复上报了,不进行处理
                }else if(poLast.closeDt != null && poLast.closeDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.endDt))){
                    //补报的许久之前的数据(对于after:等于或晚于都返回true)
                    this.dealSupplyReport() ;
                }else {
                    //是新的上报关阀数据
                    //进行历史数据匹配
                    RmOpenCloseValveHistory poHistory = null ;
                    if(poLast.lastHistoryId != null) {
                        poHistory = sv.getRmOpenCloseValveHistory(poLast.lastHistoryId);
                        if (poHistory != null) {
                            if(poHistory.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd85Vo.startDt))){
                                //匹配上了
                                this.updateCloseValve(clientVo, controller, poLast, poHistory, dV202404, dataCd85Vo, false) ;
                                sv.updateRmOpenCloseValveHistory(poHistory);
                            }else{
                                //上个关阀报未上报
                                this.updateCloseValve(clientVo, controller, poLast, null, dV202404, dataCd85Vo, true) ;
                                this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
                            }
                        }else{
                            //这种情况不存在,但为安全也进行处理,也认为上个关阀报未上报
                            this.updateCloseValve(clientVo, controller, poLast, null, dV202404, dataCd85Vo, true) ;
                            this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
                        }
                    }else{
                        //这种情况不存在,但为安全也进行处理,也认为上个关阀报未上报
                        this.updateCloseValve(clientVo, controller, poLast, null, dV202404, dataCd85Vo, true) ;
                        this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
                    }
                }
            }else{
                //if(po.opType == null)
                //原记录不存在开阀数据也不存在关阀数据,这种情况不存在,但为安全也进行处理,也认为上个关阀报未上报
                this.updateCloseValve(clientVo, controller, poLast, null, dV202404, dataCd85Vo, true) ;
                //生成并保存新的关阀上报历史数据记录,没有对应的开发数据
                this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dV202404, dataCd85Vo, poLast, null);
            }
            sv.updateRmOpenCloseValveLast(poLast);
        }
    }
    /**
     * å¤„理补报,暂时无逻辑
     */
    private void dealSupplyReport(){
    }
    /**
     * ä¿å­˜æ–°çš„关阀上报历史数据记录,并把ID赋值给最新记录的 lastHistoryId
     * @param sv
     * @param controller
     * @param rtuAddr
     * @param dV202404
     * @param dataCd85Vo
     * @param poLast
     * @param clearLastOpenValue
     * @throws Exception
     */
    private void newHistoryDataDeal(DbSv sv,
                                    SeClient clientVo,
                                    PrController controller,
                                    String rtuAddr,
                                    DataV202404 dV202404,
                                    DataCd85Vo dataCd85Vo,
                                    RmOpenCloseValveLast poLast,
                                    Boolean clearLastOpenValue)throws Exception {
        RmOpenCloseValveHistory poHistory = this.newRmOpenCloseValveHistory(clientVo, controller, rtuAddr, dV202404, dataCd85Vo) ;
        sv.saveRmOpenCloseValveHistory(poHistory);
        //由最新数据持有历史数据中的最新记录ID,以方便快速查询
        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
        if(clearLastOpenValue != null && clearLastOpenValue.booleanValue()){
            poLast.clearOpenValue();
        }
    }
    /**
     * ç”Ÿæˆæ–°çš„关阀上报最新数据记录
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dV202404
     * @param dataCd85Vo
     * @return
     * @throws Exception
     */
    private RmOpenCloseValveLast newRmOpenCloseValveLast(SeClient clientVo,
                                                         PrController controller,
                                                         String rtuAddr,
                                                         DataV202404 dV202404,
                                                         DataCd85Vo dataCd85Vo)throws Exception {
        RmOpenCloseValveLast po = new RmOpenCloseValveLast() ;
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId() ;
        po.intakeId = controller==null?null:controller.getIntakeId() ;
        po.rtuAddr = rtuAddr ;
        po.valueFrom85(dV202404, dataCd85Vo);
        return po ;
    }
    /**
     * ç”Ÿæˆæ–°çš„关阀上报历史数据记录
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dV202404
     * @param dataCd85Vo
     * @return
     * @throws Exception
     */
    private RmOpenCloseValveHistory newRmOpenCloseValveHistory(SeClient clientVo,
                                                               PrController controller,
                                                               String rtuAddr,
                                                               DataV202404 dV202404,
                                                               DataCd85Vo dataCd85Vo)throws Exception {
        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory() ;
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId() ;
        po.intakeId = controller==null?null:controller.getIntakeId() ;
        po.rtuAddr = rtuAddr ;
        po.valueFrom85(dV202404, dataCd85Vo);
        return po ;
    }
    /**
     * æ›´æ–°æ•°æ®
     * @param clientVo
     * @param controller
     * @param poLast
     * @param poHistory
     * @param dV202404
     * @param dataCd85Vo
     * @param clearLastOpenValue
     * @throws Exception
     */
    private void updateCloseValve(SeClient clientVo,
                                  PrController controller,
                                  RmOpenCloseValveLast poLast,
                                  RmOpenCloseValveHistory poHistory,
                                  DataV202404 dV202404,
                                  DataCd85Vo dataCd85Vo,
                                  boolean clearLastOpenValue) throws Exception {
        poLast.clientId = clientVo==null?null:clientVo.getId() ;
        poLast.clientName = clientVo==null?null:clientVo.getName() ;
        poLast.controllerId = controller==null?null:controller.getId();
        poLast.intakeId = controller==null?null:controller.getIntakeId();
        poLast.updateFrom(dV202404, dataCd85Vo, clearLastOpenValue);
        if(poHistory != null){
            poHistory.clientId = clientVo==null?null:clientVo.getId() ;
            poHistory.clientName = clientVo==null?null:clientVo.getName() ;
            poHistory.controllerId = controller==null?null:controller.getId();
            poHistory.intakeId = controller==null?null:controller.getIntakeId();
            poHistory.updateFrom(dV202404, dataCd85Vo, false);
        }
    }
//    /**
//     * å¤„理关阀报数据
//     * @param sv æœåŠ¡
//     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData) throws Exception {
//        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
//        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
//    }
//
//    /**
//     * ä¿å­˜æˆ–更新控制器关阀报最新数据
//     * @param sv æœåŠ¡bean
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
//        RmOpenCloseValveLast po = sv.getRmOpenCloseValveLast(controller.getIntakeId());
//        if(po == null){
//            po = new RmOpenCloseValveLast();
//            po.controllerId = controller==null?null:controller.getId();
//            po.intakeId = controller==null?null:controller.getIntakeId();
//            po.rtuAddr = rtuAddr;
//            po.valueFrom85(dataV202404, cdData);
//            sv.saveRmOpenCloseValveLast(po);
//        }else{
//            po.controllerId = controller==null?null:controller.getId();
//            po.intakeId = controller==null?null:controller.getIntakeId();
//            po.valueFrom85(dataV202404, cdData);
//            sv.updateRmOpenCloseValveLast(po);
//        }
//    }
//
//    /**
//     * ä¿å­˜æŽ§åˆ¶å™¨å…³é˜€æŠ¥åŽ†å²æ•°æ®
//     * @param sv æœåŠ¡bean
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
//        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory();
//        po.controllerId = controller==null?null:controller.getId();
//        po.intakeId = controller==null?null:controller.getIntakeId();
//        po.rtuAddr = rtuAddr;
//        po.valueFrom85(dataV202404, cdData);
//        sv.saveRmOpenCloseValveHistory(po); ;
//    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java
@@ -3,9 +3,13 @@
import com.dy.common.mw.protocol.Data;
import com.dy.common.mw.protocol.p206V202404.DataV202404;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
import com.dy.common.util.DateTime;
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveHistory;
import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseValveLast;
import com.dy.pipIrrGlobal.pojoSe.SeClient;
import com.dy.rtuMw.server.msCenter.MsCenterUnit;
import com.dy.rtuMw.server.msCenter.MsObj;
import com.dy.rtuMw.server.rtuData.TaskSurpport;
import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
import org.apache.logging.log4j.LogManager;
@@ -33,72 +37,272 @@
        Data d = (Data) data;
        DataV202404 dV202404 = (DataV202404) d.getSubData();
        Object cdObj = dV202404.subData;
        if (cdObj != null) {
        if (cdObj != null && cdObj instanceof DataCd84Vo) {
            try {
                Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
                DbSv sv = (DbSv) objs[0];
                PrController controller = (PrController) objs[1];
                if (cdObj instanceof DataCd84Vo) {
                    DataCd84Vo cdData = (DataCd84Vo) (cdObj);
                    this.doDeal(sv, controller, d.getRtuAddr(), dV202404, (DataCd84Vo)cdObj);
                }
                SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值
                this.toMsCenter(clientVo, controller, d.getRtuAddr(), dV202404, (DataCd84Vo)cdObj) ;
                this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV202404, (DataCd84Vo)cdObj);
            } catch (Exception e) {
                log.error("保存控制器开阀报数据时发生异常", e);
            }
        }
    }
    /**
     * å¤„理开阀报数据
     * @param sv æœåŠ¡
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     */
    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData) throws Exception {
        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
    }
    /**
     * ä¿å­˜æˆ–更新控制器开阀报最新数据
     * @param sv æœåŠ¡bean
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     * æŠŠå¼€é˜€æ¶ˆæ¯å­˜å…¥æ¶ˆæ¯ä¸­å¿ƒ
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dataV202404
     * @param dataCd84Vo
     */
    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
        RmOpenCloseValveLast po = sv.getRmOpenCloseValveLast(controller.getIntakeId());
        if(po == null){
            po = new RmOpenCloseValveLast();
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.rtuAddr = rtuAddr;
            po.valueFrom84(dataV202404, cdData);
            sv.saveRmOpenCloseValveLast(po);
        }else{
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.valueFrom84(dataV202404, cdData);
            sv.updateRmOpenCloseValveLast(po);
    private void toMsCenter(SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo dataCd84Vo){
        if(clientVo != null && controller != null){
            MsObj msObj = new MsObj() ;
            msObj.put("name", "开阀");
            msObj.put("clientId", clientVo.getId());
            msObj.put("clientName", clientVo.getName());
            msObj.put("clientAddress", clientVo.getAddress());
            msObj.put("icCardNo", dataCd84Vo.icCardNo);
            msObj.put("rtuAddr", rtuAddr);
            msObj.put("intakeId", controller.getIntakeId());
            msObj.put("dt", dataV202404.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
    }
    /**
     * ä¿å­˜æŽ§åˆ¶å™¨å·¥ä½œæŠ¥åŽ†å²æ•°æ®
     * @param sv æœåŠ¡bean
     * ä¸šåŠ¡å¤„ç†
     * @param sv æœåŠ¡
     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     * @param dataV202404 ä¸ŠæŠ¥æ•°æ®
     * @param dataCd84Vo å¼€é˜€ä¸ŠæŠ¥æ•°æ®å¯¹è±¡
     */
    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory();
        po.controllerId = controller==null?null:controller.getId();
        po.intakeId = controller==null?null:controller.getIntakeId();
        po.rtuAddr = rtuAddr;
        po.valueFrom84(dataV202404, cdData);
        sv.saveRmOpenCloseValveHistory(po); ;
    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo dataCd84Vo) throws Exception {
        RmOpenCloseValveLast poLast = sv.getRmOpenCloseValveLast(controller.getIntakeId()) ;
        if(poLast == null){
            //数据库中不存在该控制器的开关阀数据
            //首先生成开关阀的最新数据及历史数据,并先保存
            poLast = this.newRmOpenCloseValveLast(clientVo, controller, rtuAddr, dataV202404, dataCd84Vo);
            this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dataV202404, dataCd84Vo, poLast);
            sv.saveRmOpenCloseValveLast(poLast);
        }else{
            //数据库中存在该控制器的开关阀数据
            if(poLast.openDt != null && poLast.opIcCardAddr != null && poLast.opIcCardNo != null){
                if(poLast.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt))
                        && poLast.opIcCardAddr.equals(dataCd84Vo.icCardAddr)
                        && poLast.opIcCardNo.equals(dataCd84Vo.icCardNo)){
                    //重复上报,原因是下行数据处理慢了,就重复上报了
                    return ;
                }
            }
            if(poLast.opType != null){
                //原记录存在开阀数据,首先进行时间对比
                if(poLast.openDt != null && poLast.openDt.equals(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt))){
                    //重复上报的开阀数据,不进行处理
                }else if(poLast.openDt != null && poLast.openDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt))){
                    //补报的许久之前的开阀数据(对于after:等于或晚于都返回true)
                    this.dealSupplyReport() ;
                }else {
                    //当前开阀上报是新的一次开阀,不管原记录是否存在关阀数据,一律清空关阀数据
                    this.updateOpenValve(clientVo, controller, poLast, null, dataV202404, dataCd84Vo, true) ;
                    //生成并保存新的开阀上报历史数据记录
                    this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dataV202404, dataCd84Vo, poLast);
                }
            }else if(poLast.clType != null){
                //原记录不存在开阀数据,但存在关阀数据,首先进行时间比对
                if(poLast.clOpenDt != null && poLast.clOpenDt.before(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt))){
                    //当前上报是新的开阀数据,把最新(last)数据中的关阀内容清空
                    this.updateOpenValve(clientVo, controller, poLast, null, dataV202404, dataCd84Vo, true) ;
                    //生成并保存新的开阀上报历史数据记录
                    this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dataV202404, dataCd84Vo, poLast);
                }else if(poLast.clOpenDt != null && poLast.clOpenDt.after(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCd84Vo.openDt))){
                    //补报的许久之前的开阀报数据(对于after:等于或晚于都返回true)
                    this.dealSupplyReport() ;
                }else {
                    //当前上报的开阀数据与原来的关阀数据同一时间,这种情况应该不存在,但也处理
                    RmOpenCloseValveHistory poHistory = null ;
                    if(poLast.lastHistoryId != null){
                        poHistory = sv.getRmOpenCloseValveHistory(poLast.lastHistoryId) ;
                    }
                    this.updateOpenValve(clientVo, controller, poLast, poHistory, dataV202404, dataCd84Vo, false) ;
                    if(poHistory != null){
                        sv.updateRmOpenCloseValveHistory(poHistory);
                    }
                }
            }else{
                //if(poLast.opType == null && po.clType == null)
                //原记录不存在开阀数据也不存在关阀数据,这种情况不存在,但为安全也进行处理
                this.updateOpenValve(clientVo, controller, poLast, null, dataV202404, dataCd84Vo, true) ;
                //生成并保存新的开阀上报历史数据记录
                this.newHistoryDataDeal(sv, clientVo, controller, rtuAddr, dataV202404, dataCd84Vo, poLast);
            }
            sv.updateRmOpenCloseValveLast(poLast);
        }
    }
    /**
     * å¤„理补报,暂时无逻辑
     */
    private void dealSupplyReport(){
    }
    /**
     * ä¿å­˜æ–°çš„开阀上报历史数据记录,并把ID赋值给最新记录的 lastHistoryId
     * @param sv
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dataV202404
     * @param dataCd84Vo
     * @param poLast
     * @throws Exception
     */
    private void newHistoryDataDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo dataCd84Vo, RmOpenCloseValveLast poLast)throws Exception {
        RmOpenCloseValveHistory poHistory = this.newRmOpenCloseValveHistory(clientVo, controller, rtuAddr, dataV202404, dataCd84Vo) ;
        sv.saveRmOpenCloseValveHistory(poHistory);
        //由最新数据持有历史数据中的最新记录ID,以方便快速查询
        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
    }
    /**
     * ç”Ÿæˆæ–°çš„开阀上报最新数据记录
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dataV202404
     * @param dataCd84Vo
     * @return
     * @throws Exception
     */
    private RmOpenCloseValveLast newRmOpenCloseValveLast(SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo dataCd84Vo)throws Exception {
        RmOpenCloseValveLast po = new RmOpenCloseValveLast() ;
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId() ;
        po.intakeId = controller==null?null:controller.getIntakeId() ;
        po.rtuAddr = rtuAddr ;
        po.valueFrom84(dataV202404, dataCd84Vo);
        return po ;
    }
    /**
     * ç”Ÿæˆæ–°çš„开阀上报历史数据记录
     * @param clientVo
     * @param controller
     * @param rtuAddr
     * @param dataV202404
     * @param dataCd84Vo
     * @return
     * @throws Exception
     */
    private RmOpenCloseValveHistory newRmOpenCloseValveHistory(SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo dataCd84Vo)throws Exception {
        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory() ;
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId() ;
        po.intakeId = controller==null?null:controller.getIntakeId() ;
        po.rtuAddr = rtuAddr ;
        po.valueFrom84(dataV202404, dataCd84Vo);
        return po ;
    }
    /**
     * æ›´æ–°æ•°æ®
     * @param clientVo
     * @param controller
     * @param poLast
     * @param poHistory
     * @param dataV202404
     * @param dataCd84Vo
     * @param clearLastCloseValve
     * @throws Exception
     */
    private void updateOpenValve(SeClient clientVo,
                                 PrController controller,
                                 RmOpenCloseValveLast poLast,
                                 RmOpenCloseValveHistory poHistory,
                                 DataV202404 dataV202404,
                                 DataCd84Vo dataCd84Vo,
                                 boolean clearLastCloseValve) throws Exception {
        poLast.clientId = clientVo==null?null:clientVo.getId() ;
        poLast.clientName = clientVo==null?null:clientVo.getName() ;
        poLast.controllerId = controller==null?null:controller.getId();
        poLast.intakeId = controller==null?null:controller.getIntakeId();
        poLast.updateFrom(dataV202404, dataCd84Vo, clearLastCloseValve);
        if(poHistory != null){
            poLast.clientId = clientVo==null?null:clientVo.getId() ;
            poLast.clientName = clientVo==null?null:clientVo.getName() ;
            poHistory.controllerId = controller==null?null:controller.getId();
            poHistory.intakeId = controller==null?null:controller.getIntakeId();
            poHistory.updateFrom(dataV202404, dataCd84Vo, false);
        }
    }
//
//    /**
//     * å¤„理开阀报数据
//     * @param sv æœåŠ¡
//     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData) throws Exception {
//        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
//        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
//    }
//
//    /**
//     * ä¿å­˜æˆ–更新控制器开阀报最新数据
//     * @param sv æœåŠ¡bean
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
//        RmOpenCloseValveLast po = sv.getRmOpenCloseValveLast(controller.getIntakeId());
//        if(po == null){
//            po = new RmOpenCloseValveLast();
//            po.controllerId = controller==null?null:controller.getId();
//            po.intakeId = controller==null?null:controller.getIntakeId();
//            po.rtuAddr = rtuAddr;
//            po.valueFrom84(dataV202404, cdData);
//            sv.saveRmOpenCloseValveLast(po);
//        }else{
//            po.controllerId = controller==null?null:controller.getId();
//            po.intakeId = controller==null?null:controller.getIntakeId();
//            po.valueFrom84(dataV202404, cdData);
//            sv.updateRmOpenCloseValveLast(po);
//        }
//    }
//
//    /**
//     * ä¿å­˜æŽ§åˆ¶å™¨å·¥ä½œæŠ¥åŽ†å²æ•°æ®
//     * @param sv æœåŠ¡bean
//     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
//     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
//     * @param dataV202404 åè®®æ•°æ®
//     * @param cdData åŠŸèƒ½æ•°æ®
//     */
//    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
//        RmOpenCloseValveHistory po = new RmOpenCloseValveHistory();
//        po.controllerId = controller==null?null:controller.getId();
//        po.intakeId = controller==null?null:controller.getIntakeId();
//        po.rtuAddr = rtuAddr;
//        po.valueFrom84(dataV202404, cdData);
//        sv.saveRmOpenCloseValveHistory(po); ;
//    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealWorkingReportV202404.java
@@ -6,10 +6,15 @@
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoRm.RmWorkReportHistory;
import com.dy.pipIrrGlobal.pojoRm.RmWorkReportLast;
import com.dy.pipIrrGlobal.pojoSe.SeClient;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.rtuData.TaskSurpport;
import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.HashMap;
import java.util.Map;
/**
 * @Author: liurunyu
@@ -19,6 +24,8 @@
public class TkDealWorkingReportV202404 extends TaskSurpport {
    private static final Logger log = LogManager.getLogger(TkDealWorkingReportV202404.class.getName());
    private static final Map<String, Integer> RtuReportTimes = new HashMap<>();
    //ç±»ID,一定与Tree.xml配置文件中配置一致
    public static final String taskId = "TkDealWorkingReportV202404";
@@ -34,16 +41,32 @@
        DataV202404 dV202404 = (DataV202404)d.getSubData() ;
        Object cdObj = dV202404.subData ;
        //前面任务已经判断cdObj不为null
        try {
            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
            DbSv sv = (DbSv) objs[0];
            PrController controller = (PrController) objs[1];
            if (cdObj instanceof DataCd80_5BVo) {
                DataCd80_5BVo cdData = (DataCd80_5BVo) (cdObj);
                this.doDeal(sv, controller, d.getRtuAddr(), dV202404, (DataCd80_5BVo)cdObj);
        if (cdObj instanceof DataCd80_5BVo) {
            boolean deal = false ;
            Integer times = RtuReportTimes.get(d.rtuAddr) ;
            if(times == null){
                times = 1 ;
                RtuReportTimes.put(d.rtuAddr, times) ;
                deal = true ;//第一次
            }else{
                times++ ;
                if(times > ServerProperties.workReportDealOneByTimes){
                    times = 1 ;//循环第一次
                    deal = true ;
                }
                RtuReportTimes.put(d.rtuAddr, times) ;
            }
        } catch (Exception e) {
            log.error("保存处理控制器工作报数据时发生异常", e);
            if(deal){
                try {
                    Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
                    DbSv sv = (DbSv) objs[0];
                    PrController controller = (PrController) objs[1];
                    SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值
                    this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV202404, (DataCd80_5BVo)cdObj);
                } catch (Exception e) {
                    log.error("处理保存控制器工作报数据时发生异常", e);
                }
            }
        }
    }
    /**
@@ -54,29 +77,34 @@
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     */
    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData) throws Exception {
        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData) throws Exception {
        this.saveOrUpdateLast(sv, clientVo, controller, rtuAddr, dataV202404, cdData);
        this.saveHistory(sv, clientVo, controller, rtuAddr, dataV202404, cdData);
    }
    /**
     * ä¿å­˜æˆ–更新控制器工作报最新数据
     * @param sv æœåŠ¡bean
     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     */
    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData)throws Exception {
    private void saveOrUpdateLast(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData)throws Exception {
        RmWorkReportLast po = sv.getRmWorkReportLast(controller.getIntakeId()) ;
        if(po == null){
            po = new RmWorkReportLast();
            po.clientId = clientVo==null?null:clientVo.getId() ;
            po.clientName = clientVo==null?null:clientVo.getName() ;
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.rtuAddr = rtuAddr;
            po.valueFrom(dataV202404, cdData);
            sv.saveRmWorkReportLast(po) ;
        }else{
            po.clientId = clientVo==null?null:clientVo.getId() ;
            po.clientName = clientVo==null?null:clientVo.getName() ;
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.valueFrom(dataV202404, cdData);
@@ -87,13 +115,16 @@
    /**
     * ä¿å­˜æŽ§åˆ¶å™¨å·¥ä½œæŠ¥åŽ†å²æ•°æ®
     * @param sv æœåŠ¡bean
     * @param clientVo å†œæˆ·å¯¹è±¡ï¼ˆä¸ä¸ºç©ºæ—¶ï¼Œåªæœ‰id和name有值)
     * @param controller æŽ§åˆ¶å™¨å¯¹è±¡
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param dataV202404 åè®®æ•°æ®
     * @param cdData åŠŸèƒ½æ•°æ®
     */
    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData)throws Exception {
    private void saveHistory(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd80_5BVo cdData)throws Exception {
        RmWorkReportHistory po = new RmWorkReportHistory();
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId();
        po.intakeId = controller==null?null:controller.getIntakeId();
        po.rtuAddr = rtuAddr;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
@@ -104,7 +104,7 @@
                */
                //设置收到数据时刻
                TcpSessionCache.cacheUpDataTime(rtuAddr);
                TcpSessionCache.whenUpData(rtuAddr);
                if(protocolName != null){
                    //对上行数据进行处理
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
@@ -74,8 +74,8 @@
                            <task id="TkDealAlarmStatusV202404" name="控制器报警与状态及向钉钉发送报警信息" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealAlarmStatusV202404">
                                <task id="TkDealVirCardStateV202404" name="虚拟卡占用状态恢复" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealVirCardStateV202404" />
                            </task>
                            <task id="TkDealWorkingReportV202404" name="控制器工作报(功能码80)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealWorkingReportV202404" />
                            <task id="TkDealTimingReportV202404" name="控制器定时(一天一次)上报(功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealTimingReportV202404" />
                            <task id="TkDealWorkingReportV202404" name="控制器工作报(功能码80)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealWorkingReportV202404" />
                            <task id="TkDealOpenValveReportV202404" name="控制器开阀上报(功能码84)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealOpenValveReportV202404" />
                            <task id="TkDealCloseValveReportV202404" name="控制器关阀上报(功能码85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealCloseValveReportV202404" />
                        </task>
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(mj÷½­).xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(mqÃñÇÚ).xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(spɳÅÌ).xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test²âÊÔ).xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ymԪı).xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -39,7 +39,7 @@
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            workReportDealOneByTimes="1"
            intakeAlarmLossMinValue="1.0"
            sendDingDingAlarmMsInterval="60"
    />