package org.springblade.modules.yw.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.apache.logging.log4j.util.Strings; import org.springblade.common.constant.FileConstant; import org.springblade.common.utils.ShapeFileUtil; import org.springblade.common.utils.ZipUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.modules.yw.entity.GeomInfoEntity; import org.springblade.modules.yw.service.IEmergencySpaceService; import org.springblade.modules.yw.service.IFirmInfoService; import org.springblade.modules.yw.service.IGeomInfoService; import org.springblade.modules.yw.vo.EmergencySpaceVO; import org.springblade.modules.yw.vo.GeomInfoVO; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.BufferedOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipOutputStream; /** * 空间信息表 控制器 * * @author BladeX * @since 2024-11-05 */ @RestController @AllArgsConstructor @RequestMapping("yw/geomInfo") @Api(value = "空间信息表", tags = "空间信息表接口") public class GeomInfoController { private final IGeomInfoService geomInfoService; private final FileConstant fileConstant; private final IEmergencySpaceService emergencySpaceService; /** * 空间信息表 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入geomInfo") public R detail(GeomInfoEntity geomInfo) { GeomInfoEntity detail = geomInfoService.getOne(Condition.getQueryWrapper(geomInfo)); return R.data(detail); } /** * 空间信息表 分页 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入geomInfo") public R list(@ApiIgnore @RequestParam Map geomInfo, Query query) { IPage pages = geomInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(geomInfo, GeomInfoEntity.class)); return R.data(pages); } /** * 空间信息表 自定义分页 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入geomInfo") public R> page(GeomInfoVO geomInfo, Query query) { IPage pages = geomInfoService.selectGeomInfoPage(Condition.getPage(query), geomInfo); return R.data(pages); } /** * 空间信息表 新增 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入geomInfo") public R save(@Valid @RequestBody GeomInfoEntity geomInfo) { return R.status(geomInfoService.save(geomInfo)); } /** * 空间信息表 修改 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入geomInfo") public R update(@Valid @RequestBody GeomInfoEntity geomInfo) { return R.status(geomInfoService.updateById(geomInfo)); } /** * 空间信息表 新增或修改 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入geomInfo") public R submit(@Valid @RequestBody GeomInfoEntity geomInfo) { return R.status(geomInfoService.saveOrUpdate(geomInfo)); } /** * 空间信息表 删除 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "逻辑删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(geomInfoService.removeByIds(Func.toLongList(ids))); } /** * 导入 shp zip 包文件解析空间信息 * @param file * @return */ @PostMapping("/importShpZip") @ApiOperationSupport(order = 8) @ApiOperation(value = "导入 shp zip 包文件解析空间信息", notes = "传入文件") public R importShpZip(MultipartFile file) { return geomInfoService.importShpZip(file); } /** * 导入 应急空间点位 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 */ @GetMapping("/exportShpZip") @ApiOperationSupport(order = 9) @ApiOperation(value = "导出 空间信息shp zip 包", notes = "传入ids") public void exportShpZip(String ids, HttpServletResponse response) throws IOException { List list = geomInfoService.getGeomInfoList(ids); // 要导出的文件夹路径 String sourceFolderPath = fileConstant.getZipTempSavePath(); // 先生成文件 List> propertyList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { Map map = new HashMap<>(); map.put("ID", list.get(i).getId()); map.put("name", list.get(i).getName()); map.put("geometry",list.get(i).getGeom()); propertyList.add(map); // 导出shp 文件 ShapeFileUtil.exportShp(propertyList, list.get(i).getName(), list.get(i).getType(),sourceFolderPath); } // ZIP文件名 String zipFileName = System.currentTimeMillis() + "_exported_shp.zip"; response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\""); try ( BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); ZipOutputStream zipOut = new ZipOutputStream(bos); ) { ZipUtil.zipFolder(sourceFolderPath, zipOut); } } /** * 根据传入的点线面数据-导出空间信息shp zip 包 * @param response * @return */ @GetMapping("/exporEmergencySpaceShpZip") @ApiOperationSupport(order = 9) @ApiOperation(value = "根据传入的点线面数据-导出空间信息shp zip 包", notes = "传入空间数据") public void exporEmergencySpaceShpZip(HttpServletResponse response) throws IOException { Query query = new Query().setCurrent(1).setSize(100); IPage emergencySpaceVOIPage = emergencySpaceService.selectEmergencySpacePage(Condition.getPage(query), null); // 查询应急空间数据 List emergencySpaceVOList = emergencySpaceVOIPage.getRecords(); List> propertyList = new ArrayList<>(); // 要导出的文件夹路径 String sourceFolderPath = fileConstant.getZipTempSavePath(); for (EmergencySpaceVO emergencySpaceVO : emergencySpaceVOList) { // 先生成文件 Map map = new HashMap<>(); map.put("ID", emergencySpaceVO.getId()); map.put("name", emergencySpaceVO.getName()); if (!Strings.isBlank(emergencySpaceVO.getLng())){ map.put("geometry","POINT("+emergencySpaceVO.getLng() +" " + emergencySpaceVO.getLat() + ")"); } map.put("firmId",emergencySpaceVO.getFirmId()); map.put("firmName",emergencySpaceVO.getFirmName()); propertyList.add(map); } // 导出shp 文件 ShapeFileUtil.exportShp(propertyList, "yikj", "Point",sourceFolderPath); // ZIP文件名 String zipFileName = System.currentTimeMillis() + "_exported_shp.zip"; response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\""); try ( BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); ZipOutputStream zipOut = new ZipOutputStream(bos); ) { ZipUtil.zipFolder(sourceFolderPath, zipOut); } } /** * 根据传入的点线面数据-导出空间信息shp zip 包 * @param geomInfoEntity * @return */ @PostMapping("/exportShpZipByValue") @ApiOperationSupport(order = 9) @ApiOperation(value = "根据传入的点线面数据-导出空间信息shp zip 包", notes = "传入空间数据") public void exportShpZipByValue(@RequestBody GeomInfoEntity geomInfoEntity,HttpServletResponse response) throws IOException { // 要导出的文件夹路径 String sourceFolderPath = fileConstant.getZipTempSavePath(); // 先生成文件 List> propertyList = new ArrayList<>(); Map map = new HashMap<>(); map.put("ID", System.currentTimeMillis()); map.put("name", geomInfoEntity.getName()); map.put("geometry",geomInfoEntity.getGeom()); propertyList.add(map); // 导出shp 文件 ShapeFileUtil.exportShp(propertyList, geomInfoEntity.getName(), geomInfoEntity.getType(),sourceFolderPath); // ZIP文件名 String zipFileName = System.currentTimeMillis() + "_exported_shp.zip"; response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\""); try ( BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); ZipOutputStream zipOut = new ZipOutputStream(bos); ) { ZipUtil.zipFolder(sourceFolderPath, zipOut); } } }