|
@@ -27,8 +27,10 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author skyline
|
|
* @author skyline
|
|
@@ -83,18 +85,23 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
var userId = StpUtil.getLoginIdAsLong();
|
|
var userId = StpUtil.getLoginIdAsLong();
|
|
|
// 修改订单状态,取消预约
|
|
// 修改订单状态,取消预约
|
|
|
var chargeOrder = chargeOrderService.lambdaQuery()
|
|
var chargeOrder = chargeOrderService.lambdaQuery()
|
|
|
-// .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_未知)
|
|
|
|
|
.eq(ChargeOrder::getConnectorId, connectorId)
|
|
.eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
.eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
.eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
.one();
|
|
.one();
|
|
|
- // TODO 预约充电启动和停止队列删除数据
|
|
|
|
|
|
|
+ // 预约充电启动和停止队列删除数据
|
|
|
var delayOrder = new DelayChargeOrder();
|
|
var delayOrder = new DelayChargeOrder();
|
|
|
BeanUtils.copyProperties(chargeOrder, delayOrder);
|
|
BeanUtils.copyProperties(chargeOrder, delayOrder);
|
|
|
- startDelayService.removeFromOrderDelayQueue(delayOrder);
|
|
|
|
|
|
|
+ startDelayService.removeFromOrderDelayQueue(delayOrder.getStartChargeSeq());
|
|
|
if (delayOrder.getEndTime() != null) {
|
|
if (delayOrder.getEndTime() != null) {
|
|
|
- stopDelayService.removeFromOrderDelayQueue(delayOrder);
|
|
|
|
|
|
|
+ stopDelayService.removeFromOrderDelayQueue(delayOrder.getStartChargeSeq());
|
|
|
}
|
|
}
|
|
|
- return queryStartCharge(userId, connectorId, false, null);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ chargeOrderService.lambdaUpdate()
|
|
|
|
|
+ .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_未知)
|
|
|
|
|
+ .eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
|
|
+ .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
|
|
+ .update();
|
|
|
|
|
+ return queryStartCharge(userId, connectorId, false, null, null);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -109,15 +116,43 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
// 预约充电队列更新
|
|
// 预约充电队列更新
|
|
|
var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getStartChargeSeq, startChargeSeq)
|
|
var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getStartChargeSeq, startChargeSeq)
|
|
|
.eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
.eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
|
|
|
+ if(chargeOrder==null){
|
|
|
|
|
+ throw new BusinessException("预约订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ chargeOrder.setStartTime(startTime);
|
|
|
|
|
+ chargeOrder.setEndTime(null);
|
|
|
|
|
+ chargeOrderService.lambdaUpdate().eq(ChargeOrder::getStartChargeSeq,startChargeSeq)
|
|
|
|
|
+ .set(ChargeOrder::getStartTime,startTime).set(ChargeOrder::getEndTime,null).update();
|
|
|
|
|
+ // 删除队列中原来的数据
|
|
|
|
|
+ startDelayService.removeFromOrderDelayQueue(startChargeSeq);
|
|
|
|
|
+ stopDelayService.removeFromOrderDelayQueue(startChargeSeq);
|
|
|
|
|
+ // 向队列中添加新的数据
|
|
|
var delayChargeOrder = new DelayChargeOrder();
|
|
var delayChargeOrder = new DelayChargeOrder();
|
|
|
BeanUtils.copyProperties(chargeOrder, delayChargeOrder);
|
|
BeanUtils.copyProperties(chargeOrder, delayChargeOrder);
|
|
|
- boolean success = CommUtil.isNotEmptyAndNull(chargeOrder.getEndTime()) ?
|
|
|
|
|
- startDelayService.removeFromOrderDelayQueue(delayChargeOrder) : stopDelayService.removeFromOrderDelayQueue(delayChargeOrder);
|
|
|
|
|
|
|
+ var success = startDelayService.addToDelayQueue(delayChargeOrder);
|
|
|
if (!success) {
|
|
if (!success) {
|
|
|
throw new BusinessException("修改预约时间失败");
|
|
throw new BusinessException("修改预约时间失败");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void cancelBooking() {
|
|
|
|
|
+ var userId = StpUtil.getLoginIdAsLong();
|
|
|
|
|
+ var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_未知)
|
|
|
|
|
+ .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是).one();
|
|
|
|
|
+ if (chargeOrder != null) {
|
|
|
|
|
+ // 清除启动/停止队列信息
|
|
|
|
|
+ startDelayService.removeFromOrderDelayQueue(chargeOrder.getStartChargeSeq());
|
|
|
|
|
+ stopDelayService.removeFromOrderDelayQueue(chargeOrder.getStartChargeSeq());
|
|
|
|
|
+ // 修改订单状态为取消
|
|
|
|
|
+ chargeOrderService.lambdaUpdate().set(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_取消)
|
|
|
|
|
+ .set(ChargeOrder::getStopReason, ChargeOrder.STOP_REASON_用户手动停止)
|
|
|
|
|
+ .eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是).update();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new BusinessException("用户没有预约中的订单");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 启动充电
|
|
* 启动充电
|
|
@@ -125,13 +160,17 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
* @param connectorId
|
|
* @param connectorId
|
|
|
* @param isBooking
|
|
* @param isBooking
|
|
|
* @param startTime
|
|
* @param startTime
|
|
|
|
|
+ * @param endTime
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
@DSTransactional(rollbackFor = Exception.class)
|
|
@DSTransactional(rollbackFor = Exception.class)
|
|
|
- public Map<String, String> queryStartCharge(Long userId, String connectorId, Boolean isBooking, LocalDateTime startTime) {
|
|
|
|
|
|
|
+ public Map<String, String> queryStartCharge(Long userId, String connectorId, Boolean isBooking, LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
if (isBooking) {
|
|
if (isBooking) {
|
|
|
- // TODO: 2023-10-11 预约时间不能超过未来24H
|
|
|
|
|
|
|
+ // 预约时间不能超过未来24H
|
|
|
|
|
+ if (TimeUnit.SECONDS.convert(Duration.between(LocalDateTime.now(), startTime)) > 3600 * 24) {
|
|
|
|
|
+ throw new BusinessException("预约充电启动时间不能超过未来24小时");
|
|
|
|
|
+ }
|
|
|
// 预约充电通过connectorId查询预约中的订单
|
|
// 预约充电通过connectorId查询预约中的订单
|
|
|
var bookingOrder = chargeOrderService.lambdaQuery()
|
|
var bookingOrder = chargeOrderService.lambdaQuery()
|
|
|
.eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
.eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
@@ -188,16 +227,17 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
|
|
|
|
|
// 如果是预约订单,则将订单放入预约充电延迟队列
|
|
// 如果是预约订单,则将订单放入预约充电延迟队列
|
|
|
if (isBooking) {
|
|
if (isBooking) {
|
|
|
- order = order.setStartTime(startTime).setChargeStatus(ChargeOrder.CHARGE_STATUS_预约中);
|
|
|
|
|
-
|
|
|
|
|
- // TODO: 2023-10-21 如果有设置结束时间,取消时记得删
|
|
|
|
|
- var endTime = LocalDateTime.now();
|
|
|
|
|
- order.setEndTime(endTime);
|
|
|
|
|
|
|
+ order = order.setStartTime(startTime).setChargeStatus(ChargeOrder.CHARGE_STATUS_预约中).setIsBooking(ChargeOrder.IS_BOOKING_是);
|
|
|
|
|
|
|
|
|
|
+ // 如果有设置结束时间,取消时记得删
|
|
|
|
|
+ if (!CommUtil.isEmptyOrNull(endTime)) {
|
|
|
|
|
+ order.setEndTime(endTime);
|
|
|
|
|
+ }
|
|
|
chargeOrderService.lambdaUpdate()
|
|
chargeOrderService.lambdaUpdate()
|
|
|
.set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
.set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
|
|
+ .set(ChargeOrder::getIsBooking, order.getIsBooking())
|
|
|
.set(ChargeOrder::getStartTime, startTime)
|
|
.set(ChargeOrder::getStartTime, startTime)
|
|
|
- .set(CommUtil.isNotEmptyAndNull(endTime), ChargeOrder::getEndTime, endTime)
|
|
|
|
|
|
|
+ .set(!CommUtil.isEmptyOrNull(endTime), ChargeOrder::getEndTime, endTime)
|
|
|
.eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq())
|
|
.eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq())
|
|
|
.update();
|
|
.update();
|
|
|
|
|
|
|
@@ -207,7 +247,9 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
var flag = startDelayService.addToDelayQueue(delayChargeOrder.setStartTime(startTime));
|
|
var flag = startDelayService.addToDelayQueue(delayChargeOrder.setStartTime(startTime));
|
|
|
if (flag) {
|
|
if (flag) {
|
|
|
// 如果有结束时间,将订单放入结束充电延迟队列中
|
|
// 如果有结束时间,将订单放入结束充电延迟队列中
|
|
|
- stopDelayService.addToDelayQueue(delayChargeOrder.setEndTime(endTime));
|
|
|
|
|
|
|
+ if (endTime != null) {
|
|
|
|
|
+ stopDelayService.addToDelayQueue(delayChargeOrder.setEndTime(endTime));
|
|
|
|
|
+ }
|
|
|
// 切换数据源,修改设备状态为预约中
|
|
// 切换数据源,修改设备状态为预约中
|
|
|
updateEquipmentStatus(connectorId);
|
|
updateEquipmentStatus(connectorId);
|
|
|
LOGGER.info("预约充电成功,用户:{},订单号:{}", userId, order.getStartChargeSeq());
|
|
LOGGER.info("预约充电成功,用户:{},订单号:{}", userId, order.getStartChargeSeq());
|
|
@@ -368,8 +410,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
* @param connectorId
|
|
* @param connectorId
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public void queryStopCharge(String connectorId) {
|
|
|
|
|
- var userId = StpUtil.getLoginIdAsLong();
|
|
|
|
|
|
|
+ public void queryStopCharge(long userId, String connectorId) {
|
|
|
connectorId = getConnectorId(connectorId);
|
|
connectorId = getConnectorId(connectorId);
|
|
|
LOGGER.info("用户:{},设备:{}请求停止充电", userId, connectorId);
|
|
LOGGER.info("用户:{},设备:{}请求停止充电", userId, connectorId);
|
|
|
// 查询充电订单
|
|
// 查询充电订单
|