吉安感知网项目-后端
rain
2026-01-09 3ae46f2a59f9d4e751f78d8dc1a896ceba5ca495
区域管理模块
20 files modified
866 ■■■■ changed files
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwAreaDivideController.java 46 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseSceneController.java 30 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwDefenseZoneController.java 96 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/controller/FwPoliceStationController.java 68 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwAreaDivideDTO.java 2 ●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/dto/FwDefenseZoneDTO.java 48 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwAreaDivideEntity.java 2 ●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/entity/FwDefenseZoneEntity.java 2 ●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwAreaDivideExcel.java 7 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/excel/FwDefenseZoneExcel.java 2 ●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.java 23 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwAreaDivideMapper.xml 251 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.java 15 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/mapper/FwDefenseZoneMapper.xml 120 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/IFwAreaDivideService.java 7 ●●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwAreaDivideServiceImpl.java 40 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseSceneServiceImpl.java 27 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwDefenseZoneServiceImpl.java 34 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/service/impl/FwPoliceStationServiceImpl.java 27 ●●●● patch | view | raw | blame | history
drone-service/drone-fw/src/main/java/org/sxkj/fw/area/vo/FwAreaDivideVO.java 19 ●●●●● patch | view | raw | blame | history
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");
    }
}
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")
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");
    }
}
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")
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;
    /**
     * 区域类型:报警区/重点管制区
     */
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;
}
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;
    /**
     * 区域类型:报警区/重点管制区
     */
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;
    /**
     * 区域编码
     */
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;
    /**
     * 可飞行日期-开始
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;
    /**
     * 区域编码
     */
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);
    /**
     * 获取导出数据
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>
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);
    /**
     * 获取导出数据
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>
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);
    /**
     * 导出数据
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());
    }
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());
    }
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());
    }
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());
    }
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;
}