From 946caa1f63fe43784cacee771a874b5847269398 Mon Sep 17 00:00:00 2001 From: ZZ Date: Mon, 14 Mar 2022 15:41:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=9B=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E9=94=99=E8=AF=AF=E9=80=A0=E6=88=90=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E8=AE=A2=E5=8D=95=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/XhpcChargeOrderServiceImpl.java | 23 +++--- .../pp/controller/ChargingController.java | 38 +++++++-- .../com/xhpc/pp/logic/RealtimeDataLogic.java | 80 ++++++++++--------- 3 files changed, 87 insertions(+), 54 deletions(-) diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java index ab367d48..ec6736e6 100644 --- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java +++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/XhpcChargeOrderServiceImpl.java @@ -573,29 +573,30 @@ public class XhpcChargeOrderServiceImpl extends BaseService implements IXhpcChar xhpcChargeOrder.setStatus(status); xhpcChargeOrder.setCreateTime(new Date()); xhpcChargeOrder.setTerminalId(terminalId); - try { - xhpcChargeOrder.setPower(power.toString()); - }catch (Exception e){ - - } + xhpcChargeOrder.setPower(power == null ? "120" : power.toString()); xhpcChargeOrder.setSource(1); xhpcChargeOrder.setUserId(userId); xhpcChargeOrder.setChargingMode(chargingMode); - int res =xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); - //int res = xhpcChargeOrderMapper.addBy3rd(internetSerialNumber, orderNo, driverId, chargingAmt, plateNum, status, date,null, terminalId, power, chargingStationId, chargingMode, 1, userId); + int res = xhpcChargeOrderMapper.addXhpcChargeOrder(xhpcChargeOrder); + //int res = xhpcChargeOrderMapper.addBy3rd(internetSerialNumber, orderNo, driverId, chargingAmt, plateNum, status, + // date,null, terminalId, power, chargingStationId, chargingMode, 1, userId); R r1 = powerPileService.startCharging(startChargingData); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<第三方充电返回>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<" + r1.getCode() + ">>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<" + r1.getMsg() + ">>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<" + r1.getData() + ">>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<<<第三方充电返回>>>>>>>>>>>>>>>>>"); - Long rateModelId = Long.valueOf(r1.getData().toString()); - xhpcChargeOrder.setRateModelId(rateModelId); - xhpcChargeOrderMapper.updateXhpcChargeOrder(xhpcChargeOrder); + try { + Long rateModelId = Long.valueOf(r1.getData().toString()); + xhpcChargeOrder.setRateModelId(rateModelId); + xhpcChargeOrderMapper.updateXhpcChargeOrder(xhpcChargeOrder); + } catch (Exception e) { + logger.error("update order[{}] failed.", orderNo); + } Map data = new HashMap<>(); - data.put("orderNo", orderNo); data.put("startTime", startTime); + data.put("orderNo", orderNo); r.setData(data); if (res != 0) { r.setCode(200); 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 43e95947..9a395e02 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 @@ -285,8 +285,8 @@ public class ChargingController { } @GetMapping("native/charging/stop/{pileNo}/{connectorId}/{version}") - public R nativeStopCharging(@PathVariable("pileNo") String pileNo, @PathVariable("connectorId") String connectorId, - @PathVariable("version") String version) { + public R stopInvalidOrder(@PathVariable("pileNo") String pileNo, @PathVariable("connectorId") String connectorId, + @PathVariable("version") String version) { ClientHandler handler = ChargingPileServer.getHandler(pileNo); if (handler == null) { @@ -309,8 +309,6 @@ public class ChargingController { return R.ok("充电桩已离线"); } else { handler.sendClientBinary(msg); - Map cacheGun = REDIS.getCacheMap(gunkey); - REDIS.setCacheMap(gunkey, cacheGun); return R.ok("停止充电指令已下发"); } } catch (IOException e) { @@ -319,6 +317,35 @@ public class ChargingController { } } + public void stopInvalidOrder(String orderNo) { + + String pileNo = orderNo.substring(0, 14); + ClientHandler handler = ChargingPileServer.getHandler(pileNo); + if (handler != null) { + try { + String connectorId = pileNo.substring(0, 16); + String gunkey = "gun:".concat(connectorId); + String skey = gunkey.concat(".seqhex"); + String seq = seqHex(skey); + byte[] msg = translateStop(connectorId, seq); + if (!handler.isOpen()) { + log.error("stop invalid order failed. [{}]({}) connection lost", handler.getName(), pileNo); + 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)) { + handler.sendClientBinary(msg); + log.error("invalid orderNo [{}], stop msg sent to pile |{}|", pileNo, HexUtils.toHex(msg)); + REDIS.setCacheMapValue(orderkey, "sts", 1); + } + } + } catch (IOException e) { + log.error("send message failed. " + e.getMessage(), e); + } + } + } + private byte[] translateStart(StartChargingData startChargingData, String seq) { byte[] data = new byte[0]; @@ -328,7 +355,8 @@ public class ChargingController { data = ArrayUtils.addAll(data, HexUtils.toBytes(startChargingData.getOrderNo())); data = ArrayUtils.addAll(data, HexUtils.toBytes(startChargingData.getPileNo())); data = ArrayUtils.addAll(data, HexUtils.toBytes(startChargingData.getGunId())); - data = ArrayUtils.addAll(data, HexUtils.toBytes(String.format("%016X", Long.parseLong(startChargingData.getLogicCardNo(), 16)))); + data = ArrayUtils.addAll(data, HexUtils.toBytes(String.format("%016X", + Long.parseLong(startChargingData.getLogicCardNo(), 16)))); data = ArrayUtils.addAll(data, HexUtils.toBytes(String.format("%016X", Long.parseLong(startChargingData.getPhysicCardNo(), 16)))); data = ArrayUtils.addAll(data, HexUtils.toBytes(toHexInt(startChargingData.getBalance()))); } else { 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 04337e55..fbf0c035 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 @@ -147,48 +147,52 @@ public class RealtimeDataLogic implements ServiceLogic { cacheOrder.put("totalPower", cacheRealtimeData.getChargingDegree() / 10000.0); cacheOrder.put("totalMoney", cacheRealtimeData.getAmountCharged() / 10000.0); cacheOrder.put("realtimeDataList", realtimeDataList); - pileOrderService.pileRimeOrder(orderNo); - Integer vul = (Integer) cachePile.get("voltageUpperLimits"); - Integer cul = (Integer) cachePile.get("currentLimit"); - if (wc > cul || wv > vul) { - R r = chargingController.nativeStopCharging(pileNo, gunId, default_version); - if (r.getCode() == 200) { - Integer vcpcnt = (Integer) cacheOrder.get("vcpcnt"); - cacheOrder.put("vcpcnt", vcpcnt == null ? 1 : vcpcnt++); - log.error("{} alert: v[{}], c[{}]", orderNo, wv, wc); - } + R r1 = pileOrderService.pileRimeOrder(orderNo); + if (r1.getMsg().contains("无效订单")) { + chargingController.stopInvalidOrder(pileNo); } else { - Integer stopSoc = (Integer) cacheOrder.get("stopSoc"); - if (stopSoc != null && socInt >= stopSoc) { - R r = chargingController.nativeStopCharging(pileNo, gunId, default_version); - String alerted = (String) cacheOrder.get("socalerted"); - String tel = (String) cacheOrder.get("tel"); - if (alerted == null && tel != null) { - if (r.getCode() == 200) { - HashMap paramMap = new HashMap<>(); - paramMap.put("battery", stopSoc.toString()); - paramMap.put("phone", tel); - paramMap.put("content", "【小华充电】尊敬的用户,你的车辆已充电达至设定的SOC(" + stopSoc + "%)。"); - smsService.sendNotice(paramMap); - cacheOrder.put("socalerted", "true"); + Integer vul = (Integer) cachePile.get("voltageUpperLimits"); + Integer cul = (Integer) cachePile.get("currentLimit"); + if (wc > cul || wv > vul) { + R r = chargingController.stopInvalidOrder(pileNo, gunId, default_version); + if (r.getCode() == 200) { + Integer vcpcnt = (Integer) cacheOrder.get("vcpcnt"); + cacheOrder.put("vcpcnt", vcpcnt == null ? 1 : vcpcnt++); + log.error("{} alert: v[{}], c[{}]", orderNo, wv, wc); + } + } else { + Integer stopSoc = (Integer) cacheOrder.get("stopSoc"); + if (stopSoc != null && socInt >= stopSoc) { + R r = chargingController.stopInvalidOrder(pileNo, gunId, default_version); + String alerted = (String) cacheOrder.get("socalerted"); + String tel = (String) cacheOrder.get("tel"); + if (alerted == null && tel != null) { + if (r.getCode() == 200) { + HashMap paramMap = new HashMap<>(); + paramMap.put("battery", stopSoc.toString()); + paramMap.put("phone", tel); + paramMap.put("content", "【小华充电】尊敬的用户,你的车辆已充电达至设定的SOC(" + stopSoc + "%)。"); + smsService.sendNotice(paramMap); + cacheOrder.put("socalerted", "true"); + } } } - } - if (balance < 50000) { - String alerted = (String) cacheOrder.get("lt5alerted"); - String tel = (String) cacheOrder.get("tel"); - if (alerted == null && tel != null) { - HashMap paramMap = new HashMap<>(); - paramMap.put("money", "5"); - paramMap.put("phone", tel); - paramMap.put("content", "【小华充电】尊敬的用户,你的账户余额小于5元,为不影响您的正常充电,请您尽快充值交费,谢谢。"); - smsService.sendNotice(paramMap); - cacheOrder.put("lt5alerted", "true"); + if (balance < 50000) { + String alerted = (String) cacheOrder.get("lt5alerted"); + String tel = (String) cacheOrder.get("tel"); + if (alerted == null && tel != null) { + HashMap paramMap = new HashMap<>(); + paramMap.put("money", "5"); + paramMap.put("phone", tel); + paramMap.put("content", "【小华充电】尊敬的用户,你的账户余额小于5元,为不影响您的正常充电,请您尽快充值交费,谢谢。"); + smsService.sendNotice(paramMap); + cacheOrder.put("lt5alerted", "true"); + } + } + if ("true".equals(cacheOrder.get("lordiss"))) { + cacheOrder.put("lordiss", "false"); + pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复"); } - } - if ("true".equals(cacheOrder.get("lordiss"))) { - cacheOrder.put("lordiss", "false"); - pileOrderService.pileStop(orderNo, 4, "订单实时数据恢复"); } } } else {