Преглед на файлове

优化预约充电取消逻辑

skyline преди 2 години
родител
ревизия
5b3b64ef05

+ 2 - 2
admin-web/src/views/admin/refund/index.vue

@@ -192,8 +192,8 @@ const state = reactive({
       // {label: '用户支付币种', prop: 'currency', resizable: true, width: 120},
       // {label: '资金账户', prop: 'fundsAccount', resizable: true, width: 120},
       {label: '退款原因', prop: 'reason', resizable: true, width: 120},
-      {label: '微信支付退款单号', prop: 'refundId', resizable: true, width: 150},
-      {label: '微信支付订单号', prop: 'transactionId', resizable: true, width: 150},
+      // {label: '微信支付退款单号', prop: 'outRefundNo', resizable: true, width: 150},
+      // {label: '微信支付订单号', prop: 'outTradeNo', resizable: true, width: 150},
       {label: '退款入账账户', prop: 'userReceivedAccount', resizable: true, width: 120},
       {
         label: '操作', prop: 'action', width: 110, align: 'center', fixed: 'right',

+ 1 - 1
entity/src/main/java/com/kym/entity/miniapp/ChargeOrder.java

@@ -37,7 +37,7 @@ public class ChargeOrder extends BaseEntity implements Serializable {
     public static int CHARGE_STATUS_充电中 = 2;
     public static int CHARGE_STATUS_停止中 = 3;
     public static int CHARGE_STATUS_已结束 = 4;
-    public static int CHARGE_STATUS_未知 = 5;
+    public static int CHARGE_STATUS_已取消 = 5;
 
 
     public static int INVOICE_STATUS_待开票 = 0;

+ 30 - 69
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -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);