diff --git a/cc_rating/CCRatingImpl.py b/cc_rating/CCRatingImpl.py index b57e956..6cf8e5a 100644 --- a/cc_rating/CCRatingImpl.py +++ b/cc_rating/CCRatingImpl.py @@ -405,9 +405,9 @@ class RatingImpl(CreditRatingInput, RatingInfo, BusinessQuestionnaire, Financial # 更新完成时间和进行状态 self.finish_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) self.finish_date = time.strftime("%Y-%m-%d", time.localtime()) - update_time = self.rating_info_dict_to_save(columns=['评价完成时间', '评价完成日期']) + self.status = "完成" + update_time = self.rating_info_dict_to_save(columns=['进行状态', '评价完成时间', '评价完成日期']) self.db.update_single_data('企业数据', '评价记录', rid, update_time) - self.db.update_single_data("企业数据", "评价记录", rid, {"进行状态": "完成"}) return "执行成功", 200 diff --git a/esg_rating/EsgRatingImpl.py b/esg_rating/EsgRatingImpl.py index f0923bb..b43456b 100644 --- a/esg_rating/EsgRatingImpl.py +++ b/esg_rating/EsgRatingImpl.py @@ -314,7 +314,148 @@ class EsgRatingImpl(RatingInfo, EsgRatingInput, EnvironmentInput, SocietyInput, rid, input_data ) - update_process_status(rid, {"评价流程.数据填报": 1}) + update_process_status(rid['评价ID'], {"评价流程.数据填报": 1}) rating_input() return '保存成功' + + def exec_esg_rating(self): + """提交数据,开始esg评价""" + + def check_rating_record(): + """校验评价记录""" + self.project = 'ESG评价' + self.status = '进行' + find = self.rating_info_dict_to_save(columns=['企业ID', '评价项目', '进行状态']) + record = self.db.find_single_data( + '企业数据', + '评价记录', + find, + ['评价ID'] + ) + return record + + rid = check_rating_record() + if not rid: + return "没有正在进行的评价", 200 + + self.submit_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + update_time = self.rating_info_dict_to_save(columns=['提交填报时间']) + self.db.update_single_data('企业数据', '评价记录', rid, update_time) + + def get_rating_data(): + """获取打分需要的数据""" + input_data = self.db.find_single_data( + 'ESG评价数据', + '填报数据', + rid, + ["评价ID", "企业ID", "企业名称", "评价年度", "所属行业", "公司当年收入(万元)", "环境问卷", "社会问卷", "治理问卷"] + ) + risk_data = self.db.find_single_data( + 'ESG评价数据', + '风险数据', + rid, + ["严重违法", "失信人", "法律诉讼", "税收违法", "经营异常", "行政处罚", "被执行人"] + ) + return {**input_data, **{"风险数据": risk_data}} + + rating_input = get_rating_data() + + def esg_model(): + """模型打分""" + url = "http://api.fecribd.com/tfse_rating/esg/esg_model" + token = "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5" + headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} + data = json.dumps({"input_data": rating_input}) + res = requests.post(url, headers=headers, data=data) + if res.status_code == 200: + update_data = { + "评价结果": json.loads(res.text)['result'], + } + self.db.update_single_data("企业数据", "评价记录", rid, update_data) + update_process_status(rid['评价ID'], {"评价流程.模型打分": 1}) + return True + else: + update_process_status(rid['评价ID'], {"评价流程.模型打分": -1}) + return False + + def gen_report(): + """报告生成""" + url = "http://api.fecribd.com/tfse_rating/report/generate_esg_report" + token = "X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5" + headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} + data = { + "company": rating_input['企业名称'], + "cid": rating_input['企业ID'], + "rid": rating_input['评价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'] + } + self.db.update_single_data("企业数据", "评价记录", rid, update_data) + update_process_status(rid['评价ID'], {"评价流程.报告生成": 1}) + return True + else: + update_process_status(rid['评价ID'], {"评价流程.报告生成": -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_input['企业名称'], + "cid": rating_input['企业ID'], + "rid": rating_input['评价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'] + } + self.db.update_single_data("企业数据", "评价记录", rid, update_data) + update_process_status(rid['评价ID'], {"评价流程.证书生成": 1}) + return True + else: + update_process_status(rid['评价ID'], {"评价流程.证书生成": -1}) + return False + + def esg_index(): + url = "http://api.fecribd.com/etl_tfse/company/esg_index_etl" + token = "dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4" + headers = {'token': token, "Content-Type": "application/json;charset=UTF-8"} + data = { + "rid": rating_input['评价ID'] + } + res = requests.post(url, headers=headers, data=json.dumps(data)) + if res.status_code == 200: + update_process_status(rid['评价ID'], {"评价流程.主页ESG数据生成": 1}) + return True + else: + update_process_status(rid['评价ID'], {"评价流程.主页ESG数据生成": -1}) + return False + + if not esg_model(): + return "打分失败", 210 + + if not gen_report(): + return "生成报告失败", 210 + + if not gen_certified(): + return "生成证书失败", 210 + + if not esg_index(): + return "准备主页数据失败", 210 + + # 更新完成时间和进行状态 + self.finish_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + self.finish_date = time.strftime("%Y-%m-%d", time.localtime()) + self.status = "完成" + update_time = self.rating_info_dict_to_save(columns=['进行状态', '评价完成时间', '评价完成日期']) + self.db.update_single_data('企业数据', '评价记录', rid, update_time) + + return "执行成功", 200 \ No newline at end of file diff --git a/esg_rating/EsgRatingRoute.py b/esg_rating/EsgRatingRoute.py index e26712b..d484556 100644 --- a/esg_rating/EsgRatingRoute.py +++ b/esg_rating/EsgRatingRoute.py @@ -68,3 +68,23 @@ def save_esg_input_form(**kwargs): except ReturnConditionCheckFailed as e: e.log_error() return {"info": e.__str__()}, e.status_code + + +@esg_route.route('/submit_esg_rating_input', methods=['GET']) +@verify_token +def submit_general_rating_input(**kwargs): + """ + 提交填报数据,开始esg评价 + Parameters: + cid 企业ID + Returns: + res: desc + """ + try: + esg = EsgRatingImpl() + esg.cid = kwargs['cid'] + info, status = esg.exec_esg_rating() + return {"info": info}, status + except ReturnConditionCheckFailed as e: + e.log_error() + return {"info": e.__str__()}, e.status_code \ No newline at end of file diff --git a/esg_rating/EsgUtils.py b/esg_rating/EsgUtils.py index 1a04625..0ed7a8c 100644 --- a/esg_rating/EsgUtils.py +++ b/esg_rating/EsgUtils.py @@ -100,4 +100,4 @@ def prepare_risk_data(cid, rid, company_name): data = json.dumps({"company_id": cid, "company_name": company_name, "evaluation_id": rid}) requests.post(url, headers=headers, data=data) # 风险数据清洗完成后更新流程状态 - update_process_status(rid, {"评价流程.清洗风险数据": 1}) \ No newline at end of file + update_process_status(rid, {"评价流程.清洗风险数据": 1})