daily/Mods/Finance/Crud.py

71 lines
2.5 KiB
Python
Raw Normal View History

2023-04-23 17:24:36 +08:00
from datetime import datetime
2023-04-21 10:56:52 +08:00
from sqlalchemy.orm import Session
2023-04-21 13:49:51 +08:00
from Models.UserModel import User
2023-04-21 10:56:52 +08:00
from . import Schemas
from .Models import Finance
def finance_add(db: Session, data: Schemas.FinanceAddInfo):
item = Finance(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def finance_delete(db: Session, item_id: int):
db.query(Finance).filter_by(id=item_id).delete()
db.commit()
def finance_update(db: Session, data: Schemas.FinanceUpdateInfo):
db.query(Finance).filter_by(id=data.id).update({key: v for key, v in data.dict().items() if v is not None})
db.commit()
item = db.query(Finance).filter_by(id=data.id).first()
return item
def finance_get(db: Session, item_id: int):
2023-04-21 13:49:51 +08:00
# item = db.query(Finance).filter_by(id=item_id).first()
item = db.query(Finance, User).join(User, Finance.fill_user == User.email).filter(Finance.id == item_id).first()
2023-04-21 10:56:52 +08:00
return item
def finance_query(db: Session, params: Schemas.FinanceQuery):
params_dict = params.dict()
2023-04-21 13:49:51 +08:00
# query = db.query(Finance)
query = db.query(Finance, User).join(User, Finance.fill_user == User.email)
2023-04-21 10:56:52 +08:00
db_model = Finance
for key, value in params_dict.items():
if key not in ['page', 'page_size'] and value is not None:
if type(value) == str:
query = query.filter(getattr(db_model, key).like(f'%{value}%'))
elif type(value) in [int, float, bool]:
query = query.filter_by(**{key: value})
2023-04-23 17:24:36 +08:00
elif type(value) in [list, tuple] and getattr(db_model, key).type.python_type == datetime:
if value:
if value[0] is not None:
query = query.filter(getattr(db_model, key) >= datetime.fromtimestamp(value[0] / 1000))
if value[1] is not None:
query = query.filter(getattr(db_model, key) <= datetime.fromtimestamp(value[1] / 1000))
2023-04-21 10:56:52 +08:00
else:
query = query.filter(getattr(db_model, key) == value)
2023-04-24 09:57:37 +08:00
total = sum([item[0].income for item in query if item[0].income])
2023-04-21 10:56:52 +08:00
count = query.count()
2023-04-24 09:57:37 +08:00
2023-04-21 10:56:52 +08:00
page = None
page_size = None
if 'page' in params_dict:
page = params_dict['page']
if 'page_size' in params_dict:
page_size = params_dict['page_size']
# 页数不超过100
if page is not None and page_size is not None:
page_size = min(page_size, 100)
query = query.offset((page - 1) * page_size).limit(page_size).all()
2023-04-24 09:57:37 +08:00
return count, query,total
2023-04-21 10:56:52 +08:00
2023-04-21 13:49:51 +08:00
################