财务报表
This commit is contained in:
parent
11c0f9a1f8
commit
585b4264b3
|
@ -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
|
||||
|
||||
|
||||
################
|
|
@ -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
|
|
@ -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)
|
||||
|
||||
#########
|
|
@ -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
|
||||
|
||||
#######################
|
|
@ -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
|
||||
|
||||
|
||||
################
|
|
@ -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
|
|
@ -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)
|
||||
|
||||
#########
|
|
@ -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
|
||||
|
||||
#######################
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue