zhubaomin
2024-10-12 baff68fa55ed3212f618330e18cc5735b1caf57f
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

 Conflicts:
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
7个文件已添加
194个文件已修改
2704 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/DriverParserDataCallback.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_12_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_12_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_36_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_36_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_37_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_37_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_38_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_38_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_39_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_39_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3A_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3A_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3B_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3B_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3C_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3C_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3D_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3D_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_51_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_51_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_5E_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_5E_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_65_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_65_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_67_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_67_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_68_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_68_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_69_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_69_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6A_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6A_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6B_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6B_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6D_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6D_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_81_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_81_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_91_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_91_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_97_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_97_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_98_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_98_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_99_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_99_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A0_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A0_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A1_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A1_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A2_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A2_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_B0_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | 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_85_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Down.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOnHourReportLastMapper.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseValveHistoryMapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeUnReported.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test测试系统).yml 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ym元谋系统).yml 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOnHourReportLastMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveHistoryMapper.xml 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveLastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/rtuLog/RtuLogManager.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/RtuLogDealer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealOnHourReport.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database(test测试).yml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database(ym元谋).yml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test测试).xml 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ym元谋).xml 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml 281 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-gis/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/resources/log4j2.yml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/log4j2.yml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/resources/log4j2.yml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/client/ClientCtrl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/client/ClientSv.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntkeCtrl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/log4j2.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Driver.java
@@ -15,6 +15,10 @@
    protected HashMap<String, CodeParse> downCode2ClassInstance = new HashMap<>() ;
    /**
     * æ¸…空自己
     */
    public abstract void clear() ;
    /**
     * å•线程单例Driver模式下运行
     * æ‰«æè¯†åˆ«åŠŸèƒ½ç æ³¨è§£ç±»
     * @throws Exception å¼‚常
@@ -24,7 +28,6 @@
     * æ‰«æè¯†åˆ«åŠŸèƒ½ç æ³¨è§£ç±»
     * @param driver é©±åЍ
     * @param protocolName åè®®åç§°
     * @param uri URI
     * @param scanRootPackage æ‰«æåŒ…
     * @throws Exception å¼‚常
     */
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/DriverParserDataCallback.java
@@ -15,6 +15,7 @@
     */
    void callback(String rtuAddr,
            String code,
            String codeName,
            String upHex, 
            Boolean reportOrResponse_trueOrFalse, 
            boolean parseFail,
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
@@ -15,6 +15,7 @@
    public String rtuAddr ;//Rtu地址
    public String commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
    public String downCode ;//下行命令功能码;
    public String downCodeName ;//下行命令功能码名称;
    public byte[] downBuffer ;//下行命令数据
    public String downBufHex ;//下行命令数据十六进制形式
    public boolean hasResponse ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
@@ -91,6 +91,9 @@
            (code.equals(cd_B0) ? "查询实时数据" :
            (code.equals(cd_C0) ? "自报(整点)实时数据" :
            ""))))))))))))))))))))))))))))))))))))))))))) ;
        if(name == null || name.equals("")){
            name = code ;
        }
        return name ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
@@ -23,6 +23,20 @@
        downCpParams = new ParseParamsForDownV1_0_1() ;
    }
    /**
     * æ¸…空自己
     */
    @Override
    public void clear() {
        if(this.upCpParams != null){
            this.upCpParams.clear();
        }
        if(this.downCpParams != null){
            this.downCpParams.clear();
        }
        this.reportOrResponse_trueOrFalse = null ;
        this.rtuAddrInData = null ;
    }
    /**
     * æ‰«æè¯†åˆ«åŠŸèƒ½ç æ³¨è§£ç±»
@@ -43,7 +57,7 @@
     */
    @Override
    public MidResult[] parseData(Boolean isLowPower, String rtuAddr, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) {
        reportOrResponse_trueOrFalse = null ;
        this.clear();
        boolean isFail = false ;
        String upCode = null ;
        try{
@@ -74,8 +88,7 @@
            
            upData.setSubData(dV1_0_1) ;
            
            this.upCpParams.clear();
            this.upCpParams.setValue(ProtocolConstantV206V1_0_0.protocolName,
            this.upCpParams.setValue(ProtocolConstantV206V1_0_0.protocolName,
                    rtuAddr, 
                    upCode,
                    upHex, 
@@ -98,7 +111,7 @@
            isFail = true ;
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, rtuAddr, "严重错误,分析Rtu数据出错!数据为:" + upHex + (e.getMessage() == null?"":(",出错信息:" + e.getMessage())), e))} ;
        } finally{
            callback.callback(rtuAddr, upCode, upHex, reportOrResponse_trueOrFalse, isFail, rtuAddrInData);
            callback.callback(rtuAddr, upCode, CodeV1_0_1.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr);
        }
    }
@@ -110,6 +123,7 @@
     */
    @Override
    public MidResult[] createCommand(Boolean isLowPower, Command command, Object... params) {
        this.clear();
        String RtuResultSendWebUrl = command.getRtuResultSendWebUrl() ;
        if(RtuResultSendWebUrl == null || RtuResultSendWebUrl.trim().equals("")){
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ;
@@ -121,7 +135,6 @@
        try {
            String commandCode = command.getCode() ;
            
            this.downCpParams.clear();
            this.downCpParams.setValue(
                    RtuResultSendWebUrl,
                    ProtocolConstantV206V1_0_0.protocolName, 
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV1_0_1.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Down.java
@@ -34,6 +34,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_10_Up.java
@@ -32,7 +32,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_12_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_12_Up.java
@@ -27,7 +27,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_21_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_36_Down.java
@@ -31,6 +31,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_36_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_37_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_37_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_38_Down.java
@@ -34,6 +34,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_38_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_39_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_39_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3A_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3A_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3B_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3B_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3C_Down.java
@@ -35,6 +35,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3C_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3D_Down.java
@@ -31,6 +31,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_3D_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_51_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_51_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_5E_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_5E_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_65_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_65_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Down.java
@@ -32,6 +32,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_66_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_67_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_67_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_68_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_68_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_69_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_69_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6A_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6A_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6B_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6B_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6D_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_6D_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_81_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_81_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -59,6 +59,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV1_0_1.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV1_0_1.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
@@ -192,4 +193,26 @@
        cdData.rtuDt = GlParse.parseTp(bs, index) ;
        //index += 6 ;
    }
    public static void main(String[] args) throws Exception {
        Cd_83_Up obj = new Cd_83_Up() ;
        String hex = "683C68B08485353448830200000000001000282353FE739444000001000313000101211615000101210000000000000000000200019000011518000101210A7B16";
        byte[] bs = ByteUtil.hex2Bytes(hex) ;
        Data data = new Data() ;
        data.setSubData(new DataV1_0_1()) ;
        int bsLen = new CommonV1_0_1().parseDataLen(bs) ;
        if(bsLen > 0){
            try {
            obj.doParse(bs,
                        bsLen,
                        "83",
                        data) ;
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        System.out.println("data = " + data);
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -59,6 +59,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV1_0_1.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_91_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_91_Up.java
@@ -26,7 +26,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_92_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_93_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_97_Down.java
@@ -33,6 +33,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_97_Up.java
@@ -35,7 +35,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_98_Down.java
@@ -33,6 +33,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_98_Up.java
@@ -35,7 +35,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_99_Down.java
@@ -32,6 +32,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_99_Up.java
@@ -35,7 +35,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A0_Down.java
@@ -32,6 +32,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A0_Up.java
@@ -35,7 +35,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A1_Down.java
@@ -33,6 +33,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A1_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A2_Down.java
@@ -33,6 +33,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_A2_Up.java
@@ -34,7 +34,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_B0_Down.java
@@ -30,6 +30,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV1_0_1.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV1_0_1.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -59,6 +59,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV1_0_1.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/upVos/DataAlarmVo.java
@@ -20,6 +20,17 @@
        return flag ;
    }
    public boolean hasAlarmExcludeLoss(){
        boolean flag = false ;
        if((batteryVolt != null && batteryVolt == 1) ||
                (meter != null && meter == 1) ||
                (valve != null && valve == 1)){
            flag = true ;
        }
        return flag ;
    }
    public String alarmContent(){
        String txt = "" ;
        boolean hasTxt = false ;
@@ -42,6 +53,23 @@
        return txt ;
    }
    public String alarmContentExcludeLoss(){
        String txt = "" ;
        boolean hasTxt = false ;
        if(batteryVolt != null && batteryVolt == 1){
            txt += (hasTxt?"、":"") + "蓄电池电压报警" ;
            hasTxt = true ;
        }
        if(meter != null && meter == 1){
            txt += (hasTxt?"、":"") + "流量计故障报警" ;
            hasTxt = true ;
        }
        if(valve != null && valve == 1){
            txt += (hasTxt?"、":"") + "阀门故障报警" ;
            hasTxt = true ;
        }
        return txt ;
    }
    public String toString(){
        StringBuilder str = new StringBuilder() ;
        str.append("      æŠ¥è­¦:\n");
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CodeV202404.java
@@ -83,6 +83,9 @@
            (code.equals(cd_9C) ? "黑名单远程强制关闭水泵/阀门" :
            (code.equals(cd_C2) ? "开关水泵/阀门结果上报" :
            ""))))))))))))))))))))))))))))))))))))))) ;
        if(name == null || name.equals("")){
            name = code ;
        }
        return name ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/DriverV202404.java
@@ -24,6 +24,20 @@
        downCpParams = new ParseParamsForDownV202404() ;
    }
    /**
     * æ¸…空自己
     */
    @Override
    public void clear() {
        if(this.upCpParams != null){
            this.upCpParams.clear();
        }
        if(this.downCpParams != null){
            this.downCpParams.clear();
        }
        this.reportOrResponse_trueOrFalse = null ;
        this.rtuAddrInData = null ;
    }
    /**
     * æ‰«æè¯†åˆ«åŠŸèƒ½ç æ³¨è§£ç±»
@@ -44,7 +58,7 @@
     */
    @Override
    public MidResult[] parseData(Boolean isLowPower, String rtuAddr, byte[] upBuffer, String upHex, DriverParserDataCallback callback, Object... params) {
        reportOrResponse_trueOrFalse = null ;
        this.clear();
        boolean isFail = false ;
        String upCode = null ;
        try{
@@ -75,8 +89,7 @@
            
            upData.setSubData(dV1_0_1) ;
            
            this.upCpParams.clear();
            this.upCpParams.setValue(ProtocolConstantV206V202404.protocolName,
            this.upCpParams.setValue(ProtocolConstantV206V202404.protocolName,
                    rtuAddr, 
                    upCode,
                    upHex, 
@@ -99,7 +112,7 @@
            isFail = true ;
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, rtuAddr, "严重错误,分析Rtu数据出错!数据为:" + upHex + (e.getMessage() == null?"":(",出错信息:" + e.getMessage())), e))} ;
        } finally{
            callback.callback(rtuAddr, upCode, upHex, reportOrResponse_trueOrFalse, isFail, rtuAddrInData);
            callback.callback(rtuAddr, upCode, CodeV202404.getCodeName(upCode), upHex, reportOrResponse_trueOrFalse, isFail, rtuAddr);
        }
    }
@@ -111,6 +124,7 @@
     */
    @Override
    public MidResult[] createCommand(Boolean isLowPower, Command command, Object... params) {
        this.clear();
        String RtuResultSendWebUrl = command.getRtuResultSendWebUrl() ;
        if(RtuResultSendWebUrl == null || RtuResultSendWebUrl.trim().equals("")){
            return new MidResult[]{(new MidResultError(ProtocolConstantV206V202404.protocolName, null, "严重错误,命令中rtu返回命令结果发向目的地web URL为空,不能构建任何命令!", null))} ;
@@ -122,7 +136,6 @@
        try {
            String commandCode = command.getCode() ;
            
            this.downCpParams.clear();
            this.downCpParams.setValue(
                    RtuResultSendWebUrl,
                    ProtocolConstantV206V202404.protocolName, 
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_02_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -59,6 +59,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_10_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_15_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_16_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Down.java
@@ -27,6 +27,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_21_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_22_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Down.java
@@ -27,6 +27,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_23_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Down.java
@@ -26,6 +26,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_24_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_25_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_26_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_30_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_31_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_50_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_55_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_56_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5B_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_5C_Up.java
@@ -32,7 +32,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_65_Up.java
@@ -33,7 +33,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_68_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_80_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_81_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_84_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_85_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_86_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_87_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_88_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_8A_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -59,6 +59,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Down.java
@@ -27,6 +27,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_92_A2_Up.java
@@ -31,7 +31,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Down.java
@@ -27,6 +27,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_93_A3_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_97_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_98_Up.java
@@ -29,7 +29,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_99_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9A_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Down.java
@@ -25,6 +25,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = true ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_9C_Up.java
@@ -28,7 +28,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析命令应答数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Down.java
@@ -23,6 +23,7 @@
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downCodeName = CodeV202404.getCodeName(para.commandCode) ;//下行命令功能码名称;
        midRs.downBuffer = bs ;//下行命令数据
        midRs.downBufHex = ByteUtil.bytes2Hex(bs, true) ;//下行命令数据十六进制形式
        midRs.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_C2_Up.java
@@ -30,7 +30,7 @@
                    para.upCode,
                    para.data) ;
        }
        log.info("分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        log.info("\n分析上行数据<" + CodeV202404.getCodeName(para.upCode) + " RTU地址=" + para.rtuAddr + ">:\n" + para.data.toString());
        MidResultFromRtu midRs = new MidResultFromRtu() ;
        midRs.protocolName = para.protocolName ;//协议名称
@@ -60,6 +60,7 @@
        confirmCommand.rtuAddr = para.rtuAddr ;//Rtu地址
        confirmCommand.commandId = Command.defaultId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        confirmCommand.downCode = confirmComCode ;//下行命令功能码;
        confirmCommand.downCodeName = CodeV202404.getCodeName(confirmComCode) ;//下行命令功能码名称;
        confirmCommand.downBuffer = data ;//下行命令数据
        confirmCommand.downBufHex = ByteUtil.bytes2Hex(data, true) ;//下行命令数据十六进制形式
        confirmCommand.hasResponse = false ;//是否有应答
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
@@ -7,7 +7,7 @@
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
@@ -17,6 +17,8 @@
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
 * @author ZhuBaoMin
@@ -27,6 +29,18 @@
@Slf4j
@Component
public class DingTalk {
    private static final String dingTalkConfigPriFix = "dingtalk";
    private static final Map<String, Option> optionsMap = new HashMap();
    class Option{
        public Boolean enable ;
        public String robotUrl ;
        public String robotAccessToken ;
        public String secret ;
        public Boolean atAll ;
        public String mobile ;
    }
    /*
    @Value("${dingtalk.robot.url}")
    private String URL;
@@ -41,54 +55,108 @@
    @Value("${dingtalk.mobile}")
    private String MOBILE;
    */
    public void sendMessage(String message) {
        try {
            Long timestamp = System.currentTimeMillis();
            String secret = SECRET;
            String stringToSign = timestamp + "\n" + secret;
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
            //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 çš„错误信息
            DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "&timestamp=" + timestamp);
            OapiRobotSendRequest req = new OapiRobotSendRequest();
            /**
             * å‘送文本消息
             */
            //定义文本内容
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent(message);
            //定义 @对象
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            if(AT_ALL) {
                at.setIsAtAll(true);
            }else {
                at.setAtMobiles(Collections.singletonList(MOBILE));
    private Option getOptions(String orgTag, Environment env){
        Option vo = null ;
        try{
            vo = optionsMap.get(orgTag);
            if(vo == null){
                vo = new Option();
                String enableStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".enable");
                if(enableStr != null && !enableStr.trim().equals("")){
                    vo.enable = Boolean.valueOf(enableStr);
                }else{
                    vo.enable = true ;
                }
                vo.robotUrl = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.url");
                vo.robotAccessToken = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.access-token");
                vo.secret = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.secret");
                String atAllStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".at-all");
                if(atAllStr != null && !atAllStr.trim().equals("")){
                    vo.atAll = Boolean.valueOf(atAllStr);
                }else{
                    vo.atAll = true ;
                }
                vo.mobile = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".mobile");
                optionsMap.put(orgTag, vo) ;
            }
            //设置消息类型
            req.setMsgtype("text");
            req.setText(text);
            req.setAt(at);
            OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN);
            log.info(rsp.getBody());
        } catch (ApiException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (InvalidKeyException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (Exception e){
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        }catch (Exception e){
            vo = null ;
        }
        return vo ;
    }
    /**
     * å‘钉钉群发送消息
     * @param orgTag
     * @param env
     * @param message
     */
    public void sendMessage(String orgTag, Environment env, String message) {
        if(orgTag == null || orgTag.trim().equals("")){
            log.error("钉钉发送消息异常,机构标签为空");
            return;
        }
        if(env == null){
            log.error("钉钉发送消息异常,Spring环境为空");
            return;
        }
        if(message == null || message.trim().equals("")){
            log.error("钉钉发送消息异常,消息为空");
            return;
        }
        Option vo = this.getOptions(orgTag.trim(), env) ;
        if(vo == null){
            log.error("钉钉发送消息异常,钉钉配置错误");
            return;
        }
        if(vo.enable){
            try {
                Long timestamp = System.currentTimeMillis() ;
                String stringToSign = timestamp + "\n" + vo.secret;
                Mac mac = Mac.getInstance("HmacSHA256");
                mac.init(new SecretKeySpec(vo.secret.getBytes("UTF-8"), "HmacSHA256"));
                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
                String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
                //定义文本内容
                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
                text.setContent(message);
                //定义 @对象
                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
                if(vo.atAll) {
                    at.setIsAtAll(true);
                }else {
                    at.setAtMobiles(Collections.singletonList(vo.mobile));
                }
                OapiRobotSendRequest req = new OapiRobotSendRequest();
                //设置消息类型
                req.setMsgtype("text");
                req.setText(text);
                req.setAt(at);
                //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 çš„错误信息
                DingTalkClient client = new DefaultDingTalkClient( vo.robotUrl + "?sign=" + sign + "&timestamp=" + timestamp);
                OapiRobotSendResponse rsp = client.execute(req, vo.robotAccessToken);
                log.info(rsp.getBody());
            } catch (ApiException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (InvalidKeyException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (Exception e){
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            }
        }
    }
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerTrampMapper.java
@@ -24,6 +24,12 @@
    int deleteByPrimaryKey(Long id);
    /**
     * æ¸…空流浪控制器表
     * @return
     */
    int emptyTrampController();
    /**
     * insert record to table
     * @param record the record
     * @return insert count
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOnHourReportLastMapper.java
@@ -3,9 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoRm.RmOnHourReportLast;
import com.dy.pipIrrGlobal.voRm.VoOnHour;
import com.dy.pipIrrGlobal.voSt.VoBatteryVolt;
import com.dy.pipIrrGlobal.voSt.VoCumulativeFlow;
import com.dy.pipIrrGlobal.voSt.VoSignalIntensity;
import com.dy.pipIrrGlobal.voSt.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -139,4 +137,17 @@
     */
    List<VoSignalIntensity> getSpecifiedSignalIntakes(Map<?, ?> params);
    /**
     * æœ€è¿‘未报数的取水口数量
     * @param params
     * @return
     */
    Long getUnReportedIntakesCount(Map<String, Object> params);
    /**
     * æœ€è¿‘未报数的取水口
     * @param params
     * @return
     */
    List<VoIntakeUnReported> getUnReportedIntakes(Map<String, Object> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseValveHistoryMapper.java
@@ -168,6 +168,20 @@
    List<VoClient> getLargeWaterConsumptionClients(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´é‡ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·æ•°é‡
     * @param params
     * @return
     */
    Long getSmallWaterConsumptionClientsCount(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´é‡ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param params
     * @return
     */
    List<VoClient> getSmallWaterConsumptionClients(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·æ•°é‡
     * @param params
     * @return
@@ -182,6 +196,20 @@
    List<VoClient> getLargeAmountSpentClients(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·æ•°é‡
     * @param params
     * @return
     */
    Long getSmallAmountSpentClientsCount(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param params
     * @return
     */
    List<VoClient> getSmallAmountSpentClients(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·æ•°é‡
     * @param params
     * @return
@@ -196,6 +224,20 @@
    List<VoClient> getLargeWaterDurationClients(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·æ•°é‡
     * @param params
     * @return
     */
    Long getSmallWaterDurationClientsCount(Map<String, Object> params);
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param params
     * @return
     */
    List<VoClient> getSmallWaterDurationClients(Map<String, Object> params);
    /**
     * æŒ‡å®šæ—¶é—´æ®µç”¨æ°´é‡è¶…过指定值的取水口数量
     * @param params
     * @return
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoIntakeUnReported.java
New file
@@ -0,0 +1,28 @@
package com.dy.pipIrrGlobal.voSt;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * @author :WuZeYu
 * @Date :2024/10/11  9:45
 * @LastEditTime :2024/10/11  9:45
 * @Description
 */
@Data
public class VoIntakeUnReported {
    /**
     * å–水口编号
     */
    private String intakeNum;
    /**
     * é˜€æŽ§å™¨åœ°å€
     */
    private String rtuAddr;
    /**
     * é˜€æŽ§å™¨æ—¶é—´
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String rtuDt;
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test²âÊÔϵͳ).yml
New file
@@ -0,0 +1,216 @@
logging:
    charset:
        console: UTF-8
    config:
        classpath: log4j2.yml
#禁用白标错误页面
server:
    error:
        whitelabel:
            enabled: false
    #servlet配置
    servlet:
        encoding:
            #取消默认的字符集编码
            enabled: true
            #设置强制使用指定字符编码集
            force: true
            #使用的字符编码
            charset: utf-8
# actuator配置,先include了全部,然后再exclude指定的endpoint
management:
    endpoints:
        web:
            exposure:
                include: '*'
                #exclude: beans
        .shutdown:
            enabled: true #是否开启/actuator/shutdown
# SpringDoc-OpenApi é…ç½®
springdoc:
    swagger-ui:
        #应用actuator时,访问: http://[IP]:[port]/actuator/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:9080/actuator/swagger-ui/index.html
        #未用actuator时,访问: http://[IP]:[port]/[context]/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:8080/[子系统上下文(base)]/swagger-ui/index.html
        path: /swagger-ui
        operationsSorter: method # HTTP æ–¹æ³•排序
        tagsSorter: alpha # API æŽ’序
    api-docs:
        path: /v3/apiDocs
        groups:
            enabled: true
    show-actuator: true #在actuator配置的端口及上下文中访问 SpringDoc-OpenApi
    use-management-port: true #应用actuator配置的端口,但上面的swagger-ui:path只会采用默认值swagger-ui
    packages-to-scan: com.dy
    #paths-to-match: /sys/**, /demo/**, /**
    paths-to-match:  /**
    web:
        title: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸAPI
        description: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸæœåŠ¡ç«¯ Restfull API
        version: v1.0.0
        license-name: å¤§ç¦¹èŠ‚æ°´ç ”ç©¶é™¢
#MybatisPlus é…ç½®æ—¥å¿—显示执行SQL
mybatis-plus:
    #匹配sql语句的映射文件的位置,classpath代表在resources下
    mapper-locations: classpath:mapper/*.xml
    #以下两个配置可以省略,在mapper映射文件中配置“@Mapper”也是可以的。
    #使用type-aliases-package中指定entity扫描包路径,让mybatis自动扫描自定义的entity
    #type-aliases-package: com.dy.pipIrrGlobal.daoBa
    configuration:
        #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #时而输出日志,时而不输出日志
        log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
        #开启驼峰uName自动映射到u_name
        #2023-10-24经实验,下面配置true或false,都能从u_name映射到uName
        #map-underscore-to-camel-case: true
        lazyLoadingEnabled: true # å¼€å¯å»¶æ—¶åŠ è½½å¼€å…³
        aggressiveLazyLoading: false # å°†ç§¯æžåŠ è½½æ”¹ä¸ºæ¶ˆæžåŠ è½½ï¼ˆå³æŒ‰éœ€åŠ è½½ï¼‰ï¼Œé»˜è®¤å€¼æ˜¯false
        lazy-load-trigger-methods: ""  # é˜»æŒ¡ä¸ç›¸å¹²çš„æ“ä½œè§¦å‘,实现懒加载
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
pipIrr:
    global:
        dev: false  #是否开发阶段,true或false
        dsName: ym  #开发阶段,设置临时的数据库名称
    mw:
        webPort: 8072
        actutorPort: 9072
        idSuffix: 0
    sso:
        cacheMaximumSize: 10000 #登录用户缓存可缓存用户的最大值
        cacheDuration: 720  #缓存登录用户发呆最大时长(分钟)
        checkUrl: http://127.0.0.1:8079/sso/sso/ssoCheck
        webPort: 8079
        actutorPort: 9079
        idSuffix: 1
    base:
        webPort: 8080
        actutorPort: 9080
        idSuffix: 2
    remote:
        webPort: 8081
        actutorPort: 9081
        idSuffix: 3
    statistics:
        webPort: 8082
        actutorPort: 9082
        idSuffix: 4
    gis:
        webPort: 8083
        actutorPort: 9083
        idSuffix: 5
    demo:
        webPort: 8000
        actutorPort: 9000
        idSuffix: 99
    sell:
        webPort: 8084
        actutorPort: 9084
        idSuffix: 6
    project:
        webPort: 8085
        actutorPort: 9085
        idSuffix: 7
    irrigate:
        webPort: 8086
        actutorPort: 9086
        idSuffix: 8
    wechat:
        webPort: 8087
        actutorPort: 9087
        idSuffix: 9
    app:
        webPort: 8088
        actutorPort: 9088
        idSuffix: 10
    operation:
        webPort: 8089
        actutorPort: 9089
        idSuffix: 11
#项目编号
#projectCode:
#    ym: 100
#    pj: 101
#项目配置
project:
    #项目编码
    projectNo: 10
    #控制器类型
    controllerType: 57
    #默认行政区划编码(天津-天津市-武清区-京滨工业园-大禹节水)
    divisionCode: 120114403100
#通讯协议
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    ym:
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    pj:
        comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogText"
    test:
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #微信小程序回调地址
    rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive"
#不进行userToken过滤的URL,@ConfigurationProperties要求tokennofilter中所有字母都小写
tokennofilter:
    urls:
        - /sso/sso
        - /remote/comRes/receive
        - /wx/comRes/receive
        - /app/captcha/get
#自动统计配置,自动统计定时任务会每天定时进行
auto-statistics:
    startHour: 0 #开始小时 0
    startMinute: 5 #开始分钟 5
#钉钉消息推送
dingtalk:
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
    batteryVolt: 17
    signalIntensity:
        weak: 10
        ordinary: 20
#        strong: 20
#虚拟卡配置参数
vc:
    #虚拟卡最低余额报警值
    alarmValue: 10
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ymԪıϵͳ).yml
New file
@@ -0,0 +1,217 @@
logging:
    charset:
        console: UTF-8
    config:
        classpath: log4j2.yml
#禁用白标错误页面
server:
    error:
        whitelabel:
            enabled: false
    #servlet配置
    servlet:
        encoding:
            #取消默认的字符集编码
            enabled: true
            #设置强制使用指定字符编码集
            force: true
            #使用的字符编码
            charset: utf-8
# actuator配置,先include了全部,然后再exclude指定的endpoint
management:
    endpoints:
        web:
            exposure:
                include: '*'
                #exclude: beans
        .shutdown:
            enabled: true #是否开启/actuator/shutdown
# SpringDoc-OpenApi é…ç½®
springdoc:
    swagger-ui:
        #应用actuator时,访问: http://[IP]:[port]/actuator/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:9080/actuator/swagger-ui/index.html
        #未用actuator时,访问: http://[IP]:[port]/[context]/swagger-ui/index.html ä¾‹å¦‚http://127.0.0.1:8080/[子系统上下文(base)]/swagger-ui/index.html
        path: /swagger-ui
        operationsSorter: method # HTTP æ–¹æ³•排序
        tagsSorter: alpha # API æŽ’序
    api-docs:
        path: /v3/apiDocs
        groups:
            enabled: true
    show-actuator: true #在actuator配置的端口及上下文中访问 SpringDoc-OpenApi
    use-management-port: true #应用actuator配置的端口,但上面的swagger-ui:path只会采用默认值swagger-ui
    packages-to-scan: com.dy
    #paths-to-match: /sys/**, /demo/**, /**
    paths-to-match:  /**
    web:
        title: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸAPI
        description: å¤§ç¦¹èŠ‚æ°´ç®¡çŒç›‘æŽ§ç³»ç»ŸæœåŠ¡ç«¯ Restfull API
        version: v1.0.0
        license-name: å¤§ç¦¹èŠ‚æ°´ç ”ç©¶é™¢
#MybatisPlus é…ç½®æ—¥å¿—显示执行SQL
mybatis-plus:
    #匹配sql语句的映射文件的位置,classpath代表在resources下
    mapper-locations: classpath:mapper/*.xml
    #以下两个配置可以省略,在mapper映射文件中配置“@Mapper”也是可以的。
    #使用type-aliases-package中指定entity扫描包路径,让mybatis自动扫描自定义的entity
    #type-aliases-package: com.dy.pipIrrGlobal.daoBa
    configuration:
        #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #时而输出日志,时而不输出日志
        log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
        #开启驼峰uName自动映射到u_name
        #2023-10-24经实验,下面配置true或false,都能从u_name映射到uName
        #map-underscore-to-camel-case: true
        lazyLoadingEnabled: true # å¼€å¯å»¶æ—¶åŠ è½½å¼€å…³
        aggressiveLazyLoading: false # å°†ç§¯æžåŠ è½½æ”¹ä¸ºæ¶ˆæžåŠ è½½ï¼ˆå³æŒ‰éœ€åŠ è½½ï¼‰ï¼Œé»˜è®¤å€¼æ˜¯false
        lazy-load-trigger-methods: ""  # é˜»æŒ¡ä¸ç›¸å¹²çš„æ“ä½œè§¦å‘,实现懒加载
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
pipIrr:
    global:
        dev: false  #是否开发阶段,true或false
        dsName: ym  #开发阶段,设置临时的数据库名称
    mw:
        webPort: 8070
        actutorPort: 9070
        idSuffix: 0
    sso:
        cacheMaximumSize: 10000 #登录用户缓存可缓存用户的最大值
        cacheDuration: 720  #缓存登录用户发呆最大时长(分钟)
        checkUrl: http://127.0.0.1:8079/sso/sso/ssoCheck
        webPort: 8079
        actutorPort: 9079
        idSuffix: 1
    base:
        webPort: 8080
        actutorPort: 9080
        idSuffix: 2
    remote:
        webPort: 8081
        actutorPort: 9081
        idSuffix: 3
    statistics:
        webPort: 8082
        actutorPort: 9082
        idSuffix: 4
    gis:
        webPort: 8083
        actutorPort: 9083
        idSuffix: 5
    demo:
        webPort: 8000
        actutorPort: 9000
        idSuffix: 99
    sell:
        webPort: 8084
        actutorPort: 9084
        idSuffix: 6
    project:
        webPort: 8085
        actutorPort: 9085
        idSuffix: 7
    irrigate:
        webPort: 8086
        actutorPort: 9086
        idSuffix: 8
    wechat:
        webPort: 8087
        actutorPort: 9087
        idSuffix: 9
    app:
        webPort: 8088
        actutorPort: 9088
        idSuffix: 10
    operation:
        webPort: 8089
        actutorPort: 9089
        idSuffix: 11
#项目编号
#projectCode:
#    ym: 100
#    pj: 101
#项目配置
project:
    #项目编码
    projectNo: 10
    #控制器类型
    controllerType: 57
    #默认行政区划编码(天津-天津市-武清区-京滨工业园-大禹节水)
    divisionCode: 120114403100
#通讯协议
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    ym:
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    pj:
        comSendUrl: "http://127.0.0.1:8071/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8071/rtuMw/com/rtuLogText"
    test:
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #微信小程序回调地址
    rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive"
#不进行userToken过滤的URL,@ConfigurationProperties要求tokennofilter中所有字母都小写
tokennofilter:
    urls:
        - /sso/sso
        - /remote/comRes/receive
        - /wx/comRes/receive
        - /app/captcha/get
#自动统计配置,自动统计定时任务会每天定时进行
auto-statistics:
    startHour: 0 #开始小时 0
    startMinute: 5 #开始分钟 5
#钉钉消息推送
dingtalk:
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
    batteryVolt: 17
    signalIntensity:
        weak: 10
        ordinary: 20
#        strong: 20
#虚拟卡配置参数
vc:
    #虚拟卡最低余额报警值
    alarmValue: 10
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -178,12 +178,30 @@
#钉钉消息推送
dingtalk:
    robot:
        url: https://oapi.dingtalk.com/robot/send
        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
    at-all: true
    mobile: 18602657034
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerTrampMapper.xml
@@ -35,6 +35,10 @@
    delete from pr_controller_tramp
    where id = #{id,jdbcType=BIGINT}
  </delete>
    <!--清空流浪控制器表-->
    <delete id="emptyTrampController">
        delete from pr_controller_tramp
    </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrControllerTramp">
    <!--@mbg.generated-->
    insert into pr_controller_tramp (id, rtuAddr, protocol,
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOnHourReportLastMapper.xml
@@ -417,5 +417,38 @@
            </if>
        </trim>
    </select>
    <!--获取最近未报数的取水口数量-->
    <select id="getUnReportedIntakesCount" resultType="java.lang.Long">
        SELECT
            count(*)
        FROM  pr_intake pit
        LEFT JOIN `rm_on_hour_report_last` rohrl ON pit.id = rohrl.intake_id
        LEFT JOIN pr_controller pct ON pit.id = pct.intakeId
        WHERE  rohrl.id is NULL
        <if test="timeStart != null and timeStart != '' ">
            OR rohrl.rtu_dt  &lt; #{timeStart}
        </if>
        <if test="timeStop != null and timeStop != '' ">
            OR rohrl.rtu_dt &gt; #{timeStop}
        </if>
        ORDER BY rtu_dt ASC
    </select>
    <!--获取最近未报数的取水口-->
    <select id="getUnReportedIntakes" resultType="com.dy.pipIrrGlobal.voSt.VoIntakeUnReported">
        SELECT
            pit.`name` intakeNum,
            pct.rtuAddr,
            rohrl.rtu_dt rtuDt
        FROM  pr_intake pit
        LEFT JOIN `rm_on_hour_report_last` rohrl ON pit.id = rohrl.intake_id
        LEFT JOIN pr_controller pct ON pit.id = pct.intakeId
        WHERE  rohrl.id is NULL
        <if test="timeStart != null">
            OR rohrl.rtu_dt  &lt; #{timeStart}
        </if>
        <if test="timeStop != null">
            OR rohrl.rtu_dt &gt; #{timeStop}
        </if>
        ORDER BY rtu_dt ASC
    </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveHistoryMapper.xml
@@ -470,7 +470,7 @@
               oh.client_name          AS clientName,
               oh.op_ic_card_no        AS openIcNum,
               oh.op_ic_card_addr      AS openIcAddr,
               oh.op_dt                AS openTime,
               oh.open_dt              AS openTime,
               CASE
                   WHEN oh.op_type = 1 THEN '刷卡开阀'
                   WHEN oh.op_type = 3 THEN '中心站开阀'
@@ -486,7 +486,7 @@
               oh.op_ele_total_amount  AS openEleTotalAmount,
               oh.cl_ic_card_no        AS closeIcNum,
               oh.cl_ic_card_addr      AS closeIcAddr,
               oh.cl_dt                AS closeTime,
               oh.close_dt             AS closeTime,
               CASE
                   WHEN oh.cl_type = 2 THEN '刷卡关阀'
                   WHEN oh.cl_type = 4 THEN '中心站关阀'
@@ -781,6 +781,54 @@
        </trim>
    </select>
    <!--获取指定时间段内用水量低于指定值的农户数量-->
    <select id="getSmallWaterConsumptionClientsCount" resultType="java.lang.Long">
        SELECT COUNT(*) AS recordCount
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and waterConsumption != null">
                (SELECT SUM(his.cl_this_amount)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}) &lt; #{waterConsumption}
            </if>
        </where>
    </select>
    <!--获取指定时间段内用水量低于指定值的农户-->
    <select id="getSmallWaterConsumptionClients" resultType="com.dy.pipIrrGlobal.voSt.VoClient">
        SELECT cli.id                                 AS clientId,
        cli.name                               AS clientName,
        cli.clientNum,
        CONCAT(cli.districtTitle, cli.address) AS address,
        cli.phone,
        cli.idCard,
        IFNULL((SELECT SUM(his.cl_this_amount)
        FROM rm_open_close_valve_history his
        <where>
            his.client_id = cli.id
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != ''">
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        ),0) AS waterConsumption
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and waterConsumption != null">
                (SELECT SUM(his.cl_this_amount)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}) &lt; #{waterConsumption}
            </if>
        </where>
        ORDER BY cli.id
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
            </if>
        </trim>
    </select>
    <!--获取指定时间段内消费金额超过指定值的农户数量-->
    <select id="getLargeAmountSpentClientsCount" resultType="java.lang.Long">
        SELECT COUNT(*) AS recordCount
@@ -818,6 +866,53 @@
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}) > #{amountSpent}
            </if>
        </where>
        ORDER BY cli.id
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
            </if>
        </trim>
    </select>
    <!--获取指定时间段内消费金额低于指定值的农户数量-->
    <select id="getSmallAmountSpentClientsCount" resultType="java.lang.Long">
        SELECT COUNT(*) AS recordCount
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and amountSpent != null">
                (SELECT SUM(his.cl_this_money)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop})  &lt; #{amountSpent}
            </if>
        </where>
    </select>
    <!--获取指定时间段内消费金额低于指定值的农户-->
    <select id="getSmallAmountSpentClients" resultType="com.dy.pipIrrGlobal.voSt.VoClient">
        SELECT cli.id                                 AS clientId,
        cli.name                               AS clientName,
        cli.clientNum,
        CONCAT(cli.districtTitle, cli.address) AS address,
        cli.phone,
        cli.idCard,
        IFNULL((SELECT SUM(his.cl_this_money)
        FROM rm_open_close_valve_history his
        <where>
            his.client_id = cli.id
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != ''">
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        ),0) AS amountSpent
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and amountSpent != null">
                (SELECT SUM(his.cl_this_money)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop})  &lt; #{amountSpent}
            </if>
        </where>
        ORDER BY cli.id
@@ -875,6 +970,54 @@
            </if>
        </trim>
    </select>
    <!--获取指定时间段内用水时长低于指定值的农户数量-->
    <select id="getSmallWaterDurationClientsCount" resultType="java.lang.Long">
        SELECT COUNT(*) AS recordCount
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and waterDuration != null">
                (SELECT SUM(his.cl_this_time)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop})  &lt; #{waterDuration}
            </if>
        </where>
    </select>
    <!--获取指定时间段内用水时长低于指定值的农户-->
    <select id="getSmallWaterDurationClients" resultType="com.dy.pipIrrGlobal.voSt.VoClient">
        SELECT cli.id                                 AS clientId,
        cli.name                               AS clientName,
        cli.clientNum,
        CONCAT(cli.districtTitle, cli.address) AS address,
        cli.phone,
        cli.idCard,
        IFNULL((SELECT SUM(his.cl_this_time)
        FROM rm_open_close_valve_history his
        <where>
            his.client_id = cli.id
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != ''">
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        ),0) AS waterDuration
        FROM se_client cli
        <where>
            <if test="timeStart != null and timeStart != '' and timeStop != null and timeStop != '' and waterDuration != null">
                (SELECT SUM(his.cl_this_time)
                FROM rm_open_close_valve_history his
                WHERE his.client_id = cli.id
                AND his.op_dt BETWEEN #{timeStart} AND #{timeStop})  &lt; #{waterDuration}
            </if>
        </where>
        ORDER BY cli.id
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
            </if>
        </trim>
    </select>
    <!--指定时间段用水量超过指定值的取水口数量-->
    <select id="getUseWaterGtValueIntakesCount" resultType="java.lang.Long">
        select
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseValveLastMapper.xml
@@ -489,7 +489,7 @@
               oh.client_name          AS clientName,
               oh.op_ic_card_no        AS openIcNum,
               oh.op_ic_card_addr      AS openIcAddr,
               oh.op_dt                AS openTime,
               oh.open_dt              AS openTime,
               CASE
                   WHEN oh.op_type = 1 THEN '刷卡开阀'
                   WHEN oh.op_type = 3 THEN '中心站开阀'
@@ -505,7 +505,7 @@
               oh.op_ele_total_amount  AS openEleTotalAmount,
               oh.cl_ic_card_no        AS closeIcNum,
               oh.cl_ic_card_addr      AS closeIcAddr,
               oh.cl_dt                AS closeTime,
               oh.close_dt             AS closeTime,
               CASE
                   WHEN oh.cl_type = 2 THEN '刷卡关阀'
                   WHEN oh.cl_type = 4 THEN '中心站关阀'
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java
@@ -204,6 +204,9 @@
            //工作报太频繁,N次上报处理1次,取值范围是1-100
            ServerProperties.workReportDealOneByTimes =  conf.getSetAttrPlusInt(doc, "config.base", "workReportDealOneByTimes", null, 1, 100, null) ;
            //触发发送钉钉报警消息的取水口日漏损量的最小值(包括但除0.0外)
            ServerProperties.intakeAlarmLossMinValue =  conf.getSetAttrPlusDouble(doc, "config.base", "intakeAlarmLossMinValue", null, 0.0, 1000000.0, null) ;
            //有报警发生时,向钉钉发送消息的间隔时长(分钟)
            ServerProperties.sendDingDingAlarmMsInterval =  conf.getSetAttrPlusInt(doc, "config.base", "sendDingDingAlarmMsInterval", null, 1, 600, null) ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/resource/rtuLog/RtuLogManager.java
@@ -128,14 +128,14 @@
    /**
     * è®°å½•Rtu日志
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @param conent æ—¥å¿—内容
     * @param content æ—¥å¿—内容
     */
    private void log(String rtuAddr , String conent){
        File f = getFileForWrite(ResourceUnit.confVo.rtuLogDir , rtuAddr.trim()) ;
        if(f != null){
            writeLog(f , DateTime.yyyy_MM_dd_HH_mm_ss() + "  " + conent) ;
    private void log(String rtuAddr , String content){
        Object[] res = getFileForWrite(ResourceUnit.confVo.rtuLogDir , rtuAddr.trim()) ;
        if(res[0] != null){
            writeLog((File)res[0] , DateTime.yyyy_MM_dd_HH_mm_ss() + "  " + content) ;
        }else{
            log.error("不能得到地址为:" + rtuAddr + "的Rtu日志文件!") ;
            log.error("不能得到地址为:" + rtuAddr + "的Rtu日志文件!(信息编码" + res[1] + ")") ;
        }
    }
    
@@ -145,11 +145,11 @@
     * @param rtuAddr æŽ§åˆ¶å™¨åœ°å€
     * @return æ—¥å¿—文件
     */
    private File getFileForWrite(String path , String rtuAddr) {
    private Object[] getFileForWrite(String path , String rtuAddr) {
        File dir = new File(path) ;
        if(!dir.exists()){
            if(!dir.mkdirs()){
                return null ;
                return new Object[]{null, 1} ;
            }
        }
        File f = new File(path + rtuAddr + ".log");
@@ -162,43 +162,44 @@
                    File oldestLog = new File(path + rtuAddr + ".log." + (ResourceUnit.confVo.rtuLogFileMaxCount - 1)) ;
                    if(oldestLog.exists()){
                        if(!oldestLog.delete()){
                            return null ;
                            return new Object[]{null, 2} ;
                        }
                    }
                    for(int i = (ResourceUnit.confVo.rtuLogFileMaxCount - 2) ; i > 0  ; i--){
                        File oldLog = new File(path + rtuAddr + ".log." + i) ;
                        if(oldLog.exists()){
                            if(!oldLog.renameTo(new File(path + rtuAddr + ".log." + (i + 1)))){
                                return null ;
                                return new Object[]{null, 3} ;
                            }
                            if(!oldLog.delete()){
                                return null ;
                                return new Object[]{null, 4} ;
                            }
                        }
                    }
                    if(!f.renameTo(new File(path + rtuAddr + ".log." + 1))){
                        return null ;
                        return new Object[]{null, 5} ;
                    }
                    if(!f.delete()){
                        return null ;
                    }
                    //2024-10-11 ä¸Šé¢rename了,应该不用delete了
                    //if(!f.delete()){
                    //    return new Object[]{null, 6} ;
                    //}
                    f = new File(path + rtuAddr + ".log");
                    if(!f.exists()){
                        if(f.createNewFile()){
                            return f ;
                            return new Object[]{f, 7} ;
                        }else{
                            return null ;
                            return new Object[]{null, 8} ;
                        }
                    }
                }else{
                    return f ;
                    return new Object[]{f, 9} ;
                }
            }else{
                if(f.createNewFile()){
                    return f ;
                    return new Object[]{f, 10} ;
                }else{
                    return null ;
                    return new Object[]{null, 11} ;
                }
            }
        } catch (Exception e) {
@@ -212,7 +213,7 @@
                log.error("关闭Rtu日志文件(" + f.getName() + ")读入流时出错" , e) ;
            }
        }
        return null;
        return new Object[]{null, 12} ;
    }
    
    /**
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/ServerProperties.java
@@ -46,6 +46,9 @@
    //工作报太频繁,N次上报处理1次
    public static Integer workReportDealOneByTimes = 5 ;
    //触发发送钉钉报警消息的取水口日漏损量的最小值(包括但除0.0外)
    public static Double intakeAlarmLossMinValue = 1.0 ;
    //有报警发生时,向钉钉发送消息的间隔时长(分钟)
    public static Integer sendDingDingAlarmMsInterval = 60 ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java
@@ -3,8 +3,10 @@
import com.dy.common.queue.NodeObj;
import com.dy.common.springUtil.SpringContextUtil;
import com.dy.pipIrrGlobal.config.DingTalk;
import com.dy.rtuMw.server.ServerProperties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.core.env.Environment;
/**
 * @Author: liurunyu
@@ -27,7 +29,8 @@
     */
    public boolean dealSelf(){
        DingTalk dingTalk = SpringContextUtil.getBean(DingTalk.class) ;
        dingTalk.sendMessage(ms);
        Environment env = SpringContextUtil.getApplicationContext().getEnvironment() ;
        dingTalk.sendMessage(ServerProperties.orgTag, env, ms);
        return true ;
    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/RtuLogDealer.java
@@ -25,10 +25,6 @@
        RtuLogNode logNode = new RtuLogNode(rtuAddr, content) ;
        
        ResourceUnit.getInstance().rtuLog(logNode);
        /////////////////////
        // æˆ–者向消息中间件发消息
        ////////////////////
    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandObj.java
@@ -86,11 +86,11 @@
            this.lastSendStamp = now ;
            
            //记录日志
            RtuLogDealer.log(this.result.rtuAddr, "下行数据 " + this.result.downCode + ":" + this.result.downBufHex);
            RtuLogDealer.log(this.result.rtuAddr, "下行数据 " + this.result.downCode + (this.result.downCodeName==null?"":("(" + this.result.downCodeName + ")")) + ":" + this.result.downBufHex);
            //记录状态
            RtuStatusDealer.downData(this.result.rtuAddr, this.result.downBuffer.length);
            
            log.info("下行RTU(地址=" + this.result.rtuAddr + ")命令(功能码=" + this.result.downCode + ") "  + this.result.downBufHex ) ;
            log.info("下行RTU(地址=" + this.result.rtuAddr + ")命令[功能码=" + this.result.downCode + (this.result.downCodeName==null?"":("(" + this.result.downCodeName + ")")) + "] "  + this.result.downBufHex ) ;
        }    
        
        return removeNodeFromCach ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
@@ -20,7 +20,9 @@
        log.info("网络连接建立,终端网址是:" + session.getRemoteAddress().toString()) ;
        if(session != null) {
            String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey);
            RtuLogDealer.log(rtuAddr, "网络接入");
            if(rtuAddr != null && !rtuAddr.trim().equals("")){
                RtuLogDealer.log(rtuAddr, "网络接入");
            }
        }
    }
@@ -32,11 +34,11 @@
        if(session != null){
             String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
             if(rtuAddr != null){
             if(rtuAddr != null && !rtuAddr.trim().equals("")){
                 //记录状态
                 RtuStatusDealer.offLine(rtuAddr);
                RtuLogDealer.log(rtuAddr, "网络连接关闭");
             }
            RtuLogDealer.log(rtuAddr, "网络连接关闭");
            log.info("网络连接关闭,"
                    + (rtuAddr==null?"":("终端地址是:" + rtuAddr))) ;
                    //+ (session==null?"":(session.getRemoteAddress() == null?"":(session.getRemoteAddress().toString()==null?"":(",终端网址是:" + session.getRemoteAddress().toString()))))) ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealAlarmStatus.java
@@ -109,19 +109,19 @@
            po.intakeId = controller==null?null:controller.getIntakeId() ;
            po.rtuAddr = rtuAddr ;
            po.valueFrom(dV1_0_1, rtuDt, alarmVo, stateVo);
            if(alarmVo.hasAlarm()){
            if(alarmVo.hasAlarmExcludeLoss()){
                po.sendMsTime = System.currentTimeMillis() ;
                this.sendMessage(controller, alarmVo);
            }
            sv.saveRmAlarmStateLast(po) ;
        }else{
            if(po.sendMsTime == null){
                if(alarmVo.hasAlarm()) {
                if(alarmVo.hasAlarmExcludeLoss()) {
                    po.sendMsTime = System.currentTimeMillis();
                    this.sendMessage(controller, alarmVo);
                }
            }else{
                if(alarmVo.hasAlarm()){
                if(alarmVo.hasAlarmExcludeLoss()){
                    Long now = System.currentTimeMillis() ;
                    if(((now - po.sendMsTime) / (1000 * 60)) > ServerProperties.sendDingDingAlarmMsInterval){
                        //大于规定的间隔时间
@@ -171,7 +171,7 @@
     * @param alarmVo
     */
    private void sendMessage(PrController controller, DataAlarmVo alarmVo){
        String ms = "取水口“" + controller.getIntakeName() + "”产生报警:" + alarmVo.alarmContent() ;
        String ms = "取水口“" + controller.getIntakeName() + "”产生报警:" + alarmVo.alarmContentExcludeLoss() ;
        try{
            SendMsCache.cacheMs(ms);
        }catch (Exception e){
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealOnHourReport.java
@@ -2,6 +2,7 @@
import com.dy.common.mw.protocol.Data;
import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1;
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataAlarmVo;
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCdC0Vo;
import com.dy.common.mw.protocol.p206V202404.DataV202404;
import com.dy.common.mw.protocol.p206V202404.upVos.DataCd83Vo;
@@ -10,6 +11,8 @@
import com.dy.pipIrrGlobal.pojoRm.RmOnHourReportLast;
import com.dy.pipIrrGlobal.pojoRm.RmTimingReportHistory;
import com.dy.pipIrrGlobal.pojoRm.RmTimingReportLast;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.forMs.SendMsCache;
import com.dy.rtuMw.server.rtuData.TaskSurpport;
import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
import org.apache.logging.log4j.LogManager;
@@ -76,11 +79,17 @@
            po.rtuAddr = rtuAddr;
            po.valueFrom(dV1_0_1, cdData);
            sv.saveRmOnHourReportLast(po) ;
            if(po.lossAmount >= ServerProperties.intakeAlarmLossMinValue){
                this.sendMessage(controller, po.lossAmount);
            }
        }else{
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.valueFrom(dV1_0_1, cdData);
            sv.updateRmOnHourReportLast(po);
            if(po.lossAmount >= ServerProperties.intakeAlarmLossMinValue){
                this.sendMessage(controller, po.lossAmount);
            }
        }
    }
@@ -101,5 +110,21 @@
        po.valueFrom(dV1_0_1, cdData);
        sv.saveRmOnHourReportHistory(po); ;
    }
    /**
     * å‘钉钉发送消息
     * @param controller
     */
    private void sendMessage(PrController controller, Double lossAmount){
        String ms = "取水口“" + controller.getIntakeName() + "”漏水报警,今日漏损量" + lossAmount + "立方米";
        try{
            SendMsCache.cacheMs(ms);
        }catch (Exception e){
            log.error("缓存钉钉消息异常:", e);
        }
    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
@@ -165,7 +165,7 @@
        }else{
            MidResult[] midRs = dri.parseData(ServerProperties.isLowPower, rtuAddrAtHead, upBuf, upHex, new DriverParserDataCallback(){
                @Override
                public void callback(String rtuAddrAtHead, String code, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData) {
                public void callback(String rtuAddrAtHead, String code, String codeName, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData) {
                    //更新终端状态
                    if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){
                        //数据头中的RTU地址与数据中的RTU地址不一致,更换成数据中的RTU地址
@@ -193,9 +193,9 @@
                    //记录日志
                    if(parseFail){
                        RtuLogDealer.log(rtuAddr, (isOnLine?"上线数据 ":"上行数据 ") + "" + code + ":" + upHex + "(解析失败)");
                        RtuLogDealer.log(rtuAddr, (isOnLine?"上线数据 ":"上行数据 ") +  code + ("(" + codeName + ")") + ":" + upHex + "(解析失败)");
                    }else{
                        RtuLogDealer.log(rtuAddr, (isOnLine?"上线数据 ":"上行数据 ") + "" + code + ":" + upHex);
                        RtuLogDealer.log(rtuAddr, (isOnLine?"上线数据 ":"上行数据 ") +  code + ("(" + codeName + ")") + ":" + upHex);
                    }
                }
            }) ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -20,7 +20,10 @@
import java.io.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -102,18 +105,26 @@
     */
    @GetMapping("/rtuLogText")
    public BaseResponse<List<String>> rtuLogText(String rtuAddr){
        List<String> list = new ArrayList() ;
        List<String> list ;
        File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
        if(logFile != null && logFile.exists()){
            BufferedReader reader = null ;
            try {
                reader = new BufferedReader(new FileReader(logFile)) ;
                //新的实现方法
                Stream<String> linesStream = reader.lines() ;
                //list = linesStream.toList() ; //按原来顺序
                list = linesStream.sorted(Comparator.reverseOrder()).collect(Collectors.toList()) ;//倒序
                /* åŽŸæ¥çš„å®žçŽ°æ–¹æ³•
                list = new ArrayList() ;
                String line ;
                while((line = reader.readLine()) != null){
                    list.add(line) ;
                }
                */
                return BaseResponseUtils.buildSuccess(list);
            } catch (Exception e) {
                list = new ArrayList() ;
                list.add("读取控制器(" + rtuAddr + ")的日志文件异常:" + (e.getMessage() == null?"":("," + e.getMessage()))) ;
                return BaseResponseUtils.buildSuccess(list);
            }finally{
@@ -125,6 +136,7 @@
                }
            }
        }else{
            list = new ArrayList() ;
            list.add("未得到控制器(" + rtuAddr + ")的日志文件") ;
            return BaseResponseUtils.buildSuccess(list);
        }
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database(test²âÊÔ).yml
New file
@@ -0,0 +1,17 @@
# æ•°æ®æºé…ç½®
spring:
    datasource: #配置数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/pipIrr_test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
        username: root
        password: dysql,;.abc!@#
        druid:
            #数据源名称:当存在多个数据源时,设置名字可以很方便的来进行区分,默认自动生成名称,格式是:"DataSource-" + System.identityHashCode(this)
            #name: name: druid-mysql-mw-rtu å•数据源不起作用,所以注释掉
            #配置初始化大小、最小、最大
            initialSize: 10
            minIdle: 10
            maxActive: 200
            # èŽ·å–è¿žæŽ¥æ—¶æœ€å¤§ç­‰å¾…æ—¶é—´,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁
            maxWait: 60000
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database(ymԪı).yml
New file
@@ -0,0 +1,17 @@
# æ•°æ®æºé…ç½®
spring:
    datasource: #配置数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
        username: root
        password: dysql,;.abc!@#
        druid:
            #数据源名称:当存在多个数据源时,设置名字可以很方便的来进行区分,默认自动生成名称,格式是:"DataSource-" + System.identityHashCode(this)
            #name: name: druid-mysql-mw-rtu å•数据源不起作用,所以注释掉
            #配置初始化大小、最小、最大
            initialSize: 10
            minIdle: 10
            maxActive: 200
            # èŽ·å–è¿žæŽ¥æ—¶æœ€å¤§ç­‰å¾…æ—¶é—´,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁
            maxWait: 60000
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -4,7 +4,6 @@
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
#        url: jdbc:mysql://8.130.130.233:3306/pipIrr_test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
        username: root
        password: dysql,;.abc!@#
        druid:
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test²âÊÔ).xml
New file
@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <server name="通信中间件" showStartInfo="true" company="http://www.dyjs.com"/>
    <!--
    åŸºæœ¬é…ç½®
    orgTag æœºæž„tag(对应机构tag,和数据源后缀)
    isLowPower: æ˜¯å¦ä¸ºä½ŽåŠŸè€—
    onlyDealRtus:只处理指定RTU地址设备,其他设备数据丢弃,多个RTU地址用英文逗号隔开,
    onlyOneProtocol:在支持多通信协议时,只有RTU上线了,才能识别出该RTU实际用的通信协议,进而用此协议解析上行数据及构造下行命令。
                     å¦‚æžœRTU未曾上线(通信中间件启动后该RTU未曾上线),那么在向它发送下行命令时,不能判断出其采用的协议,也不能构造命令,尤其是低功耗情况下,不上线是正常现象。
                     å½“只有一个协议情况下,在RTU未曾上线时,也能用此协议构造命令并缓存下来,尤其适合低功耗情况。
    onlyOneProtocol=true: é€šä¿¡ä¸­é—´ä»¶å½“前只有一个协议
    downComandMaxResendTimes: ä¸‹è¡Œå‘½ä»¤å…è®¸å‘送的最大次数X,即允许重发X-1
    commandSendInterval: é’ˆå¯¹ä¸€ä¸ªRTU,下发命令的时间间隔(秒)
    cachWaitResultTimeout: å‘½ä»¤å·²ç»å‘送达最大次数,仍未收到命令结果,需要在缓存继续等待,其等待最大时长(秒),本系统RTU,对于开关泵命令,其先执行开关泵报,然后再进行命令应答,所以此值 è¦å¤§ä¸€äº›
    offLineCachTimeout: ä¸åœ¨çº¿ç¼“存的命令最大缓存时长(秒)
    lastUpDataTimeLive: TCP上行数据时刻缓存时长(毫秒),当达到时长时,TCP上行数据时刻被清空,采用TCP上行数据时刻目的是,阻止上行数据同时下发数据,因为RTU处理不过来(经初次实验,1秒还是有问题,2秒无问题)
    dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1
    cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关
    cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关
    disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100
    workReportDealOneByTimes: å·¥ä½œæŠ¥å¤ªé¢‘繁,N次上报处理1次,取值范围是1-100
    intakeAlarmLossMinValue: è§¦å‘发送钉钉报警消息的取水口日漏损量的最小值(包括)
    sendDingDingAlarmMsInterval: æœ‰æŠ¥è­¦å‘生时,向钉钉发送消息的间隔时长(分钟)
     -->
    <base
        orgTag="test"
        isLowPower="false"
        onlyDealRtus=""
        onlyOneProtocol="false"
        downComandMaxResendTimes="1"
        commandSendInterval="2"
        cachWaitResultTimeout="120"
        offLineCachTimeout="86400"
        lastUpDataTimeLive="500"
        dbDataIdSuffix="0"
        cacheUpDownDataWarnCount="100000"
        cacheUpDownDataMaxCount="110000"
        disconnectedByNoUpDataMinutes="3"
        workReportDealOneByTimes="5"
        intakeAlarmLossMinValue="1"
        sendDingDingAlarmMsInterval="60"
    />
    <!--
    2024-08-22 æ­¤é…ç½®æš‚时未应用
    centerAddr: ä¸­å¿ƒåœ°å€ï¼Œå½“前,centerAddr未用到
    synchroRtuClock: æ˜¯å¦å¯¹RTU校时
    synchroRtuClockTimepieces:当RTU与服务器时钟相差一定毫秒(配置文件是秒钟)后,进行校时
     -->
    <protocol
        centerAddr="1"
        synchroRtuClock="true"
        synchroRtuClockTimepieces="300000"
    />
    <!-- 2024-10-08 æ­¤é…ç½®æš‚时未应用
    è½¯ä»¶å‡çº§ -->
    <updateRtuSoft enable="true">
        <soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
            <newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
        </soft1>
        <!--
        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
        </soft2>
         -->
    </updateRtuSoft>
    <!--
    æ”¯æŒæ¨¡å—
    çŸ­å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒçŸ­çš„工作任务
    short_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制 ï¼Œè®¾ç½®ä¸º0,表示不启动线程池
    short_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
    short_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等
    short_busyTimeout:线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒
    é•¿å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒé•¿çš„工作任务,例如数据库存取操作
    long_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制,设置为0,表示不启动线程池
    long_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
    long_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程
    long_busyTimeout:线程不间断工作时长(单位为秒)超时限,若为-1,不受限制
    enableThreadPool:是否启用线程池
     -->
    <support
        short_maxThread="6"
        short_minThread="6"
        short_freeTimeout="60"
        short_busyTimeout="5"
        long_maxThread="6"
        long_minThread="6"
        long_freeTimeout="60"
        long_busyTimeout="-1"
        enableThreadPool="true"
    />
    <!--
    èµ„源模块
    rtuLogDir:RTU日志文件存储目录(相对目录)
    rtuLogFileMaxSize:RTU日志文件最大字节数(KB)
    rtuLogFileMaxCount:RTU日志文件最大文件数
    monitorInterval:Rtu状态监视间隔(分钟)
    saveDbInterval:Rtu状态存数据库间隔(分钟)
     -->
    <resource
        rtuLogDir="rtuLogs/"
        rtuLogFileMaxSize="1000"
        rtuLogFileMaxCount="2"
        monitorInterval="2"
        saveDbInterval="10"
    />
    <!--
    2024-08-22 æ­¤é…ç½®æš‚时未应用
    port:rmi服务端口号
    context:rmi服务上下文
     -->
    <rmi enable="true"
         port="65400"
         context="rtuMw"
    />
    <!--
    sleepBigBusy:主线程大忙时每次执行间隔时长(毫秒)
    sleepSmallBusy:主线程小忙时每次执行间隔时长(毫秒)
    queueWarnSize: ç¼“存队列节点数警告数量
    queueMaxSize: ç¼“存队列节点数最大数量
     -->
    <core
        sleepBigBusy="100"
        sleepSmallBusy="500"
        queueWarnSize="100000"
        queueMaxSize="300000"
    />
    <!--
    port:端口
    processors: Mina IO å¤„理上下行数据的线程数,一般是CPU总核数+1
    idle: å‘呆时长(秒)
     -->
    <tcp enable="true"
         port="65000"
         processors="3"
         idle="10"
    />
</config>
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ymԪı).xml
New file
@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
        <server name="通信中间件" showStartInfo="true" company="http://www.dyjs.com"/>
        <!--
        åŸºæœ¬é…ç½®
        orgTag æœºæž„tag(对应机构tag,和数据源后缀)
        isLowPower: æ˜¯å¦ä¸ºä½ŽåŠŸè€—
        onlyDealRtus:只处理指定RTU地址设备,其他设备数据丢弃,多个RTU地址用英文逗号隔开,
        onlyOneProtocol:在支持多通信协议时,只有RTU上线了,才能识别出该RTU实际用的通信协议,进而用此协议解析上行数据及构造下行命令。
                         å¦‚æžœRTU未曾上线(通信中间件启动后该RTU未曾上线),那么在向它发送下行命令时,不能判断出其采用的协议,也不能构造命令,尤其是低功耗情况下,不上线是正常现象。
                         å½“只有一个协议情况下,在RTU未曾上线时,也能用此协议构造命令并缓存下来,尤其适合低功耗情况。
        onlyOneProtocol=true: é€šä¿¡ä¸­é—´ä»¶å½“前只有一个协议
        downComandMaxResendTimes: ä¸‹è¡Œå‘½ä»¤å…è®¸å‘送的最大次数X,即允许重发X-1
        commandSendInterval: é’ˆå¯¹ä¸€ä¸ªRTU,下发命令的时间间隔(秒)
        cachWaitResultTimeout: å‘½ä»¤å·²ç»å‘送达最大次数,仍未收到命令结果,需要在缓存继续等待,其等待最大时长(秒),本系统RTU,对于开关泵命令,其先执行开关泵报,然后再进行命令应答,所以此值 è¦å¤§ä¸€äº›
        offLineCachTimeout: ä¸åœ¨çº¿ç¼“存的命令最大缓存时长(秒)
        lastUpDataTimeLive: TCP上行数据时刻缓存时长(毫秒),当达到时长时,TCP上行数据时刻被清空,采用TCP上行数据时刻目的是,阻止上行数据同时下发数据,因为RTU处理不过来(经初次实验,1秒还是有问题,2秒无问题)
        dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1
        cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关
        cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关
        disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100
        workReportDealOneByTimes: å·¥ä½œæŠ¥å¤ªé¢‘繁,N次上报处理1次,取值范围是1-100
        intakeAlarmLossMinValue: è§¦å‘发送钉钉报警消息的取水口日漏损量的最小值(包括)
        sendDingDingAlarmMsInterval: æœ‰æŠ¥è­¦å‘生时,向钉钉发送消息的间隔时长(分钟)
         -->
        <base
            orgTag="ym"
            isLowPower="false"
            onlyDealRtus=""
            onlyOneProtocol="false"
            downComandMaxResendTimes="1"
            commandSendInterval="2"
            cachWaitResultTimeout="120"
            offLineCachTimeout="86400"
            lastUpDataTimeLive="500"
            dbDataIdSuffix="0"
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            intakeAlarmLossMinValue="1"
            sendDingDingAlarmMsInterval="60"
        />
        <!--
        2024-08-22 æ­¤é…ç½®æš‚时未应用
        centerAddr: ä¸­å¿ƒåœ°å€ï¼Œå½“前,centerAddr未用到
        synchroRtuClock: æ˜¯å¦å¯¹RTU校时
        synchroRtuClockTimepieces:当RTU与服务器时钟相差一定毫秒(配置文件是秒钟)后,进行校时
         -->
        <protocol
            centerAddr="1"
            synchroRtuClock="true"
            synchroRtuClockTimepieces="300000"
        />
        <!-- 2024-10-08 æ­¤é…ç½®æš‚时未应用
         è½¯ä»¶å‡çº§ -->
        <updateRtuSoft enable="true">
            <soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
                <newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
            </soft1>
            <!--
            <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
                <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
            </soft2>
             -->
        </updateRtuSoft>
        <!--
        æ”¯æŒæ¨¡å—
        çŸ­å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒçŸ­çš„工作任务
        short_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制 ï¼Œè®¾ç½®ä¸º0,表示不启动线程池
        short_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
        short_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等
        short_busyTimeout:线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒
        é•¿å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒé•¿çš„工作任务,例如数据库存取操作
        long_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制,设置为0,表示不启动线程池
        long_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
        long_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程
        long_busyTimeout:线程不间断工作时长(单位为秒)超时限,若为-1,不受限制
        enableThreadPool:是否启用线程池
         -->
        <support
            short_maxThread="6"
            short_minThread="6"
            short_freeTimeout="60"
            short_busyTimeout="5"
            long_maxThread="6"
            long_minThread="6"
            long_freeTimeout="60"
            long_busyTimeout="-1"
            enableThreadPool="true"
        />
        <!--
        èµ„源模块
        rtuLogDir:RTU日志文件存储目录(相对目录)
        rtuLogFileMaxSize:RTU日志文件最大字节数(B)
        rtuLogFileMaxCount:RTU日志文件最大文件数
        monitorInterval:Rtu状态监视间隔(分钟)
        saveDbInterval:Rtu状态存数据库间隔(分钟)
         -->
        <resource
            rtuLogDir="rtuLogs/"
            rtuLogFileMaxSize="100000"
            rtuLogFileMaxCount="2"
            monitorInterval="2"
            saveDbInterval="10"
        />
        <!--
        2024-08-22 æ­¤é…ç½®æš‚时未应用
        port:rmi服务端口号
        context:rmi服务上下文
         -->
        <rmi enable="true"
            port="65400"
            context="rtuMw"
        />
        <!--
        sleepBigBusy:主线程大忙时每次执行间隔时长(毫秒)
        sleepSmallBusy:主线程小忙时每次执行间隔时长(毫秒)
        queueWarnSize: ç¼“存队列节点数警告数量
        queueMaxSize: ç¼“存队列节点数最大数量
         -->
        <core
            sleepBigBusy="100"
            sleepSmallBusy="500"
            queueWarnSize="100000"
            queueMaxSize="300000"
        />
        <!--
        port:端口
        processors: Mina IO å¤„理上下行数据的线程数,一般是CPU总核数+1
        idle: å‘呆时长(秒)
         -->
        <tcp enable="true"
            port="60000"
            processors="3"
            idle="10"
        />
</config>
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -1,145 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
        <server name="通信中间件" showStartInfo="true" company="http://www.dyjs.com"/>
        <!--
        åŸºæœ¬é…ç½®
        orgTag æœºæž„tag(对应机构tag,和数据源后缀)
        isLowPower: æ˜¯å¦ä¸ºä½ŽåŠŸè€—
        onlyDealRtus:只处理指定RTU地址设备,其他设备数据丢弃,多个RTU地址用英文逗号隔开,
        onlyOneProtocol:在支持多通信协议时,只有RTU上线了,才能识别出该RTU实际用的通信协议,进而用此协议解析上行数据及构造下行命令。
                         å¦‚æžœRTU未曾上线(通信中间件启动后该RTU未曾上线),那么在向它发送下行命令时,不能判断出其采用的协议,也不能构造命令,尤其是低功耗情况下,不上线是正常现象。
                         å½“只有一个协议情况下,在RTU未曾上线时,也能用此协议构造命令并缓存下来,尤其适合低功耗情况。
        onlyOneProtocol=true: é€šä¿¡ä¸­é—´ä»¶å½“前只有一个协议
        downComandMaxResendTimes: ä¸‹è¡Œå‘½ä»¤å…è®¸å‘送的最大次数X,即允许重发X-1
        commandSendInterval: é’ˆå¯¹ä¸€ä¸ªRTU,下发命令的时间间隔(秒)
        cachWaitResultTimeout: å‘½ä»¤å·²ç»å‘送达最大次数,仍未收到命令结果,需要在缓存继续等待,其等待最大时长(秒),本系统RTU,对于开关泵命令,其先执行开关泵报,然后再进行命令应答,所以此值 è¦å¤§ä¸€äº›
        offLineCachTimeout: ä¸åœ¨çº¿ç¼“存的命令最大缓存时长(秒)
        lastUpDataTimeLive: TCP上行数据时刻缓存时长(毫秒),当达到时长时,TCP上行数据时刻被清空,采用TCP上行数据时刻目的是,阻止上行数据同时下发数据,因为RTU处理不过来(经初次实验,1秒还是有问题,2秒无问题)
        dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1
        cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关
        cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关
        disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100
        workReportDealOneByTimes: å·¥ä½œæŠ¥å¤ªé¢‘繁,N次上报处理1次,取值范围是1-100
        sendDingDingAlarmMsInterval: æœ‰æŠ¥è­¦å‘生时,向钉钉发送消息的间隔时长(分钟)
         -->
        <base
            orgTag="ym"
            isLowPower="false"
            onlyDealRtus=""
            onlyOneProtocol="false"
            downComandMaxResendTimes="1"
            commandSendInterval="2"
            cachWaitResultTimeout="120"
            offLineCachTimeout="86400"
            lastUpDataTimeLive="500"
            dbDataIdSuffix="0"
            cacheUpDownDataWarnCount="100000"
            cacheUpDownDataMaxCount="110000"
            disconnectedByNoUpDataMinutes="3"
            workReportDealOneByTimes="5"
            sendDingDingAlarmMsInterval="60"
        />
        <!--
        2024-08-22 æš‚时不用
        centerAddr: ä¸­å¿ƒåœ°å€ï¼Œå½“前,centerAddr未用到
        synchroRtuClock: æ˜¯å¦å¯¹RTU校时
        synchroRtuClockTimepieces:当RTU与服务器时钟相差一定毫秒(配置文件是秒钟)后,进行校时
         -->
        <protocol
            centerAddr="1"
            synchroRtuClock="true"
            synchroRtuClockTimepieces="300000"
        />
    <server name="通信中间件" showStartInfo="true" company="http://www.dyjs.com"/>
    <!--
    åŸºæœ¬é…ç½®
    orgTag æœºæž„tag(对应机构tag,和数据源后缀)
    isLowPower: æ˜¯å¦ä¸ºä½ŽåŠŸè€—
    onlyDealRtus:只处理指定RTU地址设备,其他设备数据丢弃,多个RTU地址用英文逗号隔开,
    onlyOneProtocol:在支持多通信协议时,只有RTU上线了,才能识别出该RTU实际用的通信协议,进而用此协议解析上行数据及构造下行命令。
                     å¦‚æžœRTU未曾上线(通信中间件启动后该RTU未曾上线),那么在向它发送下行命令时,不能判断出其采用的协议,也不能构造命令,尤其是低功耗情况下,不上线是正常现象。
                     å½“只有一个协议情况下,在RTU未曾上线时,也能用此协议构造命令并缓存下来,尤其适合低功耗情况。
    onlyOneProtocol=true: é€šä¿¡ä¸­é—´ä»¶å½“前只有一个协议
    downComandMaxResendTimes: ä¸‹è¡Œå‘½ä»¤å…è®¸å‘送的最大次数X,即允许重发X-1
    commandSendInterval: é’ˆå¯¹ä¸€ä¸ªRTU,下发命令的时间间隔(秒)
    cachWaitResultTimeout: å‘½ä»¤å·²ç»å‘送达最大次数,仍未收到命令结果,需要在缓存继续等待,其等待最大时长(秒),本系统RTU,对于开关泵命令,其先执行开关泵报,然后再进行命令应答,所以此值 è¦å¤§ä¸€äº›
    offLineCachTimeout: ä¸åœ¨çº¿ç¼“存的命令最大缓存时长(秒)
    lastUpDataTimeLive: TCP上行数据时刻缓存时长(毫秒),当达到时长时,TCP上行数据时刻被清空,采用TCP上行数据时刻目的是,阻止上行数据同时下发数据,因为RTU处理不过来(经初次实验,1秒还是有问题,2秒无问题)
    dbDataIdSuffix:数据库数据id生成器的id后缀,0是默认的后缀,一般web系统应用,数据中间件id后缀大于等于1
    cacheUpDownDataWarnCount:上下行数据缓存队列中缓存数据个数的报警量,这个与现实项目所接水表数相关
    cacheUpDownDataMaxCount:上下行数据缓存队列中缓存数据个数的最大值,这个与现实项目所接水表数相关
    disconnectedByNoUpDataMinutes:没有上行数据的分钟数,达到这个分钟数,认为RTU断网了,取值范围是2-100
    workReportDealOneByTimes: å·¥ä½œæŠ¥å¤ªé¢‘繁,N次上报处理1次,取值范围是1-100
    intakeAlarmLossMinValue: è§¦å‘发送钉钉报警消息的取水口日漏损量的最小值(包括但除0.0外)(小数)
    sendDingDingAlarmMsInterval: æœ‰æŠ¥è­¦å‘生时,向钉钉发送消息的间隔时长(分钟)
     -->
    <base
        orgTag="ym"
        isLowPower="false"
        onlyDealRtus=""
        onlyOneProtocol="false"
        downComandMaxResendTimes="1"
        commandSendInterval="2"
        cachWaitResultTimeout="120"
        offLineCachTimeout="86400"
        lastUpDataTimeLive="500"
        dbDataIdSuffix="0"
        cacheUpDownDataWarnCount="100000"
        cacheUpDownDataMaxCount="110000"
        disconnectedByNoUpDataMinutes="3"
        workReportDealOneByTimes="5"
        intakeAlarmLossMinValue="1.0"
        sendDingDingAlarmMsInterval="60"
    />
        <!-- è½¯ä»¶å‡çº§ -->
        <updateRtuSoft enable="true">
            <soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
                <newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
            </soft1>
            <!--
            <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
                <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
            </soft2>
             -->
        </updateRtuSoft>
        <!--
        æ”¯æŒæ¨¡å—
        çŸ­å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒçŸ­çš„工作任务
        short_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制 ï¼Œè®¾ç½®ä¸º0,表示不启动线程池
        short_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
        short_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等
        short_busyTimeout:线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒
        é•¿å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒé•¿çš„工作任务,例如数据库存取操作
        long_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制,设置为0,表示不启动线程池
        long_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
        long_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程
        long_busyTimeout:线程不间断工作时长(单位为秒)超时限,若为-1,不受限制
        enableThreadPool:是否启用线程池
         -->
        <support
            short_maxThread="6"
            short_minThread="6"
            short_freeTimeout="60"
            short_busyTimeout="5"
            long_maxThread="6"
            long_minThread="6"
            long_freeTimeout="60"
            long_busyTimeout="-1"
            enableThreadPool="true"
        />
        <!--
        èµ„源模块
        rtuLogDir:RTU日志文件存储目录(相对目录)
        rtuLogFileMaxSize:RTU日志文件最大字节数(KB)
        rtuLogFileMaxCount:RTU日志文件最大文件数
        monitorInterval:Rtu状态监视间隔(分钟)
        saveDbInterval:Rtu状态存数据库间隔(分钟)
         -->
        <resource
            rtuLogDir="rtuLogs/"
            rtuLogFileMaxSize="1000"
            rtuLogFileMaxCount="2"
            monitorInterval="2"
            saveDbInterval="10"
        />
    <!--
    2024-08-22 æ­¤é…ç½®æš‚时未应用
    centerAddr: ä¸­å¿ƒåœ°å€ï¼Œå½“前,centerAddr未用到
    synchroRtuClock: æ˜¯å¦å¯¹RTU校时
    synchroRtuClockTimepieces:当RTU与服务器时钟相差一定毫秒(配置文件是秒钟)后,进行校时
     -->
    <protocol
        centerAddr="1"
        synchroRtuClock="true"
        synchroRtuClockTimepieces="300000"
    />
    <!-- 2024-10-08 æ­¤é…ç½®æš‚时未应用
     è½¯ä»¶å‡çº§ -->
    <updateRtuSoft enable="true">
        <soft1 enable="true" oldVersionName="meter_v2_0,meter_v1_0" >
            <newVersion newVersionName="meter_v3_0" file="rtuSoft/meter_v3_0.txt"></newVersion>
        </soft1>
        <!--
        2024-08-22 æš‚时不用
        port:rmi服务端口号
        context:rmi服务上下文
         -->
        <rmi enable="true"
            port="65400"
            context="rtuMw"
        />
        <!--
        sleepBigBusy:主线程大忙时每次执行间隔时长(毫秒)
        sleepSmallBusy:主线程小忙时每次执行间隔时长(毫秒)
        queueWarnSize: ç¼“存队列节点数警告数量
        queueMaxSize: ç¼“存队列节点数最大数量
         -->
        <core
            sleepBigBusy="100"
            sleepSmallBusy="500"
            queueWarnSize="100000"
            queueMaxSize="300000"
        />
        <!--
        port:端口
        processors: Mina IO å¤„理上下行数据的线程数,一般是CPU总核数+1
        idle: å‘呆时长(秒)
         -->
        <tcp enable="true"
            port="60000"
            processors="3"
            idle="10"
        />
        <soft2 enable="false" oldVersionName="rtu_v1_0,rtu_v2_0,rtu_v3_0" >
            <newVersion newVersionName="rtu_v4_0" file="rtuSoft/rtu_v4_0.txt"></newVersion>
        </soft2>
         -->
    </updateRtuSoft>
    <!--
    æ”¯æŒæ¨¡å—
    çŸ­å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒçŸ­çš„工作任务
    short_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制 ï¼Œè®¾ç½®ä¸º0,表示不启动线程池
    short_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
    short_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程,为了不清除,把minThread与maxThread设置相等
    short_busyTimeout:线程不间断工作时长(单位为秒)超时限,认为线程已经了崩溃,将强制清除,短工作时长设置为5秒
    é•¿å·¥ä½œæ—¶é•¿çº¿ç¨‹æ± ï¼Œçº¿ç¨‹è´Ÿè´£ç”¨æ—¶è¾ƒé•¿çš„工作任务,例如数据库存取操作
    long_maxThread: æ± ä¸­æœ€å¤§çº¿ç¨‹æ•°ä¸ºæ‰€æœ‰CPU核数+1(short池与long池各分一半),若为-1,不受限制,设置为0,表示不启动线程池
    long_minThread: æ± ä¸­æœ€å°çº¿ç¨‹æ•°ï¼Œè‹¥ä¸º-1,不受限制,设置为0,表示不启动线程池
    long_freeTimeout: çº¿ç¨‹æ•°ç©ºé—²æ—¶é•¿ï¼Œè‹¥æ± ä¸­çº¿ç¨‹æ•°é‡å¤§äºŽminThread,且有的线程空闲时长超过freeTimeout,则清除该线程
    long_busyTimeout:线程不间断工作时长(单位为秒)超时限,若为-1,不受限制
    enableThreadPool:是否启用线程池
     -->
    <support
        short_maxThread="6"
        short_minThread="6"
        short_freeTimeout="60"
        short_busyTimeout="5"
        long_maxThread="6"
        long_minThread="6"
        long_freeTimeout="60"
        long_busyTimeout="-1"
        enableThreadPool="true"
    />
    <!--
    èµ„源模块
    rtuLogDir:RTU日志文件存储目录(相对目录)
    rtuLogFileMaxSize:RTU日志文件最大字节数(B)
    rtuLogFileMaxCount:RTU日志文件最大文件数
    monitorInterval:Rtu状态监视间隔(分钟)
    saveDbInterval:Rtu状态存数据库间隔(分钟)
     -->
    <resource
        rtuLogDir="rtuLogs/"
        rtuLogFileMaxSize="100000"
        rtuLogFileMaxCount="2"
        monitorInterval="2"
        saveDbInterval="10"
    />
    <!--
    2024-08-22 æ­¤é…ç½®æš‚时未应用
    port:rmi服务端口号
    context:rmi服务上下文
     -->
    <rmi enable="true"
         port="65400"
         context="rtuMw"
    />
    <!--
    sleepBigBusy:主线程大忙时每次执行间隔时长(毫秒)
    sleepSmallBusy:主线程小忙时每次执行间隔时长(毫秒)
    queueWarnSize: ç¼“存队列节点数警告数量
    queueMaxSize: ç¼“存队列节点数最大数量
     -->
    <core
        sleepBigBusy="100"
        sleepSmallBusy="500"
        queueWarnSize="100000"
        queueMaxSize="300000"
    />
    <!--
    port:端口
    processors: Mina IO å¤„理上下行数据的线程数,一般是CPU总核数+1
    idle: å‘呆时长(秒)
     -->
    <tcp enable="true"
         port="60000"
         processors="3"
         idle="10"
    />
</config>
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/log4j2.yml
@@ -42,20 +42,27 @@
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别(DEBUG,INFO,WARN,ERROR,FATAL),输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  level: info #输出日志级别(DEBUG,INFO,WARN,ERROR,FATAL),输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  # æ¯å¤©æ—¥å¿—文件按大小分子文件
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
                      size: "100 MB"
              DefaultRolloverStrategy:
                  max: 1000
                  max: 100  #一天内日志文件最大个数
                  Delete:
                      basePath: "${log.path}"
                      maxDepth: 2 #删除日志文件的最大深度
                      IfFileName:
                          glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                      IfLastModified:
                          age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: INFO #日志输出级别(DEBUG,INFO,WARN,ERROR,FATAL),共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
@@ -64,10 +71,10 @@
                - ref: ROLLING_FILE  #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出
        # ä¸ºç±»åŒ…路径配置特殊的Log级别,方便调试,
        # ä¸å—Loggers.Root.level限制
        # Logger:
        #    - name: com.dy.pipIrrGlobal.daoBa
        #      additivity: false #去除重复的log
        #      level: debug #输出日志级别
        #      AppenderRef:
        #          - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出
        #          - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出
        Logger:
          - name: com.taobao.api.internal.util.TaobaoLogger
            additivity: false #去除重复的log
            level: fatal #输出日志级别
            AppenderRef:
                - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出
                - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出
pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-gis/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-irrigate/src/main/resources/log4j2.yml
@@ -42,7 +42,7 @@
      - name: ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/${project.name}.log
        filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        ThresholdFilter:
          level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
          onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
@@ -51,11 +51,18 @@
        PatternLayout:
          pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        Policies:
          # æ¯å¤©æ—¥å¿—文件按大小分子文件
          SizeBasedTriggeringPolicy:
            size: "10 MB"
            size: "1 MB"
        DefaultRolloverStrategy:
          max: 1000
          max: 10  #一天内日志文件最大个数
          Delete:
            basePath: "${log.path}"
            maxDepth: 2 #删除日志文件的最大深度
            IfFileName:
              glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            IfLastModified:
              age: "30d" #日志文件保留的最大天数
  Loggers:
    Root:
      level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-operation/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dy.common.multiDataSource.DataSourceContext;
import com.dy.common.mw.protocol.Command;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.QueryResultVo;
@@ -16,6 +17,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
@@ -48,8 +50,21 @@
    @Autowired
    private RestTemplate restTemplate;
    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send";
//    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send";
    protected String comSendUrl;
    /**
     * pro_mw:属性
     * tag从控制器中获取
     * key_mw:url的key
     */
    private Environment env = null;
    private String pro_mw = "mw";
    private String key_mw = "comSendUrl";
    @Autowired
    public ControllerSv(Environment env) {
        this.env = env;
    }
    /**
     * æ ¹æ®æŒ‡å®šèŽ·å–æŽ§åˆ¶å™¨è®°å½•
@@ -59,18 +74,13 @@
     */
    public QueryResultVo<List<VoController>> getControllers(QueryVo queryVo) {
        Command com = new Command();
        Command com = new Command() ;
        com.id = Command.defaultId;
        com.code = "LCD0001";
        com.type = "innerCommand";
        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
        JSONObject response = null;
        try {
            response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
        }catch (Exception e) {
            QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>();
            return rsVo;
        }
        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
        if (response != null && response.getString("code").equals("0001")) {
@@ -234,7 +244,7 @@
     * @return
     */
    protected BaseResponse sendCom2Mw(Command com) {
        String url = UriComponentsBuilder.fromUriString(mwUrlSendCom)
        String url = UriComponentsBuilder.fromUriString(comSendUrl)
                .build()
                .toUriString();
        HttpHeaders headers = new HttpHeaders();
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -68,7 +68,7 @@
    public String sendMessage(String message) {
        try {
            dingTalk.sendMessage(message);
            dingTalk.sendMessage(DataSourceContext.get(), this.env, message);
        } catch (Exception e) {
            return "发送失败";
        }
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerCtrl.java
@@ -337,4 +337,22 @@
        }
        return BaseResponseUtils.buildSuccess(true);
    }
    /**
     * æ¸…空流浪控制器
     *
     * @param
     * @return
     */
    @PostMapping("emptyTrampController")
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public BaseResponse<Boolean> emptyTrampController() {
        Integer rows = intakeControllerSv.emptyTrampController();
        if (rows == 0) {
            return BaseResponseUtils.buildFail(ProjectResultCode.DELETE_TRAMP_CONTROLLER_FAIL.getMessage());
        }
        return BaseResponseUtils.buildSuccess(true);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intakeController/IntakeControllerSv.java
@@ -98,6 +98,15 @@
        return prControllerTrampMapper.deleteByPrimaryKey(controllerId);
    }
    /**
     * æ¸…空流浪控制器
     * @param
     * @return
     */
    public Integer emptyTrampController() {
        return prControllerTrampMapper.emptyTrampController();
    }
    //流浪控制器增
    public Integer addTrampController(PrControllerTramp record){
        return prControllerTrampMapper.insertSelective(record);
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/resources/log4j2.yml
@@ -42,7 +42,7 @@
      - name: ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/${project.name}.log
        filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        ThresholdFilter:
          level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
          onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
@@ -51,11 +51,18 @@
        PatternLayout:
          pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        Policies:
          # æ¯å¤©æ—¥å¿—文件按大小分子文件
          SizeBasedTriggeringPolicy:
            size: "10 MB"
            size: "1 MB"
        DefaultRolloverStrategy:
          max: 1000
          max: 10  #一天内日志文件最大个数
          Delete:
            basePath: "${log.path}"
            maxDepth: 2 #删除日志文件的最大深度
            IfFileName:
              glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            IfLastModified:
              age: "30d" #日志文件保留的最大天数
  Loggers:
    Root:
      level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/resources/log4j2.yml
@@ -42,7 +42,7 @@
      - name: ROLLING_FILE
        ignoreExceptions: false
        fileName: ${log.path}/${project.name}.log
        filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
        ThresholdFilter:
          level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
          onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
@@ -51,11 +51,18 @@
        PatternLayout:
          pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        Policies:
          # æ¯å¤©æ—¥å¿—文件按大小分子文件
          SizeBasedTriggeringPolicy:
            size: "10 MB"
            size: "1 MB"
        DefaultRolloverStrategy:
          max: 1000
          max: 10  #一天内日志文件最大个数
          Delete:
            basePath: "${log.path}"
            maxDepth: 2 #删除日志文件的最大深度
            IfFileName:
              glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            IfLastModified:
              age: "30d" #日志文件保留的最大天数
  Loggers:
    Root:
      level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/client/ClientCtrl.java
@@ -96,6 +96,26 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´é‡ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @param bindingResult
     * @return
     */
    @GetMapping(path = "/getSmallWaterConsumptionClients")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoClient>>> getSmallWaterConsumptionClients(@Valid WaterConsumptionQO qo, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        try {
            return BaseResponseUtils.buildSuccess(clientSv.getSmallWaterConsumptionClients(qo));
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @param bindingResult
@@ -116,6 +136,26 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @param bindingResult
     * @return
     */
    @GetMapping(path = "/getSmallAmountSpentClients")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoClient>>> getSmallAmountSpentClients(@Valid AmountSpentQO qo, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        try {
            return BaseResponseUtils.buildSuccess(clientSv.getSmallAmountSpentClients(qo));
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @param bindingResult
@@ -136,6 +176,26 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @param bindingResult
     * @return
     */
    @GetMapping(path = "/getSmallWaterDurationClients")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoClient>>> getSmallWaterDurationClients(@Valid WaterDurationQO qo, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        try {
            return BaseResponseUtils.buildSuccess(clientSv.getSmallWaterDurationClients(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * ç»Ÿè®¡æŒ‡å®šæœˆä»½å„农户各天用水量及消费金额
     * @param qo
     * @return
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/client/ClientSv.java
@@ -149,6 +149,42 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´é‡ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoClient>> getSmallWaterConsumptionClients(WaterConsumptionQO qo) {
        /**
         * è¡¥é½èµ·æ­¢æ—¶é—´
         */
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        }
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // èŽ·å–ç¬¦åˆæ¡ä»¶çš„è®°å½•æ•°
        Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getSmallWaterConsumptionClientsCount(params)).orElse(0L);
        QueryResultVo<List<VoClient>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = rmOpenCloseValveHistoryMapper.getSmallWaterConsumptionClients(params);
        return rsVo ;
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @return
@@ -185,6 +221,42 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…æ¶ˆè´¹é‡‘é¢ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoClient>> getSmallAmountSpentClients(AmountSpentQO qo) {
        /**
         * è¡¥é½èµ·æ­¢æ—¶é—´ï¼Œå¦‚果开始时间为空,则默认为当前日期
         */
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        }
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // èŽ·å–ç¬¦åˆæ¡ä»¶çš„è®°å½•æ•°
        Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getSmallAmountSpentClientsCount(params)).orElse(0L);
        QueryResultVo<List<VoClient>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = rmOpenCloseValveHistoryMapper.getSmallAmountSpentClients(params);
        return rsVo ;
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿è¶…è¿‡æŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @return
@@ -221,6 +293,42 @@
    }
    /**
     * èŽ·å–æŒ‡å®šæ—¶é—´æ®µå†…ç”¨æ°´æ—¶é•¿ä½ŽäºŽæŒ‡å®šå€¼çš„å†œæˆ·
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoClient>> getSmallWaterDurationClients(WaterDurationQO qo) {
        /**
         * è¡¥é½èµ·æ­¢æ—¶é—´ï¼Œå¦‚果开始时间为空,则默认为当前日期
         */
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        }
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
        // ç”ŸæˆæŸ¥è¯¢å‚æ•°
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
        // èŽ·å–ç¬¦åˆæ¡ä»¶çš„è®°å½•æ•°
        Long itemTotal = Optional.ofNullable(rmOpenCloseValveHistoryMapper.getSmallWaterDurationClientsCount(params)).orElse(0L);
        QueryResultVo<List<VoClient>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = rmOpenCloseValveHistoryMapper.getSmallWaterDurationClients(params);
        return rsVo ;
    }
    /**
     * æŒ‡å®šæ—¶é—´æ®µå†…开物理卡农户
     * @param qo
     * @return
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntakeSv.java
@@ -771,4 +771,41 @@
        rsVo.obj = rmLossDayLastMapper.getMonthLossAmount(params);
        return rsVo ;
    }
    /**
     * æœ€è¿‘未报数的取水口
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoIntakeUnReported>> getUnReportedIntakes(CommonQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if(timeStart == "") {
            timeStart = null;
        }
        if(timeStop == "") {
            timeStop = null;
        }
        if(timeStart != null && timeStart != "") {
            timeStart = timeStart + " 00:00:00";
        }
        qo.setTimeStart(timeStart);
        if(timeStop != null && timeStop != "") {
            timeStop = timeStop + " 23:59:59";
        }
        qo.setTimeStop(timeStop);
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        Long itemTotal = rmOnHourReportLastMapper.getUnReportedIntakesCount(params);
        QueryResultVo<List<VoIntakeUnReported>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = rmOnHourReportLastMapper.getUnReportedIntakes(params);
        return rsVo ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/intake/IntkeCtrl.java
@@ -419,4 +419,21 @@
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
    /**
     * æœ€è¿‘未报数的取水口
     * @param
     * @return
     */
    @GetMapping(path = "/getUnReportedIntakes")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoIntakeUnReported>>> getUnReportedIntakes(CommonQO qo) {
        try {
            QueryResultVo<List<VoIntakeUnReported>> res = intakeSv.getUnReportedIntakes(qo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("获取记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/log4j2.yml
@@ -39,23 +39,30 @@
                pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
        # è¾“出到文件,超过10MB归档
        RollingFile:
            - name: ROLLING_FILE
              ignoreExceptions: false
              fileName: ${log.path}/${project.name}.log
              filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
              ThresholdFilter:
                  level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
                  onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
                  onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
              #日志内容样式
              PatternLayout:
                  pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
              Policies:
                  SizeBasedTriggeringPolicy:
                      size: "10 MB"
              DefaultRolloverStrategy:
                  max: 1000
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出
              onMatch: ACCEPT #onMatch=ACCEPT å¤§äºŽç­‰äºŽ "level" é…ç½®çš„等级地日志输出
              onMismatch: DENY #onMismatch=DENY å°äºŽ "level" é…ç½®çš„等级地日志不输出
            #日志内容样式
            PatternLayout:
              pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n"
            Policies:
              # æ¯å¤©æ—¥å¿—文件按大小分子文件
              SizeBasedTriggeringPolicy:
                size: "1 MB"
            DefaultRolloverStrategy:
              max: 10  #一天内日志文件最大个数
              Delete:
                basePath: "${log.path}"
                maxDepth: 2 #删除日志文件的最大深度
                IfFileName:
                  glob: "${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
                IfLastModified:
                  age: "30d" #日志文件保留的最大天数
    Loggers:
        Root:
            level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off