Преглед изворни кода

火灾模块添加地图信息

yq пре 3 година
родитељ
комит
f0c05cdae3

+ 0 - 33
mhfire-controller/src/main/java/com/bizmatics/mhfire/controller/Test.java

@@ -1,33 +0,0 @@
-package com.bizmatics.mhfire.controller;
-
-import com.bizmatics.mhfire.service.util.GouldUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @author yq
- * @date 2021/7/23 16:22
- */
-@RestController
-@RequestMapping("test")
-public class Test {
-
-    @Autowired
-    private GouldUtil gouldUtil;
-
-
-    @GetMapping("/getAddress")
-    public String getAddress(String longitude,String lat) {
-        System.out.println(longitude);
-        System.out.println(lat);
-        String address = gouldUtil.getAMapByLngAndLat(longitude, lat);
-        return address;
-    }
-
-    @GetMapping("/getLonLat")
-    public String getLonLat(@RequestParam String address) {
-        String result = gouldUtil.getLonLat(address);
-        return result;
-    }
-
-}

+ 2 - 1
mhfire-controller/src/main/resources/application-dev.properties

@@ -16,7 +16,7 @@ mybatis.refresh.sleep-seconds=20
 # datasource
 spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
 spring.datasource.dynamic.primary=mhfire
-spring.datasource.dynamic.datasource.mhfire.url=jdbc:mysql://120.55.70.156:3306/mhfire?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8
+spring.datasource.dynamic.datasource.mhfire.url=jdbc:mysql://120.55.70.156:3306/mhfire?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8&allowMultiQueries=true
 spring.datasource.dynamic.datasource.mhfire.username=root
 spring.datasource.dynamic.datasource.mhfire.password=123456
 #À¶Ð¡°ï
@@ -36,6 +36,7 @@ spring.datasource.dynamic.druid.max-pool-prepared-statement-per-connection-size=
 spring.datasource.dynamic.druid.time-between-eviction-runs-millis=60000
 spring.datasource.dynamic.druid.min-evictable-idle-time-millis=300000
 spring.datasource.dynamic.druid.filters=wall,stat,log4j2
+spring.datasource.dynamic.druid.wall.multi-statement-allow=true
 # druid \u76D1\u63A7 WebStatFilter\u914D\u7F6E
 spring.datasource.druid.web-stat-filter.enabled=true
 spring.datasource.druid.web-stat-filter.url-pattern=/*

+ 4 - 0
mhfire-mapping/src/main/java/com/bizmatics/mhfire/persistence/mapper/FireStatisticsMapper.java

@@ -2,6 +2,7 @@ package com.bizmatics.mhfire.persistence.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.bizmatics.mhfire.persistence.mapper.po.FireStatisticsPO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -77,4 +78,7 @@ public interface FireStatisticsMapper {
                                  @Param("region") String region,
                                  @Param("fireType") String fireType,
                                  @Param("unitId") String unitId);
+
+
+    int updateList(List<FireStatisticsPO> list);
 }

+ 2 - 1
mhfire-mapping/src/main/java/com/bizmatics/mhfire/persistence/mapper/po/FireStatisticsPO.java

@@ -1,5 +1,6 @@
 package com.bizmatics.mhfire.persistence.mapper.po;
 
+import com.bizmatics.mhfire.persistence.mapper.vo.LocateInfo;
 import lombok.Data;
 
 /**
@@ -8,7 +9,7 @@ import lombok.Data;
  * 火灾统计
  */
 @Data
-public class FireStatisticsPO {
+public class FireStatisticsPO extends LocateInfo {
 
     /**
      * id

+ 16 - 0
mhfire-mapping/src/main/java/com/bizmatics/mhfire/persistence/mapper/vo/LocateInfo.java

@@ -0,0 +1,16 @@
+package com.bizmatics.mhfire.persistence.mapper.vo;
+
+import lombok.Data;
+
+/**
+ * @author yq
+ * @date 2021/7/26 15:05
+ */
+@Data
+public class LocateInfo {
+    private String district;
+    private String street;
+    private Double longitude;
+    private Double latitude;
+    private boolean isChina;
+}

+ 7 - 0
mhfire-mapping/src/main/resources/mapper/mysql/FireStatisticsMapper.xml

@@ -1,6 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.bizmatics.mhfire.persistence.mapper.FireStatisticsMapper">
+    <update id="updateList" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            UPDATE `hzdc-hztjb`
+            SET longitude = #{item.longitude},latitude = #{item.latitude},district = #{item.district},street = #{item.street}
+            WHERE `火灾序号` = #{item.id}
+        </foreach>
+    </update>
 
     <select id="selectCount" resultType="java.lang.Integer">
         select count(1)

+ 25 - 8
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/FireStatisticsServiceImpl.java

@@ -5,23 +5,20 @@ import com.bizmatics.common.core.bean.CommonPage;
 import com.bizmatics.common.core.util.DateUtils;
 import com.bizmatics.common.core.util.StringUtils;
 import com.bizmatics.mhfire.persistence.mapper.FireStatisticsMapper;
-
 import com.bizmatics.mhfire.persistence.mapper.po.FireStatisticsPO;
 import com.bizmatics.mhfire.persistence.mapper.po.UnitPO;
+import com.bizmatics.mhfire.persistence.mapper.vo.LocateInfo;
 import com.bizmatics.mhfire.service.FireStatisticsService;
 import com.bizmatics.mhfire.service.UnitService;
-
 import com.bizmatics.mhfire.service.util.Arith;
+import com.bizmatics.mhfire.service.util.GouldUtil;
 import com.bizmatics.mhfire.service.vo.FireBubbleVO;
 import com.bizmatics.mhfire.service.vo.FireLevelRatioVO;
 import com.bizmatics.mhfire.service.vo.FireUnitPoliceVO;
-import net.sf.jsqlparser.statement.alter.Alter;
-import org.checkerframework.checker.nullness.Opt;
+import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -75,8 +72,24 @@ public class FireStatisticsServiceImpl implements FireStatisticsService {
     public CommonPage<FireStatisticsPO> page(Integer current, Integer size, Date startTime, Date endTime, String address) {
         Page<Map<String, String>> page = new Page<>(current, size);
         page = fireStatisticsMapper.page(page, startTime, endTime, address);
-        List<FireStatisticsPO> list = new ArrayList<>();
-        page.getRecords().forEach(stringObjectMap -> list.add(enhanceFireStatisticsPo(stringObjectMap)));
+        List<FireStatisticsPO> list = page.getRecords()
+                .stream()
+                .map(this::enhanceFireStatisticsPo).collect(Collectors.toList());
+        //筛选出精度和维度是空的数据
+        List<FireStatisticsPO> isNullData = list.stream().filter(fireStatisticsPo -> null == fireStatisticsPo.getLatitude()).collect(Collectors.toList());
+        List<List<FireStatisticsPO>> subSets = Lists.partition(isNullData, 10);
+        for (List<FireStatisticsPO> listLimit:subSets) {
+            String addressList = listLimit.stream().map(FireStatisticsPO::getAddress).collect(Collectors.joining("|"));
+            List<LocateInfo> lonLat = GouldUtil.getLonLat(addressList);
+            for (FireStatisticsPO fireStatisticsPo:listLimit) {
+                fireStatisticsPo.setLatitude(lonLat.get(listLimit.indexOf(fireStatisticsPo)).getLatitude());
+                fireStatisticsPo.setLongitude(lonLat.get(listLimit.indexOf(fireStatisticsPo)).getLongitude());
+                fireStatisticsPo.setDistrict(lonLat.get(listLimit.indexOf(fireStatisticsPo)).getDistrict());
+                fireStatisticsPo.setStreet(lonLat.get(listLimit.indexOf(fireStatisticsPo)).getStreet());
+
+            }
+            fireStatisticsMapper.updateList(listLimit);
+        }
         return new CommonPage<>(list, page.getTotal(), page.getSize(), page.getCurrent());
     }
 
@@ -203,6 +216,10 @@ public class FireStatisticsServiceImpl implements FireStatisticsService {
         fireStatisticsPo.setDisasterHome(Optional.ofNullable(map.get("受灾户数")).filter(s -> !"null".equals(s)).orElse(""));
         fireStatisticsPo.setFireCause(Optional.ofNullable(map.get("火灾原因分类(一级)")).filter(s -> !"null".equals(s)).orElse(""));
         fireStatisticsPo.setFireLevel(Optional.ofNullable(map.get("火灾等级")).filter(s -> !"null".equals(s)).orElse(""));
+        fireStatisticsPo.setLongitude(Double.valueOf(Optional.ofNullable(map.get("longitude")).orElse("0.00")));
+        fireStatisticsPo.setLatitude(Double.valueOf(Optional.ofNullable(map.get("latitude")).orElse("0.00")));
+        fireStatisticsPo.setDistrict(map.get("district"));
+        fireStatisticsPo.setStreet(map.get("street"));
         return fireStatisticsPo;
     }
 }

+ 1 - 1
mhfire-service/src/main/java/com/bizmatics/mhfire/service/util/GcjToWgs.java

@@ -1,6 +1,6 @@
 package com.bizmatics.mhfire.service.util;
 
-import com.bizmatics.mhfire.service.vo.LocateInfo;
+import com.bizmatics.mhfire.persistence.mapper.vo.LocateInfo;
 
 /**
  * GCJ02与WGS84标准转换

+ 30 - 17
mhfire-service/src/main/java/com/bizmatics/mhfire/service/util/GouldUtil.java

@@ -1,22 +1,26 @@
 package com.bizmatics.mhfire.service.util;
 
 import com.bizmatics.common.core.util.HttpUtils;
+import com.bizmatics.common.core.util.StringUtils;
+import com.bizmatics.mhfire.persistence.mapper.vo.LocateInfo;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
+import com.sun.deploy.net.URLEncoder;
+import lombok.extern.slf4j.Slf4j;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @author yq
  * @date 2021/7/23 16:10
  */
-@Component
+
+@Slf4j
 public class GouldUtil {
 
-    @Value("${gould.Key}")
-    private String gouldKey;
+    private static final String GOULD_KEY="b4414402710da7c5fcbb775ec7b83408";
 
 
 
@@ -29,10 +33,11 @@ public class GouldUtil {
      * @return 两个地址间的距离
      */
     public long getDistanceByAddress(String start, String end) {
-        String startLonLat = getLonLat(start);
-        String endLonLat = getLonLat(end);
-        long dis = getDistance(startLonLat, endLonLat);
-        return dis;
+//        String startLonLat = getLonLat(start);
+//        String endLonLat = getLonLat(end);
+//        long dis = getDistance(startLonLat, endLonLat);
+//        return dis;
+        return 0;
     }
 
     /**
@@ -40,24 +45,32 @@ public class GouldUtil {
      * @param address 地址
      * @return 经纬度
      */
-    public String getLonLat(String address) {
-        // 返回输入地址address的经纬度信息, 格式是 经度,纬度
-        String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+gouldKey+"&address=" + address;
-        String queryResult = getResponse(queryUrl); // 高德接品返回的是JSON格式的字符串
-        String result = "";
+    public static List<LocateInfo> getLonLat(String address) {
+        List<LocateInfo> locateInfos = new ArrayList<>();
         try {
+            // 返回输入地址address的经纬度信息, 格式是 经度,纬度
+            String encode = URLEncoder.encode(address, "UTF-8");
+            String queryUrl = "http://restapi.amap.com/v3/geocode/geo?"+"key="+GOULD_KEY+"&address=" + encode+"&batch=true";
+            String queryResult = getResponse(queryUrl);
             JsonNode arrNode = new ObjectMapper().readTree(queryResult).get("geocodes");
             if (arrNode.isArray()) {
                 for (JsonNode objNode : arrNode) {
-                    result = objNode.get("location").toString();
+                    LocateInfo locateInfo = new LocateInfo();
+                    String[] locations = StringUtils.split(objNode.get("location").asText(), ",");
+                    locateInfo.setLongitude(Double.parseDouble(locations[0]));
+                    locateInfo.setLatitude(Double.parseDouble(locations[1]));
+                    locateInfo.setDistrict(objNode.get("district").asText());
+                    locateInfo.setStreet(objNode.get("street").asText());
+                    locateInfos.add(locateInfo);
                 }
             }
         }catch (Exception e){
-            e.getMessage();
+            log.error(e.getMessage());
         }
-        return result;
+        return locateInfos;
     }
 
+
     /**
      * 将经纬度getLng, getLat 通过getAMapByLngAndLat方法转换地址
      * @param getLng 经度

+ 0 - 14
mhfire-service/src/main/java/com/bizmatics/mhfire/service/vo/LocateInfo.java

@@ -1,14 +0,0 @@
-package com.bizmatics.mhfire.service.vo;
-
-import lombok.Data;
-
-/**
- * @author yq
- * @date 2021/7/26 15:05
- */
-@Data
-public class LocateInfo {
-    private double longitude;
-    private double Latitude;
-    private boolean isChina;
-}