skyline 2 лет назад
Родитель
Сommit
21352a184f

+ 1 - 1
entity/src/main/java/com/kym/entity/admin/Banner.java

@@ -57,7 +57,7 @@ public class Banner extends BaseEntity {
     /**
      * 状态:0-无效,1-有效
      */
-    private Byte status;
+    private Integer status;
 
     /**
      * 备注

+ 1 - 1
entity/src/main/java/com/kym/entity/admin/queryParams/ActivityQueryParam.java

@@ -38,5 +38,5 @@ public class ActivityQueryParam extends PageParams {
     /**
      * 状态
      */
-    private int status;
+    private Integer status;
 }

+ 1 - 1
entity/src/main/java/com/kym/entity/admin/queryParams/BannerQueryParam.java

@@ -33,5 +33,5 @@ public class BannerQueryParam extends PageParams {
     /**
      * 状态
      */
-    private int status;
+    private Integer status;
 }

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

@@ -29,6 +29,7 @@ public class ChargeOrder extends BaseEntity implements Serializable {
     public static int ORDER_STATUS_未知 = 0;
     public static int ORDER_STATUS_成功 = 1;
     public static int ORDER_STATUS_失败 = 2;
+    public static int ORDER_STATUS_取消 = 3;
 
 
     public static int CHARGE_STATUS_预约中 = 0;
@@ -43,6 +44,17 @@ public class ChargeOrder extends BaseEntity implements Serializable {
     public static int INVOICE_STATUS_开票中 = 1;
     public static int INVOICE_STATUS_已开票 = 2;
 
+
+    public static int IS_BOOKING_否 = 0;
+    public static int IS_BOOKING_是 = 1;
+
+    // 充电停止原因:0:用户手动停止,1:运营平台停止,2:BMS停止,3:充电机器设备故障,4:连接器断开
+    public static int STOP_REASON_用户手动停止 = 0;
+    public static int STOP_REASON_运营平台停止 = 1;
+    public static int STOP_REASON_BMS停止 = 2;
+    public static int STOP_REASON_充电机器设备故障 = 3;
+    public static int STOP_REASON_连接器断开 = 4;
+
     private Long userId;
 
     private String stationId;
@@ -57,6 +69,11 @@ public class ChargeOrder extends BaseEntity implements Serializable {
      */
     private String connectorId;
 
+    /**
+     * 是否为预约订单:0-否 1-是
+     */
+    private Integer isBooking;
+
     /**
      * 充电开始时间
      */

+ 5 - 0
entity/src/main/java/com/kym/entity/miniapp/vo/ChargeOrderVo.java

@@ -27,6 +27,11 @@ public class ChargeOrderVo {
      */
     private String connectorId;
 
+    /**
+     * 是否为预约订单:0-否 1-是
+     */
+    private Integer isBooking;
+
     /**
      * 充电开始时间
      */

+ 3 - 1
mapper/src/main/resources/mappers/miniapp/ChargeOrderMapper.xml

@@ -9,6 +9,7 @@
         <result column="station_id" property="stationId"/>
         <result column="start_charge_seq" property="startChargeSeq"/>
         <result column="connector_id" property="connectorId"/>
+        <result column="is_booking" property="isBooking"/>
         <result column="start_time" property="startTime"/>
         <result column="end_time" property="endTime"/>
         <result column="soc" property="soc"/>
@@ -33,6 +34,7 @@
         <result column="start_charge_seq" property="startChargeSeq"/>
         <result column="station_id" property="stationId"/>
         <result column="connector_id" property="connectorId"/>
+        <result column="is_booking" property="isBooking"/>
         <result column="start_time" property="startTime"/>
         <result column="end_time" property="endTime"/>
         <result column="total_power" property="totalPower"/>
@@ -61,7 +63,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, user_id, station_id, start_charge_seq, connector_id, start_time, end_time, soc, total_power, total_money, elec_money, service_money,pay_amount,discount_amount,service_money_discount, sum_period, charge_detail, order_status, charge_status, stop_reason, invoice_status,invoice_id,create_time, update_time
+        id, user_id, station_id, start_charge_seq, connector_id, is_booking,start_time, end_time, soc, total_power, total_money, elec_money, service_money,pay_amount,discount_amount,service_money_discount, sum_period, charge_detail, order_status, charge_status, stop_reason, invoice_status,invoice_id,create_time, update_time
     </sql>
 
     <select id="statChargeOrders" resultType="java.util.Map"

+ 13 - 5
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -85,14 +85,22 @@ public class ChargerController {
     @GetMapping({"/startCharge/{connectorId}", "/startCharge/{connectorId}"})
     R<?> startCharge(@PathVariable("connectorId") String connectorId,
                      @RequestParam(value = "isBooking", defaultValue = "false") Boolean isBooking,
-                     @RequestParam(value = "startTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime) {
+                     @RequestParam(value = "startTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
+                     @RequestParam(value = "endTime", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
         var userId = StpUtil.getLoginIdAsLong();
-        return R.success(chargeService.queryStartCharge(userId, connectorId, isBooking, startTime));
+        return R.success(chargeService.queryStartCharge(userId, connectorId, isBooking, startTime, endTime));
+    }
+
+    @ApiLog("取消预约充电")
+    @GetMapping("/cancelBooking")
+    R<?> cancelBooking(){
+        chargeService.cancelBooking();
+        return R.success();
     }
 
     @ApiLog("修改预约充电时间")
-    @GetMapping("/modifyBookingTime/{startChargeSeq}")
-    R<?> modifyBookingTime(@PathVariable("startChargeSeq") String startChargeSeq, @RequestParam LocalDateTime startTime) {
+    @GetMapping("/modifyBookingTime")
+    R<?> modifyBookingTime(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime) {
         chargeService.modifyBookingTime(startChargeSeq, startTime);
         return R.success();
     }
@@ -106,7 +114,7 @@ public class ChargerController {
     @ApiLog("停止充电")
     @GetMapping("/stopCharge/{connectorId}")
     R<?> stopCharge(@PathVariable("connectorId") String connectorId) {
-        chargeService.queryStopCharge(connectorId);
+        chargeService.queryStopCharge(StpUtil.getLoginIdAsLong(), connectorId);
         return R.success();
     }
 

+ 4 - 4
service/src/main/java/com/kym/service/admin/impl/ActivityServiceImpl.java

@@ -100,10 +100,10 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
     public PageBean<Activity> listActivity(ActivityQueryParam params) {
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         var list = lambdaQuery()
-                .like(CommUtil.isNotEmptyAndNull(params.getName()), Activity::getName, params.getName())
-                .eq(CommUtil.isNotEmptyAndNull(params.getStatus()), Activity::getStatus, params.getStatus())
-                .gt(CommUtil.isNotEmptyAndNull(params.getStartTime()), Activity::getStartTime, params.getStartTime())
-                .lt(CommUtil.isNotEmptyAndNull(params.getEndTime()), Activity::getEndTime, params.getEndTime())
+                .like(!CommUtil.isEmptyOrNull(params.getName()), Activity::getName, params.getName())
+                .eq(params.getStatus() != null, Activity::getStatus, params.getStatus())
+                .gt(params.getStartTime() != null, Activity::getStartTime, params.getStartTime())
+                .lt(params.getEndTime() != null, Activity::getEndTime, params.getEndTime())
                 .list();
         return new PageBean<>(list);
     }

+ 3 - 3
service/src/main/java/com/kym/service/admin/impl/AdminUserServiceImpl.java

@@ -165,9 +165,9 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
     public PageBean<?> listUser(CommonQueryParam params) {
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         List<AdminUser> list = lambdaQuery()
-                .like(CommUtil.isNotEmptyAndNull(params.getUsername()), AdminUser::getUsername, params.getUsername())
-                .like(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), AdminUser::getMobilePhone, params.getMobilePhone())
-                .like(CommUtil.isNotEmptyAndNull(params.getStatus()), AdminUser::getStatus, params.getStatus())
+                .like(!CommUtil.isEmptyOrNull(params.getUsername()), AdminUser::getUsername, params.getUsername())
+                .like(!CommUtil.isEmptyOrNull(params.getMobilePhone()), AdminUser::getMobilePhone, params.getMobilePhone())
+                .like(params.getStatus() != null, AdminUser::getStatus, params.getStatus())
                 .list();
         return new PageBean<>(list);
     }

+ 11 - 11
service/src/main/java/com/kym/service/admin/impl/BannerServiceImpl.java

@@ -38,13 +38,13 @@ public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> impleme
     @Transactional(rollbackFor = Exception.class)
     public Banner updateBanner(Banner banner) {
         lambdaUpdate()
-                .set(CommUtil.isNotEmptyAndNull(banner.getBannerDesc()), Banner::getBannerDesc, banner.getBannerDesc())
-                .set(CommUtil.isNotEmptyAndNull(banner.getBannerUrl()), Banner::getBannerUrl, banner.getBannerUrl())
-                .set(CommUtil.isNotEmptyAndNull(banner.getLinkUrl()), Banner::getLinkUrl, banner.getLinkUrl())
-                .set(CommUtil.isNotEmptyAndNull(banner.getStartTime()), Banner::getStartTime, banner.getStartTime())
-                .set(CommUtil.isNotEmptyAndNull(banner.getEndTime()), Banner::getEndTime, banner.getEndTime())
-                .set(CommUtil.isNotEmptyAndNull(banner.getStatus()), Banner::getStatus, banner.getStatus())
-                .set(CommUtil.isNotEmptyAndNull(banner.getRemark()), Banner::getRemark, banner.getRemark())
+                .set(!CommUtil.isEmptyOrNull(banner.getBannerDesc()), Banner::getBannerDesc, banner.getBannerDesc())
+                .set(!CommUtil.isEmptyOrNull(banner.getBannerUrl()), Banner::getBannerUrl, banner.getBannerUrl())
+                .set(!CommUtil.isEmptyOrNull(banner.getLinkUrl()), Banner::getLinkUrl, banner.getLinkUrl())
+                .set(banner.getStartTime() != null, Banner::getStartTime, banner.getStartTime())
+                .set(banner.getEndTime() != null, Banner::getEndTime, banner.getEndTime())
+                .set(banner.getStatus() != null, Banner::getStatus, banner.getStatus())
+                .set(!CommUtil.isEmptyOrNull(banner.getRemark()), Banner::getRemark, banner.getRemark())
                 .eq(Banner::getId, banner.getId());
         return banner;
     }
@@ -53,10 +53,10 @@ public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> impleme
     public PageBean<Banner> listBanner(BannerQueryParam params) {
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         var list = lambdaQuery()
-                .eq(CommUtil.isNotEmptyAndNull(params.getStatus()), Banner::getStatus, params.getStatus())
-                .gt(CommUtil.isNotEmptyAndNull(params.getStartTime()), Banner::getStartTime, params.getStartTime())
-                .lt(CommUtil.isNotEmptyAndNull(params.getEndTime()), Banner::getStartTime, params.getEndTime())
-                .like(CommUtil.isNotEmptyAndNull(params.getBannerDesc()), Banner::getBannerDesc, params.getBannerDesc())
+                .eq(params.getStatus() != null, Banner::getStatus, params.getStatus())
+                .gt(params.getStartTime() != null, Banner::getStartTime, params.getStartTime())
+                .lt(params.getEndTime() != null, Banner::getStartTime, params.getEndTime())
+                .like(!CommUtil.isEmptyOrNull(params.getBannerDesc()), Banner::getBannerDesc, params.getBannerDesc())
                 .list();
         return new PageBean<>(list);
     }

+ 4 - 2
service/src/main/java/com/kym/service/miniapp/ChargeService.java

@@ -14,18 +14,20 @@ import java.util.Map;
  */
 public interface ChargeService {
 
-    Map<String, String> queryStartCharge(Long userId, String connectorId, Boolean isBooking, LocalDateTime startTime);
+    Map<String, String> queryStartCharge(Long userId, String connectorId, Boolean isBooking, LocalDateTime startTime, LocalDateTime endTime);
 
     @DS("db-admin")
     void updateEquipmentStatus(String connectorId);
 
     ChargeOrder queryEquipChargeStatus();
 
-    void queryStopCharge(String connectorId);
+    void queryStopCharge(long userId, String connectorId);
 
     EnBusinessPolicy queryEquipBusinessPolicy(String connectorId);
 
     Map<String, String> immediatelyCharge(String connectorId);
 
     void modifyBookingTime(String startChargeSeq, LocalDateTime startTime);
+
+    void cancelBooking();
 }

+ 2 - 2
service/src/main/java/com/kym/service/miniapp/DelayService.java

@@ -27,8 +27,8 @@ public interface DelayService<T> {
     /**
      * 移除指定的延迟对象从延时队列中
      *
-     * @param data
+     * @param startChargeSeq
      */
-    boolean removeFromOrderDelayQueue(T data);
+    boolean removeFromOrderDelayQueue(String startChargeSeq);
 
 }

+ 59 - 18
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

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

+ 6 - 4
service/src/main/java/com/kym/service/miniapp/impl/StartDelayServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kym.service.miniapp.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.kym.common.utils.CommUtil;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.delay.DelayChargeOrder;
 import com.kym.service.miniapp.ChargeOrderService;
@@ -53,6 +54,7 @@ public class StartDelayServiceImpl implements DelayService<DelayChargeOrder> {
         // 队列加载所有充电状态为预约中的订单,按照开始时间排序
         var orderList = chargeOrderService.lambdaQuery()
                 .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
+                .eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是)
                 .orderByAsc(ChargeOrder::getStartTime)
                 .list();
         var delayChargeOrderList = orderList.stream().map(o -> new DelayChargeOrder()
@@ -77,7 +79,7 @@ public class StartDelayServiceImpl implements DelayService<DelayChargeOrder> {
                     // 启动充电
                     var order = delayedItem.data;
                     threadLocal.set(order.getStartChargeSeq());
-                    chargeService.queryStartCharge(order.getUserId(), order.getConnectorId(), false, null);
+                    chargeService.queryStartCharge(order.getUserId(), order.getConnectorId(), false, null, null);
                     log.info("预约充电启动成功:用户:{},订单号:{},预约启动时间:{}", order.getUserId(), order.getStartChargeSeq(), order.getStartTime());
                     // 线程休眠100ms
                     Thread.sleep(100);
@@ -108,10 +110,10 @@ public class StartDelayServiceImpl implements DelayService<DelayChargeOrder> {
     }
 
     @Override
-    public boolean removeFromOrderDelayQueue(DelayChargeOrder delayChargeOrder) {
-        if (delayChargeOrder == null) {
+    public boolean removeFromOrderDelayQueue(String startChargeSeq) {
+        if (CommUtil.isEmptyOrNull(startChargeSeq)) {
             return false;
         }
-        return START_DELAY_QUEUE.removeIf(queue -> queue.data.getStartChargeSeq().equals(delayChargeOrder.getStartChargeSeq()));
+        return START_DELAY_QUEUE.removeIf(queue -> queue.data.getStartChargeSeq().equals(startChargeSeq));
     }
 }

+ 8 - 6
service/src/main/java/com/kym/service/miniapp/impl/StopDelayServiceImpl.java

@@ -2,6 +2,7 @@ package com.kym.service.miniapp.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.kym.common.exception.BusinessException;
+import com.kym.common.utils.CommUtil;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.delay.DelayChargeOrder;
 import com.kym.service.miniapp.ChargeOrderService;
@@ -54,6 +55,7 @@ public class StopDelayServiceImpl implements DelayService<DelayChargeOrder> {
         // 队列加载所有充电状态为预约中且有结束时间的订单,按照开始时间排序
         var orderList = chargeOrderService.lambdaQuery()
                 .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
+                .eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是)
                 .isNotNull(ChargeOrder::getEndTime)
                 .orderByAsc(ChargeOrder::getEndTime)
                 .list();
@@ -80,10 +82,10 @@ public class StopDelayServiceImpl implements DelayService<DelayChargeOrder> {
                     // 停止充电
                     var order = delayedItem.data;
                     threadLocal.set(order.getStartChargeSeq());
-                    // 查询设备最新订单是否是当前预约订单,是则按计划停止
-                    var currentChargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getConnectorId, order.getConnectorId()).orderByDesc(ChargeOrder::getCreateTime).one();
+                    // 查询设备最新订单是否是当前预约订单,是则按计划停止
+                    var currentChargeOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getConnectorId, order.getConnectorId()).orderByDesc(ChargeOrder::getCreateTime).list().get(0);
                     if (currentChargeOrder.getStartChargeSeq().equals(order.getStartChargeSeq())) {
-                        chargeService.queryStopCharge(order.getConnectorId());
+                        chargeService.queryStopCharge(order.getUserId(), order.getConnectorId());
                         log.info("预约充电停止成功:用户:{},订单号:{},预约停止时间:{}", order.getUserId(), order.getStartChargeSeq(), order.getEndTime());
                         // 线程休眠100ms
                         Thread.sleep(100);
@@ -120,10 +122,10 @@ public class StopDelayServiceImpl implements DelayService<DelayChargeOrder> {
     }
 
     @Override
-    public boolean removeFromOrderDelayQueue(DelayChargeOrder delayChargeOrder) {
-        if (delayChargeOrder == null) {
+    public boolean removeFromOrderDelayQueue(String startChargeSeq) {
+        if (CommUtil.isEmptyOrNull(startChargeSeq)) {
             return false;
         }
-        return STOP_DELAY_QUEUE.removeIf(queue -> queue.data.getStartChargeSeq().equals(delayChargeOrder.getStartChargeSeq()));
+        return STOP_DELAY_QUEUE.removeIf(queue -> queue.data.getStartChargeSeq().equals(startChargeSeq));
     }
 }