Przeglądaj źródła

充电业务优化

skyline 2 lat temu
rodzic
commit
28d0c54ab7

+ 2 - 2
service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -144,11 +144,11 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         }
 
         // 设备状态变为空闲,校验是否有预约订单,有则清除预约订单数据。
-        if (connectorStatus == 1 && ConnectorStatusCache.INSTANCE.get(equipmentId) != 1) {
+        if (connectorStatus == 1 && ConnectorStatusCache.INSTANCE.get(connectorId) != 1) {
             LOGGER.info("设备:{}状态转为空闲,清除设备预约数据...", connectorId);
             chargeService.cancelBookingByConnector(connectorId);
         }
-        ConnectorStatusCache.INSTANCE.put(equipmentId, connectorStatus);
+        ConnectorStatusCache.INSTANCE.put(connectorId, connectorStatus);
 
         return """
                 {

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

@@ -1,6 +1,7 @@
 package com.kym.service.miniapp.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
@@ -29,6 +30,8 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
+import java.net.SocketTimeoutException;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.Map;
@@ -129,7 +132,6 @@ public class ChargeServiceImpl implements ChargeService {
         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();
         cancelBookByChargeOrder(chargeOrder);
@@ -144,7 +146,6 @@ public class ChargeServiceImpl implements ChargeService {
         var chargeOrder = chargeOrderService.lambdaQuery()
                 .eq(ChargeOrder::getConnectorId, connectorId)
                 .eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是)
-                .eq(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_未知)
                 .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
                 .one();
         cancelBookByChargeOrder(chargeOrder);
@@ -157,10 +158,9 @@ public class ChargeServiceImpl implements ChargeService {
             stopDelayService.removeFromDelayQueue(chargeOrder.getStartChargeSeq());
             // 修改订单状态为取消
             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_已取消)
+                    .eq(ChargeOrder::getStartChargeSeq, chargeOrder.getStartChargeSeq())
                     .update();
         } else {
             LOGGER.info("用户没有预约中的订单");
@@ -179,16 +179,20 @@ public class ChargeServiceImpl implements ChargeService {
      * @return
      */
     @Override
-    @DSTransactional(noRollbackFor = java.net.SocketTimeoutException.class)
     public Map<String, String> queryStartCharge(Long userId, String connectorId, Long userRechargeRightsId, Boolean isBooking, LocalDateTime startTime, LocalDateTime endTime) {
         var map = getConnectorIdAndStationId(connectorId);
         connectorId = map.get("connectorId");
+
+        if (CommUtil.isEmptyOrNull(connectorId)) {
+            throw new BusinessException("请输入正确的设备编号");
+        }
+
         var stationId = map.get("stationId");
 
         LOGGER.info("用户:{},站点:{},设备:{}请求充电", userId, stationId, connectorId);
 
         // 设备是否插枪
-        if (ConnectorStatusCache.INSTANCE.get(connectorId) != EquipmentInfo.SERVICE_STATUS_已连接) {
+        if (ConnectorStatusCache.INSTANCE.get(connectorId) == EquipmentInfo.SERVICE_STATUS_空闲) {
             throw new BusinessException("请插入充电枪");
         }
 
@@ -235,6 +239,7 @@ public class ChargeServiceImpl implements ChargeService {
 
             // 组装订单数据
             order = new ChargeOrder();
+            order.setIsBooking(isBooking ? ChargeOrder.IS_BOOKING_是 : ChargeOrder.IS_BOOKING_否);
             order.setUserId(userId);
             order.setStationId(stationId);
             order.setStartChargeSeq(startChargeSeq);
@@ -288,9 +293,14 @@ public class ChargeServiceImpl implements ChargeService {
         if (equipAuth.containsKey("SuccStat") && equipAuth.getIntValue("SuccStat") == 0) {
             // 启动充电
             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::getIsBooking, ChargeOrder.IS_BOOKING_否)
+                        .set(ChargeOrder::getChargeStatus, startCharge.getIntValue("StartChargeSeqStat"))
+                        .eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq())
+                        .update();
                 return Map.of("startChargeSeq", order.getStartChargeSeq());
             } else {
                 // 启动充电失败
@@ -369,6 +379,7 @@ public class ChargeServiceImpl implements ChargeService {
                     .set(ChargeOrder::getSumPeriod, (int) (data.getIntValue("SumPeriod")))
                     .set(ChargeOrder::getChargeDetail, data.getString("ChargeDetails"))
                     .set(ChargeOrder::getChargeStatus, data.getIntValue("StartChargeSeqStat"))
+                    .eq(ChargeOrder::getStartChargeSeq, startChargeSeq)
                     .update();
 
             chargeOrder.setSoc(data.getDoubleValue("Soc"));