From 8ccdc1da5a12248af84383b92c1bcd1ea921b71f Mon Sep 17 00:00:00 2001
From: zhaowenyu <35589726@qq.com>
Date: Sat, 06 Dec 2025 15:27:33 +0800
Subject: [PATCH] 2025-12-06 zwy 在机场设备详情页中,设置机场摄像头舱内、舱外,飞行器视频广角、变焦、红外时,将状态广播发送所有在线用户更改页面按钮选项;
---
ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceHmsServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 89 insertions(+), 21 deletions(-)
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceHmsServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceHmsServiceImpl.java
index 94adc90..e4ddeb3 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceHmsServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/DeviceHmsServiceImpl.java
@@ -109,7 +109,7 @@
if (unReadList.isEmpty()) {
return;
}
- RedisOpsUtils.listRPush(key, unReadList.stream().map(DeviceHmsDTO::getKey).toArray(String[]::new));
+ RedisOpsUtils.listRPush(key, (Object) unReadList.stream().map(DeviceHmsDTO::getKey).toArray(String[]::new));
// push to the web
// Collection<ConcurrentWebSocketSession> sessions = webSocketManageService.getValueWithWorkspaceAndUserType(
// device.getWorkspaceId(), UserTypeEnum.WEB.getVal());
@@ -122,29 +122,93 @@
@Override
public PaginationData<DeviceHmsDTO> getDeviceHmsByParam(DeviceHmsQueryParam param) {
- LambdaQueryWrapper<DeviceHmsEntity> queryWrapper = new LambdaQueryWrapper<DeviceHmsEntity>()
- .and(wrapper -> param.getDeviceSn().forEach(sn -> wrapper.eq(DeviceHmsEntity::getSn, sn).or()))
- .between(param.getBeginTime() != null && param.getEndTime() != null,
- DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime())
- .eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime())
- .eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel())
- .like(StringUtils.hasText(param.getMessage()) &&
- HmsEnum.MessageLanguage.ZH.getLanguage().equals(param.getLanguage()),
- DeviceHmsEntity::getMessageZh, param.getMessage())
- .like(StringUtils.hasText(param.getMessage()) &&
- HmsEnum.MessageLanguage.EN.getLanguage().equals(param.getLanguage()),
- DeviceHmsEntity::getMessageEn, param.getMessage())
- .orderByDesc(DeviceHmsEntity::getCreateTime);
- if (param.getPage() == null || param.getPageSize() == null) {
- param.setPage(1L);
- param.setPageSize(Long.valueOf(mapper.selectCount(queryWrapper)));
+// 1. 核心兜底:参数为null时初始化空对象(结合实体默认值,避免所有NPE)
+ if (param == null) {
+ param = new DeviceHmsQueryParam();
}
- Page<DeviceHmsEntity> pagination = mapper.selectPage(new Page<>(param.getPage(), param.getPageSize()), queryWrapper);
+ LambdaQueryWrapper<DeviceHmsEntity> queryWrapper = new LambdaQueryWrapper<DeviceHmsEntity>();
- List<DeviceHmsDTO> deviceHmsList = pagination.getRecords().stream().map(this::entity2Dto).collect(Collectors.toList());
+ // 2. 设备SN条件:仅当集合非空时添加IN条件(实体已兜底空集合,无需判null)
+ if (!param.getDeviceSn().isEmpty()) {
+ queryWrapper.in(DeviceHmsEntity::getSn, param.getDeviceSn());
+ }
+
+ // 3. 创建时间区间:① 两个时间都非null ② 开始时间≤结束时间(避免无效条件)
+ if (param.getBeginTime() != null && param.getEndTime() != null) {
+ //if (param.getBeginTime() <= param.getEndTime()) {
+ queryWrapper.between(DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime());
+// } else {
+// // 可选:抛异常/日志提醒/交换时间顺序
+// // log.warn("创建时间区间不合法:beginTime({}) > endTime({})", param.getBeginTime(), param.getEndTime());
+// }
+ }
+
+ // 4. 更新时间:参数非null时添加
+ queryWrapper.eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime());
+
+ // 5. 级别:参数非null时添加
+ queryWrapper.eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel());
+
+ // 6. 消息模糊查询:按语言匹配(语言为null/空时自动忽略)
+ String language = param.getLanguage();
+ String message = param.getMessage();
+ if (StringUtils.hasText(message)) {
+ if (HmsEnum.MessageLanguage.ZH.getLanguage().equals(language)) {
+ queryWrapper.like(DeviceHmsEntity::getMessageZh, message);
+ } else if (HmsEnum.MessageLanguage.EN.getLanguage().equals(language)) {
+ queryWrapper.like(DeviceHmsEntity::getMessageEn, message);
+ }
+ // 语言不匹配/为null时,不添加任何消息条件
+ }
+
+ // 7. 固定排序:创建时间降序
+ queryWrapper.orderByDesc(DeviceHmsEntity::getCreateTime);
+
+ // 8. 分页参数校验(避免非法值:page<1 / pageSize≤0)
+ Long page = param.getPage() == null ? 1L : Math.max(param.getPage(), 1L); // 页码最小为1
+ Long pageSize = param.getPage() == null ? 1L : param.getPageSize() <= 0 ? 10L : param.getPageSize(); // 页大小默认10
+
+ // 9. 「传空返回所有」的分页处理:pageSize为null/0时,查询全部数据
+ if (param.getPageSize() == null || param.getPageSize() <= 0) {
+ pageSize = (long) mapper.selectCount(queryWrapper); // 总条数作为页大小
+ }
+
+ // 10. 执行分页查询
+ Page<DeviceHmsEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), queryWrapper);
+
+ // 11. 实体转DTO
+ List<DeviceHmsDTO> deviceHmsList = pagination.getRecords().stream()
+ .map(this::entity2Dto)
+ .collect(Collectors.toList());
return new PaginationData<DeviceHmsDTO>(deviceHmsList, new Pagination(pagination));
+
+ // region 原代码注释备份一份
+// LambdaQueryWrapper<DeviceHmsEntity> queryWrapper = new LambdaQueryWrapper<DeviceHmsEntity>()
+// .and(wrapper -> param.getDeviceSn().forEach(sn -> wrapper.eq(DeviceHmsEntity::getSn, sn).or()))
+// .between(param.getBeginTime() != null && param.getEndTime() != null,
+// DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime())
+// .eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime())
+// .eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel())
+// .like(StringUtils.hasText(param.getMessage()) &&
+// HmsEnum.MessageLanguage.ZH.getLanguage().equals(param.getLanguage()),
+// DeviceHmsEntity::getMessageZh, param.getMessage())
+// .like(StringUtils.hasText(param.getMessage()) &&
+// HmsEnum.MessageLanguage.EN.getLanguage().equals(param.getLanguage()),
+// DeviceHmsEntity::getMessageEn, param.getMessage())
+// .orderByDesc(DeviceHmsEntity::getCreateTime);
+// if (param.getPage() == null || param.getPageSize() == null) {
+// param.setPage(1L);
+// param.setPageSize(Long.valueOf(mapper.selectCount(queryWrapper)));
+// }
+//
+// Page<DeviceHmsEntity> pagination = mapper.selectPage(new Page<>(param.getPage(), param.getPageSize()), queryWrapper);
+//
+// List<DeviceHmsDTO> deviceHmsList = pagination.getRecords().stream().map(this::entity2Dto).collect(Collectors.toList());
+//
+// return new PaginationData<DeviceHmsDTO>(deviceHmsList, new Pagination(pagination));
+ // endregion
}
@Override
@@ -153,7 +217,7 @@
new LambdaUpdateWrapper<DeviceHmsEntity>()
.eq(DeviceHmsEntity::getSn, deviceSn)
.eq(DeviceHmsEntity::getUpdateTime, 0L));
- // Delete unread messages cached in redis.
+ // 删除Redis中缓存的未读消息。
RedisOpsUtils.del(RedisConst.HMS_PREFIX + deviceSn);
}
@@ -174,11 +238,13 @@
.module(entity.getModule())
.messageEn(entity.getMessageEn())
.messageZh(entity.getMessageZh())
+ .in_the_sky(entity.getIn_the_sky())
+ .device_type(entity.getDevice_type())
.build();
}
/**
- * Populate the received data into the entity. Please refer to the documentation for splicing rules.
+ * 将收到的数据填充到实体中。请参阅文档中的拼接规则。
* @param dto
* @param receiver
*/
@@ -186,6 +252,8 @@
dto.setLevel(receiver.getLevel());
dto.setModule(receiver.getModule());
dto.setHmsId(UUID.randomUUID().toString());
+ dto.setIn_the_sky(receiver.getInTheSky());
+ dto.setDevice_type(receiver.getDeviceType());
if (HmsEnum.DomainType.DRONE_NEST.getDomain().equals(receiver.getDomainType())) {
dto.setHmsKey(HmsEnum.HmsFaqIdEnum.DOCK_TIP.getText() + receiver.getCode());
--
Gitblit v1.9.3