vince
2023-09-04 e241acb82959328535d8f903902863bd420df139
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.ld.igds.protocol.zldz.command.builder;
 
import com.ld.igds.io.request.BaseRequest;
import com.ld.igds.protocol.zldz.command.message.Message;
import com.ld.igds.protocol.zldz.command.message.MessageBody;
import com.ld.igds.protocol.zldz.util.CRC8;
import com.ld.igds.protocol.zldz.util.ServerUtils;
import com.ld.igds.util.BytesUtil;
 
 
/**
 * 命令生成器
 *
 * @author Andy
 */
public abstract class CommandBuilder {
 
    /*
     * 命令创建
     *
     * @param order
     */
    public Message buildMessage(BaseRequest request) {
        Message message = new Message();
 
        message.setBegin(ServerUtils.MSG_START);
 
        // 调整Message头部信息
        buildHeader(message, request);
 
        //包头校验
        buildCrc8(message);
 
        // 创建消息体
        buildBody(message, request);
 
        // 添加校验
        buildCrc16(message);
 
        message.setEnd(ServerUtils.MSG_END);
 
        // 生成整体命令信息和BYte信息
        build(message);
 
        return message;
    }
 
 
    public void buildHeader(Message message, BaseRequest request) {
        String hexCompanyId = BytesUtil.getTargetId(request.getCompanyId(),true);
        hexCompanyId = BytesUtil.tran_LH(hexCompanyId);
        message.setSourceId(hexCompanyId);
        message.setSendId(hexCompanyId);
        message.setCompanyId(hexCompanyId);
 
        message.setSourceId(BytesUtil.getTargetId(request.getSerId(), true));
 
        message.setMessageType(ServerUtils.MSG_TYPE_1116);
    }
 
    public void buildBody(Message message, BaseRequest request) {
        MessageBody body = new MessageBody();
        body.setContent("");
        body.setLength(0);
        message.setBody(body);
    }
 
    public void buildCrc8(Message message) {
        StringBuffer hexSbCrc8 = new StringBuffer();
        hexSbCrc8.append(message.getSourceId());
        hexSbCrc8.append(message.getTargetId());
        hexSbCrc8.append(message.getSendId());
        hexSbCrc8.append(message.getGateway1());
        hexSbCrc8.append(message.getGateway2());
        hexSbCrc8.append(message.getMessageType());
        hexSbCrc8.append(message.getResult());
        hexSbCrc8.append(message.getCompanyId());
 
        byte[] bytes = BytesUtil.hexStrToBytes(hexSbCrc8.toString());
        byte crc8 = CRC8.calcCrc8(bytes, (short) 0, (short) (bytes.length),
                (byte) 0);
 
        message.setHexCrc8(BytesUtil.byteToHex(crc8));
    }
 
 
    public void buildCrc16(Message message) {
        StringBuffer hexSbCrc16 = new StringBuffer();
        hexSbCrc16.append(message.getSourceId());
        hexSbCrc16.append(message.getTargetId());
        hexSbCrc16.append(message.getSendId());
        hexSbCrc16.append(message.getGateway1());
        hexSbCrc16.append(message.getGateway2());
        hexSbCrc16.append(message.getMessageType());
        hexSbCrc16.append(message.getResult());
        hexSbCrc16.append(message.getCompanyId());
 
        hexSbCrc16.append(message.getHexCrc8());
 
        hexSbCrc16.append(BytesUtil.tran_LH(BytesUtil
                .getHex2LenStr(message.getBody().getLength())));
 
        hexSbCrc16.append(message.getBody().getContent());
 
        byte[] byteCrc16 = BytesUtil.hexStrToBytes(hexSbCrc16.toString());
        short crc16Hex2 = CRC8.calculateCrc16(byteCrc16, (short) 0, (short) (byteCrc16.length));
        byte[] crc16Hex2Bytes = BytesUtil.shortToByte(crc16Hex2);
        int crc16 = BytesUtil.bytesToInt(crc16Hex2Bytes);
 
 
        message.setHexCrc16(BytesUtil.intToHexStr(crc16));
    }
 
    /**
     * 根据生成的命令,进行调整
     *
     * @param message
     */
    public void build(Message message) {
        StringBuffer hexSb = new StringBuffer();
 
        hexSb.append(message.getBegin());
        hexSb.append(message.getSourceId());
        hexSb.append(message.getTargetId());
        hexSb.append(message.getSendId());
        hexSb.append(message.getGateway1());
        hexSb.append(message.getGateway2());
        hexSb.append(message.getMessageType());
        hexSb.append(message.getResult());
        hexSb.append(message.getCompanyId());
        hexSb.append(message.getHexCrc8());
 
        hexSb.append(BytesUtil.tran_LH(BytesUtil
                .getHex2LenStr(message.getBody().getLength())));
 
        hexSb.append(message.getBody().getContent());
        hexSb.append(message.getHexCrc16());
        hexSb.append(message.getEnd());
 
        message.setStrMsg(hexSb.toString());
        message.setByteMsg(BytesUtil.hexStrToBytes(message.getStrMsg()));
    }
 
}