Merge remote-tracking branch 'origin/master'
 
	
	
	
	
	
	
		
		1个文件已删除
	
		
		1 文件已重命名
	
		
		79个文件已修改
	
		
		2个文件已添加
	
	
 
	
	
	
	
	
	
	
	
 |  |  | 
 |  |  |      * 功能码 | 
 |  |  |      */ | 
 |  |  |     public String code ;  | 
 |  |  | 	 | 
 |  |  |     /** | 
 |  |  |      * 不返回中间件对命令处理结果(true:不返回处理结果,false或null:返回处理结果) | 
 |  |  |      */ | 
 |  |  |     public Boolean noRtMwDealRes ; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * rtu返回命令结果 发向目的地web URL | 
 |  |  | 
 |  |  |         s += (rtuAddr == null ? "" : ("Rtu地址=" + rtuAddr + "\n")); | 
 |  |  |         s += "命令类型=" + (type.equals(CommandType.innerCommand)?"内部命令":"RTU命令") + "\n" ; | 
 |  |  |         s += (code == null ? "" : ("功能码=" + code + "\n")) ; | 
 |  |  |         s += "是否返回中间件对命令处理结果=" + (noRtMwDealRes == null?"是":(noRtMwDealRes?"是":"否") + "\n") ; | 
 |  |  |         s += (rtuResultSendWebUrl == null ? "" : ("回调网址=" + rtuResultSendWebUrl + "\n")); | 
 |  |  |         if(param != null){ | 
 |  |  |             s += "参数:" + param  ; | 
 |  |  |         } | 
 |  |  | 
 |  |  |     public Command setCode(String code) { | 
 |  |  |         this.code = code; | 
 |  |  |         return this ; | 
 |  |  |     } | 
 |  |  |     @SuppressWarnings("unused") | 
 |  |  |     public Boolean getNoRtMwDealRes() { | 
 |  |  |         return noRtMwDealRes; | 
 |  |  |     } | 
 |  |  |     @SuppressWarnings("unused") | 
 |  |  |     public void setNoRtMwDealRes(Boolean noRtMwDealRes) { | 
 |  |  |         this.noRtMwDealRes = noRtMwDealRes; | 
 |  |  |     } | 
 |  |  |     public Object getParam() { | 
 |  |  |         return param; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd02Vo cdData = new DataCd02Vo() ; | 
 |  |  |         DataCd02Vo cdData = new DataCd02Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, ProtocolConstantV206V202404.dataIndex, 1) ; | 
 |  |  |         cdData.projectNo = 0 + bs[ProtocolConstantV206V202404.dataIndex + 1]; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd10Vo cdData = new DataCd10Vo() ; | 
 |  |  |         DataCd10Vo cdData = new DataCd10Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 |  |  | 
 |  |  |             if(cvo.flowNo.length() != 12){ | 
 |  |  |                 throw new Exception("流水号必须是12位数字") ; | 
 |  |  |             } | 
 |  |  |             byte[] bs = new byte[40] ; | 
 |  |  |             byte[] bs = new byte[43] ; | 
 |  |  |             int index = 0 ; | 
 |  |  |             bs[index] = (byte)(Integer.parseInt(cvo.controllerType, 16)); | 
 |  |  |  | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd50Vo cdData = new DataCd50Vo() ; | 
 |  |  |         DataCd50Vo cdData = new DataCd50Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |         if(hasRecord == 1){ | 
 |  |  |             //有记录 | 
 |  |  |             List<DataCd55Vo> list = new ArrayList<>() ; | 
 |  |  |             DataCd55Vo vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |             index++ ; | 
 |  |  |             DataCd55Vo vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             while(vo != null){ | 
 |  |  |                 index += 35 ; | 
 |  |  |                 list.add(vo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             } | 
 |  |  |             dV1.subData = list ; | 
 |  |  |         }else{ | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private DataCd55Vo doParseData(byte[] bs, int index, int bsLen, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占39字节 | 
 |  |  |     private DataCd55Vo doParseData(byte[] bs, int index, int bsLen, String dataCode, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占35字节 | 
 |  |  |         if(bsLen - index > 35){ | 
 |  |  |             DataCd55Vo cdData = new DataCd55Vo() ; | 
 |  |  |             DataCd55Vo cdData = new DataCd55Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |  | 
 |  |  |             cdData.controllerType = controllerType ; | 
 |  |  |             cdData.projectNo = projectNo ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd56Vo cdData = new DataCd56Vo() ; | 
 |  |  |         DataCd56Vo cdData = new DataCd56Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |         if(hasRecord == 1){ | 
 |  |  |             //有记录 | 
 |  |  |             List<DataCd5CVo> list = new ArrayList<>() ; | 
 |  |  |             DataCd5CVo vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |             index++ ; | 
 |  |  |             DataCd5CVo vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             while(vo != null){ | 
 |  |  |                 index += 16 ; | 
 |  |  |                 list.add(vo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             } | 
 |  |  |             dV1.subData = list ; | 
 |  |  |         }else{ | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private DataCd5CVo doParseData(byte[] bs, int index, int bsLen, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占39字节 | 
 |  |  |     private DataCd5CVo doParseData(byte[] bs, int index, int bsLen, String dataCode, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占16字节 | 
 |  |  |         if(bsLen - index > 16){ | 
 |  |  |             DataCd5CVo cdData = new DataCd5CVo() ; | 
 |  |  |             DataCd5CVo cdData = new DataCd5CVo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |  | 
 |  |  |             cdData.controllerType = controllerType ; | 
 |  |  |             cdData.projectNo = projectNo ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |         if(hasRecord == 1){ | 
 |  |  |             //有记录 | 
 |  |  |             List<DataCd65Vo> list = new ArrayList<>() ; | 
 |  |  |             DataCd65Vo vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |             index++ ; | 
 |  |  |             DataCd65Vo vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             while(vo != null){ | 
 |  |  |                 index += 39 ; | 
 |  |  |                 index += 43 ; | 
 |  |  |                 list.add(vo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, controllerType, projectNo) ; | 
 |  |  |                 vo = this.doParseData(bs, index, bsLen, dataCode, controllerType, projectNo) ; | 
 |  |  |             } | 
 |  |  |             dV1.subData = list ; | 
 |  |  |         }else{ | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private DataCd65Vo doParseData(byte[] bs, int index, int bsLen, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占39字节 | 
 |  |  |         if(bsLen - index > 39){ | 
 |  |  |             DataCd65Vo cdData = new DataCd65Vo() ; | 
 |  |  |     private DataCd65Vo doParseData(byte[] bs, int index, int bsLen, String dataCode, String controllerType,Integer projectNo) throws Exception{ | 
 |  |  |         //每条数据占43字节 | 
 |  |  |         if(bsLen - index > 43){ | 
 |  |  |             DataCd65Vo cdData = new DataCd65Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |  | 
 |  |  |             cdData.controllerType = controllerType ; | 
 |  |  |             cdData.projectNo = projectNo ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd68Vo cdData = new DataCd68Vo() ; | 
 |  |  |         DataCd68Vo cdData = new DataCd68Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 |  |  | 
 |  |  |         byte[] bytes = GlCreate.createStart2Cd(para.rtuAddr, para.commandCode); | 
 |  |  |         if(para.param != null){ | 
 |  |  |             DataCd80_5BVo cdData = (DataCd80_5BVo)para.param ; | 
 |  |  |             byte[] bs = new byte[2] ; | 
 |  |  |             byte[] bs = new byte[3] ; | 
 |  |  |             bs[0] = (byte)(Integer.parseInt(cdData.getControllerType(), 16)); | 
 |  |  |             bs[1] = cdData.projectNo.byteValue() ; | 
 |  |  |             GlCreate.createTp(bs, 2) ; | 
 |  |  |             bs[2] = 0x01 ;//01:成功 81:失败 | 
 |  |  |             //GlCreate.createTp(bs, 2) ; | 
 |  |  |             bytes = ByteUtil.bytesMerge(bytes, bs) ; | 
 |  |  |         }else{ | 
 |  |  |             throw new Exception("下行命令参数据为null") ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd81Vo cdData = new DataCd81Vo() ; | 
 |  |  |         DataCd81Vo cdData = new DataCd81Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |  | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  | 
 |  |  |         cdData.projectNo = (int)bs[index]; | 
 |  |  |  | 
 |  |  |         index++ ; | 
 |  |  |         GlParse.parseRtuDt(bs, index) ; | 
 |  |  |         cdData.rtuDt = GlParse.parseRtuDt(bs, index) ; | 
 |  |  |  | 
 |  |  |         index += 6 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ;//四个字节 | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd83Vo cdData = new DataCd83Vo() ; | 
 |  |  |         DataCd83Vo cdData = new DataCd83Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd84Vo cdData = new DataCd84Vo() ; | 
 |  |  |         DataCd84Vo cdData = new DataCd84Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 |  |  | 
 |  |  |         index++ ; | 
 |  |  |         cdData.icCardAddr = ByteUtil.bytes2Hex(bs, false, index, 4) ; | 
 |  |  |  | 
 |  |  |         index += 8 ; | 
 |  |  |         index += 4 ; | 
 |  |  |         cdData.icCardNo = GlParse.parseIcCardNo(bs, index, 6, 2) ; | 
 |  |  |  | 
 |  |  |         index += 8 ; | 
 |  |  | 
 |  |  |         cdData.waterRemainUser = ByteUtil.BCD2Long_LE(bs, index, index + 4)/100.0D ; | 
 |  |  |  | 
 |  |  |         index += 5 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ;//四个字节 | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd86Vo cdData = new DataCd86Vo() ; | 
 |  |  |         DataCd86Vo cdData = new DataCd86Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd87Vo cdData = new DataCd87Vo() ; | 
 |  |  |         DataCd87Vo cdData = new DataCd87Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd88Vo cdData = new DataCd88Vo() ; | 
 |  |  |         DataCd88Vo cdData = new DataCd88Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd8AVo cdData = new DataCd8AVo() ; | 
 |  |  |         DataCd8AVo cdData = new DataCd8AVo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCd92_A2Vo cdData = new DataCd92_A2Vo() ; | 
 |  |  |         DataCd92_A2Vo cdData = new DataCd92_A2Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |         MidResultToRtu midRs = new MidResultToRtu() ; | 
 |  |  |         midRs.protocolName = para.protocolName ;//协议名称 | 
 |  |  |         midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ; | 
 |  |  |         midRs.rtuAddr = para.rtuAddr ;//Rtu地址 | 
 |  |  |         midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果 | 
 |  |  |         midRs.downCode = para.commandCode ;//下行命令功能码; | 
 
 |  |  | 
 |  |  |      */ | 
 |  |  |     protected void doParse(byte[] bs, int bsLen, String dataCode, Data data) throws Exception { | 
 |  |  |         DataV202404 dV1 = (DataV202404)data.getSubData() ; | 
 |  |  |         DataCdC2Vo cdData = new DataCdC2Vo() ; | 
 |  |  |         DataCdC2Vo cdData = new DataCdC2Vo(CodeV202404.getCodeName(dataCode)) ; | 
 |  |  |         dV1.subData = cdData ; | 
 |  |  |         int index = ProtocolConstantV206V202404.dataIndex ; | 
 |  |  |         cdData.controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 |  |  | 
 |  |  |         GlParse.parseRtuDt(bs, index); | 
 |  |  |  | 
 |  |  |         index+= 6 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData); | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData);//四个字节 | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         vo.alarmWaterMeterBreak = (byte)(b >> 6 & 1) ; | 
 |  |  |         vo.alarmEleMeterFault = (byte)(b >> 7 & 1) ; | 
 |  |  |  | 
 |  |  |         index++ ; | 
 |  |  |         b = bs[index] ; | 
 |  |  |         b = bs[index + 1] ; | 
 |  |  |         vo.alarm0MoneyRemain = (byte)(b & 0x1) ; | 
 |  |  |         vo.alarmInnerDoor = (byte)(b >> 1 & 1) ; | 
 |  |  |         vo.alarmOuterDoor = (byte)(b >> 2 & 1) ; | 
 |  |  | 
 |  |  |         cdData.elePrice = elePrice/100.0D; | 
 |  |  |  | 
 |  |  |         index += 2 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ;//四个字节 | 
 |  |  |  | 
 |  |  |         index += 2 ; | 
 |  |  |         index += 4 ; | 
 |  |  |         int aVolt = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; | 
 |  |  |         cdData.aVolt = aVolt/10.0D; | 
 |  |  |  | 
 |  |  | 
 |  |  |         cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; | 
 |  |  |  | 
 |  |  |         index += 2 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ;//四个字节 | 
 |  |  |     } | 
 |  |  |     /** | 
 |  |  |      * 分析功能93、A3数据 | 
 |  |  | 
 |  |  |         cdData.thisDuration = ByteUtil.BCD2Int_LE(bs, index, index + 1) ; | 
 |  |  |  | 
 |  |  |         index += 2 ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ; | 
 |  |  |         GlParse.parseAlarmAndState(bs, index, cdData) ;//四个字节 | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         sb.append("      剩余水量报警 : ") ; | 
 |  |  |         sb.append(alarmWaterRemain == null?"未知":(alarmWaterRemain.byteValue() == 0 ? "正常":(alarmWaterRemain.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      剩余水量为0关泵/阀 : ") ; | 
 |  |  |         sb.append(alarm0WaterRemain == null?"未知":(alarm0WaterRemain.byteValue() == 0 ? "正常":(alarm0WaterRemain.byteValue() == 1 ? "剩余水量为0关泵/阀":"未知"))) ; | 
 |  |  |         sb.append("      剩余0水量关泵/阀 : ") ; | 
 |  |  |         sb.append(alarm0WaterRemain == null?"未知":(alarm0WaterRemain.byteValue() == 0 ? "正常":(alarm0WaterRemain.byteValue() == 1 ? "关泵/阀":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      年度超采 : ") ; | 
 |  |  |         sb.append(alarmExceedYear == null?"未知":(alarmExceedYear.byteValue() == 0 ? "正常":(alarmExceedYear.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  | 
 |  |  |         sb.append("      电表故障 : ") ; | 
 |  |  |         sb.append(alarmEleMeterFault == null?"未知":(alarmEleMeterFault.byteValue() == 0 ? "正常":(alarmEleMeterFault.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      剩余0金额 : ") ; | 
 |  |  |         sb.append(alarm0MoneyRemain == null?"未知":(alarm0MoneyRemain.byteValue() == 0 ? "正常":(alarm0MoneyRemain.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  |         sb.append("      剩余0金额关泵/阀 : ") ; | 
 |  |  |         sb.append(alarm0MoneyRemain == null?"未知":(alarm0MoneyRemain.byteValue() == 0 ? "正常":(alarm0MoneyRemain.byteValue() == 1 ? "关泵/阀":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      控制器内门 : ") ; | 
 |  |  |         sb.append(alarmInnerDoor == null?"未知":(alarmInnerDoor.byteValue() == 0 ? "正常":(alarmInnerDoor.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  | 
 |  |  |         sb.append("      三相电欠压 : ") ; | 
 |  |  |         sb.append(alarmEleLowVolt == null?"未知":(alarmEleLowVolt.byteValue() == 0 ? "正常":(alarmEleLowVolt.byteValue() == 1 ? "报警":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      IC卡使能 : ") ; | 
 |  |  |         sb.append(stateIcEnable == null?"未知":(stateIcEnable.byteValue() == 0 ? "支持":(stateIcEnable.byteValue() == 1 ? "不支持":"未知"))) ; | 
 |  |  |         sb.append("      IC卡功能 : ") ; | 
 |  |  |         sb.append(stateIcEnable == null?"未知":(stateIcEnable.byteValue() == 0 ? "不支持":(stateIcEnable.byteValue() == 1 ? "支持":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |  | 
 |  |  |         return sb.toString() ; | 
 
 |  |  | 
 |  |  |     public Integer projectNo ;//项目编号: | 
 |  |  |     public String status ;//保持在线状态:  F0 登录,F1 退出登录,F2 在线保持 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd02Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      链路检测 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      请求状态 : ") ; | 
 |  |  |         sb.append(status == null?"未知":(status.equals("F0")?"登录":(status.equals("F1")?"退出登录":(status.equals("F2")?"在线保持":status)))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer projectNo ;//项目编号: | 
 |  |  |     public String rtuNewAddr ;//控制器新地址 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd10Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      设置终端地址应答 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer projectNo ;//项目编号: | 
 |  |  |     public String rtuAddr;//控制器新地址 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd50Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      设置终端地址应答 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Boolean success ;//命令结果(true成功, false失败) | 
 |  |  |     public String dt ;//充值时间(yyyy-mm-dd HH:mm:ss) | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd55Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询设备终端充值记录  : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer waterAlarm ;//剩余水量报警值,单位:m3。整数,取值范围0~65535 | 
 |  |  |     public Integer moneyAlarm ;//剩余金额报警值,单位:元。整数,取值范围0~65535 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd56Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询设备终端剩余水量和剩余金额报警值  : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Double farmerAmountDay ;//当日用户用水量,2个小数点 | 
 |  |  |     public Double lossAmountDay ;//当日漏损水量,2个小数点 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd5CVo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询设备终端的历史日记录  : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public String rtuEndDt ;//本次结束时间 (yyyy-mm-dd HH:MM:SS) | 
 |  |  |     public Byte useWaterType ;//用水方式(0x00:正常刷卡开泵/阀用水 0x01:平台远程开泵/阀用水 0x02:用户远程开泵/阀用水 0x03:测试卡,0x04:其它) | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd65Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询设备终端用户用水记录 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer maxAmountYear ;//机井年最大用水量  单位:m3 整数,取值范围0~99999999 | 
 |  |  |     public Double limitLevel ;//水位下限 单位:m 取值范围:0~9999.99 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd68Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询机井年最大开采量和水位下限 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer projectNo ;//项目编号: | 
 |  |  |     public String rtuDt ;//设备上报的日期时间(yyyy-mm-dd HH:MM:SS) | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd81Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      设备终端随机自报 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  | 
 |  |  |         sb.append("      设备时钟 : ") ; | 
 |  |  |         sb.append(rtuDt == null?"未知":rtuDt) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      泵状态 : ") ; | 
 |  |  |         sb.append(statePump == null?"未知":(statePump.byteValue()==1?"泵/阀开":(statePump.byteValue()==0?"泵/阀关":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      剩余水量报警 : ") ; | 
 |  |  |         sb.append(alarmWaterRemain == null?"未知":(alarmWaterRemain.byteValue()==1?"小于报警上限":(alarmWaterRemain.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      剩余水量为0关泵/阀 : ") ; | 
 |  |  |         sb.append(alarm0WaterRemain == null?"未知":(alarm0WaterRemain.byteValue()==1?"归零关泵/阀":(alarm0WaterRemain.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      年度超采 : ") ; | 
 |  |  |         sb.append(alarmExceedYear == null?"未知":(alarmExceedYear.byteValue()==1?"报警":(alarmExceedYear.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      外部流量计故障 : ") ; | 
 |  |  |         sb.append(alarmWaterMeterFault == null?"未知":(alarmWaterMeterFault.byteValue()==1?"报警":(alarmWaterMeterFault.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      偷水 : ") ; | 
 |  |  |         sb.append(alarmSteal == null?"未知":(alarmSteal.byteValue()==1?"报警":(alarmSteal.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      流量计损坏 : ") ; | 
 |  |  |         sb.append(alarmWaterMeterBreak == null?"未知":(alarmWaterMeterBreak.byteValue()==1?"报警":(alarmWaterMeterBreak.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      电表故障 : ") ; | 
 |  |  |         sb.append(alarmEleMeterFault == null?"未知":(alarmEleMeterFault.byteValue()==1?"报警":(alarmEleMeterFault.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      剩余金额为0关泵/阀 : ") ; | 
 |  |  |         sb.append(alarm0MoneyRemain == null?"未知":(alarm0MoneyRemain.byteValue()==1?"报警":(alarm0MoneyRemain.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      控制器内门 : ") ; | 
 |  |  |         sb.append(alarmInnerDoor == null?"未知":(alarmInnerDoor.byteValue()==1?"报警":(alarmInnerDoor.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      控制器外门 : ") ; | 
 |  |  |         sb.append(alarmOuterDoor == null?"未知":(alarmOuterDoor.byteValue()==1?"报警":(alarmOuterDoor.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      交流缺项 : ") ; | 
 |  |  |         sb.append(alarmEleMiss == null?"未知":(alarmEleMiss.byteValue()==1?"报警":(alarmEleMiss.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      交流过流 : ") ; | 
 |  |  |         sb.append(alarmEleExceed == null?"未知":(alarmEleExceed.byteValue()==1?"报警":(alarmEleExceed.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      三相电欠压 : ") ; | 
 |  |  |         sb.append(alarmEleLowVolt == null?"未知":(alarmEleLowVolt.byteValue()==1?"报警":(alarmEleLowVolt.byteValue()==0?"正常":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         sb.append("      IC卡使能 : ") ; | 
 |  |  |         sb.append(stateIcEnable == null?"未知":(stateIcEnable.byteValue()==1?"支持":(stateIcEnable.byteValue()==0?"不支持":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 |  |  |         return sb.toString() ; | 
 |  |  |         return sb.toString() + super.toString() ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     public Double batteryVolt ;//后备电池电压 | 
 |  |  |     public Double rtuDt ;//上报时间(yyyy-mm-dd HH) | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd83Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      机井定点上报(每天12点上报) : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Double moneyRemainUser ;//用户剩余金额, 单位0.01元 | 
 |  |  |     public Double waterRemainUser ;//用户剩余水量, 单位0.01m3 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd84Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      机井定点上报(每天12点上报) : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      平台/APP远程关闭水泵/阀门 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public String ip ;//IP | 
 |  |  |     public Integer port ;//端口号 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd86Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询控制器IP地址 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public String domain ;//域名 | 
 |  |  |     public Integer port ;//端口号 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd87Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询控制器域名 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Integer projectNo ;//项目编号: | 
 |  |  |     public String registerNo ;//注册号(16字节hex) | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd88Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      查询控制器域名 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Float hardVersion ;//硬件版本号 | 
 |  |  |     public Float protocolVersion ;//协议版本号 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd8AVo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      设备登录 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Byte opType ;//开阀类型: 01:平台开泵/阀 02:用户开泵/阀 | 
 |  |  |     public Byte opResult ;//开启泵/阀结果: 0x00:成功 0x81:失败 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCd92_A2Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      平台/APP远程关闭水泵/阀门 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      平台/APP远程关闭水泵/阀门 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     public Boolean success ;//执行结果(true成功, false失败) | 
 |  |  |     public String rutDt ;//设备时钟 | 
 |  |  |  | 
 |  |  |     public String comName ;//命令名称 | 
 |  |  |  | 
 |  |  |     public DataCdC2Vo(String comName){ | 
 |  |  |         this.comName = comName ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String toString(){ | 
 |  |  |         StringBuffer sb = new StringBuffer() ; | 
 |  |  |         sb.append("      开关水泵/阀门结果上报 : \n") ; | 
 |  |  |         sb.append("      " + comName + " : \n") ; | 
 |  |  |         sb.append("      控制器类型 : ") ; | 
 |  |  |         sb.append(controllerType == null?"未知":(controllerType.equals("01")?"测控一体阀":(controllerType.equals("57")?"井电控制器":"未知"))) ; | 
 |  |  |         sb.append("\n") ; | 
 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void deal(Data data) { | 
 |  |  |         if (data.rtuResultSendWebUrl != null && data.rtuResultSendWebUrl.trim().equals("")) { | 
 |  |  |         if (data.rtuResultSendWebUrl != null && !data.rtuResultSendWebUrl.trim().equals("")) { | 
 |  |  |             String url = UriComponentsBuilder.fromUriString(data.rtuResultSendWebUrl) | 
 |  |  |                     .build() | 
 |  |  |                     .toUriString(); | 
 |  |  | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |             } | 
 |  |  |             assert response != null; | 
 |  |  |             //assert response != null; | 
 |  |  |         } else { | 
 |  |  |             log.error("严重错误,在com.dy.aceMw.web.comResult.CommandResultDeal里,处理的是RTU命令结果Node,但数据中rtuResultSendWebUrl为空"); | 
 |  |  |         } | 
 
 |  |  | 
 |  |  |         <base  | 
 |  |  |             isLowPower="false" | 
 |  |  |             onlyOneProtocol="true" | 
 |  |  |             downComandMaxResendTimes="3" | 
 |  |  |             downComandMaxResendTimes="1" | 
 |  |  |             commandSendInterval="3" | 
 |  |  |             cachWaitResultTimeout="60" | 
 |  |  |             offLineCachTimeout="86400" | 
 
 |  |  | 
 |  |  | package com.dy.pipIrrMwTestWeb; | 
 |  |  |  | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.pipIrrMwTestWeb.test.Test; | 
 |  |  | import com.dy.pipIrrMwTestWeb.test.CommandCtrl; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.boot.CommandLineRunner; | 
 |  |  | import org.springframework.boot.SpringApplication; | 
 |  |  | 
 |  |  |                 }) | 
 |  |  |         } | 
 |  |  | ) | 
 |  |  | public class PipIrrMwTestWebApplication implements CommandLineRunner { | 
 |  |  | public class PipIrrMwTestWebApplication{ | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private Test test ; | 
 |  |  |     private CommandCtrl test ; | 
 |  |  |  | 
 |  |  |     public static void main(String[] args) { | 
 |  |  |         SpringApplication.run(PipIrrMwTestWebApplication.class, args); | 
 |  |  |     } | 
 |  |  |     /** | 
 |  |  |      * Spring容器启动完成后,执行下面方法 | 
 |  |  |      * @param args 参数 | 
 |  |  |      * @throws Exception 异常 | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     public void run(String... args) throws Exception { | 
 |  |  |         BaseResponse res = test.test() ; | 
 |  |  |         System.out.println(res.toString()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| File was renamed from pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/TestSupport.java | 
 |  |  | 
 |  |  |  * @Date: 2024/5/14 17:32 | 
 |  |  |  * @Description | 
 |  |  |  */ | 
 |  |  | public class TestSupport { | 
 |  |  | public class ComSupport { | 
 |  |  |     protected static String mwUrlTest = "http://127.0.0.1:8070/rtuMw/com/test" ; | 
 |  |  |     protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ; | 
 |  |  |  | 
 |  |  |     protected static String rtuAddr = "37142501020100215" ; | 
 |  |  |     protected static String rtuResultSendWebUrl = "http://127.0.0.1:8080/test" ; | 
 |  |  |     protected static String rtuResultSendWebUrl = "http://127.0.0.1:65535/test/comRes/receive" ; | 
 |  |  |  | 
 |  |  |     protected static String controllerType = "57" ; | 
 |  |  |     protected static Integer projectNo = 10 ; | 
 |  |  |     protected static String controllerType = "57" ;//控制器类型 | 
 |  |  |     protected static Integer projectNo = 10 ;//项目编码 | 
 |  |  |  | 
 |  |  |     protected static String icCardAddr = "04BEA5BB" ; | 
 |  |  |     protected static String icCardNo = "04BEA5BB" ; | 
 |  |  |     protected static String icCardAddr = "04BEA5BB" ;//IC卡地址 | 
 |  |  |     protected static String icCardNo = "37142501020500001" ;//IC卡编号(用户卡序列号) | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private RestTemplate restTemplate; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     public void setRestTemplate(RestTemplate restTemplate){ | 
 |  |  |         this.restTemplate = restTemplate ; | 
 |  |  |     } | 
 |  |  |     private RestTemplate restTemplate; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     protected ComCdXyVo comCdXyVo(){ | 
 |  |  |         ComCdXyVo comVo = new ComCdXyVo() ; | 
 |  |  | 
 |  |  |         com.code = code ; | 
 |  |  |         com.rtuAddr = rtuAddr ; | 
 |  |  |         com.type = CommandType.outerCommand ; | 
 |  |  |         com.noRtMwDealRes = false ; | 
 |  |  |         com.rtuResultSendWebUrl = rtuResultSendWebUrl ; | 
 |  |  |  | 
 |  |  |         com.param = param ; | 
 |  |  | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         assert response != null; | 
 |  |  |         return response.getBody(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         assert response != null; | 
 |  |  |         return response.getBody(); | 
 |  |  |     } | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | package com.dy.pipIrrMwTestWeb.test; | 
 |  |  |  | 
 |  |  | import com.dy.common.mw.protocol.p206V202404.CodeV202404; | 
 |  |  | import com.dy.common.mw.protocol.p206V202404.downVos.*; | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @Author: liurunyu | 
 |  |  |  * @Date: 2024/5/14 14:20 | 
 |  |  |  * @Description | 
 |  |  |  */ | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | @RequestMapping(path="com") | 
 |  |  | @SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked") | 
 |  |  | public class CommandCtrl extends ComSupport { | 
 |  |  |  | 
 |  |  |     @GetMapping(path = "test") | 
 |  |  |     public BaseResponse<String> test() { | 
 |  |  |         //return this.connect() ;//连接通信中间件测试 | 
 |  |  |         return this.cdXY(CodeV202404.cd_30) ;//发送固定参数XY的命令 | 
 |  |  |         //return this.cd55(1) ; | 
 |  |  |         //return this.cd15() ; | 
 |  |  |         //return this.cd16() ; | 
 |  |  |         //return this.cd22() ; | 
 |  |  |         //return this.cd31() ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 测试连通性 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     private BaseResponse connect(){ | 
 |  |  |         return this.sendTest() ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //发送固定参数的命令 | 
 |  |  |     private BaseResponse cdXY(String code){ | 
 |  |  |         return this.sendCom2Mw(this.command(code, this.comCdXyVo(), null)) ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //设置终端地址(AFN=0x10H) | 
 |  |  |     private BaseResponse cd10(){ | 
 |  |  |         ComCd10Vo comVo = new ComCd10Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.rtuNewAddr = CommandCtrl.rtuAddr ; | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_10, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |      //远程用户充值 (AFN=0x15H) | 
 |  |  |     private BaseResponse cd15(){ | 
 |  |  |         ComCd15Vo comVo = new ComCd15Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.icCardAddr = CommandCtrl.icCardAddr ;//IC卡地址(8位数字或字母) | 
 |  |  |         comVo.icCardNo = CommandCtrl.icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) | 
 |  |  |         comVo.chargeMoney = 20.0 ;//单位:元  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.chargeWater = 20.0 ;//单位:m3  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.flowNo = "123456789012" ;//流水号(12位数字) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_15, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端剩余水量和剩余金额报警值 (AFN=0x16H) | 
 |  |  |     private BaseResponse cd16(){ | 
 |  |  |         ComCd16Vo comVo = new ComCd16Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.waterAlarm = 100 ;//剩余水量报警值,单位:m3。整数,取值范围0~9999 | 
 |  |  |         comVo.moneyAlarm = 3 ;//剩余金额报警值,单位:元。整数,取值范围0~9999 | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_16, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端IP地址 (AFN=0x21H) | 
 |  |  |     private BaseResponse cd21(){ | 
 |  |  |         ComCd21Vo comVo = new ComCd21Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.channel = 1 ;//IP通道号(取值范围 1、2). | 
 |  |  |         comVo.ip = "111.222.123.321" ;//IP(例如 125.235.35.89) | 
 |  |  |         comVo.port = 60000 ;///端口号(0~65536) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_21, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置机井年最大开采量和水位下限 (AFN=0x22H) | 
 |  |  |     private BaseResponse cd22(){ | 
 |  |  |         ComCd22Vo comVo = new ComCd22Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.maxAmountYear = 12345 ;//机井年最大用水量单位:m3 整数,取值范围0~99999999 | 
 |  |  |         comVo.limitLevel = 123.4; //水位下限 单位:m 取值范围:0~9999.99 | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_22, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端域名(AFN=0x23H) | 
 |  |  |     private BaseResponse cd23(){ | 
 |  |  |         ComCd23Vo comVo = new ComCd23Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.channel = 1 ;//IP通道号(取值范围 1、2). | 
 |  |  |         comVo.domain = "www.baidu.com" ;//域名(例如 dayuyanjiuyuan.to),最大长度42字符 | 
 |  |  |         comVo.port = 60000 ;///端口号(0~65536) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_23, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端注册号(AFN=0x24H) | 
 |  |  |     private BaseResponse cd24(){ | 
 |  |  |         ComCd24Vo comVo = new ComCd24Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.registerNo = "102030405060708090" ;//域名(例如 dayuyanjiuyuan.to),最大长度42字符 | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_24, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端年用水量(AFN=0x24H) | 
 |  |  |     private BaseResponse cd26(){ | 
 |  |  |         ComCd26Vo comVo = new ComCd26Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.ipChannel = 1  ;//IP通道号 0x01:1通道 0x02:2通道. | 
 |  |  |         comVo.maxAmountYear = 123456  ;//设备终端年用水量 单位:m3 整数,取值范围0~99999999 | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_26, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //设置设备终端用水有效(AFN=0x31H) | 
 |  |  |     private BaseResponse cd31(){ | 
 |  |  |         ComCd31Vo comVo = new ComCd31Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.valid = false ;//有效性 | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_31, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //查询遥测终端充值记录 (AFN=0x55H) | 
 |  |  |     private BaseResponse cd55(int page){ | 
 |  |  |         ComCd55Vo comVo = new ComCd55Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.page = page ;//分页(取值范围1、2、3、4、5、6、7、8、9) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_55, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //查询设备终端用户用水记录(AFN=0x65H) | 
 |  |  |     private BaseResponse cd65(int page){ | 
 |  |  |         ComCd65Vo comVo = new ComCd65Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.page = page ; | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_65, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //查询控制器IP地址(AFN=0x86H) | 
 |  |  |     private BaseResponse cd86(){ | 
 |  |  |         ComCd86Vo comVo = new ComCd86Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.channel = 1 ;//IP通道号(取值范围 1、2). | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_86, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //查询控制器域名(AFN=0x87H) | 
 |  |  |     private BaseResponse cd87(){ | 
 |  |  |         ComCd87Vo comVo = new ComCd87Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.channel = 1 ;//IP通道号(取值范围 1、2). | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_87, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //平台/APP远程开启水泵/阀门(AFN=0x92H/AFN=0xA2H) | 
 |  |  |     private BaseResponse cd92(){ | 
 |  |  |         ComCd92_A2Vo comVo = new ComCd92_A2Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         //comVo.icCardAddr = Test.icCardAddr ;//IC卡地址(8位数字或字母) | 
 |  |  |         comVo.icCardNo = CommandCtrl.icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) | 
 |  |  |         comVo.waterRemain = 123.45 ;//单位:元  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.moneyRemain = 234.56 ;//单位:m3  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.waterPrice = 0.8 ;//水量单价 单位:元, 2个小数点 | 
 |  |  |         comVo.elePrice = 1.2 ;//电量单价 单位:元, 2个小数点 | 
 |  |  |         comVo.orderNo = "1234567890123456" ;//订单号(16位数字) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_92, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //平台/APP远程开启水泵/阀门(AFN=0x92H/AFN=0xA2H) | 
 |  |  |     private BaseResponse cdA2(){ | 
 |  |  |         ComCd92_A2Vo comVo = new ComCd92_A2Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         //comVo.icCardAddr = Test.icCardAddr ;//IC卡地址(8位数字或字母) | 
 |  |  |         comVo.icCardNo = CommandCtrl.icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) | 
 |  |  |         comVo.waterRemain = 123.45 ;//单位:元  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.moneyRemain = 234.56 ;//单位:m3  2位小数点(最大值 99999999.99) | 
 |  |  |         comVo.waterPrice = 0.8 ;//水量单价 单位:元, 2个小数点 | 
 |  |  |         comVo.elePrice = 1.2 ;//电量单价 单位:元, 2个小数点 | 
 |  |  |         comVo.orderNo = "1234567890123456" ;//订单号(16位数字) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_A2, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |    //平台/APP远程关闭水泵/阀门(AFN=0x93H/AFN=0xA3H) | 
 |  |  |     private BaseResponse cd93(){ | 
 |  |  |         ComCd93_A3Vo comVo = new ComCd93_A3Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.icCardNo = CommandCtrl.icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) | 
 |  |  |         comVo.orderNo = "1234567890123456" ;//订单号(16位数字) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_93, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |     //平台/APP远程关闭水泵/阀门(AFN=0x93H/AFN=0xA3H) | 
 |  |  |     private BaseResponse cdA3(){ | 
 |  |  |         ComCd93_A3Vo comVo = new ComCd93_A3Vo() ; | 
 |  |  |         comVo.controllerType = CommandCtrl.controllerType ; | 
 |  |  |         comVo.projectNo = CommandCtrl.projectNo  ; | 
 |  |  |         comVo.icCardNo = CommandCtrl.icCardNo ;//用户卡序列号(17位数字)(6字节BCD,2字节HEX) | 
 |  |  |         comVo.orderNo = "1234567890123456" ;//订单号(16位数字) | 
 |  |  |  | 
 |  |  |         return this.sendCom2Mw(this.command(CodeV202404.cd_A3, comVo, null)) ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package com.dy.pipIrrMwTestWeb.test; | 
 |  |  |  | 
 |  |  | import com.dy.common.mw.protocol.Data; | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.http.MediaType; | 
 |  |  | import org.springframework.web.bind.annotation.PostMapping; | 
 |  |  | import org.springframework.web.bind.annotation.RequestBody; | 
 |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
 |  |  | import org.springframework.web.bind.annotation.RestController; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @Author: liurunyu | 
 |  |  |  * @Date: 2024/5/18 11:04 | 
 |  |  |  * @Description | 
 |  |  |  */ | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | @RequestMapping(path="comRes") | 
 |  |  | @SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked") | 
 |  |  | public class CommandResultCtrl { | 
 |  |  |  | 
 |  |  |     @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE) | 
 |  |  |     public BaseResponse<String> receive(@RequestBody Data data) { | 
 |  |  |         log.info(data.toString()) ; | 
 |  |  |         return BaseResponseUtils.buildSuccess("ok"); | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |             enabled: false | 
 |  |  |     port: 65535 | 
 |  |  |     servlet: | 
 |  |  |         context-path: /test/web #web访问上下文路径 | 
 |  |  |         context-path: /test #web访问上下文路径 | 
 |  |  |         encoding: | 
 |  |  |             #取消默认的字符集编码 | 
 |  |  |             enabled: true |