diff --git a/company/routes.py b/company/routes.py index 2d39c13..69aad70 100644 --- a/company/routes.py +++ b/company/routes.py @@ -32,49 +32,23 @@ def basic_info(): return {"info": "企业基本信息初始化成功"} -@company_route.route('/general_rating', methods=['POST']) +@company_route.route('/company_index_etl', methods=['POST']) @verify_token def general_rating(): """ - 准备综合评价信息数据 + 1.准备综合评价信息数据 + 2.准备财务要素信息 + 3.准备风险要素信息 + 4.准备指标明细数据 Parameters: - - + rid str 评价ID + cid str 企业ID Returns: - """ + rid = request.json['rid'] + general_rating_etl(rid) + financial_analysis(rid) -@company_route.route('/financial_analysis', methods=['POST']) -@verify_token -def financial_analysis(): - """ - 准备财务要素信息 - Parameters: - - - Returns: - - - """ - - -@company_route.route('/risk_analysis', methods=['POST']) -@verify_token -def risk_analysis(): - """ - 准备风险要素信息 - Parameters: - - - Returns: - - - """ - - -@company_route.route('/index_detail', methods=['POST']) -@verify_token -def index_detail(): - """ - 准备指标明细数据 - Parameters: - - - Returns: - - - """ \ No newline at end of file + return {"info": "数据准备完成"} diff --git a/company/scripts.py b/company/scripts.py index 2a916f8..2ac2a8c 100644 --- a/company/scripts.py +++ b/company/scripts.py @@ -100,19 +100,18 @@ def basic_info_etl(cid, company_name): insert_data_to_tfse('企业', '公司基本信息', data) -def general_rating_etl(rid, cid): +def general_rating_etl(rid): """ 执行综合信用评价信息数据清洗程序 Parameters: rid: str 评价ID - cid: str 企业ID Returns: res: desc """ # Parameters rating_result = find_data_in_tfse('评价', '评价结果', {"评价ID": rid})[0] - rating_record = find_data_in_tfse('评价', '评价结果', {"企业ID": cid}) + rating_record = find_data_in_tfse('评价', '评价结果', {"企业ID": rating_result['企业ID']}) df_records = pd.DataFrame(rating_record).sort_values('评价时间', ascending=False) @@ -135,19 +134,30 @@ def general_rating_etl(rid, cid): result['历史级别'] = list(json.loads(df_records[['信用等级', "信用评分", '评价时间', "评价方式", "变化趋势"]].T.to_json()).values()) # 生成雷达图数据 - rating_score = list() - rating_score.append(rating_result['经营评分']["环境"]) - rating_score.append(rating_result['经营评分']["社会责任"]) - rating_score.append(rating_result['经营评分']["公司治理"]) - rating_score.append(rating_result['财务评分']["盈利能力"]['合计']) - rating_score.append(rating_result['财务评分']["资产质量"]['合计']) - rating_score.append(rating_result['财务评分']["债务风险"]['合计']) - rating_score.append(rating_result['财务评分']["经营增长"]['合计']) - rating_score.append(43 - rating_result['风险评分']["合规风险"]) - rating_score.append(10 - rating_result['风险评分']["经营风险"]['合计']) - rating_score.append(10 - rating_result['风险评分']["关联风险"]['合计']) + rating_score = dict() + rating_score["环境"] = rating_result['经营评分']["环境"] + rating_score["社会责任"] = rating_result['经营评分']["社会责任"] + rating_score["公司治理"] = rating_result['经营评分']["公司治理"] + rating_score["盈利能力"] = rating_result['财务评分']["盈利能力"]['合计'] + rating_score["资产质量"] = rating_result['财务评分']["资产质量"]['合计'] + rating_score["债务风险"] = rating_result['财务评分']["债务风险"]['合计'] + rating_score["经营增长"] = rating_result['财务评分']["经营增长"]['合计'] + rating_score["合规风险"] = 43 - rating_result['风险评分']["合规风险"] + rating_score["经营风险"] = 10 - rating_result['风险评分']["经营风险"]['合计'] + rating_score["关联风险"] = 10 - rating_result['风险评分']["关联风险"]['合计'] - score_max = [10, 10, 10, 16, 18, 18, 18, 43, 10, 10] + score_max = { + "环境": 10, + "社会责任": 10, + "公司治理": 10, + "盈利能力": 16, + "资产质量": 18, + "债务风险": 18, + "经营增长": 18, + "合规风险": 43, + "经营风险": 10, + "关联风险": 10 + } result['综合信用表现'] = dict() result['综合信用表现']['指标雷达'] = dict() @@ -180,14 +190,94 @@ def general_rating_etl(rid, cid): # 生成信用分析数据 result['信用分析'] = dict() - result['信用分析']['经营分析'] = '经营分析是利用会计核算、统计核算、业务以及其他方面提供的数据信息,采用一定分析方法,依靠计算技术,来分析经济活动的过程及其结果,从而加强对企业运行情况的把握,监控运行过程的问题,发现商业机会以及提炼经营管理知识,以便充分挖掘人力、物力、财力潜力,合理安排生产经营活动,提高经济效益的一门经营管理科学和活动。 经营分析活动看成是管理活动的一个部分,管理目标、管理的内容决定了经营分析的内容。 或者说,没有明确的战略和战术层面的管理目标,没有明确的达成管理目标的思路,经营分析就会失去其核心意义。 经营分析系统是以业务运营支撑系统中其他系统的数据为基础,构建统一的企业级数据仓库。' + result['信用分析']['经营分析'] = '经营分析是利用会计核算、统计核算、业务以及其他方面提供的数据信息,。。。。' result['信用分析']['财务分析'] = '财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动、投资活动、经营活动、分配活动的盈利能力、营运能力、偿债能力和增长能力状况等进行分析与评价的经济管理活动。' result['信用分析']['风险分析'] = '风险分析有狭义和广义两种,狭义的风险分析是指通过定量分析的方法给出完成任务所需的费用、进度、性能三个随机变量的可实现值的概率分布。 而广义的风险分析则是一种识别和测算风险,开发、选择和管理方案来解决这些风险的有组织的手段。 它包括风险识别、风险评估和风险管理三方面的内容。 本文中论及风险分析时,都采用后一种定义。' result['信用分析']['评价意见'] = '评价意见是指在掌握大量数据资料的基础上,对经过筛选后的少数方案再具体化,通过进一步的调查、研究和评价,最后选出最令人满意的方案,其评价结论是方案审批的依据。' - result['信用分析']['查看报告'] = 'http://139.9.249.34:51010/app/file/get_company_report?file_id=61bc4c4733120000ce000695' + result['信用分析']['查看报告'] = '/file/get_company_report?file_id=61bc4c4733120000ce000695' insert_data_to_tfse('企业', '综合评价分析', result) +def financial_analysis(rid): + """ + Notes + Parameters: + - + Returns: + res: desc + """ + + # Parameters + rating_result = find_data_in_tfse('评价', '评价结果', {"评价ID": rid})[0] + rating_input = find_data_in_tfse('评价', '综合评价填报', {"评价ID": rid})[0] + industry = rating_input['行业选择'] + periods = list(pd.DataFrame(rating_input['财务填报']['资产负债表']).sort_values('报告期', ascending=False)['报告期'][0:2].values) + df_recent_2year = pd.DataFrame(find_data_in_tfse('企业', '指标明细', {'企业ID': rating_result['企业ID']})).sort_values('年报期', ascending=False)[0:2] + df_this = df_recent_2year[0:1] + df_last = df_recent_2year[1:2] + + # Returns + result = dict() + result['企业ID'] = rating_result['企业ID'] + # 财报期 + result['财报期'] = periods[0] + # 更新日期 + result['更新日期'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + + # 与行业平均对比 + score_avg = { + "盈利能力": 8, + "资产质量": 9, + "债务风险": 9, + "经营增长": 9 + } + score_actl = { + "盈利能力": rating_result['财务评分']['盈利能力']['合计'], + "资产质量": rating_result['财务评分']['资产质量']['合计'], + "债务风险": rating_result['财务评分']['债务风险']['合计'], + "经营增长": rating_result['财务评分']['经营增长']['合计'] + } + + # 与去年对比 + data_last = list(json.loads(df_last[['净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率', '总资产增长率', '总资产报酬率', '技术投入比率', '营业增长率', '资产负债率', '速动比率']].T.to_json()).values()) + url = "http://139.9.249.34:51012/tfse_rating/rating/financial_score" + headers = {'token': "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5", "content-type": "application/json"} + data = {"财务指标": data_last, "所属行业": industry} + score_last_origin = json.loads(requests.post(url=url, headers=headers, data=json.dumps(data)).text)['result'] + score_last = { + "盈利能力": score_last_origin['盈利能力']['合计'], + "资产质量": score_last_origin['资产质量']['合计'], + "债务风险": score_last_origin['债务风险']['合计'], + "经营增长": score_last_origin['经营增长']['合计'] + } + + df = pd.DataFrame({'今年值': score_actl, '去年值': score_last, "平均值": score_avg}) + + # 同行对比图 + df1 = df[['今年值', '平均值']] + df1 = df1.rename(columns={'今年值': '公司水平', '平均值': '平均水平'}) + result['同行对比图'] = json.loads(df1.to_json()) + + # 去年对比图 + df2 = df[['今年值', '去年值']] + df2 = df2.rename(columns={'今年值': periods[0], '去年值': periods[1]}) + result['去年对比图'] = json.loads(df2.to_json()) + + # 去年对比表 + result['去年对比表'] = json.loads((df['今年值']/df['去年值']-1).apply(lambda x: '{}%'.format(round(x*100, 2))).T.to_json()) + + # 同行对比表 + result['同行对比表'] = json.loads((df['今年值']/df['平均值']-1).apply(lambda x: '{}%'.format(round(x * 100, 2))).T.to_json()) + + # 指标详情 + result['指标详情'] = json.loads(df_this[ + ['净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率', '总资产增长率', '总资产报酬率', '技术投入比率', '营业增长率', '资产负债率', + '速动比率']].apply(lambda x: '{}%'.format(x.values[0]) if '率' in x.name else x.values[0]).T.to_json()) + + insert_data_to_tfse('企业', '财务要素分析', result) + + if __name__ == '__main__': - general_rating_etl("kSVoCeJ1", "cqqHE80f") + # general_rating_etl("kSVoCeJ1") + financial_analysis("bR2n0mV0")