Files
LoveACE-EndF/loveace/router/endpoint/isim/elec.py
Sibuxiangx bbc86b8330 ⚒️ 重大重构 LoveACE V2
引入了 mongodb
对数据库进行了一定程度的数据加密
性能改善
代码简化
统一错误模型和响应
使用 apifox 作为文档
2025-11-20 20:44:25 +08:00

75 lines
2.5 KiB
Python

from fastapi import APIRouter, Depends
from fastapi.responses import JSONResponse
from loveace.database.isim.room import RoomBind
from loveace.router.endpoint.isim.model.isim import (
UniISIMInfoResponse,
)
from loveace.router.endpoint.isim.model.protect_router import ISIMRouterErrorToCode
from loveace.router.endpoint.isim.utils.isim import ISIMClient, get_isim_client
from loveace.router.endpoint.isim.utils.room import get_bound_room
from loveace.router.schemas.uniresponse import UniResponseModel
isim_elec_router = APIRouter(
prefix="/elec",
responses=ISIMRouterErrorToCode().gen_code_table(),
)
@isim_elec_router.get(
"/info",
summary="获取寝室电费信息",
response_model=UniResponseModel[UniISIMInfoResponse],
)
async def get_isim_info(
isim: ISIMClient = Depends(get_isim_client),
room: RoomBind = Depends(get_bound_room),
) -> UniResponseModel[UniISIMInfoResponse] | JSONResponse:
"""
获取用户绑定宿舍的电费信息
✅ 功能特性:
- 获取当前电费余额
- 获取用电记录历史
- 获取缴费记录
💡 使用场景:
- 个人中心查看宿舍电费
- 监测用电情况
- 查看缴费历史
Returns:
UniISIMInfoResponse: 包含房间信息、电费余额、用电记录、缴费记录
"""
try:
# 使用 ISIMClient 的集成方法获取电费信息
result = await isim.get_electricity_info(room.roomid)
if result is None:
isim.client.logger.error(f"获取寝室 {room.roomid} 电费信息失败")
return ISIMRouterErrorToCode().remote_service_error.to_json_response(
isim.client.logger.trace_id
)
room_display = await isim.get_room_display_text(room.roomid)
room_display = "" if room_display is None else room_display
return UniResponseModel[UniISIMInfoResponse](
success=True,
data=UniISIMInfoResponse(
room_code=room.roomid,
room_display=room_display,
room_text=room.roomtext,
balance=result["balance"],
usage_records=result["usage_records"],
payments=result["payments"],
),
message="获取寝室电费信息成功",
error=None,
)
except Exception as e:
isim.client.logger.error("获取寝室电费信息异常")
isim.client.logger.exception(e)
return ISIMRouterErrorToCode().server_error.to_json_response(
isim.client.logger.trace_id
)