From 794070a57aca48a48ccce83442695a279ce24957 Mon Sep 17 00:00:00 2001 From: wen <1455474577@qq.com> Date: Fri, 22 Oct 2021 14:57:05 +0800 Subject: [PATCH] =?UTF-8?q?query=5Fequip=5Fbusiness=5Fpolicy=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=80=E5=8F=91=E4=B8=AD=20query=5Fstop=5Fcharge?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=83=A8=E5=88=86=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xhpc/evcs/dto/QueryStopChargeRequest.java | 19 +++ .../evcs/dto/QueryStopChargeResponse.java | 31 +++++ .../QueryEquipBusinessPolicyController.java | 45 ++++--- .../evcs/api/QueryStopChargeController.java | 84 +++++++++++++ .../java/com/xhpc/evcs/config/EvcsFilter.java | 6 +- .../NotificationStopChargeResultTask.java | 110 ++++++++++++++++++ 6 files changed, 277 insertions(+), 18 deletions(-) create mode 100644 evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeRequest.java create mode 100644 evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeResponse.java create mode 100644 evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStopChargeController.java create mode 100644 evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeRequest.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeRequest.java new file mode 100644 index 00000000..92cece01 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeRequest.java @@ -0,0 +1,19 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class QueryStopChargeRequest { + + @JsonProperty("startChargeSeq") + String startChargeSeq; + @JsonProperty("connectorId") + String connectorId; + +} diff --git a/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeResponse.java b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeResponse.java new file mode 100644 index 00000000..df7e06d0 --- /dev/null +++ b/evcs-modules/evcs-common/src/main/java/com/xhpc/evcs/dto/QueryStopChargeResponse.java @@ -0,0 +1,31 @@ +package com.xhpc.evcs.dto; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +//定义该对象转换后的json对象的键值对顺序 +@JsonPropertyOrder({ + "StartChargeSeq", + "StartChargeSeqStat", + "SuccStat", + "FailReason", +}) +public class QueryStopChargeResponse { + + @JsonProperty("StartChargeSeq") + String startChargeSeq; + @JsonProperty("StartChargeSeqStat") + int startChargeSeqStat; + @JsonProperty("SuccStat") + int succStat; + @JsonProperty("FailReason") + int failReason; + +} 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 6915b19e..6c464d00 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 @@ -31,8 +31,6 @@ public class QueryEquipBusinessPolicyController { String connectorId = equipBizRequest.getConnectorId(); //获取枪所对应的桩编码 String bySerialNumber = xhpcTerminalRepository.selectBySql(connectorId); - System.out.println(bySerialNumber); - String pileSerialNumber = bySerialNumber; //通过桩编码,进入redis,找到其所用的费率模型id Map cacheMap = REDIS.getCacheMap("pile:" + pileSerialNumber); @@ -41,10 +39,6 @@ public class QueryEquipBusinessPolicyController { CacheRateModel rateModel = REDIS.getCacheObject("rateModel:" + rateModelId); String[] tfPricesSeq = rateModel.getTfPricesSeq(); - //查询所需要的数据 -// EquipBizResponse equipBizResponse = load(tfPricesSeq,equipBizRequest); - - //遍历获取每一个时段 //存储时段 ArrayList modelTypes = new ArrayList<>(); @@ -76,24 +70,41 @@ public class QueryEquipBusinessPolicyController { //放入到个数List中 modelCount.add(lastCount); - //"030000" "240000" + //获取各个类型的时段的时间区间,并将其存放至timeList集合中。 //定义一个初始时间段 String initTime = "000000"; - String initTime1 = "240000"; - ArrayList list = new ArrayList<>(); + //添加临时存储变量 + int temp = -1; + ArrayList timeList = new ArrayList<>(); + //放入必有初始时间 + timeList.add(initTime); //根据出现的时段个数确定他们的时间区间,然后存放至List集合中 for (int i = 0; i < modelCount.size() - 1; i++) { - Integer integer = modelCount.get(i); - int hours = integer / 2; - if (integer >= 10) { - String str = String.valueOf(hours); - initTime1.replace("24", "" + hours); + 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 { - String str = String.valueOf(hours); - initTime1.substring(2); + 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)); + //todo 明天继续 + policyInfos.setServicePrice(0); + policyInfos.setElecPrice(0); } diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStopChargeController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStopChargeController.java new file mode 100644 index 00000000..112f8da3 --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStopChargeController.java @@ -0,0 +1,84 @@ +package com.xhpc.evcs.api; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xhpc.common.api.PowerPileService; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.QueryStopChargeRequest; +import com.xhpc.evcs.dto.QueryStopChargeResponse; +import com.xhpc.evcs.utils.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; + +@Slf4j +@RestController +public class QueryStopChargeController { + + + @Autowired + PowerPileService powerPileService; + + @PostMapping("/v1/query_stop_charge") + public CommonResponse queryStopCharge(@RequestBody QueryStopChargeRequest queryStopChargeRequest) { + //充电订单号 + String chargingOrderSeq = queryStopChargeRequest.getStartChargeSeq(); + //充电设备接口编码(枪编码) + String connectorId = queryStopChargeRequest.getConnectorId(); + //获取桩编码 + String pileNum = connectorId.substring(0, connectorId.length() - 2); + //从桩上面获取版本号 + //获取Redis中的桩信息 + Map pile = REDIS.getCacheMap("pile:" + pileNum); + String vesrionNum = (String) pile.get("vesrion"); + + //给对应的枪发送停止充电指令 + powerPileService.stopCharging(chargingOrderSeq, pileNum, connectorId, "0A"); //ToDo 暂时写死 + + //Todo 获取Redis中的充电状态来判断是否启动成功 + if (true) { + //设置Redis中的充电订单为已结束 + Map order = REDIS.getCacheMap("order:" + chargingOrderSeq); + order.replace("status", "已结束"); + REDIS.setCacheMap("order:" + chargingOrderSeq, order); + + //封装实体类数据 + QueryStopChargeResponse queryStopChargeResponse = new QueryStopChargeResponse(); + //充电订单号 + queryStopChargeResponse.setStartChargeSeq(chargingOrderSeq); + //充电订单状态 + queryStopChargeResponse.setStartChargeSeqStat(4); + //操作结果 + queryStopChargeResponse.setSuccStat(0); + //失败原因 + queryStopChargeResponse.setFailReason(0); + + //转换为json对象 + String data = null; + try { + data = JSONUtil.toJSONString(queryStopChargeResponse); + } catch (JsonProcessingException e) { + e.printStackTrace(); + System.out.println("json转换出问题了"); + } + + CommonResponse commonResponse = new CommonResponse(); + commonResponse.setRet("0"); + commonResponse.setMsg("请求停止充电成功"); + commonResponse.setData(data); + + return commonResponse; + } else { + + return null; + } + + + } + +} 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 95aa61c7..c066f39e 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 @@ -141,7 +141,11 @@ public class EvcsFilter extends OncePerRequestFilter { && now.before(authSecretTokenIn.getTokenExpiry()) && authorization != null && authorization.substring(7).equals(authSecretTokenIn.getToken())) { try { - decryptedData = decrypt(request, authSecretTokenIn, commonRequest, bodyString); + if (authSecretTokenIn.isEncrypt()) { + decryptedData = decrypt(request, authSecretTokenIn, commonRequest, bodyString); + } else { + decryptedData = ((String) commonRequest.getData()).getBytes(StandardCharsets.UTF_8); + } log.debug("in.dec: {}", new String(decryptedData)); } catch (BadPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | IllegalBlockSizeException | NoSuchPaddingException | InvalidKeyException e) { erroMsg = e.getMessage(); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java new file mode 100644 index 00000000..0b697cba --- /dev/null +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStopChargeResultTask.java @@ -0,0 +1,110 @@ +package com.xhpc.evcs.notification; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xhpc.common.data.redis.CacheOrderData; +import com.xhpc.evcs.api.CoreDispatcher; +import com.xhpc.evcs.dto.ChargeResultRequest; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.utils.JSONUtil; +import org.springframework.scheduling.annotation.Scheduled; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; + +public class NotificationStopChargeResultTask extends CoreDispatcher { + + @Scheduled(fixedRate = 1000 * 20) + public void run() throws IOException { + + notifyService(); + + } + + + /** + * 获取充电订单号 + * 获取充电订单状态 + * 获取充电设备接口编码 + * 获取成功标识 + * 获取停止失败原因 + * 推送过去 + *

+ * 出现异常逻辑 + * 如果当充电桩因为异常停止充电时,那么谁告诉我订单是个异常订单? + */ + public void notifyService() { + + //20秒检测一次Redis中的数据状态,并推送 + + //获取Redis中的所有订单状态数据 + List orderStatusList = REDIS.getCacheList("orderStatus:*"); + + //使用for循环遍历所有订单状态数据找到已结束的充电订单 + for (int i = 0; i < orderStatusList.size() - 1; i++) { + + //获取订单数据 + Map orderStatus = (Map) orderStatusList.get(i); + //判断该订单数据是否已经被推送过了,如果已经推送过了,则不在推送 + Boolean isPush = (Boolean) orderStatus.get("isPush"); + if (!isPush) { + //获取内部的充电订单号 + String orderNo = (String) orderStatus.get("orderNo"); + //通过充电订单号,获取指定的订单 + Map order = REDIS.getCacheMap("order:" + orderNo); + //判断订单充电状态 + String status = (String) order.get("status"); + if (status.equals("已结束")) { + //获取指定的订单的数据 + CacheOrderData orderData = (CacheOrderData) order.get("orderData"); + //获取充电设备接口编码 + String pileNo = orderData.getPileNo(); + String gunId = orderData.getGunId(); + String gunSerial = pileNo + gunId; + //设置成功标识 + int succStat = 0; + //设置停止失败原因 + int failReason = 0; + + //使用指定包装类封装数据 + ChargeResultRequest chargeResultRequest = new ChargeResultRequest(); + chargeResultRequest.setStartChargeSeq(null); + chargeResultRequest.setStartChargeSeqStat(status); + chargeResultRequest.setConnectorID(gunSerial); + chargeResultRequest.setSuccStat(succStat); + chargeResultRequest.setFailReason(failReason); + //将其转换为json + String jsonData = null; + try { + jsonData = JSONUtil.toJSONString(chargeResultRequest); + } catch (JsonProcessingException e) { + e.printStackTrace(); + System.out.println("转换成Json失败"); + } + + //将包装类塞入要发送的请求的包装类中 + //泛型为放入json数据的实体类类型 + CommonRequest chargeResultRequestCommonRequest = new CommonRequest<>(); + chargeResultRequestCommonRequest.setData(jsonData); + + //推送数据 + //operatorId第三方的 我们场站运营商的 + ok(chargeResultRequestCommonRequest, "/notification_stop_charge_result", "765367656", null); + + // TODO: 2021/10/21 设置该订单数据已经被推送的标识符 + orderStatus.put("isPush", true); + // 获取对应的orderStatus的Key + //REDIS.setCacheMap("",orderStatus); + } + + // TODO:如果充电状态为停止中: + + } + } + + + } + +}