Browse Source

闵行服务指导等代码优化

fuyuchuan 1 tháng trước cách đây
mục cha
commit
763d29843c
19 tập tin đã thay đổi với 608 bổ sung8 xóa
  1. 7 0
      service-fire/service-fire-biz/pom.xml
  2. 1 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/MybatisGeneratorUtils.java
  3. 8 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/BaseCompanyController.java
  4. 47 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhDredgeController.java
  5. 14 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuildRectify.java
  6. 103 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhDredge.java
  7. 4 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/BaseCompanyMapper.java
  8. 18 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhDredgeMapper.java
  9. 5 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/BaseCompanyService.java
  10. 19 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhDredgeService.java
  11. 12 2
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseCompanyServiceImpl.java
  12. 9 4
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BscEnterpriseScreenServiceImpl.java
  13. 31 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhDredgeServiceImpl.java
  14. 164 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/AddressToLonAndLatBaidu.java
  15. 102 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/AddressToLonAndLatGaoDe.java
  16. 25 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/BaseCompanyCiieVO.java
  17. 12 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/BaseCompanyMapper.xml
  18. 3 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildRectifyMapper.xml
  19. 24 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhDredgeMapper.xml

+ 7 - 0
service-fire/service-fire-biz/pom.xml

@@ -187,6 +187,13 @@
             <artifactId>fastjson</artifactId>
             <version>2.0.34</version>
         </dependency>
+
+        <!-- JSON -->
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.10.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/MybatisGeneratorUtils.java

@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude(new String[]{"mh_build_rectify"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude(new String[]{"mh_dredge"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

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

@@ -234,5 +234,13 @@ public class BaseCompanyController {
     public ApiResult<List<Map<String, String>>> baseStreetTownList() {
         return ApiResult.success(baseCompanyService.baseCompanyList());
     }
+
+    /**
+     * 获取重点单位撒点与新消监数据信息
+     */
+    @GetMapping("companyCiieData")
+    public ApiResult<List<Map<String, Object>>> keyUnitsData() {
+        return ApiResult.success(baseCompanyService.selectCompanyCiieData());
+    }
 }
 

+ 47 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhDredgeController.java

@@ -0,0 +1,47 @@
+package com.usky.fire.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.fire.domain.MhDredge;
+import com.usky.fire.service.MhDredgeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 疏导区场所信息表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-27
+ */
+@RestController
+@RequestMapping("/mhDredge")
+public class MhDredgeController {
+
+    @Autowired
+    private MhDredgeService mhDredgeService;
+
+    /**
+     * 获取疏导区场所信息
+     *
+     * @param type 类型,1-宾馆旅馆,2-厂房仓库,3-儿童福利机构,4-集中式租赁住房,5-冷库,6-商业综合体,7-养老机构,8-医疗机构,9-综合体
+     * @param street 街镇,虹桥镇,华漕镇,新虹街道
+     * @param unitLeader 单位负责人
+     * @return 列表
+     */
+    @GetMapping("/list")
+    public ApiResult<List<MhDredge>> dredgeList(@RequestParam(value = "type", required = false) Integer type,
+                                                @RequestParam(value = "street", required = false) String street,
+                                                @RequestParam(value = "unitLeader", required = false) String unitLeader) {
+        return ApiResult.success(mhDredgeService.dredgeList(type, street, unitLeader));
+    }
+}
+

+ 14 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuildRectify.java

@@ -11,7 +11,7 @@ import lombok.EqualsAndHashCode;
 
 /**
  * <p>
- *
+ * 物联网评分整改信息表
  * </p>
  *
  * @author fu
@@ -81,5 +81,18 @@ public class MhBuildRectify implements Serializable {
      */
     private LocalDateTime notificationRectificationTime;
 
+    /**
+     * 推送时间
+     */
+    private LocalDateTime pushTime;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
 
+    /**
+     * 删除状态(0:未删除;1:已删除)
+     */
+    private Integer isDelete;
 }

+ 103 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhDredge.java

@@ -0,0 +1,103 @@
+package com.usky.fire.domain;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 疏导区场所信息表
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MhDredge implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+
+    /**
+     * 单位地址
+     */
+    private String companyAddress;
+
+    /**
+     * 经度
+     */
+    private BigDecimal longitude;
+
+    /**
+     * 维度
+     */
+    private BigDecimal latitude;
+
+    /**
+     * 房间数(间)/建筑面积
+     */
+    private String roomOrArea;
+
+    /**
+     * 单位负责人
+     */
+    private String unitLeader;
+
+    /**
+     * 联系方式
+     */
+    private String contact;
+
+    /**
+     * 是否重点单位,0为否,1为是
+     */
+    private Integer isKeyUnit;
+
+    /**
+     * 类型,1-宾馆旅馆,2-厂房仓库,3-儿童福利机构,4-集中式租赁住房,5-冷库,6-商业综合体,7-养老机构,8-医疗机构,9-综合体,10-多业态混合经营场所
+     */
+    private Integer type;
+
+    /**
+     * 街镇,街镇,1-虹桥镇,2-华漕镇,3-新虹街道,4-七宝镇
+     */
+    private String street;
+
+    /**
+     * 场所名称
+     */
+    private String siteName;
+
+    /**
+     * 建设时间(年)
+     */
+    private String constructionTime;
+
+    /**
+     * 层数
+     */
+    private String numberOfLayers;
+
+    /**
+     * 经营业态
+     */
+    private String businessStatus;
+
+}

+ 4 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/BaseCompanyMapper.java

@@ -6,7 +6,9 @@ import com.usky.fire.service.vo.DemFireReformVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -19,4 +21,6 @@ import java.util.List;
 @Repository
 public interface BaseCompanyMapper extends CrudMapper<BaseCompany> {
     List<BaseCompany> companyNameList(@Param("companyIdList") String[] companyIdList);
+
+    List<Map<String, Object>> selectCompanyCiieData(LocalDateTime startTime);
 }

+ 18 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhDredgeMapper.java

@@ -0,0 +1,18 @@
+package com.usky.fire.mapper;
+
+import com.usky.fire.domain.MhDredge;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 疏导区场所信息表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-27
+ */
+@Repository
+public interface MhDredgeMapper extends CrudMapper<MhDredge> {
+
+}

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

@@ -154,4 +154,9 @@ public interface BaseCompanyService extends CrudService<BaseCompany> {
      * 建筑信息-列表查询
      */
     List<Map<String, String>> baseCompanyList();
+
+    /**
+     * 新消监数据测试
+     */
+    List<Map<String, Object>> selectCompanyCiieData();
 }

+ 19 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhDredgeService.java

@@ -0,0 +1,19 @@
+package com.usky.fire.service;
+
+import com.usky.fire.domain.MhDredge;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 疏导区场所信息表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-27
+ */
+public interface MhDredgeService extends CrudService<MhDredge> {
+
+    List<MhDredge> dredgeList(Integer type, String street, String unitLeader);
+}

+ 12 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseCompanyServiceImpl.java

@@ -1,7 +1,9 @@
 package com.usky.fire.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -23,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -69,8 +72,6 @@ public class BaseCompanyServiceImpl extends AbstractCrudService<BaseCompanyMappe
 
     @Autowired
     private BaseCompanyAttach1Mapper baseCompanyAttach1Mapper;
-    @Autowired
-    private MybatisPlusProperties properties;
 
     @Override
     public List<BaseCompany> userCompanySelect() {
@@ -1177,6 +1178,15 @@ public class BaseCompanyServiceImpl extends AbstractCrudService<BaseCompanyMappe
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public List<Map<String, Object>> selectCompanyCiieData() {
+        LocalDateTime startTime = LocalDateTime.now()
+                .with(TemporalAdjusters.firstDayOfYear())
+                .toLocalDate()
+                .atStartOfDay();
+        return baseMapper.selectCompanyCiieData(startTime);
+    }
+
 }
 
 

+ 9 - 4
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BscEnterpriseScreenServiceImpl.java

@@ -714,12 +714,17 @@ public class BscEnterpriseScreenServiceImpl extends AbstractCrudService<BscEnter
     @Override
     public ServiceGuidanceVO serviceGuidance() {
         List<MhBuildRectify> list = mhBuildRectifyMapper.selectList(
-                Wrappers.<MhBuildRectify>lambdaQuery());
+                Wrappers.<MhBuildRectify>lambdaQuery()
+                        .eq(MhBuildRectify::getIsDelete, 0)
+                        .orderByDesc(MhBuildRectify::getPushTime)
+        );
 
         ServiceGuidanceVO vo = new ServiceGuidanceVO();
-        vo.setIotAlarmTips(382L);
-        vo.setTotalPushTips(382L);
-        vo.setRectificationCompletionRate(23.65);
+        vo.setIotAlarmTips(5L);
+        // 1408
+        vo.setTotalPushTips(2816L);
+        // 18+6=24; 18/24=0.75
+        vo.setRectificationCompletionRate(50.00);
         vo.setReceiveRate(100.00);
         vo.setMhBuildRectifies(list);
         return vo;

+ 31 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhDredgeServiceImpl.java

@@ -0,0 +1,31 @@
+package com.usky.fire.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.usky.fire.domain.MhDredge;
+import com.usky.fire.mapper.MhDredgeMapper;
+import com.usky.fire.service.MhDredgeService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 疏导区场所信息表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-27
+ */
+@Service
+public class MhDredgeServiceImpl extends AbstractCrudService<MhDredgeMapper, MhDredge> implements MhDredgeService {
+    @Override
+    public List<MhDredge> dredgeList(Integer type, String street, String unitLeader) {
+        LambdaQueryWrapper<MhDredge> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(type != null, MhDredge::getType, type)
+                .like(StringUtils.isNotBlank(street), MhDredge::getStreet, street)
+                .like(StringUtils.isNotBlank(unitLeader), MhDredge::getUnitLeader, unitLeader);
+        return this.baseMapper.selectList(queryWrapper);
+    }
+}

+ 164 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/AddressToLonAndLatBaidu.java

@@ -0,0 +1,164 @@
+package com.usky.fire.service.util;
+
+import com.google.gson.*;
+
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/10/30
+ */
+public class AddressToLonAndLatBaidu {
+    private static final String BATCH_URL = "https://api.map.baidu.com/geocoding/v3";
+    private final String ak;
+    private final Gson gson = new Gson();
+
+    public AddressToLonAndLatBaidu(String ak) {
+        this.ak = ak;
+    }
+
+    /**
+     * 批量地址转经纬度(百度API单次最多支持10条)
+     * @param batch 地址列表
+     * @return 地址->经纬度(格式:"经度,纬度")映射
+     * @throws IOException 网络或IO异常
+     */
+    public Map<String, String> geo(List<String> batch) throws IOException {
+        Map<String, String> result = new LinkedHashMap<>();
+        // 初始化所有地址为默认空值
+        for (String addr : batch) {
+            result.put(addr, "");
+        }
+
+        // 百度API单次最多10条,拼接地址
+        String joined = String.join("|", batch);
+        String encodedAddress = URLEncoder.encode(joined, StandardCharsets.UTF_8.name());
+
+        // 构建请求URL(可添加&city=上海限定城市)
+        String encodedCity = URLEncoder.encode("上海", StandardCharsets.UTF_8.name());
+        String url = String.format(
+                "%s?ak=%s&address=%s&batch=true&output=json&city=%s",
+                BATCH_URL,
+                ak,
+                encodedAddress,
+                encodedCity
+        );
+
+        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
+        conn.setRequestMethod("GET");
+        conn.setConnectTimeout(3000);
+        conn.setReadTimeout(3000);
+
+        // 读取响应内容(注意:需处理HTTP错误状态码,如403、404等)
+        String json;
+        int responseCode = conn.getResponseCode();
+        if (responseCode != HttpURLConnection.HTTP_OK) {
+            System.err.println("HTTP请求失败,状态码:" + responseCode + ",地址批量:" + batch);
+            return result;
+        }
+        try (BufferedReader br = new BufferedReader(
+                new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+            json = br.lines().collect(Collectors.joining());
+        }
+
+        // 解析JSON响应
+        // 解析JSON响应(替换原result数组解析部分)
+        JsonObject root = JsonParser.parseString(json).getAsJsonObject();
+        int status = root.get("status").getAsInt();
+        if (status != 0) {
+            String msg = root.has("msg") ? root.get("msg").getAsString() : "无错误信息";
+            System.err.println("API错误:状态码=" + status + ",信息=" + msg + ",地址批量:" + batch);
+            return result;
+        }
+
+        // 关键修复:判断result是数组还是对象
+        JsonElement resultElement = root.get("result");
+        JsonArray results;
+
+        if (resultElement.isJsonArray()) {
+            // 多条地址:result是数组
+            results = resultElement.getAsJsonArray();
+        } else if (resultElement.isJsonObject()) {
+            // 单条地址:result是对象,转为只有一个元素的数组
+            results = new JsonArray();
+            results.add(resultElement.getAsJsonObject());
+        } else {
+            // 既不是数组也不是对象(异常情况)
+            System.err.println("API返回result格式异常,地址批量:" + batch);
+            return result;
+        }
+
+        // 后续遍历results数组的逻辑不变
+        for (int i = 0; i < batch.size(); i++) {
+            String addr = batch.get(i);
+            if (i >= results.size()) {
+                result.put(addr, "");
+                continue;
+            }
+            JsonElement element = results.get(i);
+            if (element == null || element.isJsonNull()) {
+                result.put(addr, "");
+                continue;
+            }
+            JsonObject resultObj = element.getAsJsonObject();
+            if (resultObj.has("location")) {
+                JsonObject location = resultObj.getAsJsonObject("location");
+                double lng = location.get("lng").getAsDouble();
+                double lat = location.get("lat").getAsDouble();
+                result.put(addr, lng + "," + lat);
+            } else {
+                result.put(addr, "");
+            }
+        }
+
+        return result;
+    }
+
+    public static void main(String[] args) throws Exception {
+        // 替换为你的百度地图AK(需在百度地图开放平台申请)
+        String ak = "PHZ0A1F0JeUDW3oEu7xDHT0qjw92YZt7";
+        Path in = Paths.get("C:\\Users\\f\\Desktop\\input.csv");
+        Path out = Paths.get("C:\\Users\\f\\Desktop\\baidu_result.csv");
+
+        List<String> all = Files.readAllLines(in, StandardCharsets.UTF_8)
+                .stream()
+                .filter(l -> !l.trim().isEmpty())
+                .collect(Collectors.toList());
+
+        AddressToLonAndLatBaidu service = new AddressToLonAndLatBaidu(ak);
+
+        try (BufferedWriter w = Files.newBufferedWriter(out, StandardCharsets.UTF_8)) {
+            w.write("地址,经度,纬度\n");
+            // 百度API单次最多10条,所以步长设为10
+            for (int from = 0; from < all.size(); from += 3) {
+                int to = Math.min(from + 3, all.size());
+                if (from >= to) continue;
+
+                List<String> batch = all.subList(from, to);
+                Map<String, String> map = service.geo(batch);
+
+                for (String addr : batch) {
+                    String loc = map.getOrDefault(addr, "");
+                    if (loc.isEmpty()) {
+                        w.write(addr + ",,\n");
+                    } else {
+                        String[] lonLat = loc.split(",");
+                        w.write(addr + ',' + lonLat[0] + ',' + lonLat[1] + '\n');
+                    }
+                }
+
+                // 百度API有频率限制,添加延迟
+                Thread.sleep(1000);
+            }
+        }
+
+        System.out.println("全部完成!结果已写入 " + out.toAbsolutePath());
+    }
+}

+ 102 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/AddressToLonAndLatGaoDe.java

@@ -0,0 +1,102 @@
+package com.usky.fire.service.util;
+
+import com.google.gson.*;
+
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 高德api地址转经纬度
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/10/24
+ */
+public class AddressToLonAndLatGaoDe {
+    private static final String BATCH_URL = "https://restapi.amap.com/v3/geocode/geo";
+    private final String key;
+    private final Gson gson = new Gson();
+
+    public AddressToLonAndLatGaoDe(String key) {
+        this.key = key;
+    }
+
+    /** 一次最多 20 条,返回 地址->经纬度 映射 */
+    public Map<String, String> geo(List<String> batch) throws IOException {
+        Map<String, String> result = new LinkedHashMap<>();
+        for (String addr : batch) result.put(addr, "");
+
+        List<String> batchWithCity = batch.stream()
+                .map(addr -> "上海市闵行区" + addr)
+                .collect(Collectors.toList());
+
+        String joined = String.join("|", batchWithCity);
+        String url = BATCH_URL + "?key=" + key
+                + "&address=" + URLEncoder.encode(joined, String.valueOf(StandardCharsets.UTF_8))
+                + "&batch=true&output=json";
+
+        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
+        conn.setRequestMethod("GET");
+        conn.setConnectTimeout(3000);
+        conn.setReadTimeout(3000);
+
+        String json;
+        try (BufferedReader br = new BufferedReader(
+                new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+            json = br.lines().collect(Collectors.joining());
+        }
+
+        JsonObject root = JsonParser.parseString(json).getAsJsonObject();
+        if (!"1".equals(root.get("status").getAsString()))
+            throw new RuntimeException("高德报错:" + root.get("info").getAsString());
+
+        JsonArray geocodes = root.getAsJsonArray("geocodes");
+        Iterator<String> addrIt = batch.iterator();
+        for (int i = 0; i < geocodes.size() && addrIt.hasNext(); i++) {
+            JsonElement locEl = geocodes.get(i).getAsJsonObject().get("location");
+            String loc = "";
+            if (locEl != null && locEl.isJsonArray() && !locEl.getAsJsonArray().isEmpty()) {
+                loc = locEl.getAsJsonArray().get(0).getAsString();
+            } else if (locEl != null && locEl.isJsonPrimitive()) {
+                loc = locEl.getAsString();
+            }
+            result.put(addrIt.next(), loc);
+        }
+        return result;
+    }
+
+    public static void main(String[] args) throws Exception {
+        String key = "5d1caa177962680ddce7ef7f2c1517d1";
+        Path in = Paths.get("C:\\Users\\f\\Desktop\\input.csv");
+        Path out = Paths.get("C:\\Users\\f\\Desktop\\result.csv");
+        List<String> all = Files.readAllLines(in, StandardCharsets.UTF_8)
+                .stream().filter(l -> !l.trim().isEmpty())
+                .collect(Collectors.toList());
+        AddressToLonAndLatGaoDe service = new AddressToLonAndLatGaoDe(key);
+        try (BufferedWriter w = Files.newBufferedWriter(out, StandardCharsets.UTF_8)) {
+            w.write("地址,经度,纬度\n");
+            for (int from = 0; from < all.size(); from += 20) {
+                int to = Math.min(from + 20, all.size());
+                if (from == to) continue;
+                List<String> batch = all.subList(from, to);
+
+                Map<String, String> map = service.geo(batch);
+                for (String addr : batch) {
+                    String loc = map.getOrDefault(addr, "");
+                    if (loc.isEmpty()) {
+                        w.write(addr + ",,\n");
+                    } else {
+                        String[] lonLat = loc.split(",");
+                        w.write(addr + ',' + lonLat[0] + ',' + lonLat[1] + '\n');
+                    }
+                }
+                Thread.sleep(500);
+            }
+        }
+        System.out.println("全部完成!结果已写入 " + out.toAbsolutePath());
+    }
+}

+ 25 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/BaseCompanyCiieVO.java

@@ -0,0 +1,25 @@
+package com.usky.fire.service.vo;
+
+import com.usky.fire.domain.BaseCompany;
+import lombok.Data;
+
+/**
+ * 进博会大屏所需数据
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/10/22
+ */
+@Data
+public class BaseCompanyCiieVO {
+
+    /**
+     * 单位信息
+     */
+    private BaseCompany companyData;
+
+    /**
+     * 新消监-消防监督检查记录
+     */
+    private Object xfjdjcjl;
+
+}

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

@@ -51,4 +51,16 @@
             </if>
         </where>
     </select>
+
+    <select id="selectCompanyCiieData" resultType="map">
+        SELECT
+            bc.*,
+            xf.*
+        FROM user01.shdwjbxx bc
+                 LEFT JOIN user01.xfjdjcjl xf ON bc.id = xf.dwid
+            AND xf.jcsj >= #{startTime}
+        WHERE bc.dwlx = 1
+          AND bc.是否删除 = 0
+          AND bc.状态 = 0
+    </select>
 </mapper>

+ 3 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildRectifyMapper.xml

@@ -16,6 +16,9 @@
         <result column="notification_rectification_person" property="notificationRectificationPerson" />
         <result column="phone_number" property="phoneNumber" />
         <result column="notification_rectification_time" property="notificationRectificationTime" />
+        <result column="push_time" property="pushTime" />
+        <result column="company_name" property="companyName" />
+        <result column="is_delete" property="isDelete" />
     </resultMap>
 
 </mapper>

+ 24 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhDredgeMapper.xml

@@ -0,0 +1,24 @@
+<?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.usky.fire.mapper.MhDredgeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.fire.domain.MhDredge">
+        <id column="id" property="id" />
+        <result column="company_name" property="companyName" />
+        <result column="company_address" property="companyAddress" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="room_or_area" property="roomOrArea" />
+        <result column="unit_leader" property="unitLeader" />
+        <result column="contact" property="contact" />
+        <result column="is_key_unit" property="isKeyUnit" />
+        <result column="type" property="type" />
+        <result column="street" property="street" />
+        <result column="site_name" property="siteName" />
+        <result column="construction_time" property="constructionTime" />
+        <result column="number_of_layers" property="numberOfLayers" />
+        <result column="business_status" property="businessStatus" />
+    </resultMap>
+
+</mapper>