import datetime from rating.scripts.common import * def company_background(param1, param2): """ 公司背景 清洗数据库数据,根据需要返回 Parameters: param1: 企业名称 param2: 数据库数据 Returns: 公司背景数据 """ # Params data_01 = param2['基本信息']['基本信息'] data_02 = param2['企业股东']['企业股东'] data_03 = param2['综合评价填报']['财务填报'] # Returns result = list() def para_01(): part_01 = dict() part_01['company'] = param1 # 年限 part_01['year_03'] = data_03['资产负债表'][0]['报告期'][:4] # 成立时间 part_01['found_date'] = time_stamp(data_01['estiblishTime']) # 注册资本 part_01['register_assets'] = data_01['regCapital'] # 实收资本 part_01['paid_assets'] = data_01['actualCapital'] try: # 股份持有人 part_01['share_holders'] = data_02['result'][0]['name'] # 股份 part_01['share_rates'] = data_02['result'][0]['capital'][0]['percent'] except KeyError: # 股份持有人 part_01['share_holders'] = '-' # 股份 part_01['share_rates'] = '-' # 实际控制人 part_01['real_boss'] = part_01['share_holders'] # 经营范围 part_01['business_scope'] = data_01['businessScope'] return part_01 def para_02(): part_02 = dict() # 年限 part_02['year_03'] = data_03['资产负债表'][0]['报告期'][:4] total_assets_01 = data_03['资产负债表'][0]['资产总计'] total_assets_02 = data_03['资产负债表'][1]['资产总计'] # 公司总资产 part_02['total_assets'] = modify_unit(total_assets_01) # 总资产同比增长 part_02['year_03_total_assets_variety'] = str(calculate_growth_rate(total_assets_01, total_assets_02)) net_assets_01 = data_03['资产负债表'][0]['所有者权益合计'] net_assets_02 = data_03['资产负债表'][1]['所有者权益合计'] # 净资产(所有者权益) part_02['net_assets'] = modify_unit(net_assets_01) # 净资产同比增长 part_02['year_03_net_assets_variety'] = str(calculate_growth_rate(net_assets_01, net_assets_02)) income_01 = data_03['利润表'][0]['营业收入'] income_02 = data_03['利润表'][1]['营业收入'] # 营业收入 part_02['income'] = modify_unit(income_01) # 营业收入同比增长 part_02['year_03_income_variety'] = str(calculate_growth_rate(income_01, income_02)) profit_01 = data_03['利润表'][0]['净利润'] profit_02 = data_03['利润表'][1]['净利润'] # 净利润 part_02['profit'] = modify_unit(profit_01) # 净利润同比增长 part_02['year_03_profit_variety'] = str(calculate_growth_rate(profit_01, profit_02)) return part_02 result.append(para_01()) result.append(para_02()) return result def shareholder_strength(param): """ 股东实力 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 股东实力数据 """ # Params data_01 = param['企业股东']['企业股东'] # Returns result = list() def para_01(): part_01 = dict() # 大股东名称 shareholder = data_01['result'][0]['name'] part_01['company'] = shareholder # 股东数据 shareholder_data = shareholder_strength_data(shareholder) # 股东-基本信息 data_02 = shareholder_data['基本信息']['基本信息'] # 股东-企业股东 data_03 = shareholder_data['企业股东']['企业股东'] # 成立时间 part_01['found_date'] = time_stamp(data_02['estiblishTime']) # 注册资本 part_01['registered_capital'] = data_02['regCapital'] # 股东企业股份持有人 part_01['share_holders'] = data_03['result'][0]['name'] # 股东企业股份持有份额 part_01['share_rates'] = data_03['result'][0]['capital'][0]['percent'] # 股东企业经营范围 part_01['business_scope'] = data_02['businessScope'] return part_01 def para_02(part_01): part_02 = dict() def establish_time(): # 成立时间 esatablish = datetime.datetime.today().year - int(part_01['found_date'][:4]) if esatablish >= 5: part_02['establish_time'] = '较长' else: part_02['establish_time'] = '较短' def capital_support(): # 注册资本 regcapital = float(part_01['registered_capital'].replace('万人民币', '')) if regcapital >= 30000: part_02['capital_strength'] = '强' part_02['support_strength'] = '有望在业务和资金方面给予公司一定支持' elif regcapital >= 10000: part_02['capital_strength'] = '较强' part_02['support_strength'] = '有望在业务和资金方面给予公司一定支持' elif regcapital >= 3000: part_02['capital_strength'] = '尚可' part_02['support_strength'] = '对公司的支持力度或较弱' elif regcapital >= 1000: part_02['capital_strength'] = '较弱' part_02['support_strength'] = '对公司的支持力度或较弱' else: part_02['capital_strength'] = '弱' part_02['support_strength'] = '对公司的支持力度或较弱' # 执行子方法 establish_time() capital_support() return part_02 def para_03(): part_01 = dict() # 股东为自然人 part_01['name'] = data_01['result'][0]['name'] # 自然人控股企业数据 subsidiaries = person_subsidiaries(data_01['result'][0]['id']) def enterprise_amount(): # 初始化企业数量 amount = 0 if len(subsidiaries['人员控股企业']['人员控股企业']) > 0: for item in subsidiaries['人员控股企业']['items']: reg = float(item['regCapital'].replace('万人民币', '')) percent = float(item['percent'].replace('%', '')) if reg > 3000 and percent > 50: amount += 1 if amount > 0: part_01['enterprise_amount'] = '旗下拥有{num}家资本实力较强的子公司,可为公司经营提供一定支持'.format(num=amount) else: part_01['enterprise_amount'] = '旗下无资本实力较强的子公司,对公司支持力度偏弱' # 执行子方法 enterprise_amount() return part_01 if data_01['result'][0]['type'] == 1: data = para_01() para_02(data) result.append(data) result.append(para_02(data)) else: result.append(para_03()) return result def outbound_investment(param): """ 对外投资 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 对外投资数据 """ # Params data_01 = param['对外投资']['对外投资'] data_02 = param['综合评价填报']['财务填报'] # Returns result = list() part_01 = dict() if not data_01: part_01['describe'] = '截至{}年,未查询到该公司对外投资相关信息。'.format(data_02['资产负债表'][0]['报告期'][:4]) result.append(part_01) else: def para_01(): # 年限 part_01['year_03'] = data_02['资产负债表'][0]['报告期'][:4] # 对外投资情况 try: # 对外投资数量 part_01['subsidiary_total_number'] = len(data_01['result']) # 投资总金额 part_01['investment_total_amount'] = str(calculate_amount(data_01['result'])['amount']) except KeyError: part_01['subsidiary_total_number'] = 0 part_01['investment_total_amount'] = 0 def subsidiary_number(): # 持股50%以上子公司 fifty_percent = list() for item in data_01['result']: percent = float(item['percent'].replace('%', '')) if percent > 50: fifty_percent.append(item) # 子公司数量 part_01['subsidiary_number'] = str(len(fifty_percent)) # 子公司投资金额合计 part_01['investment_amount'] = str(calculate_amount(fifty_percent)['amount']) # 对外投资集中行业 industry = calculate_amount(data_01['result'])['industry'] industry_amount = calculate_list(industry) top_3_industry = sorted(industry_amount.items(), key=lambda x: x[1], reverse=True) industry_result = calculate_tuple(top_3_industry, data_01['result'], float(part_01['investment_total_amount']), 'industry') part_01['top_3_industry'] = industry_result['industry'] # 行业集中度 part_01['Industry_concentration'] = industry_result['concentration'] # 对外投资地域集中省市 base = calculate_amount(data_01['result'])['base'] base_amount = calculate_list(base) top_3_base = sorted(base_amount.items(), key=lambda x: x[1], reverse=True) region_result = calculate_tuple(top_3_base, data_01['result'], float(part_01['investment_total_amount']), 'region') part_01['top_3_region'] = region_result['industry'] part_01['Regional_concentration'] = region_result['concentration'] # 执行子方法 subsidiary_number() return part_01 def para_02(): part_02 = list() part_02.append(['被投资企业名称', '注册资本', '投资比例', '投资金额', '成立日期', '所属行业', '所属省份']) for item in data_01['result']: insert_list = list() insert_list.append(item['name']) insert_list.append(item['regCapital'].replace("万人民币", "")) insert_list.append(item['percent']) insert_list.append(item['amount']) insert_list.append(time_stamp(item['estiblishTime'])) insert_list.append(item['category']) insert_list.append(province_conversion(item['base'])) insert_list = judge_list(insert_list) part_02.append(insert_list) return part_02 result.append(para_01()) result.append(para_02()) return result def calculate_tuple(param1, param2, param3, param4): """ 计算元组中值最大的三个 Parameters: param1: tuple数据 param2: 对外投资数据 param3: 对外投资总金额 param4: industry/region Returns: 元组元素出现次数对象 行业集中度 """ result = dict() if len(param1) > 3: data = param1[:3] result['industry'] = [data[0][0], data[1][0], data[2][0]] else: result['industry'] = list() for num in range(len(param1)): result['industry'].append(param1[num][0]) amount = 0 for item in param2: if param4 == 'industry': if item['category'] in result['industry']: try: amount += item['amount'] except TypeError: amount += 0 else: if item['base'] in result['industry']: try: amount += item['amount'] except TypeError: amount += 0 concentration = round(amount / param3 * 100, 2) if concentration > 60: result['concentration'] = '高' elif concentration > 40: result['concentration'] = '较高' elif concentration > 20: result['concentration'] = '适中' elif concentration > 10: result['concentration'] = '较低' else: result['concentration'] = '低' base_list = list() if param4 == 'region': for region in result['industry']: res = [v for k, v in p_map.items() if k == region][0] base_list.append(res) result['industry'] = '、'.join(base_list) else: result['industry'] = '、'.join(result['industry']) return result def import_export(param): """ 进出口权 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 对外投资数据 """ data_01 = param['进出口信用']['进出口信用'] result = list() part_01 = dict() if data_01: part_01['import_export_power'] = '拥有' + data_01['baseInfo']['creditRating'] part_01['influence'] = '大' else: part_01['import_export_power'] = '无' part_01['influence'] = '小' result.append(part_01) return result def intellectual_property(param): """ 知识产权 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 知识产权数据 """ # Params data_01 = param['专利']['专利'] data_02 = param['软件著作权']['软件著作权'] today = datetime.datetime.today() year = today.year month = today.month date = str(year) + '年' + str(month) + '月' # Returns result = list() def para_01(): part_01 = dict() # 截至日期 part_01['date'] = date def patent(): if data_01 is None or not data_01: # 专利数量 part_01['patent_number'] = '0' # 三种类型专利数量 part_01['patent_number_03'] = '0、0、0' # 近三年专利数量 part_01['patent_number_three_year'] = '0' # 近三年三种类型专利数量 part_01['patent_number_03_three_year'] = '0、0、0' else: part_01['patent_number'] = str(len(data_01)) three_year_number = 0 um = 0 ad = 0 ip = 0 um_03 = 0 ad_03 = 0 ip_03 = 0 for item in data_01: if year - int(item['pubDate'][:4]) <= 3: three_year_number += 1 if item['patentType'] == '实用新型': um_03 += 1 elif item['patentType'] == '外观设计': ad_03 += 1 elif item['patentType'] == '发明专利': ip_03 += 1 if item['patentType'] == '实用新型': um += 1 elif item['patentType'] == '外观设计': ad += 1 elif item['patentType'] == '发明专利': ip += 1 part_01['patent_number_three_year'] = str(three_year_number) part_01['patent_number_03'] = str(um) + '、' + str(ad) + '、' + str(ip) part_01['patent_number_03_three_year'] = str(um_03) + '、' + str(ad_03) + '、' + str(ip_03) patent() return part_01 def para_02(): part_02 = dict() part_02['date'] = date def copyrights(): if data_02 is None or not data_02: part_02['copyrights_number'] = '0' part_02['copyrights_number_three_year'] = '0' else: part_02['copyrights_number'] = str(len(data_02)) three_year_number = 0 for item in data_02: if year - int(item['regtime'][:4]) <= 3: three_year_number += 1 part_02['copyrights_number_three_year'] = str(three_year_number) copyrights() return part_02 def para_03(param1, param2): part_03 = dict() patented_software = int(param1['patent_number']) + int(param2['copyrights_number']) if patented_software > 5000: part_03['patented_software'] = '较多' part_03['RD_capability'] = '强' elif patented_software > 1000: part_03['patented_software'] = '处于行业中游水平' part_03['RD_capability'] = '尚可' else: part_03['patented_software'] = '较少' part_03['RD_capability'] = '弱' return part_03 param_01 = para_01() param_02 = para_02() result.append(param_01) result.append(param_02) result.append(para_03(param_01, param_02)) return result def qualification_honor(param): """ 资质荣誉 区分行业 Parameters: param: 数据库数据 """ industry = param['综合评价填报']['行业选择'][0] if industry == '制造业': return qualification_honor_manufacturing(param) elif industry == '信息技术业': return qualification_honor_infomation(param) def qualification_honor_manufacturing(param): """ 资质荣誉-制造业 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 资质荣誉数据 """ # Params data = param['资质证书']['资质证书'] qh_tep = ['AAA级中国科技创新优秀企业', '高新技术企业', '科技型中小企业', '全国科技创新示范企业', 'AAA级中国自主创新产品'] qn_tep = ['GMP认证', '医疗器械质量管理体系认证', '中国质量认证中心_CQC自愿性产品认证', 'gmp认证', 'gsp认证', 'GSP认证', '安全生产标准化三级企业', '安全生产标准化证书', '质量合格、国家标准合格产品', '质量管理体系认证证书', '食品安全管理体系认证', '食品安全管理体系认证证书', 'CE认证', '日本PSE认证', 'CE认证证书'] qi_tep = ['CE认证', '日本PSE认证', 'CE认证证书'] qf_tep = ['中国著名品牌', '中国驰名品牌', '中国行业最具影响力品牌'] all_tep = qh_tep + qn_tep + qi_tep + qf_tep # Returns result = list() part_01 = dict() part_02 = dict() part_03 = list() part_03.append(['证书类型', '证书编号', '发证日期', '截至日期']) def para_01(): part_01['Qualification'] = list() part_01['integration_deree'] = '较低' if item['certificateName'] in qh_tep: part_01['Qualification'].append(item['certificateName']) if item['certificateName'] == '两化融合管理体系评定证书': part_01['integration_deree'] = '较高' # 企业资质 if len(part_01['Qualification']) > 0: part_01['Qualification'] = '、'.join(part_01['Qualification']) else: part_01['Qualification'] = '无' def para_02(): part_02['Qualification_number'] = 0 part_02['Qualification_international'] = list() part_02['Qualification_image'] = list() if item['certificateName'] in qn_tep: part_02['Qualification_number'] += 1 if item['certificateName'] in qi_tep: part_02['Qualification_international'].append(item['certificateName']) if item['certificateName'] in qf_tep: part_02['Qualification_image'].append(item['certificateName']) # 国际同行产品质量认证 if len(part_02['Qualification_international']) > 0: part_02['Qualification_international'] = '、'.join(part_02['Qualification_international']) part_02['Qualification_international'] = '尤其拥有{}等国际通行产品质量认证,对于开拓海外市场有积极意义'.format( part_02['Qualification_international']) else: part_02['Qualification_international'] = '但未拥有国际通行产品质量认证' # 是否被评为中国品牌 if len(part_02['Qualification_image']) > 0: part_02['Qualification_image'] = '、'.join(part_02['Qualification_image']) part_02['Qualification_image'] = '公司品牌知名度较高,被评为{},市场形象较好,有利于业务开展。'.format( part_02['Qualification_image']) else: part_02['Qualification_image'] = '公司品牌知名度较低,市场形象一般,不太利于业务开展。' def para_03(): if item['certificateName'] in all_tep: insert_data = list() insert_data.append(item['certificateName']) insert_data.append(item['certNo']) insert_data.append(item['startDate']) insert_data.append(None if len(item['endDate']) == 0 else item['endDate']) insert_data = judge_list(insert_data) part_03.append(insert_data) if len(data) == 0: part_01 = '无数据' result.append(part_01) else: for item in data['result']: para_01() para_02() para_03() result.append(part_01) result.append(part_02) result.append(part_03) return result def qualification_honor_infomation(param): """ 资质荣誉-信息技术业 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 资质荣誉数据 """ # Params data = param['资质证书']['资质证书'] cs_tep = ['中国软件协会会员证'] qh_tep = ['AAA级中国科技创新优秀企业', '高新技术企业', '科技型中小企业', '全国科技创新示范企业', 'AAA级中国自主创新产品'] yy_tep = ['整合管理体系认证', '支付业务许可证', '音视频即成工程企业资质壹级', '安防工程企业设计施工维护能力证书', '测绘乙级资质证书', '自助照相信息化建设维护服务管理体系认证证书', '电子认证服务使用密码许可'] gy_tep = ['两化融合管理体系评定证书'] jc_tep = ['检测机构资质认定证书', '检验检测机构资质认定证书'] js_tep = ['信息系统建设和服务能力等级证书', '信息技术运行维护成熟度四级证书', '信息系统运行分项维护资质', '信息系统集成项目经理登记'] xx_tep = ['信息系统灾难备份与恢复服务资质认证', '信息安全服务资质认证', '信息系统安全等级保护备案证明', '安全技术防范系统设计、施工、维修资格证', '计算机信息系统安全专用产品销售许可证', '国家秘密载体复制许可证', '信息安全风险评估服务资质认证', '涉密信息系统集成资质证书', '软件开发乙级', '网络安全专用产品', '设置空间电台审批'] qf_tep = ['中国著名品牌', '中国驰名品牌', '中国行业最具影响力品牌', 'AAA级中国著名品牌', 'AAA级中国品牌建设实践百名创新优秀人'] all_tep = cs_tep + qh_tep + yy_tep + gy_tep + jc_tep + js_tep + xx_tep + qf_tep # Returns result = list() part_01 = dict() part_02 = dict() part_03 = dict() part_04 = list() part_04.append(['证书类型', '证书编号', '发证日期', '截至日期']) # 第一段,企业被评为哪些证书 qua_list_01 = list() # 第二段数据 qua_list_02 = dict() qua_list_02['qua_num_01'] = 0 qua_list_02['qua_num_02'] = 0 qua_list_02['qua_num_03'] = 0 qua_list_02['qua_num_04'] = 0 qua_list_02['qua_num_05'] = 0 # 第三段数据 qua_list_03 = list() def para_01(): # 荣誉资质第一段话描述 part_01['describe'] = list() # 判断第一句话 if item['certificateName'] in cs_tep: part_01['describe'].append('公司是中国软件协会会员,为高新技术企业。') # 判断第二句话 if item['certificateName'] in qh_tep: qua_list_01.append(item['certificateName']) def para_02(): if item['certificateName'] in yy_tep: qua_list_02['qua_num_01'] += 1 if item['certificateName'] in gy_tep: qua_list_02['qua_num_02'] += 1 if item['certificateName'] in jc_tep: qua_list_02['qua_num_03'] += 1 if item['certificateName'] in js_tep: qua_list_02['qua_num_04'] += 1 if item['certificateName'] in xx_tep: qua_list_02['qua_num_05'] += 1 def para_03(): if item['certificateName'] in qf_tep: qua_list_03.append(item['certificateName']) def para_04(): if item['certificateName'] in all_tep: insert_data = list() insert_data.append(item['certificateName']) insert_data.append(item['certNo']) insert_data.append(item['startDate']) insert_data.append(None if len(item['endDate']) == 0 else item['endDate']) insert_data = judge_list(insert_data) part_04.append(insert_data) if len(data) == 0: part_01 = '经查询,公司无技术、服务资质或品牌等方面的荣誉资质。' result.append(part_01) else: for item in data['result']: para_01() para_02() para_03() para_04() # 判断第一段 # 列表大于0,为第一段加上第二句描述语句 if len(qua_list_01) > 0: s = '、'.join(qua_list_01) describe = '企业被评为{}。'.format(s) part_01['describe'].append(describe) # 总体数据列表等于2,加上最后一句描述 if len(part_01['describe']) == 2: part_01['describe'].append('属于新一代信息技术业企业。') if len(part_01['describe']) > 0: # 将数据解析成第一段描述语句的字符串 part_01['describe'] = ''.join(part_01['describe']) else: part_01['describe'] = '无数据' result.append(part_01) # 判断第二段 qua_list_num = 0 for value in qua_list_02.values(): qua_list_num += value if qua_list_num > 0: describe = '公司拥有较强的软件和信息技术服务能力,具有{}项应用软件产品、{}项工业软件产品、{}项检测认定、{}项信息系统建设和维护、' \ '{}项信息系统安全服务等相关资质。' part_02['describe'] = describe.format(qua_list_02['qua_num_01'], qua_list_02['qua_num_02'], qua_list_02['qua_num_03'], qua_list_02['qua_num_04'], qua_list_02['qua_num_05']) else: part_02['describe'] = '无数据' result.append(part_02) # 判断第三段 if len(qua_list_03) > 0: describe = '、'.join(qua_list_03) part_03['describe'] = '公司品牌知名度较高,被评为{},市场形象较好,有利于业务开展。'.format(describe) else: part_03['describe'] = '无数据' result.append(part_03) result.append(part_04) # 最后判断前三段是否都为无数据 if result[0]['describe'] == '无数据' and result[1]['describe'] == '无数据' and result[2]['describe'] == '无数据': result = list() part_01 = dict() part_01['describe'] = '无数据' result.append(part_01) return result def financing_information(param): """ 融资信息 清洗数据库数据,根据需要返回 Parameters: param: 数据库数据 Returns: 融资信息数据 """ data = param['融资历史']['融资历史'] result = list() part_01 = dict() part_02 = dict() part_03 = dict() part_04 = dict() if len(data) == 0: part_01['number'] = 0 part_01['Financing_round'] = 0 part_01['Financing_amount'] = 0 part_01['top_3_investor'] = 0 else: part_01['number'] = data['total'] part_01['Financing_round'] = list() part_01['Financing_amount'] = 0 part_01['top_3_investor'] = list() for item in data['result']: part_01['Financing_round'].append(item['round']) if item['money'] == '未披露': part_01['Financing_amount'] += 0 else: part_01['Financing_amount'] += item['money'] part_01['top_3_investor'].append(item['investorName']) part_01['Financing_round'] = '、'.join(set(part_01['Financing_round'])) part_01['top_3_investor'] = '、'.join(set(part_01['top_3_investor'])) part_02['fin_channel'] = '银行贷款' part_03['Commercial_credit_level'] = '较好' part_03['Bargaining_power'] = '强' part_03['Financing_scale'] = '大' part_03['Financing_amount'] = part_01['Financing_amount'] part_04 = list() part_04.append(['日期', '融资金额', '融资轮次', '投资方']) for item in data['result']: insert_data = list() insert_data.append(time_stamp(item['pubTime'])) insert_data.append(item['money']) insert_data.append(item['round']) insert_data.append(item['investorName']) part_04.append(insert_data) result.append(part_01) result.append(part_02) result.append(part_03) result.append(part_04) return result