276 lines
7.1 KiB
Java
276 lines
7.1 KiB
Java
package com.zhgd.xmgl.util;
|
||
|
||
import java.io.UnsupportedEncodingException;
|
||
|
||
/**
|
||
* 车辆系统控制工具类
|
||
*
|
||
* @author Administrator
|
||
*
|
||
*/
|
||
|
||
public class yunboCarUtils {
|
||
// 公共变量
|
||
static String randoms = "0";
|
||
|
||
/**
|
||
* 语音播报函数 入参: "语音内容"
|
||
*
|
||
* @param plateNumber
|
||
* (播放车牌语音) "粤B12345" content(播放语音)"欢迎光临;临时车不允许进场;此车已出场;一路平安"
|
||
* @return
|
||
*/
|
||
public static String pushvoicetodevices(String plateNumber, String content) {
|
||
// 拼接--AA55(包头) 01(流水号) 64(地址) 00(业务类型) 22(命令) 0001(长度)
|
||
// 01(内容) 0556(校验) AF(结束符) --欢迎光临
|
||
String randomsd = ontheVariable(randoms);
|
||
// 内容匹配
|
||
String contentConversion = null;
|
||
int extent = 00;
|
||
String transitions = null;
|
||
try {
|
||
transitions = toGBK(plateNumber);// 车牌内容转换后
|
||
} catch (UnsupportedEncodingException e) {
|
||
// TODO Auto-generated catch block
|
||
e.printStackTrace();
|
||
}
|
||
if ("欢迎光临".equals(content)) {
|
||
// 01编号
|
||
contentConversion = "01";
|
||
} else if ("一路平安".equals(content)) {
|
||
// 02编号
|
||
contentConversion = "02";
|
||
} else if ("临时车不允许进场".equals(content)) {
|
||
// 2165编号
|
||
contentConversion = "2165";
|
||
} else if ("此车已出场".equals(content)) {
|
||
// 06编号
|
||
contentConversion = "06";
|
||
}
|
||
String Conversion = transitions + contentConversion;// 车牌+内容(欢迎光临)
|
||
extent = Conversion.length() / 2;
|
||
// 长度补位
|
||
String hex1 = Integer.toHexString(extent);
|
||
int s1 = hex1.length();
|
||
String bh2 = null;// 最终长度(一位00)
|
||
if (s1 <= 1) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(hex1.toUpperCase());
|
||
bh2 = zh.toString();
|
||
} else {
|
||
bh2 = Integer.toHexString(extent);
|
||
}
|
||
|
||
String send = "AA55";
|
||
String pjaxj = randomsd + "64" + "00" + "2200" + bh2 + Conversion;
|
||
// 校验码
|
||
byte[] bytes = hexStringToByteArray(pjaxj + "0000");
|
||
// 补充位数
|
||
String hex = getCRC(bytes);
|
||
int s = hex.length();
|
||
String bh1 = null;
|
||
if (s <= 3) {
|
||
if (s == 1) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("000").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
if (s == 2) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("00").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
if (s == 3) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
} else {
|
||
bh1 = hex.toUpperCase();
|
||
}
|
||
String sends = send + pjaxj + bh1 + "AF";
|
||
return sends;
|
||
}
|
||
|
||
/***
|
||
* 下发显示命令 参数:
|
||
*
|
||
* @param type
|
||
* 01表示第一行 02 表示第二行 03表示第三行 04表示第四行
|
||
* @param content
|
||
* 表示显示内容
|
||
* @return
|
||
*/
|
||
public static String pushLedtexttodevice(String type, String content) {
|
||
String randomsd = ontheVariable(randoms);
|
||
int extent = 0;
|
||
// 长度
|
||
try {
|
||
extent = toGBK(content).length() / 2 + 4;
|
||
} catch (UnsupportedEncodingException e) {
|
||
// TODO Auto-generated catch block
|
||
e.printStackTrace();
|
||
}
|
||
String hex1 = Integer.toHexString(extent);
|
||
int s1 = hex1.length();
|
||
String bh2 = null;
|
||
if (s1 <= 1) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(hex1.toUpperCase());
|
||
bh2 = zh.toString();
|
||
} else {
|
||
bh2 = Integer.toHexString(extent);
|
||
}
|
||
// 校验码
|
||
String pjaxj = null;
|
||
try {
|
||
pjaxj = randomsd + "64" + "00" + "2700" + bh2 + type + "0F" + "01"
|
||
+ "00" + toGBK(content);
|
||
} catch (UnsupportedEncodingException e1) {
|
||
// TODO Auto-generated catch block
|
||
e1.printStackTrace();
|
||
}
|
||
byte[] bytes = hexStringToByteArray(pjaxj + "0000");
|
||
// 补充位数
|
||
String hex = getCRC(bytes);
|
||
int s = hex.length();
|
||
String bh1 = null;
|
||
if (s <= 3) {
|
||
if (s == 1) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("000").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
if (s == 2) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("00").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
if (s == 3) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(hex.toUpperCase());
|
||
bh1 = zh.toString();
|
||
}
|
||
} else {
|
||
bh1 = hex.toUpperCase();
|
||
}
|
||
String send = "AA55" + pjaxj + bh1 + "AF";
|
||
return send;
|
||
}
|
||
|
||
// 车牌内容转GBK码
|
||
private static String toGBK(String source)
|
||
throws UnsupportedEncodingException {
|
||
StringBuilder sb = new StringBuilder();
|
||
byte[] bytes = source.getBytes("GBK");
|
||
for (byte b : bytes) {
|
||
sb.append(Integer.toHexString((b & 0xff)).toUpperCase());
|
||
}
|
||
return sb.toString();
|
||
}
|
||
|
||
/**
|
||
* 10进制转16进制(长度编译)
|
||
*
|
||
* @param systems
|
||
* @return
|
||
*/
|
||
private static String systems(String systems) {
|
||
int systemsd = Integer.valueOf(systems);
|
||
String hex = Integer.toHexString(systemsd);
|
||
int s = hex.length();
|
||
if (s <= 9) {
|
||
if (s == 1) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("000").append(hex.toUpperCase());
|
||
String bh = zh.toString();
|
||
return bh;
|
||
}
|
||
if (s == 2) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("00").append(hex.toUpperCase());
|
||
String bh = zh.toString();
|
||
return bh;
|
||
}
|
||
if (s == 3) {
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(hex.toUpperCase());
|
||
String bh = zh.toString();
|
||
return bh;
|
||
}
|
||
} else {
|
||
return hex.toUpperCase();
|
||
}
|
||
return hex;
|
||
}
|
||
|
||
/**
|
||
* 流水号
|
||
*
|
||
* @param randoms
|
||
* @return
|
||
*/
|
||
private static String ontheVariable(String randoms) {
|
||
int transform = Integer.valueOf(randoms);
|
||
if (transform < 9) {
|
||
int randomsd = transform + 1;
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(randomsd);
|
||
randoms = zh.toString();
|
||
return randoms;
|
||
}
|
||
if (transform >= 9 && transform < 99) {
|
||
int randomsd = transform + 1;
|
||
randoms = String.valueOf(randomsd);
|
||
return randoms;
|
||
}
|
||
if (transform >= 99) {
|
||
transform = 0;
|
||
if (transform < 9) {
|
||
int randomsd = transform + 1;
|
||
StringBuffer sb = new StringBuffer();
|
||
StringBuffer zh = sb.append("0").append(randomsd);
|
||
randoms = zh.toString();
|
||
return randoms;
|
||
}
|
||
}
|
||
return randoms;
|
||
}
|
||
|
||
private static byte[] hexStringToByteArray(String s) {
|
||
int len = s.length();
|
||
byte[] b = new byte[len / 2];
|
||
for (int i = 0; i < len; i += 2) {
|
||
// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
|
||
b[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character
|
||
.digit(s.charAt(i + 1), 16));
|
||
}
|
||
return b;
|
||
}
|
||
|
||
/**
|
||
* 计算CRC16校验码
|
||
*
|
||
* @param bytes
|
||
* @return
|
||
*/
|
||
private static String getCRC(byte[] bytes) {
|
||
int CRC = 0x0000ffff;
|
||
int POLYNOMIAL = 0x0000a001;
|
||
|
||
int i, j;
|
||
for (i = 0; i < bytes.length; i++) {
|
||
CRC ^= ((int) bytes[i] & 0x000000ff);
|
||
for (j = 0; j < 8; j++) {
|
||
if ((CRC & 0x00000001) != 0) {
|
||
CRC >>= 1;
|
||
CRC ^= POLYNOMIAL;
|
||
} else {
|
||
CRC >>= 1;
|
||
}
|
||
}
|
||
}
|
||
return Integer.toHexString(CRC);
|
||
}
|
||
}
|