import xlrd from DBHelper.MongoHelperInstance import DB_GUA from Modules.Company.CompanyObject import BasicBusinessInfo, FinancialData, CustomerInfo, RegionalDistribution, \ IndustryDistribution, GuaranteedBalanceDistribution from Modules.Company.CompanyUtils import CommonUtils, ExcelSheetParser from Utils.ObjUtil import SpecObject class BasicBusinessInfoImpl(object): @staticmethod def parse_excel_and_create_company(file): """解析excel模板数据 创建公司信息""" new_cid = CommonUtils.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] )