lyhzzz 2 年之前
父节点
当前提交
f976fd92e2

+ 2 - 2
README.md

@@ -52,13 +52,13 @@
     http://120.25.146.52:3090/project/102/interface/api/9758
 2.新增权益添加参数
     http://120.25.146.52:3090/project/102/interface/api/5744
-3.权益订单列表添加返回
+3.权益订单列表添加返回,查询
     http://120.25.146.52:3090/project/102/interface/api/5936
 4.权益详情添加返回
     http://120.25.146.52:3090/project/102/interface/api/5738
 5.新增下载次数添加参数
     http://120.25.146.52:3090/project/102/interface/api/5750
-6.下载订单列表添加返回
+6.下载订单列表添加返回,查询
     http://120.25.146.52:3090/project/102/interface/api/5942
 7.设备列表添加返回
     http://120.25.146.52:3090/project/102/interface/api/5768

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

@@ -6,6 +6,7 @@ public class RedisKeyUtil {
     public static final String SCENE_UNUSED_NUMS = "4dkankan:scene:nums";
     public static final String SCENE_NUMS_LOADING = "4dkankan:scene:nums:loading";
     public static final String loginNum= "manage:login:userName:%s:ip:%s";
+    public static final String gpsKey= "manage:gps:%s";
 
     public static final String loginToken= "manage:login:token:%s";
     public static final String SCENE_COOPERATION_NUM_USERID = "scene:cooperation:num:userId";

+ 22 - 3
src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java

@@ -26,12 +26,12 @@ import com.fdkankan.manage.mq.common.MqQueueUtil;
 import com.fdkankan.manage.mq.param.ScenePayStatusVo;
 import com.fdkankan.manage.service.*;
 import com.fdkankan.manage.util.Dateutils;
+import com.fdkankan.manage.util.ProvinceUtils;
 import com.fdkankan.manage.util.SceneStatusUtil;
 import com.fdkankan.manage.vo.request.SceneParam;
-import com.fdkankan.manage.vo.response.CameraDataVo;
-import com.fdkankan.manage.vo.response.GroupByCount;
-import com.fdkankan.manage.vo.response.SceneVo;
+import com.fdkankan.manage.vo.response.*;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -97,6 +97,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     ISceneDelLogService sceneDelLogService;
     @Autowired
     RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    RedisUtil redisUtil;
 
 
     @Override
@@ -229,6 +231,23 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
                     record.setBuildErrorReason(SceneBuildProcessLogEnum.getReason(sceneBuildProcessLog.getProcess()));
                 }
             }
+            //{"latitude":22.3672085,"longitude":113.595673,"altitude":9.275519,"horizontalAccuracy":65.0,"verticalAccuracy":10.0,"timestamp":1564381147.2775609}
+            if(StringUtils.isNotBlank(record.getGps())){
+                GpsVo gpsVo = JSONObject.parseObject(record.getGps(), GpsVo.class);
+                if(gpsVo!=null && StringUtils.isNotBlank(gpsVo.getLatitude()) && StringUtils.isNotBlank(gpsVo.getAltitude())){
+                    String points = gpsVo.getLongitude()+","+gpsVo.getLatitude();
+                    String rediskey = String.format(RedisKeyUtil.gpsKey, points);
+                    AddressComponent addressComponent = null;
+                    if(redisUtil.hasKey(rediskey)){
+                        String s = redisUtil.get(rediskey);
+                        addressComponent = JSONObject.parseObject(s, AddressComponent.class);
+                    }else {
+                        addressComponent = ProvinceUtils.pointsToLocationsAll(points);
+                        redisUtil.set(String.format(RedisKeyUtil.gpsKey,points),JSONObject.toJSONString(addressComponent));
+                    }
+                    record.setAddressComponent(addressComponent);
+                }
+            }
         }
         return PageInfo.PageInfo(page);
     }

+ 3 - 1
src/main/java/com/fdkankan/manage/test/TestController.java

@@ -144,7 +144,9 @@ public class TestController {
 
     private String[] getSnCodeTest(){
         String res [] = {
-                "064D8CBC5",
+                "0705CCDB8",
+                "0292D9F64",
+                "916ED6689",
         };
         return res;
     }

+ 114 - 0
src/main/java/com/fdkankan/manage/util/ProvinceUtils.java

@@ -0,0 +1,114 @@
+package com.fdkankan.manage.util;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.manage.vo.response.AddressComponent;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Objects;
+
+@Slf4j
+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
+        //}
+        String province = pointsToLocationsAll("113.595673,22.36707762");
+        System.out.println(province);
+    }
+
+    private static String getProvince(String log, String lat ){
+        //lat 小  log  大
+        //参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
+        String urlString = "http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+log+"&type=010";
+        String res = "";
+        try {
+            URL url = new URL(urlString);
+            java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();
+            conn.setDoOutput(true);
+            conn.setRequestMethod("POST");
+            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                res += line+"\n";
+            }
+            in.close();
+        } catch (Exception e) {
+            System.out.println("error in wapaction,and e is " + e.getMessage());
+        }
+        System.out.println(res);
+        JSONObject jsonObject = JSONObject.parseObject(res);
+        JSONArray jsonArray = JSON.parseArray(jsonObject.getString("addrList"));
+        JSONObject jsonObject1 = jsonArray.getJSONObject(0);
+        String arr[] = jsonObject1.get("admName").toString().split(",");
+        System.out.println(arr[0]);
+        return arr[0];
+    }
+
+
+
+    /**
+     * 根据经纬度转地址
+     * @param points
+     * @return
+     */
+    public static String amapKey = "3609daa52e8ae4493393292213e2fb98";
+
+        //经度和纬度用","分割,经度在前,纬度在后,经纬度小数点后不得超过6位。多个坐标对之间用”|”进行分隔最多支持40对坐标。
+    public static AddressComponent pointsToLocationsAll(String points) {
+        //将GPS坐标转化为高德地图坐标的URL后再去请求位置信息
+        try {
+            points = URLEncoder.encode(points,"UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+        String convertUrl =
+                "https://restapi.amap.com/v3/assistant/coordinate/convert?locations="+points+"&coordsys=gps&key="+amapKey;
+        //GPS坐标转为高德地图坐标
+        String s = HttpUtil.get(convertUrl);
+        JSONObject jsonObject = JSON.parseObject(s);
+        String status = (String) jsonObject.get("status");
+        if(Objects.equals(status,"0")){
+            throw new RuntimeException("远程调用经纬度转化出错");
+        }
+        String locations = (String) jsonObject.get("locations");
+        String formattedAmapPoints = null;
+        try {
+            formattedAmapPoints = URLEncoder.encode(locations.replaceAll(";", "|"), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+        String locationUrl = "https://restapi.amap.com/v3/geocode/regeo?output=json&location="+formattedAmapPoints+"&key="+amapKey+"&radius=1000&batch=true";
+        String s1 = HttpUtil.get(locationUrl);
+        System.out.println(s1);
+        //获取转地址后的结果
+        JSONObject parseObject = JSON.parseObject(s1);
+        String status1 = (String) parseObject.get("status");
+        if(Objects.equals(status1,"0")){
+            throw new RuntimeException("根据经纬度获取具体地址出错");
+        }
+        JSONArray regeocodes = parseObject.getJSONArray("regeocodes");
+        String formattedAddress = "";
+        AddressComponent addressComponent = null;
+        for (Object regeocode : regeocodes) {
+            JSONObject object = (JSONObject) regeocode;
+            formattedAddress = (String)object.get("formatted_address");
+            String addressComponentStr = (String)object.get("addressComponent");
+            addressComponent = JSONObject.parseObject(addressComponentStr, AddressComponent.class);
+        }
+        log.info("经纬度【{}】转化为具体地点【{}】",points,formattedAddress);
+        return addressComponent;
+    }
+
+}

+ 12 - 0
src/main/java/com/fdkankan/manage/vo/response/AddressComponent.java

@@ -0,0 +1,12 @@
+package com.fdkankan.manage.vo.response;
+
+import lombok.Data;
+
+@Data
+public class AddressComponent {
+    private String country;
+    private String province;
+    private String city;
+    private String district;
+    private String township;
+}

+ 13 - 0
src/main/java/com/fdkankan/manage/vo/response/GpsVo.java

@@ -0,0 +1,13 @@
+package com.fdkankan.manage.vo.response;
+
+import lombok.Data;
+
+@Data
+public class GpsVo {
+    //{"latitude":22.3672085,"longitude":113.595673,"altitude":9.275519,"horizontalAccuracy":65.0,"verticalAccuracy":10.0,"timestamp":1564381147.2775609}
+    private String  latitude;   //纬度
+    private String  longitude;  //经度
+    private String  altitude;   //高度
+    private String  horizontalAccuracy; //海拔
+    private String  timestamp;
+}

+ 4 - 0
src/main/java/com/fdkankan/manage/vo/response/SceneVo.java

@@ -34,5 +34,9 @@ public class SceneVo {
 
     private String dataSource;
 
+    private Integer shootCount;     //点位数量
 
+    private String  gps;        //gps定位
+
+    private AddressComponent addressComponent;
 }

+ 2 - 2
src/main/resources/mapper/manage/SceneProMapper.xml

@@ -31,7 +31,7 @@
         SELECT * FROM(
         select s.scene_name ,s.num,s.create_time,c.sn_code,s.space as sceneSize
         ,u.user_name,s.view_count,s.status,s.pay_status,'v3' as scene_version ,s.web_site , s.thumb
-        ,null as algorithmTime,data_source
+        ,null as algorithmTime,data_source,s.shoot_count,s.gps
         from t_scene_pro s
         <include refid="commonWhere"></include>
         <if test="param.sceneName != null and param.sceneName!='' ">
@@ -41,7 +41,7 @@
         UNION
         select s.title as sceneName ,s.num,s.create_time,c.sn_code,e.space as sceneSize
         ,u.user_name,e.view_count,s.scene_status as status,s.pay_status,'v4' as scene_version,e.web_site,e.thumb
-        ,algorithm_time,data_source
+        ,algorithm_time,data_source,e.shoot_count,e.gps
         from t_scene_plus s
         left join t_scene_plus_ext e on s.id = e.plus_id
         <include refid="commonWhere"></include>