Commit 77b6b2ff authored by xianyang's avatar xianyang

账户列表,导出接口

parent 4fe1640e
from datetime import datetime
import pandas as pd
from sqlalchemy import and_
from sqlalchemy.orm import Session
from app.api.account import schemas
......@@ -94,7 +94,7 @@ def update_account_info(db: Session, old_data):
db.commit()
def get_finance_info(db, data):
def get_finance_info(db, data, is_list=None):
"""账户财务信息"""
finance_condition = []
finance_condition.append(AccountFinance.account_id == data.aid)
......@@ -102,16 +102,22 @@ def get_finance_info(db, data):
finance_condition.append(AccountFinance.create_time >= data.start_time)
if data.end_time:
finance_condition.append(AccountFinance.create_time <= data.end_time)
if not finance_condition:
query_res = db.query(AccountFinance).all()
return [i.to_dict() for i in query_res][::-1]
try:
get_finance_orm = db.query(AccountFinance).filter(and_(*finance_condition))
condition_data = db.execute(get_finance_orm).fetchall()
serializer_info = [i[0].to_dict() for i in condition_data]
serializer_info.reverse()
except Exception as e:
print(e)
return [], 0 if is_list else []
# 判断是列表还是导出接口
if is_list:
return serializer_info[(int(data.page) - 1) * data.size:data.size * data.page], len(serializer_info)
else:
get_user_orm_sql = db.query(AccountFinance).filter(and_(*finance_condition))
query_res = db.execute(get_user_orm_sql).fetchall()
return [i[0].to_dict() for i in query_res][::-1]
return serializer_info
def get_finance_details(db, data):
def get_finance_details(db, data, is_list=None):
"""账户财务明细"""
finance_condition = []
if data.type or data.type == 0:
......@@ -122,10 +128,18 @@ def get_finance_details(db, data):
finance_condition.append(AccountFinanceDetails.create_time >= data.start_time)
if data.end_time:
finance_condition.append(AccountFinanceDetails.create_time <= data.end_time)
if not finance_condition:
query_res = db.query(AccountFinanceDetails).all()
return [i.to_dict() for i in query_res][::-1]
try:
get_details_orm = db.query(AccountFinanceDetails).filter(and_(*finance_condition))
condition_data = db.execute(get_details_orm).fetchall()
serial_info = [i[0].to_dict() for i in condition_data]
serial_info.reverse()
except Exception as e:
print(e)
return [], 0, 0 if is_list else []
# 判断是列表还是导出接口
if is_list:
df = pd.DataFrame(serial_info)
count = df['amount'].apply(lambda x: x).sum()
return serial_info[(int(data.page) - 1) * data.size:data.size * data.page], len(serial_info), count
else:
get_user_orm_sql = db.query(AccountFinanceDetails).filter(and_(*finance_condition))
query_res = db.execute(get_user_orm_sql).fetchall()
return [i[0].to_dict() for i in query_res][::-1]
return serial_info
......@@ -38,4 +38,4 @@ class FinanceInfo(PublicModel):
class FinanceDetails(PublicModel):
type: Optional[int] = None
gift_type: Optional[int] = None
gift_type: Optional[str] = None
......@@ -2,6 +2,7 @@ from fastapi import Depends, APIRouter
from sqlalchemy.orm import Session
from app import get_db
from app.api.account import schemas, crud
from app.api.statement import crud as statement_crud
from libs.result_format import HttpResultResponse, HttpMessage
router = APIRouter()
......@@ -43,12 +44,26 @@ def read_account(data: schemas.AccountUpdate, db: Session = Depends(get_db)):
@router.post("/finance/info")
def finance_information(data: schemas.FinanceInfo, db: Session = Depends(get_db)):
"""账户财务信息"""
res = crud.get_finance_info(db, data)
return HttpResultResponse(total=len(res), data=res[int(data.page-1)*data.size:data.page*data.size])
res, total = crud.get_finance_info(db, data, 1)
return HttpResultResponse(total=total, data=res[int(data.page-1)*data.size:data.page*data.size])
@router.post("/finance/info/excel")
def finance_info_excel(data: schemas.FinanceInfo, db: Session = Depends(get_db)):
"""账户财务信息导出"""
statement_list = crud.get_finance_info(db, data)
return statement_crud.data_to_file(statement_list, "财务信息")
@router.post("/finance/details")
def finance_details(data: schemas.FinanceDetails, db: Session = Depends(get_db)):
"""账户财务明细"""
res = crud.get_finance_details(db, data)
return HttpResultResponse(total=len(res), data=res[int(data.page-1)*data.size:data.page*data.size])
res, total, count = crud.get_finance_details(db, data, 1)
return HttpResultResponse(total=total, data=res, count=count)
@router.post("/finance/details/excel")
def finance_info_excel(data: schemas.FinanceDetails, db: Session = Depends(get_db)):
"""账户财务明细导出"""
statement_list = crud.get_finance_details(db, data)
return statement_crud.data_to_file(statement_list, "财务明细")
......@@ -48,8 +48,8 @@ class AccountFinance(Base, SerializerMixin):
account_tag = Column(String(255), comment="账户标识")
account_uuid = Column(String(100), comment="账户uuid")
balance = Column(String(255), comment="当日余额")
income = Column(Float, comment="当日入账")
output = Column(Float, comment="当日出账")
income = Column(Float, default=0, comment="当日入账")
output = Column(Float, default=0, comment="当日出账")
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '账号财务数据表'}
......
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