import asyncio from fastapi import APIRouter, Request from common import * from models import DataModel from settings import settings router = APIRouter() @router.post("/") async def point(request: Request, items: DataModel): try: public_data: dict = restore_field(items.public) rdb = request.app.state.redis data_factory = request.app.state.data_factory output_factory = request.app.state.output_factory appid = items.public['b01'] output_factory.name = settings.OUTPUT_NAME[appid] for item in items.data: data: dict = restore_field(item) sign = data.pop('sign') properties = data.pop('properties') if not check_sign(sign, settings.SALT.get(appid,''), data, properties): # continue return {"code": -1, 'msg': '签名错误'} single_data = dict(**public_data, **data, properties=properties) await asyncio.gather( *map(lambda o: asyncio.create_task(o(request, rdb, single_data)), data_factory.handler_link)) msg = data_factory.format_data(single_data) output_factory.send(msg) return {"code": 0, 'msg': 'ok'} except Exception as e: return {"code": -1, 'msg': '数据异常'}