Browse Source

地址求同第一版方案

yq 3 năm trước cách đây
mục cha
commit
8d7edf844a

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

@@ -51,6 +51,18 @@ public interface FireStatisticsMapper {
                                   @Param("address")String address);
 
 
+    /**
+     * list
+     * @param startTime
+     * @param endTime
+     * @param address
+     * @return
+     */
+    List<Map<String,String>> list(@Param("startTime") Date startTime,
+                                  @Param("endTime")Date endTime,
+                                  @Param("address")String address);
+
+
     Map<String,String> getOne(@Param("id") String id);
 
 

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

@@ -103,6 +103,21 @@
         </where>
         group by monthTime
     </select>
+    <select id="list" resultType="java.util.Map">
+        select `火灾序号`,`死亡人数`,`受伤人数`,`longitude`,`latitude`,`起火地点`
+        from `hzdc-hztjb`
+        <where>
+            <if test="startTime != null">
+                and `起火时间_日期型` >= #{startTime}
+            </if>
+            <if test="endTime !=null">
+                and `起火时间_日期型` &lt;= #{endTime}
+            </if>
+            <if test="address !=null and address !=''">
+                and `起火地点` LIKE CONCAT(CONCAT('%', #{address}), '%')
+            </if>
+        </where>
+    </select>
 
 
 </mapper>

+ 33 - 0
mhfire-model/src/main/java/com/bizmatics/mhfire/model/Alert.java

@@ -90,4 +90,37 @@ public class Alert implements Serializable {
     private String zhongdui;
 
 
+    //火灾信息
+
+    /**
+     * 报警人
+     */
+    @TableField(exist = false)
+    private String callPolice;
+
+    /**
+     * 电话
+     */
+    @TableField(exist = false)
+    private String policePhone;
+    /**
+     * 财产损失
+     */
+    @TableField(exist = false)
+    private String propertyLoss;
+
+
+    /**
+     * 死亡人数
+     */
+    @TableField(exist = false)
+    private String deathToll;
+
+    /**
+     * 受伤人数
+     */
+    @TableField(exist = false)
+    private String nonFatal;
+
+
 }

+ 2 - 1
mhfire-service/src/main/java/com/bizmatics/mhfire/service/FireStatisticsService.java

@@ -5,7 +5,6 @@ import com.bizmatics.mhfire.persistence.mapper.po.FireStatisticsPO;
 import com.bizmatics.mhfire.service.vo.FireBubbleVO;
 import com.bizmatics.mhfire.service.vo.FireLevelRatioVO;
 import com.bizmatics.mhfire.service.vo.FireUnitPoliceVO;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
 import java.util.List;
@@ -39,6 +38,8 @@ public interface FireStatisticsService {
     CommonPage<FireStatisticsPO> page(Integer current, Integer size, Date startTime, Date endTime, String address);
 
 
+    List<FireStatisticsPO> list(Date startTime, Date endTime, String address);
+
     /**
      * getOne
      * @param id

+ 47 - 3
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/AlertServiceImpl.java

@@ -2,6 +2,7 @@ package com.bizmatics.mhfire.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.bizmatics.common.core.bean.CommonPage;
@@ -11,10 +12,16 @@ import com.bizmatics.common.core.util.StringUtils;
 import com.bizmatics.common.mvc.base.AbstractCrudService;
 import com.bizmatics.mhfire.model.Alert;
 import com.bizmatics.mhfire.persistence.mapper.AlertMapper;
+import com.bizmatics.mhfire.persistence.mapper.po.FireStatisticsPO;
+import com.bizmatics.mhfire.persistence.mapper.vo.LocateInfo;
 import com.bizmatics.mhfire.service.AlertService;
+import com.bizmatics.mhfire.service.FireStatisticsService;
 import com.bizmatics.mhfire.service.util.Arith;
+import com.bizmatics.mhfire.service.util.CaculateDistance;
+import com.bizmatics.mhfire.service.util.GouldUtil;
 import com.bizmatics.mhfire.service.vo.AlertMapVO;
 import com.bizmatics.mhfire.service.vo.AlertStatisticsVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -27,6 +34,9 @@ import java.util.stream.Collectors;
 @Service
 public class AlertServiceImpl extends AbstractCrudService<AlertMapper, Alert> implements AlertService {
 
+    @Autowired
+    private FireStatisticsService fireStatisticsService;
+
     private static final String[] ALERT_TYPE = {"火灾","社会救助","抢险救援"};
 
     @Override
@@ -126,7 +136,36 @@ public class AlertServiceImpl extends AbstractCrudService<AlertMapper, Alert> im
 
     @Override
     public Alert getOne(String id) {
-        return this.getById(id);
+        Alert alert = this.getById(id);
+        Date startTime = DateUtils.addMonths(alert.getLasj(), -30);
+        Date endTime = DateUtils.addMonths(alert.getLasj(), 30);
+        String replace = alert.getAfdz().replace("(", " ");
+        String replace1 = replace.replace(")", " ");
+        String [] arr = replace1.split("\\s+");
+        for (String address:arr) {
+            if (!address.contains("闵行")){
+                List<FireStatisticsPO> list = fireStatisticsService.list(null, null, address);
+                System.out.println(list.size());
+            }
+        }
+        List<FireStatisticsPO> list = fireStatisticsService.list(startTime, endTime, alert.getAfdz());
+        List<FireStatisticsPO> collect = list.stream()
+                .filter(fp -> {
+                    List<LocateInfo> lonLat = null;
+                    if (0.00 == fp.getLatitude()) {
+                        lonLat = GouldUtil.getLonLat(fp.getAddress());
+                    }
+                    if (CollectionUtils.isNotEmpty(lonLat)) {
+                        double distance = CaculateDistance.getDistance(Double.parseDouble(alert.getGisX()),
+                                Double.parseDouble(alert.getGisY()),
+                                lonLat.get(0).getLatitude(),
+                                lonLat.get(0).getLongitude());
+                        return distance > 100;
+                    }
+                    return false;
+                }).collect(Collectors.toList());
+        System.out.println(collect.size());
+        return alert;
     }
 
     @Override
@@ -151,9 +190,14 @@ public class AlertServiceImpl extends AbstractCrudService<AlertMapper, Alert> im
                 alertStatisticsVO.setSameStatus(2);
             }
             if (0 != upNumber) {
-                alertStatisticsVO.setRadio(Arith.div(number, upNumber));
+                double radio = Arith.div(Arith.sub(number, upNumber), upNumber);
+                alertStatisticsVO.setRadio(Math.abs(radio));
             } else {
-                alertStatisticsVO.setRadio(0.00);
+                if (number != 0){
+                    alertStatisticsVO.setRadio(1.00);
+                }else {
+                    alertStatisticsVO.setRadio(0.00);
+                }
             }
         });
         return list;

+ 7 - 0
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/FireStatisticsServiceImpl.java

@@ -101,6 +101,13 @@ public class FireStatisticsServiceImpl implements FireStatisticsService {
         return new CommonPage<>(list, page.getTotal(), page.getSize(), page.getCurrent());
     }
 
+    @Override
+    public List<FireStatisticsPO> list(Date startTime, Date endTime, String address) {
+        return fireStatisticsMapper.list(startTime,endTime,address)
+                .stream()
+                .map(this::enhanceFireStatisticsPo).collect(Collectors.toList());
+    }
+
     @Override
     public FireStatisticsPO getOne(String id) {
         return enhanceFireStatisticsPo(fireStatisticsMapper.getOne(id));

+ 29 - 0
mhfire-service/src/main/java/com/bizmatics/mhfire/service/util/CaculateDistance.java

@@ -0,0 +1,29 @@
+package com.bizmatics.mhfire.service.util;
+
+/**
+ * @author yq
+ * @date 2021/8/19 15:51
+ */
+public class CaculateDistance {
+
+    private final static double EARTH_RADIUS = 6378.137;
+
+    private static double rad(double d) {
+        return d * Math.PI / 180.0;
+    }
+
+    /**
+     * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
+     */
+    public static double getDistance(double latOne, double lngOne, double latTwo, double lngTwo) {
+        double radLat1 = rad(latOne);
+        double radLat2 = rad(latTwo);
+        double a = radLat1 - radLat2;
+        double b = rad(lngOne) - rad(lngTwo);
+        double s = 2 * Math.asin(Math.sqrt(
+                Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
+        s = s * EARTH_RADIUS;
+        s = (s * 10000) / 10;
+        return s;
+    }
+}