import requests from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from APPData.Crud import CompanyCrud, ShareholderCrud from Utils.DataBase.MongoHelperUtils import get_mongodb, get_tyc_mongodb from Utils.DataBase.SqlAlchemyUtils import get_db from Utils.TycApi.CommonUtil import CommonUtils from Utils.TycApi.Configure import DB_GSBJ from Utils.TycApi.Shareholder import get_shareholer_data router = APIRouter( tags=["股东信息"], prefix="/api/shareholder" ) @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_v2_test", 'C3.2_股东信息', {"企业ID": cid}, []) if search_data: return {"info": "Data already exists", "Datail": search_data} # 获取企业类型,如果不存在则拉取工商信息 company_type = mongodb.find_data("WR_DataBase_v2_test", '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_v2_test", '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_v2_test", '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_v2_test", '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