helixiao %!s(int64=2) %!d(string=hai) anos
pai
achega
6d58cb987f

+ 14 - 7
src/main/java/com/ydtech/modules/admin/service/GeoService.java

@@ -1,16 +1,15 @@
 package com.ydtech.modules.admin.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.geo.Circle;
-import org.springframework.data.geo.Distance;
-import org.springframework.data.geo.Metrics;
-import org.springframework.data.geo.Point;
+import org.springframework.data.geo.*;
 import org.springframework.data.redis.connection.RedisGeoCommands;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -40,14 +39,22 @@ public class GeoService {
         }
     }
 
+    public void move(List<String> list, String geoKey) {
+        for (String location : list) {
+            redisTemplate.opsForGeo().remove(geoKey,location);
+
+        }
+    }
+
 
 
     // 查找某位置附近的ID集合
-    public List<String> findNearbyIds(String pcGeoKey, double longitude, double latitude, double radius) {
+    public List<String> findNearbyIds(String geoKey, double longitude, double latitude, double radius) {
         Circle within = new Circle(new Point(longitude, latitude), new Distance(radius, Metrics.KILOMETERS));
         RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeCoordinates().includeDistance();
-        return redisTemplate.opsForGeo().radius(pcGeoKey, within, args)
-                .getContent().stream()
+        List<GeoResult<RedisGeoCommands.GeoLocation<String>>> content = redisTemplate.opsForGeo().radius(geoKey, within, args).getContent();
+        if (content .size()==0) return new ArrayList<String>();
+        return content.stream()
                 .map(result -> result.getContent().getName())
                 .collect(Collectors.toList());
     }

+ 10 - 9
src/main/java/com/ydtech/modules/admin/service/impl/SysGeographyPositionServiceImpl.java

@@ -119,7 +119,7 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
                 .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getProvince()), SysGeographyPosition::getProvince, sysGeographyPositionDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getCity()), SysGeographyPosition::getCity, sysGeographyPositionDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getDistrict()), SysGeographyPosition::getDistrict, sysGeographyPositionDto.getDistrict())
-                .in(SysGeographyPosition::getSource, Arrays.asList("1", "2")).eq(SysGeographyPosition::getStatus,1));
+                .in(SysGeographyPosition::getSource, Arrays.asList("1", "2")).eq(SysGeographyPosition::getStatus, 1));
         sysPcAddressNumVo.setAllNum(all);
         sysPcAddressNumVo.setProxyNum(proxyNum);
         sysPcAddressNumVo.setChannelNum(channelNum);
@@ -145,11 +145,11 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
         Map<String, List<SysGeographyPosition>> map;
         if (StringUtils.isEmpty(sysGeographyPositionDto.getProvince())) {
             map = sysGeographyPositionList.stream().collect(Collectors.groupingBy(SysGeographyPosition::getProvince));
-        }else {
+        } else {
             if (StringUtils.isNotEmpty(sysGeographyPositionDto.getCity())) {
                 map = sysGeographyPositionList.stream().collect(Collectors.groupingBy(SysGeographyPosition::getDistrict));
 
-            }else {
+            } else {
                 map = sysGeographyPositionList.stream().collect(Collectors.groupingBy(SysGeographyPosition::getCity));
 
             }
@@ -172,10 +172,11 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
 
         geoService.addLocationGeography(list(), APP_GEO_KEY);
         List<String> nearbyIds = geoService.findNearbyIds(APP_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
-        if (CollectionUtil.isEmpty(nearbyIds)) return new ArrayList<>();
+        if (nearbyIds.size() == 0) return new ArrayList<>();
+        geoService.move(nearbyIds, APP_GEO_KEY);
         List<SysGeographyPosition> sysGeographyPositions = listByIds(nearbyIds);
         List<SysGeographyPositionInfoVo> sysGeographyPositionInfoVoList = BeanUtil.copyToList(sysGeographyPositions, SysGeographyPositionInfoVo.class);
-        if (sysGeographyPositionInfoVoList.size()==0) return sysGeographyPositionInfoVoList;
+        if (sysGeographyPositionInfoVoList.size() == 0) return sysGeographyPositionInfoVoList;
 
         for (SysGeographyPositionInfoVo sysGeographyPositionInfoVo : sysGeographyPositionInfoVoList) {
             SysUser sysUser = sysUserService.getById(sysGeographyPositionInfoVo.getId());
@@ -197,7 +198,7 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
         LambdaQueryWrapper<SysGeographyPosition> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysGeographyPosition::getLongitude, addressInfoDto.getLng());
         wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysGeographyPosition::getLatitude, addressInfoDto.getLat());
-        wrapper.in(SysGeographyPosition::getSource, Arrays.asList("1","2"));
+        wrapper.in(SysGeographyPosition::getSource, Arrays.asList("1", "2"));
         wrapper.orderByDesc(SysGeographyPosition::getCreateTime);
 
         Page<SysGeographyPosition> insOrdersPage = page(page, wrapper);
@@ -226,10 +227,10 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
         pcAddressHistoryInfoVo.setList(geographyPosition);
         QueryWrapper<SysGeographyPositionRecord> queryWrapper = new QueryWrapper<>();
         // 指定 COUNT(DISTINCT user_id) 查询
-        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates),"create_time",dates)
-                .in("source",Arrays.asList(1,2));
+        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates), "create_time", dates)
+                .in("source", Arrays.asList(1, 2));
         Map<String, Object> result = sysGeographyPositionRecordService.getMap(queryWrapper);
-        Long total = (Long)result.get("total");
+        Long total = (Long) result.get("total");
         pcAddressHistoryInfoVo.setOnlineNum(total);
         return pcAddressHistoryInfoVo;
     }

+ 19 - 18
src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

@@ -92,7 +92,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                .in(SysPcAddress::getSource, Arrays.asList("1","2"))
+                .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
                 .orderByDesc(SysPcAddress::getOperationTime));
 
@@ -104,7 +104,8 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
     public List<SysPcAddress> findLocationsWithinRadius(AdressRangeDto adressRangeDto) {
         geoService.addLocations(list(), PC_GEO_KEY);
         List<String> nearbyIds = geoService.findNearbyIds(PC_GEO_KEY, adressRangeDto.getLongitude(), adressRangeDto.getLatitude(), adressRangeDto.getRadius());
-        if (CollectionUtil.isEmpty(nearbyIds)) return new ArrayList<>();
+        if (nearbyIds.size() == 0) return new ArrayList<>();
+        geoService.move(nearbyIds, PC_GEO_KEY);
         return listByIds(nearbyIds);
     }
 
@@ -117,23 +118,23 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                .in(SysPcAddress::getSource, Arrays.asList("1","2")));
+                .in(SysPcAddress::getSource, Arrays.asList("1", "2")));
         Long channelNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                .eq(SysPcAddress::getSource,1));
+                .eq(SysPcAddress::getSource, 1));
         Long proxyNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                .eq(SysPcAddress::getSource,2));
+                .eq(SysPcAddress::getSource, 2));
 
         Long onlineNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>()
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
                 .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                .in(SysPcAddress::getSource, Arrays.asList("1","2")).eq(SysPcAddress::getStatus,1));
+                .in(SysPcAddress::getSource, Arrays.asList("1", "2")).eq(SysPcAddress::getStatus, 1));
 
 
         sysPcAddressNumVo.setAllNum(all);
@@ -149,23 +150,23 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         List<RegionInfoVo> regionInfoVos = new ArrayList<>();
         //全部:null   渠道:1 代理:2
         List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>()
-                        .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
-                        .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
-                        .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
-                        .in(SysPcAddress::getSource, Arrays.asList("1","2"))
-                        .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource()));
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getProvince()), SysPcAddress::getProvince, sysPcAddressDto.getProvince())
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getCity()), SysPcAddress::getCity, sysPcAddressDto.getCity())
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getDistrict()), SysPcAddress::getDistrict, sysPcAddressDto.getDistrict())
+                .in(SysPcAddress::getSource, Arrays.asList("1", "2"))
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource()));
 
         if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
 
         Map<String, List<SysPcAddress>> map;
         if (CollectionUtil.isEmpty(sysPcAddresses)) return regionInfoVos;
-        if (StringUtils.isEmpty(sysPcAddressDto.getProvince())){
+        if (StringUtils.isEmpty(sysPcAddressDto.getProvince())) {
             map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getProvince));
-        }else{
+        } else {
             if (StringUtils.isNotEmpty(sysPcAddressDto.getCity())) {
                 map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getDistrict));
 
-            }else {
+            } else {
                 map = sysPcAddresses.stream().collect(Collectors.groupingBy(SysPcAddress::getCity));
 
             }
@@ -188,7 +189,7 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         LambdaQueryWrapper<SysPcAddress> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLng()), SysPcAddress::getLongitude, addressInfoDto.getLng());
         wrapper.eq(StringUtils.isNotEmpty(addressInfoDto.getLat()), SysPcAddress::getLatitude, addressInfoDto.getLat());
-        wrapper.in(SysPcAddress::getSource, Arrays.asList("1","2"));
+        wrapper.in(SysPcAddress::getSource, Arrays.asList("1", "2"));
         wrapper.orderByDesc(SysPcAddress::getOperationTime);
 
         Page<SysPcAddress> insOrdersPage = page(page, wrapper);
@@ -204,10 +205,10 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         pcAddressHistoryInfoVo.setList(pcAddress);
         QueryWrapper<SysPcAddressHistory> queryWrapper = new QueryWrapper<>();
         // 指定 COUNT(DISTINCT user_id) 查询
-        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates),"operation_time",dates)
-                .in("source",Arrays.asList(1,2));
+        queryWrapper.select("COUNT(DISTINCT user_id) AS total").likeRight(StringUtils.isNotEmpty(dates), "operation_time", dates)
+                .in("source", Arrays.asList(1, 2));
         Map<String, Object> result = sysPcAddressHistoryService.getMap(queryWrapper);
-        Long total = (Long)result.get("total");
+        Long total = (Long) result.get("total");
         pcAddressHistoryInfoVo.setOnlineNum(total);
 
         return pcAddressHistoryInfoVo;