Explorar el Código

运营平台用户关联多站点

skyline hace 2 años
padre
commit
3a872d7e80

+ 2 - 2
admin/src/main/java/com/kym/admin/controller/StationController.java

@@ -44,10 +44,10 @@ public class StationController {
     @GetMapping("listStation")
     R<?> listStation(@RequestParam(required = false) String stationName) {
         // 判断数据权限
-        var adminStationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
+        var adminStationIds = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong());
         var res = stationService.lambdaQuery()
                 .eq(Station::getStationStatus, Station.STATION_STATUS_正常使用)
-                .eq(isNotNull(adminStationId), Station::getStationId, adminStationId)
+                .in(isNotNull(adminStationIds), Station::getStationId, adminStationIds)
                 .like(isNotNull(stationName), Station::getStationName, stationName)
                 .orderByAsc(Station::getStationId).list();
         return R.success(res);

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

@@ -3,6 +3,8 @@ package com.kym.entity.admin.queryParams;
 import com.kym.entity.common.PageParams;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author skyline
  * @description 充电桩查询参数
@@ -14,7 +16,7 @@ public class EquipmentQueryParam extends PageParams {
     /**
      * 充电站id
      */
-    private String stationId;
+    private List<String> stationIds;
 
     /**
      * 充电桩id

+ 15 - 1
service/src/main/java/com/kym/service/admin/impl/AdminUserStationServiceImpl.java

@@ -10,6 +10,8 @@ import com.kym.service.cache.KymCache;
 import jakarta.annotation.PostConstruct;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -27,7 +29,19 @@ public class AdminUserStationServiceImpl extends MPJBaseServiceImpl<AdminUserSta
     @PostConstruct
     private void init() {
         DynamicDataSourceContextHolder.push("db-admin");
-        KymCache.INSTANCE.putAdminUser2Station(list().stream().collect(Collectors.toMap(AdminUserStation::getAdminUserId, AdminUserStation::getStationId)));
+        var adminUser2Stations = list().stream().collect(Collectors.toMap(AdminUserStation::getAdminUserId,
+                adminUserStation -> {
+                    List<String> stationIds = new ArrayList<>();
+                    stationIds.add(adminUserStation.getStationId());
+                    return stationIds;
+                },
+                (v1, v2) -> {
+                    v1.addAll(v2);
+                    return v1;
+                }
+        ));
+
+        KymCache.INSTANCE.putAdminUser2Stations(adminUser2Stations);
         DynamicDataSourceContextHolder.poll();
     }
 }

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

@@ -33,14 +33,14 @@ public class ConnectorInfoServiceImpl extends MPJBaseServiceImpl<ConnectorInfoMa
     @Override
     public PageBean<ConnectorInfoVo> listConnectors(EquipmentQueryParam params) {
         // 判断数据权限
-        var adminStationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
-        if (adminStationId != null) {
-            params.setStationId(adminStationId);
+        var adminStationIds = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong());
+        if (adminStationIds != null) {
+            params.setStationIds(adminStationIds);
         }
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         var connectorInfos = lambdaQuery()
                 .likeLeft(isNotNull(params.getEquipmentId()), ConnectorInfo::getEquipmentId, params.getEquipmentId())
-                .eq(isNotNull(params.getStationId()), ConnectorInfo::getStationId, params.getStationId())
+                .in(isNotNull(params.getStationIds()), ConnectorInfo::getStationId, params.getStationIds())
                 .eq(isNotNull(params.getStatus()), ConnectorInfo::getStatus, params.getStatus())
                 .list();
         // 转换成vo

+ 1 - 1
service/src/main/java/com/kym/service/admin/impl/EquipmentInfoServiceImpl.java

@@ -54,7 +54,7 @@ public class EquipmentInfoServiceImpl extends MPJBaseServiceImpl<EquipmentInfoMa
     public Map<Integer, Long> statEquipmentStatus(String stationId) {
         if (CommUtil.null2Long(stationId) <= 0) {
             // 判断数据权限
-            stationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
+            stationId = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong()).get(0);
         }
         // 获取指定站点下的充电桩
         var equipmentInfos = lambdaQuery().eq(isNotNull(stationId), EquipmentInfo::getStationId, stationId).list();

+ 19 - 3
service/src/main/java/com/kym/service/cache/KymCache.java

@@ -1,5 +1,6 @@
 package com.kym.service.cache;
 
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -15,6 +16,7 @@ public enum KymCache {
     private static ConcurrentHashMap<String, String> CONNECTOR_ID_STATION_ID_MAPPING = new ConcurrentHashMap<>();
     private static ConcurrentHashMap<String, String> STATION_MAPPING = new ConcurrentHashMap<>();
     private static ConcurrentHashMap<Long, String> ADMIN_USER_STATION = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<Long, List<String>> ADMIN_USER_STATIONS = new ConcurrentHashMap<>();
     private static ConcurrentHashMap<String, String> EQUIPMENT_ID_PARKING_NO_MAPPING = new ConcurrentHashMap<>();
 
     public void putShort2EquipmentId(Map<String, String> map) {
@@ -78,9 +80,8 @@ public enum KymCache {
         return STATION_MAPPING.get(stationId);
     }
 
-    // TODO: 2023-11-24 这里目前只有一对一关系,后续改一对多
-    public void putAdminUser2Station(Map<Long, String> map) {
-        ADMIN_USER_STATION.putAll(map);
+    public void putAdminUser2Stations(Map<Long, List<String>> map) {
+        ADMIN_USER_STATIONS.putAll(map);
     }
 
     /**
@@ -98,6 +99,21 @@ public enum KymCache {
         return res;
     }
 
+    /**
+     * 获取运营平台操作员有权限的站点ID
+     *
+     * @param adminUserId
+     * @return
+     */
+    public List<String> getAdminUserStationIds(Long adminUserId) {
+        var res = ADMIN_USER_STATIONS.get(adminUserId);
+//        if (res == null) {
+//            var adminUserStation = adminUserStationService.lambdaQuery().eq(AdminUserStation::getAdminUserId, adminUserId).one();
+//            res = adminUserStation == null ? null : adminUserStation.getStationId();
+//        }
+        return res;
+    }
+
     public void putConnectorId2ParkingNo(Map<String, String> map) {
         EQUIPMENT_ID_PARKING_NO_MAPPING.putAll(map);
     }

+ 9 - 10
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -83,9 +83,8 @@ public class ChargeOrderServiceImpl extends MPJBaseServiceImpl<ChargeOrderMapper
             params.setConnectorId(connectorId);
         }
         // 判断数据权限
-        var adminStationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
-        if (adminStationId != null) {
-            params.setStationId(adminStationId);
+        if (params.getStationId() == null) {
+            params.setStationId(KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong()) == null ? null : KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong()).get(0));
         }
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         // 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
@@ -107,9 +106,9 @@ public class ChargeOrderServiceImpl extends MPJBaseServiceImpl<ChargeOrderMapper
             params.setConnectorId(connectorId);
         }
         // 判断数据权限
-        var adminStationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
-        if (adminStationId != null) {
-            params.setStationId(adminStationId);
+        var adminStationIds = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong());
+        if (params.getStationId() != null && adminStationIds.contains(params.getStationId())) {
+            params.setStationId(adminStationIds.get(0));
         }
         // 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
         var result = baseMapper.listChargeOrders(params);
@@ -196,9 +195,9 @@ public class ChargeOrderServiceImpl extends MPJBaseServiceImpl<ChargeOrderMapper
     @Override
     public PageBean<StationStatVo> stationStat(StatQueryParam params) {
         // 判断数据权限
-        var adminStationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
-        if (adminStationId != null) {
-            params.setStationId(adminStationId);
+        var adminStationIds = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong());
+        if (params.getStationId() == null && !adminStationIds.isEmpty()) {
+            params.setStationId(adminStationIds.get(0));
         }
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         var res = baseMapper.stationStat(params).stream().peek(item -> {
@@ -221,7 +220,7 @@ public class ChargeOrderServiceImpl extends MPJBaseServiceImpl<ChargeOrderMapper
     public Map<String, Object> stationTodayStat(String stationId) {
         if (CommUtil.null2Long(stationId) <= 0) {
             // 判断数据权限
-            stationId = KymCache.INSTANCE.getAdminUserStationId(StpUtil.getLoginIdAsLong());
+            stationId = KymCache.INSTANCE.getAdminUserStationIds(StpUtil.getLoginIdAsLong()).get(0);
         }
 
         return baseMapper.stationTodayStat(stationId);