diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StartChargeRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StartChargeRequest.java
index cf065ca4..3d3796ac 100644
--- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StartChargeRequest.java
+++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/StartChargeRequest.java
@@ -15,7 +15,7 @@ public class StartChargeRequest {
@JsonProperty("StartChargeSeq")
String startChargeSeq;
- @JsonProperty("ConnectorId")
+ @JsonProperty("ConnectorID")
String connectorId;
@JsonProperty("QRCode")
@@ -24,10 +24,16 @@ public class StartChargeRequest {
@JsonProperty("PlateNum")
String plateNum;
+ @JsonProperty("CarPlateNo")
+ String plateNum2;
+
@JsonProperty("ChargingAmt")
Integer chargingAmt;
@JsonProperty("driverId")
String driverId;
+ @JsonProperty("UserId")
+ String userId3rdpty;
+
}
diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java
index 1bb4b113..bbee3ac8 100644
--- a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java
+++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/encryption/Aes128Cbc.java
@@ -63,7 +63,12 @@ public class Aes128Cbc {
NoSuchAlgorithmException, IllegalBlockSizeException, UnsupportedEncodingException, NoSuchPaddingException,
InvalidKeyException {
- System.out.println(encrypt("{\"PageNo\": \"1\", \"PageSize\": 49}", "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"));
+ System.out.println(decryptString("6vjf229/jP0V/lvorkuYeRSKiv" +
+ "+A2CMWqPaFVhjebxCxkYmRObUp9I8EoXkHLoeHYRVZwlG47PQ1N4YIn6B5bvtpP4hmFkgHvNzg7UW5+GnCSKxV9RBXxGW" +
+ "/uWDiPQbgh6gflk4Ia/zvgD9ZLTyAXAm4in/dYovaWcHm08fZ" +
+ "+xfGoHENu1taQO7BcWidJJtmPkVAWECKTHEbcoFcZagKjHIJV5f7V8OrmawYGQqNmA8=", "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"
+ ));
+ //ujNoGsWRo5MyPKYOxeofKwgPEng3xF+yhM8DDjwtwHo=
System.out.println(encrypt("{\"StationIDs\":[\"1\"]}", "8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"));
System.out.println(encrypt("{\"OperatorID\":\"MA5FNJXW9\", \"OperatorSecret\":\"Ut5UFdqDthiJyncU\"}",
"8LpncubmWiPCzY3V", "av6A8QdnRaVRMXu6"));
diff --git a/evcs-modules/evcs-core/pom.xml b/evcs-modules/evcs-core/pom.xml
index c10b40e9..871936d9 100644
--- a/evcs-modules/evcs-core/pom.xml
+++ b/evcs-modules/evcs-core/pom.xml
@@ -14,6 +14,7 @@
com.xhpc
evcs-common
1.0
+ compile
mysql
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipAuthController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipAuthController.java
index e7b74c9a..31f1356d 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipAuthController.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipAuthController.java
@@ -53,6 +53,8 @@ public class QueryEquipAuthController {
String terminalStatus = (String) realTimeTerminalData.get("vehicleGunStatus");
if ("否".equals(terminalStatus)) {
resp.setMsg("gun is not plugging");
+ resp.setRet("1");
+ equipAuthResponse.setSuccStat(1);
equipAuthResponse.setFailReason(1);
} else {
resp.setMsg("success");
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java
index bc8ce2d4..d7ec442c 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryEquipBusinessPolicyController.java
@@ -39,96 +39,97 @@ public class QueryEquipBusinessPolicyController {
commonResponse.setRet("1");
return commonResponse;
}
- Long rateModelId = (Long) cachePile.get("rateModelId");
- CacheRateModel rateModel = REDIS.getCacheObject("rateModel:" + rateModelId);
- String[] tfPricesSeq = rateModel.getTfPricesSeq();
-
- //存储时段
ArrayList modelTypes = new ArrayList<>();
//存储时段个数
ArrayList modelCount = new ArrayList<>();
- //建立对应时段的映射Map集合,存放其对应的价格和服务费
- Map timeMap = new HashMap<>();
- //个数计数器
- int count = 0;
- //最后一个时段的前一个时段的下标索引
- int index = 0;
- //遍历获取每一个时段
- for (int i = 0; i < tfPricesSeq.length - 1; i++) {
- count++;
- //如果当前时段与后面的时段不相同,则表示当前时段已经结束,添加当前时段到list中,并将其坐标存放到另一个集合中。
- if (!tfPricesSeq[i].equals(tfPricesSeq[i + 1])) {
- //将每段时间的索引,赋值
- index = i;
- modelTypes.add(tfPricesSeq[i]);
- modelCount.add(count);
- //如果这段时段结束,则重置计数器
- count = 0;
+ Long rateModelId = (Long) cachePile.get("rateModelId");
+ CacheRateModel rateModel = REDIS.getCacheObject("rateModel:" + rateModelId);
+ PolicyInfos[] policyInfosArr = new PolicyInfos[0];
+ if (rateModel != null) {
+ String[] tfPricesSeq = rateModel.getTfPricesSeq();
+ //存储时段
+ //建立对应时段的映射Map集合,存放其对应的价格和服务费
+ Map timeMap = new HashMap<>();
+ //个数计数器
+ int count = 0;
+ //最后一个时段的前一个时段的下标索引
+ int index = 0;
+ //遍历获取每一个时段
+ for (int i = 0; i < tfPricesSeq.length - 1; i++) {
+ count++;
+ //如果当前时段与后面的时段不相同,则表示当前时段已经结束,添加当前时段到list中,并将其坐标存放到另一个集合中。
+ if (!tfPricesSeq[i].equals(tfPricesSeq[i + 1])) {
+ //将每段时间的索引,赋值
+ index = i;
+ modelTypes.add(tfPricesSeq[i]);
+ modelCount.add(count);
+ //如果这段时段结束,则重置计数器
+ count = 0;
+ }
}
- }
- //获取最后一个时段的费率值
- String lastModelType = tfPricesSeq[tfPricesSeq.length - 1];
- //放入到类型list中
- modelTypes.add(lastModelType);
- //获取最后一个时段的费率的个数
- int lastCount = (tfPricesSeq.length - 1) - index;
- //放入到个数List中
- modelCount.add(lastCount);
+ //获取最后一个时段的费率值
+ String lastModelType = tfPricesSeq[tfPricesSeq.length - 1];
+ //放入到类型list中
+ modelTypes.add(lastModelType);
+ //获取最后一个时段的费率的个数
+ int lastCount = (tfPricesSeq.length - 1) - index;
+ //放入到个数List中
+ modelCount.add(lastCount);
- //获取各个类型的时段的时间区间,并将其存放至timeList集合中。
- //定义一个初始时间段
- String initTime = "000000";
- //添加临时存储变量
- int temp = -1;
- ArrayList timeList = new ArrayList<>();
- //放入必有初始时间
- timeList.add(initTime);
- //根据出现的时段个数确定他们的时间区间,然后存放至List集合中
- for (int i = 0; i < modelCount.size() - 1; i++) {
- if (temp != -1) {
- Integer integer = modelCount.get(i);
- int hours = integer / 2;
- temp = temp + hours;
- String hoursStr = String.format("%02d", temp);
- String finalTime = hoursStr + "0000";
- timeList.add(finalTime);
- } else {
- Integer integer = modelCount.get(i);
- int hours = integer / 2;
- //记录中间时间
- temp = hours;
- String hoursStr = String.format("%02d", temp);
- String finalTime = hoursStr + "0000";
- timeList.add(finalTime);
+ //获取各个类型的时段的时间区间,并将其存放至timeList集合中。
+ //定义一个初始时间段
+ String initTime = "000000";
+ //添加临时存储变量
+ int temp = -1;
+ ArrayList timeList = new ArrayList<>();
+ //放入必有初始时间
+ timeList.add(initTime);
+ //根据出现的时段个数确定他们的时间区间,然后存放至List集合中
+ for (int i = 0; i < modelCount.size() - 1; i++) {
+ if (temp != -1) {
+ Integer integer = modelCount.get(i);
+ int hours = integer / 2;
+ temp = temp + hours;
+ String hoursStr = String.format("%02d", temp);
+ String finalTime = hoursStr + "0000";
+ timeList.add(finalTime);
+ } else {
+ Integer integer = modelCount.get(i);
+ int hours = integer / 2;
+ //记录中间时间
+ temp = hours;
+ String hoursStr = String.format("%02d", temp);
+ String finalTime = hoursStr + "0000";
+ timeList.add(finalTime);
+ }
}
- }
-
- PolicyInfos[] policyInfosArr = new PolicyInfos[timeList.size()];
- for (int i = 0; i <= timeList.size() - 1; i++) {
- PolicyInfos policyInfos = new PolicyInfos();
- policyInfos.setStartTime(timeList.get(i));
- String modelType = modelTypes.get(i);
- switch (modelType) {
- case "00":
- policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT1SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT1Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- break;
- case "01":
- policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT2SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT2Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- break;
- case "02":
- policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT3SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT3Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- break;
- case "03":
- policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT4SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT4Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
- break;
- default:
- break;
+ policyInfosArr = new PolicyInfos[timeList.size()];
+ for (int i = 0; i <= timeList.size() - 1; i++) {
+ PolicyInfos policyInfos = new PolicyInfos();
+ policyInfos.setStartTime(timeList.get(i));
+ String modelType = modelTypes.get(i);
+ switch (modelType) {
+ case "00":
+ policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT1SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT1Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ break;
+ case "01":
+ policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT2SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT2Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ break;
+ case "02":
+ policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT3SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT3Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ break;
+ case "03":
+ policyInfos.setServicePrice(BigDecimal.valueOf((long) rateModel.getT4SvcPrice()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ policyInfos.setElecPrice(BigDecimal.valueOf((long) rateModel.getT4Price()).divide(BigDecimal.valueOf(100000L)).setScale(4).doubleValue());
+ break;
+ default:
+ break;
+ }
+ policyInfosArr[i] = policyInfos;
}
- policyInfosArr[i] = policyInfos;
}
//封装数据
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStartChargeController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStartChargeController.java
index 478b5595..0d351622 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStartChargeController.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStartChargeController.java
@@ -51,13 +51,16 @@ public class QueryStartChargeController {
resp.setMsg("This 3rd has no token");
} else {
// invoke a order making interface(finished);
- R res = pileOrderService.pileStartUpBy3rd(startChargeSeq, startChargeRequest.getDriverId(), startChargeRequest.getChargingAmt(), startChargeRequest.getPlateNum(), 0, connectorID);
+ String plateNum = startChargeRequest.getPlateNum();
+ plateNum = plateNum == null ? startChargeRequest.getPlateNum2() : plateNum;
+ R res = pileOrderService.pileStartUpBy3rd(startChargeSeq, startChargeRequest.getDriverId(),
+ startChargeRequest.getChargingAmt(), plateNum, 0, connectorID);
startChargeResponse.setStartChargeSeq(startChargeSeq);
startChargeResponse.setConnectorID(connectorID);
if (res.getCode() != 200) {
startChargeResponse.setSuccStat(1);
startChargeResponse.setFailReason(0);
- startChargeResponse.setStartChargeSeqStat(5);
+ startChargeResponse.setStartChargeSeqStat(4);
} else {
Map etOrderData = (Map) res.getData();
EtOrderMapping etOrderMapping = new EtOrderMapping();
@@ -81,6 +84,7 @@ public class QueryStartChargeController {
pushOrder.put("chargeOrderInfoNotificationStat", 0);
REDIS.setCacheMap("pushOrder:".concat(orderNo), pushOrder);
}
+ resp.setMsg(res.getMsg());
resp.setRet(String.valueOf(res.getCode()));
}
resp.setData(JSONUtil.toJSONString(startChargeResponse));
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java
index b13f079d..23e85818 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java
@@ -46,9 +46,9 @@ public class QueryStationStatusController {
if (null != chargingStationDto) {
pileIds = chargingStationDto.getPiles();
}
+ boolean existsGun = false;
+ List connectorStatusInfos = new ArrayList<>();
for (String pileId : pileIds) {
- boolean existsGun = false;
- List connectorStatusInfos = new ArrayList<>();
for (String value : gunsIds) {
if (pileId.equals(value.substring(0, 14))) {
existsGun = true;
@@ -63,12 +63,12 @@ public class QueryStationStatusController {
connectorStatusInfos.add(connectorStatusInfo);
}
}
- if (existsGun) {
- StationStatusInfo stationStatusInfo = new StationStatusInfo();
- stationStatusInfo.setStationID(stationID);
- stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
- stationStatusInfos.add(stationStatusInfo);
- }
+ }
+ if (existsGun) {
+ StationStatusInfo stationStatusInfo = new StationStatusInfo();
+ stationStatusInfo.setStationID(stationID);
+ stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos);
+ stationStatusInfos.add(stationStatusInfo);
}
}
@@ -79,7 +79,7 @@ public class QueryStationStatusController {
}
CommonResponse resp = new CommonResponse();
resp.setRet("0");
- resp.setMsg("");
+ resp.setMsg("Query station status success");
resp.setData(JSONUtil.toJSONString(stationStatusInfoWrappers));
return resp;
}
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java
index 4d8d9992..5ebd15d1 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryTokenController.java
@@ -1,15 +1,14 @@
package com.xhpc.evcs.api;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.xhpc.evcs.config.EvcsFilter;
import com.xhpc.evcs.domain.AuthSecretToken;
+import com.xhpc.evcs.domain.XhpcInternetUser;
import com.xhpc.evcs.dto.CommonResponse;
import com.xhpc.evcs.dto.TokenRequest;
import com.xhpc.evcs.dto.TokenResponse;
import com.xhpc.evcs.jpa.AuthSecretTokenRepository;
+import com.xhpc.evcs.jpa.XhpcInternetUserRepository;
import com.xhpc.evcs.utils.JSONUtil;
import lombok.extern.slf4j.Slf4j;
-import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -17,7 +16,10 @@ import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
@@ -28,6 +30,8 @@ public class QueryTokenController {
@Autowired
private AuthSecretTokenRepository authSecretTokenRepository;
+ @Autowired
+ private XhpcInternetUserRepository xhpcInternetUserRepository;
@PostMapping("/v1/query_token")
public CommonResponse queryToken(@RequestHeader(value = "enc.out", defaultValue = "true") String encout,
@@ -37,55 +41,66 @@ public class QueryTokenController {
CommonResponse resp = new CommonResponse();
resp.setRet("0");
resp.setMsg("");
+ String decodedData = (String) tokenRequest.getAdditionalProperties().get("Data");
+ try {
+ tokenRequest = JSONUtil.readParams(decodedData, TokenRequest.class);
+ } catch (Exception e) {
+ log.error("invalid Data string: {}", decodedData);
+ }
String operatorID = tokenRequest.getOperatorId();
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setOperatorId("MA6DFCTD5");
tokenResponse.setSuccStat(0);
tokenResponse.setFailReason(0);
String data = null;
- AuthSecretToken authSecretTokenIn =
- authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenTypeAndOperatorSecret(
- operatorID, AuthSecretToken.SECRET_TOKEN_TYPE_IN, tokenRequest.getOperatorSecret()).orElse(null);
- if (authSecretTokenIn == null) {
- resp.setRet("4003");
- resp.setMsg("Invalid OperatorID/Secret");
- tokenResponse.setSuccStat(1);
- tokenResponse.setFailReason(2);
- resp.setData(data);
- } else {
- String token;
- if (authSecretTokenIn.getTokenExpiry() != null && !authSecretTokenIn.getTokenExpiry().before(Calendar.getInstance().getTime())) {
- token = authSecretTokenIn.getToken();
- } else {
- token = UUID.randomUUID().toString().replaceAll("-", "");
- authSecretTokenIn.setToken(token);
- authSecretTokenIn.setTokenExpiry(getTokenExpiry());
- authSecretTokenRepository.save(authSecretTokenIn);
+ XhpcInternetUser xhpcInternetUser =
+ xhpcInternetUserRepository.findByOperatorIdEvcsAndCooperationStartTimeBeforeAndCooperationEndTimeAfter(tokenRequest.getOperatorId(), Instant.now(), Instant.now());
+ if (xhpcInternetUser != null) {
+ String operatorSecret = tokenRequest.getOperatorSecret();
+ if (operatorSecret == null) {
+ operatorSecret = tokenRequest.getOperatorSecret();
}
- tokenResponse.setAccessToken(token);
- tokenResponse.setTokenAvailableTime(7200);
- tokenResponse.setSuccStat(0);
- tokenResponse.setFailReason(0);
- resp.setMsg("Query token success");
- resp.setData(JSONUtil.toJSONString(tokenResponse));
- byte[] buf = JSONUtil.toJSONString(resp).getBytes(StandardCharsets.UTF_8);
- log.debug("out.plain: {}", new String(buf, StandardCharsets.UTF_8));
- if (!encout.equalsIgnoreCase("false") || !authSecretTokenIn.isEncrypt()) {
- final JsonNode encrypt = EvcsFilter.encryptRespOut(authSecretTokenIn.getDataSecret(),
- authSecretTokenIn.getDataSecretIV(), authSecretTokenIn.getSigSecret(), buf);
- resp.setData(encrypt.get("Data"));
- resp.setSig(encrypt.get("Sig").asText());
- log.debug("out.enc: {}", resp);
+ AuthSecretToken authSecretTokenIn =
+ authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenTypeAndOperatorSecret(
+ operatorID, AuthSecretToken.SECRET_TOKEN_TYPE_IN, operatorSecret).orElse(null);
+ if (authSecretTokenIn == null) {
+ resp.setRet("4003");
+ resp.setMsg("Invalid OperatorID/Secret");
+ tokenResponse.setSuccStat(1);
+ tokenResponse.setFailReason(2);
+ resp.setData(data);
+ } else {
+ String token;
+ if (authSecretTokenIn.getTokenExpiry() != null && !authSecretTokenIn.getTokenExpiry().before(Calendar.getInstance().getTime())) {
+ token = authSecretTokenIn.getToken();
+ } else {
+ token = UUID.randomUUID().toString().replaceAll("-", "");
+ authSecretTokenIn.setToken(token);
+ authSecretTokenIn.setTokenExpiry(getTokenExpiry(xhpcInternetUser));
+ authSecretTokenRepository.save(authSecretTokenIn);
+ }
+ tokenResponse.setAccessToken(token);
+ Instant te = authSecretTokenIn.getTokenExpiry().toInstant();
+ tokenResponse.setTokenAvailableTime(Long.valueOf(ChronoUnit.SECONDS.between(Instant.now(), te)).intValue());
+ tokenResponse.setSuccStat(0);
+ tokenResponse.setFailReason(0);
+ resp.setMsg("Query token success");
+ resp.setData(JSONUtil.toJSONString(tokenResponse));
}
}
return resp;
}
- private Date getTokenExpiry() {
+ private Date getTokenExpiry(XhpcInternetUser xhpcInternetUser) {
- DateTime dt = new DateTime();
- dt = dt.plusSeconds(7200);
- return dt.toDate();
+ Instant cooperationEndTime = xhpcInternetUser.getCooperationEndTime();
+ LocalDateTime now = LocalDateTime.now();
+ Instant tokenEndtime = now.plusSeconds(7200).toInstant(ZoneId.systemDefault().getRules().getOffset(now));
+ if (tokenEndtime.isAfter(cooperationEndTime)) {
+ return Date.from(cooperationEndTime);
+ } else {
+ return Date.from(tokenEndtime);
+ }
}
}
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java
index bf3d2d27..5510631c 100644
--- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/config/EvcsFilter.java
@@ -79,7 +79,10 @@ public class EvcsFilter extends OncePerRequestFilter {
AuthSecretToken authSecretTokenIn;
Date now = Calendar.getInstance().getTime();
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
- if (authorization != null && authorization.startsWith("Bearer ")) {
+ if (servletPath.endsWith("query_token")) {
+ handleQueryToken(request, response, chain, requestWrapper, bodyString, commonRequest, operatorId,
+ responseWrapper);
+ } else if (authorization != null && authorization.startsWith("Bearer ")) {
String token = authorization.substring(7);
authSecretTokenIn =
authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenTypeAndTokenExpiryGreaterThan(
@@ -94,41 +97,6 @@ public class EvcsFilter extends OncePerRequestFilter {
chain.doFilter(requestWrapper, responseWrapper);
return;
}
- } else if (authorization == null) { //todo giv't better arrangement
- if (servletPath.endsWith("/query_token")) {
- authSecretTokenIn = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId,
- AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null);
- if (authSecretTokenIn == null) {
- CommonResponse resp = new CommonResponse();
- resp.setRet("4003");
- resp.setMsg("Invalid OperatorID");
- String data = JSONUtil.toJSONString(resp);
- response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
-
-// response.setStatus(403);
- responseWrapper = new ContentCachingResponseWrapper(response);
- chain.doFilter(requestWrapper, responseWrapper);
- return;
- } else {
- final byte[] decrypt;
- try {
- decrypt = decrypt(request, authSecretTokenIn, commonRequest, bodyString);
- } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) {
- e.printStackTrace();
- CommonResponse resp = new CommonResponse();
- resp.setRet("4003");
- resp.setMsg("Invalid Encryption");
- String data = JSONUtil.toJSONString(resp);
- response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
-
- chain.doFilter(requestWrapper, responseWrapper);
- return;
- }
- ((HttpServletRequestRepeatReadWrapper) requestWrapper).setBody(decrypt);
- chain.doFilter(requestWrapper, response);
- return;
- }
- }
}
//decrypt request
byte[] decryptedReq = null;
@@ -136,22 +104,26 @@ public class EvcsFilter extends OncePerRequestFilter {
CommonResponse resp = new CommonResponse();
authSecretTokenIn = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId,
AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null);
- if (authSecretTokenIn != null
- && now.before(authSecretTokenIn.getTokenExpiry())
- && authorization != null && authorization.substring(7).equals(authSecretTokenIn.getToken())) {
- try {
- if (authSecretTokenIn.isEncrypt() && !"false".equals(encin)) {
- decryptedReq = decrypt(request, authSecretTokenIn, commonRequest, bodyString);
- } else {
- decryptedReq = commonRequest.getData().getBytes(StandardCharsets.UTF_8);
+ if (authSecretTokenIn != null) {
+ if (servletPath.endsWith("query_token") ||
+ (now.before(authSecretTokenIn.getTokenExpiry())
+ && authorization != null && authorization.substring(7).equals(authSecretTokenIn.getToken()))) {
+ try {
+ if (authSecretTokenIn.isEncrypt() && !"false".equals(encin)) {
+ decryptedReq = decrypt(request, authSecretTokenIn, commonRequest, bodyString);
+ } else {
+ String data = commonRequest.getData();
+ if (data == null) data = bodyString;
+ decryptedReq = data.getBytes(StandardCharsets.UTF_8);
+ }
+ commonRequest.setData(new String(decryptedReq));
+ log.debug("in.dec: {}", commonRequest);
+ } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) {
+ erroMsg = e.getMessage();
}
- commonRequest.setData(new String(decryptedReq));
- log.debug("in.dec: {}", commonRequest);
- } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) {
- erroMsg = e.getMessage();
+ } else {
+ erroMsg = "Authorization error, check OperatorID or token expiry";
}
- } else {
- erroMsg = "Authorization error, check OperatorID or token expiry";
}
if (decryptedReq != null && decryptedReq.length > 0) {
requestWrapper = new HttpServletRequestWritableWrapper(request,
@@ -193,11 +165,47 @@ public class EvcsFilter extends OncePerRequestFilter {
resp.setMsg("Encryption error");
String data = JSONUtil.toJSONString(resp);
response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
- chain.doFilter(requestWrapper, responseWrapper);
+// chain.doFilter(requestWrapper, responseWrapper);
}
}
}
+ private void handleQueryToken(HttpServletRequest request,
+ HttpServletResponse response, FilterChain chain,
+ ServletRequest requestWrapper, String bodyString, CommonRequest commonRequest,
+ String operatorId,
+ ContentCachingResponseWrapper responseWrapper) throws IOException, ServletException {
+
+ AuthSecretToken authSecretTokenIn = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId,
+ AuthSecretToken.SECRET_TOKEN_TYPE_IN).orElse(null);
+ if (authSecretTokenIn == null) {
+ CommonResponse resp = new CommonResponse();
+ resp.setRet("4003");
+ resp.setMsg("Invalid OperatorID");
+ String data = JSONUtil.toJSONString(resp);
+ response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
+// response.setStatus(403);
+ responseWrapper = new ContentCachingResponseWrapper(response);
+// chain.doFilter(requestWrapper, responseWrapper);
+ } else {
+ final byte[] decrypt;
+ try {
+ decrypt = decrypt(request, authSecretTokenIn, commonRequest, bodyString);
+ } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) {
+ e.printStackTrace();
+ CommonResponse resp = new CommonResponse();
+ resp.setRet("4003");
+ resp.setMsg("Invalid Encryption");
+ String data = JSONUtil.toJSONString(resp);
+ response.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
+// chain.doFilter(requestWrapper, responseWrapper);
+ return;
+ }
+ ((HttpServletRequestRepeatReadWrapper) requestWrapper).setBody(decrypt);
+// chain.doFilter(requestWrapper, response);
+ }
+ }
+
private byte[] internalError() {
CommonResponse resp = new CommonResponse();
@@ -295,11 +303,13 @@ public class EvcsFilter extends OncePerRequestFilter {
JsonNode timestampNode = rootNode.path("TimeStamp");
JsonNode seqNode = rootNode.path("Seq");
if (!dataNode.isNull()) {
- String computedSig = HMAC.hmacDigest(
- operatorIDNode.asText().concat(dataNode.asText()).concat(timestampNode.asText()).concat(seqNode.asText()),
- authSecretToken.getSigSecret());
- if ((encin == null || !"false".equals(encin)) && !computedSig.equals(sigNode.asText())) {
- throw new InvalidAlgorithmParameterException("Illegal Sig, computed: ".concat(computedSig));
+ if (!dataNode.asText().startsWith("{")) {
+ String computedSig = HMAC.hmacDigest(
+ operatorIDNode.asText().concat(dataNode.asText()).concat(timestampNode.asText()).concat(seqNode.asText()),
+ authSecretToken.getSigSecret());
+ if ((encin == null || !"false".equals(encin)) && !computedSig.equals(sigNode.asText())) {
+ throw new InvalidAlgorithmParameterException("Illegal Sig, computed: ".concat(computedSig));
+ }
}
String rawData = dataNode.asText();
String decryptedData = rawData;
diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcInternetUserRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcInternetUserRepository.java
new file mode 100644
index 00000000..c1469354
--- /dev/null
+++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcInternetUserRepository.java
@@ -0,0 +1,19 @@
+package com.xhpc.evcs.jpa;
+
+import com.xhpc.evcs.domain.XhpcInternetUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.time.Instant;
+
+@Repository
+public interface XhpcInternetUserRepository extends JpaRepository,
+ QueryByExampleExecutor, JpaSpecificationExecutor {
+
+ XhpcInternetUser findByOperatorIdEvcsAndCooperationStartTimeBeforeAndCooperationEndTimeAfter(String operatorId3rdpty,
+ Instant now, Instant now2);
+
+
+}
diff --git a/evcs-modules/pom.xml b/evcs-modules/pom.xml
index 05ac9269..e4654c73 100644
--- a/evcs-modules/pom.xml
+++ b/evcs-modules/pom.xml
@@ -14,8 +14,8 @@
1.0
- evcs-core
evcs-common
+ evcs-core
diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/PileOrderService.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/PileOrderService.java
index 0adb8c16..56f9a2c6 100644
--- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/PileOrderService.java
+++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/PileOrderService.java
@@ -67,5 +67,10 @@ public interface PileOrderService {
@GetMapping(value = "/chargeOrder/pileStartUpBy3rd")
- R pileStartUpBy3rd(@RequestParam(value = "internetSerialNumber") String internetSerialNumber, @RequestParam(value = "driverId") String driverId, @RequestParam(value = "chargingAmt") Integer chargingAmt, @RequestParam(value = "plateNum", required = false) String plateNum, @RequestParam(value = "status") Integer status, @RequestParam(value = "connectorId") String connectorId);
+ R pileStartUpBy3rd(@RequestParam(value = "internetSerialNumber") String internetSerialNumber,
+ @RequestParam(value = "driverId", required = false) String driverId,
+ @RequestParam(value = "chargingAmt", required = false, defaultValue = "500") Integer chargingAmt,
+ @RequestParam(value = "plateNum", required = false) String plateNum,
+ @RequestParam(value = "status") Integer status,
+ @RequestParam(value = "connectorId") String connectorId);
}
diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/PileOrderFallbackFactory.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/PileOrderFallbackFactory.java
index b9c99658..3f76c1d5 100644
--- a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/PileOrderFallbackFactory.java
+++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/PileOrderFallbackFactory.java
@@ -54,7 +54,7 @@ public class PileOrderFallbackFactory implements FallbackFactory cacheOrder = REDIS.getCacheMap(orderkey);
- List realtimeDataList = (List) cacheOrder.get("realtimeDataList");
if (!orderNo.equals("00000000000000000000000000000000") && statusInt == 3) {
+ List realtimeDataList = (List) cacheOrder.get("realtimeDataList");
cacheGun.put("idleCnt", 0);
if (realtimeDataList == null) {
realtimeDataList = new ArrayList<>();
@@ -177,14 +174,22 @@ public class RealtimeDataLogic implements ServiceLogic {
Integer idleCnt = (Integer) cacheGun.get("idleCnt");
idleCnt = idleCnt == null ? 0 : idleCnt;
idleCnt++;
- if (idleCnt > 3 && orderkey != null) {
- Map problematicOrder = REDIS.getCacheMap(orderkey);
- Object orderData = problematicOrder.get("orderData");
- String status = (String) problematicOrder.get("status");
- if (!isInteger(status) && !status.equals("充电中") && orderData == null) {
- pileOrderService.abnormalOrder(orderNo);
- cacheGun.put("orderkey", null);
- idleCnt = 0;
+ if (idleCnt > 3) {
+ if (orderkey != null) {
+ Map problematicOrder = REDIS.getCacheMap(orderkey);
+ Object orderData = problematicOrder.get("orderData");
+ String status = (String) problematicOrder.get("status");
+ if (!isInteger(status) && !status.equals("充电中") && orderData == null) {
+ pileOrderService.abnormalOrder(orderNo);
+ log.error("abnormal order[{}]", orderNo);
+ cacheGun.put("orderkey", null);
+ idleCnt = 0;
+ }
+ } else {
+ Collection cacheOrderKyes = REDIS.keys("order:".concat(terminalId).concat("*"));
+ for (String cacheOrderKye : cacheOrderKyes) {
+
+ }
}
}
cacheGun.put("idleCnt", idleCnt);