Commit e1bc4b2a authored by xianyang's avatar xianyang

充值报表相关接口

parent 0a295c32
from typing import Optional
import pandas as pd
from sqlalchemy.orm import Session
from core.config.env import env
from libs.db_link import LinkMysql
from models import statement as models
from app.api.statement import schemas
from sqlalchemy import and_
from starlette.responses import StreamingResponse
def get_statement(db: Session, user_id: int):
......@@ -19,9 +17,34 @@ def get_statement_by_name(db: Session, username: str):
def get_statements(param):
page = param.page if param.page else 1
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 " \
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 " \
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 = []
if param.order_number:
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)
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):
end_time: Optional[str] = ""
order_number: Optional[str] = ""
user_id: Optional[int] = None
flowing_water_number: Optional[str] = ""
recharge_channel: Optional[str] = ""
sid: Optional[str] = ""
paychannel: Optional[str] = ""
class Statement(StatementBase):
......
from app import get_db
import os
from sqlalchemy.orm import Session
from app.api.statement import crud, schemas
from fastapi import Depends, APIRouter, Request
from fastapi import APIRouter
from libs.result_format import HttpResultResponse
router = APIRouter()
......@@ -15,13 +14,9 @@ def statement_recharge_list(data: schemas.StatementList):
return HttpResultResponse(data=statement_list)
@router.post("/create")
def create_user(data: schemas.StatementCreate, db: Session = Depends(get_db)):
"""添加"""
res = crud.create_statementr(db=db, user=data)
return HttpResultResponse(data=res.id)
@router.post("/derive/excel")
def statement_recharge_list(data: schemas.StatementList):
"""导出"""
statement_list = crud.get_statements(data)
return crud.data_to_file(statement_list, "充值报表")
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