财务报表

This commit is contained in:
Administrator 2023-04-21 10:56:52 +08:00
parent 11c0f9a1f8
commit 585b4264b3
9 changed files with 394 additions and 2 deletions

57
Mods/Finance/Crud.py Normal file
View File

@ -0,0 +1,57 @@
from sqlalchemy.orm import Session
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):
item = db.query(Finance).filter_by(id=item_id).first()
return item
def finance_query(db: Session, params: Schemas.FinanceQuery):
params_dict = params.dict()
query = db.query(Finance)
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})
else:
query = query.filter(getattr(db_model, key) == value)
count = query.count()
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()
return count, query
################

23
Mods/Finance/Models.py Normal file
View File

@ -0,0 +1,23 @@
from sqlalchemy.orm import relationship
from Utils.SqlAlchemyUtils import get_db, Base
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, func, Date, Double
class Finance(Base):
"""
财务数据表
"""
__tablename__ = "finance"
id = Column(Integer, primary_key=True)
fill_user = Column(String(255))
company_name = Column(String(255))
income_date = Column(DateTime)
income = Column(Double)
type_id = Column(String(255))
info = Column(Text)
cretated_at = Column(DateTime, comment="自动生成")
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
return data

53
Mods/Finance/Router.py Normal file
View File

@ -0,0 +1,53 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Utils.SqlAlchemyUtils import get_db, Base
from . import Schemas
from . import Crud
from Utils.SqlAlchemyUtils import QueryParams, query_common
from .Models import Finance
router = APIRouter(tags=["财务数据"])
@router.post("/finance/add", summary="添加财务数据", response_model=Schemas.FinanceAddRes)
def finance_add(req: Schemas.FinanceAddReq, db: Session = Depends(get_db)):
item = Crud.finance_add(db, req)
return Schemas.FinanceAddRes(**item.to_dict())
@router.post("/finance/delete", summary="删除财务数据")
def finance_delete(req: Schemas.FinanceDeleteReq, db: Session = Depends(get_db)):
Crud.finance_delete(db, req.id)
return "删除成功"
@router.post("/finance/update", summary="更新财务数据", response_model=Schemas.FinanceUpdateRes)
def finance_update(req: Schemas.FinanceUpdateReq, db: Session = Depends(get_db)):
item = Crud.finance_update(db, req)
return Schemas.FinanceUpdateRes(**item.to_dict())
@router.post("/finance/get", summary="获取财务数据", response_model=Schemas.FinanceGetRes)
def finance_get(req: Schemas.FinanceGetReq, db: Session = Depends(get_db)):
item = Crud.finance_get(db, req.id)
if not item:
raise HTTPException(detail="未查询到信息", status_code=404)
return Schemas.FinanceGetRes(**item.to_dict())
@router.post("/finance/query", summary="查询财务数据", response_model=Schemas.FinanceQueryRes)
def finance_query(req: Schemas.FinanceQueryReq, db: Session = Depends(common_db.get_db)):
count, query = Crud.finance_query(db, req)
items = [Schemas.FinanceInfo(**item.to_dict()) for item in query]
return Schemas.FinanceQueryRes(count=count, items=items)
@router.post("/finance/query_common", summary="通用查询财务数据",
response_model=Schemas.FinanceQueryRes)
def finance_query_common(req: QueryParams, db: Session = Depends(common_db.get_db)):
count, query = query_common(db, Finance, req)
items = [Schemas.FinanceInfo(**item.to_dict()) for item in query]
return Schemas.FinanceQueryRes(count=count, items=items)
#########

71
Mods/Finance/Schemas.py Normal file
View File

@ -0,0 +1,71 @@
from datetime import datetime, date
from pydantic import BaseModel
from typing import Optional, List
class FinanceInfo(BaseModel):
id: Optional[int]
fill_user: Optional[str]
company_name: Optional[str]
income_date: Optional[datetime]
income: Optional[float]
type_id: Optional[str]
info: Optional[str]
cretated_at: Optional[datetime]
class FinanceAddInfo(BaseModel):
fill_user: Optional[str]
company_name: Optional[str]
income_date: Optional[datetime]
income: Optional[float]
type_id: Optional[str]
info: Optional[str]
cretated_at: Optional[datetime]
class FinanceAddReq(FinanceAddInfo):
pass
class FinanceAddRes(FinanceInfo):
pass
class FinanceUpdateInfo(FinanceInfo):
pass
class FinanceUpdateReq(FinanceUpdateInfo):
pass
class FinanceUpdateRes(FinanceInfo):
pass
class FinanceQuery(FinanceInfo):
pass
class FinanceQueryReq(FinanceQuery):
pass
class FinanceGetReq(BaseModel):
id: int
class FinanceGetRes(FinanceInfo):
pass
class FinanceQueryRes(BaseModel):
count: int
items: List[FinanceInfo]
class FinanceDeleteReq(BaseModel):
id: int
#######################

57
Mods/RevenueType/Crud.py Normal file
View File

@ -0,0 +1,57 @@
from sqlalchemy.orm import Session
from . import Schemas
from .Models import RevenueType
def revenue_type_add(db: Session, data: Schemas.RevenueTypeAddInfo):
item = RevenueType(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def revenue_type_delete(db: Session, item_id: int):
db.query(RevenueType).filter_by(id=item_id).delete()
db.commit()
def revenue_type_update(db: Session, data: Schemas.RevenueTypeUpdateInfo):
db.query(RevenueType).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(RevenueType).filter_by(id=data.id).first()
return item
def revenue_type_get(db: Session, item_id: int):
item = db.query(RevenueType).filter_by(id=item_id).first()
return item
def revenue_type_query(db: Session, params: Schemas.RevenueTypeQuery):
params_dict = params.dict()
query = db.query(RevenueType)
db_model = RevenueType
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})
else:
query = query.filter(getattr(db_model, key) == value)
count = query.count()
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()
return count, query
################

View File

@ -0,0 +1,18 @@
from sqlalchemy.orm import relationship
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, func, Date, Double
from Utils.SqlAlchemyUtils import get_db, Base
class RevenueType(Base):
"""
营收类型表
"""
__tablename__ = "revenue_type"
id = Column(Integer, primary_key=True)
name = Column(String(255))
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
return data

View File

@ -0,0 +1,52 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Utils.SqlAlchemyUtils import get_db, Base
from . import Schemas
from . import Crud
from Utils.SqlAlchemyUtils import QueryParams, query_common
from .Models import RevenueType
router = APIRouter(tags=["营收类型"])
@router.post("/revenue_type/add", summary="添加营收类型", response_model=Schemas.RevenueTypeAddRes)
def revenue_type_add(req: Schemas.RevenueTypeAddReq, db: Session = Depends(get_db)):
item = Crud.revenue_type_add(db, req)
return Schemas.RevenueTypeAddRes(**item.to_dict())
@router.post("/revenue_type/delete", summary="删除营收类型")
def revenue_type_delete(req: Schemas.RevenueTypeDeleteReq, db: Session = Depends(get_db)):
Crud.revenue_type_delete(db, req.id)
return "删除成功"
@router.post("/revenue_type/update", summary="更新营收类型", response_model=Schemas.RevenueTypeUpdateRes)
def revenue_type_update(req: Schemas.RevenueTypeUpdateReq, db: Session = Depends(get_db)):
item = Crud.revenue_type_update(db, req)
return Schemas.RevenueTypeUpdateRes(**item.to_dict())
@router.post("/revenue_type/get", summary="获取营收类型", response_model=Schemas.RevenueTypeGetRes)
def revenue_type_get(req: Schemas.RevenueTypeGetReq, db: Session = Depends(get_db)):
item = Crud.revenue_type_get(db, req.id)
if not item:
raise HTTPException(detail="未查询到信息", status_code=404)
return Schemas.RevenueTypeGetRes(**item.to_dict())
@router.post("/revenue_type/query", summary="查询营收类型", response_model=Schemas.RevenueTypeQueryRes)
def revenue_type_query(req: Schemas.RevenueTypeQueryReq, db: Session = Depends(get_db)):
count, query = Crud.revenue_type_query(db, req)
items = [Schemas.RevenueTypeInfo(**item.to_dict()) for item in query]
return Schemas.RevenueTypeQueryRes(count=count, items=items)
@router.post("/revenue_type/query_common", summary="通用查询营收类型",
response_model=Schemas.RevenueTypeQueryRes)
def revenue_type_query_common(req: QueryParams, db: Session = Depends(get_db)):
count, query = query_common(db, RevenueType, req)
items = [Schemas.RevenueTypeInfo(**item.to_dict()) for item in query]
return Schemas.RevenueTypeQueryRes(count=count, items=items)
#########

View File

@ -0,0 +1,59 @@
from datetime import datetime, date
from pydantic import BaseModel
from typing import Optional, List
class RevenueTypeInfo(BaseModel):
id: Optional[int]
name: Optional[str]
class RevenueTypeAddInfo(BaseModel):
name: Optional[str]
class RevenueTypeAddReq(RevenueTypeAddInfo):
pass
class RevenueTypeAddRes(RevenueTypeInfo):
pass
class RevenueTypeUpdateInfo(RevenueTypeInfo):
pass
class RevenueTypeUpdateReq(RevenueTypeUpdateInfo):
pass
class RevenueTypeUpdateRes(RevenueTypeInfo):
pass
class RevenueTypeQuery(RevenueTypeInfo):
pass
class RevenueTypeQueryReq(RevenueTypeQuery):
pass
class RevenueTypeGetReq(BaseModel):
id: int
class RevenueTypeGetRes(RevenueTypeInfo):
pass
class RevenueTypeQueryRes(BaseModel):
count: int
items: List[RevenueTypeInfo]
class RevenueTypeDeleteReq(BaseModel):
id: int
#######################

View File

@ -1,5 +1,7 @@
from fastapi import APIRouter, Depends, HTTPException
from .DailyPdfFile import Router as DailyPdfFileRouter
from .Finance import Router as FinanceRouter
from .RevenueType import Router as RevenueTypeRouter
router = APIRouter(prefix="/api/daily/daily")
router.include_router(DailyPdfFileRouter.router)
router.include_router(FinanceRouter.router)
router.include_router(RevenueTypeRouter.router)