liurunyu
2024-05-29 b27d0ba5ab7a11ac6615e0cfee3cf428a7ae834f
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;
@@ -28,7 +32,7 @@
        MidResultToRtu midRs = new MidResultToRtu() ;
        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;//rtu返回命令结果 发向目的地web URL
        midRs.protocolName = para.protocolName ;//协议名称
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址(电信平台设备IMEI)
        midRs.rtuAddr = para.rtuAddr ;//Rtu地址
        midRs.commandId = para.commandId ;//命令ID,发起命令的客户端(web端)生成,以匹配命令结果
        midRs.downCode = para.commandCode ;//下行命令功能码;
        midRs.downBuffer = bs ;//下行命令数据
@@ -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);//长度放字节数组中