todo:第三方对接
This commit is contained in:
parent
30ea3829f4
commit
912745b0bf
@ -14,7 +14,7 @@ public class ChargeResultRequest {
|
||||
@JsonProperty("StartChargeSeq")
|
||||
String startChargeSeq;
|
||||
@JsonProperty("StartChargeSeqStat")
|
||||
String startChargeSeqStat;
|
||||
Integer startChargeSeqStat;
|
||||
@JsonProperty("ConnectorID")
|
||||
String connectorID;
|
||||
@JsonProperty("SuccStat")
|
||||
|
||||
@ -126,6 +126,8 @@ public class QueryEquipBusinessPolicyController {
|
||||
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;
|
||||
}
|
||||
|
||||
@ -3,11 +3,13 @@ package com.xhpc.evcs.api;
|
||||
import com.xhpc.common.api.PileOrderService;
|
||||
import com.xhpc.common.core.domain.R;
|
||||
import com.xhpc.evcs.domain.AuthSecretToken;
|
||||
import com.xhpc.evcs.domain.EtOrderMapping;
|
||||
import com.xhpc.evcs.dto.CommonRequest;
|
||||
import com.xhpc.evcs.dto.CommonResponse;
|
||||
import com.xhpc.evcs.dto.StartChargeRequest;
|
||||
import com.xhpc.evcs.dto.StartChargeResponse;
|
||||
import com.xhpc.evcs.jpa.AuthSecretTokenRepository;
|
||||
import com.xhpc.evcs.jpa.OrderMappingRepository;
|
||||
import com.xhpc.evcs.utils.JSONUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -26,6 +28,8 @@ public class QueryStartChargeController {
|
||||
@Autowired
|
||||
AuthSecretTokenRepository authSecretTokenRepository;
|
||||
@Autowired
|
||||
private OrderMappingRepository etOrderMappingRepo;
|
||||
@Autowired
|
||||
private PileOrderService pileOrderService;
|
||||
|
||||
@PostMapping(value = "/v1/query_start_charge")
|
||||
@ -55,15 +59,20 @@ public class QueryStartChargeController {
|
||||
startChargeResponse.setFailReason(0);
|
||||
startChargeResponse.setStartChargeSeqStat(5);
|
||||
} else {
|
||||
EtOrderMapping etOrderMapping = new EtOrderMapping();
|
||||
etOrderMapping.setEvcsOrderNo(startChargeSeq);
|
||||
// etOrderMapping.setXhOrderNo(xhOrderNo);//todo 鸿运
|
||||
etOrderMappingRepo.save(etOrderMapping);
|
||||
startChargeResponse.setStartChargeSeqStat(2);
|
||||
startChargeResponse.setSuccStat(0);
|
||||
startChargeResponse.setFailReason(0);
|
||||
//insert a gunStatusData to redis
|
||||
Map<String, Object> gunStatus = new HashMap<>();
|
||||
Map<String, Object> pushOrder = new HashMap<>();
|
||||
//0 means charging.
|
||||
gunStatus.put("status", 0);
|
||||
gunStatus.put("orderNo", (String) res.getData());
|
||||
REDIS.setCacheMap("gunStatus:", gunStatus);
|
||||
pushOrder.put("status", 0);
|
||||
String orderNo = (String) res.getData();
|
||||
pushOrder.put("internetSerialNumber", startChargeRequest.getStartChargeSeq());
|
||||
REDIS.setCacheMap("pushOrder:".concat(orderNo), pushOrder);
|
||||
}
|
||||
resp.setRet(String.valueOf(res.getCode()));
|
||||
}
|
||||
|
||||
@ -2,9 +2,13 @@ package com.xhpc.evcs.api;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.xhpc.common.api.PowerPileService;
|
||||
import com.xhpc.common.core.domain.R;
|
||||
import com.xhpc.evcs.domain.EtOrderMapping;
|
||||
import com.xhpc.evcs.dto.CommonRequest;
|
||||
import com.xhpc.evcs.dto.CommonResponse;
|
||||
import com.xhpc.evcs.dto.QueryStopChargeRequest;
|
||||
import com.xhpc.evcs.dto.QueryStopChargeResponse;
|
||||
import com.xhpc.evcs.jpa.OrderMappingRepository;
|
||||
import com.xhpc.evcs.utils.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -12,6 +16,8 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
||||
@ -23,10 +29,15 @@ public class QueryStopChargeController {
|
||||
|
||||
@Autowired
|
||||
PowerPileService powerPileService;
|
||||
//三方订单与redis内部订单映射表
|
||||
@Autowired
|
||||
private OrderMappingRepository etOrderMappingRepo;
|
||||
|
||||
@PostMapping("/v1/query_stop_charge")
|
||||
public CommonResponse queryStopCharge(@RequestBody QueryStopChargeRequest queryStopChargeRequest) {
|
||||
//充电订单号
|
||||
public CommonResponse queryStopCharge(@RequestBody CommonRequest<QueryStopChargeRequest> commonRequest) throws IOException {
|
||||
|
||||
QueryStopChargeRequest queryStopChargeRequest = JSONUtil.readParams(commonRequest.getData(), QueryStopChargeRequest.class);
|
||||
//充电订单号 //todo 充电订单号是一个27位的数字
|
||||
String chargingOrderSeq = queryStopChargeRequest.getStartChargeSeq();
|
||||
//充电设备接口编码(枪编码)
|
||||
String connectorId = queryStopChargeRequest.getConnectorId();
|
||||
@ -38,9 +49,16 @@ public class QueryStopChargeController {
|
||||
String vesrionNum = (String) pile.get("vesrion");
|
||||
|
||||
//给对应的枪发送停止充电指令
|
||||
powerPileService.stopCharging(chargingOrderSeq, pileNum, connectorId, "0A"); //ToDo 暂时写死
|
||||
|
||||
R r = powerPileService.stopCharging(chargingOrderSeq, pileNum, connectorId, "0A");//ToDo 暂时写死
|
||||
//todo 判断停止指令发送是否成功
|
||||
EtOrderMapping etOrderMapping = etOrderMappingRepo.findByEvcsOrderNo(chargingOrderSeq).orElse(null);
|
||||
if (etOrderMapping != null) {
|
||||
Map<String, Object> pushOrder = new HashMap<>();
|
||||
pushOrder.put("stopCommandSent", false);
|
||||
REDIS.setCacheMap("pushOrder:".concat(etOrderMapping.getXhOrderNo()), pushOrder);
|
||||
}
|
||||
//Todo 获取Redis中的充电状态来判断是否启动成功
|
||||
//获取Redis中的充电订单
|
||||
if (true) {
|
||||
//设置Redis中的充电订单为已结束
|
||||
Map<String, Object> order = REDIS.getCacheMap("order:" + chargingOrderSeq);
|
||||
|
||||
@ -6,9 +6,13 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.repository.query.QueryByExampleExecutor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Repository
|
||||
public interface OrderMappingRepository extends JpaRepository<EtOrderMapping, String>,
|
||||
QueryByExampleExecutor<EtOrderMapping>, JpaSpecificationExecutor<EtOrderMapping> {
|
||||
|
||||
|
||||
Optional<EtOrderMapping> findByEvcsOrderNo(String chargingOrderSeq);
|
||||
|
||||
}
|
||||
|
||||
@ -9,14 +9,17 @@ import com.xhpc.evcs.jpa.AuthSecretTokenRepository;
|
||||
import com.xhpc.evcs.utils.JSONUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS;
|
||||
import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT;
|
||||
|
||||
@Component
|
||||
public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
|
||||
@Autowired
|
||||
@ -25,11 +28,61 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
@Scheduled(fixedRate = 1000 * 20)
|
||||
public void run() throws IOException {
|
||||
|
||||
notifyService();
|
||||
|
||||
notifyService3();
|
||||
}
|
||||
|
||||
|
||||
public void notifyService3() throws JsonProcessingException {
|
||||
|
||||
//获取Redis中的所有订单状态数据
|
||||
Collection<String> pushOrders = REDIS.keys("pushOrder:*");
|
||||
|
||||
for (String pushOrderKey : pushOrders) {
|
||||
Map<String, Object> pushOrder = REDIS.getCacheMap(pushOrderKey);
|
||||
Boolean stopCommandSent = (Boolean) pushOrder.get("stopCommandSent");
|
||||
if (stopCommandSent == null) {
|
||||
continue;
|
||||
}
|
||||
String orderNo = pushOrderKey.substring(10);
|
||||
Map<String, Object> order = REDIS.getCacheMap("order:" + orderNo);
|
||||
String operatorId3rdpty = (String) order.get("operatorId3rdpty"); //todo zz
|
||||
if (operatorId3rdpty == null) {
|
||||
continue;
|
||||
}
|
||||
AuthSecretToken authSecretTokenOut = authSecretTokenRepository.findByOperatorId3irdptyAndSecretTokenType(operatorId3rdpty, SECRET_TOKEN_TYPE_OUT).orElse(null);
|
||||
if (authSecretTokenOut == null) {
|
||||
continue;
|
||||
}
|
||||
CommonRequest<ChargeResultRequest> chargeResultRequestCommonRequest = new CommonRequest<>();
|
||||
ChargeResultRequest chargeResultRequest = new ChargeResultRequest();
|
||||
if (stopCommandSent) {
|
||||
//获取内部的充电订单号
|
||||
//通过充电订单号,获取指定的订单
|
||||
//判断订单充电状态
|
||||
// 获取指定的订单的数据
|
||||
CacheOrderData orderData = (CacheOrderData) order.get("orderData");
|
||||
String internetSerialNumber = (String) pushOrder.get("internetSerialNumber");
|
||||
int succStat = 0;
|
||||
int failReason = 0;
|
||||
chargeResultRequest.setStartChargeSeq(internetSerialNumber);
|
||||
chargeResultRequest.setConnectorID(orderNo.substring(0, 14));
|
||||
if (orderData != null) {
|
||||
//使用指定包装类封装数据
|
||||
chargeResultRequest.setStartChargeSeqStat(4);
|
||||
chargeResultRequest.setSuccStat(succStat);
|
||||
chargeResultRequest.setFailReason(failReason);
|
||||
//将其转换为json
|
||||
REDIS.deleteObject(pushOrderKey);
|
||||
}
|
||||
} else { // todo wenhui
|
||||
chargeResultRequest.setStartChargeSeqStat((Integer) pushOrder.get("status"));
|
||||
}
|
||||
String jsonData = JSONUtil.toJSONString(chargeResultRequest);
|
||||
chargeResultRequestCommonRequest.setData(jsonData);
|
||||
String result = ok(chargeResultRequestCommonRequest, "/notification_stop_charge_result", authSecretTokenOut, operatorId3rdpty);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充电订单号
|
||||
* 获取充电订单状态
|
||||
@ -48,23 +101,23 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
//20秒检测一次Redis中的数据状态,并推送
|
||||
|
||||
//获取Redis中的所有订单状态数据
|
||||
List<Object> orderStatusList = REDIS.getCacheList("orderStatus:*");
|
||||
List<Object> orderStatusDataList = REDIS.getCacheList("orderStatusData:*");
|
||||
|
||||
//使用for循环遍历所有订单状态数据找到已结束的充电订单
|
||||
for (int i = 0; i < orderStatusList.size() - 1; i++) {
|
||||
for (int i = 0; i < orderStatusDataList.size() - 1; i++) {
|
||||
|
||||
//获取订单数据
|
||||
Map<String, Object> orderStatus = (Map<String, Object>) orderStatusList.get(i);
|
||||
Map<String, Object> orderStatusData = (Map<String, Object>) orderStatusDataList.get(i);
|
||||
//判断该订单数据是否已经被推送过了,如果已经推送过了,则不在推送
|
||||
Boolean isPush = (Boolean) orderStatus.get("isPush");
|
||||
Boolean isPush = (Boolean) orderStatusData.get("isPush");
|
||||
if (!isPush) {
|
||||
//获取内部的充电订单号
|
||||
String orderNo = (String) orderStatus.get("orderNo");
|
||||
String orderNo = (String) orderStatusData.get("orderNo");
|
||||
//通过充电订单号,获取指定的订单
|
||||
Map<String, Object> order = REDIS.getCacheMap("order:" + orderNo);
|
||||
//判断订单充电状态
|
||||
String status = (String) order.get("status");
|
||||
if (status.equals("已结束")) {
|
||||
String chargingStatus = (String) order.get("chargingStatus");
|
||||
if (chargingStatus.equals("已结束")) {
|
||||
//获取指定的订单的数据
|
||||
CacheOrderData orderData = (CacheOrderData) order.get("orderData");
|
||||
//获取充电设备接口编码
|
||||
@ -78,8 +131,8 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
|
||||
//使用指定包装类封装数据
|
||||
ChargeResultRequest chargeResultRequest = new ChargeResultRequest();
|
||||
chargeResultRequest.setStartChargeSeq(null);
|
||||
chargeResultRequest.setStartChargeSeqStat(status);
|
||||
chargeResultRequest.setStartChargeSeq(null); //todo 使用朱老师工具缩减成27位
|
||||
chargeResultRequest.setStartChargeSeqStat(4);
|
||||
chargeResultRequest.setConnectorID(gunSerial);
|
||||
chargeResultRequest.setSuccStat(succStat);
|
||||
chargeResultRequest.setFailReason(failReason);
|
||||
@ -99,12 +152,12 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
|
||||
//推送数据
|
||||
//operatorId第三方的 我们场站运营商的
|
||||
ok(chargeResultRequestCommonRequest, "/notification_stop_charge_result", authSecretTokenOut, null);
|
||||
ok(chargeResultRequestCommonRequest, "/notification_stop_charge_result", authSecretTokenOut, "MA6DFCTD5");
|
||||
|
||||
// TODO: 2021/10/21 设置该订单数据已经被推送的标识符
|
||||
orderStatus.put("isPush", true);
|
||||
// 获取对应的orderStatus的Key
|
||||
//REDIS.setCacheMap("",orderStatus);
|
||||
//设置该订单数据已经被推送的标识符
|
||||
orderStatusData.put("isPush", true);
|
||||
String statusDataNum = (String) orderStatusData.get("statusDataNum");
|
||||
REDIS.setCacheMap("orderStatusData:" + statusDataNum, orderStatusData);
|
||||
}
|
||||
|
||||
// TODO:如果充电状态为停止中:
|
||||
@ -113,6 +166,82 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//第二种更快的逻辑
|
||||
// public void notifyService2() {
|
||||
//
|
||||
//
|
||||
//
|
||||
// //20秒检测一次Redis中的数据状态,并推送
|
||||
//
|
||||
// //获取Redis中的所有未推送的订单状态数据
|
||||
// Collection<String> keys1 = REDIS.keys("orderStatusData:F*");
|
||||
//
|
||||
// List<Object> orderStatusDataList = REDIS.getCacheList("orderStatusData:F");
|
||||
// Collection<String> keys = REDIS.keys("orderStatusData:*F");
|
||||
//
|
||||
// //使用for循环遍历所有未推送订单状态数据
|
||||
// for (int i = 0; i < orderStatusDataList.size() - 1; i++) {
|
||||
//
|
||||
// //获取订单数据
|
||||
// Map<String, Object> orderStatusData = (Map<String, Object>) orderStatusDataList.get(i);
|
||||
//
|
||||
// //获取内部的充电订单号
|
||||
// String orderNo = (String) orderStatusData.get("orderNo");
|
||||
// //通过充电订单号,获取指定的订单
|
||||
// Map<String, Object> order = REDIS.getCacheMap("order:" + orderNo);
|
||||
// //判断订单充电状态
|
||||
// String chargingStatus = (String) order.get("chargingStatus");
|
||||
// if (chargingStatus.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); //todo 使用朱老师工具缩减成27位
|
||||
// chargeResultRequest.setStartChargeSeqStat(chargingStatus);
|
||||
// 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<ChargeResultRequest> chargeResultRequestCommonRequest = new CommonRequest<>();
|
||||
// chargeResultRequestCommonRequest.setData(jsonData);
|
||||
//
|
||||
// //推送数据
|
||||
// //operatorId第三方的 我们场站运营商的
|
||||
// ok(chargeResultRequestCommonRequest, "/notification_stop_charge_result", "765367656", null);
|
||||
//
|
||||
// //往该订单所对应的订单状态数据上添加已经被推送的标识符,以避开下次扫描
|
||||
// REDIS.setCacheMap("orderStatusData:"+orderNo+"T",orderStatusData);
|
||||
// System.out.println("已完成");
|
||||
// }
|
||||
//
|
||||
// // TODO:如果充电状态为停止中:
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user