guarantee-admin-api-v0.2/Modules/Company/CompanyImpl.py

229 lines
10 KiB
Python

import xlrd
from DBHelper.MongoHelperInstance import DB_GUA
from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \
IndustryDistribution, GuaranteedBalanceDistribution
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()
region_distribution_list = list()
industry_distribution_list = list()
guarantee_distribution_list = list()
for sheet in work_book.sheets():
if sheet.name == '企业信息':
data = ExcelSheetParser(sheet=sheet).parse_sheet1()
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 == '经营情况':
items = ExcelSheetParser(sheet=sheet).parse_sheet3()
for item in items:
financial_data = FinancialData()
financial_data.cid = new_cid
financial_data.company_name = basic_business_info.company_name
financial_data.report_period = item["报告期"]
# financial_data.balance_sheet = SpecObject.set_specify_instance(
# instance=FinancialData.BalanceSheet,
# data=item["资产负债表"]
# )
# financial_data.income_sheet = SpecObject.set_specify_instance(
# instance=FinancialData.IncomeSheet,
# data=item["利润表"]
# )
financial_data.appendix_sheet = SpecObject.set_specify_instance(
instance=FinancialData.AppendixSheet,
data=item["补充数据表"]
)
financial_data_list.append(financial_data)
elif sheet.name == '客户信息':
items = ExcelSheetParser(sheet=sheet).parse_sheet4()
for item in items:
customer_info = CustomerInfo()
customer_info.cid = new_cid
customer_info.company_name = basic_business_info.company_name
customer_info.set_instance(data=item)
customer_info_list.append(customer_info)
elif sheet.name == '区域分布':
items = ExcelSheetParser(sheet=sheet).parse_sheet5()
for item in items:
region_distribution = RegionalDistribution()
region_distribution.cid = new_cid
region_distribution.company_name = basic_business_info.company_name
region_distribution.set_instance(data=item)
region_distribution_list.append(region_distribution)
elif sheet.name == '行业分布':
items = ExcelSheetParser(sheet=sheet).parse_sheet5()
for item in items:
industry_distribution = IndustryDistribution()
industry_distribution.cid = new_cid
industry_distribution.company_name = basic_business_info.company_name
industry_distribution.set_instance(data=item)
industry_distribution_list.append(industry_distribution)
elif sheet.name == '担保金额分布':
items = ExcelSheetParser(sheet=sheet).parse_sheet6()
for item in items:
guarantee_distribution = GuaranteedBalanceDistribution()
guarantee_distribution.cid = new_cid
guarantee_distribution.company_name = basic_business_info.company_name
guarantee_distribution.report_period = item["报告期"]
guarantee_distribution.guarantee_account = SpecObject.set_specify_instance(
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
data=item["担保户数"]
)
guarantee_distribution.guarantee_number = SpecObject.set_specify_instance(
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
data=item["担保笔数"]
)
guarantee_distribution.guarantee_liability_balance = SpecObject.set_specify_instance(
instance=GuaranteedBalanceDistribution.GuaranteeBalance,
data=item["担保责任余额"]
)
guarantee_distribution_list.append(guarantee_distribution)
elif sheet.name == '资产负债表':
items = ExcelSheetParser(sheet=sheet).parse_sheet7()
balance_sheet = FinancialData().BalanceSheet()
current_assets_dict = [item for item in balance_sheet.CurrentAssets.fields_map.values()]
non_current_assets_dict = [item for item in balance_sheet.NonCurrentAssets.fields_map.values()]
current_liabilities_dict = [item for item in balance_sheet.CurrentLiabilities.fields_map.values()]
non_current_liabilities_dict = [item for item in balance_sheet.NonCurrentLiabilities.fields_map.values()]
owner_equity_dict = [item for item in balance_sheet.OwnerEquity.fields_map.values()]
for item in items:
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 item.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
balance_sheet.current_assets = SpecObject.set_specify_instance(
instance=balance_sheet.CurrentAssets,
data=current_assets_dict_
)
balance_sheet.non_current_assets = SpecObject.set_specify_instance(
instance=balance_sheet.NonCurrentAssets,
data=non_current_assets_dict_
)
balance_sheet.current_liabilities = SpecObject.set_specify_instance(
instance=balance_sheet.CurrentLiabilities,
data=current_liabilities_dict_
)
balance_sheet.non_current_liabilities = SpecObject.set_specify_instance(
instance=balance_sheet.NonCurrentLiabilities,
data=non_current_liabilities_dict_
)
balance_sheet.owner_equity = SpecObject.set_specify_instance(
instance=balance_sheet.OwnerEquity,
data=owner_equity_dict_
)
for financial in financial_data_list:
if item['年度'] == financial.report_period:
financial.balance_sheet = balance_sheet
elif sheet.name == '利润表':
items = ExcelSheetParser(sheet=sheet).parse_sheet8()
for item in items:
year = item['年度']
item.pop('年度')
income_sheet = SpecObject.set_specify_instance(
instance=FinancialData.IncomeSheet,
data=item
)
for financial in financial_data_list:
if year == financial.report_period:
financial.income_sheet = income_sheet
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]
)