157 lines
4.8 KiB
Python
157 lines
4.8 KiB
Python
import json
|
|
|
|
from aioredis import Redis
|
|
from fastapi import APIRouter, Depends, Request, File
|
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
|
import pandas as pd
|
|
|
|
import crud, schemas
|
|
|
|
from api import deps
|
|
from core.config import settings
|
|
from db import get_database
|
|
from db.ckdb import CKDrive, get_ck_db
|
|
from db.redisdb import get_redis_pool
|
|
from utils import estimate_data,dict_to_str
|
|
|
|
router = APIRouter()
|
|
|
|
__all__ = 'router',
|
|
|
|
|
|
@router.get("/attr_list")
|
|
async def read_data_attr(
|
|
request: Request,
|
|
game: str,
|
|
cat: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
rdb: Redis = Depends(get_redis_pool),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""事件属性列表或用户属性列表"""
|
|
data = await rdb.get(f'{game}_{cat}')
|
|
data = json.loads(data)
|
|
res = []
|
|
|
|
data_attr = await crud.data_attr.find_many(db, {'game': game, 'cat': cat})
|
|
data_attr = {item['name']: item for item in data_attr}
|
|
|
|
for k, v in data.items():
|
|
res.append(
|
|
{'name': k,
|
|
'data_type': settings.CK_TYPE_DICT.get(v),
|
|
'show_name': data_attr.get(k, {}).get('show_name', ''),
|
|
'is_show': data_attr.get(k, {}).get('is_show', True),
|
|
'attr_type': '预置属性' if k.startswith('#') else '自定义属性',
|
|
'unit': ''
|
|
}
|
|
)
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|
|
|
|
|
|
@router.post("/attr_edit")
|
|
async def edit_data_attr(
|
|
request: Request,
|
|
game: str,
|
|
data_in: schemas.DataAttrEdit,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
rdb: Redis = Depends(get_redis_pool),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""编辑事件属性"""
|
|
await crud.data_attr.edit_data_attr(db, game, data_in)
|
|
return schemas.Msg(code=0, msg='ok', data=data_in)
|
|
|
|
|
|
#
|
|
# @router.post("/add_select_map")
|
|
# async def add_map(
|
|
# request: Request,
|
|
# game: str,
|
|
# data_in: schemas.SelectMap,
|
|
# db: AsyncIOMotorDatabase = Depends(get_database),
|
|
# current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
# ) -> schemas.Msg:
|
|
# """添加属性值选择映射"""
|
|
#
|
|
# """
|
|
# {
|
|
# game:aaa,
|
|
# attr_name:bbb,
|
|
# map_:{
|
|
# '区服aa':'1',
|
|
# '区服vvv':'5',
|
|
# }
|
|
#
|
|
# }
|
|
# """
|
|
# await crud.select_map.save(db, data_in)
|
|
# return schemas.Msg(code=0, msg='ok', data=data_in)
|
|
|
|
|
|
@router.post("/add_select_map")
|
|
async def add_select_map(
|
|
request: Request,
|
|
game: str,
|
|
file: bytes = File(...),
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""添加属性值选择映射"""
|
|
dfs = pd.read_excel(file, engine='openpyxl', sheet_name=None)
|
|
for attr_name, df in dfs.items():
|
|
df['id'] = df['id'].astype(str)
|
|
map_ = df.to_dict('records')
|
|
data_in = schemas.SelectMap(game=game, attr_name=attr_name, map_=map_)
|
|
await crud.select_map.save(db, data_in)
|
|
return schemas.Msg(code=0, msg='ok', data=1)
|
|
|
|
|
|
@router.get("/select_list")
|
|
async def select_list(
|
|
request: Request,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""属性值选择映射列表"""
|
|
resp = await crud.select_map.get_list(db, game)
|
|
return schemas.Msg(code=0, msg='ok', data=resp)
|
|
|
|
|
|
@router.post("/select_attr")
|
|
async def select_attr(
|
|
request: Request,
|
|
game: str,
|
|
data_in: schemas.SelectAttr,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""属性值选择映射"""
|
|
resp = await crud.select_map.get_select(db, data_in, game)
|
|
code = 0 if resp else -9
|
|
return schemas.Msg(code=code, msg='ok', data=resp)
|
|
|
|
@router.post("/add_attr")
|
|
async def add_attr(
|
|
request: Request,
|
|
game: str,
|
|
data_in: schemas.Add_attr,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
rdb: Redis = Depends(get_redis_pool),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""添加事件属性或添加用户属性"""
|
|
data = await rdb.get(f'{game}_{data_in.cat}')
|
|
data = json.loads(data)
|
|
if data_in.state =='add':
|
|
#判断传入数据类型
|
|
new_data_type=estimate_data(data_in.data_type)
|
|
#添加数据
|
|
data[data_in.new_attribute]=new_data_type
|
|
else:
|
|
del data[data_in.new_attribute]
|
|
#将字典转为字符串
|
|
str_data=dict_to_str(data)
|
|
await rdb.set(f'{game}_{data_in.cat}',str_data)
|
|
return schemas.Msg(code=0, msg='ok') |