package com.ard.web.controller.data; import com.alibaba.fastjson2.JSON; import com.ard.common.utils.uuid.IdUtils; import com.ard.system.noflyzone.domain.FeatureCollection; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import java.nio.charset.StandardCharsets; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import com.ard.common.annotation.Log; import com.ard.common.core.controller.BaseController; import com.ard.common.core.domain.AjaxResult; import com.ard.common.enums.BusinessType; import com.ard.system.noflyzone.domain.ArdNoFlyZone; import com.ard.system.noflyzone.service.IArdNoFlyZoneService; import com.ard.common.utils.poi.ExcelUtil; import com.ard.common.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; /** * 禁飞区管理Controller * * @author ruoyi * @date 2025-10-14 */ @Api(tags = "禁飞区管理") @RestController @RequestMapping("/data/noflyzone") public class ArdNoFlyZoneController extends BaseController { @Resource private IArdNoFlyZoneService ardNoFlyZoneService; /** * 查询禁飞区管理列表 */ @ApiOperation("查询禁飞区管理列表") @PreAuthorize("@ss.hasPermi('data:noflyzone:list')") @GetMapping("/list") public TableDataInfo list(ArdNoFlyZone ardNoFlyZone) { startPage(); List list = ardNoFlyZoneService.selectArdNoFlyZoneList(ardNoFlyZone); return getDataTable(list); } /** * 导出禁飞区管理列表 */ @PreAuthorize("@ss.hasPermi('data:noflyzone:export')") @Log(title = "禁飞区管理", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, ArdNoFlyZone ardNoFlyZone) { List list = ardNoFlyZoneService.selectArdNoFlyZoneList(ardNoFlyZone); ExcelUtil util = new ExcelUtil(ArdNoFlyZone.class); util.exportExcel(response, list, "禁飞区管理数据"); } /** * 获取禁飞区管理详细信息 */ @ApiOperation("获取禁飞区管理详细信息") @PreAuthorize("@ss.hasPermi('data:noflyzone:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") String id) { return success(ardNoFlyZoneService.selectArdNoFlyZoneById(id)); } /** * 新增禁飞区管理 */ @ApiOperation("新增禁飞区管理") @PreAuthorize("@ss.hasPermi('data:noflyzone:add')") @Log(title = "禁飞区管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdNoFlyZone ardNoFlyZone) { return toAjax(ardNoFlyZoneService.insertArdNoFlyZone(ardNoFlyZone)); } /** * 修改禁飞区管理 */ @ApiOperation("修改禁飞区管理") @PreAuthorize("@ss.hasPermi('data:noflyzone:edit')") @Log(title = "禁飞区管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ArdNoFlyZone ardNoFlyZone) { return toAjax(ardNoFlyZoneService.updateArdNoFlyZone(ardNoFlyZone)); } /** * 删除禁飞区管理 */ @ApiOperation("删除禁飞区管理") @PreAuthorize("@ss.hasPermi('data:noflyzone:remove')") @Log(title = "禁飞区管理", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable String[] ids) { return toAjax(ardNoFlyZoneService.deleteArdNoFlyZoneByIds(ids)); } /** * 上传 GeoJSON 文件导入禁飞区 */ @ApiOperation("上传 GeoJSON 文件导入禁飞区") @PreAuthorize("@ss.hasPermi('data:noflyzone:import')") @Log(title = "禁飞区管理", businessType = BusinessType.IMPORT) @PostMapping("/import") public AjaxResult importGeoJson(@RequestPart("file") MultipartFile file) { if (file.isEmpty()) { return AjaxResult.error("上传文件为空"); } try { // 读取文件内容为字符串 String jsonStr = new String(file.getBytes(), StandardCharsets.UTF_8); // 解析成 FeatureCollection 对象 FeatureCollection featureCollection = JSON.parseObject(jsonStr, FeatureCollection.class); int successCount = 0; for (FeatureCollection.Feature feature : featureCollection.getFeatures()) { ArdNoFlyZone zone = new ArdNoFlyZone(); zone.setId(IdUtils.simpleUUID()); zone.setName(feature.getName() != null ? feature.getName() : "未命名禁飞区"); // 单独包装 FeatureCollection FeatureCollection singleFc = new FeatureCollection(); singleFc.setType("FeatureCollection"); singleFc.setName(featureCollection.getName()); singleFc.setFeatures(List.of(feature)); zone.setGeojson(singleFc); // 调用 Service 插入 ardNoFlyZoneService.insertArdNoFlyZone(zone); successCount++; } return AjaxResult.success("导入成功,共导入 " + successCount + " 条禁飞区"); } catch (Exception e) { e.printStackTrace(); return AjaxResult.error("导入失败:" + e.getMessage()); } } }