支持已绑定设备追加 NFC 卡
- 新增已绑定设备追加卡会话和小程序入口 - 允许同设备多张 active 卡,保留 card_uuid 唯一并补齐老库迁移 - 收紧未知卡自动绑定和跨设备卡复用 验证:talkingq-url/.venv/bin/python -m pytest tests;compileall;npm run build:weapp
This commit is contained in:
@@ -475,7 +475,7 @@ class TalkingQMQTTService:
|
||||
await self._publish(topic, payload)
|
||||
return
|
||||
|
||||
is_owner = await card_service.check_card_ownership(nfc_uuid, device_id)
|
||||
is_owner = await card_service.is_active_for_device(nfc_uuid, device_id)
|
||||
if is_owner:
|
||||
playback_items = await pending_voice_message_service.get_playback_items(
|
||||
target_device_id=device_id,
|
||||
@@ -534,10 +534,17 @@ class TalkingQMQTTService:
|
||||
return
|
||||
|
||||
existing_card = await card_service.get_card_by_uuid(nfc_uuid)
|
||||
if existing_card:
|
||||
if existing_card and existing_card.device_id and int(existing_card.status) == 1:
|
||||
target_device_id = existing_card.device_id
|
||||
else:
|
||||
await card_service.activate_card(nfc_uuid, device_id)
|
||||
payload = {
|
||||
"msg_id": "005",
|
||||
"type": 0,
|
||||
"params": {
|
||||
"url_1": f"http://{settings.server_host}:{settings.server_port}/assets/audio/error_card.mp3"
|
||||
},
|
||||
}
|
||||
await self._publish(topic, payload)
|
||||
return
|
||||
|
||||
await device_target_cache.set_target(device_id, target_device_id)
|
||||
|
||||
@@ -84,14 +84,15 @@ async def handle_text_message(websocket: WebSocket, device_id: str, text_data: s
|
||||
# 检查卡片是否存在
|
||||
existing_card = await card_service.get_card_by_uuid(card_uuid)
|
||||
|
||||
if existing_card:
|
||||
if existing_card and existing_card.device_id and int(existing_card.status) == 1:
|
||||
# 卡片已存在,使用卡片绑定的设备ID作为目标设备ID
|
||||
target_device_id = existing_card.device_id
|
||||
session_logger.info(device_id, "card", f"卡片已存在,绑定的设备ID: {target_device_id}")
|
||||
else:
|
||||
# 卡片不存在,创建新卡片并绑定到当前设备
|
||||
new_card = await card_service.activate_card(card_uuid, device_id)
|
||||
session_logger.info(device_id, "card", f"新卡片{card_uuid}已创建并激活,绑定到设备: {device_id}")
|
||||
await websocket.send_text(
|
||||
f"TARGET_DEVICE_REGISTERED_URL:http://{settings.server_host}:{settings.server_port}/assets/audio/error_card.mp3"
|
||||
)
|
||||
session_logger.warning(device_id, "card", f"未知卡片不能自动绑定: {card_uuid}")
|
||||
return
|
||||
|
||||
# 设置目标设备
|
||||
|
||||
Reference in New Issue
Block a user