Explorar o código

收藏和站点相关接口

skyline %!s(int64=2) %!d(string=hai) anos
pai
achega
9daa25ebfb

+ 11 - 2
entity/src/main/java/com/kym/entity/admin/Station.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.annotation.JSONField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -113,8 +114,16 @@ public class Station implements Serializable {
 
     /**
      * 充电桩位置坐标
-     */
-    @TableField(typeHandler = FastjsonTypeHandler.class)
+     *
+     * FastjsonTypeHandler
+     * 支持 MVC JSON 解析
+     * 不支持 MySQL JSON 解析
+     *
+     * JacksonTypeHandler
+     * 支持 MVC JSON 解析
+     * 支持 MySQL JSON 解析
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
     private JSONObject location;
     /**
      * 站点引导

+ 6 - 0
entity/src/main/java/com/kym/entity/miniapp/vo/CollectVo.java

@@ -0,0 +1,6 @@
+package com.kym.entity.miniapp.vo;/**
+ * @description
+ * @author skyline
+ * @date 2023-08-14 14:08
+ */public class CollectVo {
+}

+ 1 - 1
mapper/src/main/resources/mappers/admin/StationMapper.xml

@@ -19,7 +19,7 @@
         <result column="station_type" property="stationType" />
         <result column="station_status" property="stationStatus" />
         <result column="parking_num" property="parkingNum" />
-        <result column="location" property="location" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+        <result column="location" property="location" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
         <result column="site_guide" property="siteGuide" />
         <result column="construction" property="construction" />
         <result column="pictures" property="pictures" />

+ 14 - 0
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -162,4 +162,18 @@ public class ChargerController {
     }
 
 
+    //====================================================以下是手动同步数据接口==============================================================
+    // TODO: 2023-08-14  开发运营后台时挪到admin模块
+    /**
+     * 拉取EN+充电站信息数据并更新本地服务器数据
+     *
+     * @return
+     */
+    @GetMapping("/pullEnStations")
+    R pullEnStationInfos() {
+        stationService.pullEnStationInfos();
+        return R.success();
+    }
+
+
 }

+ 2 - 6
miniapp/src/main/java/com/kym/miniapp/controller/UserController.java

@@ -14,8 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Map;
-
 /**
  * <p>
  * 用户表 前端控制器
@@ -61,7 +59,7 @@ public class UserController {
     @GetMapping("/refresh")
     public R refreshToken() {
         // 7天有效期
-        StpUtil.renewTimeout(3600*24*7L);
+        StpUtil.renewTimeout(3600 * 24 * 7L);
         return R.success();
     }
 
@@ -102,9 +100,7 @@ public class UserController {
     @SysLog("收藏列表")
     @GetMapping("/collectList")
     R listCollect() {
-        StpUtil.checkLogin();
-        var userId = StpUtil.getSession().getLong("userId");
-        return R.success(collectService.listByMap(Map.of("user_id", userId)));
+        return R.success(collectService.listCollect());
     }
 
     @SysLog("收藏")

+ 7 - 3
service/src/main/java/com/kym/service/admin/StationService.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.kym.entity.admin.Station;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kym.entity.enplus.StationStatusInfo;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -18,9 +19,12 @@ import java.util.List;
  */
 public interface StationService extends IService<Station> {
 
-    List<Station> queryStationInfo(int pageNum, int pageSize) throws JsonProcessingException;
+    public List<Station> queryStationInfo(int pageNum, int pageSize) throws JsonProcessingException;
 
-    List<StationStatusInfo> stationStatus(String[] ids);
+    public List<StationStatusInfo> stationStatus(String[] ids);
 
-    JSONObject stationStats(String stationId, String startTime, String endTime);
+    public JSONObject stationStats(String stationId, String startTime, String endTime);
+
+    @Transactional(rollbackFor = Exception.class)
+    public void pullEnStationInfos();
 }

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

@@ -1,10 +1,8 @@
 package com.kym.service.admin.impl;
 
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.fastjson2.JSONReader;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.kym.common.enums.EnPlusApi;
 import com.kym.common.utils.AESUtil;
 import com.kym.entity.admin.Station;
@@ -16,6 +14,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -28,6 +27,7 @@ import java.util.List;
  * @since 2023-08-12
  */
 @Service
+@DS("db-admin")
 public class StationServiceImpl extends ServiceImpl<StationMapper, Station> implements StationService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(StationServiceImpl.class);
@@ -45,13 +45,8 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
                 }
                 """.formatted(pageNum, pageSize);
         var response = enPlusService.enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_INFO.getApi(), enPlusService.buildParams(param));
-        // TODO: 2023-08-12 包装成自己的数据格式
         var enStations = JSONObject.parseObject(AESUtil.decrypt(response.getData()));
-
-        ObjectMapper mapper = new ObjectMapper();
-//        var station = mapper.convertValue(enStations.get("StationInfos"), List<Station>.class);
-        var stations = JSONArray.parseArray(enStations.get("StationInfos").toString(), Station.class);
-        return stations;
+        return enStations.getJSONArray("StationInfos").toJavaList(Station.class);
 
     }
 
@@ -64,9 +59,8 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
                 }
                 """.formatted(String.join("\",\"", ids));
         var response = enPlusService.enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATUS.getApi(), enPlusService.buildParams(param));
-        // TODO: 2023-08-12 包装成自己的数据格式
         var enStationStatus = JSONObject.parseObject(AESUtil.decrypt(response.getData()));
-        return enStationStatus.getJSONArray("StationStatusInfos").toJavaList(StationStatusInfo.class, JSONReader.Feature.SupportArrayToBean);
+        return enStationStatus.getJSONArray("StationStatusInfos").toJavaList(StationStatusInfo.class);
     }
 
     @Override
@@ -83,4 +77,13 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
         return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
+    /**
+     * 拉取EN+充电站信息数据并更新本地服务器数据
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void pullEnStationInfos() {
+        saveOrUpdateBatch(queryStationInfo(1, 1000));
+    }
+
 }

+ 8 - 1
service/src/main/java/com/kym/service/miniapp/CollectService.java

@@ -1,8 +1,11 @@
 package com.kym.service.miniapp;
 
+import com.kym.entity.enplus.StationStatusInfo;
 import com.kym.entity.miniapp.Collect;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 收藏表 服务类
@@ -13,5 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface CollectService extends IService<Collect> {
 
-    void updateCollect(Long stationId, byte status);
+    void updateCollect(String stationId, Integer status);
+
+    List<StationStatusInfo> getCollectList();
+
+    List<Collect> listCollect();
 }

+ 40 - 1
service/src/main/java/com/kym/service/miniapp/impl/CollectServiceImpl.java

@@ -1,11 +1,17 @@
 package com.kym.service.miniapp.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kym.entity.enplus.StationStatusInfo;
 import com.kym.entity.miniapp.Collect;
 import com.kym.mapper.miniapp.CollectMapper;
+import com.kym.service.admin.StationService;
 import com.kym.service.miniapp.CollectService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 收藏表 服务实现类
@@ -17,8 +23,41 @@ import org.springframework.stereotype.Service;
 @Service
 public class CollectServiceImpl extends ServiceImpl<CollectMapper, Collect> implements CollectService {
 
+    @Autowired
+    private StationService stationService;
+
+    @Override
+    public void updateCollect(String stationId, Integer status) {
+
+    }
+
+    /**
+     * 收藏列表
+     * 获取EN+对应站点数据
+     *
+     * @return
+     */
     @Override
-    public void updateCollect(Long stationId, byte status) {
+    public List<StationStatusInfo> getCollectList() {
+        var userid = StpUtil.getLoginIdAsLong();
+        var collectList = lambdaQuery().eq(Collect::getUserId, userid).list().stream().map(c -> String.valueOf(c.getStationId())).toArray(String[]::new);
+        if (collectList.length == 0) {
+            return stationService.stationStatus(collectList);
+        } else {
+            return null;
+        }
 
     }
+
+    /**
+     * 获取收藏列表,前端匹配站点详情数据
+     *
+     * @return
+     */
+    @Override
+    public List<Collect> listCollect() {
+        var userid = StpUtil.getLoginIdAsLong();
+        return lambdaQuery().eq(Collect::getUserId, userid).list();
+    }
+
 }