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 d403b89f..d92639ae 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 @@ -3,9 +3,12 @@ package com.xhpc.pp.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.xhpc.common.api.PowerPileService; +import com.xhpc.common.api.dto.ChargingStationDto; import com.xhpc.common.core.domain.R; import com.xhpc.common.core.utils.HttpUtils; import com.xhpc.common.data.down.StartChargingData; +import com.xhpc.common.data.redis.CacheRateModel; +import com.xhpc.pp.logic.RateModelRequestLogic; import com.xhpc.pp.server.ChargingPileServer; import com.xhpc.pp.tx.ServiceResult; import com.xhpc.pp.utils.security.CRCCalculator; @@ -23,8 +26,7 @@ import java.util.Map; import static com.xhpc.common.data.redis.SeqUtil.seqHex; import static com.xhpc.pp.logic.RegisterLogic.REGISTERED; -import static com.xhpc.pp.server.ChargingPileServer.REDIS; -import static com.xhpc.pp.server.ChargingPileServer.default_version; +import static com.xhpc.pp.server.ChargingPileServer.*; import static com.xhpc.pp.utils.security.HexUtils.toHexInt; @RestController @@ -49,22 +51,55 @@ public class ChargingController { String pileNo = startChargingData.getPileNo(); String pkey = "pile:".concat(pileNo); Map cachePile = REDIS.getCacheMap(pkey); + R r = R.ok(); if (cachePile.isEmpty()) { - return R.fail("充电桩未注册"); + r = R.fail("充电桩未注册"); } String status = cachePile.get("status"); if (!REGISTERED.equals(status)) { - return R.fail("充电桩离线"); + r = R.fail("充电桩离线"); } - String svcSrv = cachePile.get("svcSrv"); - JSONObject json = (JSONObject) JSON.toJSON(startChargingData); - String response = HttpUtils.post(fmt(svcSrv).concat("/native/charging/start"), json); - JSONObject responseJson = (JSONObject) JSON.parse(response); - int code = responseJson.getInteger("code"); - if (code != 200) { - return R.fail(code, responseJson.getString("msg")); + if (r.getCode() != 200) { + Long pileRateModelId = Long.valueOf(cachePile.get("rateModelId")); + Long stationId = Long.valueOf(cachePile.get("stationId")); + ChargingStationDto cacheStation = REDIS.getCacheObject("station:".concat(stationId.toString())); + Long stationRateModelId = cacheStation.getRateModelId(); + if (!pileRateModelId.equals(stationRateModelId)) { + if (cachePile.get("status").equals("Registered")) { + + CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:".concat(stationRateModelId.toString())); + String rateModel = RateModelRequestLogic.translate(cacheRateModel); + String rateModelMsg = "680E0000000A".concat(pileNo) + .concat(String.format("%04d", stationRateModelId)) + .concat(rateModel) + .concat(ServiceResult.HEX_OK); + rateModelMsg = rateModelMsg.concat(CRCCalculator.calcCrc(rateModel)); + ClientHandler handler = getHandler(pileNo); + if (handler != null) { + try { + handler.sendClientBinary(HexUtils.toBytes(rateModelMsg)); + r = R.fail("费率模型已下发,请稍后再次尝试启动充电"); + } catch (IOException e) { + log.debug(e.getMessage()); + r = R.fail("费率模型下发失败,未更新或下发等待设置中"); + } + } + } + r = R.fail("费率模型未更新或下发"); + } else { + String svcSrv = cachePile.get("svcSrv"); + JSONObject json = (JSONObject) JSON.toJSON(startChargingData); + String response = HttpUtils.post(fmt(svcSrv).concat("/native/charging/start"), json); + JSONObject responseJson = (JSONObject) JSON.parse(response); + int code = responseJson.getInteger("code"); + if (code != 200) { + r = R.fail(code, responseJson.getString("msg")); + } else { + r = R.ok(responseJson.get("data"), responseJson.getString("msg")); + } + } } - return R.ok(responseJson.get("data"), responseJson.getString("msg")); + return r; } @PutMapping("charging/stop/{pileNo}/{gunId}/{version}") @@ -72,25 +107,30 @@ public class ChargingController { String pkey = "pile:".concat(pileNo); Map cachePile = REDIS.getCacheMap(pkey); + R r = R.ok(); if (cachePile.isEmpty()) { - return R.fail("充电桩未注册"); + r = R.fail("充电桩未注册"); } String status = cachePile.get("status"); if (!REGISTERED.equals(status)) { - return R.fail("充电桩离线"); + r = R.fail("充电桩离线"); } - String svcSrv = cachePile.get("svcSrv"); - String response = HttpUtils.get(fmt(svcSrv) - .concat("/native/charging/stop/") - .concat(pileNo).concat("/") - .concat(gunId).concat("/") - .concat(version)); - JSONObject responseJson = (JSONObject) JSON.parse(response); - int code = responseJson.getInteger("code"); - if (code != 200) { - return R.fail(code, responseJson.getString("msg")); + if (r.getCode() == 200) { + String svcSrv = cachePile.get("svcSrv"); + String response = HttpUtils.get(fmt(svcSrv) + .concat("/native/charging/stop/") + .concat(pileNo).concat("/") + .concat(gunId).concat("/") + .concat(version)); + JSONObject responseJson = (JSONObject) JSON.parse(response); + int code = responseJson.getInteger("code"); + if (code != 200) { + r = R.fail(code, responseJson.getString("msg")); + } else { + r = R.ok(responseJson.get("data"), responseJson.getString("msg")); + } } - return R.ok(responseJson.get("data"), responseJson.getString("msg")); + return r; } private String fmt(String svcSrv) { 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 06f7f9b5..85eb67e1 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 @@ -38,6 +38,7 @@ public class PileController { for (String pileNo : pileNoSet) { String pkey = "pile:".concat(pileNo); Map cachePile = REDIS.getCacheMap(pkey); + cachePile.put("rateModelId", cacheStation.getRateModelId()); cachePile.put("stationId", stationId); REDIS.setCacheMap(pkey, cachePile); } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/TestController.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/TestController.java index 95b99067..c1793840 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/TestController.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/controller/TestController.java @@ -28,9 +28,9 @@ public class TestController { StartChargingData d = new StartChargingData(); d.setPileNo(pno); //55031412782305 + d.setOrderNo(ono); //00000000000000000000000123456789 d.setBalance(b); //300 d.setGunId(gid); //02 - d.setOrderNo(ono); //00000000000000000000000123456789 return powerPileService.startCharging(d); } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/PileRateModelConfigReplyDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/PileRateModelConfigReplyDataLogic.java index 641ad924..16bbb17a 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/PileRateModelConfigReplyDataLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/PileRateModelConfigReplyDataLogic.java @@ -12,6 +12,9 @@ import org.springframework.stereotype.Component; import java.util.Map; +import static com.xhpc.pp.server.ChargingPileServer.REDIS; +import static com.xhpc.pp.tx.ServiceResult.HEX_OK; + @Lazy @Component("PileRateModelConfigReplyDataLogic") public class PileRateModelConfigReplyDataLogic implements ServiceLogic { @@ -24,7 +27,11 @@ public class PileRateModelConfigReplyDataLogic implements ServiceLogic { Map req = sp.getParameters(); ObjectMapper objectMapper = new ObjectMapper(); PileConfigReplyData pileRateModelConfigReplyData = objectMapper.convertValue(req, PileConfigReplyData.class); - //todo + if (pileRateModelConfigReplyData.getConfigResult().equals(HEX_OK)) { + String pileNo = pileRateModelConfigReplyData.getPileNo(); + Map cacheMap = REDIS.getCacheMap("pile:".concat(pileNo)); + // todo + } return new ServiceResult(false); } diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RateModelRequestLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RateModelRequestLogic.java index 6b03bfb6..02c56b85 100644 --- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RateModelRequestLogic.java +++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/RateModelRequestLogic.java @@ -45,7 +45,7 @@ public class RateModelRequestLogic implements ServiceLogic { return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); } - private String translate(CacheRateModel cacheRateModel) { + public static String translate(CacheRateModel cacheRateModel) { String rateModel = ""; rateModel = rateModel.concat(toHexInt(cacheRateModel.getT1Price()))