2022-02-08 17:07:20 +08:00
|
|
|
|
import os
|
2021-12-15 10:55:20 +08:00
|
|
|
|
import json
|
2021-12-03 14:15:24 +08:00
|
|
|
|
import time
|
2021-12-15 10:55:20 +08:00
|
|
|
|
import requests
|
2021-12-03 14:15:24 +08:00
|
|
|
|
|
2022-03-22 14:20:42 +08:00
|
|
|
|
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, \
|
2022-03-21 17:07:03 +08:00
|
|
|
|
get_data_template, prepare_risk_data
|
2021-12-06 16:17:10 +08:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 14:20:42 +08:00
|
|
|
|
def get_rating_records_impl(cid):
|
2021-12-02 17:20:48 +08:00
|
|
|
|
"""
|
|
|
|
|
查询一家企业的所有评价记录
|
|
|
|
|
Parameters:
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
Returns:
|
|
|
|
|
records: 企业的评价记录
|
|
|
|
|
"""
|
2022-03-22 17:08:27 +08:00
|
|
|
|
cc_report = '/file/pdf?file_id={}'
|
|
|
|
|
esg_report = '/file/pdf?file_id={}'
|
|
|
|
|
cc_certification = "/file/pdf?file_id={}"
|
|
|
|
|
esg_certification = "/file/pdf?file_id={}"
|
2022-03-22 14:20:42 +08:00
|
|
|
|
|
|
|
|
|
records = FIND_ALL_DATA_BY_REQ("企业数据", "评价记录", {"企业ID": cid},
|
|
|
|
|
["评价ID", "评价项目", "评价方式", "进行状态", "评价结果", "报告fid", "证书fid"])
|
2022-01-06 13:51:00 +08:00
|
|
|
|
for record in records:
|
|
|
|
|
if records is not None:
|
2022-03-02 16:28:31 +08:00
|
|
|
|
if record['评价项目'] == '综合信用评价':
|
2022-03-22 14:20:42 +08:00
|
|
|
|
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
|
2022-03-02 16:28:31 +08:00
|
|
|
|
record.pop('报告fid')
|
|
|
|
|
record.pop('证书fid')
|
|
|
|
|
else:
|
2022-03-22 14:20:42 +08:00
|
|
|
|
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
|
2022-03-02 16:28:31 +08:00
|
|
|
|
record.pop('报告fid')
|
|
|
|
|
record.pop('证书fid')
|
2021-12-02 17:20:48 +08:00
|
|
|
|
return records
|
2021-12-03 14:15:24 +08:00
|
|
|
|
|
|
|
|
|
|
2022-03-18 16:44:35 +08:00
|
|
|
|
def start_cc_rating_impl(cid):
|
2021-12-03 14:15:24 +08:00
|
|
|
|
"""
|
2022-03-18 16:44:35 +08:00
|
|
|
|
开始综合信用评价的数据填报
|
2021-12-03 14:15:24 +08:00
|
|
|
|
Parameters:
|
2022-03-18 16:44:35 +08:00
|
|
|
|
cid: str 企业ID
|
2021-12-03 14:15:24 +08:00
|
|
|
|
Returns:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
input_data: dict 填报信息
|
2021-12-03 14:15:24 +08:00
|
|
|
|
"""
|
|
|
|
|
|
2022-03-21 17:07:03 +08:00
|
|
|
|
# 检查本年度填报状态
|
|
|
|
|
def check_input_data():
|
|
|
|
|
"""
|
|
|
|
|
input_data: 已存在的填报数据
|
|
|
|
|
根据企业ID+当前年度,查询是否存在填报数据
|
|
|
|
|
若存在填报数据,则返回填报数据
|
|
|
|
|
若不存在填报数据,则返回False
|
|
|
|
|
"""
|
|
|
|
|
input_data = FIND_SINGLE_DATA_BY_REQ("综信评价数据", "填报数据", {"企业ID": cid, "评价年度": get_current_year()},
|
2022-03-22 10:29:52 +08:00
|
|
|
|
["评价ID", "企业名称", "评价年度", "行业选择", "经营问卷", "财务填报"])
|
2022-03-21 17:07:03 +08:00
|
|
|
|
|
|
|
|
|
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"]}, "进行状态")
|
2022-03-22 10:29:52 +08:00
|
|
|
|
# 把不需要返回的字段删掉
|
|
|
|
|
param.pop('评价ID')
|
|
|
|
|
# 方法返回结果
|
|
|
|
|
return ("本年度已评价", {}) if rating_status == "完成" else ("继续填报", param)
|
2022-03-21 17:07:03 +08:00
|
|
|
|
|
|
|
|
|
# 不存在填报数据的情况
|
|
|
|
|
def case_input_not_exist():
|
|
|
|
|
|
|
|
|
|
# new_rid: 新生成填报ID
|
2022-03-01 16:46:18 +08:00
|
|
|
|
new_rid = gen_new_rid(8)
|
2022-03-21 17:07:03 +08:00
|
|
|
|
# report_dates: 生成报告期
|
2021-12-03 14:15:24 +08:00
|
|
|
|
report_dates = make_3_report_dates()
|
2022-03-21 17:07:03 +08:00
|
|
|
|
# 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
|
2022-03-22 10:29:52 +08:00
|
|
|
|
rating_record_template['企业名称'] = company_name
|
2022-03-21 17:07:03 +08:00
|
|
|
|
rating_record_template['评价项目'] = "综合信用评价"
|
|
|
|
|
rating_record_template['评价方式'] = "企业申报"
|
|
|
|
|
rating_record_template['进行状态'] = "进行"
|
2022-03-22 10:29:52 +08:00
|
|
|
|
rating_record_template['开始填报时间'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
2022-03-21 17:07:03 +08:00
|
|
|
|
# 插入新评价记录
|
|
|
|
|
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()
|
2022-03-22 10:29:52 +08:00
|
|
|
|
# 评价流程
|
|
|
|
|
prepare_rating_record_template()
|
2022-03-21 17:07:03 +08:00
|
|
|
|
# 填报数据
|
|
|
|
|
prepare_input_template()
|
|
|
|
|
# 风险数据
|
|
|
|
|
prepare_risk_data(cid, new_rid, company_name)
|
|
|
|
|
|
|
|
|
|
return "开始填报", check_input_data()
|
|
|
|
|
|
2022-03-22 10:29:52 +08:00
|
|
|
|
# 执行【start_cc_rating_impl】方法
|
|
|
|
|
def execute_func():
|
2022-03-21 17:07:03 +08:00
|
|
|
|
input_data = check_input_data()
|
|
|
|
|
if input_data:
|
|
|
|
|
return case_input_exist(input_data)
|
|
|
|
|
else:
|
|
|
|
|
return case_input_not_exist()
|
2021-12-03 14:15:24 +08:00
|
|
|
|
|
2022-03-22 10:29:52 +08:00
|
|
|
|
return execute_func()
|
2021-12-03 17:11:23 +08:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 15:21:17 +08:00
|
|
|
|
def save_cc_rating_input_form(cid, input_form):
|
2021-12-03 17:11:23 +08:00
|
|
|
|
"""
|
2022-03-18 16:44:35 +08:00
|
|
|
|
保存综合信用评价填报数据
|
2022-03-22 15:21:17 +08:00
|
|
|
|
cid: str 企业ID
|
|
|
|
|
input_form: dict 填报数据
|
2021-12-03 17:11:23 +08:00
|
|
|
|
"""
|
2022-03-18 16:44:35 +08:00
|
|
|
|
# STEP_1
|
|
|
|
|
# 根据企业ID查询正在进行中的评价服务,获取评价ID,即rid
|
|
|
|
|
# 根据rid,更新填报数据
|
2022-03-22 15:21:17 +08:00
|
|
|
|
rid = FIND_SINGLE_COLUMN_BY_REQ("企业数据", "评价记录", {"企业ID": cid, "评价项目": "综合信用评价", "进行状态": "进行"}, '评价ID')
|
|
|
|
|
UPDATE_SINGLE_DATA("综信评价数据", "填报数据", {"评价ID": rid}, input_form)
|
2022-03-18 16:44:35 +08:00
|
|
|
|
|
|
|
|
|
# STEP_2
|
2022-03-22 15:21:17 +08:00
|
|
|
|
# 更新评价流程
|
|
|
|
|
process_record = FIND_SINGLE_DATA_BY_REQ("综信评价数据", "评价流程", {"评价ID": rid}, ["评价流程"])
|
|
|
|
|
if process_record:
|
|
|
|
|
if process_record['评价流程']['问卷填报'] == 0:
|
|
|
|
|
update_process_status(rid, {"评价流程.问卷填报": 1})
|
|
|
|
|
if process_record['评价流程']['财务数据填报'] == 0:
|
|
|
|
|
update_process_status(rid, {"评价流程.财务数据填报": 1})
|
2021-12-06 15:44:52 +08:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 16:06:01 +08:00
|
|
|
|
def choose_industry_impl():
|
2021-12-06 15:44:52 +08:00
|
|
|
|
"""
|
|
|
|
|
选择行业
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
2021-12-15 10:55:20 +08:00
|
|
|
|
-
|
2021-12-06 15:44:52 +08:00
|
|
|
|
"""
|
2022-02-08 17:07:20 +08:00
|
|
|
|
industry_json = '/static/template/industry.json'
|
|
|
|
|
with open(os.path.dirname(__file__)+industry_json, "r", encoding='utf-8') as f:
|
|
|
|
|
data = json.load(f)
|
2021-12-06 15:44:52 +08:00
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
2021-12-06 16:17:10 +08:00
|
|
|
|
def questionnaire_script(industry):
|
2021-12-06 15:44:52 +08:00
|
|
|
|
"""
|
2021-12-06 16:17:10 +08:00
|
|
|
|
问卷模板
|
2021-12-06 15:44:52 +08:00
|
|
|
|
Parameters:
|
2021-12-06 16:17:10 +08:00
|
|
|
|
industry: 行业
|
2021-12-06 15:44:52 +08:00
|
|
|
|
Returns:
|
2021-12-06 16:17:10 +08:00
|
|
|
|
data: 问卷内容
|
2021-12-06 15:44:52 +08:00
|
|
|
|
"""
|
2022-01-06 12:38:01 +08:00
|
|
|
|
try:
|
2022-02-08 17:07:20 +08:00
|
|
|
|
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)
|
2022-01-06 12:38:01 +08:00
|
|
|
|
return data
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
data = [
|
|
|
|
|
{"label": "环境", "children": []},
|
|
|
|
|
{"label": "社会责任", "children": []},
|
|
|
|
|
{"label": "公司治理", "children": []}
|
|
|
|
|
]
|
|
|
|
|
return data
|
2021-12-15 10:55:20 +08:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 16:02:38 +08:00
|
|
|
|
def exec_general_rating_impl(cid):
|
2021-12-15 10:55:20 +08:00
|
|
|
|
"""
|
2022-03-22 16:02:38 +08:00
|
|
|
|
执行综合信用打分
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
return: 执行结果信息
|
2021-12-15 10:55:20 +08:00
|
|
|
|
"""
|
|
|
|
|
# pre
|
2022-03-22 16:02:38 +08:00
|
|
|
|
rid = FIND_SINGLE_COLUMN_BY_REQ("企业数据", "评价记录", {"企业ID": cid, "进行状态": "进行"}, "评价ID")
|
2021-12-15 10:55:20 +08:00
|
|
|
|
|
2022-03-22 16:02:38 +08:00
|
|
|
|
if not rid:
|
2021-12-30 14:24:16 +08:00
|
|
|
|
return False, "没有正在进行的评价"
|
2021-12-15 10:55:20 +08:00
|
|
|
|
|
|
|
|
|
# Parameters
|
2022-03-22 16:02:38 +08:00
|
|
|
|
input_data = FIND_SINGLE_DATA_BY_REQ("综信评价数据", "填报数据", {"评价ID": rid}, ["评价ID", "企业ID", "企业名称", "评价年度", "行业选择", "经营问卷", "财务填报"])
|
|
|
|
|
risk_data = FIND_SINGLE_DATA_BY_REQ("综信评价数据", "风险数据", {"评价ID": rid}, ["经营风险", "合规风险", "关联风险"])
|
|
|
|
|
rating_inputs = {**input_data, **{"风险数据": risk_data}}
|
2021-12-15 10:55:20 +08:00
|
|
|
|
|
2021-12-24 16:59:37 +08:00
|
|
|
|
# 打分模型
|
|
|
|
|
def general_model():
|
2022-03-22 16:02:38 +08:00
|
|
|
|
url = "https://api.fecribd.com/tfse_rating/rating/general_model"
|
2021-12-24 16:59:37 +08:00
|
|
|
|
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'],
|
2021-12-30 14:24:16 +08:00
|
|
|
|
"评价时间": time.strftime("%Y-%m-%d", time.localtime())
|
2021-12-24 16:59:37 +08:00
|
|
|
|
}
|
2022-03-22 16:02:38 +08:00
|
|
|
|
UPDATE_SINGLE_DATA("企业数据", "评价记录", {"评价ID": rid}, update_data)
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.模型打分": 1})
|
2021-12-24 16:59:37 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.模型打分": -1})
|
2021-12-24 16:59:37 +08:00
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 生成报告
|
|
|
|
|
def gen_report():
|
2022-03-22 16:02:38 +08:00
|
|
|
|
url = "https://api.fecribd.com/tfse_rating/report/gen_general_rating_report"
|
2021-12-28 10:47:22 +08:00
|
|
|
|
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']
|
|
|
|
|
}
|
2021-12-31 03:21:48 +08:00
|
|
|
|
res = requests.post(url, headers=headers, data=json.dumps(data))
|
2021-12-28 10:47:22 +08:00
|
|
|
|
if res.status_code == 200:
|
|
|
|
|
update_data = {
|
|
|
|
|
"报告fid": json.loads(res.text)['result']['FileID']
|
|
|
|
|
}
|
2022-03-22 16:02:38 +08:00
|
|
|
|
UPDATE_SINGLE_DATA("企业数据", "评价记录", {"评价ID": rid}, update_data)
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.报告生成": 1})
|
2021-12-28 10:47:22 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.报告生成": -1})
|
2021-12-28 10:47:22 +08:00
|
|
|
|
return False
|
2021-12-27 16:50:50 +08:00
|
|
|
|
|
|
|
|
|
# 生成证书
|
|
|
|
|
def gen_certified():
|
2022-03-22 16:02:38 +08:00
|
|
|
|
url = "https://api.fecribd.com/tfse_rating/certificate/generate_certificate"
|
2022-01-13 14:14:55 +08:00
|
|
|
|
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']
|
|
|
|
|
}
|
2022-03-22 16:02:38 +08:00
|
|
|
|
UPDATE_SINGLE_DATA("企业数据", "评价记录", {"评价ID": rid}, update_data)
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.证书生成": 1})
|
2022-01-13 14:14:55 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.证书生成": -1})
|
2022-01-13 14:14:55 +08:00
|
|
|
|
return False
|
2021-12-27 16:50:50 +08:00
|
|
|
|
|
|
|
|
|
# 生成企业主页数据
|
|
|
|
|
def company_index():
|
2022-03-22 16:02:38 +08:00
|
|
|
|
url = "https://api.fecribd.com/etl_tfse/company/company_index_etl"
|
2021-12-28 10:47:22 +08:00
|
|
|
|
token = "dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4"
|
|
|
|
|
headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"}
|
|
|
|
|
data = {
|
|
|
|
|
"rid": rating_inputs['评价ID']
|
|
|
|
|
}
|
2021-12-31 03:21:48 +08:00
|
|
|
|
res = requests.post(url, headers=headers, data=json.dumps(data))
|
2021-12-28 10:47:22 +08:00
|
|
|
|
if res.status_code == 200:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.综合信用评价主页": 1})
|
|
|
|
|
update_process_status(rid, {"评价流程.财务要素评价主页": 1})
|
|
|
|
|
update_process_status(rid, {"评价流程.公司风险分析主页": 1})
|
2021-12-28 10:47:22 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-21 17:07:03 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.综合信用评价主页": -1})
|
2021-12-28 10:47:22 +08:00
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
if not general_model():
|
|
|
|
|
return False, "打分失败"
|
|
|
|
|
|
|
|
|
|
if not gen_report():
|
2022-01-13 14:14:55 +08:00
|
|
|
|
return False, "生成报告失败"
|
|
|
|
|
|
|
|
|
|
if not gen_certified():
|
|
|
|
|
return False, "生成证书失败"
|
2021-12-28 10:47:22 +08:00
|
|
|
|
|
|
|
|
|
if not company_index():
|
2022-01-13 14:14:55 +08:00
|
|
|
|
return False, "准备主页数据失败"
|
2021-12-28 10:47:22 +08:00
|
|
|
|
|
2022-03-22 16:02:38 +08:00
|
|
|
|
UPDATE_SINGLE_DATA("企业数据", "评价记录", {"评价ID": rid}, {"进行状态": "完成"})
|
2021-12-30 14:24:16 +08:00
|
|
|
|
|
2021-12-28 10:47:22 +08:00
|
|
|
|
return True, "执行成功"
|