You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.9 KiB
53 lines
1.9 KiB
from fastapi import APIRouter, Depends, Request
|
|
from pydantic import BaseModel
|
|
|
|
from conf import setting
|
|
from helper import login_required, respond_to
|
|
from models import Terminal, Cabinet, Drawer, PlatformSecurity
|
|
from models.archive import Archive
|
|
|
|
router = APIRouter(prefix='/terminals')
|
|
|
|
|
|
class TerminalEditModel(BaseModel):
|
|
name: str | None
|
|
title: str | None
|
|
index_of_user: int | None
|
|
login_count: int = 1
|
|
params: dict | None
|
|
|
|
|
|
@router.get('', summary='获取终端信息')
|
|
async def index():
|
|
terminal = await Terminal.get(id=setting.TERMINAL_ID).values()
|
|
terminal['has_door'] = setting.HAS_DOOR
|
|
terminal['send_all_board_id'] = setting.SEND_ALL_BOARD_ID
|
|
terminal['has_balance'] = setting.HAS_BALANCE
|
|
terminal['rfid_reverse'] = setting.RFID_REVERSE
|
|
terminal['client_number'] = setting.CLIENT_NUMBER
|
|
return respond_to(data=terminal)
|
|
|
|
|
|
@router.put('/{id}', summary='修改终端信息', dependencies=[Depends(login_required)])
|
|
async def update(request: Request, id: str, model: TerminalEditModel):
|
|
model_dict = model.dict()
|
|
model_dict.pop("params")
|
|
await Terminal.filter(id=id).update(**model_dict)
|
|
|
|
# 大类参数保存
|
|
if request.state and request.state.archive_id and model.params:
|
|
archive_obj = await Archive.get(id=request.state.archive_id)
|
|
archive_obj.params = model.params
|
|
await archive_obj.save()
|
|
return respond_to()
|
|
|
|
|
|
@router.get('/cabinets', summary='柜体及抽屉数据', dependencies=[Depends(login_required)])
|
|
async def index():
|
|
cabinets = await Cabinet.filter(terminal_id=setting.TERMINAL_ID).order_by('-created_at').only('id', 'label')
|
|
data = []
|
|
for cabinet in cabinets:
|
|
drawers = await Drawer.filter(cabinet_id=cabinet.id).order_by('rank').values('id', 'cabinet_id', 'label')
|
|
data.append({'id': cabinet.id, 'label': cabinet.label, 'drawers': drawers})
|
|
return respond_to(data=data)
|