|  |  | 
 |  |  |                     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 ;//协议名称 | 
 |  |  | 
 |  |  |         String controllerType = ByteUtil.bytes2Hex(bs, false, index, 1) ; | 
 |  |  |  | 
 |  |  |         index++ ; | 
 |  |  |         Integer projectNo = 0 + bs[index]; | 
 |  |  |         Integer projectNo = (int)bs[index]; | 
 |  |  |  | 
 |  |  |         index++ ; | 
 |  |  |         byte hasRecord = bs[index]; | 
 |  |  |         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 += 39 ; | 
 |  |  |                 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 ; | 
 |  |  | 
 |  |  |             cdData.icCardNo  = GlParse.parseIcCardNo(bs, index, 6, 2) ; | 
 |  |  |  | 
 |  |  |             index += 8 ; | 
 |  |  |             int chargeMoney = ByteUtil.BCD2Int_BE(bs, index, index + 4) ; | 
 |  |  |             Long chargeMoney = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; | 
 |  |  |             cdData.chargeMoney = chargeMoney/100.0D; | 
 |  |  |  | 
 |  |  |             index += 5 ; | 
 |  |  |             int chargeWater = ByteUtil.BCD2Int_BE(bs, index, index + 4) ; | 
 |  |  |             Long chargeWater = ByteUtil.BCD2Long_LE(bs, index, index + 4) ; | 
 |  |  |             cdData.chargeWater = chargeWater/100.0D; | 
 |  |  |  | 
 |  |  |             index += 5 ; | 
 |  |  |             cdData.flowNo = ByteUtil.BCD2String_BE(bs, index, index + 5) ; | 
 |  |  |             cdData.flowNo = ByteUtil.BCD2String_LE(bs, index, index + 5) ; | 
 |  |  |  | 
 |  |  |             index += 6 ; | 
 |  |  |             byte flag = bs[index] ; | 
 |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             index += 1 ; | 
 |  |  |             String ss = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             index++ ; | 
 |  |  |             String mm = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             index++ ; | 
 |  |  |             String HH = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             index++ ; | 
 |  |  |             String dd = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             index++ ; | 
 |  |  |             String MM = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             index++ ; | 
 |  |  |             String yy = ByteUtil.BCD2String_BE(bs, index, index) ; | 
 |  |  |             cdData.dt = "20" + yy + "-" + MM + "-" + dd + " " + HH + ":" + mm  + ":" + ss ; | 
 |  |  |             cdData.dt = GlParse.parseRtuDt(bs, index) ; | 
 |  |  |  | 
 |  |  |             return cdData ; | 
 |  |  |         }else{ |