diff --git a/App/Crud/RatingFlowCrud.py b/App/Crud/RatingFlowCrud.py index 8ec005d..ae44b09 100644 --- a/App/Crud/RatingFlowCrud.py +++ b/App/Crud/RatingFlowCrud.py @@ -82,3 +82,4 @@ def save_rating_flow_node(node_id: str, data: dict, db: Session, mongodb: MongoH db.commit() return node_item.rating_process_id + diff --git a/App/Router/RatingFlowRouter.py b/App/Router/RatingFlowRouter.py index 372c345..8944147 100644 --- a/App/Router/RatingFlowRouter.py +++ b/App/Router/RatingFlowRouter.py @@ -4,6 +4,7 @@ from sqlalchemy.orm import Session from App.Crud import RatingFlowCrud as Crud from App.Schemas import RatingFlowSchema from Utils.Authentication.TokenUtil import decode_token +from Utils.Common.RegisterUtils import request_to_get, request_to_post from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper from Utils.DataBase.SqlAlchemyUtils import get_db @@ -68,8 +69,67 @@ def func(schema: RatingFlowSchema.SaveRatingFlowNodeReqBody, db: Session = Depen @router.post("/import/input_data", summary="导入填报数据", tags=["评级节点"]) -def func(schema): - pass +def func(schema: RatingFlowSchema.GetRatingDataReqBody, db: Session = Depends(get_db), + mongodb: MongoHelper = Depends(get_mongodb)): + score_card_id = schema.scorecard_id + + # 获取打分卡配置 + score_card_url = 'http://test.fecribd.com:5004/api/model_store/scorecard/view?_id={}'.format(score_card_id) + res = request_to_get(score_card_url) + if not res: + raise HTTPException(status_code=400, detail="ScoreCard Not Found") + + data_table = res.get('data_table') + if not data_table: + raise HTTPException(status_code=400, detail="DataTable Not Found") + + # 获取填报数据 + data_url = 'http://test.fecribd.com:5001/api/query/fiancial_data' + data = {"cid": schema.company_id, "report_date": schema.report_date} + result = request_to_post(data_url, data) + if not result: + raise HTTPException(status_code=400, detail="Data Not Found") + + # 整合结果 + data_result = dict() + for name, content in data_table.items(): + if name == '资产负债表': + balance = list() + for sheet in result['balance_sheet_data']: + insert = dict() + for cont in content: + insert['报告期'] = sheet['截止日期'] + try: + insert[cont] = sheet[cont] + except KeyError: + insert[cont] = None + balance.append(insert) + data_result['资产负债表'] = balance + if name == '利润表': + income = list() + for sheet in result['income_sheet_data']: + insert = dict() + for cont in content: + insert['报告期'] = sheet['截止日期'] + try: + insert[cont] = sheet[cont] + except KeyError: + insert[cont] = None + income.append(insert) + data_result['利润表'] = income + if name == '现金流量表': + cashflow = list() + for sheet in result['cashflow_sheet_data']: + insert = dict() + for cont in content: + insert['报告期'] = sheet['截止日期'] + try: + insert[cont] = sheet[cont] + except KeyError: + insert[cont] = None + cashflow.append(insert) + data_result['现金流量表'] = cashflow + return data_result @router.post("/import/index_data", summary="导入定性定量指标", tags=["评级节点"]) diff --git a/App/Schemas/RatingFlowSchema.py b/App/Schemas/RatingFlowSchema.py index 1c7e2b0..e7b8fff 100644 --- a/App/Schemas/RatingFlowSchema.py +++ b/App/Schemas/RatingFlowSchema.py @@ -52,3 +52,10 @@ class CreateParticipantReqBody(BaseModel): class SaveRatingFlowNodeReqBody(BaseModel): node_id: str = None data: dict = {} + + +class GetRatingDataReqBody(BaseModel): + company_id: str = None + scorecard_id: str = None + report_date: list = None + diff --git a/Utils/Common/RegisterUtils.py b/Utils/Common/RegisterUtils.py new file mode 100644 index 0000000..0bf4a6b --- /dev/null +++ b/Utils/Common/RegisterUtils.py @@ -0,0 +1,23 @@ +import json + +import requests + + +TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2luZm8iOnsidWlkIjoiVUlEMDAwMSIsImVtYWlsIjoiZmVjcmliZEBmZWNyLmNvbS5jbiIsIm5hbWUiOiJyb290Iiwicm9sZSI6Ilx1N2JhMVx1NzQwNlx1NTQ1OCIsImRlcGFydG1lbnQiOiJcdTY1NzBcdTViNTdcdTUzMTZcdTkwZTgiLCJyb2xlX2lkIjoiUk9MRTAxIiwiZGVwYXJ0bWVudF9pZCI6IkQwMDEifSwiZXhwIjoxNjgzNDc2OTA4fQ.8girdw3n0WDktRuK0aSgGor10eb11nIFvRJqUtPZum4" +HEADERS = {"token": TOKEN} + + +def request_to_get(url): + res = requests.get(url=url, headers=HEADERS) + if res.status_code == 200: + return json.loads(res.text) + else: + return False + + +def request_to_post(url, data): + res = requests.post(url=url, headers=HEADERS, data=json.dumps(data)) + if res.status_code == 200: + return json.loads(res.text) + else: + return False diff --git a/main.py b/main.py index 82ba6ac..e2157b2 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,4 @@ +import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware @@ -25,3 +26,7 @@ app.include_router(RatingFlowRouter.router) # app.include_router(Router.IndividualCreditRouter.router) # app.include_router(Router.ExternalSupportRouter.router) # app.include_router(Router.SubjectCreditRouter.router) + + +if __name__ == "__main__": + uvicorn.run(app, host="127.0.0.1", port=8011) \ No newline at end of file