|
|
@@ -61,11 +61,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
private final DelayService<DelayChargeOrder> startDelayService;
|
|
|
private final DelayService<DelayChargeOrder> stopDelayService;
|
|
|
|
|
|
- public ChargeServiceImpl(EquipmentRelationService equipmentRelationService, EquipmentInfoService equipmentInfoService,
|
|
|
- ChargeOrderService chargeOrderService, OrderRechargeRightsService orderRechargeRightsService, UserRechargeRightsService userRechargeRightsService, AccountService accountService,
|
|
|
- EnPlusService enPlusService, EnPlusConfig enPlusConfig,
|
|
|
- @Qualifier("StartChargeDelayJob") @Lazy DelayService<DelayChargeOrder> startDelayService,
|
|
|
- @Qualifier("StopChargeDelayJob") @Lazy DelayService<DelayChargeOrder> stopDelayService) {
|
|
|
+ public ChargeServiceImpl(EquipmentRelationService equipmentRelationService, EquipmentInfoService equipmentInfoService, ChargeOrderService chargeOrderService, OrderRechargeRightsService orderRechargeRightsService, UserRechargeRightsService userRechargeRightsService, AccountService accountService, EnPlusService enPlusService, EnPlusConfig enPlusConfig, @Qualifier("StartChargeDelayJob") @Lazy DelayService<DelayChargeOrder> startDelayService, @Qualifier("StopChargeDelayJob") @Lazy DelayService<DelayChargeOrder> stopDelayService) {
|
|
|
this.equipmentRelationService = equipmentRelationService;
|
|
|
this.equipmentInfoService = equipmentInfoService;
|
|
|
this.chargeOrderService = chargeOrderService;
|
|
|
@@ -88,24 +84,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
@Override
|
|
|
public Map<String, String> immediatelyCharge(String connectorId) {
|
|
|
var userId = StpUtil.getLoginIdAsLong();
|
|
|
- // 修改订单状态,取消预约
|
|
|
- var chargeOrder = chargeOrderService.lambdaQuery()
|
|
|
- .eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
- .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
- .one();
|
|
|
- // 预约充电启动和停止队列删除数据
|
|
|
- var delayOrder = new DelayChargeOrder();
|
|
|
- BeanUtils.copyProperties(chargeOrder, delayOrder);
|
|
|
- startDelayService.removeFromDelayQueue(delayOrder.getStartChargeSeq());
|
|
|
- if (delayOrder.getEndTime() != null) {
|
|
|
- stopDelayService.removeFromDelayQueue(delayOrder.getStartChargeSeq());
|
|
|
- }
|
|
|
-
|
|
|
- chargeOrderService.lambdaUpdate()
|
|
|
- .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_未知)
|
|
|
- .eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
- .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
- .update();
|
|
|
+ cancelBooking();
|
|
|
return queryStartCharge(userId, connectorId, null, false, null, null);
|
|
|
}
|
|
|
|
|
|
@@ -119,15 +98,13 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
@Override
|
|
|
public void modifyBookingTime(String startChargeSeq, LocalDateTime startTime) {
|
|
|
// 预约充电队列更新
|
|
|
- var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getStartChargeSeq, startChargeSeq)
|
|
|
- .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
|
+ var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getStartChargeSeq, startChargeSeq).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();
|
|
|
+ chargeOrderService.lambdaUpdate().eq(ChargeOrder::getStartChargeSeq, startChargeSeq).set(ChargeOrder::getStartTime, startTime).set(ChargeOrder::getEndTime, null).update();
|
|
|
// 删除队列中原来的数据
|
|
|
startDelayService.removeFromDelayQueue(startChargeSeq);
|
|
|
stopDelayService.removeFromDelayQueue(startChargeSeq);
|
|
|
@@ -140,20 +117,31 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消预约
|
|
|
+ */
|
|
|
@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();
|
|
|
+ var chargeOrder = chargeOrderService.lambdaQuery()
|
|
|
+ .eq(ChargeOrder::getUserId, userId)
|
|
|
+ .eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是)
|
|
|
+ .eq(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_未知)
|
|
|
+ .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
+ .one();
|
|
|
if (chargeOrder != null) {
|
|
|
// 清除启动/停止队列信息
|
|
|
startDelayService.removeFromDelayQueue(chargeOrder.getStartChargeSeq());
|
|
|
stopDelayService.removeFromDelayQueue(chargeOrder.getStartChargeSeq());
|
|
|
// 修改订单状态为取消
|
|
|
- chargeOrderService.lambdaUpdate().set(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_取消)
|
|
|
- .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已结束)
|
|
|
- .set(ChargeOrder::getStopReason, ChargeOrder.STOP_REASON_用户手动停止)
|
|
|
- .eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是).update();
|
|
|
+ chargeOrderService.lambdaUpdate()
|
|
|
+ .eq(ChargeOrder::getStartChargeSeq, chargeOrder.getStartChargeSeq())
|
|
|
+ .eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是)
|
|
|
+ .set(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_取消)
|
|
|
+ .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已取消)
|
|
|
+// .set(ChargeOrder::getStopReason, ChargeOrder.STOP_REASON_用户手动停止)
|
|
|
+ .update();
|
|
|
} else {
|
|
|
throw new BusinessException("用户没有预约中的订单");
|
|
|
}
|
|
|
@@ -179,8 +167,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
throw new BusinessException("预约充电启动时间不能超过未来24小时");
|
|
|
}
|
|
|
// 预约充电通过connectorId查询预约中的订单
|
|
|
- var bookingOrder = chargeOrderService.lambdaQuery()
|
|
|
- .eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
|
+ var bookingOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是).eq(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_未知).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
|
if (bookingOrder != null) {
|
|
|
LOGGER.error("用户:{}存在进行中的订单:{}", userId, bookingOrder.getStartChargeSeq());
|
|
|
throw new BusinessException(ResponseEnum.ORDER_IN_BOOKING);
|
|
|
@@ -194,7 +181,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
// 二维码文本
|
|
|
var qrCode = "";
|
|
|
|
|
|
- // 当前设备是是否有正在进行中的订单
|
|
|
+ // 当前用户是否有正在进行中、预约中、启动中的订单
|
|
|
var chargeOrder = chargeOrderService.getChargingOrderByUserId(userId);
|
|
|
if (chargeOrder != null) {
|
|
|
// 预约中的订单到了启动时间则直接启动,忽略校验
|
|
|
@@ -202,7 +189,6 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
LOGGER.error("用户:{}存在进行中的订单:{}", userId, chargeOrder.getStartChargeSeq());
|
|
|
throw new BusinessException(ResponseEnum.ORDER_IN_PROGRESS);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
// 查询用户余额
|
|
|
var account = accountService.getAccountByUserId(userId);
|
|
|
@@ -214,10 +200,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
var amount = account.getBalance() - 50;
|
|
|
|
|
|
// 是否有之前预约充电创建的订单记录,有则直接用,没有则创建
|
|
|
- ChargeOrder order = chargeOrderService.lambdaQuery()
|
|
|
- .eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
- .in(ChargeOrder::getChargeStatus, ChargeOrder.ORDER_STATUS_未知, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
- .one();
|
|
|
+ ChargeOrder order = chargeOrderService.lambdaQuery().eq(ChargeOrder::getConnectorId, connectorId).in(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已取消, ChargeOrder.CHARGE_STATUS_预约中).one();
|
|
|
|
|
|
if (order == null) {
|
|
|
// 充电订单号/设备认证号
|
|
|
@@ -230,23 +213,17 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
order.setStartChargeSeq(startChargeSeq);
|
|
|
order.setConnectorId(connectorId);
|
|
|
order.setOrderStatus(ChargeOrder.ORDER_STATUS_未知);
|
|
|
+ order.setChargeStatus(ChargeOrder.CHARGE_STATUS_启动中);
|
|
|
chargeOrderService.save(order);
|
|
|
|
|
|
// 订单充值权益
|
|
|
if (!CommUtil.isEmptyOrNull(userRechargeRightsId)) {
|
|
|
var userRechargeRights = userRechargeRightsService.lambdaQuery().eq(UserRechargeRights::getUserId, userId).eq(UserRechargeRights::getId, userRechargeRightsId).one();
|
|
|
if (userRechargeRights != null) {
|
|
|
- var orderRechargeRights = new OrderRechargeRights()
|
|
|
- .setUserId(userId)
|
|
|
- .setStartChargeSeq(startChargeSeq)
|
|
|
- .setActivityId(userRechargeRights.getActivityId())
|
|
|
- .setRightsId(userRechargeRights.getRightsId())
|
|
|
- .setDiscount(userRechargeRights.getDiscount());
|
|
|
+ var orderRechargeRights = new OrderRechargeRights().setUserId(userId).setStartChargeSeq(startChargeSeq).setActivityId(userRechargeRights.getActivityId()).setRightsId(userRechargeRights.getRightsId()).setDiscount(userRechargeRights.getDiscount());
|
|
|
orderRechargeRightsService.save(orderRechargeRights);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
// 请求设备认证
|
|
|
@@ -260,13 +237,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
if (!CommUtil.isEmptyOrNull(endTime)) {
|
|
|
order.setEndTime(endTime);
|
|
|
}
|
|
|
- chargeOrderService.lambdaUpdate()
|
|
|
- .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
|
|
|
- .set(ChargeOrder::getIsBooking, order.getIsBooking())
|
|
|
- .set(ChargeOrder::getStartTime, startTime)
|
|
|
- .set(!CommUtil.isEmptyOrNull(endTime), ChargeOrder::getEndTime, endTime)
|
|
|
- .eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq())
|
|
|
- .update();
|
|
|
+ chargeOrderService.lambdaUpdate().set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).set(ChargeOrder::getIsBooking, order.getIsBooking()).set(ChargeOrder::getStartTime, startTime).set(!CommUtil.isEmptyOrNull(endTime), ChargeOrder::getEndTime, endTime).eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq()).update();
|
|
|
|
|
|
var delayChargeOrder = new DelayChargeOrder();
|
|
|
BeanUtils.copyProperties(order, delayChargeOrder);
|
|
|
@@ -293,10 +264,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
var startCharge = enPlusService.queryStartCharge(order.getStartChargeSeq(), connectorId, qrCode, amount);
|
|
|
if (startCharge.containsKey("SuccStat") && startCharge.getIntValue("SuccStat") == 0) {
|
|
|
// 启动成功,更新充电订单状态
|
|
|
- chargeOrderService.lambdaUpdate()
|
|
|
- .set(ChargeOrder::getChargeStatus, startCharge.getIntValue("StartChargeSeqStat"))
|
|
|
- .eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq())
|
|
|
- .update();
|
|
|
+ chargeOrderService.lambdaUpdate().set(ChargeOrder::getChargeStatus, startCharge.getIntValue("StartChargeSeqStat")).eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq()).update();
|
|
|
return Map.of("startChargeSeq", order.getStartChargeSeq());
|
|
|
} else {
|
|
|
// 启动充电失败
|
|
|
@@ -342,10 +310,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
public void updateEquipmentStatus(String connectorId) {
|
|
|
// 手动切换数据源
|
|
|
DynamicDataSourceContextHolder.push("db-admin");
|
|
|
- equipmentInfoService.lambdaUpdate()
|
|
|
- .set(EquipmentInfo::getServiceStatus, EquipmentInfo.SERVICE_STATUS_预约中)
|
|
|
- .eq(EquipmentInfo::getEquipmentId, connectorId.substring(0, 16))
|
|
|
- .update();
|
|
|
+ equipmentInfoService.lambdaUpdate().set(EquipmentInfo::getServiceStatus, EquipmentInfo.SERVICE_STATUS_预约中).eq(EquipmentInfo::getEquipmentId, connectorId.substring(0, 16)).update();
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
|
|
|
}
|
|
|
@@ -444,11 +409,7 @@ public class ChargeServiceImpl implements ChargeService {
|
|
|
connectorId = getConnectorId(connectorId);
|
|
|
LOGGER.info("用户:{},设备:{}请求停止充电", userId, connectorId);
|
|
|
// 查询充电订单
|
|
|
- var chargeOrder = chargeOrderService.lambdaQuery()
|
|
|
- .eq(ChargeOrder::getUserId, userId)
|
|
|
- .eq(ChargeOrder::getConnectorId, connectorId)
|
|
|
- .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_充电中)
|
|
|
- .one();
|
|
|
+ var chargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_充电中).one();
|
|
|
if (chargeOrder == null) {
|
|
|
// 记录失败原因
|
|
|
LOGGER.error("用户:{}请求停止充电异常,设备:{}无进行中的订单", userId, connectorId);
|