Merge remote-tracking branch 'origin/wsc' into wsc02
# Conflicts: # Modules/Company/CompanyImpl.py # Modules/Company/CompanyRoutes.py
This commit is contained in:
commit
ec15628364
|
@ -8,6 +8,7 @@ import requests
|
|||
import xlrd
|
||||
import cpca
|
||||
from DBHelper.MongoHelperInstance import DB_GUA, DB_TYC
|
||||
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, GuaranteeInfo, BankCredit
|
||||
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
|
||||
IndustryDistribution, GuaranteedBalanceDistribution, GuaranteeInfo, BankCredit
|
||||
from Modules.Company.CompanyUtils import CompanyUtils, ExcelSheetParser, ExcelParserUtil
|
||||
|
@ -189,7 +190,7 @@ class BasicBusinessInfoImpl(object):
|
|||
company_info['企业类型'] = basic_info['基本信息']['companyOrgType']
|
||||
company_info['统一社会信用代码'] = basic_info['基本信息']['creditCode']
|
||||
company_info['组织代码'] = basic_info['基本信息']['orgNumber']
|
||||
tuptime_newest = time.localtime(basic_info['基本信息']['estiblishTime']/1000)
|
||||
tuptime_newest = time.localtime(basic_info['基本信息']['estiblishTime'] / 1000)
|
||||
company_info['成立日期'] = time.strftime("%Y-%m-%d", tuptime_newest)
|
||||
company_info['经营范围'] = basic_info['基本信息']['businessScope']
|
||||
company_info['所在省份'] = [v for k, v in p_map.items() if k == basic_info['基本信息']['base']][0]
|
||||
|
@ -227,6 +228,7 @@ class BasicBusinessInfoImpl(object):
|
|||
def financial_data():
|
||||
"""财务数据"""
|
||||
financial = FinancialData()
|
||||
period = [ExcelParserUtil.trans_date_fmt_2(item['报告期'])[:4] for item in appendix_sheet]
|
||||
|
||||
def balance_script(data):
|
||||
"""资产负债表"""
|
||||
|
@ -269,6 +271,214 @@ class BasicBusinessInfoImpl(object):
|
|||
|
||||
def appendix_script(data):
|
||||
"""补充数据表"""
|
||||
year = ExcelParserUtil.trans_date_fmt_2(data['报告期'])[:4]
|
||||
|
||||
def parameter_01():
|
||||
"""当期代偿金额"""
|
||||
if compensation_info:
|
||||
amount = 0
|
||||
for item in compensation_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['代偿日期'])[:4] == year:
|
||||
amount += item['代偿金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
def parameter_02():
|
||||
"""当期代偿回收金额"""
|
||||
if compensation_info:
|
||||
amount = 0
|
||||
for item in compensation_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['代偿日期'])[:4] == year:
|
||||
amount += item['代偿回收金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
def parameter_03():
|
||||
"""当期解除担保责任余额"""
|
||||
if guarantee_info:
|
||||
amount = 0
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year:
|
||||
amount += item['解除金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
def parameter_04():
|
||||
"""近三年累计代偿金额"""
|
||||
if year == period[0]:
|
||||
period_ = period[:3]
|
||||
elif year == period[1]:
|
||||
period_ = period[1:4]
|
||||
else:
|
||||
period_ = None
|
||||
|
||||
if period_ and compensation_info:
|
||||
amount = 0
|
||||
for _item in compensation_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(_item['代偿日期'])[:4] in period_:
|
||||
amount += _item['代偿金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
|
||||
return amount
|
||||
|
||||
def parameter_05():
|
||||
"""近三年累计代偿回收金额"""
|
||||
if year == period[0]:
|
||||
period_ = period[:3]
|
||||
elif year == period[1]:
|
||||
period_ = period[1:4]
|
||||
else:
|
||||
period_ = None
|
||||
|
||||
if period_ and compensation_info:
|
||||
amount = 0
|
||||
for _item in compensation_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(_item['代偿日期'])[:4] in period_:
|
||||
amount += _item['代偿回收金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
|
||||
return amount
|
||||
|
||||
def parameter_06():
|
||||
"""近三年累计解除担保责任金额"""
|
||||
if year == period[0]:
|
||||
period_ = period[:3]
|
||||
elif year == period[1]:
|
||||
period_ = period[1:4]
|
||||
else:
|
||||
period_ = None
|
||||
|
||||
if period_ and guarantee_info:
|
||||
amount = 0
|
||||
for _item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(_item['担保开始日期'])[:4] in period_:
|
||||
amount += _item['解除金额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
|
||||
return amount
|
||||
|
||||
def parameter_07():
|
||||
"""最大单一行业融资担保责任余额"""
|
||||
if guarantee_info:
|
||||
industry = {ind['行业']: 0 for ind in guarantee_info}
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year:
|
||||
industry[item['行业']] += item['责任担保余额(万元)']
|
||||
amount = max(industry.values())
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
def parameter_08():
|
||||
"""当期新增融资担保责任余额"""
|
||||
if year == period[0]:
|
||||
period_ = period[:2]
|
||||
elif year == period[1]:
|
||||
period_ = period[1:3]
|
||||
elif year == period[2]:
|
||||
period_ = period[2:4]
|
||||
else:
|
||||
period_ = None
|
||||
|
||||
if period_ and guarantee_info:
|
||||
this_year = 0
|
||||
last_year = 0
|
||||
for _item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(_item['担保开始日期'])[:4] == period_[0]:
|
||||
this_year += _item['责任担保余额(万元)']
|
||||
elif ExcelParserUtil.trans_date_fmt_2(_item['担保开始日期'])[:4] == period_[1]:
|
||||
last_year += _item['责任担保余额(万元)']
|
||||
amount = this_year - last_year
|
||||
else:
|
||||
amount = None
|
||||
|
||||
return amount
|
||||
|
||||
def parameter_09():
|
||||
"""融资担保责任余额"""
|
||||
if guarantee_info:
|
||||
amount = 0
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year and item['担保类型'] == '融资担保':
|
||||
amount += item['责任担保余额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
def parameter_10():
|
||||
"""前五大被担保企业融资担保责任余额"""
|
||||
if guarantee_info:
|
||||
amount_list = []
|
||||
amount = 0
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year and item['担保类型'] == '融资担保':
|
||||
amount_list.append(item['责任担保余额(万元)'])
|
||||
else:
|
||||
amount = None
|
||||
if amount_list:
|
||||
length = len(amount_list)
|
||||
five_amount = amount_list.sort()[:length]
|
||||
amount = sum(five_amount)
|
||||
else:
|
||||
amount = 0
|
||||
return amount
|
||||
|
||||
def parameter_11():
|
||||
"""最大被担保企业融资担保责任余额"""
|
||||
if guarantee_info:
|
||||
amount_list = []
|
||||
amount = 0
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year and item['担保类型'] == '融资担保':
|
||||
amount_list.append(item['责任担保余额(万元)'])
|
||||
else:
|
||||
amount = None
|
||||
if amount_list:
|
||||
amount = max(amount_list)
|
||||
else:
|
||||
amount = 0
|
||||
return amount
|
||||
|
||||
def parameter_12():
|
||||
"""担保在保余额"""
|
||||
if guarantee_info:
|
||||
amount = 0
|
||||
for item in guarantee_info:
|
||||
if ExcelParserUtil.trans_date_fmt_2(item['担保开始日期'])[:4] == year:
|
||||
amount += item['担保余额(万元)']
|
||||
else:
|
||||
amount = None
|
||||
else:
|
||||
amount = None
|
||||
return amount
|
||||
|
||||
data['当期代偿金额'] = parameter_01()
|
||||
data['当期代偿回收金额'] = parameter_02()
|
||||
data['当期解除担保责任余额'] = parameter_03()
|
||||
data['近三年累计代偿金额'] = parameter_04()
|
||||
data['近三年累计代偿回收金额'] = parameter_05()
|
||||
data['近三年累计解除担保责任金额'] = parameter_06()
|
||||
data['最大单一行业融资担保责任余额'] = parameter_07()
|
||||
data['当期新增融资担保责任余额'] = parameter_08()
|
||||
data['融资担保责任余额'] = parameter_09()
|
||||
data['前五大被担保企业融资担保责任余额'] = parameter_10()
|
||||
data['最大被担保企业融资担保责任余额'] = parameter_11()
|
||||
data['担保在保余额'] = parameter_12()
|
||||
|
||||
data.pop('报告期')
|
||||
fa = SpecObject.set_specify_instance(
|
||||
instance=financial.AppendixSheet,
|
||||
|
@ -333,8 +543,11 @@ class BasicBusinessInfoImpl(object):
|
|||
bank_credit_info_list.append(bc)
|
||||
|
||||
def risk_info():
|
||||
for item in balance_sheet:
|
||||
data_job = RiskInfoDataJob()
|
||||
data_job.company_name = get_attr(company_info, ["企业名称"])
|
||||
data_job.cid = new_cid
|
||||
data_job.report_date = ExcelParserUtil.trans_date_fmt_2(item['报告期'])
|
||||
data_job.drag()
|
||||
|
||||
def _main_():
|
||||
|
@ -342,6 +555,7 @@ class BasicBusinessInfoImpl(object):
|
|||
guarantee_data()
|
||||
financial_data()
|
||||
bank_data()
|
||||
risk_info()
|
||||
|
||||
_main_()
|
||||
|
||||
|
|
|
@ -421,26 +421,50 @@ class FinancialData(SpecObject):
|
|||
|
||||
class AppendixSheet(SpecObject):
|
||||
"""补充数据表"""
|
||||
current_compensation_amount = ValidateAttr(field="current_compensation_amount", type=[float, int], default=None)
|
||||
current_compensation_recycle_amount = ValidateAttr(field="current_compensation_recycle_amount", type=[float, int], default=None)
|
||||
guarantee_liability = ValidateAttr(field="guarantee_liability", type=[float, int], default=None)
|
||||
accumulated_compensation_amount = ValidateAttr(field="accumulated_compensation_amount", type=[float, int], default=None)
|
||||
cumulative_compensation_recovery_amount = ValidateAttr(field="cumulative_compensation_recovery_amount", type=[float, int], default=None)
|
||||
cumulative_amount = ValidateAttr(field="cumulative_amount", type=[float, int], default=None)
|
||||
largest_financing = ValidateAttr(field="largest_financing", type=[float, int], default=None)
|
||||
financing_guarantee_liabilities = ValidateAttr(field="financing_guarantee_liabilities", type=[float, int], default=None)
|
||||
financial_guarantee_responsibility_balance = ValidateAttr(field="financial_guarantee_responsibility_balance", type=[float, int], default=None)
|
||||
risk_weighted_assets = ValidateAttr(field="risk_weighted_assets", type=[float, int], default=None)
|
||||
guaranteed_risk_reserve_balance = ValidateAttr(field="guaranteed_risk_reserve_balance", type=[float, int], default=None)
|
||||
top_five_financing_guarantee_liabilities = ValidateAttr(field="top_five_financing_guarantee_liabilities", type=[float, int], default=None)
|
||||
maximum_enterprise_financing_guarantee = ValidateAttr(field="maximum_enterprise_financing_guarantee", type=[float, int], default=None)
|
||||
guarantee_compensation_reserve = ValidateAttr(field="guarantee_compensation_reserve", type=[float, int], default=None)
|
||||
unexpired_liability_reserve = ValidateAttr(field="unexpired_liability_reserve", type=[float, int], default=None)
|
||||
counter_guarantee_amount = ValidateAttr(field="counter_guarantee_amount", type=[float, int], default=None)
|
||||
deposit_margin = ValidateAttr(field="deposit_margin", type=[float, int], default=None)
|
||||
save_margin = ValidateAttr(field="save_margin", type=[float, int], default=None)
|
||||
guarantee_business_income = ValidateAttr(field="guarantee_business_income", type=[float, int], default=None)
|
||||
guaranteed_balance = ValidateAttr(field="guaranteed_balance", type=[float, int], default=None)
|
||||
one_assets = ValidateAttr(field="one_assets", type=[float, int], default=None)
|
||||
two_assets = ValidateAttr(field="two_assets", type=[float, int], default=None)
|
||||
three_assets = ValidateAttr(field="three_assets", type=[float, int], default=None)
|
||||
|
||||
fields_map = {
|
||||
"current_compensation_amount": "当期代偿金额",
|
||||
"current_compensation_recycle_amount": "当期代偿回收金额",
|
||||
"guarantee_liability": "当期解除担保责任余额",
|
||||
"accumulated_compensation_amount": "近三年累计代偿金额",
|
||||
"cumulative_compensation_recovery_amount": "近三年累计代偿回收金额",
|
||||
"cumulative_amount": "近三年累计解除担保责任金额",
|
||||
"largest_financing": "最大单一行业融资担保责任余额",
|
||||
"financing_guarantee_liabilities": "当期新增融资担保责任余额",
|
||||
"financial_guarantee_responsibility_balance": "融资担保责任余额",
|
||||
"risk_weighted_assets": "风险加权资产",
|
||||
"guaranteed_risk_reserve_balance": "担保风险准备金余额",
|
||||
"top_five_financing_guarantee_liabilities": "前五大被担保企业融资担保责任余额",
|
||||
"maximum_enterprise_financing_guarantee": "最大被担保企业融资担保责任余额",
|
||||
"guarantee_compensation_reserve": "担保赔偿准备金",
|
||||
"unexpired_liability_reserve": "未到期责任准备金",
|
||||
"counter_guarantee_amount": "反担保金额",
|
||||
"deposit_margin": "存入保证金",
|
||||
"save_margin": "存出保证金",
|
||||
"guaranteed_balance": "担保在保余额",
|
||||
"guarantee_business_income": "担保业务收入",
|
||||
"one_assets": "I类资产",
|
||||
"two_assets": "II类资产",
|
||||
|
|
|
@ -1,17 +1,167 @@
|
|||
import json
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
|
||||
from DBHelper.MongoHelperInstance import DB_TYC, DB_GUA
|
||||
from Modules.Company.CompanyObject import RiskInfo
|
||||
from Modules.ETL.WideETL import DataProcess, DataJob
|
||||
from Utils.ErrorUtil import JustThrowError
|
||||
|
||||
|
||||
class DragRiskInfoFromTYC(DataProcess):
|
||||
|
||||
def extract(self):
|
||||
pass
|
||||
url = "http://api.fecribd.com/api/tyc/basic_info"
|
||||
headers = {'token': self.target.token}
|
||||
data = {"企业名称": self.target.company_name}
|
||||
res = requests.post(url=url, headers=headers, data=json.dumps(data))
|
||||
|
||||
if res.status_code == 200:
|
||||
source_dict = dict()
|
||||
|
||||
def dishonest_quantity():
|
||||
dishonest = DB_TYC.find_single_data(
|
||||
"司法风险",
|
||||
"失信人",
|
||||
{"企业名称": self.target.company_name},
|
||||
['失信人']
|
||||
)
|
||||
total = 0
|
||||
if dishonest['失信人']:
|
||||
for item in dishonest['失信人']:
|
||||
begin_date = datetime.strptime(item['publishdate'], '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
if 0 <= minus_date <= 3:
|
||||
total += 1
|
||||
return total
|
||||
|
||||
def executed_quantity():
|
||||
executed = DB_TYC.find_single_data(
|
||||
"司法风险",
|
||||
"被执行人",
|
||||
{"企业名称": self.target.company_name},
|
||||
['被执行人']
|
||||
)
|
||||
total = 0
|
||||
if executed['被执行人']:
|
||||
for item in executed['被执行人']:
|
||||
begin_date = datetime.strptime(item['caseCreateTime'], '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
if 0 <= minus_date <= 3:
|
||||
total += 1
|
||||
return total
|
||||
|
||||
def final_case_quantity():
|
||||
final_case = DB_TYC.find_single_data(
|
||||
"司法风险",
|
||||
"终本案件",
|
||||
{"企业名称": self.target.company_name},
|
||||
['终本案件']
|
||||
)
|
||||
total = 0
|
||||
if final_case['终本案件']:
|
||||
for item in final_case['终本案件']['result']:
|
||||
tuptime_newest = time.localtime(item['caseFinalTime']/1000)
|
||||
begin_date = datetime.strptime(time.strftime("%Y-%m-%d", tuptime_newest), '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
if 0 <= minus_date <= 3:
|
||||
total += 1
|
||||
return total
|
||||
|
||||
def consumption_restriction_quantity():
|
||||
executed = DB_TYC.find_single_data(
|
||||
"司法风险",
|
||||
"限制消费令",
|
||||
{"企业名称": self.target.company_name},
|
||||
['限制消费令']
|
||||
)
|
||||
total = 0
|
||||
if executed['限制消费令']:
|
||||
for item in executed['限制消费令']['result']:
|
||||
tuptime_newest = time.localtime(item['publishDate'] / 1000)
|
||||
begin_date = datetime.strptime(time.strftime("%Y-%m-%d", tuptime_newest), '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
if 0 <= minus_date <= 3:
|
||||
total += 1
|
||||
return total
|
||||
|
||||
def penalties_quantity():
|
||||
penalties = DB_TYC.find_single_data(
|
||||
"经营风险",
|
||||
"行政处罚",
|
||||
{"企业名称": self.target.company_name},
|
||||
['行政处罚']
|
||||
)
|
||||
total = 0
|
||||
if penalties['行政处罚']:
|
||||
for item in penalties['行政处罚']['result']:
|
||||
begin_date = datetime.strptime(item['decisionDate'], '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
if 0 <= minus_date <= 3:
|
||||
total += 1
|
||||
return total
|
||||
|
||||
def legal_action_quantity():
|
||||
legal_action = DB_TYC.find_single_data(
|
||||
"司法风险",
|
||||
"诉讼",
|
||||
{"企业名称": self.target.company_name},
|
||||
['诉讼']
|
||||
)
|
||||
total = 0
|
||||
if legal_action:
|
||||
for item in legal_action['诉讼']:
|
||||
try:
|
||||
begin_date = datetime.strptime(item['submittime'], '%Y-%m-%d').year
|
||||
curr_date = datetime.strptime(self.target.report_date, '%Y-%m-%d').year
|
||||
minus_date = curr_date - begin_date
|
||||
condition = self.target.company_name in item['defendants']
|
||||
if 0 <= minus_date <= 3 and condition:
|
||||
total += 1
|
||||
except ValueError:
|
||||
continue
|
||||
return total
|
||||
|
||||
source_dict['失信被执行人'] = dishonest_quantity()
|
||||
source_dict['被执行人'] = executed_quantity()
|
||||
source_dict['终本案件'] = final_case_quantity()
|
||||
source_dict['限制消费令'] = consumption_restriction_quantity()
|
||||
source_dict['行政处罚'] = penalties_quantity()
|
||||
source_dict['法律诉讼(被告)'] = legal_action_quantity()
|
||||
|
||||
self.source = source_dict
|
||||
else:
|
||||
raise JustThrowError(error_info="拉取风险信息失败")
|
||||
|
||||
def transform(self):
|
||||
pass
|
||||
source = self.source
|
||||
target = self.target
|
||||
|
||||
target.dishonest_executor = source['失信被执行人']
|
||||
target.person_to_be_executed = source['被执行人']
|
||||
target.final_case = source['终本案件']
|
||||
target.consumption_restriction_order = source['限制消费令']
|
||||
target.administrative_penalties = source['行政处罚']
|
||||
target.legal_action = source['法律诉讼(被告)']
|
||||
|
||||
def load(self):
|
||||
pass
|
||||
target = self.target
|
||||
|
||||
data = target.fields_toggle()
|
||||
|
||||
DB_GUA.upsert_single_data(
|
||||
'企业数据',
|
||||
'风险信息',
|
||||
{"企业名称": data['企业名称'], "报告期": data['报告期']},
|
||||
data
|
||||
)
|
||||
|
||||
|
||||
class RiskInfoDataJob(RiskInfo):
|
||||
|
@ -21,10 +171,10 @@ class RiskInfoDataJob(RiskInfo):
|
|||
|
||||
data_job = DataJob(
|
||||
instance=self,
|
||||
title="",
|
||||
job_type="",
|
||||
status="",
|
||||
detail=""
|
||||
title="拉取企业风险信息",
|
||||
job_type="处理准备",
|
||||
status="正常",
|
||||
detail="企业名称->{};".format(self.company_name)
|
||||
)
|
||||
|
||||
data_job.processes = [
|
||||
|
|
|
@ -7,12 +7,9 @@ class SpecObject(object):
|
|||
|
||||
def fields_toggle(self, **kwargs):
|
||||
"""字典键值切换"""
|
||||
_dict_ = dict()
|
||||
default_types = ['str', 'int', 'float', 'dict', 'bool', 'tuple']
|
||||
|
||||
if 'fields' in kwargs:
|
||||
self.__dict__ = {key: self.__dict__[key] for key in kwargs['fields']}
|
||||
|
||||
_dict_ = dict()
|
||||
for key in self.__dict__.keys():
|
||||
if key in self.fields_map.keys():
|
||||
|
||||
|
@ -37,6 +34,9 @@ class SpecObject(object):
|
|||
else:
|
||||
_dict_[self.fields_map[key]] = self.__dict__[key].fields_toggle()
|
||||
|
||||
if 'fields' in kwargs:
|
||||
_dict_ = {key: _dict_[key] for key in kwargs['fields']}
|
||||
|
||||
return _dict_
|
||||
|
||||
def set_instance(self, **kwargs):
|
||||
|
|
Loading…
Reference in New Issue