Browse Source

闵行厂房仓库数据定时导入,开发撒点接口

fuyuchuan 6 days ago
parent
commit
09273346ca
25 changed files with 1722 additions and 19 deletions
  1. 18 7
      service-fire/service-fire-biz/pom.xml
  2. 5 5
      service-fire/service-fire-biz/src/main/java/com/usky/fire/RuoYiSystemApplication.java
  3. 4 4
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/MybatisGeneratorUtils.java
  4. 22 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildController.java
  5. 51 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhCompanyController.java
  6. 22 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhHiddenDangerController.java
  7. 206 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuild.java
  8. 209 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhCompany.java
  9. 104 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhHiddenDanger.java
  10. 18 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhBuildMapper.java
  11. 18 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhCompanyMapper.java
  12. 18 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhHiddenDangerMapper.java
  13. 16 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhBuildService.java
  14. 21 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhCompanyService.java
  15. 16 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhHiddenDangerService.java
  16. 20 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhBuildServiceImpl.java
  17. 118 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhCompanyServiceImpl.java
  18. 20 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhHiddenDangerServiceImpl.java
  19. 41 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/ListTypeHandler.java
  20. 463 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/MhScheduledImport.java
  21. 200 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/MhCompanyVO.java
  22. 4 3
      service-fire/service-fire-biz/src/main/resources/application.yml
  23. 47 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildMapper.xml
  24. 38 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhCompanyMapper.xml
  25. 23 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhHiddenDangerMapper.xml

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

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>service-fire</artifactId>
         <groupId>com.usky</groupId>
@@ -95,18 +96,16 @@
             <artifactId>guava</artifactId>
         </dependency>
 
-
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
         <!-- Pagehelper -->
-<!--        <dependency>-->
-<!--            <groupId>com.github.pagehelper</groupId>-->
-<!--            <artifactId>pagehelper-spring-boot-starter</artifactId>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.github.pagehelper</groupId>-->
+        <!--            <artifactId>pagehelper-spring-boot-starter</artifactId>-->
+        <!--        </dependency>-->
         <dependency>
             <groupId>com.usky</groupId>
             <artifactId>ruoyi-common-core</artifactId>
@@ -176,6 +175,18 @@
             <artifactId>DmJdbcDriver</artifactId>
             <version>1.8.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents.client5</groupId>
+            <artifactId>httpclient5</artifactId>
+            <version>5.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.34</version>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -6,10 +6,11 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 系统模块
- * 
+ *
  * @author ruoyi
  */
 
@@ -17,11 +18,10 @@ import org.springframework.context.annotation.ComponentScan;
 @EnableFeignClients(basePackages = "com.usky")
 @MapperScan(value = "com.usky.fire.mapper")
 @ComponentScan("com.usky")
+@EnableScheduling
 @SpringBootApplication
-public class RuoYiSystemApplication
-{
-    public static void main(String[] args)
-    {
+public class RuoYiSystemApplication {
+    public static void main(String[] args) {
         SpringApplication.run(RuoYiSystemApplication.class, args);
         System.out.println("(♥◠‿◠)ノ゙  永天测试模块启动成功   ლ(´ڡ`ლ)゙  \n" +
                 " .-------.       ____     __        \n" +

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

@@ -43,10 +43,10 @@ public class MybatisGeneratorUtils {
         //2、数据源配置
         //修改数据源
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-fire?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setUrl("jdbc:mysql://192.168.10.165:3306/usky-fire?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
         dsc.setDriverName("com.mysql.jdbc.Driver");
-        dsc.setUsername("usky");
-        dsc.setPassword("Yt#75Usky");
+        dsc.setUsername("root");
+        dsc.setPassword("yt123456");
         mpg.setDataSource(dsc);
 
         // 3、包配置
@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("base_ggp_facility");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude(new String[]{"mh_build"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 22 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildController.java

@@ -0,0 +1,22 @@
+package com.usky.fire.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 闵行-建筑信息表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2025-04-03
+ */
+@RestController
+@RequestMapping("/mhBuild")
+public class MhBuildController {
+
+}
+

+ 51 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhCompanyController.java

@@ -0,0 +1,51 @@
+package com.usky.fire.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.fire.service.MhCompanyService;
+import com.usky.fire.service.vo.MhCompanyVO;
+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 han
+ * @since 2025-03-28
+ */
+@RestController
+@RequestMapping("/mhCompany")
+public class MhCompanyController {
+    @Autowired
+    private MhCompanyService mhCompanyService;
+
+    /**
+     * 获取单位信息
+     *
+     * @param type 类型(1:厂房仓库)
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @param pageNum 当前页
+     * @param pageSize 每页条数
+     * @return
+     */
+    @GetMapping("/getWarehouse")
+    public ApiResult<CommonPage<MhCompanyVO>> getWarehouse(@RequestParam(value = "type") Integer type,
+                                                           @RequestParam(value = "startTime", required = false) String startTime,
+                                                           @RequestParam(value = "endTime", required = false) String endTime,
+                                                           @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                           @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize) {
+        return ApiResult.success(mhCompanyService.getWarehouse(type, startTime, endTime, pageNum, pageSize));
+    }
+}
+

+ 22 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhHiddenDangerController.java

@@ -0,0 +1,22 @@
+package com.usky.fire.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 隐患信息表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@RestController
+@RequestMapping("/mhHiddenDanger")
+public class MhHiddenDangerController {
+
+}
+

+ 206 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuild.java

@@ -0,0 +1,206 @@
+package com.usky.fire.domain;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 闵行-建筑信息表
+ * </p>
+ *
+ * @author han
+ * @since 2025-04-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MhBuild implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一标识
+     */
+    @TableId(type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 建筑名称
+     */
+    private String buildName;
+
+    /**
+     * 经度
+     */
+    private String lon;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 区域
+     */
+    private String area;
+
+    /**
+     * 街道
+     */
+    private String street;
+
+    /**
+     * 建筑地址
+     */
+    private String address;
+
+    /**
+     * 完整地址
+     */
+    @TableField("addressPc")
+    private String addressPc;
+
+    /**
+     * 建筑结构
+     */
+    private String buildStructure;
+
+    /**
+     * 建筑面积
+     */
+    private String buildArea;
+
+    /**
+     * 建筑高度
+     */
+    private String height;
+
+    /**
+     * 地上建筑层数
+     */
+    private Long buildFloorsUp;
+
+    /**
+     * 地下建筑层数
+     */
+    private Long buildFloorsDown;
+
+    /**
+     * 消防设施
+     */
+    private String fireFightingDevice;
+
+    /**
+     * 使用性质
+     */
+    private String buildNature;
+
+    /**
+     * 产权单位
+     */
+    private String propertyOwner;
+
+    /**
+     * 法定代表人
+     */
+    private String legal;
+
+    /**
+     * 产权或管理单位法定代表人
+     */
+    private String propertyLegal;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 租户ID
+     */
+    private String leaseholderId;
+
+    /**
+     * 公司id
+     */
+    private String companyInfoId;
+
+    /**
+     * 1:多产权,0:单产权
+     */
+    private Integer property;
+
+    /**
+     * 产权类型
+     */
+    private String propertyStr;
+
+    /**
+     * 管理单位名称
+     */
+    private String manageCompany;
+
+    /**
+     * 使用性质
+     */
+    private List<String> buildNatures;
+
+    /**
+     * 消防设施
+     */
+    private List<String> fireFightingDevices;
+
+    /**
+     * 公司信息
+     */
+    private List<String> companyInfos;
+
+    /**
+     * 单位操作日志
+     */
+    private String companyOperLogs;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新时间字符串
+     */
+    private String updateTimeStr;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 上级更新公司
+     */
+    private String upperUpdateCompany;
+
+    /**
+     * 更新公司
+     */
+    private String updateCompany;
+
+    /**
+     * 更新人电话
+     */
+    private String updateByPhone;
+
+    /**
+     * 使用状态 0:正常 1:注销
+     */
+    private String status;
+}

+ 209 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhCompany.java

@@ -0,0 +1,209 @@
+package com.usky.fire.domain;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 闵行-单位信息表
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@TableName("mh_company")
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MhCompany implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.INPUT)
+    //@TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 单位名称
+     */
+    //@TableField("company_name")
+    private String companyName;
+
+    /**
+     * 单位类型(自用,出租)
+     */
+    //@TableField("company_status")
+    private String companyStatus;
+
+    /**
+     * 单位地址
+     */
+    //@TableField("company_address")
+    private String companyAddress;
+
+    /**
+     * 是否开通企业码 0:未开通 1:开通
+     */
+    //@TableField("qr_code")
+    private Integer qrcode;
+
+    /**
+     * 统一社会信用代码
+     */
+    //@TableField("credit_code")
+    private String creditCode;
+
+    /**
+     * 法人代表
+     */
+    //@TableField("company_legal")
+    private String companyLegal;
+
+    /**
+     * 消防安全管理人
+     */
+    //@TableField("safety_manager")
+    private String safetyManager;
+
+    /**
+     * 联系电话
+     */
+    //@TableField("phone")
+    private String phone;
+
+    /**
+     * 单位类别标签1
+     */
+    //@TableField("company_type1")
+    private String companyType1;
+
+    /**
+     * 单位类别标签2
+     */
+    //@TableField("company_type2")
+    private String companyType2;
+
+    /**
+     * 单位类别标签3
+     */
+    //@TableField("company_type3")
+    private String companyType3;
+
+    /**
+     * 自用建筑面积
+     */
+    //@TableField("company_area")
+    private String companyArea;
+
+    /**
+     * 夹(插)层面积
+     */
+    //@TableField("interlayer_area")
+    private String interlayerArea;
+
+    /**
+     * 冷库面积
+     */
+    //@TableField("cold_storage_area")
+    private String coldStorageArea;
+
+    /**
+     * 使用部位
+     */
+    //@TableField("use_part")
+    private String usePart;
+
+    /**
+     * 所属街道
+     */
+    //@TableField("street")
+    private String street;
+
+    /**
+     * 建筑id
+     */
+    //@TableField("build_id")
+    private Long buildId;
+
+    /**
+     * 隐患状态 
+     */
+    //@TableField("state")
+    private String state;
+
+    /**
+     * 单位门头照
+     */
+    //@TableField("photo")
+    private String photo;
+
+    /**
+     * 营业执照照片
+     */
+    //@TableField("license_photo")
+    private String licensePhoto;
+
+    /**
+     * 没有拍营业执照原因
+     */
+    //@TableField("reason")
+    private String reason;
+
+    /**
+     * 单位状态 0:正常 1:注销
+     */
+    // @TableField("status")
+    private Integer status;
+
+    /**
+     * 1:排查过 0:未排查
+     */
+    //@TableField("is_examine")
+    private Integer isExamine;
+
+    /**
+     * 1:有隐患  0:无隐患
+     */
+    // @TableField("have_trouble")
+    private String haveTrouble;
+
+    /**
+     * 创建人
+     */
+    // @TableField("create_by")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    //@TableField("create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    //@TableField("update_by")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    //@TableField("update_time")
+    private LocalDateTime updateTime;
+
+
+}

+ 104 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhHiddenDanger.java

@@ -0,0 +1,104 @@
+package com.usky.fire.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 隐患信息表
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MhHiddenDanger implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId("logId")
+    private Long logId;
+
+    /**
+     * 单位Id
+     */
+    @TableField("companyId")
+    private Long companyId;
+
+    /**
+     * 单位名称
+     */
+    @TableField("companyName")
+    private String companyName;
+
+    /**
+     * 单位地址全名称
+     */
+    private String address;
+
+    /**
+     * 单位地址
+     */
+    @TableField("companyAddress")
+    private String companyAddress;
+
+    /**
+     * 隐患更新时间
+     */
+    @TableField("examineTime")
+    private String examineTime;
+
+    /**
+     * 检查人
+     */
+    @TableField("examinePerson")
+    private String examinePerson;
+
+    /**
+     * 当前隐患数
+     */
+    @TableField("troubleNumber")
+    private String troubleNumber;
+
+    /**
+     * 总隐患数
+     */
+    @TableField("findTroubleNumber")
+    private String findTroubleNumber;
+
+    /**
+     * 当前单位隐患状态
+     */
+    private String status;
+
+    /**
+     * 部门id
+     */
+    @TableField("deptId")
+    private String deptId;
+
+    /**
+     * 部门名称
+     */
+    @TableField("deptName")
+    private String deptName;
+
+    /**
+     * 区划
+     */
+    private String area;
+
+    /**
+     * 街镇
+     */
+    private String street;
+
+
+}

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

@@ -0,0 +1,18 @@
+package com.usky.fire.mapper;
+
+import com.usky.fire.domain.MhBuild;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 闵行-建筑信息表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2025-04-03
+ */
+@Repository
+public interface MhBuildMapper extends CrudMapper<MhBuild> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.usky.fire.mapper;
+
+import com.usky.fire.domain.MhCompany;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 闵行-单位信息表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@Repository
+public interface MhCompanyMapper extends CrudMapper<MhCompany> {
+
+}

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

@@ -0,0 +1,18 @@
+package com.usky.fire.mapper;
+
+import com.usky.fire.domain.MhHiddenDanger;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 隐患信息表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@Repository
+public interface MhHiddenDangerMapper extends CrudMapper<MhHiddenDanger> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.usky.fire.service;
+
+import com.usky.fire.domain.MhBuild;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 闵行-建筑信息表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2025-04-03
+ */
+public interface MhBuildService extends CrudService<MhBuild> {
+
+}

+ 21 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhCompanyService.java

@@ -0,0 +1,21 @@
+package com.usky.fire.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.fire.domain.MhCompany;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.fire.service.vo.MhCompanyVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 闵行-单位信息表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+public interface MhCompanyService extends CrudService<MhCompany> {
+
+    CommonPage<MhCompanyVO> getWarehouse(Integer type, String startTime, String endTime, Integer pageNum, Integer pageSize);
+}

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

@@ -0,0 +1,16 @@
+package com.usky.fire.service;
+
+import com.usky.fire.domain.MhHiddenDanger;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 隐患信息表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+public interface MhHiddenDangerService extends CrudService<MhHiddenDanger> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.usky.fire.service.impl;
+
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.mapper.MhBuildMapper;
+import com.usky.fire.service.MhBuildService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 闵行-建筑信息表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2025-04-03
+ */
+@Service
+public class MhBuildServiceImpl extends AbstractCrudService<MhBuildMapper, MhBuild> implements MhBuildService {
+
+}

+ 118 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhCompanyServiceImpl.java

@@ -0,0 +1,118 @@
+package com.usky.fire.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.domain.MhCompany;
+import com.usky.fire.mapper.MhBuildMapper;
+import com.usky.fire.mapper.MhCompanyMapper;
+import com.usky.fire.service.MhCompanyService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.fire.service.vo.MhCompanyVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 闵行-单位信息表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@Service
+public class MhCompanyServiceImpl extends AbstractCrudService<MhCompanyMapper, MhCompany> implements MhCompanyService {
+
+    @Autowired
+    private MhBuildMapper mhBuildMapper;
+
+    @Override
+    public CommonPage<MhCompanyVO> getWarehouse(Integer type, String startTime, String endTime, Integer pageNum, Integer pageSize) {
+        List<MhCompanyVO> returnList = new ArrayList<>();
+        List<MhBuild> buildList = new ArrayList<>();
+        List<MhCompany> companyList = new ArrayList<>();
+        IPage<MhCompany> page = new Page<>(pageNum, pageSize);
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime start = null;
+        try {
+            start = LocalDateTime.parse(startTime, formatter);
+        } catch (Exception e) {
+            log.error("开始时间传参格式不正确,请重试!");
+        }
+        LocalDateTime end = null;
+        try {
+            end = LocalDateTime.parse(endTime, formatter);
+        } catch (Exception e) {
+            log.error("结束时间传参格式不正确,请重试!");
+        }
+
+        LambdaQueryWrapper<MhCompany> queryWrapper = Wrappers.lambdaQuery();
+
+        switch (type) {
+            case 1:
+                queryWrapper
+                        .and(wrapper -> wrapper
+                                .like(MhCompany::getCompanyType1, "仓库")
+                                .or()
+                                .like(MhCompany::getCompanyType1, "厂房")
+                                .or()
+                                .like(MhCompany::getCompanyType3, "厂房")
+                                .or()
+                                .like(MhCompany::getCompanyType3, "仓库")
+                        );
+                break;
+        }
+
+        if (start != null && end != null) {
+            queryWrapper.and((wrapper) -> {
+                wrapper.ge(MhCompany::getCreateTime, startTime).le(MhCompany::getCreateTime, endTime);
+            });
+        } else if (start != null) {
+            queryWrapper.and((wrapper) -> {
+                wrapper.ge(MhCompany::getCreateTime, startTime);
+            });
+        } else if (end != null) {
+            queryWrapper.and((wrapper) -> {
+                wrapper.le(MhCompany::getCreateTime, endTime);
+            });
+        }
+
+        queryWrapper.orderByDesc(MhCompany::getId);
+        page = this.page(page, queryWrapper);
+
+        companyList = page.getRecords();
+        List<Long> buildIdList = page.getRecords().stream()
+                .map(MhCompany::getBuildId).distinct().collect(Collectors.toList());
+
+        if (!buildIdList.isEmpty()) {
+            LambdaQueryWrapper<MhBuild> queryWrapper2 = Wrappers.lambdaQuery();
+            queryWrapper2.in(MhBuild::getId, buildIdList);
+            buildList = mhBuildMapper.selectList(queryWrapper2);
+        }
+
+        for (MhCompany company : companyList) {
+            MhCompanyVO vo = new MhCompanyVO();
+            vo.setMhCompany(company);
+            for (MhBuild build : buildList) {
+                if (build.getId().equals(company.getBuildId())) {
+                    vo.setMhBuild(build);
+                    break;
+                }
+            }
+            returnList.add(vo);
+        }
+
+        return new CommonPage<>(returnList, page.getTotal(), pageSize, pageNum);
+    }
+
+}

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

@@ -0,0 +1,20 @@
+package com.usky.fire.service.impl;
+
+import com.usky.fire.domain.MhHiddenDanger;
+import com.usky.fire.mapper.MhHiddenDangerMapper;
+import com.usky.fire.service.MhHiddenDangerService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 隐患信息表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2025-03-28
+ */
+@Service
+public class MhHiddenDangerServiceImpl extends AbstractCrudService<MhHiddenDangerMapper, MhHiddenDanger> implements MhHiddenDangerService {
+
+}

+ 41 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/ListTypeHandler.java

@@ -0,0 +1,41 @@
+package com.usky.fire.service.util;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.TypeHandler;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/4/8
+ */
+public class ListTypeHandler extends BaseTypeHandler<List<String>> {
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
+        ps.setString(i, String.join(",", parameter));
+    }
+
+    @Override
+    public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        String value = rs.getString(columnName);
+        return value == null ? null : Arrays.asList(value.split(","));
+    }
+
+    @Override
+    public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+        String value = rs.getString(columnIndex);
+        return value == null ? null : Arrays.asList(value.split(","));
+    }
+
+    @Override
+    public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        String value = cs.getString(columnIndex);
+        return value == null ? null : Arrays.asList(value.split(","));
+    }
+}

+ 463 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/MhScheduledImport.java

@@ -0,0 +1,463 @@
+package com.usky.fire.service.util;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.domain.MhCompany;
+import com.usky.fire.mapper.MhBuildMapper;
+import com.usky.fire.mapper.MhCompanyMapper;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Component
+public class MhScheduledImport {
+    private static final Logger log = LoggerFactory.getLogger(MhScheduledImport.class);
+
+    private static final int PAGE_SIZE = 10000;
+    private static final String BUILD_URL = "https://aqpc.shxf-119.com/Warehouse/minhang/getData/buildDataList?";
+    private static final String COMPANY_URL = "https://aqpc.shxf-119.com/Warehouse/minhang/getData/companyDataList?";
+    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    @Autowired
+    private MhCompanyMapper mhCompanyMapper;
+
+    @Autowired
+    private MhBuildMapper mhBuildMapper;
+
+    // @Scheduled(fixedRate = 86400000)
+    // 24小时执行一次
+
+    @Scheduled(cron = "0 0 8,20 * * ?")
+    // 8点、20点执行一次
+    //@Scheduled(fixedRate = 40000)
+    //@Scheduled(cron = "0 7 10 * * ?")
+    public void executeTask() {
+        log.info("定时任务开始执行: " + new java.util.Date());
+
+        log.info("导入单位信息开始执行,当前时间: " + new java.util.Date());
+        LocalDateTime latestCreateTime = getLatestCreateTimeCompany();
+        // boolean hasMoreData = true;
+        int page = 1;
+        // // while (hasMoreData) {
+        // //     List<String[]> dataList = callApiToGetCompanyData(latestCreateTime, page, PAGE_SIZE);
+        // //     if (dataList.isEmpty()) {
+        // //         hasMoreData = false;
+        // //     } else {
+        // //         storeDataToLocalDatabase(dataList);
+        // //         page++;
+        // //     }
+        // // }
+        List<String[]> companyDataList = callApiToGetCompanyData(latestCreateTime, page, PAGE_SIZE);
+        if (CollectionUtils.isNotEmpty(companyDataList)) {
+            storeDataToLocalDatabase(companyDataList);
+        } else {
+            log.info("单位信息没有新数据需要导入!");
+        }
+        log.info("导入单位信息执行完成,当前时间: " + new java.util.Date());
+
+        log.info("导入建筑信息开始执行,当前时间: " + new java.util.Date());
+        LocalDateTime latestUpdateTime = getLatestCreateTimeBuild();
+        List<String[]> bulidDataList = callApiToGetBuildingData(latestUpdateTime, page, PAGE_SIZE);
+        if (CollectionUtils.isNotEmpty(bulidDataList)) {
+            storeBuildingDataToLocalDatabase(bulidDataList);
+        } else {
+            log.info("建筑信息没有新数据需要导入!");
+        }
+        log.info("导入建筑信息开始执行,当前时间: " + new java.util.Date());
+
+        log.info("定时任务执行完成,当前时间: " + new java.util.Date());
+    }
+
+    // 处理建筑信息的行数据
+    private String[] processBuildingRow(JSONObject row) {
+        String id = row.getString("id");
+        String buildName = row.getString("buildName");
+        String lon = row.getString("lon");
+        String lat = row.getString("lat");
+        String area = row.getString("area");
+        String street = row.getString("street");
+        String address = row.getString("address");
+        String addressPc = row.getString("addressPc");
+        String buildStructure = row.getString("buildStructure");
+        String buildArea = row.getString("buildArea") == null ? "" : row.getString("buildArea");
+        String height = row.getString("height") == null ? "" : row.getString("height");
+        String buildFloorsUp = row.getString("buildFloorsUp");
+        String buildFloorsDown = row.getString("buildFloorsDown");
+        String fireFightingDevice = row.getString("fireFightingDevice") == null ? "" : row.getString("fireFightingDevice");
+        String buildNature = row.getString("buildNature");
+        String propertyOwner = row.getString("propertyOwner") == null ? "" : row.getString("propertyOwner");
+        String legal = row.getString("legal") == null ? "" : row.getString("legal");
+        String propertyLegal = row.getString("propertyLegal") == null ? "" : row.getString("propertyLegal");
+        String phone = row.getString("phone") == null ? "" : row.getString("phone");
+        String status = row.getString("status");
+        String leaseholderId = row.getString("leaseholderId") == null ? "" : row.getString("leaseholderId");
+        String companyInfoId = row.getString("companyInfoId") == null ? "" : row.getString("companyInfoId");
+        String property = row.getString("property");
+        String propertyStr = row.getString("propertyStr");
+        String manageCompany = row.getString("manageCompany") == null ? "" : row.getString("manageCompany");
+
+        String updateTimeStr1 = row.getString("updateTime");
+        LocalDateTime updateTime = null;
+        if (StringUtils.isNotBlank(updateTimeStr1)) {
+            try {
+
+                updateTime = LocalDateTime.parse(updateTimeStr1, formatter);
+            } catch (Exception e) {
+                log.error("建筑信息ID[{}]更新时间格式异常: {}", row.getString("id"), updateTimeStr1);
+                // 默认赋值为null
+            }
+        }
+
+        String updateTimeStr = row.getString("updateTimeStr");
+        String updateByPhone = row.getString("updateByPhone");
+        String updateBy = row.getString("updateBy");
+        String upperUpdateCompany = row.getString("upperUpdateCompany");
+        String updateCompany = row.getString("updateCompany");
+        String companyOperLogs = row.getString("companyOperLogs") == null ? "" : row.getString("companyOperLogs");
+        String buildNatures = row.getString("buildNatures") == null ? "" : row.getString("buildNatures");
+        String fireFightingDevices = row.getString("fireFightingDevices") == null ? "" : row.getString("fireFightingDevices");
+        String companyInfos = row.getString("companyInfos") == null ? "" : row.getString("companyInfos");
+
+        return new String[]{
+                id, buildName, lon, lat, area, street, address, addressPc, buildStructure,
+                buildArea, height, buildFloorsUp, buildFloorsDown, fireFightingDevice,
+                buildNature, propertyOwner, legal, propertyLegal, phone, status,
+                leaseholderId, companyInfoId, property, propertyStr, manageCompany,
+                buildNatures, fireFightingDevices, companyInfos, companyOperLogs, String.valueOf(updateTime),
+                updateTimeStr, updateBy, upperUpdateCompany, updateCompany, updateByPhone
+        };
+    }
+
+    // 处理单位数据的行数据
+    private String[] processCompanyRow(JSONObject row) {
+        String id = row.getString("id");
+        String companyName = row.getString("companyName");
+        String companyStatus = row.getString("companyStatus");
+        String companyAddress = row.getString("companyAddress");
+        String qrcode = row.getString("qrcode");
+        String creditCode = row.getString("creditCode");
+        String companyLegal = row.getString("companyLegal");
+        String safetyManager = row.getString("safetyManager") == null ? "" : row.getString("safetyManager");
+        String phone = row.getString("phone");
+        String companyType1 = row.getString("companyType1");
+        String companyType2 = row.getString("companyType2");
+        String companyType3 = row.getString("companyType3");
+        String companyArea = row.getString("companyArea");
+        String interlayerArea = row.getString("interlayerArea");
+        String coldStorageArea = row.getString("coldStorageArea");
+        String usePart = row.getString("usePart") == null ? "" : row.getString("usePart");
+        String street = row.getString("street");
+        String buildId = row.getString("buildId");
+        String state = row.getString("state");
+        String photo = row.getString("photo");
+        String licensePhoto = row.getString("licensePhoto");
+        String reason = row.getString("reason");
+        String status = row.getString("status");
+        String isExamine = row.getString("isExamine");
+        String haveTrouble = row.getString("haveTrouble");
+        String createBy = row.getString("createBy");
+        String createTime = row.getString("createTime");
+        String updateBy = row.getString("updateBy") == null ? "" : row.getString("updateBy");
+        String updateTime = row.getString("updateTime");
+
+        return new String[]{
+                id, companyName, companyStatus, companyAddress, qrcode, creditCode, companyLegal,
+                safetyManager, phone, companyType1, companyType2, companyType3, companyArea,
+                interlayerArea, coldStorageArea, usePart, street, buildId, state, photo,
+                licensePhoto, reason, status, isExamine, haveTrouble, createBy, createTime,
+                updateBy, updateTime
+        };
+    }
+
+    // 获取建筑信息
+    private List<String[]> callApiToGetBuildingData(LocalDateTime latestCreateTime, int page, int pageSize) {
+        String url = BUILD_URL;
+        return callApiToGetData(url, latestCreateTime, page, pageSize);
+    }
+
+    // 获取单位数据
+    private List<String[]> callApiToGetCompanyData(LocalDateTime latestCreateTime, int page, int pageSize) {
+        String url = COMPANY_URL;
+        return callApiToGetData(url, latestCreateTime, page, pageSize);
+    }
+
+    // 公共方法:发送 HTTP GET 请求并处理响应
+    private List<String[]> callApiToGetData(String url, LocalDateTime latestCreateTime, int page, int pageSize) {
+        if (latestCreateTime != null) {
+            url += "beginTime=" + latestCreateTime + "&";
+        }
+        url += "pageNum=" + page + "&pageSize=" + pageSize;
+
+        url = url.replaceAll(" ", "%20");
+
+        List<String[]> dataList = new ArrayList<>();
+
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            HttpGet request = new HttpGet(url);
+            request.addHeader("Content-Type", "application/json");
+            request.addHeader("token", getToken());
+
+            CloseableHttpResponse response = httpClient.execute(request);
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == 200) {
+                String responseBody = EntityUtils.toString(response.getEntity());
+                JSONObject jsonResponse = JSON.parseObject(responseBody);
+                JSONArray rows = jsonResponse.getJSONArray("rows");
+
+                if (rows.isEmpty()) {
+                    return Collections.emptyList();
+                } else {
+                    for (int i = 0; i < rows.size(); i++) {
+                        JSONObject row = rows.getJSONObject(i);
+                        if (url.contains(BUILD_URL)) {
+                            dataList.add(processBuildingRow(row));
+                        } else if (url.contains(COMPANY_URL)) {
+                            dataList.add(processCompanyRow(row));
+                        }
+                    }
+                }
+            } else {
+                log.error("API请求失败,状态码: " + statusCode);
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+
+        return dataList;
+    }
+
+    // 调用API获取token的方法
+    private static String getToken() {
+        String url = "https://aqpc.shxf-119.com/Warehouse/bigdata/getToken?username=admin";
+        String token = null;
+
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            HttpGet request = new HttpGet(url);
+
+            CloseableHttpResponse response = httpClient.execute(request);
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == 200) {
+                String responseBody = EntityUtils.toString(response.getEntity());
+                JSONObject jsonResponse = JSON.parseObject(responseBody);
+                String msg = jsonResponse.getString("msg");
+                int code = jsonResponse.getInteger("code");
+
+                if (code == 200) {
+                    token = msg;
+                } else {
+                    log.error("获取token失败,状态码: " + code + ", 消息: " + msg);
+                }
+            } else {
+                log.error("获取token失败,状态码: " + statusCode);
+            }
+        } catch (Exception e) {
+            log.error("获取token失败,异常信息: " + e.getMessage());
+        }
+
+        return token;
+    }
+
+    // 获取数据库中mh_company最新的一条记录的 createTime
+    private LocalDateTime getLatestCreateTimeCompany() {
+        LambdaQueryWrapper<MhCompany> newData = Wrappers.lambdaQuery();
+        newData.select(MhCompany::getCreateTime)
+                .orderByDesc(MhCompany::getId)
+                .last("LIMIT 1");
+        MhCompany latestRecord = mhCompanyMapper.selectOne(newData);
+        return latestRecord != null ? latestRecord.getCreateTime() : null;
+    }
+
+    // 获取数据库中mh_build最新的一条记录的 createTime
+    private LocalDateTime getLatestCreateTimeBuild() {
+        LambdaQueryWrapper<MhBuild> newData = Wrappers.lambdaQuery();
+        newData.select(MhBuild::getUpdateTime)
+                .orderByDesc(MhBuild::getId)
+                .last("LIMIT 1");
+        MhBuild latestRecord = mhBuildMapper.selectOne(newData);
+        return latestRecord != null ? latestRecord.getUpdateTime() : null;
+    }
+
+    // 将数据存储到本地数据库的方法
+    private void storeDataToLocalDatabase(List<String[]> dataList) {
+        for (String[] data : dataList) {
+            Integer id = Integer.valueOf(data[0]);
+            // String companyName = data[1];
+            if (!recordExists(id)) {
+                MhCompany mhCompany = new MhCompany();
+                mhCompany.setId(Long.valueOf(data[0]));
+                mhCompany.setCompanyName(data[1]);
+                mhCompany.setCompanyStatus(data[2]);
+                mhCompany.setCompanyAddress(data[3]);
+                mhCompany.setQrcode(StringUtils.isBlank(data[4]) ? null : Integer.valueOf(data[4]));
+                mhCompany.setCreditCode(data[5]);
+                mhCompany.setCompanyLegal(data[6]);
+                mhCompany.setSafetyManager(data[7]);
+                mhCompany.setPhone(data[8]);
+                mhCompany.setCompanyType1(data[9]);
+                mhCompany.setCompanyType2(data[10]);
+                mhCompany.setCompanyType3(data[11]);
+                mhCompany.setCompanyArea(data[12]);
+                mhCompany.setInterlayerArea(data[13]);
+                mhCompany.setColdStorageArea(data[14]);
+                mhCompany.setUsePart(data[15]);
+                mhCompany.setStreet(data[16]);
+                mhCompany.setBuildId(StringUtils.isBlank(data[17]) ? null : Long.valueOf(data[17]));
+                mhCompany.setState(data[18]);
+                mhCompany.setPhoto(data[19]);
+                mhCompany.setLicensePhoto(data[20]);
+                mhCompany.setReason(data[21]);
+                mhCompany.setStatus(StringUtils.isBlank(data[22]) ? null : Integer.valueOf(data[22]));
+                mhCompany.setIsExamine(StringUtils.isBlank(data[23]) ? null : Integer.valueOf(data[23]));
+                mhCompany.setHaveTrouble(data[24]);
+                mhCompany.setCreateBy(data[25]);
+                if (data[26] != null) {
+                    try {
+                        LocalDateTime parseCreateTime = LocalDateTime.parse(data[26], formatter);
+                        mhCompany.setCreateTime(parseCreateTime);
+                    } catch (Exception e) {
+                        log.error("解析单位信息创建时间失败,时间字符串: " + data[26]);
+                    }
+                }
+                mhCompany.setUpdateBy(data[27]);
+                if (data[28] != null) {
+                    try {
+                        LocalDateTime parseUpdateTime = LocalDateTime.parse(data[28], formatter);
+                        mhCompany.setUpdateTime(parseUpdateTime);
+                    } catch (Exception e) {
+                        log.error("解析单位信息更新时间失败,时间字符串: " + data[28]);
+                    }
+                }
+
+                mhCompanyMapper.insert(mhCompany);
+            }
+        }
+    }
+
+    private void storeBuildingDataToLocalDatabase(List<String[]> dataList) {
+        for (String[] data : dataList) {
+            Integer id = Integer.valueOf(data[0]);
+            if (!buildingRecordExists(id)) {
+                MhBuild mhBuilding = new MhBuild();
+                mhBuilding.setId(Long.valueOf(data[0]));
+                mhBuilding.setBuildName(data[1]);
+                mhBuilding.setLon(data[2]);
+                mhBuilding.setLat(data[3]);
+                mhBuilding.setArea(data[4]);
+                mhBuilding.setStreet(data[5]);
+                mhBuilding.setAddress(data[6]);
+                mhBuilding.setAddressPc(data[7]);
+                mhBuilding.setBuildStructure(data[8]);
+                mhBuilding.setBuildArea(StringUtils.isBlank(data[9]) ? null : data[9]);
+                mhBuilding.setHeight(StringUtils.isBlank(data[10]) ? null : data[10]);
+                mhBuilding.setBuildFloorsUp(StringUtils.isBlank(data[11]) ? null : Long.valueOf(data[11]));
+                mhBuilding.setBuildFloorsDown(StringUtils.isBlank(data[12]) ? null : Long.valueOf(data[12]));
+                mhBuilding.setFireFightingDevice(StringUtils.isBlank(data[13]) ? null : data[13]);
+                mhBuilding.setBuildNature(data[14]);
+                mhBuilding.setPropertyOwner(StringUtils.isBlank(data[15]) ? null : data[15]);
+                mhBuilding.setLegal(StringUtils.isBlank(data[16]) ? null : data[16]);
+                mhBuilding.setPropertyLegal(StringUtils.isBlank(data[17]) ? null : data[17]);
+                mhBuilding.setPhone(StringUtils.isBlank(data[18]) ? null : data[18]);
+                mhBuilding.setStatus(data[19]);
+                mhBuilding.setLeaseholderId(StringUtils.isBlank(data[20]) ? null : data[20]);
+                mhBuilding.setCompanyInfoId(StringUtils.isBlank(data[21]) ? null : data[21]);
+                mhBuilding.setProperty(StringUtils.isBlank(data[22]) ? null : Integer.valueOf(data[22]));
+                mhBuilding.setPropertyStr(data[23]);
+                mhBuilding.setManageCompany(StringUtils.isBlank(data[24]) ? null : data[24]);
+
+                if (data[25] != null) {
+                    // 使用 split 方法将字符串拆分为数组,然后转换为列表
+                    String[] companiesArray = data[25].split(",");
+                    List<String> companyInfos = Arrays.asList(companiesArray);
+                    mhBuilding.setCompanyInfos(companyInfos);
+                } else {
+                    // 如果 data[25] 是 null,设置为空列表
+                    mhBuilding.setCompanyInfos(Collections.emptyList());
+                }
+
+                // 检查 data[26] 是否为空
+                if (data[26] != null) {
+                    // 使用 split 方法将字符串拆分为数组,然后转换为列表
+                    String[] devicesArray = data[26].split(",");
+                    List<String> fireFightingDevices = Arrays.asList(devicesArray);
+                    mhBuilding.setFireFightingDevices(fireFightingDevices);
+                } else {
+                    // 如果 data[26] 是 null,设置为空列表
+                    mhBuilding.setFireFightingDevices(Collections.emptyList());
+                }
+
+                if (data[27] != null) {
+                    // 使用 split 方法将字符串拆分为数组,然后转换为列表
+                    String[] companiesArray = data[27].split(",");
+                    List<String> buildNatures = Arrays.asList(companiesArray);
+                    mhBuilding.setBuildNatures(buildNatures);
+                } else {
+                    // 如果 data[27] 是 null,设置为空列表
+                    mhBuilding.setBuildNatures(Collections.emptyList());
+                }
+
+                mhBuilding.setCompanyOperLogs(data[28]);
+                if (data[29] != null) {
+                    try {
+                        LocalDateTime parseUpdateTime = LocalDateTime.parse(data[29], formatter);
+                        mhBuilding.setUpdateTime(parseUpdateTime);
+                    } catch (Exception e) {
+                        log.error("解析建筑信息更新时间失败,时间字符串: " + data[29]);
+                    }
+                }
+                mhBuilding.setUpdateTimeStr(data[30]);
+                mhBuilding.setUpdateBy(data[31]);
+                mhBuilding.setUpperUpdateCompany(StringUtils.isBlank(data[32]) ? null : data[32]);
+                mhBuilding.setUpdateCompany(StringUtils.isBlank(data[33]) ? null : data[33]);
+                mhBuilding.setUpdateByPhone(StringUtils.isBlank(data[34]) ? null : data[34]);
+                mhBuildMapper.insert(mhBuilding);
+            }
+        }
+    }
+
+    // 检查记录是否已经存在于数据库中-单位
+    private boolean recordExists(Integer companyName) {
+        boolean exists = false;
+        LambdaQueryWrapper<MhCompany> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(MhCompany::getId, companyName);
+        if (mhCompanyMapper.selectOne(queryWrapper) != null) {
+            exists = true;
+        }
+        return exists;
+    }
+
+    // 检查记录是否已经存在于数据库中-建筑
+    private boolean buildingRecordExists(Integer companyName) {
+        boolean exists = false;
+        LambdaQueryWrapper<MhBuild> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(MhBuild::getId, companyName);
+        if (mhBuildMapper.selectOne(queryWrapper) != null) {
+            exists = true;
+        }
+        return exists;
+    }
+
+
+}
+
+
+

+ 200 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/MhCompanyVO.java

@@ -0,0 +1,200 @@
+package com.usky.fire.service.vo;
+
+import cn.hutool.core.date.DateTime;
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.domain.MhCompany;
+import lombok.Data;
+import org.springframework.boot.convert.DataSizeUnit;
+
+import java.util.List;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/4/8
+ */
+@Data
+public class MhCompanyVO {
+
+    private MhCompany mhCompany;
+    private MhBuild mhBuild;
+    // /**
+    //  * 单位id
+    //  **/
+    // private Long id;
+    //
+    // /**
+    //  * 单位名称
+    //  **/
+    // private String companyName;
+    //
+    // /**
+    //  * 单位类型(自用,出租)
+    //  **/
+    // private String companyStatus;
+    //
+    // /**
+    //  * 单位地址
+    //  **/
+    // private String companyAddress;
+    //
+    // /**
+    //  * 是否开通企业码 0:未开通 1:开通
+    //  **/
+    // private Integer qrcode;
+    //
+    // /**
+    //  * 统一社会信用代码
+    //  **/
+    // private String creditCode;
+    //
+    // /**
+    //  * 法人代表
+    //  **/
+    // private String companyLegal;
+    //
+    // /**
+    //  * 消防安全管理人
+    //  **/
+    // private String safetyManager;
+    //
+    // /**
+    //  * 联系电话
+    //  **/
+    // private String phone;
+    //
+    // /**
+    //  * 单位类别标签1
+    //  **/
+    // private String companyType1;
+    //
+    // /**
+    //  * 单位类别标签2
+    //  **/
+    // private String companyType2;
+    //
+    // /**
+    //  * 单位类别标签3
+    //  **/
+    // private String companyType3;
+    //
+    // /**
+    //  * 单位所属区域
+    //  **/
+    // private String companyArea;
+    //
+    // /**
+    //  * 夹(插)层面积
+    //  **/
+    // private String interlayerArea;
+    //
+    // /**
+    //  * 冷库面积
+    //  **/
+    // private String coldStorageArea;
+    //
+    // /**
+    //  * 使用部位
+    //  **/
+    // private String usePart;
+    //
+    // /**
+    //  * 所属街道
+    //  **/
+    // private String street;
+    //
+    // /**
+    //  * 建筑名称
+    //  **/
+    // private Long buildId;
+    //
+    // /**
+    //  * 建筑名称
+    //  **/
+    // private String state;
+    //
+    // /**
+    //  * 单位门头照
+    //  **/
+    // private String photo;
+    //
+    // /**
+    //  * 营业执照照片
+    //  **/
+    // private String licensePhoto;
+    //
+    // /**
+    //  * 没有拍营业执照原因
+    //  **/
+    // private String reason;
+    //
+    // /**
+    //  * 单位状态 0:正常 1:注销
+    //  **/
+    // private Integer status;
+    //
+    // /**
+    //  * 1:排查过 0:未排查
+    //  **/
+    // private Integer isExamine;
+    //
+    // /**
+    //  * 有无隐患 1:有隐患 0:无隐患
+    //  **/
+    // private String haveTrouble;
+    //
+    // /**
+    //  * 创建人
+    //  **/
+    // private String createBy;
+    //
+    // /**
+    //  * 创建时间
+    //  **/
+    // private DateTime createTime;
+    //
+    // /**
+    //  * 更新人
+    //  **/
+    // private String updateBy;
+    //
+    // /**
+    //  * 更新时间
+    //  **/
+    // private DateTime updateTime;
+    //
+    // /**
+    //  * 建筑名称
+    //  **/
+    // private String buildName;
+    //
+    // /**
+    //  * 经度
+    //  */
+    // private String lon;
+    //
+    // /**
+    //  * 纬度
+    //  */
+    // private String lat;
+    // private String area; // 区划
+    // private String address; // 建筑地址
+    // private String buildStructure; // 建筑结构
+    // private String buildArea; // 建筑面积
+    // private String height; // 建筑高度
+    // private Long buildFloorsUp; // 地上建筑层数
+    // private Long buildFloorsDown; // 地下建筑层数
+    // private String fireFightingDevice; // 消防设施
+    // private String buildNature; // 使用性质
+    // private String propertyOwner; // 产权单位
+    // private String legal; // 法定代表人
+    // private String propertyLegal; // 产权或管理单位法定代表人
+    // private String propertyPhone; // 产权单位联系电话
+    // private String propertyStatus; // 使用状态
+    // private Integer property; // 1:多产权 0:单产权
+    // private String propertyStr; // 产权类型
+    // private String manageCompany; // 管理单位名称
+    // private List<String> buildNatures; // 使用性质列表
+    // private List<String> fireFightingDevices; // 消防设施列表
+}

+ 4 - 3
service-fire/service-fire-biz/src/main/resources/application.yml

@@ -3,6 +3,7 @@ mybatis:
     delay-seconds: 10
     enabled: true
     sleep-seconds: 20
+  type-handlers-package: com.usky.fire.service.util
 mybatis-plus:
   configuration:
     defaultStatementTimeout: 3
@@ -42,9 +43,9 @@ spring:
     dynamic:
       datasource:
         master:
-#          url: jdbc:mysql://172.16.120.166:3306/usky-fire?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&queryTimeout=2400
-#          username: usky
-#          password: Yt#75Usky
+#          url: jdbc:mysql://192.168.10.165:3306/usky-fire?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&queryTimeout=2400
+#          username: root
+#          password: yt123456
           driver-class-name: dm.jdbc.driver.DmDriver
           password: Yt#75Usky
           url: jdbc:dm://localhost:5237/SYSDBA?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8

+ 47 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildMapper.xml

@@ -0,0 +1,47 @@
+<?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.MhBuildMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.fire.domain.MhBuild">
+        <id column="id" property="id"/>
+        <result column="build_name" property="buildName"/>
+        <result column="lon" property="lon"/>
+        <result column="lat" property="lat"/>
+        <result column="area" property="area"/>
+        <result column="street" property="street"/>
+        <result column="address" property="address"/>
+        <result column="addressPc" property="addressPc"/>
+        <result column="build_structure" property="buildStructure"/>
+        <result column="build_area" property="buildArea"/>
+        <result column="height" property="height"/>
+        <result column="build_floors_up" property="buildFloorsUp"/>
+        <result column="build_floors_down" property="buildFloorsDown"/>
+        <result column="fire_fighting_device" property="fireFightingDevice"/>
+        <result column="build_nature" property="buildNature"/>
+        <result column="property_owner" property="propertyOwner"/>
+        <result column="legal" property="legal"/>
+        <result column="property_legal" property="propertyLegal"/>
+        <result column="phone" property="phone"/>
+        <result column="leaseholder_id" property="leaseholderId"/>
+        <result column="company_info_id" property="companyInfoId"/>
+        <result column="property" property="property"/>
+        <result column="property_str" property="propertyStr"/>
+        <result column="manage_company" property="manageCompany"/>
+        <result column="build_natures" property="buildNatures"
+                typeHandler="com.usky.fire.service.util.ListTypeHandler"/>
+        <result column="fire_fighting_devices" property="fireFightingDevices"
+                typeHandler="com.usky.fire.service.util.ListTypeHandler"/>
+        <result column="company_infos" property="companyInfos"
+                typeHandler="com.usky.fire.service.util.ListTypeHandler"/>
+        <result column="company_oper_logs" property="companyOperLogs"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="update_time_str" property="updateTimeStr"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="upper_update_company" property="upperUpdateCompany"/>
+        <result column="update_company" property="updateCompany"/>
+        <result column="update_by_phone" property="updateByPhone"/>
+        <result column="status" property="status"/>
+    </resultMap>
+
+</mapper>

+ 38 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhCompanyMapper.xml

@@ -0,0 +1,38 @@
+<?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.MhCompanyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.fire.domain.MhCompany">
+        <id column="id" property="id" />
+        <result column="companyName" property="companyName" />
+        <result column="companyStatus" property="companyStatus" />
+        <result column="companyAddress" property="companyAddress" />
+        <result column="qrcode" property="qrcode" />
+        <result column="creditCode" property="creditCode" />
+        <result column="companyLegal" property="companyLegal" />
+        <result column="safetyManager" property="safetyManager" />
+        <result column="phone" property="phone" />
+        <result column="companyType1" property="companyType1" />
+        <result column="companyType2" property="companyType2" />
+        <result column="companyType3" property="companyType3" />
+        <result column="companyArea" property="companyArea" />
+        <result column="interlayerArea" property="interlayerArea" />
+        <result column="coldStorageArea" property="coldStorageArea" />
+        <result column="usePart" property="usePart" />
+        <result column="street" property="street" />
+        <result column="buildId" property="buildId" />
+        <result column="state" property="state" />
+        <result column="photo" property="photo" />
+        <result column="licensePhoto" property="licensePhoto" />
+        <result column="reason" property="reason" />
+        <result column="status" property="status" />
+        <result column="isExamine" property="isExamine" />
+        <result column="haveTrouble" property="haveTrouble" />
+        <result column="createBy" property="createBy" />
+        <result column="createTime" property="createTime" />
+        <result column="updateBy" property="updateBy" />
+        <result column="updateTime" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 23 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhHiddenDangerMapper.xml

@@ -0,0 +1,23 @@
+<?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.MhHiddenDangerMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.fire.domain.MhHiddenDanger">
+        <id column="logId" property="logId" />
+        <result column="companyId" property="companyId" />
+        <result column="companyName" property="companyName" />
+        <result column="address" property="address" />
+        <result column="companyAddress" property="companyAddress" />
+        <result column="examineTime" property="examineTime" />
+        <result column="examinePerson" property="examinePerson" />
+        <result column="troubleNumber" property="troubleNumber" />
+        <result column="findTroubleNumber" property="findTroubleNumber" />
+        <result column="status" property="status" />
+        <result column="deptId" property="deptId" />
+        <result column="deptName" property="deptName" />
+        <result column="area" property="area" />
+        <result column="street" property="street" />
+    </resultMap>
+
+</mapper>