341 lines
16 KiB
Python
341 lines
16 KiB
Python
import json
|
|
|
|
import requests
|
|
import xlrd
|
|
import cpca
|
|
from DBHelper.MongoHelperInstance import DB_GUA, DB_TYC
|
|
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
|
|
IndustryDistribution, GuaranteedBalanceDistribution, GuaranteeInfo
|
|
from Modules.Company.CompanyUtils import CompanyUtils, ExcelSheetParser
|
|
from Utils.ObjUtil import SpecObject
|
|
|
|
|
|
class BasicBusinessInfoImpl(object):
|
|
|
|
@staticmethod
|
|
def parse_excel_and_create_company(file):
|
|
"""解析excel模板数据 创建公司信息"""
|
|
|
|
new_cid = CompanyUtils.make_new_cid()
|
|
work_book = xlrd.open_workbook(file_contents=file.read())
|
|
|
|
basic_business_info = BasicBusinessInfo()
|
|
financial_data_list = list()
|
|
customer_info_list = list()
|
|
guarantee_info_list = list()
|
|
records_dict = dict()
|
|
region_distribution_list = list()
|
|
industry_distribution_list = list()
|
|
guarantee_distribution_list = list()
|
|
|
|
for sheet in work_book.sheets():
|
|
|
|
if sheet.name == '企业信息':
|
|
|
|
def get_basic(name):
|
|
# 获取tyc工商信息
|
|
def basic_info_api():
|
|
"""工商信息接口"""
|
|
url = "http://api.fecribd.com/api/tyc/basic_info"
|
|
headers = {'token': 'uzdq51N4!I0%HY4sCaQ!aeCSIDIVIdAM'}
|
|
parameter = {"企业名称": name}
|
|
res = requests.post(url=url, headers=headers, data=json.dumps(parameter))
|
|
return res
|
|
|
|
record = DB_TYC.find_single_data(
|
|
'公司背景',
|
|
'基本信息',
|
|
{"企业名称": name},
|
|
['企业名称', '基本信息']
|
|
)
|
|
if not record:
|
|
res = basic_info_api()
|
|
if res.status_code == 200:
|
|
record = DB_TYC.find_single_data(
|
|
'公司背景',
|
|
'基本信息',
|
|
{"企业名称": name},
|
|
['企业名称', '基本信息']
|
|
)
|
|
return record
|
|
|
|
data = ExcelSheetParser(sheet=sheet).parse_sheet1()
|
|
basic_data = get_basic(data['企业名称'])
|
|
basic_business_info.cid = new_cid
|
|
basic_business_info.set_instance(data=data)
|
|
|
|
elif sheet.name == '高管股东信息':
|
|
executives, shareholders = ExcelSheetParser(sheet=sheet).parse_sheet2()
|
|
|
|
basic_business_info.shareholder_information = list()
|
|
basic_business_info.executive_information = list()
|
|
|
|
for item in executives:
|
|
executive = SpecObject.set_specify_instance(
|
|
instance=BasicBusinessInfo.ExecutiveInformation,
|
|
data=item
|
|
)
|
|
basic_business_info.executive_information.append(executive)
|
|
|
|
for item in shareholders:
|
|
shareholder = SpecObject.set_specify_instance(
|
|
instance=BasicBusinessInfo.ShareholderInformation,
|
|
data=item
|
|
)
|
|
basic_business_info.shareholder_information.append(shareholder)
|
|
|
|
elif sheet.name == '客户信息':
|
|
# 企业信息
|
|
data = ExcelSheetParser(sheet=work_book.sheet_by_name('企业信息')).parse_sheet1()
|
|
# 客户信息
|
|
client_info = ExcelSheetParser(sheet=work_book.sheet_by_name('客户信息')).parse_sheet4()
|
|
# 区域分布
|
|
area_info = ExcelSheetParser(sheet=work_book.sheet_by_name('区域分布')).parse_sheet5()
|
|
# 行业分布
|
|
industry_info = ExcelSheetParser(sheet=work_book.sheet_by_name('行业分布')).parse_sheet5()
|
|
# 担保金额分布
|
|
guarantee_amount = ExcelSheetParser(sheet=work_book.sheet_by_name('担保金额分布')).parse_sheet6()
|
|
|
|
def tyc_basic_info():
|
|
"""调用天眼查api保存工商信息"""
|
|
def tyc_api(name):
|
|
"""天眼查接口调用"""
|
|
url = "http://api.fecribd.com/api/tyc/basic_info"
|
|
headers = {'token': 'uzdq51N4!I0%HY4sCaQ!aeCSIDIVIdAM'}
|
|
parameter = {"企业名称": name}
|
|
res = requests.post(url=url, headers=headers, data=json.dumps(parameter))
|
|
return res
|
|
|
|
for client in client_info:
|
|
company = client['客户名称']
|
|
# 查询数据是否存在
|
|
record_ = DB_TYC.find_single_data(
|
|
'公司背景',
|
|
'基本信息',
|
|
{"企业名称": company},
|
|
['企业名称', '基本信息']
|
|
)
|
|
if not record_:
|
|
# 不存在则调用接口抓取
|
|
result = tyc_api(company)
|
|
if result.status_code == 200:
|
|
record = DB_TYC.find_single_data(
|
|
'公司背景',
|
|
'基本信息',
|
|
{"企业名称": company},
|
|
['企业名称', '基本信息']
|
|
)
|
|
records_dict[record['企业名称']] = record['基本信息']
|
|
else:
|
|
records_dict[record_['企业名称']] = record_['基本信息']
|
|
|
|
def history_data():
|
|
"""历史数据"""
|
|
# 客户信息
|
|
for client in client_info:
|
|
customer_info = CustomerInfo()
|
|
customer_info.cid = new_cid
|
|
customer_info.company_name = basic_business_info.company_name
|
|
customer_info.set_instance(data=client)
|
|
customer_info_list.append(customer_info)
|
|
# 区域分布
|
|
for area in area_info:
|
|
region_distribution = RegionalDistribution()
|
|
region_distribution.cid = new_cid
|
|
region_distribution.company_name = basic_business_info.company_name
|
|
region_distribution.set_instance(data=area)
|
|
region_distribution_list.append(region_distribution)
|
|
# 行业分布
|
|
for industry in industry_info:
|
|
industry_distribution = IndustryDistribution()
|
|
industry_distribution.cid = new_cid
|
|
industry_distribution.company_name = basic_business_info.company_name
|
|
industry_distribution.set_instance(data=industry)
|
|
industry_distribution_list.append(industry_distribution)
|
|
# 担保金额分布
|
|
for amount in guarantee_amount:
|
|
guarantee_distribution = GuaranteedBalanceDistribution()
|
|
guarantee_distribution.cid = new_cid
|
|
guarantee_distribution.company_name = basic_business_info.company_name
|
|
guarantee_distribution.report_period = amount["报告期"]
|
|
guarantee_distribution.guarantee_account = SpecObject.set_specify_instance(
|
|
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
|
|
data=amount["担保户数"]
|
|
)
|
|
guarantee_distribution.guarantee_number = SpecObject.set_specify_instance(
|
|
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
|
|
data=amount["担保笔数"]
|
|
)
|
|
guarantee_distribution.guarantee_liability_balance = SpecObject.set_specify_instance(
|
|
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
|
|
data=amount["担保责任余额"]
|
|
)
|
|
guarantee_distribution_list.append(guarantee_distribution)
|
|
|
|
def guarantee_data():
|
|
"""担保信息"""
|
|
for info in client_info:
|
|
guarantee_info = GuaranteeInfo()
|
|
guarantee_info.guarantee_id = CompanyUtils.make_new_cid()
|
|
guarantee_info.warrantee = info['客户名称']
|
|
guarantee_info.guarantee_type = '融资担保'
|
|
guarantee_info.project_name = records_dict[info['客户名称']]['alias']+(info['担保起始日'].replace('-', ''))
|
|
guarantee_info.guarantee_method = '银行借款担保'
|
|
guarantee_info.guarantee_balance = info['在保余额']
|
|
guarantee_info.release_amount = 0
|
|
guarantee_info.liability_guarantee_balance = info['融资担保责任余额']
|
|
guarantee_info.guarantee_start_date = info['担保起始日']
|
|
guarantee_info.guarantee_end_date = info['担保截止日']
|
|
if '公司' in info['客户名称']:
|
|
loc_list = list()
|
|
loc_list.append(info['客户名称'])
|
|
df = cpca.transform(loc_list)
|
|
guarantee_info.province = df.loc[0, '省']
|
|
city = df.loc[0, '市'] if df.loc[0, '市'] is not None else records_dict[info['客户名称']]['city']
|
|
guarantee_info.city = city
|
|
else:
|
|
guarantee_info.province = data['所在省份']
|
|
guarantee_info.city = data['所在城市']
|
|
guarantee_info.industry = records_dict[info['客户名称']]['industry']
|
|
guarantee_info.remark = None
|
|
guarantee_info_list.append(guarantee_info)
|
|
|
|
def __main__():
|
|
tyc_basic_info()
|
|
history_data()
|
|
guarantee_data()
|
|
|
|
__main__()
|
|
|
|
elif sheet.name == '资产负债表':
|
|
# 数据源
|
|
balance = ExcelSheetParser(sheet=work_book.sheet_by_name('资产负债表')).parse_sheet7()
|
|
income = ExcelSheetParser(sheet=work_book.sheet_by_name('利润表')).parse_sheet8()
|
|
appendix = ExcelSheetParser(sheet=work_book.sheet_by_name('补充数据表')).parse_sheet3()
|
|
|
|
length = len(balance)
|
|
|
|
def balance_script(sheet_data):
|
|
"""资产负债表"""
|
|
# 各类对象key
|
|
bs_obj = financial_data.BalanceSheet()
|
|
current_assets_dict = [_item for _item in bs_obj.CurrentAssets.fields_map.values()]
|
|
non_current_assets_dict = [_item for _item in bs_obj.NonCurrentAssets.fields_map.values()]
|
|
current_liabilities_dict = [_item for _item in bs_obj.CurrentLiabilities.fields_map.values()]
|
|
non_current_liabilities_dict = [_item for _item in bs_obj.NonCurrentLiabilities.fields_map.values()]
|
|
owner_equity_dict = [_item for _item in bs_obj.OwnerEquity.fields_map.values()]
|
|
|
|
# 资产负债表分组
|
|
current_assets_dict_ = dict()
|
|
non_current_assets_dict_ = dict()
|
|
current_liabilities_dict_ = dict()
|
|
non_current_liabilities_dict_ = dict()
|
|
owner_equity_dict_ = dict()
|
|
|
|
for key, value in sheet_data.items():
|
|
if key in current_assets_dict:
|
|
current_assets_dict_[key] = value
|
|
elif key in non_current_assets_dict:
|
|
non_current_assets_dict_[key] = value
|
|
elif key in current_liabilities_dict:
|
|
current_liabilities_dict_[key] = value
|
|
elif key in non_current_liabilities_dict:
|
|
non_current_liabilities_dict_[key] = value
|
|
elif key in owner_equity_dict:
|
|
owner_equity_dict_[key] = value
|
|
|
|
bs_obj.current_assets = SpecObject.set_specify_instance(
|
|
instance=bs_obj.CurrentAssets,
|
|
data=current_assets_dict_
|
|
)
|
|
bs_obj.non_current_assets = SpecObject.set_specify_instance(
|
|
instance=bs_obj.NonCurrentAssets,
|
|
data=non_current_assets_dict_
|
|
)
|
|
bs_obj.total_assets = sheet_data['资产总计']
|
|
bs_obj.current_liabilities = SpecObject.set_specify_instance(
|
|
instance=bs_obj.CurrentLiabilities,
|
|
data=current_liabilities_dict_
|
|
)
|
|
bs_obj.non_current_liabilities = SpecObject.set_specify_instance(
|
|
instance=bs_obj.NonCurrentLiabilities,
|
|
data=non_current_liabilities_dict_
|
|
)
|
|
bs_obj.total_liabilities = sheet_data['负债合计']
|
|
bs_obj.owner_equity = SpecObject.set_specify_instance(
|
|
instance=bs_obj.OwnerEquity,
|
|
data=owner_equity_dict_
|
|
)
|
|
return bs_obj
|
|
|
|
def income_script(sheet_data):
|
|
"""利润表"""
|
|
sheet_data.pop('报告期')
|
|
ic_obj = SpecObject.set_specify_instance(
|
|
instance=financial_data.IncomeSheet,
|
|
data=sheet_data
|
|
)
|
|
return ic_obj
|
|
|
|
def appendix_script(sheet_data):
|
|
"""补充数据表"""
|
|
sheet_data.pop('报告期')
|
|
ap_obj = SpecObject.set_specify_instance(
|
|
instance=financial_data.AppendixSheet,
|
|
data=sheet_data
|
|
)
|
|
return ap_obj
|
|
|
|
for num in range(length):
|
|
# 财务数据obj
|
|
financial_data = FinancialData()
|
|
financial_data.cid = new_cid
|
|
financial_data.company_name = basic_business_info.company_name
|
|
financial_data.report_period = balance[num]['报告期']
|
|
financial_data.balance_sheet = balance_script(balance[num])
|
|
financial_data.income_sheet = income_script(income[num])
|
|
financial_data.appendix_sheet = appendix_script(appendix[num])
|
|
financial_data_list.append(financial_data)
|
|
|
|
DB_GUA.insert_single_data(
|
|
"企业数据",
|
|
"工商信息",
|
|
basic_business_info.fields_toggle()
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"企业数据",
|
|
"财务数据",
|
|
[item.fields_toggle() for item in financial_data_list]
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"历史数据",
|
|
"客户信息",
|
|
[item.fields_toggle() for item in customer_info_list]
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"历史数据",
|
|
"担保区域分布",
|
|
[item.fields_toggle() for item in region_distribution_list]
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"历史数据",
|
|
"担保行业分布",
|
|
[item.fields_toggle() for item in industry_distribution_list]
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"历史数据",
|
|
"担保金额分布",
|
|
[item.fields_toggle() for item in guarantee_distribution_list]
|
|
)
|
|
|
|
DB_GUA.insert_many_data(
|
|
"企业数据",
|
|
"担保数据",
|
|
[item.fields_toggle() for item in guarantee_info_list]
|
|
)
|