Просмотр исходного кода

优化点 EN+充电状态推送更新数据库过于频繁问题

skyline 1 год назад
Родитель
Сommit
9daa136eb0

+ 2 - 1
mapper/src/main/java/com/kym/mapper/miniapp/ChargeOrderMapper.java

@@ -6,6 +6,7 @@ import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
 import com.kym.entity.admin.vo.CustomOrderVo;
 import com.kym.entity.admin.vo.StationStatVo;
 import com.kym.entity.admin.vo.StationStatVo;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.ChargeOrder;
+import com.kym.mapper.mybatisplus.MyBaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
@@ -19,7 +20,7 @@ import java.util.Map;
  * @author skyline
  * @author skyline
  * @since 2023-08-08
  * @since 2023-08-08
  */
  */
-public interface ChargeOrderMapper extends MPJBaseMapper<ChargeOrder> {
+public interface ChargeOrderMapper extends MyBaseMapper<ChargeOrder> {
 
 
     List<CustomOrderVo> listChargeOrders(@Param("params") CustomChargeOrdersQueryParam params);
     List<CustomOrderVo> listChargeOrders(@Param("params") CustomChargeOrdersQueryParam params);
 
 

+ 50 - 0
miniapp/src/main/java/com/kym/miniapp/jobs/EquipmentChargeStatusJob.java

@@ -0,0 +1,50 @@
+package com.kym.miniapp.jobs;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.kym.common.utils.CommUtil;
+import com.kym.entity.common.RedisKeys;
+import com.kym.entity.miniapp.ChargeOrder;
+import com.kym.service.miniapp.ChargeOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+
+/**
+ * @author skyline
+ * 设备充电状态信息(订单信息)更新定时任务
+ * 2024-08-12
+ */
+@Component
+@Slf4j
+public class EquipmentChargeStatusJob {
+
+    private final StringRedisTemplate redisTemplate;
+    private final ChargeOrderService chargeOrderService;
+
+    public EquipmentChargeStatusJob(StringRedisTemplate redisTemplate, ChargeOrderService chargeOrderService) {
+        this.redisTemplate = redisTemplate;
+        this.chargeOrderService = chargeOrderService;
+    }
+
+    // 每5分钟执行一次
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void executeMpUserRelationJob() {
+        log.info("设备充电状态信息(订单信息)更新定时任务启动...");
+        var orders = redisTemplate.opsForHash().values(RedisKeys.CHARGE_ORDER_EQUIP_CHARGE_STATUS);
+        if (CommUtil.isNotEmptyAndNull(orders)) {
+            var orderList = new ArrayList<ChargeOrder>();
+            orders.forEach(order -> {
+                var chargeOrder = JSONObject.parseObject(order.toString(), ChargeOrder.class);
+                orderList.add(chargeOrder);
+            });
+            chargeOrderService.updateBatchByQueryWrapper(orderList, order ->
+                    new QueryWrapper<ChargeOrder>().eq("start_charge_seq", order.getStartChargeSeq()));
+        }
+        log.info("设备充电状态信息(订单信息)更新定时任务结束...");
+    }
+
+}

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

@@ -194,6 +194,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
      *
      *
      * @param json
      * @param json
      * @return
      * @return
+     * @see com.kym.miniapp.jobs.EquipmentChargeStatusJob#executeMpUserRelationJob()
      */
      */
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
@@ -215,8 +216,8 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         // 优化点 EN+一分钟推送一次,同时充电人数多的时候写入数据库过于频繁
         // 优化点 EN+一分钟推送一次,同时充电人数多的时候写入数据库过于频繁
         // redis保存(更新)订单信息
         // redis保存(更新)订单信息
         redisTemplate.opsForHash().put(RedisKeys.CHARGE_ORDER_EQUIP_CHARGE_STATUS, startChargeSeq, dataStr);
         redisTemplate.opsForHash().put(RedisKeys.CHARGE_ORDER_EQUIP_CHARGE_STATUS, startChargeSeq, dataStr);
-
-        chargeOrderService.updateById(chargeOrder);
+        // 将数据库写入操作放到定时任务中
+        // chargeOrderService.updateById(chargeOrder);
         return """
         return """
                 {
                 {
                     "StartChargeSeq":"%s",
                     "StartChargeSeq":"%s",

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

@@ -1,6 +1,5 @@
 package com.kym.service.miniapp;
 package com.kym.service.miniapp;
 
 
-import com.github.yulichang.base.MPJBaseService;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
 import com.kym.entity.admin.queryParams.CustomChargeOrdersQueryParam;
 import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.queryParams.StatQueryParam;
 import com.kym.entity.admin.vo.CustomOrderVo;
 import com.kym.entity.admin.vo.CustomOrderVo;
@@ -9,6 +8,7 @@ import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.queryParams.OrderQueryParams;
 import com.kym.entity.miniapp.queryParams.OrderQueryParams;
 import com.kym.entity.miniapp.vo.ChargeOrderVo;
 import com.kym.entity.miniapp.vo.ChargeOrderVo;
+import com.kym.service.mybatisplus.MyBaseService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 
 
 import java.util.List;
 import java.util.List;
@@ -22,7 +22,7 @@ import java.util.Map;
  * @author skyline
  * @author skyline
  * @since 2023-08-08
  * @since 2023-08-08
  */
  */
-public interface ChargeOrderService extends MPJBaseService<ChargeOrder> {
+public interface ChargeOrderService extends MyBaseService<ChargeOrder> {
 
 
     ChargeOrder getChargingOrderByUserId(Long userId);
     ChargeOrder getChargingOrderByUserId(Long userId);
 
 

+ 2 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -27,6 +27,7 @@ import com.kym.service.cache.KymCache;
 import com.kym.service.miniapp.ChargeOrderService;
 import com.kym.service.miniapp.ChargeOrderService;
 import com.kym.service.miniapp.UserCouponService;
 import com.kym.service.miniapp.UserCouponService;
 import com.kym.service.miniapp.UserRechargeRightsService;
 import com.kym.service.miniapp.UserRechargeRightsService;
+import com.kym.service.mybatisplus.MyBaseServiceImpl;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.SneakyThrows;
 import lombok.SneakyThrows;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
@@ -53,7 +54,7 @@ import java.util.stream.Collectors;
  */
  */
 @Service
 @Service
 @DS("db-miniapp")
 @DS("db-miniapp")
-public class ChargeOrderServiceImpl extends MPJBaseServiceImpl<ChargeOrderMapper, ChargeOrder> implements ChargeOrderService {
+public class ChargeOrderServiceImpl extends MyBaseServiceImpl<ChargeOrderMapper, ChargeOrder> implements ChargeOrderService {
 
 
 
 
     private final ExportService exportService;
     private final ExportService exportService;