dataplatform/APPData/Router/ShareholderRouter.py

185 lines
8.5 KiB
Python

import requests
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from APPData.Crud import CompanyCrud, ShareholderCrud
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import get_mongodb, get_tyc_mongodb
from Utils.DataBase.SqlAlchemyUtils import get_db
from Utils.TycApi.CommonUtil import CommonUtils, TOKEN
from Utils.TycApi.Configure import DB_GSBJ
from Utils.TycApi.Shareholder import get_shareholer_data
router = APIRouter(
tags=["股东信息"],
prefix="/api/wide_data/shareholder",
dependencies=[Depends(rbac)]
)
@router.post("/pull", summary="拉取数据")
def func01(name: str, db: Session = Depends(get_db)):
mongodb = get_mongodb()
tyc_mongodb = get_tyc_mongodb()
# 根据name查询企业是否存在
data = CompanyCrud.get_company_by_name(db=db, name=name)
if not data:
# 不能存在新建企业再返回cid
data = CompanyCrud.create_company_by_name(db=db, name=name)
cid = data.id
# 查询数据库是否有此条数据
search_data = mongodb.find_data("WR_DataBase", 'C3.2_股东信息', {"企业ID": cid}, [])
if search_data:
return {"info": "Data already exists", "Datail": search_data}
# 获取企业类型,如果不存在则拉取工商信息
company_type = mongodb.find_data("WR_DataBase", 'C3.1_工商信息', {"企业ID": cid}, ["企业类型"])
if not company_type:
url = "http://127.0.0.1:8009/api/business/pull?name={}"
url = url.format(name)
# headers = {"token": token}
res = requests.get(url=url)
if res.status_code == 200:
company_type = mongodb.find_data("WR_DataBase", 'C3.1_工商信息', {"企业ID": cid}, ["企业类型"])
else:
raise HTTPException(status_code=202, detail="Failed to get company type")
company_type = company_type.get('企业类型', None)
tyc_res = get_shareholer_data(name, company_type)
if tyc_res != 'success':
raise HTTPException(status_code=401, detail=tyc_res)
# 查询天眼查数据库
if '上市' in company_type:
tyc_data = tyc_mongodb.find_data(DB_GSBJ, '十大股东', {"企业名称": name}, ["十大股东"])
tyc_data = tyc_data.get('十大股东', list())
else:
tyc_data = tyc_mongodb.find_data(DB_GSBJ, '企业股东', {"企业名称": name}, ["企业股东"])
tyc_data = tyc_data.get('企业股东', dict())
if not tyc_data:
raise HTTPException(status_code=401, detail='Data query failed')
data = dict()
data['企业ID'] = cid
data['企业名称'] = name
data['股东列表'] = list()
data['更新时间'] = CommonUtils.get_current_time()
if '上市' in company_type:
holder_list = tyc_data.get('holderList', list())
for item in holder_list:
shareholer = dict()
shareholer['股东ID'] = item.get('id', None)
shareholer['股东名称'] = item.get('name', None)
shareholer['股东类型'] = item.get('shareType', None)
shareholer['股东性质'] = None
shareholer['持股比例'] = item.get('proportion', None)
shareholer['持股数量'] = item.get('holdingNum', None)
shareholer['认缴出资日期'] = CommonUtils.time_stamp(item.get('publishDate', None))
data['股东列表'].append(shareholer)
else:
holder_list = tyc_data.get('result', list())
for item in holder_list:
shareholer = dict()
shareholer['股东ID'] = item.get('id', None)
shareholer['股东名称'] = item.get('name', None)
shareholer['股东类型'] = item.get('type', None)
shareholer['股东性质'] = None
capital_list = item.get('capital', list())
if capital_list:
shareholer['持股比例'] = capital_list[0].get('percent', None)
shareholer['认缴出资额'] = capital_list[0].get('amomon', None)
shareholer['认缴出资日期'] = capital_list[0].get('time', None)
else:
shareholer['持股比例'] = None
shareholer['认缴出资额'] = None
shareholer['认缴出资日期'] = None
data['股东列表'].append(shareholer)
# 保存到数据到data_business
ShareholderCrud.create_shareholder_by_id(db=db, mongodb=mongodb, _id=cid, content=data)
mongodb.client.close()
tyc_mongodb.client.close()
return {"info": "Pull succeeded"}
@router.post("/update", summary="更新数据")
def func02(cid: str, db: Session = Depends(get_db)):
mongodb = get_mongodb()
tyc_mongodb = get_tyc_mongodb()
# 查询企业是否存在
db_item = CompanyCrud.get_company_by_id(db, _id=cid)
if not db_item:
raise HTTPException(status_code=204, detail="Company Not Found")
name = db_item.name
# 获取企业类型,如果不存在则拉取工商信息
company_type = mongodb.find_data("WR_DataBase", 'C3.1_工商信息', {"企业ID": cid}, ["企业类型"])
if not company_type:
url = "http://test.fecribd.com:5001/api/business/pull?name={}"
url = url.format(name)
headers = {"token": TOKEN}
res = requests.get(url=url, headers=headers)
if res.status_code == 200:
company_type = mongodb.find_data("WR_DataBase", 'C3.1_工商信息', {"企业ID": cid}, ["企业类型"])
else:
raise HTTPException(status_code=401, detail="Failed to get company type")
company_type = company_type.get('企业类型', None)
tyc_res = get_shareholer_data(name, company_type)
if tyc_res != 'success':
raise HTTPException(status_code=401, detail=tyc_res)
# 查询天眼查数据库
if '上市' in company_type:
tyc_data = tyc_mongodb.find_data(DB_GSBJ, '十大股东', {"企业名称": name}, ["十大股东"])
tyc_data = tyc_data.get('十大股东', list())
else:
tyc_data = tyc_mongodb.find_data(DB_GSBJ, '企业股东', {"企业名称": name}, ["企业股东"])
tyc_data = tyc_data.get('企业股东', dict())
if not tyc_data:
raise HTTPException(status_code=401, detail='Data query failed')
data = dict()
data['企业ID'] = cid
data['企业名称'] = name
data['股东列表'] = list()
data['更新时间'] = CommonUtils.get_current_time()
if '上市' in company_type:
holder_list = tyc_data.get('holderList', list())
for item in holder_list:
shareholer = dict()
shareholer['股东ID'] = item.get('id', None)
shareholer['股东名称'] = item.get('name', None)
shareholer['股东类型'] = item.get('shareType', None)
shareholer['股东性质'] = None
shareholer['持股比例'] = item.get('proportion', None)
shareholer['持股数量'] = item.get('holdingNum', None)
shareholer['认缴出资日期'] = CommonUtils.time_stamp(item.get('publishDate', None))
data['股东列表'].append(shareholer)
else:
holder_list = tyc_data.get('result', list())
for item in holder_list:
shareholer = dict()
shareholer['股东ID'] = item.get('id', None)
shareholer['股东名称'] = item.get('name', None)
shareholer['股东类型'] = item.get('type', None)
shareholer['股东性质'] = None
capital_list = item.get('capital', list())
if capital_list:
shareholer['持股比例'] = capital_list[0].get('percent', None)
shareholer['认缴出资额'] = capital_list[0].get('amomon', None)
shareholer['认缴出资日期'] = capital_list[0].get('time', None)
else:
shareholer['持股比例'] = None
shareholer['认缴出资额'] = None
shareholer['认缴出资日期'] = None
data['股东列表'].append(shareholer)
# 保存到数据到data_business
ShareholderCrud.create_shareholder_by_id(db=db, mongodb=mongodb, _id=cid, content=data)
mongodb.client.close()
tyc_mongodb.client.close()
return {"info": "Update succeeded"}
@router.get("/view", summary="查看数据")
def func03(cid: str, db: Session = Depends(get_db)):
mongodb = get_mongodb()
db_item = CompanyCrud.get_company_by_id(db, _id=cid)
if not db_item:
raise HTTPException(status_code=404, detail="Company Not Found")
# 根据_id查询mongodb数据库
data = ShareholderCrud.find_shareholder_by_id(db=db, mongodb=mongodb, _id=cid)
return data