From f905f4377db462640a4fdd53dc5daa1adfc8c542 Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Tue, 14 Oct 2025 18:30:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 ard-admin/src/main/java/com/ard/web/controller/data/ArdNoFlyZoneController.java |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/data/ArdNoFlyZoneController.java b/ard-admin/src/main/java/com/ard/web/controller/data/ArdNoFlyZoneController.java
new file mode 100644
index 0000000..b701ebe
--- /dev/null
+++ b/ard-admin/src/main/java/com/ard/web/controller/data/ArdNoFlyZoneController.java
@@ -0,0 +1,157 @@
+package com.ard.web.controller.data;
+
+import com.alibaba.fastjson2.JSON;
+import com.ard.common.utils.uuid.IdUtils;
+import com.ard.system.domain.noflyzone.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.domain.noflyzone.ArdNoFlyZone;
+import com.ard.system.service.noflyzone.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<ArdNoFlyZone> 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<ArdNoFlyZone> list = ardNoFlyZoneService.selectArdNoFlyZoneList(ardNoFlyZone);
+        ExcelUtil<ArdNoFlyZone> util = new ExcelUtil<ArdNoFlyZone>(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());
+        }
+    }
+
+}

--
Gitblit v1.9.3