2022-02-23 17:47:24 +08:00
|
|
|
|
from user.user_db import FIND_USER_INFO
|
|
|
|
|
from user.user_impl import check_verified
|
2022-03-22 14:41:28 +08:00
|
|
|
|
from esg.esg_utils import *
|
|
|
|
|
from esg.esg_db import *
|
2022-02-23 17:47:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def rating_records_by_cid(cid):
|
|
|
|
|
"""
|
|
|
|
|
查询一家企业的所有评价记录
|
|
|
|
|
Parameters:
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
Returns:
|
|
|
|
|
records: 企业的评价记录
|
|
|
|
|
"""
|
|
|
|
|
report_link = '/file/get_company_report?file_id={}'
|
|
|
|
|
certification_link = "/file/get_certification?file_id={}"
|
|
|
|
|
records = find_rating_records({"企业ID": cid, "评价项目": "ESG评价"})
|
|
|
|
|
for record in records:
|
|
|
|
|
if records is not None:
|
|
|
|
|
record['报告'] = report_link.format(record['报告fid']) if record['报告fid'] is not None else None
|
|
|
|
|
record['证书'] = certification_link.format(record['证书fid']) if record['证书fid'] is not None else None
|
|
|
|
|
record.pop('企业ID')
|
|
|
|
|
record.pop('报告fid')
|
|
|
|
|
record.pop('证书fid')
|
|
|
|
|
return records
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def start_esg_rating_script(cid):
|
|
|
|
|
"""
|
|
|
|
|
开始进行esg评价的数据填报
|
|
|
|
|
Parameters:
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
Returns:
|
|
|
|
|
record 填报信息
|
|
|
|
|
"""
|
2022-03-22 14:41:28 +08:00
|
|
|
|
# 检查本年度填报状态
|
|
|
|
|
def check_input_data():
|
|
|
|
|
"""
|
|
|
|
|
input_data: 已存在的填报数据
|
|
|
|
|
根据企业ID+当前年度,查询是否存在填报数据
|
|
|
|
|
若存在填报数据,则返回填报数据
|
|
|
|
|
若不存在填报数据,则返回False
|
|
|
|
|
"""
|
|
|
|
|
exist_input_form = find_rating_inputs({"企业ID": cid, "评价年度": get_current_year()})
|
|
|
|
|
return exist_input_form if exist_input_form else False
|
|
|
|
|
|
|
|
|
|
# 存在填报数据情况
|
|
|
|
|
def case_input_exist(param):
|
|
|
|
|
"""
|
|
|
|
|
param: dict 填报数据
|
|
|
|
|
根据评价ID查询评价进行状态
|
|
|
|
|
若评价已完成,返回‘本年度已评价’的提示,且返回空对象
|
|
|
|
|
若评价进行中,返回‘继续填报’的提示,且返回填报数据
|
|
|
|
|
"""
|
|
|
|
|
rating_records = find_rating_records({"评价ID": param[0]["评价ID"]})
|
|
|
|
|
param[0].pop('评价ID')
|
|
|
|
|
if rating_records:
|
|
|
|
|
rating_status = rating_records[0]['进行状态']
|
2022-02-23 17:47:24 +08:00
|
|
|
|
else:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
rating_status = None
|
|
|
|
|
return ("本年度已评价", {}) if rating_status == '完成' else ("继续填报", param)
|
|
|
|
|
|
|
|
|
|
# 不存在填报数据情况
|
|
|
|
|
def case_input_not_exist():
|
|
|
|
|
# new_rid: 新生成填报ID
|
2022-02-23 17:47:24 +08:00
|
|
|
|
new_rid = gen_new_rid()
|
2022-03-22 14:41:28 +08:00
|
|
|
|
# report_dates: 生成报告期
|
2022-02-23 17:47:24 +08:00
|
|
|
|
report_dates = make_3_report_dates()
|
2022-03-22 14:41:28 +08:00
|
|
|
|
# company_name: 企业名称
|
2022-02-23 17:47:24 +08:00
|
|
|
|
company_name = FIND_USER_INFO({"企业ID": cid})[0]['企业名称']
|
|
|
|
|
|
2022-03-22 14:41:28 +08:00
|
|
|
|
def prepare_input_template():
|
|
|
|
|
"""
|
|
|
|
|
根据模板生成新的填报数据
|
|
|
|
|
input_template: 填报数据模板
|
|
|
|
|
"""
|
|
|
|
|
input_template = get_data_template('esg_input')
|
|
|
|
|
input_template['评价ID'] = new_rid
|
|
|
|
|
input_template['企业ID'] = cid
|
|
|
|
|
input_template['企业名称'] = company_name
|
|
|
|
|
input_template['评价年度'] = get_current_year()
|
|
|
|
|
input_template['公司当年收入(万元)'] = dict()
|
|
|
|
|
for y in range(3):
|
|
|
|
|
input_template['公司当年收入(万元)'][report_dates[y]] = None
|
|
|
|
|
for sheets in ['环境问卷', '社会问卷', '治理问卷']:
|
|
|
|
|
for i in range(3):
|
|
|
|
|
input_template[sheets]['近三年公司数据'][i]['年份'] = report_dates[i]
|
|
|
|
|
insert_general_input(input_template)
|
|
|
|
|
|
|
|
|
|
def prepare_rating_record_template():
|
|
|
|
|
"""
|
|
|
|
|
根据模板生成新的评价记录数据
|
|
|
|
|
rating_result_template: 评价记录模板
|
|
|
|
|
"""
|
2022-04-08 15:50:16 +08:00
|
|
|
|
rating_record_template = get_data_template('cc_rating')
|
2022-03-22 14:41:28 +08:00
|
|
|
|
rating_record_template['评价ID'] = new_rid
|
|
|
|
|
rating_record_template['企业ID'] = cid
|
|
|
|
|
rating_record_template['评价项目'] = "ESG评价"
|
|
|
|
|
rating_record_template['评价方式'] = "企业申报"
|
|
|
|
|
rating_record_template['进行状态'] = "进行"
|
|
|
|
|
insert_rating_records(rating_record_template)
|
|
|
|
|
|
|
|
|
|
def prepare_process_template():
|
|
|
|
|
"""
|
|
|
|
|
根据数据模板生成新的评价流程数据
|
|
|
|
|
process_template: 评价流程
|
|
|
|
|
"""
|
|
|
|
|
process_template = get_data_template('esg_process')
|
|
|
|
|
process_template['评价ID'] = new_rid
|
|
|
|
|
process_template['企业ID'] = cid
|
|
|
|
|
insert_process_records(process_template)
|
|
|
|
|
|
|
|
|
|
# 评价流程
|
|
|
|
|
prepare_rating_record_template()
|
|
|
|
|
# 评价记录
|
|
|
|
|
prepare_process_template()
|
|
|
|
|
# 填报数据
|
|
|
|
|
prepare_input_template()
|
|
|
|
|
# 风险数据
|
|
|
|
|
prepare_risk_data(cid, new_rid, company_name)
|
|
|
|
|
|
|
|
|
|
return "开始填报", check_input_data()
|
|
|
|
|
|
|
|
|
|
# 主方法
|
|
|
|
|
def main_job():
|
|
|
|
|
# 检查是否认证
|
|
|
|
|
if not check_verified(cid):
|
|
|
|
|
return "该企业未认证", {}
|
|
|
|
|
# 检查是否有填报记录
|
|
|
|
|
input_data = check_input_data()
|
|
|
|
|
if input_data:
|
|
|
|
|
return case_input_exist(input_data)
|
|
|
|
|
else:
|
|
|
|
|
return case_input_not_exist()
|
2022-02-23 17:47:24 +08:00
|
|
|
|
|
2022-03-22 14:41:28 +08:00
|
|
|
|
return main_job()
|
2022-02-23 17:47:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def save_general_input_form(cid, input_form):
|
|
|
|
|
"""
|
|
|
|
|
保存综合信用评价填报
|
|
|
|
|
Parameters:
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
input_form: 填报表单
|
|
|
|
|
Returns:
|
|
|
|
|
res: desc
|
|
|
|
|
"""
|
2022-03-10 15:56:57 +08:00
|
|
|
|
# 保存填报数据
|
2022-03-08 14:23:05 +08:00
|
|
|
|
rid = find_rating_records({"企业ID": cid, "进行状态": "进行", "评价项目": "ESG评价"})[0]['评价ID']
|
2022-02-23 17:47:24 +08:00
|
|
|
|
update_general_input(rid, input_form)
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.数据填报": 1})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def exec_esg_rating_scripts(cid):
|
|
|
|
|
"""
|
|
|
|
|
开始esg评价流程
|
|
|
|
|
Parameters:
|
|
|
|
|
cid: 企业ID
|
|
|
|
|
Returns:
|
|
|
|
|
res: desc
|
|
|
|
|
"""
|
2022-03-22 14:41:28 +08:00
|
|
|
|
# prepare
|
2022-03-08 16:47:59 +08:00
|
|
|
|
record = find_rating_records({"企业ID": cid, "进行状态": "进行", "评价项目": "ESG评价"})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
|
|
|
|
|
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')
|
|
|
|
|
risks["风险数据"].pop('更新日期')
|
|
|
|
|
rating_inputs = {**inputs, **risks}
|
|
|
|
|
|
|
|
|
|
# 打分模型
|
|
|
|
|
def esg_model():
|
2022-03-08 16:47:59 +08:00
|
|
|
|
url = "http://api.fecribd.com/tfse_rating/esg/esg_model"
|
2022-02-23 17:47:24 +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'],
|
|
|
|
|
"评价时间": time.strftime("%Y-%m-%d", time.localtime())
|
|
|
|
|
}
|
|
|
|
|
update_rating_records({"评价ID": rid}, update_data)
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.模型打分": 1})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.模型打分": -1})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 生成报告
|
|
|
|
|
def gen_report():
|
2022-03-02 16:01:35 +08:00
|
|
|
|
url = "http://api.fecribd.com/tfse_rating/report/generate_esg_report"
|
2022-02-23 17:47:24 +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']
|
|
|
|
|
}
|
|
|
|
|
update_rating_records({"评价ID": rid}, update_data)
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.报告生成": 1})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.报告生成": -1})
|
2022-02-23 17:47:24 +08:00
|
|
|
|
return False
|
|
|
|
|
|
2022-03-01 09:56:33 +08:00
|
|
|
|
# 生成证书
|
|
|
|
|
def gen_certified():
|
2022-03-02 16:01:35 +08:00
|
|
|
|
url = "http://api.fecribd.com/tfse_rating/certificate/generate_certificate"
|
2022-03-01 09:56:33 +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'],
|
|
|
|
|
"type": "esg"
|
|
|
|
|
}
|
|
|
|
|
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)
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.证书生成": 1})
|
2022-03-01 09:56:33 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.证书生成": -1})
|
2022-03-01 09:56:33 +08:00
|
|
|
|
return False
|
|
|
|
|
|
2022-02-24 16:15:04 +08:00
|
|
|
|
# 生成企业主页数据
|
|
|
|
|
def esg_index():
|
2022-03-02 16:01:35 +08:00
|
|
|
|
url = "http://api.fecribd.com/etl_tfse/company/esg_index_etl"
|
2022-02-24 16:15:04 +08:00
|
|
|
|
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:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.主页ESG数据生成": 1})
|
2022-02-24 16:15:04 +08:00
|
|
|
|
return True
|
|
|
|
|
else:
|
2022-03-22 14:41:28 +08:00
|
|
|
|
update_process_status(rid, {"评价流程.主页ESG数据生成": -1})
|
2022-02-24 16:15:04 +08:00
|
|
|
|
return False
|
|
|
|
|
|
2022-02-23 17:47:24 +08:00
|
|
|
|
if not esg_model():
|
|
|
|
|
return False, "打分失败"
|
|
|
|
|
|
|
|
|
|
if not gen_report():
|
|
|
|
|
return False, "生成报告失败"
|
|
|
|
|
|
2022-03-01 09:56:33 +08:00
|
|
|
|
if not gen_certified():
|
|
|
|
|
return False, "生成证书失败"
|
|
|
|
|
|
2022-02-24 16:15:04 +08:00
|
|
|
|
if not esg_index():
|
|
|
|
|
return False, "准备主页数据失败"
|
|
|
|
|
|
2022-02-23 17:47:24 +08:00
|
|
|
|
update_rating_records({"评价ID": rid}, {"进行状态": "完成"})
|
|
|
|
|
|
|
|
|
|
return True, "执行成功"
|