吉安感知网项目-后端
linwei
2026-01-22 1510366fa12fafd5197ebcd8d7fbc45d2383218d
设备管理优化
17 files modified
3 files added
405 ■■■■ changed files
drone-ops/drone-resource/src/main/java/org/sxkj/resource/dto/AttachDto.java 22 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java 125 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/controller/GdApplicationInnovationController.java 30 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/mapper/GdDataObjectionMapper.xml 2 ●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/param/GdApplicationInnovationParam.java 14 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/vo/GdDataObjectionVO.java 3 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/utils/GeomUtils.java 86 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdManageDeviceController.java 32 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdManageDeviceEntity.java 11 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdPatrolTaskEntity.java 6 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdWorkOrderEntity.java 7 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdManageDeviceMapper.xml 22 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdWorkOrderMapper.xml 1 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/IGdManageDeviceService.java 7 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdManageDeviceServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java 1 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderServiceImpl.java 1 ●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdManageDeviceVO.java 5 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdPatrolTaskVO.java 7 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdWorkOrderVO.java 6 ●●●●● patch | view | raw | blame | history
drone-ops/drone-resource/src/main/java/org/sxkj/resource/dto/AttachDto.java
@@ -9,7 +9,6 @@
public class AttachDto {
    @ApiModelProperty(value = "附件id")
    @NotNull
    private Long id;
    /**
@@ -18,5 +17,26 @@
    @ApiModelProperty(value = "附件名称")
    private String nickName;
    /**
     * 附件地址
     */
    @ApiModelProperty(value = "附件地址")
    private String link;
    /**
     * 附件名称
     */
    @ApiModelProperty(value = "附件名称")
    private String name;
    /**
     * 附件原名
     */
    @ApiModelProperty(value = "附件原名")
    private String originalName;
    @ApiModelProperty(value = "附件类型: 1=巡查类文档,2=巡检类文档,3=安保类文档,4=文旅类文档,5=采集数据类文档")
    private Integer resultType;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/config/GeometryTypeHandler.java
New file
@@ -0,0 +1,125 @@
package org.sxkj.gd.config;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.PrecisionModel;
import org.locationtech.jts.io.*;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@MappedTypes({String.class})
@MappedJdbcTypes({JdbcType.OTHER})
public class GeometryTypeHandler extends BaseTypeHandler<String> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
        Geometry geo = null;
        try {
            // String转Geometry
            geo = new WKTReader(new GeometryFactory(new PrecisionModel())).read(s);
            // Geometry转WKB
            byte[] geometryBytes = new WKBWriter(2, ByteOrderValues.LITTLE_ENDIAN, false).write(geo);
            // 设置SRID为mysql默认的 0
            byte[] wkb = new byte[geometryBytes.length + 4];
            wkb[0] = wkb[1] = wkb[2] = wkb[3] = 0;
            System.arraycopy(geometryBytes, 0, wkb, 4, geometryBytes.length);
            preparedStatement.setBytes(i, wkb);
        } catch (ParseException e) {
        }
    }
    @Override
    public String getNullableResult(ResultSet resultSet, String s) {
        try (InputStream inputStream = resultSet.getBinaryStream(s)) {
            Geometry geo = getGeometryFromInputStream(inputStream);
            if (geo != null) {
                return geo.toString();
            }
        } catch (Exception e) {
        }
        return null;
    }
    @Override
    public String getNullableResult(ResultSet resultSet, int i) {
        try (InputStream inputStream = resultSet.getBinaryStream(i)) {
            Geometry geo = getGeometryFromInputStream(inputStream);
            if (geo != null) {
                return geo.toString();
            }
        } catch (Exception e) {
        }
        return null;
    }
    @Override
    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return "";
    }
    /**
     * 流 转 geometry
     */
    private Geometry getGeometryFromInputStream(InputStream inputStream) throws Exception {
        Geometry dbGeometry = null;
        if (inputStream != null) {
            // 二进制流转成字节数组
            byte[] buffer = new byte[255];
            int bytesRead = 0;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                baos.write(buffer, 0, bytesRead);
            }
            // 得到字节数组
            byte[] geometryAsBytes = baos.toByteArray();
            // 字节数组小于5 异常
            if (geometryAsBytes.length < 5) {
            }
            // 字节数组前4个字节表示srid 去掉
            byte[] sridBytes = new byte[4];
            System.arraycopy(geometryAsBytes, 0, sridBytes, 0, 4);
            boolean bigEndian = (geometryAsBytes[4] == 0x00);
            // 解析srid
            int srid = 0;
            if (bigEndian) {
                for (int i = 0; i < sridBytes.length; i++) {
                    srid = (srid << 8) + (sridBytes[i] & 0xff);
                }
            } else {
                for (int i = 0; i < sridBytes.length; i++) {
                    srid += (sridBytes[i] & 0xff) << (8 * i);
                }
            }
            WKBReader wkbReader = new WKBReader();
            // WKBReader 把字节数组转成geometry对象。
            byte[] wkb = new byte[geometryAsBytes.length - 4];
            System.arraycopy(geometryAsBytes, 4, wkb, 0, wkb.length);
            dbGeometry = wkbReader.read(wkb);
            dbGeometry.setSRID(srid);
        }
        return dbGeometry;
    }
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/controller/GdApplicationInnovationController.java
@@ -16,36 +16,28 @@
 */
package org.sxkj.gd.orderdata.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import javax.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.boot.ctrl.BladeController;
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.Func;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.sxkj.gd.common.GenericConverter;
import org.sxkj.gd.orderdata.dto.GdApplicationInnovationDTO;
import org.sxkj.gd.orderdata.entity.GdApplicationInnovationEntity;
import org.sxkj.gd.orderdata.param.GdApplicationInnovationPageParam;
import org.sxkj.gd.orderdata.vo.GdApplicationInnovationVO;
import org.sxkj.gd.orderdata.excel.GdApplicationInnovationExcel;
import org.sxkj.gd.orderdata.wrapper.GdApplicationInnovationWrapper;
import org.sxkj.gd.orderdata.param.GdApplicationInnovationParam;
import org.sxkj.gd.orderdata.service.IGdApplicationInnovationService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.sxkj.gd.orderdata.vo.GdApplicationInnovationVO;
import org.sxkj.gd.orderdata.wrapper.GdApplicationInnovationWrapper;
import javax.validation.Valid;
/**
 * 应用创新案例表 控制器
@@ -67,8 +59,8 @@
    @GetMapping("/detail")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "详情", notes = "传入gdApplicationInnovation")
    public R<GdApplicationInnovationVO> detail(GdApplicationInnovationEntity gdApplicationInnovation) {
        GdApplicationInnovationEntity detail = gdApplicationInnovationService.getOne(Condition.getQueryWrapper(gdApplicationInnovation));
    public R<GdApplicationInnovationVO> detail(GdApplicationInnovationParam gdApplicationInnovation) {
        GdApplicationInnovationEntity detail = gdApplicationInnovationService.getOne(Condition.getQueryWrapper(GenericConverter.convert(gdApplicationInnovation, GdApplicationInnovationEntity.class)));
        return R.data(GdApplicationInnovationWrapper.build().entityVO(detail));
    }
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/mapper/GdDataObjectionMapper.xml
@@ -49,7 +49,7 @@
    </select>
    <select id="getDetail" resultType="org.sxkj.gd.orderdata.vo.GdDataObjectionVO">
        select do.*, GROUP_CONCAT(da.attach_name SEPARATOR ',') as attach_names
        select do.*, GROUP_CONCAT(da.attach_name SEPARATOR ',') as attach_names ,GROUP_CONCAT(da.attach_id SEPARATOR ',') as attach_ids
        from ja_gd_data_objection do
        left join ja_gd_data_objection_attachment da on do.id = da.objection_id
        <where>
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/param/GdApplicationInnovationParam.java
New file
@@ -0,0 +1,14 @@
package org.sxkj.gd.orderdata.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class GdApplicationInnovationParam {
    @ApiModelProperty(value = "主键id")
    @NotNull
    private Long id;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/vo/GdDataObjectionVO.java
@@ -98,6 +98,9 @@
     */
    @ApiModelProperty(value = "附件名称列表(逗号分隔)")
    private String attachNames;
    @ApiModelProperty(value = "附件名称列表(逗号分隔)")
    private String attachIds;
    /**
     * 创建人
     */
drone-service/drone-gd/src/main/java/org/sxkj/gd/utils/GeomUtils.java
New file
@@ -0,0 +1,86 @@
package org.sxkj.gd.utils;
import org.geotools.geometry.DirectPosition2D;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.locationtech.jts.geom.*;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
/**
 * @Description TODO 航线拆分工具类
 * @Author AIX
 * @Date 2025/6/26 9:48
 * @Version 1.0
 */
public class GeomUtils {
    private static final GeometryFactory geometryFactory = new GeometryFactory();
    /**
     * 获取指定点周围指定距离(米)内的多边形区域
     *
     * @param lon      中心点经度
     * @param lat      中心点纬度
     * @param distance 距离(米)
     * @return 多边形几何对象
     */
    public static Geometry getAreaWithinDistance(double lon, double lat, double distance) throws Exception {
        // 创建投影CRS(使用UTM投影,适用于小范围距离计算)
        CoordinateReferenceSystem auto = CRS.decode("AUTO:42001," + lon + "," + lat);
        // 源CRS(WGS84)
        CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;
        // 转换到投影CRS
        MathTransform toTransform = CRS.findMathTransform(sourceCRS, auto);
        // 转换回WGS84
        MathTransform fromTransform = CRS.findMathTransform(auto, sourceCRS);
        // 转换中心点到投影坐标系
        DirectPosition2D src = new DirectPosition2D(sourceCRS, lon, lat);
        DirectPosition2D dest = new DirectPosition2D();
        toTransform.transform(src, dest);
        // 在投影坐标系中创建缓冲区(距离单位为米)
        Point projPoint = geometryFactory.createPoint(new Coordinate(dest.x, dest.y));
        Geometry buffer = projPoint.buffer(distance);
        // 转换回WGS84坐标系
        Geometry transformedBuffer = JTS.transform(buffer, fromTransform);
        return transformedBuffer;
    }
    /**
     * 获取某点周围指定距离(米)的缓冲区
     */
    public static Polygon getBufferAroundPoint(double lon, double lat, double distance) throws Exception {
        Geometry area = getAreaWithinDistance(lon, lat, distance);
        return (Polygon) area;
    }
    /**
     * 获取某点周围指定距离(米)的缓冲区,返回WKT字符串格式
     *
     * @param lon      中心点经度
     * @param lat      中心点纬度
     * @param distance 距离(米)
     * @return WKT格式的多边形字符串,格式:POLYGON((lon1 lat1, lon2 lat2, ...))
     */
    public static String getBufferAroundPointAsString(double lon, double lat, double distance) throws Exception {
        Polygon polygon = getBufferAroundPoint(lon, lat, distance);
        return polygon.toText();
    }
    /**
     * 将Polygon对象转换为WKT字符串格式
     *
     * @param polygon 多边形对象
     * @return WKT格式的多边形字符串,格式:POLYGON((lon1 lat1, lon2 lat2, ...))
     */
    public static String polygonToString(Polygon polygon) {
        return polygon.toText();
    }
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/controller/GdManageDeviceController.java
@@ -16,37 +16,37 @@
 */
package org.sxkj.gd.workorder.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import javax.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.sxkj.gd.common.GenericConverter;
import org.sxkj.gd.common.IdParam;
import org.sxkj.gd.workorder.dto.GdManageDeviceDTO;
import org.sxkj.gd.workorder.entity.GdManageDeviceEntity;
import org.sxkj.gd.workorder.vo.GdManageDeviceVO;
import org.sxkj.gd.workorder.excel.GdManageDeviceExcel;
import org.sxkj.gd.workorder.wrapper.GdManageDeviceWrapper;
import org.sxkj.gd.workorder.service.IGdManageDeviceService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.constant.BladeConstant;
import org.sxkj.gd.workorder.vo.GdManageDeviceVO;
import org.sxkj.gd.workorder.wrapper.GdManageDeviceWrapper;
import springfox.documentation.annotations.ApiIgnore;
import java.util.Map;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/**
 * 设备信息 控制器
@@ -104,8 +104,8 @@
    @PostMapping("/submit")
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改", notes = "传入gdManageDevice")
    public R submit(@Valid @RequestBody GdManageDeviceDTO gdManageDevice) {
        return R.status(gdManageDeviceService.saveOrUpdate(GdManageDeviceWrapper.build().entityDTO(gdManageDevice)));
    public R submit(@Valid @RequestBody GdManageDeviceDTO gdManageDevice) throws Exception {
        return R.status(gdManageDeviceService.saveOrUpdateDevice(GdManageDeviceWrapper.build().entityDTO(gdManageDevice)));
    }
    /**
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdManageDeviceEntity.java
@@ -16,12 +16,14 @@
 */
package org.sxkj.gd.workorder.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.sxkj.gd.config.GeometryTypeHandler;
import java.math.BigDecimal;
import java.util.Date;
@@ -33,7 +35,8 @@
 * @since 2026-01-14
 */
@Data
@TableName("ja_gd_manage_device")
// @TableName("ja_gd_manage_device")
@TableName(value = "ja_gd_manage_device",autoResultMap = true)
@ApiModel(value = "设备信息表", description = "设备信息")
@EqualsAndHashCode(callSuper = true)
public class GdManageDeviceEntity extends BaseEntity {
@@ -104,5 +107,11 @@
    @ApiModelProperty(value = "流量到期时间")
    private Date trafficExpireTime;
    /**
     * 5公里范围面数据
     */
    @ApiModelProperty(value = "5公里范围面数据")
     @TableField(typeHandler = GeometryTypeHandler.class)
    private String geom;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdPatrolTaskEntity.java
@@ -94,4 +94,10 @@
    @ApiModelProperty(value = "区域编码")
    private String areaCode;
    /**
     * 拒绝原因(审核拒绝时必填)
     */
    @ApiModelProperty(value = "拒绝原因(审核拒绝时必填)")
    private String rejectReason;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/entity/GdWorkOrderEntity.java
@@ -114,4 +114,11 @@
    @TableField("area_code")
    private String areaCode;
    /**
     * 拒绝原因(审核拒绝时必填)
     */
    @ApiModelProperty(value = "拒绝原因(审核拒绝时必填)")
    @TableField("reject_reason")
    private String rejectReason;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdManageDeviceMapper.xml
@@ -65,15 +65,31 @@
    </select>
    <select id="selectGdManageDevice" resultType="org.sxkj.gd.workorder.vo.GdManageDeviceVO">
        select id, device_sn, device_name, nickname, device_payload,longitude,latitude
        from ja_gd_manage_device
        where is_deleted = 0
        select
        id,
        device_sn,
        device_name,
        nickname,
        device_payload,
        longitude,
        latitude,
        geom
        from
        ja_gd_manage_device
        where
        is_deleted = 0
        <if test="deviceIds != null and deviceIds.size() > 0">
            and id in
            <foreach item="item" collection="deviceIds" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        <if test="devicePayload != null and devicePayload != ''">
            and device_payload like concat('%',#{devicePayload},'%')
        </if>
        <if test="geom != null and geom != ''">
            and ST_Intersects(geom, ST_GeomFromText(#{geom}))
        </if>
    </select>
</mapper>
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/mapper/GdWorkOrderMapper.xml
@@ -39,6 +39,7 @@
               service_party,
               ST_AsText(geom) geom,
               remark,
               reject_reason,
               area_code,
               create_user,
               create_dept,
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/IGdManageDeviceService.java
@@ -55,4 +55,11 @@
     * @return
     */
    List<GdManageDeviceVO> selectGdManageDevice(GdManageDeviceVO gdManageDevice);
    /**
     * 新增或修改
     * @param gdManageDeviceEntity
     * @return
     */
    boolean saveOrUpdateDevice(GdManageDeviceEntity gdManageDeviceEntity) throws Exception;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdManageDeviceServiceImpl.java
@@ -16,6 +16,7 @@
 */
package org.sxkj.gd.workorder.service.impl;
import org.sxkj.gd.utils.GeomUtils;
import org.sxkj.gd.workorder.entity.GdManageDeviceEntity;
import org.sxkj.gd.workorder.vo.GdManageDeviceVO;
import org.sxkj.gd.workorder.excel.GdManageDeviceExcel;
@@ -56,4 +57,20 @@
        return gdManageDeviceList;
    }
    /**
     * 保存或更新设备信息
     *
     * @param gdManageDeviceEntity
     * @return
     * @throws Exception
     */
    @Override
    public boolean saveOrUpdateDevice(GdManageDeviceEntity gdManageDeviceEntity) throws Exception {
        // 获取设备位置 生成缓冲区
        if (gdManageDeviceEntity.getLongitude() != null && gdManageDeviceEntity.getLatitude() != null) {
            String bufferAroundPointAsString = GeomUtils.getBufferAroundPointAsString(gdManageDeviceEntity.getLongitude(), gdManageDeviceEntity.getLatitude(), 5 * 1000);
            gdManageDeviceEntity.setGeom(bufferAroundPointAsString);
        }
        return saveOrUpdate(gdManageDeviceEntity);
    }
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdPatrolTaskServiceImpl.java
@@ -174,6 +174,7 @@
        task.setTaskStatus(newStatusEnum.getValue());
        task.setUpdateUser(AuthUtil.getUserId());
        task.setUpdateTime(now);
        task.setRejectReason(auditParam.getRejectReason());
        boolean updateResult = updateById(task);
        if (!updateResult) {
            throw new RuntimeException("更新任务状态失败");
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/service/impl/GdWorkOrderServiceImpl.java
@@ -211,6 +211,7 @@
        workOrder.setUpdateUser(AuthUtil.getUserId());
        workOrder.setGeom(null);
        workOrder.setUpdateTime(now);
        workOrder.setRejectReason(statusParam.getRejectReason());
        boolean updateResult = updateById(workOrder);
        // 5. 保存流转记录
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdManageDeviceVO.java
@@ -63,5 +63,10 @@
    @ApiModelProperty(value = "设备ids")
    private List<Integer> deviceIds;
    @ApiModelProperty(value = "设备位置")
    private String geom;
    @ApiModelProperty(value = "5公里范围面数据")
    private String fiveKmArea;
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdPatrolTaskVO.java
@@ -90,6 +90,13 @@
     */
    @ApiModelProperty(value = "状态:0待签收、1拒绝签收、2已撤回、3待审核、4审核驳回、5审核通过、6待验收、7拒绝验收、8验收通过")
    private String taskStatus;
    /**
     * 拒绝原因(审核拒绝时必填)
     */
    @ApiModelProperty(value = "拒绝原因(审核拒绝时必填)")
    private String rejectReason;
    /**
     * 区域编码
     */
drone-service/drone-gd/src/main/java/org/sxkj/gd/workorder/vo/GdWorkOrderVO.java
@@ -88,6 +88,12 @@
     */
    @ApiModelProperty(value = "备注")
    private String remark;
    /**
     * 拒绝原因(审核拒绝时必填)
     */
    @ApiModelProperty(value = "拒绝原因(审核拒绝时必填)")
    private String rejectReason;
    /**
     * 区域编码
     */