Commit Graph

338 Commits

Author SHA1 Message Date
lzh
4cd520ab78 fix(iot-gateway): 兼容设备端消息体长度计算不准确的问题
修改 JT808 解码器,采用更宽松的消息体长度处理策略:
- 使用实际可用的长度(expected 与 actual 取最小值)
- 将长度差异日志降为 DEBUG 级别
- 继续解析消息而不是直接丢弃

原因:部分设备端计算消息体长度时存在偏差,导致位置上报等消息被跳过。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 10:10:09 +08:00
lzh
177350830a refactor(ops): 优化语音播报服务封装
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
1. VoiceBroadcastService 重构
   - 移除未使用的 volume 参数(JT808 协议不支持)
   - 添加 TTS 播报标志常量定义
   - 新增 broadcastNormal() 和 broadcastUrgent() 方法
   - 支持自定义播报标志

2. 更新调用方
   - CleanOrderConfirmEventHandler: 使用简化 API
   - CleanOrderAuditEventHandler: 使用简化 API

TTS 参数标准:
- identifier: "tts"
- tts_text: 播报文本内容
- tts_flag: 0x01=静默, 0x08=普通, 0x09=紧急

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 09:58:19 +08:00
lzh
b1ecc7786b feat(iot-gateway): JT808 新增 instruction_config 服务并修正 TTS 标志
1. 新增 instruction_config 服务
   - 用于下发服务指令配置(如 #2014*SET*TTS0:...#)
   - 使用 0x01 标志位(静默执行),设备解析后不发声
   - 通过文本信息下发 (0x8300) 发送

2. 修正 TTS 服务默认标志
   - 默认 tts_flag 从 4 改为 0x08(普通通知)
   - 日志输出改为十六进制格式 (0x08, 0x09)

JT808 播报标志规范:
- 0x01: 静默执行(配置指令)
- 0x08: TTS 普通通知
- 0x09: TTS 紧急通知

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 09:58:01 +08:00
lzh
a4cfbbcba1 fix(iot-gateway): 降级扩展字段长度越界日志级别
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
将 JT808 解码器中扩展字段长度越界的日志级别从 WARN 降为 DEBUG。
这是设备端数据格式问题,不影响正常消息解析,跳过该扩展字段即可。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:30:48 +08:00
lzh
fa619710ef refactor(iot): 优化事件发布机制并修复状态值解析
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
1. IntegrationEventPublisher 只保留设备状态变更事件发布
   - 注释掉 publishPropertyChanged 和 publishEventOccurred 接口
   - RocketMQIntegrationEventPublisher 对应实现改为注释

2. IotDevicePropertyServiceImpl 属性消息发布暂停
   - 注释掉 saveDeviceProperty 中的 publishPropertyMessage 调用
   - 注释掉 publishToIntegrationEventBus 中的实际发布逻辑

3. IotDeviceMessageServiceImpl 新增状态值解析兼容
   - 新增 parseStateValue 方法支持整数和字符串格式状态值
   - 支持 "online"/"offline" 字符串解析

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:56:13 +08:00
lzh
842b40596d fix: 修复RocketMQ topic名称非法字符问题
RocketMQ topic 只允许 ^[%|a-zA-Z0-9_-]+$ 字符,不支持 `.`

IoT 模块 Topic 变更:
- integration.device.status → integration-device-status
- integration.device.property → integration-device-property
- integration.device.event → integration-device-event

Ops 模块 Topic 变更:
- ops.order.create → ops-order-create
- ops.order.arrive → ops-order-arrive
- ops.order.complete → ops-order-complete
- ops.order.audit → ops-order-audit
- ops.order.confirm → ops-order-confirm

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:35:22 +08:00
lzh
4e387e410c refactor(iot-gateway): JT808编解码器代码重构
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
- 提取 enrichParamsWithMetadata 方法统一处理元数据
- 提取 extractPhoneFromMap 和 extractFlowIdFromMap 方法
- 优化 getParamsAsMap 方法,同时支持 params 和 data 字段
- 优化代码注释格式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:15:12 +08:00
lzh
110cfc8cf8 fix(iot-server): 消费者优先判断skipReply字段
- handleUpstreamDeviceMessage 优先检查 skipReply 字段
- 协议层已处理回复的消息跳过业务层回复逻辑

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:12:56 +08:00
lzh
0c2cd85915 fix(iot-gateway): JT808协议使用skipReply标记协议层已应答
- Jt808ProtocolHandler 使用 setSkipReply(true) 替代 setCode(0)
- 避免业务层重复发送回复消息

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:12:03 +08:00
lzh
529171aca6 feat(iot-core): 添加skipReply字段支持协议层回复标记
- IotDeviceMessage 新增 skipReply 字段,用于标记协议层已处理回复
- IotDeviceMessageUtils 新增 isSkipReply() 方法
- isUpstreamMessage() 支持 JT808 协议方法判断
  - jt808.terminal.* 为上行消息
  - jt808.platform.* 为下行消息

解决 JT808 等协议在协议层已发送应答时,业务层无需再回复��场景

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 22:10:29 +08:00
lzh
c75696c644 feat(ops): 新增业务日志表
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
- 新增 ops_business_event_log 表结构

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:44:30 +08:00
lzh
c4ef31bb98 refactor(ops): 保洁工单相关服务改用新业务日志框架
- CleanOrderAuditEventHandler 使用 @BusinessLog 注解
- CleanOrderConfirmEventHandler 使用 @BusinessLog 注解
- VoiceBroadcastService 使用新的日志记录方式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:44:21 +08:00
lzh
457fc556e2 refactor(ops): 移除保洁工单清理日志相关代码
- 删除 OpsOrderCleanLogDO 实体类
- 删除 OpsOrderCleanLogMapper Mapper接口
- 统一使用新的业务日志框架

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:44:07 +08:00
lzh
5063fc8dd1 refactor(ops): 移除旧的publisher模式
- 删除 BusinessLogPublisher 接口
- 删除 DefaultBusinessLogPublisher 实现
- 改用 recorder 模式替代 publisher 模式

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:43:54 +08:00
lzh
a49994cc57 refactor(ops): 重构业务日志注解和切面
- 更新 BusinessLog 注解以支持新的事件日志模型
- 更新 BusinessLogAspect 切面使用 EventLogRecorder

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:43:39 +08:00
lzh
a82b59ac46 feat(ops): 新增业务日志枚举类
- 新增 EventDomain:事件领域枚举
- 新增 EventLevel:事件级别枚举

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:43:32 +08:00
lzh
c88dc3fc10 fix(ops): 修正工牌设备状态事件处理器配置
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
- 包名从 handler 改为 listener
- 使用 TransactionalEventListener 替代 EventListener
- 线程池名修正为 ops-task-executor
- 状态从 ASSIGNED 改为 PENDING
- 清理测试文件中的重复代码

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:05:39 +08:00
lzh
5dab9622d6 fix(iot): TCP消息处理容错改进,避免异常断开连接
- 消息格式无法识别时记录警告并跳过,不断开连接
- 消息解码失败时记录警告并跳过,不断开连接
- 设备不存在时断开连接,其他认证失败只记录日志
- 添加 bytesToHex 工具方法用于调试

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:05:23 +08:00
lzh
7c7b122de3 fix(iot): 修复JT808业务消息重复应答问题
- 在 handleBusinessMessage 中设置 message.setCode(0) 标记协议层已应答
- 避免业务层重复发送 reply 消息

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:04:57 +08:00
lzh
eb5513f9b6 fix(iot): 修复JT808事件消息identifier字段不匹配问题
- 修复 parseButtonEventAsEvent 使用 eventId 而非 identifier
- 添加消息体长度校验,防止越界访问
- 解码失败时返回 null 而非抛异常,避免断开连接

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 18:04:21 +08:00
lzh
447ea8fe90 fix(iot): 修改jt808应答调用IotDeviceMessage.requestOf
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
2026-01-21 15:20:38 +08:00
lzh
e6406f7c6e fix(iot): 修复RssiSlidingWindowDetector-component注解
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
2026-01-21 15:04:51 +08:00
lzh
ed127c3b29 fix(iot): jt808消息应答机制调整-每条消息都需应答
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
2026-01-21 14:48:16 +08:00
lzh
3d9079cbaf chore: stop tracking docs directory and update gitignore 2026-01-21 09:37:29 +08:00
lzh
50f2707d4e Merge remote-tracking branch 'origin/feature/environment-module' into feature/environment-module 2026-01-21 09:30:49 +08:00
lzh
8590f3c044 test: 完善 OrderStateMachine 和 OpsOrderService 测试用例 2026-01-21 09:30:29 +08:00
lzh
cc6491626d Merge branch 'test/ops-arch-analysis' into feature/environment-module 2026-01-20 18:20:39 +08:00
lzh
8c1133bb8c fix: 修复测试用例失败并完善测试覆盖 2026-01-20 18:10:59 +08:00
lzh
6c509781e9 docs: update testing guide with unit test details 2026-01-20 18:08:37 +08:00
lzh
22fad4ad31 test: add cleaning flow tests for OpsOrderService 2026-01-20 18:07:05 +08:00
lzh
c2bf98be5a test: add unit tests for OpsOrderService 2026-01-20 18:04:40 +08:00
lzh
e96773daf7 test: add unit tests for OrderStateMachine 2026-01-20 18:02:35 +08:00
lzh
50452bec00 refactor(ops): 更新 EventHandler 使用新的服务入口
更新各事件处理器以使用重构后的服务:
- CleanOrderEventListener: 使用 VoiceBroadcastService
- CleanOrderAuditEventHandler: 使用 VoiceBroadcastService
- CleanOrderConfirmEventHandler: 使用 VoiceBroadcastService
- BadgeDeviceStatusEventHandler: 更新 import 路径至 environment 模块

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:30:44 +08:00
lzh
0c91cbf75c refactor(ops): 重构语音播报服务为统一入口
- 删除 VoiceBroadcastDeduplicationService(去重服务)
- 新增 VoiceBroadcastService 作为 TTS 统一入口
  - broadcast(deviceId, text): 同步播报
  - broadcast(deviceId, text, volume): 带音量播报
  - broadcastAsync(): 异步播报
- 简化设计:接受 deviceId 参数,不实现复杂去重逻辑

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:29:16 +08:00
lzh
d82cc65625 refactor(ops): 新增 environment 模块的 BadgeDeviceStatusService
将 BadgeDeviceStatusService 迁移至 environment-biz 模块,并扩展 DTO:
- 新建 environment/service/badge/BadgeDeviceStatusService.java 接口
- 新建 environment/service/badge/BadgeDeviceStatusServiceImpl.java 实现
- BadgeDeviceStatusDTO 新增字段:
  - currentOrderStatus: 工单状态(DISPATCHED/ARRIVED/PAUSED)
  - beaconMac: 当前区域信标MAC地址

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:26:34 +08:00
lzh
6d4c2c60cf refactor(ops): 移除 ops-core 中的 BadgeDeviceStatusService
将 BadgeDeviceStatusService 从 ops-core 模块迁移至 environment 模块:
- 删除 ops-biz/core/badge/BadgeDeviceStatusService.java
- 删除 ops-biz/core/badge/BadgeDeviceStatusServiceImpl.java

该服务属于保洁业务特定逻辑,应放置在 environment-biz 模块中。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:16:06 +08:00
lzh
a83e827919 feat: add badge device status service 2026-01-20 11:27:37 +08:00
lzh
c310a8cb4d chore: add docs and .qoder/repowiki to gitignore 2026-01-20 11:19:42 +08:00
lzh
1bbbc55096 fix(ops): align TTS service identifier and logic with audit handler 2026-01-20 11:17:50 +08:00
lzh
1d8680c336 refactor(ops): extract constants and optimize status list in audit handler 2026-01-20 11:15:17 +08:00
lzh
d933bbf92c feat(ops): add CleanOrderConfirmEventHandler 2026-01-19 14:50:09 +08:00
lzh
48ab863fda refactor(ops): add JsonProperty annotation to triggerSource 2026-01-19 14:46:20 +08:00
lzh
eedef70581 feat(ops): add confirm event DTO and update audit DTO 2026-01-19 14:41:05 +08:00
lzh
a71a29f548 fix(ops): implement missing updateBadgeArea method 2026-01-19 14:41:00 +08:00
lzh
4f2036d145 fix(ops): 修复编译错误2refactor-order-operations 2026-01-19 13:59:37 +08:00
lzh
c448daed03 fix(ops): 修复编译错误refactor-order-operations 2026-01-19 13:38:53 +08:00
lzh
568d37a0be feat(ops): refactor-order-operations 2026-01-19 13:32:23 +08:00
lzh
5419a949d4 feat(ops): 工单创建发布事件(事件驱动调度) & 工单完成自动下一个任务 2026-01-19 10:56:30 +08:00
lzh
1d056a5e7a feat(iot): 信号丢失提醒 & 工单完成检测排除P0 2026-01-19 10:52:21 +08:00
lzh
64928f5a3f feat(ops): add-iot-clean-order-integration阶段3-客流计数器重置 2026-01-17 17:44:30 +08:00