From b4e7bb990df01dffc48e8adcbcf0d254978e7253 Mon Sep 17 00:00:00 2001 From: zz Date: Tue, 15 Mar 2022 14:46:56 +0800 Subject: [PATCH 1/5] stop invalid order --- .../pp/controller/ChargingController.java | 29 ++++++++++++++----- .../xhpc/pp/controller/PileController.java | 2 +- .../com/xhpc/pp/logic/OrderDataLogic.java | 10 ++++++- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java index 41d48016..e44dd3bc 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java @@ -207,7 +207,7 @@ public class ChargingController { refreshBalanceMsg = refreshBalanceMsg.concat(CRCCalculator.calcCrc(refreshBalanceMsg)); ClientHandler handler = getHandler(pileNo); R r; - if (handler != null) { //todo 余额下发重试机制 + if (handler != null && handler.isOpen()) { //todo 余额下发重试机制 if (!handler.isOpen()) { log.error("[{}]({}) connection lost", handler.getName(), pileNo); removeHandler(pileNo); @@ -235,6 +235,11 @@ public class ChargingController { String pileNo = startChargingData.getPileNo(); ClientHandler handler = ChargingPileServer.getHandler(pileNo); if (handler == null) { + try { + handler.closeConnection(); + } catch (Exception e) { + log.error("invalid conn [{}]", handler.getName()); + } return R.fail("充电桩没有连接到上次注册的服务器,请稍后再试一次"); } else if (!handler.isOpen()) { log.error("[{}]({}) connection lost", handler.getName(), pileNo); @@ -290,7 +295,11 @@ public class ChargingController { ClientHandler handler = ChargingPileServer.getHandler(pileNo); if (handler == null) { -// ChargingPileServer.removeHandler(pileNo); + try { + handler.closeConnection(); + } catch (Exception e) { + log.error("invalid conn [{}]", handler.getName()); + } return R.fail("充电桩没有连接到上次注册的服务器,请稍后再试一次"); } try { @@ -321,7 +330,7 @@ public class ChargingController { String pileNo = orderNo.substring(0, 14); ClientHandler handler = ChargingPileServer.getHandler(pileNo); - if (handler != null) { + if (handler != null && handler.isOpen()) { try { String connectorId = pileNo.substring(0, 16); String gunkey = "gun:".concat(connectorId); @@ -333,16 +342,22 @@ public class ChargingController { removeHandler(pileNo); } else { String orderkey = REDIS.getCacheMapValue(gunkey, "orderkey"); - Integer sts = REDIS.getCacheMapValue(orderkey, "sts"); - if (orderkey != null && orderNo.equals(orderkey.substring(6)) && (sts == null)) { +// Integer sts = REDIS.getCacheMapValue(orderkey, "sts"); + if (orderkey != null && orderNo.equals(orderkey.substring(6))) {// && (sts == null)) { handler.sendClientBinary(msg); log.error("invalid orderNo [{}], stop msg sent to pile |{}|", pileNo, HexUtils.toHex(msg)); - REDIS.setCacheMapValue(orderkey, "sts", 1); +// REDIS.setCacheMapValue(orderkey, "sts", 1); } } } catch (IOException e) { - log.error("send message failed. " + e.getMessage(), e); + try { + handler.closeConnection(); + } catch (Exception e1) { + log.error("invalid conn [{}]", handler.getName()); + } } + } else if (handler != null) { + handler.closeConnection(); } } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java index b6ccee03..96319ea3 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/PileController.java @@ -69,7 +69,7 @@ public class PileController { ClientHandler handler = getHandler(pileNo); R r; - if (handler != null) { + if (handler != null && handler.isOpen()) { if (!handler.isOpen()) { log.error("send message failed. [{}]({}) connection lost", handler.getName(), pileNo); removeHandler(pileNo); diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java index c041c25c..fdcd18a3 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java @@ -6,6 +6,7 @@ import com.xhpc.common.api.PileOrderService; import com.xhpc.common.core.domain.R; import com.xhpc.common.data.redis.CacheOrderData; import com.xhpc.common.data.up.OrderData; +import com.xhpc.pp.controller.ChargingController; import com.xhpc.pp.tx.ServiceParameter; import com.xhpc.pp.tx.ServiceResult; import com.xhpc.pp.tx.logic.ServiceLogic; @@ -33,6 +34,8 @@ public class OrderDataLogic implements ServiceLogic { @Autowired private PileOrderService pileOrderService; + @Autowired + private ChargingController chargingController; @Override public ServiceResult service(ServiceParameter sp) throws Exception { @@ -76,8 +79,13 @@ public class OrderDataLogic implements ServiceLogic { final R r = pileOrderService.pileEndOrder(orderNo); if (r.getCode() == 200) return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); - else + else { + String msg = r.getMsg(); + if (msg != null && msg.contains("无效订单")) { + chargingController.stopInvalidOrder(pileNo); + } return new ServiceResult(ServiceResult.FAIL); + } } private CacheOrderData translate(OrderData orderData) throws InvocationTargetException, IllegalAccessException, InstantiationException { From 2f9e44d317874eb00358b003f9f8242730daa701 Mon Sep 17 00:00:00 2001 From: zz Date: Tue, 15 Mar 2022 14:48:13 +0800 Subject: [PATCH 2/5] stop invalid order --- .../src/main/java/com/xhpc/pp/logic/OrderDataLogic.java | 2 +- .../src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java index fdcd18a3..f4a1c172 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java @@ -82,7 +82,7 @@ public class OrderDataLogic implements ServiceLogic { else { String msg = r.getMsg(); if (msg != null && msg.contains("无效订单")) { - chargingController.stopInvalidOrder(pileNo); + chargingController.stopInvalidOrder(orderNo); } return new ServiceResult(ServiceResult.FAIL); } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java index 323d00d7..c05d6d58 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RealtimeDataLogic.java @@ -150,7 +150,7 @@ public class RealtimeDataLogic implements ServiceLogic { R r1 = pileOrderService.pileRimeOrder(orderNo); String msg = r1.getMsg(); if (msg!=null && msg.contains("无效订单")) { - chargingController.stopInvalidOrder(pileNo); + chargingController.stopInvalidOrder(orderNo); } else { Integer vul = (Integer) cachePile.get("voltageUpperLimits"); Integer cul = (Integer) cachePile.get("currentLimit"); From cc97b9b68a5f551940dcc78bcbfa2b9c622f8f7b Mon Sep 17 00:00:00 2001 From: zz Date: Tue, 15 Mar 2022 17:17:27 +0800 Subject: [PATCH 3/5] wrong para name. --- .../main/java/com/xhpc/pp/controller/ChargingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java index e44dd3bc..ae0e9d71 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java @@ -332,7 +332,7 @@ public class ChargingController { ClientHandler handler = ChargingPileServer.getHandler(pileNo); if (handler != null && handler.isOpen()) { try { - String connectorId = pileNo.substring(0, 16); + String connectorId = orderNo.substring(0, 16); String gunkey = "gun:".concat(connectorId); String skey = gunkey.concat(".seqhex"); String seq = seqHex(skey); From 4e7db743fbc5d349445be62ec2c41343d27025dc Mon Sep 17 00:00:00 2001 From: zz Date: Tue, 15 Mar 2022 17:23:37 +0800 Subject: [PATCH 4/5] disConn. --- .../com/xhpc/pp/server/ChargingPileEventHandler.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java index ecd777c5..ffd4465f 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java @@ -32,11 +32,11 @@ public class ChargingPileEventHandler implements ClientEventHandler { public void lostConnection(ClientHandler handler) { String pileNo = ChargingPileServer.getPileNo(handler); -// if (pileNo != null) { -// ChargingPileServer.disconnPileNGuns(pileNo); -// } - log.debug("<- ({}) - [{}] - {} ->", - pileNo, handler.getName(), handler.getSocket().getRemoteSocketAddress().toString()); + if (pileNo != null) { + ChargingPileServer.disconnPileNGuns(pileNo); + log.debug("<- ({}) - [{}] - {} ->", pileNo, handler.getName(), + handler.getSocket().getRemoteSocketAddress().toString()); + } } @Override From b9afafac6a21dbf41397739eedf52727c6335c2b Mon Sep 17 00:00:00 2001 From: zz Date: Tue, 15 Mar 2022 20:21:27 +0800 Subject: [PATCH 5/5] top lose invalid order, not to stop it. --- .../com/xhpc/pp/controller/ChargingController.java | 2 +- .../java/com/xhpc/pp/logic/OrderDataLogic.java | 14 +++----------- .../xhpc/pp/server/ChargingPileEventHandler.java | 2 +- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java index ae0e9d71..4cb54661 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/ChargingController.java @@ -345,7 +345,7 @@ public class ChargingController { // Integer sts = REDIS.getCacheMapValue(orderkey, "sts"); if (orderkey != null && orderNo.equals(orderkey.substring(6))) {// && (sts == null)) { handler.sendClientBinary(msg); - log.error("invalid orderNo [{}], stop msg sent to pile |{}|", pileNo, HexUtils.toHex(msg)); + log.error("invalid orderNo [{}], stop msg sent to pile |{}|", orderNo, HexUtils.toHex(msg)); // REDIS.setCacheMapValue(orderkey, "sts", 1); } } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java index f4a1c172..b91a71ac 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java @@ -73,19 +73,11 @@ public class OrderDataLogic implements ServiceLogic { String resultStr = "6815".concat(req.get("seqhex").toString()).concat("0040").concat(orderNo).concat(ServiceResult.HEX_00); resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr)); - if (orderNo.equals("00000000000000000000000000000000")) { - return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); - } final R r = pileOrderService.pileEndOrder(orderNo); - if (r.getCode() == 200) - return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); - else { - String msg = r.getMsg(); - if (msg != null && msg.contains("无效订单")) { - chargingController.stopInvalidOrder(orderNo); - } - return new ServiceResult(ServiceResult.FAIL); + if (orderNo.equals("00000000000000000000000000000000") || (r.getMsg() != null && r.getMsg().contains("无效订单"))) { + log.error(">>INVALID order [{}] detected. MUST check the system.<<", orderNo); } + return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); } private CacheOrderData translate(OrderData orderData) throws InvocationTargetException, IllegalAccessException, InstantiationException { diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java index ffd4465f..b6ff0cb7 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java @@ -34,7 +34,7 @@ public class ChargingPileEventHandler implements ClientEventHandler { String pileNo = ChargingPileServer.getPileNo(handler); if (pileNo != null) { ChargingPileServer.disconnPileNGuns(pileNo); - log.debug("<- ({}) - [{}] - {} ->", pileNo, handler.getName(), + log.debug("<- ({}) -disconn- [{}] - {} ->", pileNo, handler.getName(), handler.getSocket().getRemoteSocketAddress().toString()); } }