From 3ae46f2a59f9d4e751f78d8dc1a896ceba5ca495 Mon Sep 17 00:00:00 2001
From: rain <1679827795@qq.com>
Date: Fri, 09 Jan 2026 15:13:40 +0800
Subject: [PATCH] 区域管理模块

---
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java    |   40 ++
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java                     |    2 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml                |  251 ++++++++++++++--
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java                 |    7 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java    |   68 ++--
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java               |   23 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java      |   96 ++++--
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java                       |   19 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java   |   34 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java |   27 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java     |   30 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml               |  120 +++++++
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java                    |   48 ++
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java               |    2 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java              |    2 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java  |   27 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java            |    7 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java                |    2 
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java              |   15 +
 drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java       |   46 ++
 20 files changed, 697 insertions(+), 169 deletions(-)

diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java
index c422d4a..4124882 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java
@@ -29,6 +29,7 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -36,7 +37,6 @@
 import org.sxkj.fw.area.entity.FwAreaDivideEntity;
 import org.sxkj.fw.area.vo.FwAreaDivideVO;
 import org.sxkj.fw.area.excel.FwAreaDivideExcel;
-import org.sxkj.fw.area.wrapper.FwAreaDivideWrapper;
 import org.sxkj.fw.area.service.IFwAreaDivideService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.utils.DateUtil;
@@ -68,10 +68,16 @@
 	 */
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入fwAreaDivide")
-	public R<FwAreaDivideVO> detail(FwAreaDivideEntity fwAreaDivide) {
-		FwAreaDivideEntity detail = fwAreaDivideService.getOne(Condition.getQueryWrapper(fwAreaDivide));
-		return R.data(FwAreaDivideWrapper.build().entityVO(detail));
+	@ApiOperation(value = "详情", notes = "传入id")
+	public R<FwAreaDivideVO> detail(@ApiParam(value = "主键id", required = true) @RequestParam Long id) {
+		if (id == null) {
+			return R.fail("主键不能为空");
+		}
+		FwAreaDivideVO detail = fwAreaDivideService.selectFwAreaDivideDetail(id);
+		if (detail == null) {
+			return R.fail("数据不存在");
+		}
+		return R.data(detail);
 	}
 	/**
 	 * 区域划分表 分页
@@ -105,15 +111,15 @@
 	// 	return R.status(fwAreaDivideService.save(fwAreaDivide));
 	// }
 
-	/**
-	 * 区域划分表 修改
-	 */
-	// @PostMapping("/update")
-	// @ApiOperationSupport(order = 5)
-	// @ApiOperation(value = "修改", notes = "传入fwAreaDivide")
-	// public R update(@Valid @RequestBody FwAreaDivideEntity fwAreaDivide) {
-	// 	return R.status(fwAreaDivideService.updateById(fwAreaDivide));
-	// }
+//	/**
+//	 * 区域划分表 修改
+//	 */
+//	 @PostMapping("/update")
+//	 @ApiOperationSupport(order = 5)
+//	 @ApiOperation(value = "修改", notes = "传入fwAreaDivide")
+//	 public R update(@Valid @RequestBody FwAreaDivideEntity fwAreaDivide) {
+//	 	return R.status(fwAreaDivideService.updateById(fwAreaDivide));
+//	 }
 
 	/**
 	 * 区域划分表 新增或修改
@@ -123,6 +129,9 @@
 	@ApiOperation(value = "新增或修改", notes = "传入fwAreaDivide")
 	public R submit(@Valid @RequestBody FwAreaDivideDTO fwAreaDivide) {
 		FwAreaDivideEntity fwAreaDivideEntity = Objects.requireNonNull(BeanUtil.copy(fwAreaDivide, FwAreaDivideEntity.class));
+		if (isGeomInvalid(fwAreaDivideEntity.getGeom())) {
+			return R.fail("几何数据格式不正确");
+		}
 		return R.status(fwAreaDivideService.saveOrUpdate(fwAreaDivideEntity));
 	}
 
@@ -140,6 +149,7 @@
 	/**
 	 * 导出数据
 	 */
+	@ApiIgnore
 	@GetMapping("/export-fwAreaDivide")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出数据", notes = "传入fwAreaDivide")
@@ -153,4 +163,12 @@
 		ExcelUtil.export(response, "区域划分表数据" + DateUtil.time(), "区域划分表数据表", list, FwAreaDivideExcel.class);
 	}
 
+	private boolean isGeomInvalid(String geom) {
+		if (StringUtil.isBlank(geom)) {
+			return false;
+		}
+		String upper = geom.trim().toUpperCase();
+		return !upper.contains("POLYGON");
+	}
+
 }
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java
index 8de13c7..13808b1 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java
@@ -64,9 +64,12 @@
 	 */
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入fwDefenseScene")
-	public R<FwDefenseSceneVO> detail(FwDefenseSceneEntity fwDefenseScene) {
-		FwDefenseSceneEntity detail = fwDefenseSceneService.getOne(Condition.getQueryWrapper(fwDefenseScene));
+	@ApiOperation(value = "详情", notes = "传入id")
+	public R<FwDefenseSceneVO> detail(@ApiParam(value = "主键id", required = true) @RequestParam Long id) {
+		if (id == null) {
+			return R.fail("主键不能为空");
+		}
+		FwDefenseSceneEntity detail = fwDefenseSceneService.getById(id);
 		return R.data(FwDefenseSceneWrapper.build().entityVO(detail));
 	}
 	/**
@@ -100,16 +103,16 @@
 	// public R save(@Valid @RequestBody FwDefenseSceneEntity fwDefenseScene) {
 	// 	return R.status(fwDefenseSceneService.save(fwDefenseScene));
 	// }
-
-	/**
-	 * 防控场景表 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "修改", notes = "传入fwDefenseScene")
-	public R update(@Valid @RequestBody FwDefenseSceneEntity fwDefenseScene) {
-		return R.status(fwDefenseSceneService.updateById(fwDefenseScene));
-	}
+//
+//	/**
+//	 * 防控场景表 修改
+//	 */
+//	@PostMapping("/update")
+//	@ApiOperationSupport(order = 5)
+//	@ApiOperation(value = "修改", notes = "传入fwDefenseScene")
+//	public R update(@Valid @RequestBody FwDefenseSceneEntity fwDefenseScene) {
+//		return R.status(fwDefenseSceneService.updateById(fwDefenseScene));
+//	}
 
 	/**
 	 * 防控场景表 新增或修改
@@ -135,6 +138,7 @@
 	/**
 	 * 导出数据
 	 */
+	@ApiIgnore
 	@GetMapping("/export-fwDefenseScene")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出数据", notes = "传入fwDefenseScene")
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java
index 2295460..9196505 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java
@@ -27,10 +27,13 @@
 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.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.sxkj.fw.area.dto.FwDefenseZoneDTO;
 import org.sxkj.fw.area.entity.FwDefenseZoneEntity;
 import org.sxkj.fw.area.vo.FwDefenseZoneVO;
 import org.sxkj.fw.area.excel.FwDefenseZoneExcel;
@@ -43,6 +46,7 @@
 import springfox.documentation.annotations.ApiIgnore;
 import java.util.Map;
 import java.util.List;
+import java.util.Objects;
 import javax.servlet.http.HttpServletResponse;
 
 /**
@@ -64,21 +68,24 @@
 	 */
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入fwDefenseZone")
-	public R<FwDefenseZoneVO> detail(FwDefenseZoneEntity fwDefenseZone) {
-		FwDefenseZoneEntity detail = fwDefenseZoneService.getOne(Condition.getQueryWrapper(fwDefenseZone));
+	@ApiOperation(value = "详情", notes = "传入id")
+	public R<FwDefenseZoneVO> detail(@ApiParam(value = "主键id", required = true) @RequestParam Long id) {
+		if (id == null) {
+			return R.fail("主键不能为空");
+		}
+		FwDefenseZoneEntity detail = fwDefenseZoneService.getById(id);
 		return R.data(FwDefenseZoneWrapper.build().entityVO(detail));
 	}
-	/**
-	 * 防区管理表 分页
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入fwDefenseZone")
-	public R<IPage<FwDefenseZoneVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDefenseZone, Query query) {
-		IPage<FwDefenseZoneEntity> pages = fwDefenseZoneService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDefenseZone, FwDefenseZoneEntity.class));
-		return R.data(FwDefenseZoneWrapper.build().pageVO(pages));
-	}
+//	/**
+//	 * 防区管理表 分页
+//	 */
+//	@GetMapping("/list")
+//	@ApiOperationSupport(order = 2)
+//	@ApiOperation(value = "分页", notes = "传入fwDefenseZone")
+//	public R<IPage<FwDefenseZoneVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwDefenseZone, Query query) {
+//		IPage<FwDefenseZoneEntity> pages = fwDefenseZoneService.page(Condition.getPage(query), Condition.getQueryWrapper(fwDefenseZone, FwDefenseZoneEntity.class));
+//		return R.data(FwDefenseZoneWrapper.build().pageVO(pages));
+//	}
 
 	/**
 	 * 防区管理表 自定义分页
@@ -91,25 +98,33 @@
 		return R.data(pages);
 	}
 
-	/**
-	 * 防区管理表 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增", notes = "传入fwDefenseZone")
-	public R save(@Valid @RequestBody FwDefenseZoneEntity fwDefenseZone) {
-		return R.status(fwDefenseZoneService.save(fwDefenseZone));
-	}
-
-	/**
-	 * 防区管理表 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "修改", notes = "传入fwDefenseZone")
-	public R update(@Valid @RequestBody FwDefenseZoneEntity fwDefenseZone) {
-		return R.status(fwDefenseZoneService.updateById(fwDefenseZone));
-	}
+//	/**
+//	 * 防区管理表 新增
+//	 */
+//	@PostMapping("/save")
+//	@ApiOperationSupport(order = 4)
+//	@ApiOperation(value = "新增", notes = "传入fwDefenseZone")
+//	public R save(@Valid @RequestBody FwDefenseZoneDTO fwDefenseZone) {
+//		FwDefenseZoneEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDefenseZone, FwDefenseZoneEntity.class));
+//		if (isGeomInvalid(entity.getGeom())) {
+//			return R.fail("几何数据格式不正确");
+//		}
+//		return R.status(fwDefenseZoneService.save(entity));
+//	}
+//
+//	/**
+//	 * 防区管理表 修改
+//	 */
+//	@PostMapping("/update")
+//	@ApiOperationSupport(order = 5)
+//	@ApiOperation(value = "修改", notes = "传入fwDefenseZone")
+//	public R update(@Valid @RequestBody FwDefenseZoneDTO fwDefenseZone) {
+//		FwDefenseZoneEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDefenseZone, FwDefenseZoneEntity.class));
+//		if (isGeomInvalid(entity.getGeom())) {
+//			return R.fail("几何数据格式不正确");
+//		}
+//		return R.status(fwDefenseZoneService.updateById(entity));
+//	}
 
 	/**
 	 * 防区管理表 新增或修改
@@ -117,8 +132,12 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入fwDefenseZone")
-	public R submit(@Valid @RequestBody FwDefenseZoneEntity fwDefenseZone) {
-		return R.status(fwDefenseZoneService.saveOrUpdate(fwDefenseZone));
+	public R submit(@Valid @RequestBody FwDefenseZoneDTO fwDefenseZone) {
+		FwDefenseZoneEntity entity = Objects.requireNonNull(BeanUtil.copy(fwDefenseZone, FwDefenseZoneEntity.class));
+		if (isGeomInvalid(entity.getGeom())) {
+			return R.fail("几何数据格式不正确");
+		}
+		return R.status(fwDefenseZoneService.saveOrUpdate(entity));
 	}
 
 	/**
@@ -135,6 +154,7 @@
 	/**
 	 * 导出数据
 	 */
+	@ApiIgnore
 	@GetMapping("/export-fwDefenseZone")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出数据", notes = "传入fwDefenseZone")
@@ -148,4 +168,12 @@
 		ExcelUtil.export(response, "防区管理表数据" + DateUtil.time(), "防区管理表数据表", list, FwDefenseZoneExcel.class);
 	}
 
+	private boolean isGeomInvalid(String geom) {
+		if (StringUtil.isBlank(geom)) {
+			return false;
+		}
+		String upper = geom.trim().toUpperCase();
+		return !upper.contains("POLYGON");
+	}
+
 }
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java
index 89924ee..2b45fc9 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java
@@ -64,21 +64,24 @@
 	 */
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入fwPoliceStation")
-	public R<FwPoliceStationVO> detail(FwPoliceStationEntity fwPoliceStation) {
-		FwPoliceStationEntity detail = fwPoliceStationService.getOne(Condition.getQueryWrapper(fwPoliceStation));
+	@ApiOperation(value = "详情", notes = "传入id")
+	public R<FwPoliceStationVO> detail(@ApiParam(value = "主键id", required = true) @RequestParam Long id) {
+		if (id == null) {
+			return R.fail("主键不能为空");
+		}
+		FwPoliceStationEntity detail = fwPoliceStationService.getById(id);
 		return R.data(FwPoliceStationWrapper.build().entityVO(detail));
 	}
-	/**
-	 * 派出所信息表 分页
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入fwPoliceStation")
-	public R<IPage<FwPoliceStationVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwPoliceStation, Query query) {
-		IPage<FwPoliceStationEntity> pages = fwPoliceStationService.page(Condition.getPage(query), Condition.getQueryWrapper(fwPoliceStation, FwPoliceStationEntity.class));
-		return R.data(FwPoliceStationWrapper.build().pageVO(pages));
-	}
+//	/**
+//	 * 派出所信息表 分页
+//	 */
+//	@GetMapping("/list")
+//	@ApiOperationSupport(order = 2)
+//	@ApiOperation(value = "分页", notes = "传入fwPoliceStation")
+//	public R<IPage<FwPoliceStationVO>> list(@ApiIgnore @RequestParam Map<String, Object> fwPoliceStation, Query query) {
+//		IPage<FwPoliceStationEntity> pages = fwPoliceStationService.page(Condition.getPage(query), Condition.getQueryWrapper(fwPoliceStation, FwPoliceStationEntity.class));
+//		return R.data(FwPoliceStationWrapper.build().pageVO(pages));
+//	}
 
 	/**
 	 * 派出所信息表 自定义分页
@@ -91,25 +94,25 @@
 		return R.data(pages);
 	}
 
-	/**
-	 * 派出所信息表 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增", notes = "传入fwPoliceStation")
-	public R save(@Valid @RequestBody FwPoliceStationEntity fwPoliceStation) {
-		return R.status(fwPoliceStationService.save(fwPoliceStation));
-	}
-
-	/**
-	 * 派出所信息表 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "修改", notes = "传入fwPoliceStation")
-	public R update(@Valid @RequestBody FwPoliceStationEntity fwPoliceStation) {
-		return R.status(fwPoliceStationService.updateById(fwPoliceStation));
-	}
+//	/**
+//	 * 派出所信息表 新增
+//	 */
+//	@PostMapping("/save")
+//	@ApiOperationSupport(order = 4)
+//	@ApiOperation(value = "新增", notes = "传入fwPoliceStation")
+//	public R save(@Valid @RequestBody FwPoliceStationEntity fwPoliceStation) {
+//		return R.status(fwPoliceStationService.save(fwPoliceStation));
+//	}
+//
+//	/**
+//	 * 派出所信息表 修改
+//	 */
+//	@PostMapping("/update")
+//	@ApiOperationSupport(order = 5)
+//	@ApiOperation(value = "修改", notes = "传入fwPoliceStation")
+//	public R update(@Valid @RequestBody FwPoliceStationEntity fwPoliceStation) {
+//		return R.status(fwPoliceStationService.updateById(fwPoliceStation));
+//	}
 
 	/**
 	 * 派出所信息表 新增或修改
@@ -135,6 +138,7 @@
 	/**
 	 * 导出数据
 	 */
+	@ApiIgnore
 	@GetMapping("/export-fwPoliceStation")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出数据", notes = "传入fwPoliceStation")
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java
index f8fdf7a..2587640 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java
@@ -64,7 +64,7 @@
 	 * 经纬度面(存储地理面数据)
 	 */
 	@ApiModelProperty(value = "经纬度面(存储地理面数据)")
-	private byte[] geom;
+	private String geom;
 	/**
 	 * 区域类型:报警区/重点管制区
 	 */
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java
index de1873b..0df8a95 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java
@@ -16,19 +16,57 @@
  */
 package org.sxkj.fw.area.dto;
 
-import org.sxkj.fw.area.entity.FwDefenseZoneEntity;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
+import org.sxkj.fw.area.entity.FwDefenseZoneEntity;
+
+import java.math.BigDecimal;
 
 /**
  * 防区管理表 数据传输对象实体类
  *
  * @author lw
- * @since 2026-01-08
+ * @since 2026-01-09
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class FwDefenseZoneDTO extends FwDefenseZoneEntity {
+public class FwDefenseZoneDTO {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("主键id")
+	private Long id;
+	/**
+	 * 防区名称
+	 */
+	@ApiModelProperty(value = "防区名称")
+	private String zoneName;
+	/**
+	 * 防区面积(km2)
+	 */
+	@ApiModelProperty(value = "防区面积(km2)")
+	private BigDecimal zoneArea;
+	/**
+	 * 关联场景ID,逗号分隔
+	 */
+	@ApiModelProperty(value = "关联场景ID,逗号分隔")
+	private String defenseSceneIds;
+	/**
+	 * 关联区域ID,逗号分隔
+	 */
+	@ApiModelProperty(value = "关联区域ID,逗号分隔")
+	private String areaDivideIds;
+	/**
+	 * 关联设备ID,逗号分隔
+	 */
+	@ApiModelProperty(value = "关联设备ID,逗号分隔")
+	private String deviceIds;
+	/**
+	 * 经纬度面(存储地理面数据)
+	 */
+	@ApiModelProperty(value = "经纬度面(存储地理面数据)")
+	private String geom;
+	/**
+	 * 区域编码
+	 */
+	@ApiModelProperty(value = "区域编码")
+	private String areaCode;
 }
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java
index 5cbe1c0..6caafd0 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java
@@ -69,7 +69,7 @@
 	 */
 	@TableField("geom")
 	@ApiModelProperty(value = "经纬度面(存储地理面数据)")
-	private byte[] geom;
+	private String geom;
 	/**
 	 * 区域类型:报警区/重点管制区
 	 */
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java
index 7dab73e..29b1976 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java
@@ -73,7 +73,7 @@
 	 */
 	@TableField("geom")
 	@ApiModelProperty(value = "经纬度面(存储地理面数据)")
-	private byte[] geom;
+	private String geom;
 	/**
 	 * 区域编码
 	 */
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java
index 14a9fb6..2c5fa90 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java
@@ -22,6 +22,7 @@
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
+import org.sxkj.fw.utils.excel.LocalTimeConverter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -72,7 +73,7 @@
 	 */
 	@ColumnWidth(20)
 	@ExcelProperty("经纬度面(存储地理面数据)")
-	private byte[] geom;
+	private String geom;
 	/**
 	 * 区域类型:报警区/重点管制区
 	 */
@@ -107,13 +108,13 @@
 	 * 可飞行时间段-开始
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("可飞行时间段-开始")
+	@ExcelProperty(value = "可飞行时间段-开始", converter = LocalTimeConverter.class)
 	private LocalTime flyTimeStart;
 	/**
 	 * 可飞行时间段-结束
 	 */
 	@ColumnWidth(20)
-	@ExcelProperty("可飞行时间段-结束")
+	@ExcelProperty(value = "可飞行时间段-结束", converter = LocalTimeConverter.class)
 	private LocalTime flyTimeEnd;
 	/**
 	 * 可飞行日期-开始
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java
index 77e5679..8b88e6d 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java
@@ -76,7 +76,7 @@
 	 */
 	@ColumnWidth(20)
 	@ExcelProperty("经纬度面(存储地理面数据)")
-	private byte[] geom;
+	private String geom;
 	/**
 	 * 区域编码
 	 */
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java
index 7ae24e8..0558032 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java
@@ -43,6 +43,29 @@
 	 */
 	List<FwAreaDivideVO> selectFwAreaDividePage(IPage page, FwAreaDivideDTO fwAreaDivide);
 
+	/**
+	 * 详情
+	 *
+	 * @param id
+	 * @return
+	 */
+	FwAreaDivideVO selectFwAreaDivideDetail(@Param("id") Long id);
+
+	/**
+	 * 新增(几何字段使用文本入库)
+	 *
+	 * @param fwAreaDivide
+	 * @return
+	 */
+	int insertWithGeom(FwAreaDivideEntity fwAreaDivide);
+
+	/**
+	 * 修改(几何字段使用文本入库)
+	 *
+	 * @param fwAreaDivide
+	 * @return
+	 */
+	int updateWithGeomById(FwAreaDivideEntity fwAreaDivide);
 
 	/**
 	 * 获取导出数据
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml
index cadf928..9a5fbe0 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="org.sxkj.fw.area.mapper.FwAreaDivideMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="fwAreaDivideResultMap" type="org.sxkj.fw.area.entity.FwAreaDivideEntity">
+    <resultMap id="fwAreaDivideResultMap" type="org.sxkj.fw.area.vo.FwAreaDivideVO">
         <result column="id" property="id"/>
         <result column="area_name" property="areaName"/>
         <result column="longitude" property="longitude"/>
@@ -20,6 +20,9 @@
         <result column="fly_date_start" property="flyDateStart"/>
         <result column="fly_date_end" property="flyDateEnd"/>
         <result column="area_code" property="areaCode"/>
+        <result column="police_station_name" property="policeStationName"/>
+        <result column="police_station_contact_person" property="policeStationContactPerson"/>
+        <result column="police_station_contact_phone" property="policeStationContactPhone"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>
         <result column="create_time" property="createTime"/>
@@ -31,81 +34,253 @@
 
 
     <select id="selectFwAreaDividePage" resultMap="fwAreaDivideResultMap">
-        select * from ja_fw_area_divide
+        select
+        ad.id,
+        ad.area_name,
+        ad.longitude,
+        ad.latitude,
+        ad.area_size,
+        concat(ST_AsText(ad.geom), ' | ', ST_SRID(ad.geom)) as geom,
+        ad.area_type,
+        ad.trigger_condition,
+        ad.response_mechanism,
+        ad.control_level,
+        ad.police_station_id,
+        ad.fly_time_start,
+        ad.fly_time_end,
+        ad.fly_date_start,
+        ad.fly_date_end,
+        ad.area_code,
+        ps.station_name as police_station_name,
+        ad.create_user,
+        ad.create_dept,
+        ad.create_time,
+        ad.update_user,
+        ad.update_time,
+        ad.status,
+        ad.is_deleted
+        from ja_fw_area_divide ad
+        left join ja_fw_police_station ps on ps.id = ad.police_station_id and ps.is_deleted = 0
         <where>
-            is_deleted = 0
+            ad.is_deleted = 0
             <if test="param2.id != null and param2.id != ''">
-                and id = #{param2.id}
+                and ad.id = #{param2.id}
             </if>
             <if test="param2.areaName != null and param2.areaName != ''">
-                and area_name like concat('%', #{param2.areaName}, '%')
+                and ad.area_name like concat('%', #{param2.areaName}, '%')
             </if>
             <if test="param2.longitude != null and param2.longitude != ''">
-                and longitude = #{param2.longitude}
+                and ad.longitude = #{param2.longitude}
             </if>
             <if test="param2.latitude != null and param2.latitude != ''">
-                and latitude = #{param2.latitude}
+                and ad.latitude = #{param2.latitude}
             </if>
             <if test="param2.areaSize != null and param2.areaSize != ''">
-                and area_size = #{param2.areaSize}
+                and ad.area_size = #{param2.areaSize}
             </if>
             <if test="param2.geom != null and param2.geom != ''">
-                and geom = #{param2.geom}
+                and ST_Equals(
+                    ad.geom,
+                    ST_SRID(
+                        ST_GeomFromText(
+                            trim(case when instr(#{param2.geom}, '|') &gt; 0 then substring_index(#{param2.geom}, '|', 1) else #{param2.geom} end)
+                        ),
+                        case when instr(#{param2.geom}, '|') &gt; 0 then cast(trim(substring_index(#{param2.geom}, '|', -1)) as unsigned) else 4326 end
+                    )
+                )
             </if>
             <if test="param2.areaType != null and param2.areaType != ''">
-                and area_type = #{param2.areaType}
+                and ad.area_type = #{param2.areaType}
             </if>
             <if test="param2.triggerCondition != null and param2.triggerCondition != ''">
-                and trigger_condition = #{param2.triggerCondition}
+                and ad.trigger_condition = #{param2.triggerCondition}
             </if>
             <if test="param2.responseMechanism != null and param2.responseMechanism != ''">
-                and response_mechanism = #{param2.responseMechanism}
+                and ad.response_mechanism = #{param2.responseMechanism}
             </if>
             <if test="param2.controlLevel != null and param2.controlLevel != ''">
-                and control_level = #{param2.controlLevel}
+                and ad.control_level = #{param2.controlLevel}
             </if>
             <if test="param2.policeStationId != null and param2.policeStationId != ''">
-                and police_station_id = #{param2.policeStationId}
+                and ad.police_station_id = #{param2.policeStationId}
             </if>
             <if test="param2.flyTimeStart != null and param2.flyTimeStart != ''">
-                and fly_time_start &gt;= #{param2.flyTimeStart}
+                and ad.fly_time_start &gt;= #{param2.flyTimeStart}
             </if>
             <if test="param2.flyTimeEnd != null and param2.flyTimeEnd != ''">
-                and fly_time_end &lt;= #{param2.flyTimeEnd}
+                and ad.fly_time_end &lt;= #{param2.flyTimeEnd}
             </if>
             <if test="param2.flyDateStart != null and param2.flyDateStart != ''">
-                and fly_date_start &gt;= #{param2.flyDateStart}
+                and ad.fly_date_start &gt;= #{param2.flyDateStart}
             </if>
             <if test="param2.flyDateEnd != null and param2.flyDateEnd != ''">
-                and fly_date_end &lt;= #{param2.flyDateEnd}
+                and ad.fly_date_end &lt;= #{param2.flyDateEnd}
             </if>
             <if test="param2.areaCode != null and param2.areaCode != ''">
-                and area_code = #{param2.areaCode}
-            </if>
-            <if test="param2.createUser != null and param2.createUser != ''">
-                and create_user = #{param2.createUser}
-            </if>
-            <if test="param2.createDept != null and param2.createDept != ''">
-                and create_dept = #{param2.createDept}
-            </if>
-            <if test="param2.createTime != null and param2.createTime != ''">
-                and create_time = #{param2.createTime}
-            </if>
-            <if test="param2.updateUser != null and param2.updateUser != ''">
-                and update_user = #{param2.updateUser}
-            </if>
-            <if test="param2.updateTime != null and param2.updateTime != ''">
-                and update_time = #{param2.updateTime}
-            </if>
-            <if test="param2.status != null and param2.status != ''">
-                and status = #{param2.status}
+                and ad.area_code = #{param2.areaCode}
             </if>
         </where>
     </select>
 
+    <select id="selectFwAreaDivideDetail" resultMap="fwAreaDivideResultMap">
+        select
+        ad.id,
+        ad.area_name,
+        ad.longitude,
+        ad.latitude,
+        ad.area_size,
+        concat(ST_AsText(ad.geom), ' | ', ST_SRID(ad.geom)) as geom,
+        ad.area_type,
+        ad.trigger_condition,
+        ad.response_mechanism,
+        ad.control_level,
+        ad.police_station_id,
+        ad.fly_time_start,
+        ad.fly_time_end,
+        ad.fly_date_start,
+        ad.fly_date_end,
+        ad.area_code,
+        ps.station_name as police_station_name,
+        ps.contact_person as police_station_contact_person,
+        ps.contact_phone as police_station_contact_phone,
+        ad.create_user,
+        ad.create_dept,
+        ad.create_time,
+        ad.update_user,
+        ad.update_time,
+        ad.status,
+        ad.is_deleted
+        from ja_fw_area_divide ad
+        left join ja_fw_police_station ps on ps.id = ad.police_station_id and ps.is_deleted = 0
+        where ad.is_deleted = 0
+          and ad.id = #{id}
+    </select>
+
 
     <select id="exportFwAreaDivide" resultType="org.sxkj.fw.area.excel.FwAreaDivideExcel">
-        SELECT * FROM ja_fw_area_divide ${ew.customSqlSegment}
+        SELECT
+        id,
+        area_name,
+        longitude,
+        latitude,
+        area_size,
+        concat(ST_AsText(geom), ' | ', ST_SRID(geom)) as geom,
+        area_type,
+        trigger_condition,
+        response_mechanism,
+        control_level,
+        police_station_id,
+        fly_time_start,
+        fly_time_end,
+        fly_date_start,
+        fly_date_end,
+        area_code,
+        create_user,
+        create_dept,
+        create_time,
+        update_user,
+        update_time,
+        status,
+        is_deleted
+        FROM ja_fw_area_divide ${ew.customSqlSegment}
     </select>
 
+    <insert id="insertWithGeom" parameterType="org.sxkj.fw.area.entity.FwAreaDivideEntity" useGeneratedKeys="true" keyProperty="id">
+        insert into ja_fw_area_divide (
+            id,
+            area_name,
+            longitude,
+            latitude,
+            area_size,
+            geom,
+            area_type,
+            trigger_condition,
+            response_mechanism,
+            control_level,
+            police_station_id,
+            fly_time_start,
+            fly_time_end,
+            fly_date_start,
+            fly_date_end,
+            area_code,
+            create_user,
+            create_dept,
+            create_time,
+            update_user,
+            update_time,
+            status,
+            is_deleted
+        ) values (
+            #{id},
+            #{areaName},
+            #{longitude},
+            #{latitude},
+            #{areaSize},
+            <choose>
+                <when test="geom != null and geom != ''">
+                    ST_SRID(
+                        ST_GeomFromText(
+                            trim(case when instr(#{geom}, '|') &gt; 0 then substring_index(#{geom}, '|', 1) else #{geom} end)
+                        ),
+                        case when instr(#{geom}, '|') &gt; 0 then cast(trim(substring_index(#{geom}, '|', -1)) as unsigned) else 4326 end
+                    )
+                </when>
+                <otherwise>null</otherwise>
+            </choose>,
+            #{areaType},
+            #{triggerCondition},
+            #{responseMechanism},
+            #{controlLevel},
+            #{policeStationId},
+            #{flyTimeStart},
+            #{flyTimeEnd},
+            #{flyDateStart},
+            #{flyDateEnd},
+            #{areaCode},
+            #{createUser},
+            #{createDept},
+            #{createTime},
+            #{updateUser},
+            #{updateTime},
+            #{status},
+            #{isDeleted}
+        )
+    </insert>
+
+    <update id="updateWithGeomById" parameterType="org.sxkj.fw.area.entity.FwAreaDivideEntity">
+        update ja_fw_area_divide
+        <set>
+            <if test="areaName != null">area_name = #{areaName},</if>
+            <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="latitude != null">latitude = #{latitude},</if>
+            <if test="areaSize != null">area_size = #{areaSize},</if>
+            <if test="geom != null and geom != ''">
+                geom = ST_SRID(
+                    ST_GeomFromText(
+                        trim(case when instr(#{geom}, '|') &gt; 0 then substring_index(#{geom}, '|', 1) else #{geom} end)
+                    ),
+                    case when instr(#{geom}, '|') &gt; 0 then cast(trim(substring_index(#{geom}, '|', -1)) as unsigned) else 4326 end
+                ),
+            </if>
+            <if test="areaType != null">area_type = #{areaType},</if>
+            <if test="triggerCondition != null">trigger_condition = #{triggerCondition},</if>
+            <if test="responseMechanism != null">response_mechanism = #{responseMechanism},</if>
+            <if test="controlLevel != null">control_level = #{controlLevel},</if>
+            <if test="policeStationId != null">police_station_id = #{policeStationId},</if>
+            <if test="flyTimeStart != null">fly_time_start = #{flyTimeStart},</if>
+            <if test="flyTimeEnd != null">fly_time_end = #{flyTimeEnd},</if>
+            <if test="flyDateStart != null">fly_date_start = #{flyDateStart},</if>
+            <if test="flyDateEnd != null">fly_date_end = #{flyDateEnd},</if>
+            <if test="areaCode != null">area_code = #{areaCode},</if>
+            <if test="createUser != null">create_user = #{createUser},</if>
+            <if test="createDept != null">create_dept = #{createDept},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateUser != null">update_user = #{updateUser},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="isDeleted != null">is_deleted = #{isDeleted},</if>
+        </set>
+        where id = #{id}
+    </update>
+
 </mapper>
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java
index a05f3de..32bfdca 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java
@@ -42,6 +42,21 @@
 	 */
 	List<FwDefenseZoneVO> selectFwDefenseZonePage(IPage page, FwDefenseZoneVO fwDefenseZone);
 
+	/**
+	 * 新增(几何字段使用文本入库)
+	 *
+	 * @param fwDefenseZone
+	 * @return
+	 */
+	int insertWithGeom(FwDefenseZoneEntity fwDefenseZone);
+
+	/**
+	 * 修改(几何字段使用文本入库)
+	 *
+	 * @param fwDefenseZone
+	 * @return
+	 */
+	int updateWithGeomById(FwDefenseZoneEntity fwDefenseZone);
 
 	/**
 	 * 获取导出数据
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml
index 4efe501..f0fa9c9 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml
@@ -23,7 +23,23 @@
 
 
     <select id="selectFwDefenseZonePage" resultMap="fwDefenseZoneResultMap">
-        select * from ja_fw_defense_zone
+        select
+        id,
+        zone_name,
+        zone_area,
+        defense_scene_ids,
+        area_divide_ids,
+        device_ids,
+        concat(ST_AsText(geom), ' | ', ST_SRID(geom)) as geom,
+        area_code,
+        create_user,
+        create_dept,
+        create_time,
+        update_user,
+        update_time,
+        status,
+        is_deleted
+        from ja_fw_defense_zone
         <where>
             is_deleted = 0
             <if test="param2.id != null and param2.id != ''">
@@ -45,7 +61,15 @@
                 and device_ids = #{param2.deviceIds}
             </if>
             <if test="param2.geom != null and param2.geom != ''">
-                and geom = #{param2.geom}
+                and ST_Equals(
+                    geom,
+                    ST_SRID(
+                        ST_GeomFromText(
+                            trim(case when instr(#{param2.geom}, '|') &gt; 0 then substring_index(#{param2.geom}, '|', 1) else #{param2.geom} end)
+                        ),
+                        case when instr(#{param2.geom}, '|') &gt; 0 then cast(trim(substring_index(#{param2.geom}, '|', -1)) as unsigned) else 4326 end
+                    )
+                )
             </if>
             <if test="param2.areaCode != null and param2.areaCode != ''">
                 and area_code = #{param2.areaCode}
@@ -73,7 +97,97 @@
 
 
     <select id="exportFwDefenseZone" resultType="org.sxkj.fw.area.excel.FwDefenseZoneExcel">
-        SELECT * FROM ja_fw_defense_zone ${ew.customSqlSegment}
+        SELECT
+        id,
+        zone_name,
+        zone_area,
+        defense_scene_ids,
+        area_divide_ids,
+        device_ids,
+        concat(ST_AsText(geom), ' | ', ST_SRID(geom)) as geom,
+        area_code,
+        create_user,
+        create_dept,
+        create_time,
+        update_user,
+        update_time,
+        status,
+        is_deleted
+        FROM ja_fw_defense_zone ${ew.customSqlSegment}
     </select>
 
+    <insert id="insertWithGeom" parameterType="org.sxkj.fw.area.entity.FwDefenseZoneEntity" useGeneratedKeys="true" keyProperty="id">
+        insert into ja_fw_defense_zone (
+            id,
+            zone_name,
+            zone_area,
+            defense_scene_ids,
+            area_divide_ids,
+            device_ids,
+            geom,
+            area_code,
+            create_user,
+            create_dept,
+            create_time,
+            update_user,
+            update_time,
+            status,
+            is_deleted
+        ) values (
+            #{id},
+            #{zoneName},
+            #{zoneArea},
+            #{defenseSceneIds},
+            #{areaDivideIds},
+            #{deviceIds},
+            <choose>
+                <when test="geom != null and geom != ''">
+                    ST_SRID(
+                        ST_GeomFromText(
+                            trim(case when instr(#{geom}, '|') &gt; 0 then substring_index(#{geom}, '|', 1) else #{geom} end)
+                        ),
+                        case when instr(#{geom}, '|') &gt; 0 then cast(trim(substring_index(#{geom}, '|', -1)) as unsigned) else 4326 end
+                    )
+                </when>
+                <otherwise>null</otherwise>
+            </choose>,
+            #{areaCode},
+            #{createUser},
+            #{createDept},
+            #{createTime},
+            #{updateUser},
+            #{updateTime},
+            #{status},
+            #{isDeleted}
+        )
+    </insert>
+
+    <update id="updateWithGeomById" parameterType="org.sxkj.fw.area.entity.FwDefenseZoneEntity">
+        update ja_fw_defense_zone
+        <set>
+            <if test="zoneName != null">zone_name = #{zoneName},</if>
+            <if test="zoneArea != null">zone_area = #{zoneArea},</if>
+            <if test="defenseSceneIds != null">defense_scene_ids = #{defenseSceneIds},</if>
+            <if test="areaDivideIds != null">area_divide_ids = #{areaDivideIds},</if>
+            <if test="deviceIds != null">device_ids = #{deviceIds},</if>
+            <if test="geom != null and geom != ''">
+                geom = ST_SRID(
+                    ST_GeomFromText(
+                        trim(case when instr(#{geom}, '|') &gt; 0 then substring_index(#{geom}, '|', 1) else #{geom} end)
+                    ),
+                    case when instr(#{geom}, '|') &gt; 0 then cast(trim(substring_index(#{geom}, '|', -1)) as unsigned) else 4326 end
+                ),
+            </if>
+            <if test="areaCode != null">area_code = #{areaCode},</if>
+            <if test="createUser != null">create_user = #{createUser},</if>
+            <if test="createDept != null">create_dept = #{createDept},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateUser != null">update_user = #{updateUser},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="isDeleted != null">is_deleted = #{isDeleted},</if>
+        </set>
+        where id = #{id}
+    </update>
+
 </mapper>
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java
index b19f8de..4ca3a40 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java
@@ -41,6 +41,13 @@
 	 */
 	IPage<FwAreaDivideVO> selectFwAreaDividePage(IPage<FwAreaDivideVO> page, FwAreaDivideDTO fwAreaDivide);
 
+	/**
+	 * 详情
+	 *
+	 * @param id
+	 * @return
+	 */
+	FwAreaDivideVO selectFwAreaDivideDetail(Long id);
 
 	/**
 	 * 导出数据
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java
index 0980a92..abd25df 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java
@@ -17,6 +17,7 @@
 package org.sxkj.fw.area.service.impl;
 
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.sxkj.common.utils.HeaderUtils;
 import org.sxkj.fw.area.dto.FwAreaDivideDTO;
 import org.sxkj.fw.area.entity.FwAreaDivideEntity;
@@ -45,6 +46,10 @@
 		return page.setRecords(baseMapper.selectFwAreaDividePage(page, fwAreaDivide));
 	}
 
+	@Override
+	public FwAreaDivideVO selectFwAreaDivideDetail(Long id) {
+		return baseMapper.selectFwAreaDivideDetail(id);
+	}
 
 	@Override
 	public List<FwAreaDivideExcel> exportFwAreaDivide(Wrapper<FwAreaDivideEntity> queryWrapper) {
@@ -58,40 +63,59 @@
 	@Override
 	public boolean save(FwAreaDivideEntity fwAreaDivide) {
 		fillCreateFields(fwAreaDivide);
-		return super.save(fwAreaDivide);
+		return baseMapper.insertWithGeom(fwAreaDivide) > 0;
 	}
 
 	@Override
 	public boolean updateById(FwAreaDivideEntity fwAreaDivide) {
 		fillUpdateFields(fwAreaDivide);
-		return super.updateById(fwAreaDivide);
+		return baseMapper.updateWithGeomById(fwAreaDivide) > 0;
 	}
 
 	@Override
 	public boolean saveOrUpdate(FwAreaDivideEntity fwAreaDivide) {
 		if (fwAreaDivide.getId() == null) {
 			fillCreateFields(fwAreaDivide);
+			return baseMapper.insertWithGeom(fwAreaDivide) > 0;
 		} else {
 			fillUpdateFields(fwAreaDivide);
+			return baseMapper.updateWithGeomById(fwAreaDivide) > 0;
 		}
-		return super.saveOrUpdate(fwAreaDivide);
 	}
 
 	private void fillCreateFields(FwAreaDivideEntity fwAreaDivide) {
 		Long userId = AuthUtil.getUserId();
-		Long deptId = Long.valueOf(AuthUtil.getDeptId());
-		String areaCode = HeaderUtils.getAreaCode();
+		String deptIdStr = AuthUtil.getDeptId();
+		Long deptId = null;
+		if (StringUtil.isNotBlank(deptIdStr)) {
+			try {
+				deptId = Long.valueOf(deptIdStr);
+			} catch (NumberFormatException ignored) {
+				deptId = null;
+			}
+		}
+		String areaCode = fwAreaDivide.getAreaCode();
+		if (StringUtil.isBlank(areaCode)) {
+			areaCode = HeaderUtils.getAreaCode();
+		}
 		Date now = new Date();
 		fwAreaDivide.setCreateUser(userId);
 		fwAreaDivide.setUpdateUser(userId);
-		fwAreaDivide.setCreateDept(deptId);
-		fwAreaDivide.setAreaCode(areaCode);
+		if (deptId != null) {
+			fwAreaDivide.setCreateDept(deptId);
+		}
+		if (StringUtil.isNotBlank(areaCode)) {
+			fwAreaDivide.setAreaCode(areaCode);
+		}
 		fwAreaDivide.setCreateTime(now);
 		fwAreaDivide.setUpdateTime(now);
 	}
 
 	private void fillUpdateFields(FwAreaDivideEntity fwAreaDivide) {
-		fwAreaDivide.setUpdateUser(AuthUtil.getUserId());
+		Long userId = AuthUtil.getUserId();
+		if (userId != null) {
+			fwAreaDivide.setUpdateUser(userId);
+		}
 		fwAreaDivide.setUpdateTime(new Date());
 	}
 
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java
index 94f5f0d..d1ec445 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java
@@ -17,6 +17,7 @@
 package org.sxkj.fw.area.service.impl;
 
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.sxkj.common.utils.HeaderUtils;
 import org.sxkj.fw.area.entity.FwDefenseSceneEntity;
 import org.sxkj.fw.area.vo.FwDefenseSceneVO;
@@ -78,19 +79,37 @@
 
 	private void fillCreateFields(FwDefenseSceneEntity fwDefenseScene) {
 		Long userId = AuthUtil.getUserId();
-		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		String deptIdStr = AuthUtil.getDeptId();
+		Long deptId = null;
+		if (StringUtil.isNotBlank(deptIdStr)) {
+			try {
+				deptId = Long.valueOf(deptIdStr);
+			} catch (NumberFormatException ignored) {
+				deptId = null;
+			}
+		}
 		String areaCode = HeaderUtils.getAreaCode();
+		if (StringUtil.isBlank(areaCode)) {
+			areaCode = fwDefenseScene.getAreaCode();
+		}
 		Date now = new Date();
 		fwDefenseScene.setCreateUser(userId);
 		fwDefenseScene.setUpdateUser(userId);
-		fwDefenseScene.setCreateDept(deptId);
-		fwDefenseScene.setAreaCode(areaCode);
+		if (deptId != null) {
+			fwDefenseScene.setCreateDept(deptId);
+		}
+		if (StringUtil.isNotBlank(areaCode)) {
+			fwDefenseScene.setAreaCode(areaCode);
+		}
 		fwDefenseScene.setCreateTime(now);
 		fwDefenseScene.setUpdateTime(now);
 	}
 
 	private void fillUpdateFields(FwDefenseSceneEntity fwDefenseScene) {
-		fwDefenseScene.setUpdateUser(AuthUtil.getUserId());
+		Long userId = AuthUtil.getUserId();
+		if (userId != null) {
+			fwDefenseScene.setUpdateUser(userId);
+		}
 		fwDefenseScene.setUpdateTime(new Date());
 	}
 
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java
index c8c23f1..4d76b95 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java
@@ -17,6 +17,7 @@
 package org.sxkj.fw.area.service.impl;
 
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.sxkj.common.utils.HeaderUtils;
 import org.sxkj.fw.area.entity.FwDefenseZoneEntity;
 import org.sxkj.fw.area.vo.FwDefenseZoneVO;
@@ -57,40 +58,59 @@
 	@Override
 	public boolean save(FwDefenseZoneEntity fwDefenseZone) {
 		fillCreateFields(fwDefenseZone);
-		return super.save(fwDefenseZone);
+		return baseMapper.insertWithGeom(fwDefenseZone) > 0;
 	}
 
 	@Override
 	public boolean updateById(FwDefenseZoneEntity fwDefenseZone) {
 		fillUpdateFields(fwDefenseZone);
-		return super.updateById(fwDefenseZone);
+		return baseMapper.updateWithGeomById(fwDefenseZone) > 0;
 	}
 
 	@Override
 	public boolean saveOrUpdate(FwDefenseZoneEntity fwDefenseZone) {
 		if (fwDefenseZone.getId() == null) {
 			fillCreateFields(fwDefenseZone);
+			return baseMapper.insertWithGeom(fwDefenseZone) > 0;
 		} else {
 			fillUpdateFields(fwDefenseZone);
+			return baseMapper.updateWithGeomById(fwDefenseZone) > 0;
 		}
-		return super.saveOrUpdate(fwDefenseZone);
 	}
 
 	private void fillCreateFields(FwDefenseZoneEntity fwDefenseZone) {
 		Long userId = AuthUtil.getUserId();
-		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		String deptIdStr = AuthUtil.getDeptId();
+		Long deptId = null;
+		if (StringUtil.isNotBlank(deptIdStr)) {
+			try {
+				deptId = Long.valueOf(deptIdStr);
+			} catch (NumberFormatException ignored) {
+				deptId = null;
+			}
+		}
 		String areaCode = HeaderUtils.getAreaCode();
+		if (StringUtil.isBlank(areaCode)) {
+			areaCode = fwDefenseZone.getAreaCode();
+		}
 		Date now = new Date();
 		fwDefenseZone.setCreateUser(userId);
 		fwDefenseZone.setUpdateUser(userId);
-		fwDefenseZone.setCreateDept(deptId);
-		fwDefenseZone.setAreaCode(areaCode);
+		if (deptId != null) {
+			fwDefenseZone.setCreateDept(deptId);
+		}
+		if (StringUtil.isNotBlank(areaCode)) {
+			fwDefenseZone.setAreaCode(areaCode);
+		}
 		fwDefenseZone.setCreateTime(now);
 		fwDefenseZone.setUpdateTime(now);
 	}
 
 	private void fillUpdateFields(FwDefenseZoneEntity fwDefenseZone) {
-		fwDefenseZone.setUpdateUser(AuthUtil.getUserId());
+		Long userId = AuthUtil.getUserId();
+		if (userId != null) {
+			fwDefenseZone.setUpdateUser(userId);
+		}
 		fwDefenseZone.setUpdateTime(new Date());
 	}
 
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java
index 4ab5ffd..5e2f51a 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java
@@ -17,6 +17,7 @@
 package org.sxkj.fw.area.service.impl;
 
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.sxkj.common.utils.HeaderUtils;
 import org.sxkj.fw.area.entity.FwPoliceStationEntity;
 import org.sxkj.fw.area.vo.FwPoliceStationVO;
@@ -78,19 +79,37 @@
 
 	private void fillCreateFields(FwPoliceStationEntity fwPoliceStation) {
 		Long userId = AuthUtil.getUserId();
-		Long deptId = Long.valueOf(AuthUtil.getDeptId());
+		String deptIdStr = AuthUtil.getDeptId();
+		Long deptId = null;
+		if (StringUtil.isNotBlank(deptIdStr)) {
+			try {
+				deptId = Long.valueOf(deptIdStr);
+			} catch (NumberFormatException ignored) {
+				deptId = null;
+			}
+		}
 		String areaCode = HeaderUtils.getAreaCode();
+		if (StringUtil.isBlank(areaCode)) {
+			areaCode = fwPoliceStation.getAreaCode();
+		}
 		Date now = new Date();
 		fwPoliceStation.setCreateUser(userId);
 		fwPoliceStation.setUpdateUser(userId);
-		fwPoliceStation.setCreateDept(deptId);
-		fwPoliceStation.setAreaCode(areaCode);
+		if (deptId != null) {
+			fwPoliceStation.setCreateDept(deptId);
+		}
+		if (StringUtil.isNotBlank(areaCode)) {
+			fwPoliceStation.setAreaCode(areaCode);
+		}
 		fwPoliceStation.setCreateTime(now);
 		fwPoliceStation.setUpdateTime(now);
 	}
 
 	private void fillUpdateFields(FwPoliceStationEntity fwPoliceStation) {
-		fwPoliceStation.setUpdateUser(AuthUtil.getUserId());
+		Long userId = AuthUtil.getUserId();
+		if (userId != null) {
+			fwPoliceStation.setUpdateUser(userId);
+		}
 		fwPoliceStation.setUpdateTime(new Date());
 	}
 
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java
index 3c821d5..973739e 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java
@@ -18,6 +18,7 @@
 
 import org.sxkj.fw.area.entity.FwAreaDivideEntity;
 import org.springblade.core.tool.node.INode;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -32,4 +33,22 @@
 public class FwAreaDivideVO extends FwAreaDivideEntity {
 	private static final long serialVersionUID = 1L;
 
+	/**
+	 * 派出所名称
+	 */
+	@ApiModelProperty(value = "派出所名称")
+	private String policeStationName;
+
+	/**
+	 * 派出所联系人
+	 */
+	@ApiModelProperty(value = "派出所联系人")
+	private String policeStationContactPerson;
+
+	/**
+	 * 派出所联系电话
+	 */
+	@ApiModelProperty(value = "派出所联系电话")
+	private String policeStationContactPhone;
+
 }

--
Gitblit v1.9.3