package com.energyfuture.utils;
import com.energyfuture.protocol.ReqUpImageCodec_85H;
import com.energyfuture.protocol.ReqUpImageCodec_86H;
import org.apache.commons.lang.StringUtils;
import sun.misc.BASE64Decoder;
import java.sql.Timestamp;
import java.util.*;
public class AssemblyCommand {
public static String getCommand00H() {
return UpdParam.Command00H;
}
/**
* 根据设备编码,组装终端号码
*
* @param deviceCode 设备编码
* @return String
*/
public static String getCommand(String deviceCode) {
String idEnd = "";
String idStart = "";
if (!StringUtils.isEmpty(deviceCode) && !"null".equals(deviceCode)) {
idEnd = deviceCode.substring(deviceCode.length() - 4, deviceCode.length());
idStart = deviceCode.substring(0, 2);
}
String id = idStart + idEnd;
System.out.println("终端号码:" + id);
System.out.println("16进制终端号码:" + HexConvert.convertStringToHex(id));
return HexConvert.convertStringToHex(id);
}
/**
* 根据拍照时间 通道号 预置位号 包数高位 包数低位 ,组装84数据域。
*
* @param dServerTime 服务器日期
* @param channelNo 通道号
* @param presetPosition 预置位号
* @param imageStr 图片信息(Base64字符串)
* @return String
*/
public static String getCommand_84_DataDomain(String dServerTime, String channelNo, String presetPosition, String imageStr) {
String dataDomain = "";
//构建日期
if (!StringUtils.isEmpty(dServerTime) && !"null".equals(dServerTime)) {
Date time = Timestamp.valueOf(dServerTime);
dataDomain = HexConvert.getCommandDate(time);
} else {
Date time = new Date();
dataDomain = HexConvert.getCommandDate(time);
}
//构建 通道号
int channelID = UpdParam.COMMAND_84_CHANNELNUMBER;
if (!StringUtils.isEmpty(channelNo) && !"null".equals(channelNo)) {
channelID = Integer.parseInt(channelNo);
}
System.out.println("通道号:" + channelID);
dataDomain += HexConvert.getCommandDate(channelID);
//构建预置位号
int presetPositionID = UpdParam.COMMAND_84_PRESETPOSITIONNUMBER;
if (!StringUtils.isEmpty(presetPosition) && !"null".equals(presetPosition)) {
presetPositionID = Integer.parseInt(presetPosition);
}
System.out.println("预置位号:" + channelID);
dataDomain += HexConvert.getCommandDate(presetPositionID);
//构建包数
if (!StringUtils.isEmpty(imageStr) && !"null".equals(imageStr)) {
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] byteAll = decoder.decodeBuffer(imageStr);
Object[] obj = HexConvert.splitAry(byteAll, UpdParam.BYTESUMMAX);
//包数高位 包数低位 不够4位,前面补0
String packetNumber = HexConvert.demical2Hex(obj.length);
int lengthStr = 4 - packetNumber.length();
String zeroStr = "";
for (int k = 0; k < lengthStr; k++) {
zeroStr += "0";
}
zeroStr += packetNumber;
dataDomain += zeroStr;
System.out.println("拆包每包字节数:" + UpdParam.BYTESUMMAX);
System.out.println("拆包总包数:" + obj.length);
} catch (Exception e) {
System.err.println(e);
}
} else {
//如果图片里面没有值,高低位给0000
dataDomain += "0000";
}
System.out.println("16进制数据域:" + dataDomain);
return dataDomain;
}
/**
* 根据 通道号 预置位号 包数高位 包数低位 ,整个图片数据,组装85数据域。
*
* @param channelID 通道号
* @param presetPosition 预置位号
* @param imageStr 图片信息(Base64字符串)
* @return List<Map<String, Object>>
* 图片拆包的数据(单个包的图片资源16进制imageNumber,
* 数据域16进制dataField,
* 数据长度commandDataSizeStr,
* 图片字节数长度commandImageStrLength) 都是跟包号commandSubpackage相互对应
*/
public static List<Map<String, Object>> getCommand_85_DataDomain(int channelID, int presetPosition, String imageStr) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
String dataDomain = "";
//构建通道号
System.out.println("通道号:" + channelID);
dataDomain += HexConvert.getCommandDate(channelID);
//构建预置位号
System.out.println("预置位号:" + presetPosition);
dataDomain += HexConvert.getCommandDate(presetPosition);
//构建包号高
if (!StringUtils.isEmpty(imageStr) && !"null".equals(imageStr)) {
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] byteAll = decoder.decodeBuffer(imageStr);
Object[] subAryList = HexConvert.splitAry(byteAll, UpdParam.BYTESUMMAX);
System.out.println("分解子包个数:" + subAryList.length);
for (int i = 0; i < subAryList.length; i++) {
String dataDomainItem = "";
Map item = new HashMap<Object, Object>();
//图像数据 和对应的包号
int packageID = i + 1;
//分解图片数据
String imStr = HexConvert.BinaryToHexString((byte[])subAryList[i]);
item.put("imageNumber", imStr);
//子包包号高位 子包包号低位
String commandSubpackageStr = HexConvert.demical2Hex(packageID);
int lengthStrss = 4 - commandSubpackageStr.length();
String commandSubpackage = "";
for (int k = 0; k < lengthStrss; k++) {
commandSubpackage += "0";
}
commandSubpackage += commandSubpackageStr;
item.put("commandSubpackage", commandSubpackage);
System.out.println(packageID + "" + "子包包号高位 子包包号低位:" + commandSubpackage);
dataDomainItem += commandSubpackage;
//图像数据字节总数
String commandImageStrLength = HexConvert.getCommandDate(((byte[])subAryList[i]).length);
int lengthStr = 4 - commandImageStrLength.length();
String zeroStr = "";
for (int k = 0; k < lengthStr; k++) {
zeroStr += "0";
}
zeroStr += commandImageStrLength;
System.out.println((byte[])subAryList[i] + "图像数据字节数:" + zeroStr);
item.put("commandImageStrLength", zeroStr);
//数据域16进制编码
String dataField = dataDomain + dataDomainItem+imStr;
item.put("dataField", dataField);
System.out.println("数据域16进制编码:" + dataField);
//数据长度
int commandDataSize = 4 + ((byte[])subAryList[i]).length;
String commandDataSizeStr = HexConvert.getCommandDate(commandDataSize);
int commandDataSizeStrlengthStr = 4 - commandDataSizeStr.length();
String zeroStrs = "";
for (int k = 0; k < commandDataSizeStr
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
udpMessage.7z (34个子文件)
udpMessage
pom.xml 2KB
target
classes
com
energyfuture
protocol
ReqUpImageCodec_84H.class 3KB
MessageCodec.class 263B
ReqUpImageCodec_85H.class 4KB
ReqUpImageCodec_86H.class 3KB
App.class 561B
service
Template.class 3KB
entity
Length.class 143B
DataFormatEntity.class 672B
ReqUpImageDataFormat_84H.class 528B
ReqUpImageDataField_84H.class 499B
CTRL_BYTE.class 1KB
utils
HexConvert.class 8KB
UpdParam.class 926B
DBUtil.class 2KB
SendMessages.class 3KB
AssemblyCommand.class 9KB
main
Test.class 6KB
dsd.class 1KB
connector
Connector.class 193B
generated-sources
annotations
src
test
java
main
resources
java
com
energyfuture
protocol
ReqUpImageCodec_84H.java 4KB
ReqUpImageCodec_86H.java 4KB
MessageCodec.java 245B
ReqUpImageCodec_85H.java 6KB
App.java 200B
service
Template.java 4KB
utils
HexConvert.java 11KB
UpdParam.java 1KB
main
dsd.java 924B
Test.java 7KB
SendMessages.java 4KB
DBUtil.java 2KB
AssemblyCommand.java 14KB
CTRL_BYTE.java 342B
共 34 条
- 1
资源评论
javaMyGod
- 粉丝: 18
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功