Browse Source

企业自主管理-单位撒点

jichaobo 2 years ago
parent
commit
479d71a115

+ 15 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/BaseCompanyController.java

@@ -81,5 +81,20 @@ public class BaseCompanyController {
         return ApiResult.success();
     }
 
+
+    /**
+     * 企业自主管理-单位撒点
+     *
+     * @param streetTown  街镇
+     * @param companyType 单位类型(1:重点单位、2:一般单位、3:九小场所、9:其他单位)
+     * @return
+     */
+    @GetMapping("companyScatterer")
+    public ApiResult<List<Object>> companyScatterer(@RequestParam(value = "streetTown", required = false) String streetTown,
+                                                    @RequestParam(value = "companyType", required = false) String companyType) {
+        return ApiResult.success(baseCompanyService.companyScatterer(streetTown, companyType));
+    }
+
+
 }
 

+ 5 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/BaseCompany.java

@@ -137,6 +137,11 @@ public class BaseCompany implements Serializable {
      */
     private String detachmentId;
 
+    /**
+     * 街镇
+     */
+    private String streetTown;
+
     /**
      * 删除标记
      */

+ 20 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/BaseCompanyService.java

@@ -63,4 +63,24 @@ public interface BaseCompanyService extends CrudService<BaseCompany> {
      * @param id 主键ID
      */
     void delCompany(Integer id);
+
+    /**
+     * 闵行大屏
+     *
+     * @param streetTown  街镇
+     * @param companyType 单位类型(1:重点单位、2:一般单位、3:九小场所、9:其他单位)
+     * @return
+     */
+    List<Object> companyScatterer(String streetTown, String companyType);
+
+    /**
+     * 更新坐标和街道
+     *
+     * @param id1        主表主键ID
+     * @param id2        附表主键ID
+     * @param longitude  经度
+     * @param latitude   纬度
+     * @param streetTown 街道
+     */
+    void updateCompany1(Integer id1, Integer id2, String longitude, String latitude, String streetTown);
 }

+ 108 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseCompanyServiceImpl.java

@@ -17,7 +17,9 @@ import com.usky.fire.service.BaseCompanyAttach1Service;
 import com.usky.fire.service.BaseCompanyPersonService;
 import com.usky.fire.service.BaseCompanyService;
 import com.usky.fire.service.BaseUserCompanyService;
+import com.usky.fire.service.util.OnlineMethod;
 import com.usky.fire.service.vo.CompanyDataVo;
+import com.usky.fire.service.vo.LocateInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -212,5 +214,111 @@ public class BaseCompanyServiceImpl extends AbstractCrudService<BaseCompanyMappe
         this.updateById(baseCompany);
     }
 
+    @Override
+    public List<Object> companyScatterer(String streetTown, String companyType) {
+        List<Object> list = new ArrayList<>();
+        LambdaQueryWrapper<BaseCompany> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.select(BaseCompany::getId, BaseCompany::getCompanyId, BaseCompany::getCompanyName,
+                BaseCompany::getCompanyType, BaseCompany::getLinkPhone, BaseCompany::getAddress,BaseCompany::getStreetTown)
+                .eq(BaseCompany::getEnable, 0)
+                .eq(StringUtils.isNotBlank(streetTown), BaseCompany::getStreetTown, streetTown)
+                .eq(StringUtils.isNotBlank(companyType), BaseCompany::getCompanyType, companyType);
+        List<BaseCompany> list1 = this.list(queryWrapper);
+        if (CollectionUtils.isNotEmpty(list1)) {
+            List<String> companyIdList = new ArrayList<>();
+            for (int i = 0; i < list1.size(); i++) {
+                companyIdList.add(list1.get(i).getCompanyId());
+            }
+            LambdaQueryWrapper<BaseCompanyAttach1> queryWrapper1 = Wrappers.lambdaQuery();
+            queryWrapper1.select(BaseCompanyAttach1::getId,BaseCompanyAttach1::getCompanyId,BaseCompanyAttach1::getLongitude,
+                    BaseCompanyAttach1::getLatitude)
+                    .in(BaseCompanyAttach1::getCompanyId, companyIdList);
+            List<BaseCompanyAttach1> list2 = baseCompanyAttach1Service.list(queryWrapper1);
+            for (int i = 0; i < list1.size(); i++) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", list1.get(i).getId());
+                map.put("companyName", list1.get(i).getCompanyName());
+                String companyTyepName = null;
+                if (StringUtils.isNotBlank(list1.get(i).getCompanyType())) {
+                    if (list1.get(i).getCompanyType().equals("1")) {
+                        companyTyepName = "重点单位";
+                    } else if (list1.get(i).getCompanyType().equals("2")) {
+                        companyTyepName = "一般单位";
+                    } else if (list1.get(i).getCompanyType().equals("3")) {
+                        companyTyepName = "九小场所";
+                    } else if (list1.get(i).getCompanyType().equals("9")) {
+                        companyTyepName = "其他单位";
+                    }
+                }
+
+                map.put("companyTypeName", companyTyepName);
+                map.put("linkPhone", list1.get(i).getLinkPhone());
+                map.put("address", list1.get(i).getAddress());
+                map.put("longitude", null);
+                map.put("latitude", null);
+                map.put("streetTown", null);
+                for (int j = 0; j < list2.size(); j++) {
+                    if (list1.get(i).getCompanyId().equals(list2.get(j).getCompanyId())) {
+                        String longitude = null;
+                        String latitude = null;
+                        if ((StringUtils.isBlank(list2.get(j).getLongitude())&&StringUtils.isNotBlank(list1.get(i).getAddress()))) {
+                            List<LocateInfo> lonLat = OnlineMethod.getLonLat(list1.get(i).getAddress());
+                            if (CollectionUtils.isNotEmpty(lonLat)){
+                                if (StringUtils.isBlank(list2.get(j).getLongitude())&&StringUtils.isBlank(list2.get(j).getLatitude())){
+                                    longitude = "" + lonLat.get(0).getLongitude();
+                                    latitude = "" + lonLat.get(0).getLatitude();
+                                }else {
+                                    longitude = list2.get(j).getLongitude();
+                                    latitude = list2.get(j).getLatitude();
+                                }
+                                if (StringUtils.isBlank(list1.get(i).getStreetTown())){
+                                    streetTown = lonLat.get(0).getStreet();
+                                }else {
+                                    streetTown = list1.get(i).getStreetTown();
+                                }
+                                this.updateCompany1(list1.get(i).getId(), list2.get(j).getId(), longitude, latitude, streetTown);
+                            }
+                        } else {
+                            longitude = list2.get(j).getLongitude();
+                            latitude = list2.get(j).getLatitude();
+                            streetTown = list1.get(i).getStreetTown();
+                        }
+                        map.put("streetTown", streetTown);
+                        map.put("longitude", longitude);
+                        map.put("latitude", latitude);
+                    }
+                }
+                if (map.get("longitude") != null && map.get("latitude") != null) {
+                    if (StringUtils.isNotBlank(streetTown)){
+                        if (streetTown.equals(map.get("streetTown").toString())){
+                            list.add(map);
+                        }
+                    }else {
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    @Transactional
+    @Override
+    public void updateCompany1(Integer id1, Integer id2, String longitude, String latitude, String streetTown) {
+        BaseCompany baseCompany = new BaseCompany();
+        baseCompany.setId(id1);
+        baseCompany.setStreetTown(streetTown);
+        baseCompany.setUpdatePerson(SecurityUtils.getUsername());
+        baseCompany.setUpdateTime(LocalDateTime.now());
+        this.updateById(baseCompany);
+        BaseCompanyAttach1 baseCompanyAttach1 = new BaseCompanyAttach1();
+        baseCompanyAttach1.setId(id2);
+        baseCompanyAttach1.setLongitude(longitude);
+        baseCompanyAttach1.setLatitude(latitude);
+        baseCompanyAttach1.setUpdatePerson(SecurityUtils.getUsername());
+        baseCompanyAttach1.setUpdateTime(LocalDateTime.now());
+        baseCompanyAttach1Service.updateById(baseCompanyAttach1);
+    }
+
 
 }

+ 66 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/OnlineMethod.java

@@ -1,9 +1,18 @@
 package com.usky.fire.service.util;
 
+//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.usky.common.core.util.HttpUtils;
+import com.usky.fire.service.vo.LocateInfo;
 import com.usky.fire.service.vo.PatrolInspectionAreaVo;
+import lombok.extern.slf4j.Slf4j;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.URLEncoder;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -18,8 +27,65 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+@Slf4j
 public class OnlineMethod {
 
+    /**
+     * 1.地址转换为经纬度
+     * @param address 地址
+     * @return 经纬度
+     */
+    private static final String GOULD_KEY="2761d6ab4784b2f1de57a787f18c0e46";
+
+    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) {
+                    LocateInfo locateInfo = new LocateInfo();
+                    String location = objNode.get("location").asText();
+                    if (StringUtils.isNotBlank(location) && !"[]".equals(location)){
+                        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());
+                    }else {
+                        locateInfo.setLongitude(0.00);
+                        locateInfo.setLatitude(0.00);
+                        locateInfo.setDistrict("");
+                        locateInfo.setStreet("");
+                    }
+                    locateInfos.add(locateInfo);
+                }
+            }
+        }catch (Exception e){
+            log.error(e.getMessage());
+        }
+        return locateInfos;
+    }
+
+    /**
+     * 3.发送请求
+     * @param serverUrl 请求地址
+     */
+    private static String getResponse(String serverUrl) {
+        // 用JAVA发起http请求,并返回json格式的结果
+        String result = "";
+        try {
+            result = HttpUtils.get(serverUrl, null);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
     /**
      * 差集(基于java8新特性)优化解法2 适用于大数据量
      * 求List1中有的但是List2中没有的元素

+ 16 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/LocateInfo.java

@@ -0,0 +1,16 @@
+package com.usky.fire.service.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;
+}

+ 1 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/BaseCompanyMapper.xml

@@ -27,6 +27,7 @@
         <result column="division_name" property="divisionName" />
         <result column="fire_jurisdiction" property="fireJurisdiction" />
         <result column="detachment_id" property="detachmentId" />
+        <result column="street_town" property="streetTown" />
         <result column="enable" property="enable" />
         <result column="creator_name" property="creatorName" />
         <result column="creator" property="creator" />