pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com97Vo.java
New file @@ -0,0 +1,16 @@ package com.dy.common.mw.protocol.p206V1_0_0.downVos; import lombok.Data; /** * @Author: liurunyu * @Date: 2024/5/28 21:30 * @Description */ @Data public class Com97Vo { public String icCardNo ;//10位虚拟IC卡编号 public Double money ;//剩余金额 public Double price ;//水价 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com98Vo.java
New file @@ -0,0 +1,14 @@ package com.dy.common.mw.protocol.p206V1_0_0.downVos; import lombok.Data; /** * @Author: liurunyu * @Date: 2024/5/28 21:30 * @Description */ @Data public class Com98Vo { public String icCardNo ;//10位虚拟IC卡编号 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_97_Down.java
@@ -1,11 +1,15 @@ package com.dy.common.mw.protocol.p206V1_0_0.parse; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.*; import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; import com.dy.common.mw.protocol.p206V202404.downVos.ComCd87Vo; import com.dy.common.util.ByteUtil; import com.dy.common.util.ByteUtilUnsigned; @@ -73,30 +77,36 @@ ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ; /* 参数格式: 虚拟卡号,电子钱包余额,水价 */ String param = (String)para.param ; if(param == null || param.trim().equals("")){ throw new Exception("未提供命令参数数据,不能构造功能码为" + para.commandCode + "的下行命令") ; }else{ String[] params = ((String)para.param).split(",") ; if(params == null || params.length != 3){ throw new Exception("命令参数数据不正确,不能构造功能码为" + para.commandCode + "的下行命令") ; }else{ byte index1 = 0 ; byte[] bs = new byte[11] ; ByteUtil.string2BCD_LE(bs, params[0], 0) ; Integer money = (Double.valueOf(Double.parseDouble(params[1]) * 100)).intValue() ; ByteUtilUnsigned.int2Bytes_LE(bs, money, 4); Short price = (Double.valueOf(Double.parseDouble(params[2]) * 100)).shortValue() ; ByteUtilUnsigned.short2Bytes_LE(bs, price, 8); bytes = ByteUtil.bytesMerge(bsHead, bs) ; } JSONObject obj = (JSONObject)para.param; String json = obj.toJSONString(); Com97Vo cvo = JSON.parseObject(json, Com97Vo.class) ; if(cvo == null){ throw new Exception("json转Com97Vo为null") ; } if(cvo.icCardNo == null){ throw new Exception("虚拟IC卡编号不能为空") ; } if(cvo.money == null){ throw new Exception("剩余金额不能为空") ; } if(cvo.price == null){ throw new Exception("水价不能为空") ; } String icCardNo = null ; if(cvo.icCardNo.length() > 10){ icCardNo = cvo.icCardNo.substring(cvo.icCardNo.length() - 10) ; } byte[] bs = new byte[11] ; ByteUtil.string2BCD_LE(bs, icCardNo, 0) ; Integer money = Double.valueOf(cvo.money * 100.0D).intValue() ; ByteUtilUnsigned.int2Bytes_LE(bs, money, 4); Short price = Double.valueOf(cvo.price * 100.0D).shortValue() ; ByteUtilUnsigned.short2Bytes_LE(bs, price, 8); bytes = ByteUtil.bytesMerge(bsHead, bs) ; GlCreate.createLen(bytes);//长度放字节数组中 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_98_Down.java
@@ -1,10 +1,14 @@ package com.dy.common.mw.protocol.p206V1_0_0.parse; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.mw.protocol.*; import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.ParseParamsForDownV1_0_1; import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo; import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com98Vo; import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; import com.dy.common.util.ByteUtil; import com.dy.common.util.ByteUtilUnsigned; @@ -73,16 +77,23 @@ ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ; /* 参数格式: 虚拟卡号 */ if(para.param == null ||((String)para.param).trim().equals("")){ throw new Exception("未提供命令参数数据,不能构造功能码为" + para.commandCode + "的下行命令") ; }else{ byte[] bs = new byte[5] ; ByteUtil.string2BCD_LE(bs, ((String)para.param).trim(), 0) ; bytes = ByteUtil.bytesMerge(bsHead, bs) ; JSONObject obj = (JSONObject)para.param; String json = obj.toJSONString(); Com98Vo cvo = JSON.parseObject(json, Com98Vo.class) ; if(cvo == null){ throw new Exception("json转Com97Vo为null") ; } if(cvo.icCardNo == null){ throw new Exception("虚拟IC卡编号不能为空") ; } String icCardNo = null ; if(cvo.icCardNo.length() > 10){ icCardNo = cvo.icCardNo.substring(cvo.icCardNo.length() - 10) ; } byte[] bs = new byte[5] ; ByteUtil.string2BCD_LE(bs, icCardNo, 0) ; bytes = ByteUtil.bytesMerge(bsHead, bs) ; GlCreate.createLen(bytes);//长度放字节数组中 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd10Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd10Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String rtuNewAddr ;//控制器新地址 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd15Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd15Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String icCardAddr ;//IC卡地址(8位数字或字母) public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) public Double chargeMoney ;//单位:元 2位小数点(最大值 99999999.99) pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd16Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd16Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer waterAlarm ;//剩余水量报警值,单位:m3。整数,取值范围0~9999 public Integer moneyAlarm ;//剩余金额报警值,单位:元。整数,取值范围0~9999 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd21Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd21Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer channel ;//IP通道号(取值范围 1、2). public String ip ;//IP(例如 125.235.35.89) public Integer port ;//端口号(0~65536) pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd22Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd22Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer maxAmountYear ;//机井年最大用水量单位:m3 整数,取值范围0~99999999 public Double limitLevel ;//水位下限 单位:m 取值范围:0~9999.99 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd23Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd23Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer channel ;//IP通道号(取值范围 1、2). public String domain ;//域名(例如 dayuyanjiuyuan.to),最大长度42字符 public Integer port ;//端口号(0~65536) pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd24Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd24Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String registerNo ;//设备注册号,16进制数据,最大16个字节 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd26Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd26Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer maxAmountYear ;//设备终端年用水量 单位:m3 整数,取值范围0~99999999 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd31Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd31Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Boolean valid ;//有效性 } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd55Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd55Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer page ;//分页(取值范围1、2、3、4、5、6、7、8、9) } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd5CVo.java
@@ -5,6 +5,6 @@ @Data public class ComCd5CVo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer page ;//分页(取值范围1、2、3、4、5、6、7、8、9) } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd65Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd65Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer page ;//分页,取值范围(1、2、3、4、5、6、7、8、9) } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd86Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd86Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer channel ;//IP通道号(取值范围 1、2). } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd87Vo.java
@@ -5,6 +5,6 @@ @Data public class ComCd87Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public Integer channel ;//IP通道号(取值范围 1、2). } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd92_A2Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd92_A2Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) public Double waterRemain ;//用户剩余水量, 两个小数点, 单位m3, 0~99999999.99 public Double moneyRemain ;//用户剩余金额, 两个小数点, 单位元, 0~999999.99 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd93_A3Vo.java
@@ -5,7 +5,7 @@ @Data public class ComCd93_A3Vo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) public String orderNo ;//订单号(16位数字) } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/downVos/ComCd9CVo.java
@@ -5,6 +5,6 @@ @Data public class ComCd9CVo { public String controllerType;//控制器类型 01(0x01):测控一体阀;57(0x57):井电控制器 public Integer projectNo ;//控制器类型 0x01:测控一体阀;0x57:井电控制器 public Integer projectNo ;//项目编号 public String icCardAddr ;//IC卡地址(8位数字或字母) } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Test.java
@@ -9,10 +9,13 @@ */ public class Test { public static void main(String[] args) throws Exception{ byte[] bs = new byte[]{(byte)0x80, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00} ; Long l1 = ByteUtil.BCD2Long_BE(bs, 0, 0 + 4); Long l2 = ByteUtil.BCD2Long_LE(bs, 0, 0 + 4); System.out.println(l1); System.out.println(l2); // byte[] bs = new byte[]{(byte)0x80, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00} ; // Long l1 = ByteUtil.BCD2Long_BE(bs, 0, 0 + 4); // Long l2 = ByteUtil.BCD2Long_LE(bs, 0, 0 + 4); // System.out.println(l1); // System.out.println(l2); String s = "abcdefg1234567890" ; s = s.substring(s.length() - 10) ; System.out.println(s); } } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
@@ -310,7 +310,7 @@ long l = 0; long[] ls = new long[len] ; for(int i = 0 ; i < len; i++){ ls[i] = bs[i] ; ls[i] = bs[i] & 0xFF ; } for(int i = len-1 ; i >= 0; i--){ ls[(len - 1) - i] <<= 8 * i ; @@ -334,14 +334,14 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 8); if (b) { long s = 0; long s0 = bs[from + 0] ;// 最低位 long s1 = bs[from + 1] ; long s2 = bs[from + 2] ; long s3 = bs[from + 3] ; long s4 = bs[from + 4] ; long s5 = bs[from + 5] ; long s6 = bs[from + 6] ; long s7 = bs[from + 7] ; long s0 = bs[from + 0] & 0xFF ;// 最低位 long s1 = bs[from + 1] & 0xFF ; long s2 = bs[from + 2] & 0xFF ; long s3 = bs[from + 3] & 0xFF ; long s4 = bs[from + 4] & 0xFF ; long s5 = bs[from + 5] & 0xFF ; long s6 = bs[from + 6] & 0xFF ; long s7 = bs[from + 7] & 0xFF ; // s7不变 s6 <<= 8; @@ -371,7 +371,7 @@ short len = (short)(end - from + 1) ; long[] ls = new long[len] ; for(short i = 0 ; i < len; i++){ ls[i] = bs[from + i] ; ls[i] = bs[from + i] & 0xFF ; } for(short i = (short)(len-1) ; i >= 0; i--){ ls[i] <<= 8 * (len - (i + 1)) ; @@ -400,7 +400,7 @@ long l = 0; long[] ls = new long[len] ; for(int i = 0 ; i < len; i++){ ls[i] = bs[i] ; ls[i] = bs[i] & 0xFF ; } for(int i = 0 ; i < len; i++){ ls[(len - 1) - i] <<= 8 * i ; @@ -424,14 +424,14 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 8); if (b) { long s = 0; long s0 = bs[from] ;// 最低位 long s1 = bs[from + 1] ; long s2 = bs[from + 2] ; long s3 = bs[from + 3] ; long s4 = bs[from + 4] ; long s5 = bs[from + 5] ; long s6 = bs[from + 6] ; long s7 = bs[from + 7] ; long s0 = bs[from] & 0xFF ;// 最低位 long s1 = bs[from + 1] & 0xFF ; long s2 = bs[from + 2] & 0xFF ; long s3 = bs[from + 3] & 0xFF ; long s4 = bs[from + 4] & 0xFF ; long s5 = bs[from + 5] & 0xFF ; long s6 = bs[from + 6] & 0xFF ; long s7 = bs[from + 7] & 0xFF ; // s0不变 s1 <<= 8; @@ -462,7 +462,7 @@ short len = (short)(end - from + 1) ; long[] ls = new long[len] ; for(short i = 0 ; i < len; i++){ ls[i] = bs[from + i] ; ls[i] = bs[from + i] & 0xFF ; } for(short i = 0 ; i < len; i++){ ls[i] <<= 8 * i ; @@ -531,10 +531,10 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 4); if (b) { int s = 0; int s0 = bs[from + 0] ;// 最低位 int s1 = bs[from + 1] ; int s2 = bs[from + 2] ; int s3 = bs[from + 3] ; int s0 = bs[from + 0] & 0xFF ;// 最低位 int s1 = bs[from + 1] & 0xFF ; int s2 = bs[from + 2] & 0xFF ; int s3 = bs[from + 3] & 0xFF ; // s3不变 s2 <<= 8; @@ -558,10 +558,10 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 4); if (b) { int s = 0; int s0 = bs[from + 0] ;// 最低位 int s1 = bs[from + 1] ; int s2 = bs[from + 2] ; int s3 = bs[from + 3] ; int s0 = bs[from + 0] & 0xFF ;// 最低位 int s1 = bs[from + 1] & 0xFF ; int s2 = bs[from + 2] & 0xFF ; int s3 = bs[from + 3] & 0xFF ; // s0不变 s1 <<= 8; @@ -654,8 +654,8 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 2); if (b) { int s = 0; int s0 = bs[from + 0] ; int s1 = bs[from + 1] ; int s0 = bs[from + 0] & 0xFF ; int s1 = bs[from + 1] & 0xFF ; // s1不变 s0 <<= 8; @@ -677,8 +677,8 @@ boolean b = isOutOfArrLength(bs.length, (from - 1) + 2); if (b) { int s = 0; int s0 = bs[from + 0] ; int s1 = bs[from + 1] ; int s0 = bs[from + 0] & 0xFF ; int s1 = bs[from + 1] & 0xFF ; // s0不变 s1 <<= 8; pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandCtrl.java
@@ -33,9 +33,9 @@ //return this.cd31() ; //return this.cd86() ; //return this.cd87() ; //return this.cd92() ; return this.cd92() ; //return this.cd93() ; return this.cd9C() ; //return this.cd9C() ; } /** pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java
@@ -78,7 +78,7 @@ @Cacheable(cacheNames=CacheConstants.cacheNames, key="'" + CacheConstants.loginUserKeyPrefix + "' + #uuid") public BaUser getByUuid(String uuid){ //此方法目的是直接从缓存中读取,如果缓存无此值,说明数据被清楚了,返回null值,需要重新登录 //此方法目的是直接从缓存中读取,如果缓存无此值,说明数据被清除了,返回null值,需要重新登录 return null ; }