helixiao 2 年 前
コミット
74d2c91f74
17 ファイル変更446 行追加28 行削除
  1. 31 5
      src/main/java/com/ydtech/modules/admin/controller/SysPcAddressController.java
  2. 5 3
      src/main/java/com/ydtech/modules/admin/controller/websocket/SysGeographyPositionController.java
  3. 47 8
      src/main/java/com/ydtech/modules/admin/controller/websocket/WebSocketServer.java
  4. 21 0
      src/main/java/com/ydtech/modules/admin/model/SysGeographyPosition.java
  5. 18 0
      src/main/java/com/ydtech/modules/admin/model/dto/AdressRangeDto.java
  6. 25 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysGeographyPositionDto.java
  7. 24 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressDto.java
  8. 38 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressNumVo.java
  9. 12 1
      src/main/java/com/ydtech/modules/admin/model/po/SysPcAddress.java
  10. 17 0
      src/main/java/com/ydtech/modules/admin/model/vo/RegionInfoVo.java
  11. 13 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysGeographyPositionInfoVo.java
  12. 1 1
      src/main/java/com/ydtech/modules/admin/model/vo/SysGeographyPositionVo.java
  13. 47 0
      src/main/java/com/ydtech/modules/admin/service/GeoService.java
  14. 3 1
      src/main/java/com/ydtech/modules/admin/service/SysGeographyPositionService.java
  15. 11 2
      src/main/java/com/ydtech/modules/admin/service/SysPcAddressService.java
  16. 39 3
      src/main/java/com/ydtech/modules/admin/service/impl/SysGeographyPositionServiceImpl.java
  17. 94 4
      src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

+ 31 - 5
src/main/java/com/ydtech/modules/admin/controller/SysPcAddressController.java

@@ -3,10 +3,10 @@ package com.ydtech.modules.admin.controller;
 
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.IpInfoDto;
-import com.ydtech.modules.admin.model.dto.SysGeographyPositionPageDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.RegionInfoVo;
 import com.ydtech.modules.admin.service.SysPcAddressHistoryService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
 import com.ydtech.modules.admin.service.SysUserService;
@@ -31,10 +31,10 @@ public class SysPcAddressController extends BaseController{
 
     private final SysPcAddressHistoryService sysPcAddressHistoryService;
 
-    @GetMapping("/queryPosition")
+    @PostMapping("/queryPosition")
     @ApiOperation(value = "查询所有用户的位置列表")
-    public HttpResult<List<SysPcAddress>> queryPosition() {
-        return HttpResult.ok("success", this.sysPcAddressService.getEveryone());
+    public HttpResult<List<SysPcAddress>> queryPosition(@RequestBody SysPcAddressDto sysPcAddressDto) {
+        return HttpResult.ok("success", this.sysPcAddressService.getEveryone(sysPcAddressDto));
     }
 
     @PostMapping("/queryPositionList")
@@ -59,4 +59,30 @@ public class SysPcAddressController extends BaseController{
 
     }
 
+    /**
+     * pc地址范围查询
+     */
+    @PostMapping("/locations")
+    @ApiOperation(value = "pc地址范围查询")
+    public List<SysPcAddress> getLocationsWithinRadius(@RequestBody AdressRangeDto adressRangeDto) {
+        return sysPcAddressService.findLocationsWithinRadius(adressRangeDto);
+    }
+
+    @GetMapping("/queryPcNum")
+    @ApiOperation(value = "查询所有用户的位置列表")
+    public HttpResult<SysPcAddressNumVo> queryPcNum() {
+        return HttpResult.ok("success", this.sysPcAddressService.queryPcNum());
+    }
+
+    @GetMapping("/queryRegionInfo/{type}")
+    @ApiOperation(value = "查询所有用户的位置列表")
+    public HttpResult<List<RegionInfoVo>> queryRegionInfo(@PathVariable("type") Integer type) {
+        return HttpResult.ok("success", this.sysPcAddressService.queryRegionInfo(type));
+    }
+
+
+
+
+
+
 }

+ 5 - 3
src/main/java/com/ydtech/modules/admin/controller/websocket/SysGeographyPositionController.java

@@ -4,7 +4,9 @@ package com.ydtech.modules.admin.controller.websocket;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
+import com.ydtech.modules.admin.model.dto.SysGeographyPositionDto;
 import com.ydtech.modules.admin.model.dto.SysGeographyPositionPageDto;
+import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
 import com.ydtech.modules.admin.service.SysGeographyPositionService;
 import com.ydtech.modules.order.entity.BasePageResult;
@@ -23,11 +25,11 @@ public class SysGeographyPositionController {
     @Resource
     private SysGeographyPositionService sysGeographyPositionService;
 
-    @GetMapping("/queryPosition")
+    @PostMapping("/queryPosition")
     @ApiOperation(value = "查询所有用户的位置列表")
-    public HttpResult<SysGeographyPositionVo> queryPosition() {
+    public HttpResult<SysGeographyPositionVo> queryPosition(@RequestBody SysGeographyPositionDto sysGeographyPositionDto) {
 
-        return HttpResult.ok("success", this.sysGeographyPositionService.queryPosition());
+        return HttpResult.ok("success", this.sysGeographyPositionService.queryPosition(sysGeographyPositionDto));
     }
 
     @PostMapping("/queryPositionList")

+ 47 - 8
src/main/java/com/ydtech/modules/admin/controller/websocket/WebSocketServer.java

@@ -2,10 +2,15 @@ package com.ydtech.modules.admin.controller.websocket;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.config.SpringContextUtils;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
 import com.ydtech.modules.admin.service.SysGeographyPositionService;
 import com.ydtech.modules.admin.service.SysUserService;
@@ -57,7 +62,10 @@ public class WebSocketServer {
         log.info("用户连接:" + userId + ",当前在线人数为:" + onlineCount);
         sendMessage("连接成功");
     }
-
+//    `prov` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '省会',
+//            `city` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '城市',
+//            `district` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '区县',
+//            `street` varchar(66) DEFAULT NULL COMMENT '街道',
 
     @OnMessage
     public void onMessage(String message, Session session) {
@@ -65,8 +73,14 @@ public class WebSocketServer {
         String userId = jsonObject.getString("userId");
         String longitude = jsonObject.getString("longitude");
         String latitude = jsonObject.getString("latitude");
-        String address = jsonObject.getString("address");
-        saveLocationData(userId, latitude, longitude,address);
+        String province = jsonObject.getString("province");
+        String city = jsonObject.getString("city");
+        String district = jsonObject.getString("district");
+        String street = jsonObject.getString("street");
+        String streetNum = jsonObject.getString("streetNum");
+        String poiName = jsonObject.getString("poiName");
+        String cityCode = jsonObject.getString("cityCode");
+        saveLocationData(userId, latitude, longitude,province,city,district,street,streetNum,poiName,cityCode);
         log.info("服务端收到消息:{} ,主体:{}", message, userId);
         sendMessage("服务端已收到信息:" +message);
     }
@@ -107,23 +121,39 @@ public class WebSocketServer {
         this.session.getAsyncRemote().sendText(message);
     }
 
-    public void saveLocationData(String userId, String latitude, String longitude,String address) {
+    public void saveLocationData(String userId, String latitude, String longitude,
+                                 String province,String city,String district,
+                                 String street,String streetNum,String poiName,String cityCode) {
         SysGeographyPositionRecordService sysGeographyPositionRecordService = SpringContextUtils.getBean(SysGeographyPositionRecordService.class);
 
         SysGeographyPositionService sysGeographyPositionService= SpringContextUtils.getBean(SysGeographyPositionService.class);
         SysGeographyPosition sysGeographyPosition1 = sysGeographyPositionService.getById(userId);
+        SysDeptMapper sysDeptMapper = SpringContextUtils.getBean(SysDeptMapper.class);
+
+        SysUserService sysUserService = SpringContextUtils.getBean(SysUserService.class);
+        SysUser sysUser = sysUserService.getById(userId);
+
+        SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
+                .eq(SysDept::getId, sysUser.getDeptId()).eq(SysDept::getDelFlag, 0));
+
         if (sysGeographyPosition1 == null) {
             //不存在新增
-            SysUserService sysUserService = SpringContextUtils.getBean(SysUserService.class);
-            SysUser sysUser = sysUserService.getById(userId);
             SysGeographyPosition sysGeographyPosition = new SysGeographyPosition();
             sysGeographyPosition.setId(userId);
             sysGeographyPosition.setUserName(sysUser.getName());
             sysGeographyPosition.setLatitude(latitude);
             sysGeographyPosition.setLongitude(longitude);
-            sysGeographyPosition.setAddress(address);
+            sysGeographyPosition.setProvince(province);
+            sysGeographyPosition.setCity(city);
+            sysGeographyPosition.setDistrict(district);
+            sysGeographyPosition.setStreet(street);
+            sysGeographyPosition.setStreetNum(streetNum);
+            sysGeographyPosition.setPoiName(poiName);
+            sysGeographyPosition.setCityCode(cityCode);
+            sysGeographyPosition.setAddress(province + city + district + street);
             sysGeographyPosition.setCreateTime(new Date());
             sysGeographyPosition.setCreateBy(sysUser.getName());
+            sysGeographyPosition.setSource(sysDept.getManagementSource());
             sysGeographyPositionService.save(sysGeographyPosition);
             SysGeographyPositionRecord sysGeographyPositionRecord = BeanUtil.copyProperties(sysGeographyPosition, SysGeographyPositionRecord.class);
             sysGeographyPositionRecord.setId(null);
@@ -133,9 +163,18 @@ public class WebSocketServer {
             //存在更新
             sysGeographyPosition1.setLongitude(longitude);
             sysGeographyPosition1.setLatitude(latitude);
-            sysGeographyPosition1.setAddress(address);
+            sysGeographyPosition1.setProvince(province);
+            sysGeographyPosition1.setCity(city);
+            sysGeographyPosition1.setDistrict(district);
+            sysGeographyPosition1.setStreet(street);
+            sysGeographyPosition1.setStreetNum(streetNum);
+            sysGeographyPosition1.setPoiName(poiName);
+            sysGeographyPosition1.setCityCode(cityCode);
+            sysGeographyPosition1.setAddress(province + city + district + street);
             sysGeographyPosition1.setCreateTime(new Date());
+            sysGeographyPosition1.setSource(sysDept.getManagementSource());
             sysGeographyPositionService.updateById(sysGeographyPosition1);
+
             SysGeographyPositionRecord sysGeographyPositionRecord = BeanUtil.copyProperties(sysGeographyPosition1, SysGeographyPositionRecord.class);
             sysGeographyPositionRecord.setId(null);
             sysGeographyPositionRecord.setUserId(sysGeographyPosition1.getId());

+ 21 - 0
src/main/java/com/ydtech/modules/admin/model/SysGeographyPosition.java

@@ -58,6 +58,27 @@ public class SysGeographyPosition implements Serializable {
      * 创建人
      */
     private String createBy;
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @ApiModelProperty(value = "街道")
+    private  String street;
+
+    @ApiModelProperty(value = "街道号")
+    private  String streetNum;
+    @ApiModelProperty(value = "地点")
+    private  String poiName;
+    @ApiModelProperty(value = "编号")
+    private  String cityCode;
+
+    @ApiModelProperty(value = "机构来源")
+    private String source;
 
 
 }

+ 18 - 0
src/main/java/com/ydtech/modules/admin/model/dto/AdressRangeDto.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Data
+public class AdressRangeDto {
+
+    @ApiModelProperty("经度")
+    private double longitude;
+
+    @ApiModelProperty("维度")
+    private double latitude;
+
+    @ApiModelProperty("半径")
+    private double radius;
+}

+ 25 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysGeographyPositionDto.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "APP省市区筛选")
+public class SysGeographyPositionDto {
+
+    //地区筛选
+    @ApiModelProperty("省会")
+    private String province;
+
+
+    @ApiModelProperty("城市")
+    private String city;
+
+    @ApiModelProperty("区")
+    private String district;
+
+    @ApiModelProperty(value = "机构来源")
+    private String source;
+
+}

+ 24 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressDto.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PC省市区筛选")
+public class SysPcAddressDto {
+
+    //地区筛选
+    @ApiModelProperty("省会")
+    private String province;
+
+
+    @ApiModelProperty("城市")
+    private String city;
+
+    @ApiModelProperty("区")
+    private String district;
+
+    @ApiModelProperty(value = "机构来源")
+    private String source;
+}

+ 38 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPcAddressNumVo.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value ="PC数量统计")
+public class SysPcAddressNumVo {
+
+    @ApiModelProperty(value = "全部数量")
+    private Long allNum;
+
+    @ApiModelProperty(value = "个代数量")
+    private Long proxyNum;
+
+    @ApiModelProperty(value = "渠道数量")
+    private Long channelNum;
+
+
+    @ApiModelProperty(value = "区域人员信息")
+    private List<RegionInfo> list;
+
+    @Data
+    public class RegionInfo {
+
+        @ApiModelProperty(value = "区域名称")
+        private String districtName;
+
+        @ApiModelProperty(value = "人数")
+        private String number;
+
+    }
+
+
+}

+ 12 - 1
src/main/java/com/ydtech/modules/admin/model/po/SysPcAddress.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.model.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -22,46 +23,54 @@ public class SysPcAddress implements Serializable {
      * 用户编号
      */
     @TableId(value = "user_id")
+    @ApiModelProperty("工号")
     private String userId;
 
     /**
      * 用户名称
      */
     @TableField(value = "user_name")
+    @ApiModelProperty("用户名称")
     private String userName;
 
     /**
      * IP地址
      */
     @TableField(value = "ip")
+    @ApiModelProperty("IP地址")
     private String ip;
 
     /**
      * 经度
      */
     @TableField(value = "longitude")
+    @ApiModelProperty("经度")
     private String longitude;
 
     /**
      * 维度
      */
     @TableField(value = "latitude")
+    @ApiModelProperty("维度")
     private String latitude;
 
     /**
      * 地址
      */
     @TableField(value = "address")
+    @ApiModelProperty("地址")
     private String address;
 
     /**
      * 操作时间
      */
     @TableField(value = "operation_time")
+    @ApiModelProperty("操作时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date operationTime;
 
     @ApiModelProperty("省会")
-    private String prov;
+    private String province;
 
 
     @ApiModelProperty("城市")
@@ -69,6 +78,8 @@ public class SysPcAddress implements Serializable {
 
     @ApiModelProperty("区")
     private String district;
+    @ApiModelProperty(value = "机构来源")
+    private String source;
 
 
 }

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/vo/RegionInfoVo.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.model.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value ="区域人员")
+public class RegionInfoVo {
+
+    @ApiModelProperty(value = "区域名称")
+    private String districtName;
+
+    @ApiModelProperty(value = "人数")
+    private String number;
+}

+ 13 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysGeographyPositionInfoVo.java

@@ -0,0 +1,13 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.modules.admin.model.SysGeographyPosition;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SysGeographyPositionInfoVo extends SysGeographyPosition {
+
+    @ApiModelProperty(value = "所属机构")
+    private String deptName;
+
+}

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/vo/SysGeographyPositionVo.java

@@ -19,5 +19,5 @@ public class SysGeographyPositionVo {
      * 位置列表
      */
     @ApiModelProperty(value = "位置列表")
-    private List<SysGeographyPosition> list;
+    private List<SysGeographyPositionInfoVo> list;
 }

+ 47 - 0
src/main/java/com/ydtech/modules/admin/service/GeoService.java

@@ -0,0 +1,47 @@
+package com.ydtech.modules.admin.service;
+
+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.redis.connection.RedisGeoCommands;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class GeoService {
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+
+
+    // 添加位置
+    public void addLocation(String geoKey,String userId, double longitude, double latitude) {
+        redisTemplate.opsForGeo().add(geoKey, new Point(longitude, latitude), userId);
+    }
+
+    // 批量添加位置
+    public void addLocations(List<SysPcAddress> list, String geoKey) {
+        for (SysPcAddress location : list) {
+            addLocation(geoKey,location.getUserId(),Double.parseDouble(location.getLongitude()) , Double.parseDouble(location.getLatitude()));
+        }
+    }
+
+
+
+    // 查找某位置附近的ID集合
+    public List<String> findNearbyIds(String pcGeoKey, 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()
+                .map(result -> result.getContent().getName())
+                .collect(Collectors.toList());
+    }
+}

+ 3 - 1
src/main/java/com/ydtech/modules/admin/service/SysGeographyPositionService.java

@@ -3,7 +3,9 @@ package com.ydtech.modules.admin.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
+import com.ydtech.modules.admin.model.dto.SysGeographyPositionDto;
 import com.ydtech.modules.admin.model.dto.SysGeographyPositionPageDto;
+import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
 import com.ydtech.modules.order.entity.BasePageResult;
 
@@ -11,7 +13,7 @@ import java.util.List;
 
 public interface SysGeographyPositionService extends IService<SysGeographyPosition> {
 
-    SysGeographyPositionVo queryPosition();
+    SysGeographyPositionVo queryPosition(SysGeographyPositionDto sysGeographyPositionDto);
 
     BasePageResult<SysGeographyPositionRecord> queryPositionList(SysGeographyPositionPageDto sysGeographyPositionPageDto);
 }

+ 11 - 2
src/main/java/com/ydtech/modules/admin/service/SysPcAddressService.java

@@ -2,8 +2,10 @@ package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.IpInfoDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.RegionInfoVo;
+import com.ydtech.modules.order.entity.BasePageResult;
 
 import java.util.List;
 
@@ -23,8 +25,15 @@ public interface SysPcAddressService extends IService<SysPcAddress> {
      * 获取所有人的地址
      * @return
      */
-    List<SysPcAddress> getEveryone();
+    List<SysPcAddress> getEveryone(SysPcAddressDto sysPcAddressDto);
 
 
 
+    // 获取某范围内的Location数据
+    List<SysPcAddress> findLocationsWithinRadius(AdressRangeDto adressRangeDto);
+
+
+    SysPcAddressNumVo queryPcNum();
+
+    List<RegionInfoVo> queryRegionInfo(Integer type);
 }

+ 39 - 3
src/main/java/com/ydtech/modules/admin/service/impl/SysGeographyPositionServiceImpl.java

@@ -1,21 +1,31 @@
 package com.ydtech.modules.admin.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysGeographyPositionMapper;
 import com.ydtech.modules.admin.dao.SysGeographyPositionRecordMapper;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysGeographyPosition;
 import com.ydtech.modules.admin.model.SysGeographyPositionRecord;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.dto.SysGeographyPositionDto;
 import com.ydtech.modules.admin.model.dto.SysGeographyPositionPageDto;
+import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.SysGeographyPositionInfoVo;
 import com.ydtech.modules.admin.model.vo.SysGeographyPositionVo;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysGeographyPositionRecordService;
 import com.ydtech.modules.admin.service.SysGeographyPositionService;
+import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 @Service("SysGeographyPositionService")
@@ -28,16 +38,42 @@ public class SysGeographyPositionServiceImpl extends ServiceImpl<SysGeographyPos
 
     @Resource
     private SysGeographyPositionRecordService sysGeographyPositionRecordService;
+    @Resource
+    private SysUserService sysUserService;
+
+    @Resource
+    private SysDeptMapper sysDeptMapper;
 
 
 
     @Override
-    public SysGeographyPositionVo queryPosition() {
+    public SysGeographyPositionVo queryPosition(SysGeographyPositionDto sysGeographyPositionDto) {
         SysGeographyPositionVo sysGeographyPositionVo = new SysGeographyPositionVo();
-        List<SysGeographyPosition> list = list();
-        sysGeographyPositionVo.setList(list);
+
+        List<SysGeographyPosition> list = sysGeographyPositionMapper.selectList(new LambdaQueryWrapper<SysGeographyPosition>()
+                .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())
+                .eq(StringUtils.isNotEmpty(sysGeographyPositionDto.getSource()), SysGeographyPosition::getSource, sysGeographyPositionDto.getSource())
+                .orderByDesc(SysGeographyPosition::getCreateTime));
+        if (list.size()==0) return new SysGeographyPositionVo();
+
+        List<SysGeographyPositionInfoVo> sysGeographyPositionList = BeanUtil.copyToList(list, SysGeographyPositionInfoVo.class);
+        //填充机构名
+        for (SysGeographyPositionInfoVo sysGeographyPositionInfoVo : sysGeographyPositionList) {
+            SysUser sysUser = sysUserService.getById(sysGeographyPositionInfoVo.getId());
+            if (sysUser == null) continue;
+            SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
+                    .eq(SysDept::getId, sysUser.getDeptId()).eq(SysDept::getDelFlag, 0));
+            if (sysDept == null) continue;
+            sysGeographyPositionInfoVo.setDeptName(sysDept.getName());
+
+        }
+
+        sysGeographyPositionVo.setList(sysGeographyPositionList);
         Long aLong = sysGeographyPositionMapper.selectCount(new LambdaQueryWrapper<SysGeographyPosition>().eq(SysGeographyPosition::getStatus, 1));
         sysGeographyPositionVo.setManNum(aLong);
+
         return  sysGeographyPositionVo;
     }
 

+ 94 - 4
src/main/java/com/ydtech/modules/admin/service/impl/SysPcAddressServiceImpl.java

@@ -1,18 +1,31 @@
 package com.ydtech.modules.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysPcAddressMapper;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.dto.IpInfoDto;
+import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.po.SysPcAddressHistory;
 import com.ydtech.modules.admin.model.po.SysPcAddress;
+import com.ydtech.modules.admin.model.vo.RegionInfoVo;
+import com.ydtech.modules.admin.model.vo.SysDeptTreeVo;
+import com.ydtech.modules.admin.service.GeoService;
 import com.ydtech.modules.admin.service.SysPcAddressHistoryService;
 import com.ydtech.modules.admin.service.SysPcAddressService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -25,6 +38,15 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
 
     private final SysPcAddressHistoryService sysPcAddressHistoryService;
 
+    private final SysPcAddressMapper sysPcAddressMapper;
+
+    private final GeoService geoService;
+
+    private static final String PC_GEO_KEY = "PCLocations";
+
+    @Resource
+    private SysDeptMapper sysDeptMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void saveSysPcAddress(IpInfoDto ipInfoDto, SysUser user) {
@@ -33,14 +55,18 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         if (sysPcAddress == null) {
             sysPcAddress = new SysPcAddress();
         }
+
+        SysDept sysDept = sysDeptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
+                .eq(SysDept::getId, user.getDeptId()).eq(SysDept::getDelFlag, 0));
         sysPcAddress.setUserId(user.getId());
         sysPcAddress.setUserName(user.getName());
         sysPcAddress.setIp(ipInfoDto.getIp());
         sysPcAddress.setLatitude(ipInfoDto.getLat());
         sysPcAddress.setLongitude(ipInfoDto.getLng());
-        sysPcAddress.setProv(ipInfoDto.getProv());
+        sysPcAddress.setProvince(ipInfoDto.getProv());
         sysPcAddress.setCity(ipInfoDto.getCity());
         sysPcAddress.setDistrict(ipInfoDto.getDistrict());
+        sysPcAddress.setSource(sysDept.getManagementSource());
         sysPcAddress.setAddress(ipInfoDto.getProv() + ipInfoDto.getCity() + ipInfoDto.getDistrict());
         sysPcAddress.setOperationTime(new Date());
 
@@ -48,14 +74,78 @@ public class SysPcAddressServiceImpl extends ServiceImpl<SysPcAddressMapper, Sys
         SysPcAddressHistory sysPcAddressHistory = new SysPcAddressHistory();
         BeanUtils.copyProperties(sysPcAddress, sysPcAddressHistory);
         this.saveOrUpdate(sysPcAddress);
+
         sysPcAddressHistoryService.save(sysPcAddressHistory);
     }
 
     @Override
-    public List<SysPcAddress> getEveryone() {
-        return list();
+    public List<SysPcAddress> getEveryone(SysPcAddressDto sysPcAddressDto) {
+        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())
+                .eq(StringUtils.isNotEmpty(sysPcAddressDto.getSource()), SysPcAddress::getSource, sysPcAddressDto.getSource())
+                .orderByDesc(SysPcAddress::getOperationTime));
+
+        return sysPcAddresses;
+    }
+
+
+    @Override
+    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());
+        return listByIds(nearbyIds);
+    }
+
+    @Override
+    public SysPcAddressNumVo queryPcNum() {
+        SysPcAddressNumVo sysPcAddressNumVo = new SysPcAddressNumVo();
+
+        Long all = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>());
+        Long channelNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getSource,1));
+        Long proxyNum = sysPcAddressMapper.selectCount(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getSource,2));
+        sysPcAddressNumVo.setAllNum(all);
+        sysPcAddressNumVo.setProxyNum(proxyNum);
+        sysPcAddressNumVo.setChannelNum(channelNum);
+
+
+        return sysPcAddressNumVo;
+    }
+
+    @Override
+    public List<RegionInfoVo> queryRegionInfo(Integer type) {
+        List<RegionInfoVo> regionInfoVos = new ArrayList<>();
+        //全部:0   渠道:1 代理:2
+        if (type == 0){
+            RegionInfoVo regionInfoVo = new RegionInfoVo();
+            List<SysPcAddress> list = list();
+            Map<String, List<SysPcAddress>> map = list.stream().collect(Collectors.groupingBy(SysPcAddress::getDistrict));
+
+//            map.forEach();
+//            for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+//                String key = entry.getKey();
+//                List<String> list = entry.getValue();
+//                int listSize = list.size();
+//                System.out.println("Key: " + key + ", List size: " + listSize);
+//            }
+
+
+        }else if (type == 1) {
+            List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getSource, 1));
+
+        }else if (type == 2){
+
+            List<SysPcAddress> sysPcAddresses = sysPcAddressMapper.selectList(new LambdaQueryWrapper<SysPcAddress>().eq(SysPcAddress::getSource, 2));
+
+        }
+
+
+        return regionInfoVos;
+
     }
 
+
 }