pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_38_Down.java
@@ -1,10 +1,13 @@
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.Com38Vo;
import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.ByteUtilUnsigned;
@@ -28,7 +31,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 ;//下行命令数据
@@ -52,49 +55,61 @@
     * @throws Exception 异常
     */
    public byte[] doParse(ParseParamsForDownV1_0_1 para) throws Exception {
        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
        byte[] bytes ;
        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
        byte index = 0 ;
        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
        if(para.param == null) {
            throw new Exception("命令参数为null") ;
        }else {
            JSONObject obj = (JSONObject) para.param;
            String json = obj.toJSONString();
            Com38Vo cvo = JSON.parseObject(json, Com38Vo.class);
            if (cvo == null) {
                throw new Exception("json转Com21Vo为null");
            }
            if (cvo.remainMoneyAlarm == null) {
                throw new Exception("用户余额报警值不能为空");
            }
            if (cvo.remainMoneyAlarm < 1.0) {
                throw new Exception("用户余额报警值不能小于1.0");
            }
            CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1();
            byte[] bytes;
            byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code];
            byte index = 0;
            bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte;
        index++ ;
        bsHead[index] = 0 ;//帧长度
            index++;
            bsHead[index] = 0;//帧长度
        index++ ;
        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
            index++;
            bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte;
        index++ ;
        bsHead[index] = commonV1_0_1.createCtrl((byte)0, (byte)0) ;
            index++;
            bsHead[index] = commonV1_0_1.createCtrl((byte) 0, (byte) 0);
        index++ ;
        GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
        index += 5 ;
            index++;
            GlCreate.createRtuAddr(para.rtuAddr, bsHead, index);
            index += 5;
        ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
            ByteUtil.hex2Bytes(para.commandCode, bsHead, index);
        if(para.param == null){
            throw new Exception("未提供命令参数数据,不能构造功能码为" + para.commandCode + "的下行命令") ;
        }else{
            index = 0 ;
            byte[] bs = new byte[10] ;
            Double remainMoneyAlarmDb = ((Double)para.param) * 100 ;
            Integer remainMoneyAlarmInt = remainMoneyAlarmDb.intValue() ;
            index = 0;
            byte[] bs = new byte[10];
            Double remainMoneyAlarmDb = cvo.remainMoneyAlarm * 100.0;
            Integer remainMoneyAlarmInt = remainMoneyAlarmDb.intValue();
            ByteUtilUnsigned.short2Bytes_LE(bs, remainMoneyAlarmInt.shortValue(), index);
            index += 2 ;
            index += 2;
            GlCreate.createPw(bs, index);
            index += 2 ;
            index += 2;
            GlCreate.createTp(bs, index);
            bytes = ByteUtil.bytesMerge(bsHead, bs) ;
            bytes = ByteUtil.bytesMerge(bsHead, bs);
            GlCreate.createLen(bytes);//长度放字节数组中
            byte[] bsTail = GlCreate.createCrcTail(bytes);//CRC和尾叠加字节数组中
            bytes = ByteUtil.bytesMerge(bytes, bsTail);
            return bytes;
        }
        GlCreate.createLen(bytes);//长度放字节数组中
        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC和尾叠加字节数组中
        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
        return bytes ;
    }
}