Commit e1bc4b2a authored by xianyang's avatar xianyang

充值报表相关接口

parent 0a295c32
from typing import Optional import pandas as pd
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from core.config.env import env from core.config.env import env
from libs.db_link import LinkMysql from libs.db_link import LinkMysql
from models import statement as models from models import statement as models
from app.api.statement import schemas from starlette.responses import StreamingResponse
from sqlalchemy import and_
def get_statement(db: Session, user_id: int): def get_statement(db: Session, user_id: int):
...@@ -19,9 +17,34 @@ def get_statement_by_name(db: Session, username: str): ...@@ -19,9 +17,34 @@ def get_statement_by_name(db: Session, username: str):
def get_statements(param): def get_statements(param):
page = param.page if param.page else 1 page = param.page if param.page else 1
size = param.size if param.size else 10 size = param.size if param.size else 10
sql = f"select order_number,userid,user_number,nick_name,money,paychannel,sid,lastupdate,current,payment_time " \ query_list = []
f"from orders o INNER JOIN v2_user v on o.userid = v.user_id where o.order_number LIKE '%{param.get('order_number')}%' and " \ if param.order_number:
f"o.userid LIKE '%{param.get('user_id')}%' and o.sid LIKE '%{param.get('sid')}%' and o.paychannel LIKE '%{param.get('paychannel')}%' and orcurrent>='{param.get('start_time')}' and current <= '{param.get('end_time')}' LIMIT {(int(page)-1) * size},{page * size}" query_list.append(f"o.order_number LIKE '%{param.order_number}%'")
if param.user_id:
query_list.append(f"o.userid={param.user_id}")
if param.sid:
query_list.append(f"o.sid LIKE '%{param.sid}%'")
if param.paychannel:
query_list.append(f"o.paychannel LIKE '%{param.paychannel}%'")
if param.start_time:
query_list.append(f"o.current>='{param.start_time}'")
if param.end_time:
query_list.append(f"o.current <= '{param.end_time}'")
if not query_list:
sql = f"select order_number,userid,user_number,nick_name,cast(money as char) as money,paychannel,sid,lastupdate,cast(current as char) as current,payment_time from orders o INNER JOIN v2_user v on o.userid = v.user_id LIMIT {(int(page) - 1) * size},{page * size}"
elif len(query_list) == 1:
sql = f"select order_number,userid,user_number,nick_name,cast(money as char) as money,paychannel,sid,lastupdate,cast(current as char) as current,payment_time from orders o INNER JOIN v2_user v on o.userid = v.user_id where {query_list[0]} LIMIT {(int(page)-1) * size},{page * size}"
else:
sql = f"select order_number,userid,user_number,nick_name,cast(money as char) as money,paychannel,sid,lastupdate,cast(current as char) as current,payment_time from orders o INNER JOIN v2_user v on o.userid = v.user_id where {' and '.join(query_list)} LIMIT {(int(page) - 1) * size},{page * size}"
query_res = LinkMysql(env.MysqlDB).query_mysql(sql) query_res = LinkMysql(env.MysqlDB).query_mysql(sql)
return query_res return query_res
# 写入文件
def data_to_file(data, name):
bk = pd.DataFrame(data)
with pd.ExcelWriter(f'static/{name}.xlsx') as writer:
bk.to_excel(writer, sheet_name='Sheet1', index=False)
file = open(writer, 'rb')
return StreamingResponse(file)
...@@ -24,8 +24,8 @@ class StatementList(BaseModel): ...@@ -24,8 +24,8 @@ class StatementList(BaseModel):
end_time: Optional[str] = "" end_time: Optional[str] = ""
order_number: Optional[str] = "" order_number: Optional[str] = ""
user_id: Optional[int] = None user_id: Optional[int] = None
flowing_water_number: Optional[str] = "" sid: Optional[str] = ""
recharge_channel: Optional[str] = "" paychannel: Optional[str] = ""
class Statement(StatementBase): class Statement(StatementBase):
......
from app import get_db import os
from sqlalchemy.orm import Session
from app.api.statement import crud, schemas from app.api.statement import crud, schemas
from fastapi import Depends, APIRouter, Request from fastapi import APIRouter
from libs.result_format import HttpResultResponse from libs.result_format import HttpResultResponse
router = APIRouter() router = APIRouter()
...@@ -15,13 +14,9 @@ def statement_recharge_list(data: schemas.StatementList): ...@@ -15,13 +14,9 @@ def statement_recharge_list(data: schemas.StatementList):
return HttpResultResponse(data=statement_list) return HttpResultResponse(data=statement_list)
@router.post("/create") @router.post("/derive/excel")
def create_user(data: schemas.StatementCreate, db: Session = Depends(get_db)): def statement_recharge_list(data: schemas.StatementList):
"""添加""" """导出"""
statement_list = crud.get_statements(data)
res = crud.create_statementr(db=db, user=data) return crud.data_to_file(statement_list, "充值报表")
return HttpResultResponse(data=res.id)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment