From bccf992848095949df3fabbfcc3b0a36a6eb4d4c Mon Sep 17 00:00:00 2001 From: lzh Date: Mon, 2 Feb 2026 22:30:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(ops):=20=E5=B7=A5=E7=89=8C=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=8A=B6=E6=80=81=E6=9C=8D=E5=8A=A1=E6=94=AF=E6=8C=81?= =?UTF-8?q?=20nickname=20=E9=80=8F=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在工牌设备状态管理链路中全面支持 nickname 字段透传,从 IoT 事件接收到派单策略推荐均使用用户可读的昵称。 变更范围: - IotDeviceStatusChangedEventDTO: 新增 nickname 字段 - BadgeDeviceStatusEventHandler: 接收并透传 nickname - BadgeDeviceStatusService/Impl: updateBadgeOnlineStatus 增加 nickname 参数 - BadgeDeviceStatusSyncJob: 对账场景保留 Redis 已有 nickname - BadgeDeviceAreaAssignStrategy: 推荐执行人时优先使用 nickname - BadgeDeviceDispatchTest: 测试适配 nickname 参数 影响模块:Ops Environment Biz Co-Authored-By: Claude Sonnet 4.5 --- .../consumer/BadgeDeviceStatusEventHandler.java | 7 +++++-- .../integration/dto/IotDeviceStatusChangedEventDTO.java | 5 +++++ .../ops/environment/job/BadgeDeviceStatusSyncJob.java | 2 ++ .../service/badge/BadgeDeviceStatusService.java | 3 ++- .../service/badge/BadgeDeviceStatusServiceImpl.java | 4 +++- .../service/dispatch/BadgeDeviceAreaAssignStrategy.java | 8 ++++++-- .../service/dispatch/BadgeDeviceDispatchTest.java | 2 ++ 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/BadgeDeviceStatusEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/BadgeDeviceStatusEventHandler.java index 26a4492..2dd72e0 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/BadgeDeviceStatusEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/BadgeDeviceStatusEventHandler.java @@ -111,18 +111,20 @@ public class BadgeDeviceStatusEventHandler implements RocketMQListener { private void handleDeviceStatusChange(IotDeviceStatusChangedEventDTO event) { Long deviceId = event.getDeviceId(); String deviceCode = event.getDeviceName(); + String nickname = event.getNickname(); // 获取设备所属区域 Long areaId = getAreaIdByDeviceId(deviceId); if (event.isOnline()) { // 设备上线 - log.info("[BadgeDeviceStatusEventHandler] 工牌设备上线: deviceId={}, deviceCode={}, areaId={}", - deviceId, deviceCode, areaId); + log.info("[BadgeDeviceStatusEventHandler] 工牌设备上线: deviceId={}, deviceCode={}, nickname={}, areaId={}", + deviceId, deviceCode, nickname, areaId); badgeDeviceStatusService.updateBadgeOnlineStatus( deviceId, deviceCode, + nickname, areaId, BadgeDeviceStatusEnum.IDLE, "设备上线"); @@ -135,6 +137,7 @@ public class BadgeDeviceStatusEventHandler implements RocketMQListener { badgeDeviceStatusService.updateBadgeOnlineStatus( deviceId, deviceCode, + nickname, null, BadgeDeviceStatusEnum.OFFLINE, "设备离线"); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/dto/IotDeviceStatusChangedEventDTO.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/dto/IotDeviceStatusChangedEventDTO.java index f049df0..64c4fdc 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/dto/IotDeviceStatusChangedEventDTO.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/dto/IotDeviceStatusChangedEventDTO.java @@ -36,6 +36,11 @@ public class IotDeviceStatusChangedEventDTO { */ private String deviceName; + /** + * 设备昵称(nickname,用户可读的显示名称) + */ + private String nickname; + /** * 产品ID */ diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/job/BadgeDeviceStatusSyncJob.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/job/BadgeDeviceStatusSyncJob.java index c3eaf35..a803910 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/job/BadgeDeviceStatusSyncJob.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/job/BadgeDeviceStatusSyncJob.java @@ -160,6 +160,7 @@ public class BadgeDeviceStatusSyncJob { badgeDeviceStatusService.updateBadgeOnlineStatus( deviceId, iotStatus.getDeviceCode(), + null, // nickname: 对账场景不更新昵称,保留Redis中已有值 areaId, BadgeDeviceStatusEnum.IDLE, "定时对账修正-上线"); @@ -169,6 +170,7 @@ public class BadgeDeviceStatusSyncJob { badgeDeviceStatusService.updateBadgeOnlineStatus( deviceId, iotStatus.getDeviceCode(), + null, // nickname: 对账场景不更新昵称,保留Redis中已有值 null, BadgeDeviceStatusEnum.OFFLINE, "定时对账修正-离线"); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusService.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusService.java index 62c8544..579a6d7 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusService.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusService.java @@ -104,11 +104,12 @@ public interface BadgeDeviceStatusService { * * @param deviceId 设备ID * @param deviceCode 设备编码 + * @param nickname 设备昵称(用户可读的显示名称) * @param areaId 区域ID(可为null) * @param status 目标状态(IDLE 或 OFFLINE) * @param reason 状态变更原因 */ - void updateBadgeOnlineStatus(Long deviceId, String deviceCode, Long areaId, + void updateBadgeOnlineStatus(Long deviceId, String deviceCode, String nickname, Long areaId, BadgeDeviceStatusEnum status, String reason); // ==================== 在线状态检查 ==================== diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusServiceImpl.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusServiceImpl.java index 73e736b..1ca4809 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusServiceImpl.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/badge/BadgeDeviceStatusServiceImpl.java @@ -235,7 +235,7 @@ public class BadgeDeviceStatusServiceImpl implements BadgeDeviceStatusService, I // ==================== 状态更新 (IoT 事件驱动) ==================== @Override - public void updateBadgeOnlineStatus(Long deviceId, String deviceCode, Long areaId, + public void updateBadgeOnlineStatus(Long deviceId, String deviceCode, String nickname, Long areaId, BadgeDeviceStatusEnum status, String reason) { if (deviceId == null || status == null) { return; @@ -271,6 +271,7 @@ public class BadgeDeviceStatusServiceImpl implements BadgeDeviceStatusService, I Map statusMap = new HashMap<>(); statusMap.put("deviceId", deviceId); statusMap.put("deviceCode", deviceCode != null ? deviceCode : currentMap.get("deviceCode")); + statusMap.put("nickname", nickname != null ? nickname : currentMap.get("nickname")); statusMap.put("status", status.getCode()); statusMap.put("statusChangeTime", LocalDateTime.now().toString()); statusMap.put("statusChangeReason", reason); @@ -529,6 +530,7 @@ public class BadgeDeviceStatusServiceImpl implements BadgeDeviceStatusService, I dto.setDeviceId(getLong(map.get("deviceId"))); dto.setDeviceCode((String) map.get("deviceCode")); + dto.setNickname((String) map.get("nickname")); String statusStr = (String) map.get("status"); dto.setStatus(BadgeDeviceStatusEnum.fromCode(statusStr)); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceAreaAssignStrategy.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceAreaAssignStrategy.java index c930ca8..b192373 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceAreaAssignStrategy.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceAreaAssignStrategy.java @@ -89,9 +89,11 @@ public class BadgeDeviceAreaAssignStrategy implements AssignStrategy { if (selectedDevice != null) { String reason = buildRecommendationReason(selectedDevice, context); + String assigneeName = selectedDevice.getNickname() != null + ? selectedDevice.getNickname() : selectedDevice.getDeviceCode(); return AssigneeRecommendation.of( selectedDevice.getDeviceId(), - selectedDevice.getDeviceCode(), + assigneeName, calculateScore(selectedDevice), reason ); @@ -116,9 +118,11 @@ public class BadgeDeviceAreaAssignStrategy implements AssignStrategy { .map(device -> { int score = calculateScore(device); String reason = buildRecommendationReason(device, context); + String assigneeName = device.getNickname() != null + ? device.getNickname() : device.getDeviceCode(); return AssigneeRecommendation.of( device.getDeviceId(), - device.getDeviceCode(), + assigneeName, score, reason ); diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceDispatchTest.java b/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceDispatchTest.java index 07db3ec..7768c8e 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceDispatchTest.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/dispatch/BadgeDeviceDispatchTest.java @@ -118,6 +118,7 @@ public class BadgeDeviceDispatchTest { badgeDeviceStatusService.updateBadgeOnlineStatus( TEST_DEVICE_ID, TEST_DEVICE_CODE, + null, TEST_AREA_ID, BadgeDeviceStatusEnum.IDLE, "测试心跳"); @@ -126,6 +127,7 @@ public class BadgeDeviceDispatchTest { verify(badgeDeviceStatusService).updateBadgeOnlineStatus( eq(TEST_DEVICE_ID), eq(TEST_DEVICE_CODE), + isNull(), eq(TEST_AREA_ID), eq(BadgeDeviceStatusEnum.IDLE), eq("测试心跳"));