查询围栏进出记录列表

This commit is contained in:
2025-09-15 16:49:38 +08:00
parent b278a3087e
commit 07449e4a1e
8 changed files with 54 additions and 26 deletions

View File

@ -47,6 +47,7 @@ public class DeviceFenceAccessRecordController extends BaseController {
return deviceFenceAccessRecordService.queryPageList(bo, pageQuery); return deviceFenceAccessRecordService.queryPageList(bo, pageQuery);
} }
/** /**
* 导出围栏进出记录列表 * 导出围栏进出记录列表
*/ */

View File

@ -50,6 +50,7 @@ public class DeviceGeoFenceController extends BaseController {
return deviceGeoFenceService.queryPageList(bo, pageQuery); return deviceGeoFenceService.queryPageList(bo, pageQuery);
} }
/** /**
* 导出电子围栏列表 * 导出电子围栏列表
*/ */

View File

@ -301,7 +301,7 @@ file:
mqtt: mqtt:
username: admin username: admin
password: #YtvpSfCNG password: #YtvpSfCNG
url: tcp://47.120.79.150:2883 url: tcp://47.120.79.150:3883
subClientId: fys_subClient subClientId: fys_subClient
subTopic: worker/location/# subTopic: worker/location/#
pubTopic: B/# pubTopic: B/#

View File

@ -52,12 +52,12 @@ public class DeviceFenceAccessRecord extends BaseEntity {
/** /**
* 纬度 * 纬度
*/ */
private Long latitude; private Double latitude;
/** /**
* 经度 * 经度
*/ */
private Long longitude; private Double longitude;
/** /**
* 定位精度 * 定位精度

View File

@ -74,6 +74,16 @@ public class DeviceFenceAccessRecordBo extends BaseEntity {
@NotNull(message = "事件时间不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "事件时间不能为空", groups = { AddGroup.class, EditGroup.class })
private Date eventTime; private Date eventTime;
/**
* 开始时间
*/
private String beginTime;
/**
* 结束时间
*/
private String endTime;
/** /**
* 记录创建时间 * 记录创建时间
*/ */

View File

@ -58,6 +58,7 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
/** /**
* 查询符合条件的围栏进出记录列表 * 查询符合条件的围栏进出记录列表
* *
@ -70,6 +71,7 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec
return baseMapper.selectVoPageWithFenceAndDeviceName(lqw); return baseMapper.selectVoPageWithFenceAndDeviceName(lqw);
} }
private LambdaQueryWrapper<DeviceFenceAccessRecord> buildQueryWrapper(DeviceFenceAccessRecordBo bo) { private LambdaQueryWrapper<DeviceFenceAccessRecord> buildQueryWrapper(DeviceFenceAccessRecordBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<DeviceFenceAccessRecord> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<DeviceFenceAccessRecord> lqw = Wrappers.lambdaQuery();
@ -86,6 +88,7 @@ public class DeviceFenceAccessRecordServiceImpl implements IDeviceFenceAccessRec
return lqw; return lqw;
} }
/** /**
* 新增围栏进出记录 * 新增围栏进出记录
* *

View File

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fuyuanshen.equipment.domain.DeviceGeoFence; import com.fuyuanshen.equipment.domain.DeviceGeoFence;
import com.fuyuanshen.equipment.domain.bo.DeviceFenceAccessRecordBo;
import com.fuyuanshen.equipment.domain.bo.DeviceFenceStatusBo; import com.fuyuanshen.equipment.domain.bo.DeviceFenceStatusBo;
import com.fuyuanshen.equipment.domain.bo.DeviceGeoFenceBo; import com.fuyuanshen.equipment.domain.bo.DeviceGeoFenceBo;
import com.fuyuanshen.equipment.domain.dto.FenceCheckResponse; import com.fuyuanshen.equipment.domain.dto.FenceCheckResponse;
@ -16,6 +17,7 @@ import com.fuyuanshen.equipment.domain.query.FenceCheckRequest;
import com.fuyuanshen.equipment.domain.vo.DeviceFenceStatusVo; import com.fuyuanshen.equipment.domain.vo.DeviceFenceStatusVo;
import com.fuyuanshen.equipment.domain.vo.DeviceGeoFenceVo; import com.fuyuanshen.equipment.domain.vo.DeviceGeoFenceVo;
import com.fuyuanshen.equipment.mapper.DeviceGeoFenceMapper; import com.fuyuanshen.equipment.mapper.DeviceGeoFenceMapper;
import com.fuyuanshen.equipment.service.IDeviceFenceAccessRecordService;
import com.fuyuanshen.equipment.service.IDeviceFenceStatusService; import com.fuyuanshen.equipment.service.IDeviceFenceStatusService;
import com.fuyuanshen.equipment.service.IDeviceGeoFenceService; import com.fuyuanshen.equipment.service.IDeviceGeoFenceService;
import com.fuyuanshen.equipment.utils.map.GeoFenceChecker; import com.fuyuanshen.equipment.utils.map.GeoFenceChecker;
@ -41,6 +43,8 @@ public class DeviceGeoFenceServiceImpl implements IDeviceGeoFenceService {
private final IDeviceFenceStatusService fenceStatusService; // 添加此行 private final IDeviceFenceStatusService fenceStatusService; // 添加此行
private final IDeviceFenceAccessRecordService fenceAccessRecordService; // 添加此行
/** /**
@ -96,6 +100,7 @@ public class DeviceGeoFenceServiceImpl implements IDeviceGeoFenceService {
return lqw; return lqw;
} }
/** /**
* 新增电子围栏 * 新增电子围栏
* *
@ -213,9 +218,9 @@ public class DeviceGeoFenceServiceImpl implements IDeviceGeoFenceService {
DeviceFenceStatusVo latestStatus = fenceStatusService.getLatestStatusByDeviceAndFence( DeviceFenceStatusVo latestStatus = fenceStatusService.getLatestStatusByDeviceAndFence(
request.getDeviceId(), fence.getId()); request.getDeviceId(), fence.getId());
// 判断设备与围栏的关系变化 // 判断设备与围栏的关系变化 1=进入围栏,2=离开围栏
Long previousStatus = latestStatus != null ? latestStatus.getStatus() : 0L; // 默认在围栏外 Long previousStatus = latestStatus != null ? latestStatus.getStatus() : 2L; // 默认在围栏外
Long currentStatus = pointInFence ? 1L : 0L; // 当前状态1-在围栏内,0-在围栏外 Long currentStatus = pointInFence ? 1L : 2L; // 当前状态1-在围栏内,2-在围栏外
// 如果状态发生变化,则记录 // 如果状态发生变化,则记录
if (!previousStatus.equals(currentStatus)) { if (!previousStatus.equals(currentStatus)) {
@ -229,6 +234,17 @@ public class DeviceGeoFenceServiceImpl implements IDeviceGeoFenceService {
// 保存状态记录 // 保存状态记录
fenceStatusService.insertByBo(newStatus); fenceStatusService.insertByBo(newStatus);
// 添加围栏进出记录
DeviceFenceAccessRecordBo recordBo = new DeviceFenceAccessRecordBo();
recordBo.setDeviceId(request.getDeviceId());
recordBo.setFenceId(fence.getId());
recordBo.setLatitude(request.getLatitude());
recordBo.setLongitude(request.getLongitude());
recordBo.setEventTime(new Date());
// 1表示进入围栏2表示离开围栏
recordBo.setEventType(currentStatus);
fenceAccessRecordService.insertByBo(recordBo);
// 根据状态变化更新响应 // 根据状态变化更新响应
if (currentStatus == 1L) { if (currentStatus == 1L) {
// 设备进入围栏 // 设备进入围栏

View File

@ -4,11 +4,10 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuyuanshen.equipment.mapper.DeviceFenceAccessRecordMapper"> <mapper namespace="com.fuyuanshen.equipment.mapper.DeviceFenceAccessRecordMapper">
<!-- 分页查询围栏进出记录列表 --> <!-- 修改后的分页查询围栏进出记录列表 -->
<select id="selectVoPageWithFenceAndDeviceName" <select id="selectVoPageWithFenceAndDeviceName"
resultType="com.fuyuanshen.equipment.domain.vo.DeviceFenceAccessRecordVo"> resultType="com.fuyuanshen.equipment.domain.vo.DeviceFenceAccessRecordVo">
SELECT SELECT r.id,
r.id,
r.fence_id, r.fence_id,
f.name AS fence_name, f.name AS fence_name,
r.device_id, r.device_id,
@ -23,9 +22,7 @@
FROM device_fence_access_record r FROM device_fence_access_record r
LEFT JOIN device_geo_fence f ON r.fence_id = f.id LEFT JOIN device_geo_fence f ON r.fence_id = f.id
LEFT JOIN device d ON r.device_id = d.id LEFT JOIN device d ON r.device_id = d.id
<where>
${ew.customSqlSegment} ${ew.customSqlSegment}
</where>
ORDER BY r.id ASC ORDER BY r.id ASC
</select> </select>