|
@@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.time.Instant;
|
|
import java.time.Instant;
|
|
@@ -97,10 +98,14 @@ public class YkcMsgHandle {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private DeviceService deviceService;
|
|
private DeviceService deviceService;
|
|
|
|
|
|
|
|
|
|
+ private static final byte FRAME_START = 0x68;
|
|
|
|
|
+
|
|
|
public void startListening(DeviceConnectionMsg deviceConnectionMsg) {
|
|
public void startListening(DeviceConnectionMsg deviceConnectionMsg) {
|
|
|
|
|
|
|
|
Runnable listener = () -> {
|
|
Runnable listener = () -> {
|
|
|
boolean temp = true;
|
|
boolean temp = true;
|
|
|
|
|
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
|
|
|
+
|
|
|
while (temp) {
|
|
while (temp) {
|
|
|
// 接收数据帧
|
|
// 接收数据帧
|
|
|
byte[] receiveData = new byte[1024];
|
|
byte[] receiveData = new byte[1024];
|
|
@@ -117,7 +122,7 @@ public class YkcMsgHandle {
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
|
//e.printStackTrace();
|
|
//e.printStackTrace();
|
|
|
String message = e.getMessage();
|
|
String message = e.getMessage();
|
|
|
- logger.info(deviceConnectionMsg.getDeviceId() + ":Receive YKC dataMsg IOException !!!!!!!:" + message + "!!!!!!!!" + message + "!!!!!!!!" + message + "!!!!!!!!" + message + "!!!!!!!!");
|
|
|
|
|
|
|
+ logger.info(deviceConnectionMsg.getDeviceId() + ":Receive YKC dataMsg IOException !!!!!!!:" + message + "!!!!!!!!");
|
|
|
//异常后操作删除所有的缓存,重新获取
|
|
//异常后操作删除所有的缓存,重新获取
|
|
|
DataParam dataParam = new DataParam();
|
|
DataParam dataParam = new DataParam();
|
|
|
dataParam.setDeviceId(deviceConnectionMsg.getImei());
|
|
dataParam.setDeviceId(deviceConnectionMsg.getImei());
|
|
@@ -129,161 +134,249 @@ public class YkcMsgHandle {
|
|
|
temp = false;
|
|
temp = false;
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
- byte[] response = new byte[length];
|
|
|
|
|
- //将接收到的消息类型拿到进行判断
|
|
|
|
|
- System.arraycopy(receiveData, 0, response, 0, response.length);
|
|
|
|
|
- //String s = Integer.toHexString(response[5] & 0xFF);
|
|
|
|
|
- byte[] fromMsgSeq = {response[2],response[3]};
|
|
|
|
|
- int framType = response[5] & 0xFF;//Integer.parseInt(s);
|
|
|
|
|
- int encry = response[4] & 0xFF;
|
|
|
|
|
-
|
|
|
|
|
- //消息体
|
|
|
|
|
- byte[] respone_msg = Arrays.copyOfRange(response, 6, response.length - 2);
|
|
|
|
|
- if (encry == 0) {
|
|
|
|
|
- if(framType!=4){
|
|
|
|
|
- logger.info("{},un_encry_msg,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(response));
|
|
|
|
|
|
|
+ buffer.write(receiveData, 0, length);
|
|
|
|
|
+ // 进行拆包处理
|
|
|
|
|
+ List<byte[]> packages = tryParsePackages(buffer);
|
|
|
|
|
+
|
|
|
|
|
+ if(packages.isEmpty()){
|
|
|
|
|
+ //如果没有拆出包 就处理默认
|
|
|
|
|
+ handlePackage(deviceConnectionMsg,receiveData.length, receiveData);
|
|
|
|
|
+ logger.info("{},package_error,data:{}",deviceConnectionMsg.getDeviceId(), DataConversion.bytesToHexString(receiveData));
|
|
|
|
|
+ if(buffer.size()>1024){
|
|
|
|
|
+ buffer.reset();
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- try {
|
|
|
|
|
- String key = redisCache.getCacheMapValue(RedisConstant.YKC_KEY_MAP,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
-// String key = redisCache.getCacheObject(RedisConstant.KEYS + deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- respone_msg = Encrytion.decrypt(respone_msg, key.getBytes());
|
|
|
|
|
-
|
|
|
|
|
- logger.info("{},encry_msg,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(respone_msg));
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- logger.info("{},ykc->msg decrypt Exception",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
|
|
+ }else{
|
|
|
|
|
+ // 循环处理每个包
|
|
|
|
|
+ for (byte[] pkg : packages) {
|
|
|
|
|
+ handlePackage(deviceConnectionMsg,pkg.length, pkg);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (framType == YkcSendDevice.LOGIN_RESPONSE.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"登录认证应答"+framType);
|
|
|
|
|
- //处理登录成功与否
|
|
|
|
|
- boolean res = loginResponse(deviceConnectionMsg, respone_msg);
|
|
|
|
|
- //计费模型请求
|
|
|
|
|
- if(res){
|
|
|
|
|
- logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"请求计费模型");
|
|
|
|
|
- billingModelFrame.checkBillingModel(deviceConnectionMsg);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.HEART_RESPONSE.getFrameType()) {
|
|
|
|
|
- //TODO:个人理解,枪不管故障还是正常都会有心跳,心跳应答正常说明设备是正常的状态,所以这里不管是同一设备的几号枪心跳都缓存下来心跳应答时间
|
|
|
|
|
- // logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓心跳包应答消息↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
- deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
|
|
|
-// logger.info("===========心跳包应答============over");
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ Thread thread = new Thread(listener);
|
|
|
|
|
+ thread.start();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE.getFrameType()) {
|
|
|
|
|
- billingModelHandle(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.BILLING_MODEL_RESPONSE.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "计费模型请求应答" + framType);
|
|
|
|
|
- try {
|
|
|
|
|
- billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 尝试从缓冲区中解析出完整的包
|
|
|
|
|
+ * @param buffer 数据缓冲区
|
|
|
|
|
+ * @return 完整的包列表
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<byte[]> tryParsePackages(ByteArrayOutputStream buffer) {
|
|
|
|
|
+ List<byte[]> packages = new ArrayList<>();
|
|
|
|
|
+ byte[] data = buffer.toByteArray();
|
|
|
|
|
+ int currentIndex = 0;
|
|
|
|
|
+ final int MAX_FRAME_LENGTH = 1024; // 添加最大帧长保护
|
|
|
|
|
+
|
|
|
|
|
+ while (currentIndex < data.length) {
|
|
|
|
|
+ // 查找帧起始符 0x68
|
|
|
|
|
+ int frameStart = -1;
|
|
|
|
|
+ for (int i = currentIndex; i < data.length; i++) {
|
|
|
|
|
+ if (data[i] == FRAME_START) {
|
|
|
|
|
+ frameStart = i;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE_SG.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "深谷计费模型请求应答" + framType);
|
|
|
|
|
- try {
|
|
|
|
|
- billingModelFrame.setSgBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
- } else if (framType == YkcSendDevice.TRANSACTION_RECORDS_RESPONSE.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "交易记录确认");
|
|
|
|
|
- byte[] trans = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
|
|
|
- byte[] reason = Arrays.copyOfRange(respone_msg, 16, 17);
|
|
|
|
|
- QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
|
|
|
- orderStatusQueryWrapper.eq("trans_order", trans).eq("pile_code",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- OrderStatus one = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
|
|
|
- if(one!=null){
|
|
|
|
|
- QueryWrapper<TransOrder> transOrderQueryWrapper = new QueryWrapper<>();
|
|
|
|
|
- transOrderQueryWrapper.eq("trans_order", trans).eq("pile_code",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
-
|
|
|
|
|
- TransOrder transOrderServiceOne = transOrderService.getOne(transOrderQueryWrapper);
|
|
|
|
|
- if (reason[0] == 0x00) {
|
|
|
|
|
- one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
|
|
-
|
|
|
|
|
- transOrderServiceOne.setFlage(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
|
|
- } else if (reason[0] == 0x01) {
|
|
|
|
|
- one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_FAIL);
|
|
|
|
|
- } else if (reason[0] == 0x02) {
|
|
|
|
|
- one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_ILLEGAL);
|
|
|
|
|
- }
|
|
|
|
|
- //接收到后将订单校验从redis剔除
|
|
|
|
|
- orderStatusService.updateById(one);
|
|
|
|
|
- transOrderService.updateById(transOrderServiceOne);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (frameStart == -1) {
|
|
|
|
|
+ // 没有找到帧头,清空缓冲区
|
|
|
|
|
+ buffer.reset();
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ // 检查是否有足够的数据读取数据域长度
|
|
|
|
|
+ if (frameStart + 1 >= data.length) {
|
|
|
|
|
+ // 保留从帧头开始的数据
|
|
|
|
|
+ byte[] remaining = Arrays.copyOfRange(data, frameStart, data.length);
|
|
|
|
|
+ buffer.reset();
|
|
|
|
|
+ buffer.write(remaining, 0, remaining.length);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.DEVICE_STATUS_REQUEST.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}读取实时监测数据",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- handleRealTimeReport(deviceConnectionMsg,respone_msg,fromMsgSeq);
|
|
|
|
|
|
|
+ // 读取数据域长度(第2字节)
|
|
|
|
|
+ int dataFieldLength = data[frameStart + 1] & 0xFF;
|
|
|
|
|
|
|
|
|
|
+ // 计算完整帧长度 = 8字节固定头尾 + 数据域长度
|
|
|
|
|
+ int totalFrameLength = 4 + dataFieldLength;
|
|
|
|
|
|
|
|
|
|
+ // 检查是否收到完整帧
|
|
|
|
|
+ if ((frameStart + totalFrameLength) > data.length) {
|
|
|
|
|
+ // 数据不够完整帧,保留剩余数据
|
|
|
|
|
+ byte[] remaining = Arrays.copyOfRange(data, frameStart, data.length);
|
|
|
|
|
+ buffer.reset();
|
|
|
|
|
+ buffer.write(remaining, 0, remaining.length);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.START_CHARNGING_REQUEST.getFrameType() || framType == YkcSendDevice.START_CHARNGING_REQUEST_16.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}运营平台远程控制启机" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- startChargingRequest(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
|
|
+ // 提取完整帧
|
|
|
|
|
+ byte[] completeFrame = Arrays.copyOfRange(data, frameStart, frameStart + totalFrameLength);
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.STOP_CHARNGING_REQUEST.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}运营平台远程停机",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- stopChargingRequest(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
|
|
+ packages.add(completeFrame);
|
|
|
|
|
+ currentIndex = frameStart + totalFrameLength;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.UPDATE_BALANCE.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}远程更新余额",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- try {
|
|
|
|
|
- remoteBalanceUpdate(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 如果所有数据都处理完了,清空缓冲区
|
|
|
|
|
+ if (currentIndex >= data.length) {
|
|
|
|
|
+ buffer.reset();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.CHECKTIME.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}对时设置" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- checkTime.checkTimeSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
-
|
|
|
|
|
- } else if (framType == YkcSendDevice.BILLING_MODEL_SETTING_SG.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}深谷计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- try {
|
|
|
|
|
- //有异常就是失败
|
|
|
|
|
- billingModelFrame.setSgBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
- billingModelFrame.resp(deviceConnectionMsg, (byte) 1,fromMsgSeq);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- billingModelFrame.resp(deviceConnectionMsg, (byte) 0,fromMsgSeq);
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return packages;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if(framType == YkcSendDevice.CONFIG_SETTING.getFrameType()){
|
|
|
|
|
- logger.info("↓↓↓↓↓{}工作参数设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- otherFrame.configSettingSend(deviceConnectionMsg,respone_msg,fromMsgSeq);
|
|
|
|
|
|
|
+ public void handlePackage(DeviceConnectionMsg deviceConnectionMsg,int length,byte[] receiveData){
|
|
|
|
|
+ byte[] response = new byte[length];
|
|
|
|
|
+ //将接收到的消息类型拿到进行判断
|
|
|
|
|
+ System.arraycopy(receiveData, 0, response, 0, response.length);
|
|
|
|
|
+ //String s = Integer.toHexString(response[5] & 0xFF);
|
|
|
|
|
+ byte[] fromMsgSeq = {response[2],response[3]};
|
|
|
|
|
+ int framType = response[5] & 0xFF;//Integer.parseInt(s);
|
|
|
|
|
+ int encry = response[4] & 0xFF;
|
|
|
|
|
+
|
|
|
|
|
+ //消息体
|
|
|
|
|
+ byte[] respone_msg = Arrays.copyOfRange(response, 6, response.length - 2);
|
|
|
|
|
+ if (encry == 0) {
|
|
|
|
|
+ if(framType!=4){
|
|
|
|
|
+ logger.info("{},un_encry_msg,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(response));
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ try {
|
|
|
|
|
+ String key = redisCache.getCacheMapValue(RedisConstant.YKC_KEY_MAP,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+// String key = redisCache.getCacheObject(RedisConstant.KEYS + deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ respone_msg = Encrytion.decrypt(respone_msg, key.getBytes());
|
|
|
|
|
|
|
|
|
|
+ logger.info("{},encry_msg,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(respone_msg));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ logger.info("{},ykc->msg decrypt Exception",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (framType == YkcSendDevice.LOGIN_RESPONSE.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"登录认证应答"+framType);
|
|
|
|
|
+ //处理登录成功与否
|
|
|
|
|
+ boolean res = loginResponse(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ //计费模型请求
|
|
|
|
|
+ if(res){
|
|
|
|
|
+ logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"请求计费模型");
|
|
|
|
|
+ billingModelFrame.checkBillingModel(deviceConnectionMsg);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.HEART_RESPONSE.getFrameType()) {
|
|
|
|
|
+ //TODO:个人理解,枪不管故障还是正常都会有心跳,心跳应答正常说明设备是正常的状态,所以这里不管是同一设备的几号枪心跳都缓存下来心跳应答时间
|
|
|
|
|
+ // logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓心跳包应答消息↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
+ deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
|
|
|
+// logger.info("===========心跳包应答============over");
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.BILLING_MODEL_SETTING.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- try {
|
|
|
|
|
- //有异常就是失败
|
|
|
|
|
- billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
- billingModelFrame.resp(deviceConnectionMsg, (byte) 1,fromMsgSeq);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- billingModelFrame.resp(deviceConnectionMsg, (byte) 0,fromMsgSeq);
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE.getFrameType()) {
|
|
|
|
|
+ billingModelHandle(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.REMOTE_REBOOT.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}远程重启",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- otherFrame.remoteRebootSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_RESPONSE.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "计费模型请求应答" + framType);
|
|
|
|
|
+ try {
|
|
|
|
|
+ billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE_SG.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "深谷计费模型请求应答" + framType);
|
|
|
|
|
+ try {
|
|
|
|
|
+ billingModelFrame.setSgBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (framType == YkcSendDevice.TRANSACTION_RECORDS_RESPONSE.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "交易记录确认");
|
|
|
|
|
+ byte[] trans = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
|
|
|
+ byte[] reason = Arrays.copyOfRange(respone_msg, 16, 17);
|
|
|
|
|
+ QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
|
|
|
+ orderStatusQueryWrapper.eq("trans_order", trans).eq("pile_code",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ OrderStatus one = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
|
|
|
+ if(one!=null){
|
|
|
|
|
+ QueryWrapper<TransOrder> transOrderQueryWrapper = new QueryWrapper<>();
|
|
|
|
|
+ transOrderQueryWrapper.eq("trans_order", trans).eq("pile_code",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+
|
|
|
|
|
+ TransOrder transOrderServiceOne = transOrderService.getOne(transOrderQueryWrapper);
|
|
|
|
|
+ if (reason[0] == 0x00) {
|
|
|
|
|
+ one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
|
|
+
|
|
|
|
|
+ transOrderServiceOne.setFlage(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
|
|
+ } else if (reason[0] == 0x01) {
|
|
|
|
|
+ one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_FAIL);
|
|
|
|
|
+ } else if (reason[0] == 0x02) {
|
|
|
|
|
+ one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_ILLEGAL);
|
|
|
|
|
+ }
|
|
|
|
|
+ //接收到后将订单校验从redis剔除
|
|
|
|
|
+ orderStatusService.updateById(one);
|
|
|
|
|
+ transOrderService.updateById(transOrderServiceOne);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.UPLOAD_FILE_UPDATE.getFrameType()) {
|
|
|
|
|
- logger.info("↓↓↓↓↓{}远程更新",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- otherFrame.remoteUpdateSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.DEVICE_STATUS_REQUEST.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}读取实时监测数据",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ handleRealTimeReport(deviceConnectionMsg,respone_msg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.START_CHARNGING_REQUEST.getFrameType() || framType == YkcSendDevice.START_CHARNGING_REQUEST_16.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}运营平台远程控制启机" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ startChargingRequest(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.STOP_CHARNGING_REQUEST.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}运营平台远程停机",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ stopChargingRequest(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.UPDATE_BALANCE.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程更新余额",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ remoteBalanceUpdate(deviceConnectionMsg, respone_msg,fromMsgSeq);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
- };
|
|
|
|
|
- Thread thread = new Thread(listener);
|
|
|
|
|
- thread.start();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.CHECKTIME.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}对时设置" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ checkTime.checkTimeSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_SETTING_SG.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}深谷计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ //有异常就是失败
|
|
|
|
|
+ billingModelFrame.setSgBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 1,fromMsgSeq);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 0,fromMsgSeq);
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ } else if(framType == YkcSendDevice.CONFIG_SETTING.getFrameType()){
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}工作参数设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ otherFrame.configSettingSend(deviceConnectionMsg,respone_msg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_SETTING.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ //有异常就是失败
|
|
|
|
|
+ billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 1,fromMsgSeq);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 0,fromMsgSeq);
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.REMOTE_REBOOT.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程重启",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ otherFrame.remoteRebootSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } else if (framType == YkcSendDevice.UPLOAD_FILE_UPDATE.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程更新",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ otherFrame.remoteUpdateSend(deviceConnectionMsg,fromMsgSeq);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|