305 lines
9.4 KiB
Python
305 lines
9.4 KiB
Python
import copy
|
||
import time
|
||
|
||
from RatingData.db import FIND_DATA_N_TYC, FIND_SINGLE_DATA_BY_REQ, FIND_ALL_DATA_BY_REQ
|
||
from RatingData.static.province_map import p_map
|
||
import pandas as pd
|
||
|
||
|
||
def modify_unit(param):
|
||
"""
|
||
金额单位从元改为万元
|
||
Parameters:
|
||
param: 金额数据
|
||
Returns:
|
||
result: 单位为万元的金额数据
|
||
"""
|
||
money = round(param/10000, 2)
|
||
return str(money)
|
||
|
||
|
||
def judge_list(param):
|
||
"""
|
||
判断列表中是否有None,
|
||
如果有置为-
|
||
Parameters:
|
||
param: list列表
|
||
Returns:
|
||
result: 没有None的list
|
||
"""
|
||
df = pd.DataFrame(param)
|
||
df = df.fillna('-')
|
||
df = df[0].apply(lambda x: round(x/10000, 2) if isinstance(x, float) else x)
|
||
df = df.to_list()
|
||
df = [str(x) for x in df]
|
||
return df
|
||
|
||
|
||
def calculate_growth_rate(param1, param2):
|
||
"""
|
||
计算增长率
|
||
传入两年财务数据字典项,算出年增长率
|
||
Parameters:
|
||
param1: 财务指标1
|
||
param2: 财务指标2
|
||
Returns:
|
||
增长率
|
||
"""
|
||
param1 = float(param1)
|
||
param2 = float(param2)
|
||
rate = round((param1 - param2) / param2, 2)
|
||
return rate
|
||
|
||
|
||
def calculate_amount(param):
|
||
"""
|
||
计算数据之和
|
||
清洗数据库数据,根据需要返回
|
||
注意:
|
||
货币单位不同,现在存在美元、人民币两种,汇率暂用6.5
|
||
Parameters:
|
||
param: 数据库数据
|
||
Returns:
|
||
数据合计
|
||
"""
|
||
result = dict()
|
||
result['amount'] = 0
|
||
result['industry'] = list()
|
||
result['base'] = list()
|
||
for item in param:
|
||
if item['amountSuffix'] == '万人民币':
|
||
try:
|
||
result['amount'] += item['amount']
|
||
except TypeError:
|
||
result['amount'] += 0
|
||
elif item['amountSuffix'] == '万美元':
|
||
try:
|
||
result['amount'] += item['amount'] * 6.5
|
||
except TypeError:
|
||
result['amount'] += 0
|
||
result['industry'].append(item['category'])
|
||
result['base'].append(item['base'])
|
||
return result
|
||
|
||
|
||
def calculate_list(param):
|
||
"""
|
||
计算列表中所有元素出现的次数
|
||
Parameters:
|
||
param: list数据
|
||
Returns:
|
||
列表元素出现次数对象
|
||
"""
|
||
result = dict()
|
||
for item in param:
|
||
result[item] = param.count(item)
|
||
return result
|
||
|
||
|
||
def time_stamp(param):
|
||
"""
|
||
时间戳转换
|
||
Parameters:
|
||
param: 时间戳数据
|
||
Returns:
|
||
转换后时间数据
|
||
"""
|
||
if param is None:
|
||
return '-'
|
||
else:
|
||
estiblish_time = param / 1000
|
||
put_date = time.localtime(estiblish_time)
|
||
date = time.strftime("%Y-%m-%d", put_date)
|
||
return date
|
||
|
||
|
||
def province_conversion(param):
|
||
"""
|
||
省份转换
|
||
Parameters:
|
||
param: 省份简称
|
||
Returns:
|
||
转换后省份全称
|
||
"""
|
||
res = [v for k, v in p_map.items() if k == param][0]
|
||
return res
|
||
|
||
|
||
def industry_processing(param):
|
||
"""
|
||
将行业数组转为字符串
|
||
Parameters:
|
||
param list 行业数组
|
||
Returns:
|
||
result str 行业字符串
|
||
"""
|
||
return param[0] + '-' + param[1]
|
||
|
||
|
||
# 获取数据库数据
|
||
def get_tfse_data(param):
|
||
"""
|
||
获取数据库数据
|
||
Parameters:
|
||
param: 企业名称、企业ID、评价ID
|
||
Returns:
|
||
report_data: 数据库数据
|
||
"""
|
||
company = param['company']
|
||
rid = param['rid']
|
||
cid = param['cid']
|
||
|
||
report_data = dict()
|
||
# 评价结果
|
||
es = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '评价结果', {'评价ID': rid}, ["企业名称", "评价年度", "财务评分", "经营评分", "信用等级", "评价时间"])
|
||
# 综合评价填报
|
||
cef = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '填报数据', {'评价ID': rid}, ["财务填报", "行业选择"])
|
||
# 指标明细
|
||
fid = FIND_ALL_DATA_BY_REQ('综信评价数据', '财指结果', {'企业ID': cid},
|
||
['报告期', '净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率', '总资产增长率', '总资产报酬率', '技术投入比率', '营业增长率', '资产负债率', '速动比率'])
|
||
# 基本信息
|
||
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': company})[0]
|
||
if '上市' in cbd['基本信息']['companyOrgType'] and '非上市' not in cbd['基本信息']['companyOrgType']:
|
||
# 企业股东
|
||
cs = FIND_DATA_N_TYC(db='公司背景', col='十大股东', query={'企业名称': company})[0]
|
||
else:
|
||
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': company})[0]
|
||
# 对外投资
|
||
oi = FIND_DATA_N_TYC(db='公司背景', col='对外投资', query={'企业名称': company})[0]
|
||
# 进出口信用
|
||
ip = FIND_DATA_N_TYC(db='经营状况', col='进出口信用', query={'企业名称': company})[0]
|
||
# 专利
|
||
ip_02 = FIND_DATA_N_TYC(db='知识产权', col='专利', query={'企业名称': company})[0]
|
||
# 软件著作权
|
||
sc = FIND_DATA_N_TYC(db='知识产权', col='软件著作权', query={'企业名称': company})[0]
|
||
# 资质证书
|
||
qh = FIND_DATA_N_TYC(db='经营状况', col='资质证书', query={'企业名称': company})[0]
|
||
# 融资历史
|
||
fh = FIND_DATA_N_TYC(db='公司发展', col='融资历史', query={'企业名称': company})[0]
|
||
# 风险数据
|
||
rd = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '风险数据', {'评价ID': rid}, ["合规风险", "经营风险", "关联风险"])
|
||
# 周边风险
|
||
pr = FIND_DATA_N_TYC(db='天眼风险', col='周边风险', query={'企业名称': company})[0]
|
||
report_data['评价结果'] = es
|
||
report_data['综合评价填报'] = cef
|
||
report_data['指标明细'] = fid
|
||
report_data['基本信息'] = cbd
|
||
report_data['企业股东'] = cs
|
||
report_data['对外投资'] = filter_oi_data(oi)
|
||
report_data['进出口信用'] = ip
|
||
report_data['专利'] = ip_02
|
||
report_data['软件著作权'] = sc
|
||
report_data['资质证书'] = qh
|
||
report_data['融资历史'] = fh
|
||
report_data['风险数据'] = rd
|
||
report_data['周边风险'] = pr
|
||
|
||
return report_data
|
||
|
||
|
||
def filter_oi_data(param):
|
||
"""
|
||
对外投资
|
||
清洗掉状态为吊销、注销、迁出的企业
|
||
Parameters:
|
||
param: 对外投资数据
|
||
Returns:
|
||
清洗后的数据
|
||
"""
|
||
result = list()
|
||
total = 0
|
||
data = param['对外投资']['result']
|
||
for item in data:
|
||
if item['regStatus'] != '注销' and item['regStatus'] != '迁出' and item['regStatus'] != '吊销':
|
||
result.append(item)
|
||
total += 1
|
||
param['对外投资']['result'] = result
|
||
param['对外投资']['total'] = total
|
||
return param
|
||
|
||
|
||
def shareholder_strength_data(param):
|
||
"""
|
||
股东数据
|
||
清洗数据库数据,根据需要返回
|
||
Parameters:
|
||
param: 企业名称
|
||
Returns:
|
||
股东数据
|
||
"""
|
||
data = dict()
|
||
# 基本信息
|
||
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': param})[0]
|
||
# 企业股东
|
||
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': param})[0]
|
||
data['基本信息'] = cbd
|
||
data['企业股东'] = cs
|
||
|
||
return data
|
||
|
||
|
||
def ten_shareholder_data(param):
|
||
"""
|
||
十大股东数据
|
||
清洗数据库数据,根据需要返回
|
||
Parameters:
|
||
param: 企业名称
|
||
Returns:
|
||
股东数据
|
||
"""
|
||
data = dict()
|
||
# 基本信息
|
||
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': param})[0]
|
||
data['基本信息'] = cbd
|
||
if '上市' in cbd['基本信息']['companyOrgType']:
|
||
cs = FIND_DATA_N_TYC(db='公司背景', col='十大股东', query={'企业名称': param})[0]
|
||
data['十大股东'] = cs
|
||
else:
|
||
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': param})[0]
|
||
data['企业股东'] = cs
|
||
return data
|
||
|
||
|
||
def person_subsidiaries(param):
|
||
"""
|
||
人员控股数据
|
||
清洗数据库数据,根据需要返回
|
||
Parameters:
|
||
param: 人员id
|
||
Returns:
|
||
人员控股数据
|
||
"""
|
||
data = dict()
|
||
# 控股数据
|
||
ps = FIND_DATA_N_TYC(db='公司背景', col='人员控股企业', query={'人员ID': param})[0]
|
||
data['人员控股企业'] = ps
|
||
return data
|
||
|
||
|
||
def get_esg_data(param):
|
||
"""
|
||
获取数据库数据并按要求格式返回
|
||
Parameters:
|
||
param dict 企业名称、企业ID、评价ID
|
||
Returns:
|
||
result dict 符合要求需要清洗的数据
|
||
"""
|
||
company = param['company']
|
||
rid = param['rid']
|
||
cid = param['cid']
|
||
|
||
# ESG评价结果
|
||
es = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '评价结果', {'评价ID': rid}, ['评价等级'])
|
||
# ESG风险数据
|
||
rd = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '风险数据', {'企业ID': cid},
|
||
["严重违法", "失信人", "法律诉讼", "税收违法", "经营异常", "行政处罚", "被执行人"])
|
||
# ESG评价填报
|
||
ef = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '填报数据', {'评价ID': rid},
|
||
["评价ID", "企业ID", "企业名称", "所属行业", "评价年度", "公司当年收入(万元)", "环境问卷", "社会问卷", "治理问卷"])
|
||
|
||
report_data = copy.deepcopy(ef)
|
||
report_data['评价等级'] = es['评价等级']
|
||
report_data['风险数据'] = rd
|
||
|
||
return report_data
|