zhaowenyu
2025-10-14 f905f4377db462640a4fdd53dc5daa1adfc8c542
ard-admin/src/main/java/com/ard/web/controller/data/ArdNoFlyZoneController.java
New file
@@ -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());
        }
    }
}