修正卡启动余额应答

This commit is contained in:
ZZ 2022-02-25 11:58:31 +08:00
parent fafee173a6
commit 5e92204b66
6 changed files with 25 additions and 13 deletions

View File

@ -214,7 +214,7 @@ public class HexUtils {
// byte[] data1 = toBytes(reverseHex("10270000")); // byte[] data1 = toBytes(reverseHex("10270000"));
// System.out.println(toInteger(data1, 0, 4)); // System.out.println(toInteger(data1, 0, 4));
// System.out.println(reverseHexInt("D80E")); // System.out.println(reverseHexInt("D80E"));
System.out.println(toHexInt(15)); System.out.println(toHexInt(82));
// System.out.println(toHexInt(3800)); // System.out.println(toHexInt(3800));
// System.out.println(toHexInt(100000)); // System.out.println(toHexInt(100000));
// System.out.println(toBits("1000")); // System.out.println(toBits("1000"));

View File

@ -110,7 +110,8 @@ public class ChargingController {
Long stationRateModelId = cacheStation.getRateModelId(); Long stationRateModelId = cacheStation.getRateModelId();
Long pileRateModelId = (Long) cachePile.get("rateModelId"); Long pileRateModelId = (Long) cachePile.get("rateModelId");
if (!stationRateModelId.equals(pileRateModelId)) { if (!stationRateModelId.equals(pileRateModelId)) {
String resultStr = RateModelRequestLogic.translate(pileNo, stationRateModelId, "0058"); String resultStr = RateModelRequestLogic.translate(pileNo, stationRateModelId, "0058",
(String) cachePile.get("version"));
String response = HttpUtils.post(fmt(svcSrv).concat("/native/pile/".concat(pileNo).concat("/rateModel")), String response = HttpUtils.post(fmt(svcSrv).concat("/native/pile/".concat(pileNo).concat("/rateModel")),
resultStr); resultStr);
JSONObject responseJson = (JSONObject) JSON.parse(response); JSONObject responseJson = (JSONObject) JSON.parse(response);

View File

@ -52,7 +52,7 @@ public class PileStartChargingDataLogic implements ServiceLogic {
//todo 桩停用 //todo 桩停用
String accountOrCardNo = pileStartChargingData.getAccountOrCardNo(); String accountOrCardNo = pileStartChargingData.getAccountOrCardNo();
String corpNo = connectorId.substring(0, 6); String corpNo = connectorId.substring(0, 6);
String balance = "0000"; String balance = "00000000";
String cardNo = "0000000000000000"; String cardNo = "0000000000000000";
String orderNo = "00000000000000000000000000000000"; String orderNo = "00000000000000000000000000000000";
if (pileStartChargingData.getStartType().equals("01")) { //刷卡启动 if (pileStartChargingData.getStartType().equals("01")) { //刷卡启动
@ -71,7 +71,10 @@ public class PileStartChargingDataLogic implements ServiceLogic {
HexUtils.reverseHexInt(pileStartChargingData.getRateModelId().toString()).toString()); //todo 费率处理 HexUtils.reverseHexInt(pileStartChargingData.getRateModelId().toString()).toString()); //todo 费率处理
if (r.getCode() == 200) { if (r.getCode() == 200) {
result = ServiceResult.HEX_01; result = ServiceResult.HEX_01;
orderNo = (String) ((Map) r.getData()).get("serialNumber"); Map data = (Map) r.getData();
orderNo = (String) data.get("serialNumber");
String balanceStr = (String) data.get("balance");
balance = HexUtils.toHexInt(Integer.parseInt(balanceStr) * 100);
} }
cardNo = StringUtils.leftPad(iccardInfo.getCardno(), 16, "0"); cardNo = StringUtils.leftPad(iccardInfo.getCardno(), 16, "0");
resultStr = r.getMsg(); resultStr = r.getMsg();

View File

@ -48,8 +48,7 @@ public class RateModelRequestLogic implements ServiceLogic {
json.put("error", "场站没有设置费率"); json.put("error", "场站没有设置费率");
return new ServiceResult(null, ServiceResult.FAIL, json); return new ServiceResult(null, ServiceResult.FAIL, json);
} }
String resultStr = translate(pileNo, stationRateModelId, "000A"); String resultStr = translate(pileNo, stationRateModelId, "000A", (String) cachePile.get("version"));
XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage(); XhpcDeviceMessage deviceMessage = new XhpcDeviceMessage();
deviceMessage.setType(StationDeviceEnum.PILE.getCode()); deviceMessage.setType(StationDeviceEnum.PILE.getCode());
deviceMessage.setSerialNumber(pileNo); deviceMessage.setSerialNumber(pileNo);
@ -61,14 +60,18 @@ public class RateModelRequestLogic implements ServiceLogic {
return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK); return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK);
} }
public static String translate(String pileNo, Long stationRateModelId, String svc) { public static String translate(String pileNo, Long stationRateModelId, String svc, String version) {
CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:".concat(stationRateModelId.toString())); CacheRateModel cacheRateModel = REDIS.getCacheObject("rateModel:".concat(stationRateModelId.toString()));
String rateModel = translate(cacheRateModel); String rateModel = translate(cacheRateModel);
String skey = "pile:".concat(pileNo).concat(".seqhex"); String skey = "pile:".concat(pileNo).concat(".seqhex");
String resultStr = "685E".concat(seqHex(skey)).concat(svc).concat(pileNo) String resultStr;
.concat(String.format("%04X", stationRateModelId)) if ("0A".equals(version))
.concat(rateModel); resultStr = "685E".concat(seqHex(skey)).concat(svc).concat(pileNo).concat(String.format("%04X",
stationRateModelId)).concat(rateModel);
else
resultStr =
"6860".concat(seqHex(skey)).concat(svc).concat(pileNo).concat(HexUtils.toHexInt(stationRateModelId)).concat(rateModel);
resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr)); resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr));
return resultStr; return resultStr;
} }

View File

@ -35,7 +35,7 @@ public class RateModelValidateLogic implements ServiceLogic {
Map<String, Object> req = sp.getParameters(); Map<String, Object> req = sp.getParameters();
String pileNo = (String) req.get("pileNo"); String pileNo = (String) req.get("pileNo");
String rateModelIdStr = (String) req.get("rateModelId"); String rateModelIdStr = req.get("rateModelId").toString();
Map<String, Object> cachePile = REDIS.getCacheMap("pile:".concat(pileNo)); Map<String, Object> cachePile = REDIS.getCacheMap("pile:".concat(pileNo));
Integer gunNum = (Integer) cachePile.get("gunNum"); Integer gunNum = (Integer) cachePile.get("gunNum");
boolean charging = false; boolean charging = false;
@ -50,7 +50,10 @@ public class RateModelValidateLogic implements ServiceLogic {
} }
String resultCode = ServiceResult.OK; String resultCode = ServiceResult.OK;
String hexCode = ServiceResult.HEX_00; String hexCode = ServiceResult.HEX_00;
Long rateModelId = Long.valueOf(Integer.parseInt(rateModelIdStr, 16)); Long rateModelId;
String version = (String) cachePile.get("version");
if ("0A".equals(version)) rateModelId = Long.valueOf(Integer.parseInt(rateModelIdStr, 16));
else rateModelId = Long.valueOf(rateModelIdStr);
Long csRateModelId = rateModelId; Long csRateModelId = rateModelId;
if (!charging) { if (!charging) {
ChargingStationDto cacheStation = REDIS.getCacheObject("station:".concat(cachePile.get("stationId").toString())); ChargingStationDto cacheStation = REDIS.getCacheObject("station:".concat(cachePile.get("stationId").toString()));

View File

@ -30,6 +30,7 @@ public class RateModelTask {
if (rateModelIdStation != null) { if (rateModelIdStation != null) {
Set<String> pks = stationDto.getPiles(); Set<String> pks = stationDto.getPiles();
if (pks != null) for (String pk : pks) { if (pks != null) for (String pk : pks) {
pk = "pile:".concat(pk);
Long rateModelIdPile = REDIS.getCacheMapValue(pk, "rateModelId"); Long rateModelIdPile = REDIS.getCacheMapValue(pk, "rateModelId");
if (!rateModelIdStation.equals(rateModelIdPile)) { if (!rateModelIdStation.equals(rateModelIdPile)) {
String gkPattern = ("gun:").concat(pk).concat("*"); String gkPattern = ("gun:").concat(pk).concat("*");
@ -44,7 +45,8 @@ public class RateModelTask {
if (!charging) { if (!charging) {
ClientHandler handler = getHandler(pk); ClientHandler handler = getHandler(pk);
if (handler != null && handler.isOpen()) { if (handler != null && handler.isOpen()) {
String rsmsg = RateModelRequestLogic.translate(pk, rateModelIdStation, "0058"); String rsmsg = RateModelRequestLogic.translate(pk, rateModelIdStation, "0058",
REDIS.getCacheMapValue(pk, "version"));
try { try {
handler.sendClientBinary(HexUtils.toBytes(rsmsg)); handler.sendClientBinary(HexUtils.toBytes(rsmsg));
log.info("pile[{}] rate model[{}] sent ⚪", pk, rateModelIdStation); log.info("pile[{}] rate model[{}] sent ⚪", pk, rateModelIdStation);