# Conflicts: # hai-bweb/src/main/java/com/bweb/controller/HighTestController.javadev-discount
commit
7e429bc852
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,39 @@ |
||||
package com.hai.config; |
||||
|
||||
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; |
||||
import org.eclipse.paho.client.mqttv3.MqttCallback; |
||||
import org.eclipse.paho.client.mqttv3.MqttMessage; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
@Configuration |
||||
public class MqttProviderCallBack implements MqttCallback { |
||||
|
||||
/** |
||||
* 与服务器断开 |
||||
* @param throwable |
||||
*/ |
||||
@Override |
||||
public void connectionLost(Throwable throwable) { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 消息到达回调 |
||||
* @param s |
||||
* @param mqttMessage |
||||
* @throws Exception |
||||
*/ |
||||
@Override |
||||
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { |
||||
System.out.println("消息到达"); |
||||
} |
||||
|
||||
/** |
||||
* 消息发布成功回调 |
||||
* @param iMqttDeliveryToken |
||||
*/ |
||||
@Override |
||||
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { |
||||
System.out.println("消息发布"); |
||||
} |
||||
} |
@ -0,0 +1,208 @@ |
||||
package com.hai.config; |
||||
|
||||
import io.netty.handler.codec.mqtt.MqttConnAckVariableHeader; |
||||
import io.netty.handler.codec.mqtt.MqttConnectVariableHeader; |
||||
import io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader; |
||||
import io.netty.handler.codec.mqtt.MqttPublishVariableHeader; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import javax.annotation.PostConstruct; |
||||
import org.eclipse.paho.client.mqttv3.*; |
||||
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.context.annotation.Configuration; |
||||
|
||||
@Configuration |
||||
@Slf4j |
||||
public class MqttProviderConfig { |
||||
// @Value("${spring.mqtt.username}")
|
||||
private String username; |
||||
|
||||
// @Value("${spring.mqtt.password}")
|
||||
private String password; |
||||
|
||||
// @Value("${spring.mqtt.url}")
|
||||
private String hostUrl; |
||||
|
||||
/* @Value("${spring.mqtt.client.id}") |
||||
private String clientId; |
||||
|
||||
@Value("${spring.mqtt.default.topic}") |
||||
private String defaultTopic;*/ |
||||
|
||||
/** |
||||
* 客户端对象 |
||||
*/ |
||||
private MqttClient client; |
||||
|
||||
/** |
||||
* 在bean初始化后连接到服务器 |
||||
*/ |
||||
// @PostConstruct
|
||||
public void init() { |
||||
connect("provider-" + System.currentTimeMillis()); |
||||
} |
||||
/* |
||||
@PostConstruct |
||||
public void init(String clientId) { |
||||
connect(clientId); |
||||
}*/ |
||||
|
||||
/** |
||||
* 客户端连接服务端 |
||||
*/ |
||||
public void connect(String clientId){ |
||||
try{ |
||||
//创建MQTT客户端对象
|
||||
client = new MqttClient(hostUrl,clientId,new MemoryPersistence()); |
||||
//连接设置
|
||||
MqttConnectOptions options = new MqttConnectOptions(); |
||||
//是否清空session,设置false表示服务器会保留客户端的连接记录(订阅主题,qos),客户端重连之后能获取到服务器在客户端断开连接期间推送的消息
|
||||
//设置为true表示每次连接服务器都是以新的身份
|
||||
options.setCleanSession(true); |
||||
//设置连接用户名
|
||||
options.setUserName(username); |
||||
//设置连接密码
|
||||
options.setPassword(password.toCharArray()); |
||||
//设置超时时间,单位为秒
|
||||
options.setConnectionTimeout(100); |
||||
//设置心跳时间 单位为秒,表示服务器每隔 1.5*20秒的时间向客户端发送心跳判断客户端是否在线
|
||||
options.setKeepAliveInterval(20); |
||||
// 设置遗嘱消息的话题,若客户端和服务器之间的连接意外断开,服务器将发布客户端的遗嘱信息
|
||||
// options.setWill("willTopic",(clientId + "与服务器断开连接").getBytes(),0,false);
|
||||
//设置回调
|
||||
client.setCallback(new MqttProviderCallBack()); |
||||
client.connect(options); |
||||
} catch(MqttException e){ |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
public void publish(int qos,boolean retained,String topic,String message) { |
||||
if (client == null) { |
||||
init(); |
||||
} |
||||
try { |
||||
MqttMessage mqttMessage = new MqttMessage(); |
||||
mqttMessage.setQos(qos); |
||||
mqttMessage.setRetained(retained); |
||||
mqttMessage.setPayload(message.getBytes("UTF-8")); |
||||
// 主题的目的地,用于发布/订阅信息
|
||||
MqttTopic mqttTopic = client.getTopic(topic); |
||||
//提供一种机制来跟踪消息的传递进度
|
||||
//用于在以非阻塞方式(在后台运行)执行发布是跟踪消息的传递进度
|
||||
MqttDeliveryToken token; |
||||
//将指定消息发布到主题,但不等待消息传递完成,返回的token可用于跟踪消息的传递状态
|
||||
//一旦此方法干净地返回,消息就已被客户端接受发布,当连接可用,将在后台完成消息传递。
|
||||
token = mqttTopic.publish(mqttMessage); |
||||
token.waitForCompletion(); |
||||
|
||||
} catch (MqttException e) { |
||||
e.printStackTrace(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
System.out.println(sendPrinterRrCodeBytest("1213131", 1)); |
||||
} |
||||
|
||||
public static byte[] sendPrinterRrCodeBytest(String printText, int pageCount) { |
||||
try { |
||||
byte[] by = printText.getBytes(); |
||||
byte[] msgByte = new byte[by.length + 16]; |
||||
// 写入缓存
|
||||
msgByte[0] = 29; |
||||
msgByte[1] = 40; |
||||
msgByte[2] = 107; |
||||
msgByte[3] = (byte)(by.length+3); |
||||
msgByte[4] = 0; |
||||
msgByte[5] = 49; |
||||
msgByte[6] = 80; |
||||
msgByte[7] = 48; // (byte)0x30);
|
||||
int index = 7; |
||||
for (int i = 0; i < by.length; i++) |
||||
{ |
||||
index = index+1; |
||||
msgByte[index] = by[i]; |
||||
} |
||||
// 打印缓存中的数据
|
||||
msgByte[index + 1] = 29; |
||||
msgByte[index + 2] = 40; |
||||
msgByte[index + 3] = 107; |
||||
msgByte[index + 4] = (byte)(by.length+3); |
||||
msgByte[index + 5] = 0; |
||||
msgByte[index + 6] = 49; |
||||
msgByte[index + 7] = 81; |
||||
msgByte[index + 8] = 48; // (byte)0x30);
|
||||
byte[] array = new byte[msgByte.length + 9]; |
||||
array[0] = 30; |
||||
array[1] = 16; |
||||
array[2] =(byte) pageCount;//打印份数
|
||||
int num = array.length - 5; |
||||
array[3] = (byte)(num >> 8); |
||||
//array[4] = (byte)((uint)num & 0xFFu);
|
||||
array[4] = (byte)(num & 0xFF); |
||||
for (int i = 0; i < msgByte.length; i++) |
||||
{ |
||||
array[i+ 5] = msgByte[i]; |
||||
} |
||||
array[array.length - 4] = 27; |
||||
array[array.length - 3] = 99; |
||||
byte[] crc16CodeArray = getCRC(msgByte); |
||||
array[array.length - 2] = crc16CodeArray[0]; |
||||
array[array.length - 1] = crc16CodeArray[1]; |
||||
return array; |
||||
} catch (Exception ex) { |
||||
System.out.println(ex.getStackTrace()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
|
||||
private static byte[] getCRC(byte[] bytes) { |
||||
int crc = 0xFFFF; // 初始值
|
||||
for (byte b : bytes) { |
||||
crc = (crc >> 8) ^ CRC16Table[(crc ^ b) & 0xff]; |
||||
} |
||||
byte[] b = new byte[2]; |
||||
b[0] = (byte) ((crc >> 8)^0xff); |
||||
b[1] = (byte) ((crc & 0xff)^0xff); |
||||
return b; |
||||
} |
||||
|
||||
private static int[] CRC16Table = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, |
||||
0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, |
||||
0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, |
||||
0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, |
||||
0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, |
||||
0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, |
||||
0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, |
||||
0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, |
||||
0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, |
||||
0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, |
||||
0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, |
||||
0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, |
||||
0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, |
||||
0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, |
||||
0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, |
||||
0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, |
||||
0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, |
||||
0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, |
||||
0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, |
||||
0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, |
||||
0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, |
||||
0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, |
||||
0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, |
||||
0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, |
||||
0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, |
||||
0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, |
||||
0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, |
||||
0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, |
||||
0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, |
||||
0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, |
||||
0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, |
||||
0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, |
||||
0x2c6a, 0x1ef1, 0x0f78 }; |
||||
} |
||||
|
@ -0,0 +1,219 @@ |
||||
package com.hai.config; |
||||
|
||||
|
||||
import org.junit.Test; |
||||
|
||||
import java.io.UnsupportedEncodingException; |
||||
|
||||
|
||||
public class PrintDemo { |
||||
|
||||
|
||||
private String accessKeyId = "LTAI5tHHL3z6gpJbMmCg3zt2"; |
||||
private String accessKeySecret = "CC9kAuqgdjKiE6jxSQHddFxGDCTpBQ"; |
||||
private String instanceId = "post-cn-i7m2558ze01"; |
||||
private String topic = "Box"; |
||||
private String groupId= "GID_BOX"; |
||||
private String endpoint= "onsmqtt.mq-internet-access.aliyuncs.com"; |
||||
|
||||
|
||||
public static final int PAYTYPE_VOICE_NULL=2000; |
||||
public static final int PAYTYPE_VOICE_ALI=2001; |
||||
public static final int PAYTYPE_VOICE_QQ=2002; |
||||
public static final int PAYTYPE_VOICE_WECHAT=2003; |
||||
public static final int PAYTYPE_VOICE_JD=2004; |
||||
public static final int PAYTYPE_VOICE_UNION=2005; |
||||
public static final int PAYTYPE_VOICE_DIY7570=7570; |
||||
public static final int PAYTYPE_VOICE_DIY7571=7571; |
||||
public static final int PAYTYPE_VOICE_DIY7572=7572; |
||||
public static final int PAYTYPE_VOICE_DIY7573=7573; |
||||
public static final int PAYTYPE_VOICE_DIY7574=7574; |
||||
public static final int PAYTYPE_VOICE_DIY7575=7575; |
||||
public static final int PAYTYPE_VOICE_DIY7576=7576; |
||||
public static final int PAYTYPE_VOICE_DIY7577=7577; |
||||
public static final int PAYTYPE_VOICE_DIY7578=7578; |
||||
public static final int PAYTYPE_VOICE_DIY7579=7579; |
||||
|
||||
|
||||
|
||||
@Test |
||||
public void Test(){ |
||||
String imeiStr="352736082440754";//设备IMEI
|
||||
String printText="1234\r\n";//打印文本
|
||||
String voiceMsgId="2019022611153312312345";//消息ID
|
||||
String voiceMsgMoney="1234";//播报金额
|
||||
//获取打印内容
|
||||
byte[] printData = getPrinterBytes(printText, 1, ""); |
||||
System.out.println(bytes2Hex(printData)); |
||||
//获取播报字符串
|
||||
System.out.println(getStaticVoiceStr(imeiStr,voiceMsgId,voiceMsgMoney,PAYTYPE_VOICE_ALI)); |
||||
//获取播报打印机指令
|
||||
printData=getPrinterVoiceBytes(printText,1,"",imeiStr,voiceMsgId,voiceMsgMoney,PAYTYPE_VOICE_ALI); |
||||
System.out.println(bytes2Hex(printData)); |
||||
/* |
||||
try { |
||||
com.aliyun.onsmqtt20200420.Client client = createClient(accessKeyId, accessKeySecret); |
||||
SendMessageRequest sendMessageRequest = new SendMessageRequest() |
||||
.setInstanceId("post-cn-i7m2558ze01") |
||||
.setMqttTopic("Box/p2p/GID_BOX@@@359ac67b25c11b8") |
||||
.setPayload(bytes2Hex(printData)); |
||||
SendMessageResponse sendMessageResponse = client.sendMessage(sendMessageRequest); |
||||
System.out.println(sendMessageResponse.getBody().msgId); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
}*/ |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 使用AK&SK初始化账号Client |
||||
* @param accessKeyId |
||||
* @param accessKeySecret |
||||
* @return Client |
||||
* @throws Exception |
||||
*/ |
||||
/* public com.aliyun.onsmqtt20200420.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { |
||||
Config config = new Config() |
||||
// 您的AccessKey ID
|
||||
.setAccessKeyId(accessKeyId) |
||||
// 您的AccessKey Secret
|
||||
.setAccessKeySecret(accessKeySecret); |
||||
// 访问的域名
|
||||
config.endpoint = endpoint; |
||||
return new com.aliyun.onsmqtt20200420.Client(config); |
||||
}*/ |
||||
|
||||
|
||||
|
||||
/** |
||||
* 支付播报固定语音字节数组 |
||||
* @param imeiStr IMEI设备唯一标识 |
||||
* @param msgId 交易序列号,不大于32字节,保证唯一 |
||||
* @param moneyStr 播报金额,最多两位小数 |
||||
* @param payType 支付类型 |
||||
* @return |
||||
*/ |
||||
public static byte[] getStaticVoiceBytes(String imeiStr,String msgId,String moneyStr,int payType){ |
||||
return getStaticVoiceStr(imeiStr,msgId,moneyStr,payType).getBytes(); |
||||
} |
||||
/** |
||||
* 支付播报固定语音字符串 |
||||
* @param imeiStr IMEI设备唯一标识 |
||||
* @param msgId 交易序列号,不大于32字节,保证唯一 |
||||
* @param moneyStr 播报金额,最多两位小数 |
||||
* @param payType 支付类型 |
||||
* @return |
||||
*/ |
||||
public static String getStaticVoiceStr(String imeiStr,String msgId,String moneyStr,int payType){ |
||||
String str=imeiStr+"|1007|"+msgId+"|"+moneyStr+"|"+payType; |
||||
return str; |
||||
} |
||||
/** |
||||
* 获取打印内容,适用于云打印机 |
||||
* @param printText 打印文本 |
||||
* @param pageCount 打印联数 |
||||
* @param encodingStr 编码方式,默认UTF-8 |
||||
* @return |
||||
*/ |
||||
public static byte[] getPrinterBytes(final String printText, |
||||
final int pageCount, String encodingStr) { |
||||
try { |
||||
if(encodingStr.equals("")){ |
||||
encodingStr="UTF-8"; |
||||
} |
||||
byte[] msgByte = printText.getBytes(encodingStr); |
||||
// 消息数组
|
||||
final byte[] dataByte = new byte[msgByte.length + 9]; |
||||
dataByte[0] = 0x1E; |
||||
dataByte[1] = 0x10; |
||||
dataByte[2] = (byte) pageCount;// 打印多联
|
||||
// 有效数据长度
|
||||
final int len = dataByte.length - 5; |
||||
dataByte[3] = (byte) (len >> 8); |
||||
dataByte[4] = (byte) (len & 0xff); |
||||
// 数据内容
|
||||
System.arraycopy(msgByte, 0, dataByte, 5, msgByte.length); |
||||
// 标识字节
|
||||
dataByte[dataByte.length - 4] = 0x1b; |
||||
dataByte[dataByte.length - 3] = 0x63; |
||||
// 打印内容CRC校验
|
||||
final byte[] dtCRC = getCRC(msgByte); |
||||
dataByte[dataByte.length - 2] = (byte) (dtCRC[0]); |
||||
dataByte[dataByte.length - 1] = (byte) (dtCRC[1]); |
||||
msgByte = dataByte; |
||||
return msgByte; |
||||
} catch (Exception ex) { |
||||
System.out.println(ex.getStackTrace()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public static byte[] getPrinterVoiceBytes(String printTxt,int pageCount,String encodingStr,String imeiStr,String msgId,String moneyStr,int payType){ |
||||
byte[] voiceArray=getStaticVoiceBytes(imeiStr, msgId, moneyStr, payType); |
||||
byte[] printerArray=getPrinterBytes(printTxt,pageCount,encodingStr); |
||||
byte[] data=new byte[voiceArray.length+printerArray.length]; |
||||
System.arraycopy(printerArray, 0, data, 0, printerArray.length); |
||||
System.arraycopy(voiceArray, 0, data, printerArray.length, voiceArray.length); |
||||
return data; |
||||
} |
||||
|
||||
private static int[] CRC16Table = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, |
||||
0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, |
||||
0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, |
||||
0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, |
||||
0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, |
||||
0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, |
||||
0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, |
||||
0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, |
||||
0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, |
||||
0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, |
||||
0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, |
||||
0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, |
||||
0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, |
||||
0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, |
||||
0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, |
||||
0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, |
||||
0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, |
||||
0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, |
||||
0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, |
||||
0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, |
||||
0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, |
||||
0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, |
||||
0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, |
||||
0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, |
||||
0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, |
||||
0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, |
||||
0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, |
||||
0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, |
||||
0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, |
||||
0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, |
||||
0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, |
||||
0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, |
||||
0x2c6a, 0x1ef1, 0x0f78 }; |
||||
private static byte[] getCRC(byte[] bytes) { |
||||
int crc = 0xFFFF; // 初始值
|
||||
for (byte b : bytes) { |
||||
crc = (crc >> 8) ^ CRC16Table[(crc ^ b) & 0xff]; |
||||
} |
||||
byte[] b = new byte[2]; |
||||
b[0] = (byte) ((crc >> 8)^0xff); |
||||
b[1] = (byte) ((crc & 0xff)^0xff); |
||||
return b; |
||||
} |
||||
private static final char[] HEXES = { '0', '1', '2', '3', '4', '5', '6', |
||||
'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; |
||||
/** |
||||
* byte数组 转换成 16进制小写字符串 |
||||
*/ |
||||
private static String bytes2Hex(byte[] bytes) { |
||||
if (bytes == null || bytes.length == 0) { |
||||
return null; |
||||
} |
||||
StringBuilder hex = new StringBuilder(); |
||||
for (byte b : bytes) { |
||||
hex.append(HEXES[(b >> 4) & 0x0F]); |
||||
hex.append(HEXES[b & 0x0F]); |
||||
} |
||||
return hex.toString(); |
||||
} |
||||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,4 +0,0 @@ |
||||
#Created by Apache Maven 3.8.2 |
||||
version=1.0-SNAPSHOT |
||||
groupId=com.hgj |
||||
artifactId=hai-v1 |
@ -1,11 +0,0 @@ |
||||
com/V1Application.class |
||||
com/v1/config/SignatureConfig.class |
||||
com/v1/config/AuthConfig$1.class |
||||
com/v1/config/SysConfig.class |
||||
com/v1/config/ConfigListener.class |
||||
com/v1/config/SwaggerConfig.class |
||||
com/v1/config/CorsConfig.class |
||||
com/v1/config/AuthConfig.class |
||||
com/v1/config/RedisConfig.class |
||||
com/v1/config/SysConst.class |
||||
com/v1/config/MultipartConfig.class |
@ -1,10 +0,0 @@ |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SysConst.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/RedisConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/AuthConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SwaggerConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/ConfigListener.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/V1Application.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/MultipartConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SignatureConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/CorsConfig.java |
||||
/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SysConfig.java |
Loading…
Reference in new issue