import copy import datetime from Esg.db import update_data from Esg.scripts.environmental import environmental_rating from Esg.scripts.governance import governance_rating from Esg.scripts.social import social_rating from common.scripts import read_json_file, update_process_status class EsgModel: """ ESG评价模型 """ def __init__(self): """ 初始化数据 Parameters param dict 数据模板 questionnaire dict 填报问卷 rid str 评价ID cid str 企业ID period str 评价年度 """ self.questionnaire = None self.company = None self.rid = None self.cid = None self.period = None self.esg_score = None self.rating_result = None def prepare_params(self, param): """ 准备模型数据 Parameters: param dict 数据模板 Returns: - """ self.rid = param['评价ID'] self.cid = param['企业ID'] self.company = param['企业名称'] self.period = param['评价年度'] self.esg_score = self.esg_rating_scripts(param) self.rating_result = self.esg_rating_result() @staticmethod def esg_rating_scripts(param): """ esg打分方法 Parameters: param dict 数据模板 Returns: score dict 分数 """ score = dict() score['环境得分'] = environmental_rating(param) score['社会得分'] = social_rating(param) score['公司治理得分'] = governance_rating(param) score['合计'] = score['环境得分']['合计'] + score['社会得分']['合计'] + score['公司治理得分']['合计'] return score def esg_rating_result(self): """ 整合打分结果 Parameters: score dict 打分结果 Returns: result dict esg得分 """ score = copy.deepcopy(self.esg_score) result = dict() result['企业名称'] = self.company result['企业ID'] = self.cid result['评价ID'] = self.rid result['评价年度'] = self.period result['评价等级'] = self.score_rank(score['合计']) result['环境得分'] = score['环境得分'] result['社会得分'] = score['社会得分'] result['公司治理得分'] = score['公司治理得分'] result['ESG得分'] = score['合计'] result['评价时间'] = datetime.datetime.now().strftime('%Y-%m-%d') return result def save_result(self): """ 保存评价结果 """ rating_result = self.rating_result update_data('ESG评价数据', '评价结果', {"企业ID": self.cid, "评价年度": self.period}, rating_result) update_process_status(self.rid, 'ESG评价流程', {"评价流程.模型打分.评价结果": 1}) @staticmethod def score_rank(param): """ 描述 Parameters: param float esg分数合计 Returns: result str 评价等级 """ if param >= 80: level = 'A' elif param >= 50: level = 'B' elif param >= 30: level = 'C' else: level = 'D' return level if __name__ == '__main__': m = EsgModel() data = read_json_file('/Esg/static/template_data.json') m.prepare_params(data) r = m.esg_rating_result()