完成query_stop_charge接口
完成notification_stop_charge_result接口
This commit is contained in:
parent
af42f2011e
commit
3b5314db40
@ -119,6 +119,10 @@
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
<version>${druid.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
|
||||
@ -4,11 +4,13 @@ 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.domain.XhpcChargingPile;
|
||||
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.jpa.XhpcChargingPileRepository;
|
||||
import com.xhpc.evcs.utils.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -33,45 +35,114 @@ public class QueryStopChargeController {
|
||||
@Autowired
|
||||
private OrderMappingRepository etOrderMappingRepo;
|
||||
|
||||
@Autowired
|
||||
private XhpcChargingPileRepository XhpcChargingPileRepository;
|
||||
|
||||
@PostMapping("/v1/query_stop_charge")
|
||||
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();
|
||||
//获取桩编码
|
||||
String pileNum = connectorId.substring(0, connectorId.length() - 2);
|
||||
//从桩上面获取版本号
|
||||
//获取Redis中的桩信息
|
||||
Map<String, Object> pile = REDIS.getCacheMap("pile:" + pileNum);
|
||||
String vesrionNum = (String) pile.get("vesrion");
|
||||
// 获取充电订单号 充电订单号是一个27位的数字
|
||||
String startChargeSeq = queryStopChargeRequest.getStartChargeSeq();
|
||||
|
||||
//给对应的枪发送停止充电指令
|
||||
R r = powerPileService.stopCharging(chargingOrderSeq, pileNum, connectorId, "0A");//ToDo 暂时写死
|
||||
//todo 判断停止指令发送是否成功
|
||||
EtOrderMapping etOrderMapping = etOrderMappingRepo.findByEvcsOrderNo(chargingOrderSeq).orElse(null);
|
||||
//封装实体类数据
|
||||
QueryStopChargeResponse queryStopChargeResponse = new QueryStopChargeResponse();
|
||||
queryStopChargeResponse.setStartChargeSeq(startChargeSeq);
|
||||
|
||||
//判断三方的订单号是否在我们的内部有对应的订单
|
||||
EtOrderMapping etOrderMapping = etOrderMappingRepo.findByEvcsOrderNo(startChargeSeq).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);
|
||||
order.replace("status", "已结束");
|
||||
REDIS.setCacheMap("order:" + chargingOrderSeq, order);
|
||||
//充电订单状态
|
||||
queryStopChargeResponse.setStartChargeSeqStat(5);
|
||||
//操作结果
|
||||
queryStopChargeResponse.setSuccStat(1);
|
||||
//5 are custom value, means "error startChargeSeq"
|
||||
queryStopChargeResponse.setFailReason(10);
|
||||
|
||||
//封装实体类数据
|
||||
QueryStopChargeResponse queryStopChargeResponse = new QueryStopChargeResponse();
|
||||
//充电订单号
|
||||
queryStopChargeResponse.setStartChargeSeq(chargingOrderSeq);
|
||||
//转换为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;
|
||||
}
|
||||
String xhOrderNo = etOrderMapping.getXhOrderNo();
|
||||
//充电设备接口编码(枪编码)
|
||||
String connectorId = queryStopChargeRequest.getConnectorId();
|
||||
//获取桩编码
|
||||
String pileNum = connectorId.substring(0, connectorId.length() - 2);
|
||||
//从数据库中查询对应的桩的版本信息
|
||||
XhpcChargingPile pileInfo = XhpcChargingPileRepository.findBySerialNumber(pileNum).orElse(null);
|
||||
String versionNum = null;
|
||||
if (pileInfo != null) {
|
||||
versionNum = pileInfo.getCommunicationProtocolVersion();
|
||||
}
|
||||
|
||||
//给对应的枪发送停止充电指令
|
||||
R r = powerPileService.stopCharging(xhOrderNo, pileNum, connectorId, versionNum);
|
||||
|
||||
// 判断停止指令发送是否成功
|
||||
if (r.getCode() != 200) {
|
||||
//充电订单状态
|
||||
queryStopChargeResponse.setStartChargeSeqStat(5);
|
||||
//操作结果
|
||||
queryStopChargeResponse.setSuccStat(1);
|
||||
//失败原因
|
||||
String errorMsg = r.getMsg();
|
||||
if (errorMsg.contains("未注册")) {
|
||||
queryStopChargeResponse.setFailReason(1);
|
||||
}
|
||||
if (errorMsg.contains("离线")) {
|
||||
queryStopChargeResponse.setFailReason(2);
|
||||
}
|
||||
if (errorMsg.contains("订单号")) {
|
||||
//4 means error orderNumber
|
||||
queryStopChargeResponse.setFailReason(4);
|
||||
}
|
||||
if (errorMsg.contains("端口")) {
|
||||
//5 means port is not charging
|
||||
queryStopChargeResponse.setFailReason(5);
|
||||
}
|
||||
//充电订单状态
|
||||
queryStopChargeResponse.setStartChargeSeqStat(4);
|
||||
//操作结果
|
||||
queryStopChargeResponse.setSuccStat(1);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
//设置该订单已经被停止的标识
|
||||
Map<String, Object> order = REDIS.getCacheMap("order:" + xhOrderNo);
|
||||
order.replace("status", "已结束");
|
||||
REDIS.setCacheMap("order:" + xhOrderNo, order);
|
||||
HashMap<String, Object> pushOrder = new HashMap<>(16);
|
||||
pushOrder.put("stopCommandSent", true);
|
||||
REDIS.setCacheMap("pushOrder:".concat(xhOrderNo), pushOrder);
|
||||
|
||||
//充电订单状态
|
||||
queryStopChargeResponse.setStartChargeSeqStat(3);
|
||||
//操作结果
|
||||
queryStopChargeResponse.setSuccStat(0);
|
||||
//失败原因
|
||||
queryStopChargeResponse.setFailReason(0);
|
||||
@ -91,12 +162,6 @@ public class QueryStopChargeController {
|
||||
commonResponse.setData(data);
|
||||
|
||||
return commonResponse;
|
||||
} else {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -6,8 +6,18 @@ 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 XhpcChargingPileRepository extends JpaRepository<XhpcChargingPile, String>,
|
||||
QueryByExampleExecutor<XhpcChargingPile>, JpaSpecificationExecutor<XhpcChargingPile> {
|
||||
|
||||
/**
|
||||
* 通过桩的序列号来查询查询指定的桩的信息
|
||||
*
|
||||
* @param pileNum 桩的序列号
|
||||
* @return 返回一条桩数据
|
||||
*/
|
||||
Optional<XhpcChargingPile> findBySerialNumber(String pileNum);
|
||||
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ 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;
|
||||
@ -31,7 +30,17 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
notifyService3();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取充电订单号
|
||||
* 获取充电订单状态
|
||||
* 获取充电设备接口编码
|
||||
* 获取成功标识
|
||||
* 获取停止失败原因
|
||||
* 推送过去
|
||||
* <p>
|
||||
* 出现异常逻辑
|
||||
* 如果当充电桩因为异常停止充电时,那么谁告诉我订单是个异常订单?
|
||||
*/
|
||||
public void notifyService3() throws JsonProcessingException {
|
||||
|
||||
//获取Redis中的所有订单状态数据
|
||||
@ -62,186 +71,23 @@ public class NotificationStopChargeResultTask extends CoreDispatcher {
|
||||
// 获取指定的订单的数据
|
||||
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) {
|
||||
//使用指定包装类封装数据
|
||||
int succStat = 0;
|
||||
int failReason = 0;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充电订单号
|
||||
* 获取充电订单状态
|
||||
* 获取充电设备接口编码
|
||||
* 获取成功标识
|
||||
* 获取停止失败原因
|
||||
* 推送过去
|
||||
* <p>
|
||||
* 出现异常逻辑
|
||||
* 如果当充电桩因为异常停止充电时,那么谁告诉我订单是个异常订单?
|
||||
*/
|
||||
public void notifyService() {
|
||||
|
||||
List<AuthSecretToken> authSecretTokenOutList = authSecretTokenRepository.findBySecretTokenType(SECRET_TOKEN_TYPE_OUT);
|
||||
for (AuthSecretToken authSecretTokenOut : authSecretTokenOutList) {
|
||||
//20秒检测一次Redis中的数据状态,并推送
|
||||
|
||||
//获取Redis中的所有订单状态数据
|
||||
List<Object> orderStatusDataList = REDIS.getCacheList("orderStatusData:*");
|
||||
|
||||
//使用for循环遍历所有订单状态数据找到已结束的充电订单
|
||||
for (int i = 0; i < orderStatusDataList.size() - 1; i++) {
|
||||
|
||||
//获取订单数据
|
||||
Map<String, Object> orderStatusData = (Map<String, Object>) orderStatusDataList.get(i);
|
||||
//判断该订单数据是否已经被推送过了,如果已经推送过了,则不在推送
|
||||
Boolean isPush = (Boolean) orderStatusData.get("isPush");
|
||||
if (!isPush) {
|
||||
//获取内部的充电订单号
|
||||
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(4);
|
||||
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", authSecretTokenOut, "MA6DFCTD5");
|
||||
|
||||
//设置该订单数据已经被推送的标识符
|
||||
orderStatusData.put("isPush", true);
|
||||
String statusDataNum = (String) orderStatusData.get("statusDataNum");
|
||||
REDIS.setCacheMap("orderStatusData:" + statusDataNum, orderStatusData);
|
||||
}
|
||||
|
||||
// TODO:如果充电状态为停止中:
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//第二种更快的逻辑
|
||||
// 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