feat(equipment): 新增高德轨迹服务相关功能与设备终端管理

- 新增 AmapTrackUtil 工具类,封装高德猎鹰轨迹服务 API 调用
- 在 Device 实体中增加高德服务、终端、轨迹 ID 字段(sid, tid, trid)
- 新增设备终端分页查询接口 /pageTerminal 及对应实现
- 新增围栏与设备关联实体 DeviceFenceTerminal 及 Mapper
- 扩展 DeviceGeoFence 相关注入高德服务及围栏 ID 字段
- 新增添加/删除围栏终端绑定接口及业务逻辑
- 新增轨迹服务模块(TrackService)包括 Controller、Service、BO、DTO 等完整结构
- 在 DeviceMapper.xml 中补充终端相关字段查询及筛选条件
- 新增 TerminalDeviceBo、TerminalDelBo、TerminalQueryBo 等数据传输对象
- 补充设备查询条件支持高德终端状态及服务 ID 过滤
- 新增围栏终端关联表 device_fence_terminal 并注册至菜单配置
- 完善设备分配逻辑以兼容角色权限判断及终端信息展示
This commit is contained in:
2025-12-03 11:39:18 +08:00
parent b33ee00dbd
commit e920cfb860
34 changed files with 1772 additions and 60 deletions

View File

@ -167,4 +167,20 @@ public class Device extends TenantEntity {
*/
private Integer onlineStatus;
/**
* 高德服务ID
*/
@Schema(title = "服务ID高德")
private Long sid;
/**
* 高德终端ID
*/
@Schema(title = "终端ID高德")
private Long tid;
/**
* 高德轨迹ID
*/
@Schema(title = "轨迹ID高德")
private Long trid;
}

View File

@ -2,6 +2,7 @@ package com.fuyuanshen.equipment.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fuyuanshen.common.mybatis.core.domain.BaseEntity;
import com.fuyuanshen.common.tenant.core.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@ -18,7 +19,7 @@ import java.io.Serial;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("device_fence_access_record")
public class DeviceFenceAccessRecord extends BaseEntity {
public class DeviceFenceAccessRecord extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,26 @@
package com.fuyuanshen.equipment.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 围栏终端关联
*
* @author Lion Li
*/
@Data
@TableName("device_fence_terminal")
public class DeviceFenceTerminal {
/**
* 围栏ID
*/
@TableId(type = IdType.INPUT)
private Long fenceId;
/**
* 设备ID
*/
private Long deviceId;
}

View File

@ -58,6 +58,14 @@ public class DeviceGeoFence extends BaseEntity {
* 是否激活
*/
private Long isActive;
/**
* 高德服务ID
*/
private Long sid;
/**
* 高德围栏ID
*/
private Long gfid;
}

View File

@ -0,0 +1,41 @@
package com.fuyuanshen.equipment.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fuyuanshen.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 轨迹服务对象 track_service
*
* @author Lion Li
* @date 2025-11-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("track_service")
public class TrackService extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 猎鹰服务ID
*/
private Long sid;
/**
* 服务名称
*/
private String sname;
}

View File

@ -70,6 +70,14 @@ public class DeviceGeoFenceBo extends BaseEntity {
* 更新时间
*/
private Date updateTime;
/**
* 高德服务ID
*/
private Long sid;
/**
* 高德围栏ID
*/
private Long gfid;
}

View File

@ -0,0 +1,17 @@
package com.fuyuanshen.equipment.domain.bo;
import lombok.Data;
import java.util.List;
@Data
public class FenceTerminalBo {
/**
* 围栏ID
*/
private Long fenceId;
/**
* 设备IDs
*/
private List<Long> deviceIds;
}

View File

@ -0,0 +1,19 @@
package com.fuyuanshen.equipment.domain.bo;
import lombok.Data;
@Data
public class TerminalDelBo {
/**
* 猎鹰服务ID
*/
private Long sid;
/**
* 轨迹ID
*/
private Long trid;
/**
* 终端ID
*/
private Long tid;
}

View File

@ -0,0 +1,18 @@
package com.fuyuanshen.equipment.domain.bo;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import lombok.Data;
import java.util.List;
@Data
public class TerminalDeviceBo {
/**
* 猎鹰服务ID
*/
private Long sid;
/**
* 设备列表
*/
List<DeviceForm> deviceList;
}

View File

@ -0,0 +1,32 @@
package com.fuyuanshen.equipment.domain.bo;
import lombok.Data;
import lombok.Value;
@Data
public class TerminalQueryBo {
/**
* 猎鹰服务ID
*/
private Long sid;
/**
* 名称查询
*/
private String name;
/**
* 终端ID
*/
private Long tid;
/**
* 关键字搜索
*/
private String keywords;
/**
* 分页
*/
private int page = 1;
/**
* 每页数量
*/
private int pagesize = 10;
}

View File

@ -0,0 +1,36 @@
package com.fuyuanshen.equipment.domain.bo;
import com.fuyuanshen.common.mybatis.core.domain.BaseEntity;
import com.fuyuanshen.equipment.domain.TrackService;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 轨迹服务业务对象 track_service
*
* @author Lion Li
* @date 2025-11-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = TrackService.class, reverseConvertGenerate = false)
public class TrackServiceBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* 猎鹰服务ID
*/
private Long sid;
/**
* 服务名称
*/
private String sname;
}

View File

@ -0,0 +1,29 @@
package com.fuyuanshen.equipment.domain.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor // 必须
public class TerminalDeviceDto {
/**
* 终端设备名称
*/
private String name;
/**
* 终端设备ID
*/
private Long tid;
/**
* 终端设备描述
*/
private String desc;
/**
* 终端设备创建时间
*/
private String createtime;
/**
* 终端设备最后定位时间
*/
private String locatetime;
}

View File

@ -122,6 +122,18 @@ public class DeviceQueryCriteria extends BaseEntity {
* online_status
*/
private Integer onlineStatus;
/**
* 高德终端ID是否存在
*/
private Boolean isTid;
/**
* 高德服务ID
*/
private String sid;
/**
* 围栏ID
*/
private Long fenceId;
/**
* 绑定状态

View File

@ -101,6 +101,14 @@ public class DeviceGeoFenceVo implements Serializable {
*/
// @ExcelProperty(value = "更新时间")
private Date updateTime;
/**
* 高德服务ID
*/
private Long sid;
/**
* 高德围栏ID
*/
private Long gfid;
public void setAreaTypeNameByAreaType() {

View File

@ -0,0 +1,50 @@
package com.fuyuanshen.equipment.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.fuyuanshen.common.excel.annotation.ExcelDictFormat;
import com.fuyuanshen.common.excel.convert.ExcelDictConvert;
import com.fuyuanshen.equipment.domain.TrackService;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 轨迹服务视图对象 track_service
*
* @author Lion Li
* @date 2025-11-24
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = TrackService.class)
public class TrackServiceVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 猎鹰服务ID
*/
@ExcelProperty(value = "猎鹰服务ID")
private Long sid;
/**
* 服务名称
*/
@ExcelProperty(value = "服务名称")
private String sname;
}

View File

@ -1,6 +1,7 @@
package com.fuyuanshen.equipment.domain.vo;
import cn.idev.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@ -103,5 +104,20 @@ public class WebDeviceVo implements Serializable {
* 分享用户数量
*/
private Integer shareUsersNumber;
/**
* 高德服务ID
*/
@Schema(title = "服务ID高德")
private Long sid;
/**
* 高德终端ID
*/
@Schema(title = "终端ID高德")
private Long tid;
/**
* 高德轨迹ID
*/
@Schema(title = "轨迹ID高德")
private Long trid;
}