diff --git a/APPData/Crud/CompanyCrud.py b/APPData/Crud/CompanyCrud.py index b8ce655..bd877fb 100644 --- a/APPData/Crud/CompanyCrud.py +++ b/APPData/Crud/CompanyCrud.py @@ -52,3 +52,12 @@ def get_company_total(db: Session, name, page: int = 0, pagesize: int = 10): "detail": detail } + +def search_all_data(db, _id: str): + company_obj = db.query(Company).filter_by(id=_id).first() + return company_obj.dict() + + +def search_financial_data(db, _id: str, report_date: list): + company_obj = db.query(Company).filter_by(id=_id).first() + return company_obj.financial_dict(report_date) diff --git a/APPData/Model/CompanyModel.py b/APPData/Model/CompanyModel.py index fd11315..4365f7c 100644 --- a/APPData/Model/CompanyModel.py +++ b/APPData/Model/CompanyModel.py @@ -21,6 +21,24 @@ class Company(Base): income_sheet_data = relationship("Income", backref="data_company") cashflow_sheet_data = relationship("CashFlow", backref="data_company") + def dict(self): + __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} + __dict.update({"business_data": None if not self.business_data else self.business_data.dict()}) + __dict.update({"shareholder_data": None if not self.shareholder_data else self.shareholder_data.dict()}) + __dict.update({"lawsuit_data": [lawsuit.list() for lawsuit in list(self.lawsuit_data)]}) + __dict.update({"dishonest_data": [dishonest.list() for dishonest in list(self.dishonest_data)]}) + __dict.update({"balance_sheet_data": [balance.list() for balance in list(self.balance_sheet_data)]}) + __dict.update({"income_sheet_data": [income.list() for income in list(self.income_sheet_data)]}) + __dict.update({"cashflow_sheet_data": [cashflow.list() for cashflow in list(self.cashflow_sheet_data)]}) + return __dict + + def financial_dict(self, report_date): + __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} + __dict.update({"balance_sheet_data": [b for b in [balance.list() for balance in list(self.balance_sheet_data)] if b.get('截止日期') in report_date]}) + __dict.update({"income_sheet_data": [i for i in [income.list() for income in list(self.income_sheet_data)] if i.get('截止日期') in report_date]}) + __dict.update({"cashflow_sheet_data": [c for c in [cashflow.list() for cashflow in list(self.cashflow_sheet_data)] if c.get('截止日期') in report_date]}) + return __dict + # 工商信息 class Business(Base): @@ -33,7 +51,7 @@ class Business(Base): def dict(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C3.1_工商信息", _id=self.obj_id) - return item.get("data") + return item # 股东信息 @@ -47,7 +65,7 @@ class Shareholder(Base): def dict(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C3.2_股东信息", _id=self.obj_id) - return item.get("data") + return item.get("股东列表") # 法律诉讼 @@ -61,7 +79,8 @@ class Lawsuit(Base): def list(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C9.6_法律诉讼", _id=self.obj_id) - return item.get("data") + item.pop('企业ID') + return item # 失信人 @@ -75,7 +94,8 @@ class Dishonest(Base): def list(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C9.5_失信人", _id=self.obj_id) - return item.get("data") + item.pop('企业ID') + return item # 资产负债表 @@ -90,7 +110,8 @@ class Balance(Base): def list(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C6.1_资产负债表", _id=self.obj_id) - return item.get("data") + item.pop('企业ID') + return item # 利润表 @@ -105,7 +126,8 @@ class Income(Base): def list(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C6.2_利润表", _id=self.obj_id) - return item.get("data") + item.pop('企业ID') + return item # 现金流量表 @@ -120,7 +142,8 @@ class CashFlow(Base): def list(self): mongodb = get_mongodb() item = mongodb.find_data_by_id(dbname="WR_DataBase_v2_test", sheet="C6.3_现金流量表", _id=self.obj_id) - return item.get("data") + item.pop('企业ID') + return item Base.metadata.create_all(bind=engine) diff --git a/APPData/Router/QuerySummaryRouter.py b/APPData/Router/QuerySummaryRouter.py new file mode 100644 index 0000000..4feebb6 --- /dev/null +++ b/APPData/Router/QuerySummaryRouter.py @@ -0,0 +1,31 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session + +from APPData.Crud import CompanyCrud +from APPData.Schemas import CompanySchemas +from Utils.DataBase.SqlAlchemyUtils import get_db + +router = APIRouter( + tags=["查询汇总"], + prefix="/api/query" +) + + +@router.get("/all_data", summary="查询企业所有数据") +def func01(cid: str, db: Session = Depends(get_db)): + # 根据cid查询企业是否存在 + data = CompanyCrud.get_company_by_id(db=db, _id=cid) + if not data: + raise HTTPException(status_code=404, detail="Company Not Found") + result = CompanyCrud.search_all_data(db=db, _id=cid) + return result + + +@router.post("/fiancial_data", summary="查询企业财务数据") +def func02(req_body: CompanySchemas.FinancialSearch, db: Session = Depends(get_db)): + # 根据cid查询企业是否存在 + data = CompanyCrud.get_company_by_id(db=db, _id=req_body.cid) + if not data: + raise HTTPException(status_code=404, detail="Company Not Found") + result = CompanyCrud.search_financial_data(db=db, _id=req_body.cid, report_date=req_body.report_date) + return result diff --git a/APPData/Schemas/CompanySchemas.py b/APPData/Schemas/CompanySchemas.py index 7066271..65b571f 100644 --- a/APPData/Schemas/CompanySchemas.py +++ b/APPData/Schemas/CompanySchemas.py @@ -11,3 +11,8 @@ class MacroSearch(BaseModel): provinces: str = '四川省' region: str = '成都市' year: int = 2021 + + +class FinancialSearch(BaseModel): + cid: str = 'CID00000002' + report_date: list = ['2021-12-31', '2020-12-31', '2019-12-31'] \ No newline at end of file diff --git a/main.py b/main.py index 9613b2b..9cc3af7 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from APPData.Router import CompanyRouter, BusinessRouter, ShareholderRouter, LawsuitRouter, DishonestRouter, \ - BalanceSheetRouter, IncomeSheetRouter, CashFlowStatementRouter, MacroDataRouter + BalanceSheetRouter, IncomeSheetRouter, CashFlowStatementRouter, MacroDataRouter, QuerySummaryRouter app = FastAPI( title="数据平台", @@ -28,6 +28,7 @@ app.include_router(BalanceSheetRouter.router) app.include_router(IncomeSheetRouter.router) app.include_router(CashFlowStatementRouter.router) app.include_router(MacroDataRouter.router) +app.include_router(QuerySummaryRouter.router) if __name__ == "__main__":