zrj
2024-11-08 6d02d0adce5004ef244fc8e4f0186ed922b20e36
新增shp 文件导入,数据关联公司
7 files modified
132 ■■■■■ changed files
src/main/java/org/springblade/common/utils/ShapeFileUtil.java 8 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/controller/GeomInfoController.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/entity/FirmInfo.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/entity/GeomInfoEntity.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/mapper/GeomInfoMapper.xml 8 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/IGeomInfoService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/yw/service/impl/GeomInfoServiceImpl.java 87 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/utils/ShapeFileUtil.java
@@ -206,8 +206,12 @@
                        shpDTO.put("type",json.getJSONObject("geometry").getString("type"));
                    }
                    // 名称
                    if (json.getJSONObject("properties").get("name")!= null) {
                        shpDTO.put("name",json.getJSONObject("properties").getString("name"));
                    if (json.getJSONObject("properties").get("Name")!= null) {
                        shpDTO.put("name",json.getJSONObject("properties").getString("Name"));
                    }
                    // 所属公司名称
                    if (json.getJSONObject("properties").get("name_1")!= null) {
                        shpDTO.put("firmName",json.getJSONObject("properties").getString("name_1"));
                    }
                    dtoList.add(shpDTO);
                } catch (NumberFormatException e) {
src/main/java/org/springblade/modules/yw/controller/GeomInfoController.java
@@ -131,6 +131,18 @@
    }
    /**
     * 导入 应急空间点位 shp zip 包文件解析空间信息
     * @param file
     * @return
     */
    @PostMapping("/importSpaceShpZip")
    @ApiOperationSupport(order = 8)
    @ApiOperation(value = "导入应急空间点位 shp zip 包文件解析空间信息", notes = "传入文件")
    public R importSpaceShpZip(MultipartFile file) {
        return geomInfoService.importSpaceShpZip(file);
    }
    /**
     * 导出 空间信息shp zip 包
     * @param ids
     * @return
src/main/java/org/springblade/modules/yw/entity/FirmInfo.java
@@ -109,8 +109,8 @@
     * 图片
     */
    @ApiModelProperty(value = "图片", example = "")
    @TableField("imageUrls")
    private String image_urls;
    @TableField("image_urls")
    private String imageUrls;
    /**
     * 创建人
src/main/java/org/springblade/modules/yw/entity/GeomInfoEntity.java
@@ -30,6 +30,12 @@
    private Long id;
    /**
     * 企业ID
     */
    @ApiModelProperty(value = "企业ID", example = "")
    private Long firmId;
    /**
     * 名称
     */
    @ApiModelProperty(value = "名称")
src/main/java/org/springblade/modules/yw/mapper/GeomInfoMapper.xml
@@ -9,14 +9,14 @@
    <!--保存空间信息-->
    <insert id="saveGeoInfo">
        insert into yw_geom_info (name,type,geom)
        values (#{geomInfoEntity.name},#{geomInfoEntity.type},ST_GeomFromText(${geomInfoEntity.geom}))
        insert into yw_geom_info (name,type,firm_id,geom)
        values (#{geomInfoEntity.name},#{geomInfoEntity.type},#{geomInfoEntity.firmId},ST_GeomFromText(${geomInfoEntity.geom}))
    </insert>
    <!--自定义分页查询-->
    <!--空间信息查询-->
    <select id="getGeomInfoList" resultType="org.springblade.modules.yw.vo.GeomInfoVO">
        select
        id,name,type,ST_ASTEXT (geom) as geom
        id,name,type,firm_id,ST_ASTEXT (geom) as geom
        from yw_geom_info ygi
        where ygi.is_deleted = 0
        <if test="ids!=null and ids!=''">
src/main/java/org/springblade/modules/yw/service/IGeomInfoService.java
@@ -37,4 +37,11 @@
     * @return
     */
    List<GeomInfoVO> getGeomInfoList(String ids);
    /**
     * 导入应急空间点位数据
     * @param file
     * @return
     */
    R importSpaceShpZip(MultipartFile file);
}
src/main/java/org/springblade/modules/yw/service/impl/GeomInfoServiceImpl.java
@@ -1,15 +1,20 @@
package org.springblade.modules.yw.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.logging.log4j.util.Strings;
import org.springblade.common.utils.FileUtil;
import org.springblade.common.utils.ShapeFileUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.modules.yw.entity.FirmInfo;
import org.springblade.modules.yw.entity.GeomInfoEntity;
import org.springblade.modules.yw.mapper.GeomInfoMapper;
import org.springblade.modules.yw.service.IFirmInfoService;
import org.springblade.modules.yw.service.IGeomInfoService;
import org.springblade.modules.yw.vo.GeomInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
@@ -23,6 +28,9 @@
 */
@Service
public class GeomInfoServiceImpl extends ServiceImpl<GeomInfoMapper, GeomInfoEntity> implements IGeomInfoService {
    @Autowired
    private IFirmInfoService firmInfoService;
    /**
     * 自定义分页
@@ -80,4 +88,83 @@
        // 查询空间数据
        return baseMapper.getGeomInfoList(ids);
    }
    /**
     * 导入 shp zip 包文件解析空间信息
     * @param multipartFile
     * @return
     */
    @Override
    public R importSpaceShpZip(MultipartFile multipartFile) {
        // 判断文件是否为 zip 文件
        if (!FileUtil.getFileExtension(multipartFile).equals("zip")){
            return R.data(400,"文件格式不对,必须是 zip 文件","文件格式不对,必须是 zip 文件");
        }
        // 转 file
        File file = FileUtil.toFile(multipartFile);
        // 获取文件信息
        try {
            List<Map<String, Object>> list = ShapeFileUtil.shpToGeoJson(file);
            // 写入数据库,暂时考虑只有一组数据的情况
            if (list.size()>0){
                for (Map<String, Object> map : list) {
                    GeomInfoEntity geomInfoEntity = Objects.requireNonNull(BeanUtil.copy(map, GeomInfoEntity.class));
                    String geometry = map.get("geometry").toString();
                    geomInfoEntity.setGeom("'" + geometry +"'");
                    String firmName = null;
                    if (null!=map.get("firmName")){
                        firmName = map.get("firmName").toString();
                    }
                    // 设置所属单位
                    setFirmId(geomInfoEntity,firmName);
                    // 判断是否已经存在
                    Long id = isSave(geomInfoEntity);
                    if (id!=null){
                        // 覆盖更新
//                        updateById();
                        continue;
                    }
                    // 保存
                    baseMapper.saveGeoInfo(geomInfoEntity);
                }
                // 返回
                return R.data(200,list,"操作成功!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 返回
        return R.data(200,"操作失败","操作失败!读取数据错误!");
    }
    /**
     * 设置所属企业id
     * @param geomInfoEntity
     * @param firmName
     */
    private void setFirmId(GeomInfoEntity geomInfoEntity,String firmName) {
        if (!Strings.isBlank(firmName)) {
            QueryWrapper<FirmInfo> wrapper = new QueryWrapper<>();
            wrapper.eq("name", firmName);
            FirmInfo one = firmInfoService.getOne(wrapper);
            if (null!=one)
                geomInfoEntity.setFirmId(one.getId());
        }
    }
    /**
     * 判断是否已经保存
     * @param geomInfoEntity
     * @return
     */
    private Long isSave(GeomInfoEntity geomInfoEntity) {
        QueryWrapper<GeomInfoEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("name",geomInfoEntity);
        GeomInfoEntity one = getOne(wrapper);
        if (null!=one){
            return one.getId();
        }
        return null;
    }
}