import os import json import time import requests from cc_rating.cc_db import * from cc_rating.cc_utils import get_current_year, gen_new_rid, make_3_report_dates, update_process_status, \ get_data_template, prepare_risk_data def get_rating_records_impl(cid): """ 查询一家企业的所有评价记录 Parameters: cid: 企业ID Returns: records: 企业的评价记录 """ cc_report = '/file/get_company_report?file_id={}' esg_report = '/file/get_company_esg_report?file_id={}' cc_certification = "/file/get_certification?file_id={}" esg_certification = "/file/get_esg_certification?file_id={}" records = FIND_ALL_DATA_BY_REQ("企业数据", "评价记录", {"企业ID": cid}, ["评价ID", "评价项目", "评价方式", "进行状态", "评价结果", "报告fid", "证书fid"]) for record in records: if records is not None: if record['评价项目'] == '综合信用评价': record['报告'] = cc_report.format(record['报告fid']) if record['报告fid'] is not None else None record['证书'] = cc_certification.format(record['证书fid']) if record['证书fid'] is not None else None record.pop('报告fid') record.pop('证书fid') else: record['报告'] = esg_report.format(record['报告fid']) if record['报告fid'] is not None else None record['证书'] = esg_certification.format(record['证书fid']) if record['证书fid'] is not None else None record.pop('报告fid') record.pop('证书fid') return records def start_cc_rating_impl(cid): """ 开始综合信用评价的数据填报 Parameters: cid: str 企业ID Returns: input_data: dict 填报信息 """ # 检查本年度填报状态 def check_input_data(): """ input_data: 已存在的填报数据 根据企业ID+当前年度,查询是否存在填报数据 若存在填报数据,则返回填报数据 若不存在填报数据,则返回False """ input_data = FIND_SINGLE_DATA_BY_REQ("综信评价数据", "填报数据", {"企业ID": cid, "评价年度": get_current_year()}, ["评价ID", "企业名称", "评价年度", "行业选择", "经营问卷", "财务填报"]) return input_data if input_data else False # 存在填报数据的情况 def case_input_exist(param): """ param: dict 填报数据 根据评价ID查询评价进行状态 若评价已完成,返回‘本年度已评价’的提示,且返回空对象 若评价进行中,返回‘继续填报’的提示,且返回填报数据 """ # rating_status: 评价服务状态 rating_status = FIND_SINGLE_COLUMN_BY_REQ("企业数据", "评价记录", {"评价ID": param["评价ID"]}, "进行状态") # 把不需要返回的字段删掉 param.pop('评价ID') # 方法返回结果 return ("本年度已评价", {}) if rating_status == "完成" else ("继续填报", param) # 不存在填报数据的情况 def case_input_not_exist(): # new_rid: 新生成填报ID new_rid = gen_new_rid(8) # report_dates: 生成报告期 report_dates = make_3_report_dates() # company_name: 企业名称 company_name = FIND_SINGLE_COLUMN_BY_REQ('应用端', '企业用户', {"企业ID": cid}, '企业名称') def prepare_input_template(): """ 根据模板生成新的填报数据 input_template: 填报数据模板 """ input_template = get_data_template('input') input_template['评价ID'] = new_rid input_template['企业ID'] = cid input_template['企业名称'] = company_name input_template['评价年度'] = get_current_year() for sheets in ['资产负债表', '利润表', '补充数据表']: for i in range(3): input_template['财务填报'][sheets][i]['报告期'] = report_dates[i] # 插入新填报记录 UPSERT_SINGLE_DATA('综信评价数据', '填报数据', {"评价ID": input_template['评价ID']}, input_template) def prepare_rating_record_template(): """ 根据模板生成新的评价记录数据 rating_result_template: 评价记录模板 """ rating_record_template = get_data_template('rating') rating_record_template['评价ID'] = new_rid rating_record_template['企业ID'] = cid rating_record_template['企业名称'] = company_name rating_record_template['评价项目'] = "综合信用评价" rating_record_template['评价方式'] = "企业申报" rating_record_template['进行状态'] = "进行" rating_record_template['开始填报时间'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 插入新评价记录 UPSERT_SINGLE_DATA('企业数据', '评价记录', {"评价ID": rating_record_template['评价ID']}, rating_record_template) def prepare_process_template(): """ 根据数据模板生成新的评价流程数据 process_template: 评价流程 """ process_template = get_data_template('process') process_template['评价ID'] = new_rid process_template['企业ID'] = cid # 插入新评价流程 UPSERT_SINGLE_DATA('综信评价数据', '评价流程', {"评价ID": process_template['评价ID']}, process_template) # 评价记录 prepare_process_template() # 评价流程 prepare_rating_record_template() # 填报数据 prepare_input_template() # 风险数据 prepare_risk_data(cid, new_rid, company_name) return "开始填报", check_input_data() # 执行【start_cc_rating_impl】方法 def execute_func(): input_data = check_input_data() if input_data: return case_input_exist(input_data) else: return case_input_not_exist() return execute_func() def save_comprehensive_credit_rating_input_form(cid, input_form): """ 保存综合信用评价填报数据 Parameters: cid: str 企业ID input_form: dict 填报数据 Returns: res: None """ # STEP_1 # 根据企业ID查询正在进行中的评价服务,获取评价ID,即rid # 根据rid,更新填报数据 rid = FIND_RATING_RECORDS({"企业ID": cid, "进行状态": "进行"})[0]['评价ID'] UPDATE_COMPREHENSIVE_CREDIT_INPUT_DATA(rid, input_form) # STEP_2 # 查询评价流程 records = FIND_CC_RATING_PROCESS_DATA('综合评价流程', {"评价ID": rid}) if records: record = records[0] if not record['评价流程']['问卷填报']: renew_data = {"评价流程.问卷填报": 1} update_process_status(rid, renew_data) elif not record['评价流程']['财务数据填报']: renew_data = {"评价流程.财务数据填报": 1} update_process_status(rid, renew_data) def choose_industry_script(): """ 选择行业 Parameters: - Returns: - """ industry_json = '/static/template/industry.json' with open(os.path.dirname(__file__)+industry_json, "r", encoding='utf-8') as f: data = json.load(f) return data def questionnaire_script(industry): """ 问卷模板 Parameters: industry: 行业 Returns: data: 问卷内容 """ try: questionnaire_json = '/static/questionnaire/{}.json'.format(industry) with open(os.path.dirname(__file__)+questionnaire_json, "r", encoding='utf-8') as f: data = json.load(f) return data except FileNotFoundError: data = [ {"label": "环境", "children": []}, {"label": "社会责任", "children": []}, {"label": "公司治理", "children": []} ] return data def exec_general_rating_scripts(cid): """ Notes Parameters: - Returns: - """ # pre record = FIND_RATING_RECORDS({"企业ID": cid, "进行状态": "进行"}) if not record: return False, "没有正在进行的评价" # Parameters rid = record[0]["评价ID"] inputs = find_rating_inputs({"评价ID": rid})[0] risks = {"风险数据": find_risk_data(rid)[0]} risks["风险数据"].pop('企业ID') risks["风险数据"].pop('评价ID') rating_inputs = {**inputs, **risks} # 打分模型 def general_model(): url = "http://api.fecribd.com/tfse_rating/rating/general_model" token = "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5" headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} data = json.dumps({"input_data": rating_inputs}) res = requests.post(url, headers=headers, data=data) if res.status_code == 200: update_data = { "评价结果": json.loads(res.text)['result'], "评价时间": time.strftime("%Y-%m-%d", time.localtime()) } update_rating_records({"评价ID": rid}, update_data) update_process_status(rid, {"评价流程.模型打分": 1}) update_process_status(rid, {"评价流程.分析指标明细主页": 1}) return True else: update_process_status(rid, {"评价流程.模型打分": -1}) return False # 生成报告 def gen_report(): url = "http://api.fecribd.com/tfse_rating/report/gen_general_rating_report" token = "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5" headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} data = { "company": rating_inputs['企业名称'], "cid": rating_inputs['企业ID'], "rid": rating_inputs['评价ID'] } res = requests.post(url, headers=headers, data=json.dumps(data)) if res.status_code == 200: update_data = { "报告fid": json.loads(res.text)['result']['FileID'] } update_rating_records({"评价ID": rid}, update_data) update_process_status(rid, {"评价流程.报告生成": 1}) return True else: update_process_status(rid, {"评价流程.报告生成": -1}) return False # 生成证书 def gen_certified(): url = "http://api.fecribd.com/tfse_rating/certificate/generate_certificate" token = "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5" headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} data = { "company": rating_inputs['企业名称'], "cid": rating_inputs['企业ID'], "rid": rating_inputs['评价ID'] } res = requests.post(url, headers=headers, data=json.dumps(data)) if res.status_code == 200: update_data = { "证书fid": json.loads(res.text)['result']['FileID'] } update_rating_records({"评价ID": rid}, update_data) update_process_status(rid, {"评价流程.证书生成": 1}) return True else: update_process_status(rid, {"评价流程.证书生成": -1}) return False # 生成企业主页数据 def company_index(): url = "http://api.fecribd.com/etl_tfse/company/company_index_etl" token = "dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4" headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} data = { "rid": rating_inputs['评价ID'] } res = requests.post(url, headers=headers, data=json.dumps(data)) if res.status_code == 200: update_process_status(rid, {"评价流程.综合信用评价主页": 1}) update_process_status(rid, {"评价流程.财务要素评价主页": 1}) update_process_status(rid, {"评价流程.公司风险分析主页": 1}) return True else: update_process_status(rid, {"评价流程.综合信用评价主页": -1}) return False if not general_model(): return False, "打分失败" if not gen_report(): return False, "生成报告失败" if not gen_certified(): return False, "生成证书失败" if not company_index(): return False, "准备主页数据失败" update_rating_records({"评价ID": rid}, {"进行状态": "完成"}) return True, "执行成功" if __name__ == '__main__': get_rating_records_impl("EkKaAgXZ")