修改音频保存逻辑,后续再完善,添加设备信息保存到数据库
This commit is contained in:
107
talkingq-url/banban/service/device_setting.py
Normal file
107
talkingq-url/banban/service/device_setting.py
Normal file
@@ -0,0 +1,107 @@
|
||||
from collections.abc import Mapping
|
||||
from datetime import time
|
||||
from typing import Optional
|
||||
|
||||
from services.database_service_base import DatabaseServiceBase
|
||||
|
||||
from banban.dao.device_setting import DeviceSettingDAO
|
||||
|
||||
|
||||
class DeviceSettingService(DatabaseServiceBase):
|
||||
def __init__(self):
|
||||
super().__init__(service_name="device_setting_service")
|
||||
|
||||
async def create_setting(
|
||||
self,
|
||||
device_id: str,
|
||||
sleep_mode: int = 0,
|
||||
disable_time_start: Optional[time] = None,
|
||||
disable_time_end: Optional[time] = None,
|
||||
timezone: str = "Asia/Shanghai",
|
||||
power: Optional[int] = None,
|
||||
volume: Optional[int] = None,
|
||||
brightness: Optional[int] = None,
|
||||
disable_weekdays: Optional[str] = None,
|
||||
signal_strength: Optional[int] = None,
|
||||
version_str: Optional[str] = None,
|
||||
) -> int:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceSettingDAO(db_session)
|
||||
return await dao.create(
|
||||
device_id=device_id,
|
||||
sleep_mode=sleep_mode,
|
||||
disable_time_start=disable_time_start,
|
||||
disable_time_end=disable_time_end,
|
||||
timezone=timezone,
|
||||
power=power,
|
||||
volume=volume,
|
||||
brightness=brightness,
|
||||
disable_weekdays=disable_weekdays,
|
||||
signal_strength=signal_strength,
|
||||
version_str=version_str,
|
||||
)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def get_setting_by_device_id(self, device_id: str) -> Optional[Mapping]:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceSettingDAO(db_session)
|
||||
return await dao.get_by_device_id(device_id=device_id)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def update_setting(
|
||||
self,
|
||||
device_id: str,
|
||||
sleep_mode: Optional[int] = None,
|
||||
disable_time_start: Optional[time] = None,
|
||||
disable_time_end: Optional[time] = None,
|
||||
timezone: Optional[str] = None,
|
||||
power: Optional[int] = None,
|
||||
volume: Optional[int] = None,
|
||||
brightness: Optional[int] = None,
|
||||
disable_weekdays: Optional[str] = None,
|
||||
signal_strength: Optional[int] = None,
|
||||
version_str: Optional[str] = None,
|
||||
) -> None:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceSettingDAO(db_session)
|
||||
await dao.update(
|
||||
device_id=device_id,
|
||||
sleep_mode=sleep_mode,
|
||||
disable_time_start=disable_time_start,
|
||||
disable_time_end=disable_time_end,
|
||||
timezone=timezone,
|
||||
volume=volume,
|
||||
brightness=brightness,
|
||||
disable_weekdays=disable_weekdays,
|
||||
power=power,
|
||||
signal_strength=signal_strength,
|
||||
version_str=version_str,
|
||||
)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def delete_setting(self, device_id: str) -> None:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = DeviceSettingDAO(db_session)
|
||||
await dao.delete_by_device_id(device_id=device_id)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def insert_or_update(self, device_id: str, power: int, volume: int, signal_strength: int, version_str: str) -> None:
|
||||
try:
|
||||
current_row = await self.get_setting_by_device_id(device_id=device_id)
|
||||
if current_row:
|
||||
await self.update_setting(device_id=device_id, power=power, volume=volume, signal_strength=signal_strength, version_str=version_str)
|
||||
else:
|
||||
await self.create_setting(device_id=device_id, power=power, volume=volume, signal_strength=signal_strength, version_str=version_str)
|
||||
finally:
|
||||
pass
|
||||
|
||||
# 创建全局 DeviceSettingService 实例
|
||||
device_setting_service = DeviceSettingService()
|
||||
@@ -251,6 +251,55 @@ class ImService(DatabaseServiceBase):
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
'''
|
||||
Todo 创建设备消息, 还不完善
|
||||
'''
|
||||
async def create_device_message(
|
||||
self,
|
||||
*,
|
||||
device_id: str,
|
||||
serial_number: str,
|
||||
target_device_id: str,
|
||||
audio_url: str,
|
||||
):
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = ImDAO(db_session)
|
||||
device_identity = await dao.authenticate_device_identity(
|
||||
device_id=device_id,
|
||||
serial_number=serial_number,
|
||||
)
|
||||
target_device_identity = await dao.get_device_by_id(device_id=target_device_id)
|
||||
|
||||
sender_child_row = await dao.assert_child_exists(child_id=device_identity.child_id)
|
||||
receiver_child_row = await dao.assert_child_exists(child_id=target_device_identity.child_id)
|
||||
|
||||
conversation_id, idempotent = await dao.create_message(
|
||||
conversation_type=PARENT_CHILD_CONVERSATION_TYPE,
|
||||
participant_a_type=CHILD_PARTICIPANT_TYPE,
|
||||
participant_a_id=str(device_identity.child_id),
|
||||
participant_b_type=PARENT_PARTICIPANT_TYPE,
|
||||
participant_b_id=str(receiver_child_row.child_id),
|
||||
pair_key=f"{device_identity.child_id}:{target_device_identity.child_id}",
|
||||
sender_type=CHILD_PARTICIPANT_TYPE,
|
||||
sender_id=str(device_identity.child_id),
|
||||
receiver_type=PARENT_PARTICIPANT_TYPE,
|
||||
receiver_id=str(receiver_child_row.child_id),
|
||||
sender_name_snapshot=sender_child_row["child_name"],
|
||||
sender_avatar_snapshot=None,
|
||||
receiver_name_snapshot=receiver_child_row["child_name"],
|
||||
receiver_avatar_snapshot=None,
|
||||
payload=None,
|
||||
)
|
||||
|
||||
|
||||
return device_identity
|
||||
except Exception:
|
||||
await db_session.rollback()
|
||||
raise
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
|
||||
# 创建全局 ImService 实例
|
||||
im_service = ImService()
|
||||
|
||||
@@ -4,7 +4,7 @@ from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from services.database_service_base import DatabaseServiceBase
|
||||
|
||||
from database.models import ChildLocationCurrent
|
||||
try:
|
||||
from banban.dao.location import LocationDAO, ParentDeviceAccess
|
||||
from banban.schemas.location import DeviceLocationReportRequest
|
||||
@@ -85,6 +85,18 @@ class LocationService(DatabaseServiceBase):
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
async def insert_or_update(self, device_id: str, location: ChildLocationCurrent) -> None:
|
||||
db_session = await self.get_session()
|
||||
try:
|
||||
dao = LocationDAO(db_session)
|
||||
current_row = await dao.get_device_current_location(device_id=device_id)
|
||||
if current_row:
|
||||
await dao.update(device_id=device_id, latitude=location.lat, longitude=location.lng)
|
||||
# 更新成功加到历史记录表
|
||||
else:
|
||||
await dao.insert(device_id=device_id, latitude=location.lat, longitude=location.lng)
|
||||
finally:
|
||||
await db_session.close()
|
||||
|
||||
# 创建全局 LocationService 实例
|
||||
location_service = LocationService()
|
||||
|
||||
Reference in New Issue
Block a user