完善启动充电逻辑

This commit is contained in:
ZZ 2021-08-09 17:54:14 +08:00
parent 2df7b27a29
commit 6df99469cd
4 changed files with 90 additions and 11 deletions

View File

@ -30,7 +30,7 @@ public class ChargingStationDto {
public Long getRateModelId() {
return rateModelId;
return rateModelId == null ? -1L : rateModelId;
}
public void setRateModelId(Long rateModelId) {

View File

@ -37,7 +37,6 @@ public class ChargingController {
@Autowired
private PowerPileService powerPileService;
@PostMapping("test/pile/charging/order")
public Object test(@Validated @RequestBody StartChargingData startChargingData) {
@ -45,8 +44,8 @@ public class ChargingController {
return r;
}
@PostMapping("charging/start")
public Object startCharging(@Validated @RequestBody StartChargingData startChargingData) {
@PostMapping("charging/balance/refresh")
public Object refreshBalance(@Validated @RequestBody StartChargingData startChargingData) {
String pileNo = startChargingData.getPileNo();
String pkey = "pile:".concat(pileNo);
@ -81,17 +80,75 @@ public class ChargingController {
if (handler != null) {
try {
handler.sendClientBinary(HexUtils.toBytes(rateModelMsg));
r = R.fail("费率模型已下发,请稍后再次尝试启动充电");
r = R.ok("余额更新已下发");
} catch (IOException e) {
log.debug(e.getMessage());
r = R.fail("费率模型下发失败,未更新或下发等待设置中");
r = R.fail("余额更新下发失败:".concat(e.getMessage()));
}
} else {
r = R.fail("费率模型下发失败,充电桩离线");
}
} else {
r = R.fail("充电桩离线,余额更新下发失败");
}
} else {
String svcSrv = (String) 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;
}
@PostMapping("charging/start")
public Object startCharging(@Validated @RequestBody StartChargingData startChargingData) {
String pileNo = startChargingData.getPileNo();
String pkey = "pile:".concat(pileNo);
Map<String, Object> cachePile = REDIS.getCacheMap(pkey);
R<Object> r = R.ok();
if (cachePile == null) {
return R.fail("充电桩未注册");
}
String status = cachePile.get("status").toString();
if (!REGISTERED.equals(status)) {
return R.fail("充电桩离线");
}
if (r.getCode() == 200) {
String svcSrv = (String) cachePile.get("svcSrv");
Long stationId = (Long) cachePile.get("stationId"); //todo
ChargingStationDto cacheStation = REDIS.getCacheObject("station:".concat(stationId.toString()));
Long stationRateModelId = cacheStation.getRateModelId();
Long pileRateModelId = (Long) cachePile.get("rateModelId");
cachePile.put("rateModelId", pileRateModelId);
if (!stationRateModelId.equals(pileRateModelId)) {
if (cachePile.get("status").toString().equals(REGISTERED)) {
CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:".concat(stationRateModelId.toString()));
String rateModel = RateModelRequestLogic.translate(cacheRateModel);
String rateModelMsg = "680E0000000A".concat(pileNo)
.concat(String.format("%04X", stationRateModelId))
.concat(rateModel)
.concat(ServiceResult.HEX_OK);
rateModelMsg = rateModelMsg.concat(CRCCalculator.calcCrc(rateModel));
String response = HttpUtils.post(fmt(svcSrv).concat("/native/pile/".concat(pileNo).concat("/rateModel")), rateModelMsg);
JSONObject responseJson = (JSONObject) JSON.parse(response);
assert responseJson != null;
int code = responseJson.getInteger("code");
if (code != 200) {
r = R.fail(code, responseJson.getString("msg"));
} else {
r = R.fail(responseJson.get("data"), responseJson.getString("msg"));
}
} else {
r = R.fail("充电桩离线,费率模型未更新或下发");
}
} else {
String svcSrv = (String) 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);

View File

@ -2,12 +2,16 @@ package com.xhpc.pp.controller;
import com.xhpc.common.api.dto.ChargingStationDto;
import com.xhpc.common.core.domain.R;
import com.xhpc.pp.utils.security.HexUtils;
import org.quickserver.net.server.ClientHandler;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import static com.xhpc.pp.server.ChargingPileServer.REDIS;
import static com.xhpc.pp.server.ChargingPileServer.getHandler;
@RestController
public class PileController {
@ -62,10 +66,28 @@ public class PileController {
}
@GetMapping("terminal/{terminalSn}/status")
public Object terminalStatus(@PathVariable("terminalSn")String terminalSn) {
public Object terminalStatus(@PathVariable("terminalSn") String terminalSn) {
// todo
return R.ok();
}
@PostMapping("native/pile/{pileNo}/rateModel")
public Object configRateModel(@PathVariable("pileNo") String pileNo, @RequestBody String msg) {
ClientHandler handler = getHandler(pileNo);
R r;
if (handler != null) {
try {
handler.sendClientBinary(HexUtils.toBytes(msg));
r = R.fail("费率模型已下发");
} catch (IOException e) {
r = R.fail("费率模型下发失败:".concat(e.getMessage()));
}
} else {
r = R.fail("费率模型下发失败,充电桩离线");
}
return r;
}
}

View File

@ -39,7 +39,7 @@ public class RegisterLogic implements ServiceLogic {
resultCode = ServiceResult.FAIL;
} else if (!EarlierBeanConf.ifreg(pileNo)) {
log.info("pile already registered ({}) ", pileNo);
hexCode = ServiceResult.HEX_FAIL;
hexCode = ServiceResult.HEX_FAIL; //todo we may need optimize it
resultCode = ServiceResult.FAIL;
} else {
String pkey = "pile:".concat(pileNo);
@ -48,7 +48,6 @@ public class RegisterLogic implements ServiceLogic {
String localIPAndPort = getLocalIPAndPort();
cachePile.put("svcSrv", localIPAndPort);
REDIS.setCacheMap("pile:".concat(pileNo), cachePile);
cachePileGunSvcSrv(pileNo);
int gunNum = Integer.parseInt(req.get("gunNum").toString());
for (int gunN = 1; gunN <= gunNum; gunN++) {
String gunId = String.format("%02d", gunN);
@ -57,6 +56,7 @@ public class RegisterLogic implements ServiceLogic {
cacheGun.put("svcSrv", localIPAndPort);
REDIS.setCacheMap(gunkey, cacheGun);
}
cachePileGunSvcSrv(pileNo);
log.info("pile (re)registered ({}) ", pileNo);
}
String resultStr = "680C00000002".concat(pileNo).concat(hexCode);