|
@@ -52,7 +52,7 @@ import java.util.stream.Collectors;
|
|
|
public class YkcMsgHandle {
|
|
public class YkcMsgHandle {
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(YkcMsgHandle.class);
|
|
private static final Logger logger = LoggerFactory.getLogger(YkcMsgHandle.class);
|
|
|
- private static final BigDecimal zero=new BigDecimal("0");
|
|
|
|
|
|
|
+ private static final BigDecimal zero = new BigDecimal("0");
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private RedisCache redisCache;
|
|
private RedisCache redisCache;
|
|
@@ -89,7 +89,7 @@ public class YkcMsgHandle {
|
|
|
public void startListening(DeviceConnectionMsg deviceConnectionMsg) {
|
|
public void startListening(DeviceConnectionMsg deviceConnectionMsg) {
|
|
|
|
|
|
|
|
Runnable listener = () -> {
|
|
Runnable listener = () -> {
|
|
|
- boolean temp=true;
|
|
|
|
|
|
|
+ boolean temp = true;
|
|
|
while (temp) {
|
|
while (temp) {
|
|
|
// 接收数据帧
|
|
// 接收数据帧
|
|
|
byte[] receiveData = new byte[1024];
|
|
byte[] receiveData = new byte[1024];
|
|
@@ -106,7 +106,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 + "!!!!!!!!" + message + "!!!!!!!!" + message + "!!!!!!!!" + message + "!!!!!!!!");
|
|
|
//异常后操作删除所有的缓存,重新获取
|
|
//异常后操作删除所有的缓存,重新获取
|
|
|
DataParam dataParam = new DataParam();
|
|
DataParam dataParam = new DataParam();
|
|
|
dataParam.setDeviceId(deviceConnectionMsg.getImei());
|
|
dataParam.setDeviceId(deviceConnectionMsg.getImei());
|
|
@@ -115,7 +115,7 @@ public class YkcMsgHandle {
|
|
|
dataParam.setData(object1);
|
|
dataParam.setData(object1);
|
|
|
dataParam.setType(OperEnum.PortDetail.getType());
|
|
dataParam.setType(OperEnum.PortDetail.getType());
|
|
|
msgService.sendMsg(dataParam);
|
|
msgService.sendMsg(dataParam);
|
|
|
- temp=false;
|
|
|
|
|
|
|
+ temp = false;
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
byte[] response = new byte[length];
|
|
byte[] response = new byte[length];
|
|
@@ -127,108 +127,127 @@ public class YkcMsgHandle {
|
|
|
|
|
|
|
|
//消息体
|
|
//消息体
|
|
|
byte[] respone_msg = Arrays.copyOfRange(response, 6, response.length - 2);
|
|
byte[] respone_msg = Arrays.copyOfRange(response, 6, response.length - 2);
|
|
|
- logger.info("framType:" + framType + "||" + response[5] + "应答消息类型>>>" + s);
|
|
|
|
|
if (encry == 0) {
|
|
if (encry == 0) {
|
|
|
- logger.info("respone_msg>" + DataConversion.bytesToHexString(respone_msg));
|
|
|
|
|
|
|
+ logger.info("{},未加密消息,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(respone_msg));
|
|
|
} else {
|
|
} else {
|
|
|
try {
|
|
try {
|
|
|
- String key = redisCache.getCacheObject(RedisConstant.KEYS+deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- respone_msg = Encrytion.decrypt(respone_msg,key.getBytes());
|
|
|
|
|
- logger.info("respone_msg_enc>" + DataConversion.bytesToHexString(respone_msg));
|
|
|
|
|
|
|
+ String key = redisCache.getCacheObject(RedisConstant.KEYS + deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ respone_msg = Encrytion.decrypt(respone_msg, key.getBytes());
|
|
|
|
|
+
|
|
|
|
|
+ logger.info("{},加密消息,frame:{},data:{}",deviceConnectionMsg.getDeviceId(),framType, DataConversion.bytesToHexString(respone_msg));
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- logger.info("ykc->msg decrypt Exception");
|
|
|
|
|
|
|
+ logger.info("{},ykc->msg decrypt Exception",deviceConnectionMsg.getDeviceId());
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if (framType == YkcSendDevice.LOGIN_RESPONSE.getFrameType()) {
|
|
if (framType == YkcSendDevice.LOGIN_RESPONSE.getFrameType()) {
|
|
|
- logger.info("ykc->dev:"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓登录认证应答消息↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"登录认证应答"+framType);
|
|
|
//处理登录成功与否
|
|
//处理登录成功与否
|
|
|
- loginResponse(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
+ boolean res = loginResponse(deviceConnectionMsg, respone_msg);
|
|
|
//计费模型请求
|
|
//计费模型请求
|
|
|
- billingModelFrame.checkBillingModel(deviceConnectionMsg);
|
|
|
|
|
- logger.info("===========登录认证应答============over");
|
|
|
|
|
|
|
+ if(res){
|
|
|
|
|
+ logger.info("↓↓↓↓↓"+deviceConnectionMsg.getDeviceId()+"请求计费模型");
|
|
|
|
|
+ billingModelFrame.checkBillingModel(deviceConnectionMsg);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.HEART_RESPONSE.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.HEART_RESPONSE.getFrameType()) {
|
|
|
//TODO:个人理解,枪不管故障还是正常都会有心跳,心跳应答正常说明设备是正常的状态,所以这里不管是同一设备的几号枪心跳都缓存下来心跳应答时间
|
|
//TODO:个人理解,枪不管故障还是正常都会有心跳,心跳应答正常说明设备是正常的状态,所以这里不管是同一设备的几号枪心跳都缓存下来心跳应答时间
|
|
|
- // logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓心跳包应答消息↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
|
|
+ // logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓心跳包应答消息↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
|
- logger.info("===========心跳包应答============over");
|
|
|
|
|
|
|
+// logger.info("===========心跳包应答============over");
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_VALIDATE_RESPONSE.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓计费模型验证请求应答↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
- billingModelHandle(deviceConnectionMsg,respone_msg);
|
|
|
|
|
|
|
+ billingModelHandle(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_RESPONSE.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_RESPONSE.getFrameType()) {
|
|
|
- logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓计费模型请求应答↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "计费模型请求应答" + framType);
|
|
|
try {
|
|
try {
|
|
|
- getBillingModelHandle(deviceConnectionMsg,respone_msg);
|
|
|
|
|
|
|
+ billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
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()) {
|
|
} else if (framType == YkcSendDevice.TRANSACTION_RECORDS_RESPONSE.getFrameType()) {
|
|
|
- logger.info("ykc->dev"+deviceConnectionMsg.getDeviceId()+"↓↓↓↓↓↓↓↓↓↓↓↓↓交易记录确认↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓" + deviceConnectionMsg.getDeviceId() + "交易记录确认");
|
|
|
byte[] trans = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
byte[] trans = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
|
byte[] reason = Arrays.copyOfRange(respone_msg, 16, 17);
|
|
byte[] reason = Arrays.copyOfRange(respone_msg, 16, 17);
|
|
|
QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
|
- orderStatusQueryWrapper.eq("trans_order",trans);
|
|
|
|
|
|
|
+ orderStatusQueryWrapper.eq("trans_order", trans);
|
|
|
OrderStatus one = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
OrderStatus one = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
|
|
|
|
|
|
QueryWrapper<TransOrder> transOrderQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<TransOrder> transOrderQueryWrapper = new QueryWrapper<>();
|
|
|
- transOrderQueryWrapper.eq("trans_order",trans);
|
|
|
|
|
|
|
+ transOrderQueryWrapper.eq("trans_order", trans);
|
|
|
TransOrder transOrderServiceOne = transOrderService.getOne(transOrderQueryWrapper);
|
|
TransOrder transOrderServiceOne = transOrderService.getOne(transOrderQueryWrapper);
|
|
|
|
|
|
|
|
- if (reason[0]==0x00){
|
|
|
|
|
|
|
+ if (reason[0] == 0x00) {
|
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
transOrderServiceOne.setFlage(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
transOrderServiceOne.setFlage(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC);
|
|
|
- }else if (reason[0]==0x01){
|
|
|
|
|
|
|
+ } else if (reason[0] == 0x01) {
|
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_FAIL);
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_FAIL);
|
|
|
- }else if (reason[0]==0x02){
|
|
|
|
|
|
|
+ } else if (reason[0] == 0x02) {
|
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_ILLEGAL);
|
|
one.setTransactionOrderReplyStatus(StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_ILLEGAL);
|
|
|
}
|
|
}
|
|
|
//接收到后将订单校验从redis剔除
|
|
//接收到后将订单校验从redis剔除
|
|
|
- redisCache.deleteObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED+one.getPileCode());
|
|
|
|
|
|
|
+ redisCache.deleteObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED + one.getPileCode());
|
|
|
orderStatusService.updateById(one);
|
|
orderStatusService.updateById(one);
|
|
|
transOrderService.updateById(transOrderServiceOne);
|
|
transOrderService.updateById(transOrderServiceOne);
|
|
|
} else if (framType == YkcSendDevice.DEVICE_STATUS_REQUEST.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.DEVICE_STATUS_REQUEST.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓读取实时监测数据↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}读取实时监测数据",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
|
|
|
- } else if (framType == YkcSendDevice.START_CHARNGING_REQUEST.getFrameType() || framType==YkcSendDevice.START_CHARNGING_REQUEST_16.getFrameType()) {
|
|
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓运营平台远程控制启机↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.START_CHARNGING_REQUEST.getFrameType() || framType == YkcSendDevice.START_CHARNGING_REQUEST_16.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}运营平台远程控制启机" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
startChargingRequest(deviceConnectionMsg, respone_msg);
|
|
startChargingRequest(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.STOP_CHARNGING_REQUEST.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.STOP_CHARNGING_REQUEST.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓运营平台远程停机↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
- stopChargingRequest(deviceConnectionMsg,respone_msg);
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}运营平台远程停机",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ stopChargingRequest(deviceConnectionMsg, respone_msg);
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.UPDATE_BALANCE.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.UPDATE_BALANCE.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓远程更新余额↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程更新余额",deviceConnectionMsg.getDeviceId());
|
|
|
try {
|
|
try {
|
|
|
- remoteBalanceUpdate(deviceConnectionMsg,respone_msg);
|
|
|
|
|
|
|
+ remoteBalanceUpdate(deviceConnectionMsg, respone_msg);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.CHECKTIME.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.CHECKTIME.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓对时设置↓↓↓↓↓↓↓↓↓↓↓↓↓"+framType);
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}对时设置" + framType,deviceConnectionMsg.getDeviceId());
|
|
|
checkTime.checkTimeSend(deviceConnectionMsg);
|
|
checkTime.checkTimeSend(deviceConnectionMsg);
|
|
|
|
|
|
|
|
|
|
+ } else if (framType == YkcSendDevice.BILLING_MODEL_SETTING_SG.getFrameType()) {
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}深谷计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ try {
|
|
|
|
|
+ //有异常就是失败
|
|
|
|
|
+ billingModelFrame.setSgBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 1);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 0);
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_SETTING.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.BILLING_MODEL_SETTING.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓计费模型设置↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}计费模型设置",deviceConnectionMsg.getDeviceId());
|
|
|
try {
|
|
try {
|
|
|
//有异常就是失败
|
|
//有异常就是失败
|
|
|
- getBillingModelHandle(deviceConnectionMsg,respone_msg);
|
|
|
|
|
- billingModelFrame.resp(deviceConnectionMsg,(byte) 1);
|
|
|
|
|
|
|
+ billingModelFrame.setBillingModel(deviceConnectionMsg, respone_msg);
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 1);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- billingModelFrame.resp(deviceConnectionMsg,(byte) 0);
|
|
|
|
|
|
|
+ billingModelFrame.resp(deviceConnectionMsg, (byte) 0);
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.REMOTE_REBOOT.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.REMOTE_REBOOT.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓远程重启↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程重启",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
|
|
|
} else if (framType == YkcSendDevice.UPLOAD_FILE_UPDATE.getFrameType()) {
|
|
} else if (framType == YkcSendDevice.UPLOAD_FILE_UPDATE.getFrameType()) {
|
|
|
- logger.info("ykc->dev↓↓↓↓↓↓↓↓↓↓↓↓↓远程更新↓↓↓↓↓↓↓↓↓↓↓↓↓");
|
|
|
|
|
|
|
+ logger.info("↓↓↓↓↓{}远程更新",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -243,16 +262,18 @@ public class YkcMsgHandle {
|
|
|
* @param deviceConnectionMsg
|
|
* @param deviceConnectionMsg
|
|
|
* @param respone_msg
|
|
* @param respone_msg
|
|
|
*/
|
|
*/
|
|
|
- private void loginResponse(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
|
|
|
|
|
+ private boolean loginResponse(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
|
int login_result = respone_msg[7] & 0xFF;
|
|
int login_result = respone_msg[7] & 0xFF;
|
|
|
if (ResultUtil.isSuccess(login_result)) {
|
|
if (ResultUtil.isSuccess(login_result)) {
|
|
|
//登录成功,相当于初始化心跳包接收时间更新,初始化心跳包时间相当于登录成功,心跳包能正常上传
|
|
//登录成功,相当于初始化心跳包接收时间更新,初始化心跳包时间相当于登录成功,心跳包能正常上传
|
|
|
- logger.info("{}login successfully",deviceConnectionMsg.getImei());
|
|
|
|
|
|
|
+ logger.info("{}login successfully", deviceConnectionMsg.getDeviceId());
|
|
|
deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
|
|
|
deviceConnectionMsg.setLoginStatus(Constant.DEVICE_LOGIN_STATUS);
|
|
deviceConnectionMsg.setLoginStatus(Constant.DEVICE_LOGIN_STATUS);
|
|
|
|
|
+ return true;
|
|
|
} else {
|
|
} else {
|
|
|
- logger.info("{}login failed ,waitting for retry",deviceConnectionMsg.getImei());
|
|
|
|
|
|
|
+ logger.info("{}login failed ,waitting for retry", deviceConnectionMsg.getDeviceId());
|
|
|
//登录失败等心跳包10秒后进行重试
|
|
//登录失败等心跳包10秒后进行重试
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -262,7 +283,7 @@ public class YkcMsgHandle {
|
|
|
* @param deviceConnectionMsg
|
|
* @param deviceConnectionMsg
|
|
|
* @param respone_msg
|
|
* @param respone_msg
|
|
|
*/
|
|
*/
|
|
|
- private void startChargingRequest(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg){
|
|
|
|
|
|
|
+ private void startChargingRequest(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
//1.解析出启动充电流水号
|
|
//1.解析出启动充电流水号
|
|
@@ -276,77 +297,69 @@ public class YkcMsgHandle {
|
|
|
//切出订单号,保存在连接的该设备中
|
|
//切出订单号,保存在连接的该设备中
|
|
|
byte[] transOrder = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
byte[] transOrder = Arrays.copyOfRange(respone_msg, 0, 16);
|
|
|
//测试
|
|
//测试
|
|
|
- t=transOrder;
|
|
|
|
|
|
|
+ t = transOrder;
|
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 23, 24);
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 23, 24);
|
|
|
byte[] card = Arrays.copyOfRange(respone_msg, 32, 40);
|
|
byte[] card = Arrays.copyOfRange(respone_msg, 32, 40);
|
|
|
byte[] logCard = Arrays.copyOfRange(respone_msg, 24, 32);
|
|
byte[] logCard = Arrays.copyOfRange(respone_msg, 24, 32);
|
|
|
- byte[] startMoney = Arrays.copyOfRange(respone_msg, respone_msg.length-6, respone_msg.length-2);
|
|
|
|
|
- boolean temp=false;
|
|
|
|
|
- int result=0x00; //失败
|
|
|
|
|
- int reason=0x00; //无
|
|
|
|
|
- if (guns[0]==1){
|
|
|
|
|
|
|
+ byte[] startMoney = Arrays.copyOfRange(respone_msg, respone_msg.length - 6, respone_msg.length - 2);
|
|
|
|
|
+ boolean temp = false;
|
|
|
|
|
+ int result = 0x00; //失败
|
|
|
|
|
+ int reason = 0x00; //无
|
|
|
|
|
+ if (guns[0] == 1) {
|
|
|
DeviceStatus oneDeviceStatus = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE, deviceConnectionMsg.getDeviceId());
|
|
DeviceStatus oneDeviceStatus = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE, deviceConnectionMsg.getDeviceId());
|
|
|
logger.info(oneDeviceStatus.toString());
|
|
logger.info(oneDeviceStatus.toString());
|
|
|
- if (oneDeviceStatus.getOnlineStatus()==StatusConstant.OFFLINE||StatusConstant.OFFLINE==oneDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ if (oneDeviceStatus.getOnlineStatus() == StatusConstant.OFFLINE || StatusConstant.OFFLINE == oneDeviceStatus.getGunStatus()) {
|
|
|
//离线上报
|
|
//离线上报
|
|
|
- reason=0x04;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.CHARGING==oneDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x04;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.CHARGING == oneDeviceStatus.getGunStatus()) {
|
|
|
//枪已在充电中
|
|
//枪已在充电中
|
|
|
- reason=0x02;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.FAULT==oneDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x02;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.FAULT == oneDeviceStatus.getGunStatus()) {
|
|
|
//枪故障
|
|
//枪故障
|
|
|
- reason=0x03;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.INSERT_GUNS_NO==oneDeviceStatus.getInsertGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x03;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.INSERT_GUNS_NO == oneDeviceStatus.getInsertGunStatus()) {
|
|
|
//未插枪
|
|
//未插枪
|
|
|
- reason=0x05;
|
|
|
|
|
- temp=false;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (PortStatusConstant.EMERGENCY_STOP==oneDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x05;
|
|
|
|
|
+ temp = false;
|
|
|
|
|
+ } else if (PortStatusConstant.EMERGENCY_STOP == oneDeviceStatus.getGunStatus()) {
|
|
|
//急停没复位,也是启充失败
|
|
//急停没复位,也是启充失败
|
|
|
- temp=true;
|
|
|
|
|
|
|
+ temp = true;
|
|
|
}
|
|
}
|
|
|
- }else if(guns[0]==2){
|
|
|
|
|
|
|
+ } else if (guns[0] == 2) {
|
|
|
DeviceStatus twoDeviceStatus = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO, deviceConnectionMsg.getDeviceId());
|
|
DeviceStatus twoDeviceStatus = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO, deviceConnectionMsg.getDeviceId());
|
|
|
- if (twoDeviceStatus.getOnlineStatus()==StatusConstant.OFFLINE||StatusConstant.OFFLINE==twoDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ if (twoDeviceStatus.getOnlineStatus() == StatusConstant.OFFLINE || StatusConstant.OFFLINE == twoDeviceStatus.getGunStatus()) {
|
|
|
//离线上报
|
|
//离线上报
|
|
|
- reason=0x04;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.CHARGING==twoDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x04;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.CHARGING == twoDeviceStatus.getGunStatus()) {
|
|
|
//枪已在充电中
|
|
//枪已在充电中
|
|
|
- reason=0x02;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.FAULT==twoDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x02;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.FAULT == twoDeviceStatus.getGunStatus()) {
|
|
|
//枪故障
|
|
//枪故障
|
|
|
- reason=0x03;
|
|
|
|
|
- temp=true;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (StatusConstant.INSERT_GUNS_NO==twoDeviceStatus.getInsertGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x03;
|
|
|
|
|
+ temp = true;
|
|
|
|
|
+ } else if (StatusConstant.INSERT_GUNS_NO == twoDeviceStatus.getInsertGunStatus()) {
|
|
|
//未插枪
|
|
//未插枪
|
|
|
- reason=0x05;
|
|
|
|
|
- temp=false;
|
|
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- }else if (PortStatusConstant.EMERGENCY_STOP==twoDeviceStatus.getGunStatus()){
|
|
|
|
|
|
|
+ reason = 0x05;
|
|
|
|
|
+ temp = false;
|
|
|
|
|
+ } else if (PortStatusConstant.EMERGENCY_STOP == twoDeviceStatus.getGunStatus()) {
|
|
|
//急停没复位,也是启充失败
|
|
//急停没复位,也是启充失败
|
|
|
- temp=true;
|
|
|
|
|
|
|
+ temp = true;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- logger.info("reson>"+reason);
|
|
|
|
|
- if (temp){
|
|
|
|
|
- charngingPushFrame.startStatus(deviceConnectionMsg,transOrder,guns[0],result,reason );
|
|
|
|
|
- Map<String, BigDecimal> compute = transMoney.compute(guns[0], new BillingModel(), 0L, 0L, false);
|
|
|
|
|
- transactionFlowPushFrame.sendTrans(deviceConnectionMsg,transOrder, deviceStatus.getPileCode(),guns[0],System.currentTimeMillis(),System.currentTimeMillis(),new BillingModel(),card,compute,TransConstant.START_FAIL);
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- BigDecimal bigDecimalmoney = DataConversion.arrToBigDec(startMoney, 2,2).setScale(2,BigDecimal.ROUND_UP);
|
|
|
|
|
- logger.info("startMoney"+bigDecimalmoney+"sbyt+"+DataConversion.bytesToHexString(startMoney));
|
|
|
|
|
|
|
+ if (temp) {
|
|
|
|
|
+ logger.info("启动失败{}:reason:{}" ,deviceConnectionMsg.getDeviceId(), reason);
|
|
|
|
|
+ charngingPushFrame.startStatus(deviceConnectionMsg, transOrder, guns[0], result, reason);
|
|
|
|
|
+ Map<String, BigDecimal> compute = transMoney.compute(guns[0], new BillingModel(), 0L, 0L, false);
|
|
|
|
|
+ transactionFlowPushFrame.sendTrans(deviceConnectionMsg, transOrder, deviceStatus.getPileCode(), guns[0], System.currentTimeMillis(), System.currentTimeMillis(), new BillingModel(), card, compute, TransConstant.START_FAIL);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal bigDecimalmoney = DataConversion.arrToBigDec(startMoney, 2, 2).setScale(2, BigDecimal.ROUND_UP);
|
|
|
|
|
+ logger.info("{}开始充电,startMoney" + bigDecimalmoney + "sbyt+" + DataConversion.bytesToHexString(startMoney),deviceConnectionMsg.getDeviceId());
|
|
|
OrderStatus orderStatus = new OrderStatus();
|
|
OrderStatus orderStatus = new OrderStatus();
|
|
|
orderStatus.setDeviceSn(deviceStatus.getDeviceSn());
|
|
orderStatus.setDeviceSn(deviceStatus.getDeviceSn());
|
|
|
orderStatus.setDeviceImei(deviceConnectionMsg.getImei());
|
|
orderStatus.setDeviceImei(deviceConnectionMsg.getImei());
|
|
@@ -361,30 +374,32 @@ public class YkcMsgHandle {
|
|
|
this.saveOrder(orderStatus);
|
|
this.saveOrder(orderStatus);
|
|
|
//setMoney(orderStatus);//让设备记余额不足情况,启充时要传启充金额money,传0就是启充默认值
|
|
//setMoney(orderStatus);//让设备记余额不足情况,启充时要传启充金额money,传0就是启充默认值
|
|
|
//3.向设备发送启机指令
|
|
//3.向设备发送启机指令
|
|
|
- if (reason==0x05){
|
|
|
|
|
|
|
+ if (reason == 0x05) {
|
|
|
//未插枪不启充设备,但是返回未插枪
|
|
//未插枪不启充设备,但是返回未插枪
|
|
|
- logger.info("未插枪等待充电订单:"+DataConversion.bytesToHexString(transOrder));
|
|
|
|
|
- charngingPushFrame.startStatus(deviceConnectionMsg,transOrder,guns[0],result,reason );
|
|
|
|
|
- redisCache.setCacheObject(RedisConstant.NO_INSERT_GUN_YKC+deviceStatus.getPileCode(),DataConversion.bytesToHexString(transOrder),60*1000, TimeUnit.MILLISECONDS);
|
|
|
|
|
- }else {
|
|
|
|
|
- deviceControlerService.startCharge(deviceStatus.getDeviceImei(), deviceStatus.getDeviceImei(), (int) guns[0],0);
|
|
|
|
|
|
|
+ logger.info("{}未插枪等待充电订单:" + DataConversion.bytesToHexString(transOrder),deviceConnectionMsg.getDeviceId());
|
|
|
|
|
+ charngingPushFrame.startStatus(deviceConnectionMsg, transOrder, guns[0], result, reason);
|
|
|
|
|
+ redisCache.setCacheObject(RedisConstant.NO_INSERT_GUN_YKC + deviceStatus.getPileCode(), DataConversion.bytesToHexString(transOrder), 60 * 1000, TimeUnit.MILLISECONDS);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ deviceControlerService.startCharge(deviceStatus.getDeviceImei(), deviceStatus.getDeviceImei(), (int) guns[0], 0);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
String gunCode = String.valueOf(guns[0]);
|
|
String gunCode = String.valueOf(guns[0]);
|
|
|
//标记最后订单时间 5分钟内不上报空闲状态 避免刚下单状态还没更新就被freeTask任务给顶掉了
|
|
//标记最后订单时间 5分钟内不上报空闲状态 避免刚下单状态还没更新就被freeTask任务给顶掉了
|
|
|
- redisCache.setCacheMapValue(RedisConstant.PILE_GUN_PAY_TIME, orderStatus.getPileCode()+"_"+gunCode,System.currentTimeMillis());
|
|
|
|
|
-
|
|
|
|
|
|
|
+ redisCache.setCacheMapValue(RedisConstant.PILE_GUN_PAY_TIME, orderStatus.getPileCode() + "_" + gunCode, System.currentTimeMillis());
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO:在处理设备消息的地方需要处理设备启动充电是否成功
|
|
//TODO:在处理设备消息的地方需要处理设备启动充电是否成功
|
|
|
//TODO:保存交易流水时保存一个交易订单
|
|
//TODO:保存交易流水时保存一个交易订单
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- realTimeStatusPushFrame.deviceStatusPush(deviceConnectionMsg, t, deviceConnectionMsg.getDeviceId(), (byte) 1, (byte)2, (byte)1, 0,0 , zero , zero , 0);
|
|
|
|
|
|
|
+ logger.info("{}启动充电异常,{}",deviceConnectionMsg.getDeviceId(),e.getMessage());
|
|
|
|
|
+ realTimeStatusPushFrame.deviceStatusPush(deviceConnectionMsg, t, deviceConnectionMsg.getDeviceId(), (byte) 1, (byte) 2, (byte) 1, 0, 0, zero, zero, 0);
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-private static byte[] t=new byte[16];
|
|
|
|
|
|
|
+
|
|
|
|
|
+ private static byte[] t = new byte[16];
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 计费模型校验应答处理
|
|
* 计费模型校验应答处理
|
|
|
*
|
|
*
|
|
@@ -394,81 +409,22 @@ private static byte[] t=new byte[16];
|
|
|
private void billingModelHandle(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
private void billingModelHandle(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
|
byte[] modelNum = Arrays.copyOfRange(respone_msg, 7, 9);
|
|
byte[] modelNum = Arrays.copyOfRange(respone_msg, 7, 9);
|
|
|
byte[] result = Arrays.copyOfRange(respone_msg, 9, 10);
|
|
byte[] result = Arrays.copyOfRange(respone_msg, 9, 10);
|
|
|
- logger.info("计费模型验证应答"+deviceConnectionMsg.getDeviceId()+">>modelNum:"+DataConversion.bytesToHexString(modelNum) +";result:"+DataConversion.bytesToHexString(result));
|
|
|
|
|
|
|
+ logger.info("计费模型验证应答" + deviceConnectionMsg.getDeviceId() + ">>modelNum:" + DataConversion.bytesToHexString(modelNum) + ";result:" + DataConversion.bytesToHexString(result));
|
|
|
if (result[0] == BillingModelConst.DIFFERENT) {
|
|
if (result[0] == BillingModelConst.DIFFERENT) {
|
|
|
- logger.info("获取计费模型{}",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
|
|
+ logger.info("获取计费模型{}", deviceConnectionMsg.getDeviceId());
|
|
|
//不一致请求计费模型,再向平台请求计费模型0x09
|
|
//不一致请求计费模型,再向平台请求计费模型0x09
|
|
|
billingModelFrame.getBillingModel(deviceConnectionMsg);
|
|
billingModelFrame.getBillingModel(deviceConnectionMsg);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 计费模型请求处理,需要将获取到的云快充计费模型保存到数据库中
|
|
|
|
|
- * @param deviceConnectionMsg
|
|
|
|
|
- * @param respone_msg
|
|
|
|
|
- */
|
|
|
|
|
- private void getBillingModelHandle(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) throws Exception{
|
|
|
|
|
- int index=7;
|
|
|
|
|
- int a=0;
|
|
|
|
|
- byte[] modelNum = Arrays.copyOfRange(respone_msg, index, index+2);
|
|
|
|
|
- index+=2;
|
|
|
|
|
- byte[] j = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] jf = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] f= Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] ff = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] p = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] pf = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] g = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] gf = Arrays.copyOfRange(respone_msg, index, index+4);
|
|
|
|
|
- index+=4;
|
|
|
|
|
- byte[] solt = Arrays.copyOfRange(respone_msg, index, index+1);
|
|
|
|
|
- index++;
|
|
|
|
|
- byte[] shiduan = Arrays.copyOfRange(respone_msg, index, respone_msg.length);
|
|
|
|
|
- QueryWrapper<BillingModel> billingModelQueryWrapper = new QueryWrapper<>();
|
|
|
|
|
- billingModelQueryWrapper.eq("pile_code",deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- BillingModel one = billingModelService.getOne(billingModelQueryWrapper);
|
|
|
|
|
- if (one==null){
|
|
|
|
|
- one = new BillingModel();
|
|
|
|
|
- }
|
|
|
|
|
- BigDecimal bigDecimal = DataConversion.arrToBigDec(modelNum, 0,0);
|
|
|
|
|
- int intValue = bigDecimal.intValue();
|
|
|
|
|
- one.setDeviceImei(deviceConnectionMsg.getImei());
|
|
|
|
|
- one.setDeviceSn(deviceConnectionMsg.getDeviceSn());
|
|
|
|
|
- one.setPileCode(deviceConnectionMsg.getDeviceId());
|
|
|
|
|
- one.setModelNo(intValue);
|
|
|
|
|
- one.setSharpPrice(DataConversion.arrToBigDec(j,5,5)); //尖
|
|
|
|
|
- one.setSharpServiceFee(DataConversion.arrToBigDec(jf,5,5)); //尖服
|
|
|
|
|
- one.setPeakPrice(DataConversion.arrToBigDec(f,5,5)); //峰
|
|
|
|
|
- one.setPeakServiceFee(DataConversion.arrToBigDec(ff,5,5)); //峰服
|
|
|
|
|
- one.setFlatPrice(DataConversion.arrToBigDec(p,5,5)); //平
|
|
|
|
|
- one.setFlatServiceFee(DataConversion.arrToBigDec(pf,5,5)); //平服
|
|
|
|
|
- one.setValleyPrice(DataConversion.arrToBigDec(g,5,5)); //谷
|
|
|
|
|
- one.setValleyServiceFee(DataConversion.arrToBigDec(gf,5,5)); //谷服
|
|
|
|
|
- int integer= Integer.valueOf(Byte.toString(solt[0])); //计损比例
|
|
|
|
|
- one.setLossRatio(integer); //时间段
|
|
|
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
|
|
|
- for (byte b : shiduan) {
|
|
|
|
|
- stringBuilder.append(String.valueOf(b));
|
|
|
|
|
- }
|
|
|
|
|
- String s = stringBuilder.toString();
|
|
|
|
|
- one.setTimeSlot(s);
|
|
|
|
|
- one.setUpdateTime(System.currentTimeMillis());//更新时间
|
|
|
|
|
- billingModelService.saveOrUpdate(one);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 停机指令处理
|
|
* 停机指令处理
|
|
|
|
|
+ *
|
|
|
* @param deviceConnectionMsg
|
|
* @param deviceConnectionMsg
|
|
|
* @param respone_msg
|
|
* @param respone_msg
|
|
|
*/
|
|
*/
|
|
|
- private void stopChargingRequest(DeviceConnectionMsg deviceConnectionMsg,byte[] respone_msg){
|
|
|
|
|
|
|
+ private void stopChargingRequest(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) {
|
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 7, 8);
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 7, 8);
|
|
|
//查询设备sn和imie
|
|
//查询设备sn和imie
|
|
|
QueryWrapper<DeviceStatus> deviceStatusQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<DeviceStatus> deviceStatusQueryWrapper = new QueryWrapper<>();
|
|
@@ -483,7 +439,7 @@ private static byte[] t=new byte[16];
|
|
|
}
|
|
}
|
|
|
RpcResult rpcResult = deviceControlerService.stopCharge(deviceStatus.getDeviceImei(), deviceStatus.getDeviceImei(), (int) guns[0]);
|
|
RpcResult rpcResult = deviceControlerService.stopCharge(deviceStatus.getDeviceImei(), deviceStatus.getDeviceImei(), (int) guns[0]);
|
|
|
|
|
|
|
|
- if (rpcResult.isOk()){
|
|
|
|
|
|
|
+ if (rpcResult.isOk()) {
|
|
|
//发送停充成功,一般没有指令发送成功设备不执行
|
|
//发送停充成功,一般没有指令发送成功设备不执行
|
|
|
/* //deviceStatus.setGunStatus((byte) PortStatusConstant.INSERT_GUN);
|
|
/* //deviceStatus.setGunStatus((byte) PortStatusConstant.INSERT_GUN);
|
|
|
deviceStatus.setOnlineStatus(DeviceOnlineStatus.ONLINE);
|
|
deviceStatus.setOnlineStatus(DeviceOnlineStatus.ONLINE);
|
|
@@ -497,22 +453,22 @@ private static byte[] t=new byte[16];
|
|
|
orderStatusService.updateById(statusServiceOne);
|
|
orderStatusService.updateById(statusServiceOne);
|
|
|
if (guns[0] == 1) {
|
|
if (guns[0] == 1) {
|
|
|
if (redisCache.hasKey(RedisConstant.ONLINE_DEVICE_ONE)) {
|
|
if (redisCache.hasKey(RedisConstant.ONLINE_DEVICE_ONE)) {
|
|
|
- DeviceStatus ds= redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE,deviceStatus.getPileCode());
|
|
|
|
|
- if (ds!=null){
|
|
|
|
|
- redisCache.deleteCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE,deviceStatus.getPileCode());
|
|
|
|
|
|
|
+ DeviceStatus ds = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE, deviceStatus.getPileCode());
|
|
|
|
|
+ if (ds != null) {
|
|
|
|
|
+ redisCache.deleteCacheMapValue(RedisConstant.ONLINE_DEVICE_ONE, deviceStatus.getPileCode());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} else if (guns[0] == 2) {
|
|
} else if (guns[0] == 2) {
|
|
|
if (redisCache.hasKey(RedisConstant.ONLINE_DEVICE_TWO)) {
|
|
if (redisCache.hasKey(RedisConstant.ONLINE_DEVICE_TWO)) {
|
|
|
- DeviceStatus ds= redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO,deviceStatus.getPileCode());
|
|
|
|
|
- if (ds!=null){
|
|
|
|
|
- redisCache.deleteCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO,deviceStatus.getPileCode());
|
|
|
|
|
|
|
+ DeviceStatus ds = redisCache.getCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO, deviceStatus.getPileCode());
|
|
|
|
|
+ if (ds != null) {
|
|
|
|
|
+ redisCache.deleteCacheMapValue(RedisConstant.ONLINE_DEVICE_TWO, deviceStatus.getPileCode());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- redisCache.setCacheMapValue(guns[0] == 1 ? RedisConstant.ONLINE_DEVICE_ONE : RedisConstant.ONLINE_DEVICE_TWO, deviceStatus.getPileCode(),deviceStatus);
|
|
|
|
|
- }else {
|
|
|
|
|
- logger.info("stop charging device:"+deviceStatus.getDeviceSn()+";port:"+guns[0]+"stop charnging fail");
|
|
|
|
|
|
|
+ redisCache.setCacheMapValue(guns[0] == 1 ? RedisConstant.ONLINE_DEVICE_ONE : RedisConstant.ONLINE_DEVICE_TWO, deviceStatus.getPileCode(), deviceStatus);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ logger.info("stop charging device:" + deviceStatus.getDeviceSn() + ";port:" + guns[0] + "stop charnging fail");
|
|
|
}
|
|
}
|
|
|
//发出结束充电指令
|
|
//发出结束充电指令
|
|
|
DeviceParam deviceParam = new DeviceParam();
|
|
DeviceParam deviceParam = new DeviceParam();
|
|
@@ -526,52 +482,53 @@ private static byte[] t=new byte[16];
|
|
|
* @param deviceConnectionMsg
|
|
* @param deviceConnectionMsg
|
|
|
* @param respone_msg
|
|
* @param respone_msg
|
|
|
*/
|
|
*/
|
|
|
- private void remoteBalanceUpdate(DeviceConnectionMsg deviceConnectionMsg,byte[] respone_msg) throws Exception{
|
|
|
|
|
|
|
+ private void remoteBalanceUpdate(DeviceConnectionMsg deviceConnectionMsg, byte[] respone_msg) throws Exception {
|
|
|
byte[] pileCode = Arrays.copyOfRange(respone_msg, 0, 7);
|
|
byte[] pileCode = Arrays.copyOfRange(respone_msg, 0, 7);
|
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 7, 8);
|
|
byte[] guns = Arrays.copyOfRange(respone_msg, 7, 8);
|
|
|
byte[] card = Arrays.copyOfRange(respone_msg, 8, 16);
|
|
byte[] card = Arrays.copyOfRange(respone_msg, 8, 16);
|
|
|
- byte[] balance=Arrays.copyOfRange(respone_msg, 16, 20);
|
|
|
|
|
|
|
+ byte[] balance = Arrays.copyOfRange(respone_msg, 16, 20);
|
|
|
BigDecimal bigDecimal = DataConversion.arrToBigDec(balance, 2, 2);
|
|
BigDecimal bigDecimal = DataConversion.arrToBigDec(balance, 2, 2);
|
|
|
|
|
|
|
|
- String pile=DataConversion.bytesToHexString(pileCode);
|
|
|
|
|
|
|
+ String pile = DataConversion.bytesToHexString(pileCode);
|
|
|
|
|
|
|
|
- logger.info("更新余额>>"+bigDecimal+";pileCode:"+pile);
|
|
|
|
|
|
|
+ logger.info("更新余额>>" + bigDecimal + ";pileCode:" + pile);
|
|
|
//TODO:1.这里更新的余额需要针对充电桩使用的人员进行修改;(考虑后台计费);2.更新操作完成时候响应云快充更新结果
|
|
//TODO:1.这里更新的余额需要针对充电桩使用的人员进行修改;(考虑后台计费);2.更新操作完成时候响应云快充更新结果
|
|
|
//拿当前的订单去更新余额
|
|
//拿当前的订单去更新余额
|
|
|
QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<OrderStatus> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
|
- orderStatusQueryWrapper.eq("pile_code", pile).eq("guns_code", guns[0]).eq("card",card).orderByDesc("create_time").last("limit 1");
|
|
|
|
|
|
|
+ orderStatusQueryWrapper.eq("pile_code", pile).eq("guns_code", guns[0]).eq("card", card).orderByDesc("create_time").last("limit 1");
|
|
|
OrderStatus statusServiceOne = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
OrderStatus statusServiceOne = orderStatusService.getOne(orderStatusQueryWrapper);
|
|
|
|
|
|
|
|
QueryWrapper<BillingModel> billingModelQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<BillingModel> billingModelQueryWrapper = new QueryWrapper<>();
|
|
|
- billingModelQueryWrapper.eq("pile_code",pile);
|
|
|
|
|
|
|
+ billingModelQueryWrapper.eq("pile_code", pile);
|
|
|
BillingModel model = billingModelService.getOne(billingModelQueryWrapper);
|
|
BillingModel model = billingModelService.getOne(billingModelQueryWrapper);
|
|
|
|
|
|
|
|
//后台计费
|
|
//后台计费
|
|
|
- Map<String, BigDecimal> map = transMoney.compute(1, model, statusServiceOne.getCreateTime(), System.currentTimeMillis(),true);
|
|
|
|
|
|
|
+ Map<String, BigDecimal> map = transMoney.compute(1, model, statusServiceOne.getCreateTime(), System.currentTimeMillis(), true);
|
|
|
BigDecimal money = statusServiceOne.getStartMoney().subtract(map.get("money")).setScale(4, BigDecimal.ROUND_DOWN);
|
|
BigDecimal money = statusServiceOne.getStartMoney().subtract(map.get("money")).setScale(4, BigDecimal.ROUND_DOWN);
|
|
|
BigDecimal add = money.add(bigDecimal);
|
|
BigDecimal add = money.add(bigDecimal);
|
|
|
statusServiceOne.setStartMoney(add);
|
|
statusServiceOne.setStartMoney(add);
|
|
|
orderStatusService.updateById(statusServiceOne);
|
|
orderStatusService.updateById(statusServiceOne);
|
|
|
//这里测试默认更新成功
|
|
//这里测试默认更新成功
|
|
|
- remoteBalanceUpdatePushFrame.updateBalance(deviceConnectionMsg,card, (byte) 0x00);
|
|
|
|
|
|
|
+ remoteBalanceUpdatePushFrame.updateBalance(deviceConnectionMsg, card, (byte) 0x00);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//保存订单开始状态,记录充电的交易流水
|
|
//保存订单开始状态,记录充电的交易流水
|
|
|
- private void saveOrder(OrderStatus orderStatus){
|
|
|
|
|
|
|
+ private void saveOrder(OrderStatus orderStatus) {
|
|
|
TransOrder transOrder = transMapping.orderStatusToTransOrder(orderStatus);
|
|
TransOrder transOrder = transMapping.orderStatusToTransOrder(orderStatus);
|
|
|
byte[] transOrders = new byte[8];
|
|
byte[] transOrders = new byte[8];
|
|
|
System.arraycopy(orderStatus.getTransOrder(), 8, transOrders, 0, transOrders.length);
|
|
System.arraycopy(orderStatus.getTransOrder(), 8, transOrders, 0, transOrders.length);
|
|
|
//为了云快充app显示的订单号一致,将订单号格式转化一下
|
|
//为了云快充app显示的订单号一致,将订单号格式转化一下
|
|
|
transOrder.setTrans(DataConversion.bytesToHexString(transOrders));
|
|
transOrder.setTrans(DataConversion.bytesToHexString(transOrders));
|
|
|
boolean b = transOrderService.saveOrUpdate(transOrder);
|
|
boolean b = transOrderService.saveOrUpdate(transOrder);
|
|
|
- logger.info("保存订单>>>>>"+DataConversion.bytesToHexString(orderStatus.getTransOrder())+"结果:"+b);
|
|
|
|
|
|
|
+ logger.info("保存订单>>>>>" + DataConversion.bytesToHexString(orderStatus.getTransOrder()) + "结果:" + b);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
//余额不足解决办法,将下发的余额和尖峰平谷中最贵的价格发送到主板参数中,配合主板参数进行余额不足判定
|
|
//余额不足解决办法,将下发的余额和尖峰平谷中最贵的价格发送到主板参数中,配合主板参数进行余额不足判定
|
|
|
- private void setMoney(OrderStatus orderStatus){
|
|
|
|
|
|
|
+ private void setMoney(OrderStatus orderStatus) {
|
|
|
|
|
|
|
|
QueryWrapper<BillingModel> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<BillingModel> orderStatusQueryWrapper = new QueryWrapper<>();
|
|
|
- orderStatusQueryWrapper.eq("pile_code",orderStatus.getPileCode());
|
|
|
|
|
|
|
+ orderStatusQueryWrapper.eq("pile_code", orderStatus.getPileCode());
|
|
|
BillingModel billingModel = billingModelService.getOne(orderStatusQueryWrapper);
|
|
BillingModel billingModel = billingModelService.getOne(orderStatusQueryWrapper);
|
|
|
MainBoard mainBoard = new MainBoard();
|
|
MainBoard mainBoard = new MainBoard();
|
|
|
mainBoard.setBottomPrice(billingModel.getSharpPrice().add(billingModel.getSharpServiceFee()).intValue());
|
|
mainBoard.setBottomPrice(billingModel.getSharpPrice().add(billingModel.getSharpServiceFee()).intValue());
|
|
@@ -582,7 +539,7 @@ private static byte[] t=new byte[16];
|
|
|
mainBoard.setBottomEnd(24);
|
|
mainBoard.setBottomEnd(24);
|
|
|
mainBoard.setFeeType(0x00);
|
|
mainBoard.setFeeType(0x00);
|
|
|
//设置主板参数
|
|
//设置主板参数
|
|
|
- deviceControlerService.setMainBoard(orderStatus.getDeviceImei(),orderStatus.getDeviceImei(),mainBoard);
|
|
|
|
|
|
|
+ deviceControlerService.setMainBoard(orderStatus.getDeviceImei(), orderStatus.getDeviceImei(), mainBoard);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|