Bläddra i källkod

根据ip获取地址

lyhzzz 1 år sedan
förälder
incheckning
8f27766353

+ 3 - 0
src/main/java/com/fdkankan/manage/common/RedisKeyUtil.java

@@ -14,5 +14,8 @@ public class RedisKeyUtil {
     public static final String loginToken= "manage:login:token:%s";
     public static final String SCENE_COOPERATION_NUM_USERID = "scene:cooperation:num:userId";
 
+    public static final String ipAddress= "manage:ip_address:%s";
+
+
 
 }

+ 6 - 1
src/main/java/com/fdkankan/manage/controller/FeedbackController.java

@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*;
  */
 @RestController
 @RequestMapping("/service/manage/feedback")
-public class FeedbackController {
+public class FeedbackController extends BaseController{
 
     @Autowired
     IFeedbackService feedbackService;
@@ -44,5 +44,10 @@ public class FeedbackController {
     public ResultData scoreAug(){
         return ResultData.ok( feedbackService.scoreAug());
     }
+
+    @GetMapping("/getDefaultAddress")
+    public ResultData getDefaultAddress(){
+        return ResultData.ok(feedbackService.getDefaultAddress(request));
+    }
 }
 

+ 4 - 0
src/main/java/com/fdkankan/manage/service/IFeedbackService.java

@@ -4,6 +4,8 @@ import com.fdkankan.manage.entity.Feedback;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.manage.vo.request.FeedbackParam;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  *  服务类
@@ -19,4 +21,6 @@ public interface IFeedbackService extends IService<Feedback> {
     void handle(Feedback param);
 
     Object scoreAug();
+
+    Object getDefaultAddress(HttpServletRequest request);
 }

+ 26 - 0
src/main/java/com/fdkankan/manage/service/impl/FeedbackServiceImpl.java

@@ -1,9 +1,12 @@
 package com.fdkankan.manage.service.impl;
 
+import cn.hutool.extra.servlet.ServletUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.manage.common.PageInfo;
+import com.fdkankan.manage.common.RedisKeyUtil;
 import com.fdkankan.manage.common.ResultCode;
 import com.fdkankan.manage.entity.Feedback;
 import com.fdkankan.manage.entity.FeedbackOption;
@@ -12,13 +15,17 @@ import com.fdkankan.manage.mapper.IFeedbackMapper;
 import com.fdkankan.manage.service.IFeedbackOptionService;
 import com.fdkankan.manage.service.IFeedbackService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.manage.util.ProvinceUtils;
 import com.fdkankan.manage.vo.request.FeedbackParam;
 import com.fdkankan.manage.vo.response.GroupByAvg;
 import com.fdkankan.manage.vo.response.GroupByCount;
+import com.fdkankan.manage.vo.response.IpAddressVo;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.HashMap;
@@ -127,4 +134,23 @@ public class FeedbackServiceImpl extends ServiceImpl<IFeedbackMapper, Feedback>
             feedbackOption.setScore(bigDecimal.toString());
         }
     }
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public Object getDefaultAddress(HttpServletRequest request) {
+        //获取ip地址
+        String clientIP = ServletUtil.getClientIP(request);
+        if(StringUtils.isBlank(clientIP)){
+            return new IpAddressVo();
+        }
+        String redisKey = String.format(RedisKeyUtil.ipAddress,clientIP);
+        if(redisUtil.hasKey(redisKey)){
+            return JSONObject.parseObject(redisUtil.get(redisKey));
+        }
+        IpAddressVo addressByIp = ProvinceUtils.getAddressByIp(clientIP);
+        redisUtil.set(redisKey,JSONObject.toJSONString(addressByIp));
+        return  addressByIp;
+    }
 }

+ 22 - 12
src/main/java/com/fdkankan/manage/util/ProvinceUtils.java

@@ -3,7 +3,10 @@ import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.vo.response.AddressComponent;
+import com.fdkankan.manage.vo.response.IpAddressVo;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.UnsupportedEncodingException;
@@ -15,18 +18,6 @@ import java.util.Objects;
 public class ProvinceUtils {
 
 
-    public static void main(String[] args) {
-        //{
-        //  "altitude": 22.34735107421875,
-        //  "horizontalAccuracy": 4.9379683,
-        //  "latitude": 22.36707762,
-        //  "longitude": 113.59580565,
-        //  "timestamp": 1638779141699,
-        //  "verticalAccuracy": 7.5588307
-        //}
-        AddressComponent addressComponent = pointsToLocationsAll("113.595673,22.36707762");
-        System.out.println(addressComponent);
-    }
 
     private static String getProvince(String log, String lat ){
         //lat 小  log  大
@@ -112,4 +103,23 @@ public class ProvinceUtils {
         return null;
     }
 
+
+    public static String getAddressByIpHost ="https://restapi.amap.com/v3/ip?ip=%s&key=%s";
+
+    public static IpAddressVo getAddressByIp(String ip){
+        //GPS坐标转为高德地图坐标
+        try {
+            String s = HttpUtil.get(String.format(getAddressByIpHost,ip,amapKey));
+            JSONObject jsonObject = JSON.parseObject(s);
+            return JSONObject.toJavaObject(jsonObject, IpAddressVo.class);
+        }catch (Exception e){
+            log.info("ip地址转换地址失败:{},{}",ip,e);
+        }
+       return new IpAddressVo();
+    }
+
+    public static void main(String[] args) {
+        System.out.println( getAddressByIp("127"));
+    }
+
 }

+ 14 - 0
src/main/java/com/fdkankan/manage/vo/response/IpAddressVo.java

@@ -0,0 +1,14 @@
+package com.fdkankan.manage.vo.response;
+
+import lombok.Data;
+
+@Data
+public class IpAddressVo {
+    private String status;
+    private String info;
+    private String infocode;
+    private String province;
+    private String city;
+    private String adcode;
+    private String rectangle;
+}