Merge branch 'ps_v5.12' into 'master'

Ps v5.12

See merge request root/tfse_admin!48
This commit is contained in:
彭森 2022-05-16 09:07:27 +00:00
commit 42113f5dad
9 changed files with 1412 additions and 1 deletions

View File

@ -0,0 +1,611 @@
import json
import requests
from DBHelper.MongoHelper import MongoHelper
from Manage.Ratings.Objects.CreditObject import CreditRatingResult, OperatingScore, FinanceScore, RiskScore
from Manage.Ratings.Objects.EsgObject import EsgRatingResult, SocialScore, EnvironmentalScore, GovernanceScore
from Manage.Ratings.Objects.RatingSearch import SearchRatingApi, SearchRatingResult
RATING = ["企业ID", "评价ID", "企业名称", "评价项目", "评价方式", "进行状态", "评价结果", "评价完成日期", "报告fid", "证书fid"]
class SearchRatingApiImpl(SearchRatingApi):
"""评价查询请求接口"""
db = MongoHelper("tfse_v0.21")
def conditions_search(self):
"""根据条件查询"""
search_body = self.search.make_search_body()
sort = self.sort.make_sort_body()
page_size = 10 if self.page_size > 10 else self.page_size
page_no = self.page_no
total = self.db.find_all_data_with_count(
"企业数据",
"评价记录",
search_body
)
records = self.db.find_data_by_page_with_sort(
"企业数据",
"评价记录",
search_body,
RATING,
sort,
page_size,
page_no
)
table_data = list()
if records:
for record in records:
company = SearchRatingResult()
company.cid = record['企业ID']
company.rid = record['评价ID']
company.name = record['企业名称']
company.project = record['评价项目']
company.method = record['评价方式']
company.status = record['进行状态']
company.result = record['评价结果']
company.completion_date = record['评价完成日期']
company.report_fid = record['报告fid']
company.certificate_fid = record['证书fid']
data = company.dict_to_show(columns=RATING)
table_data.append(data)
result = {
"records": table_data,
"total": total
}
return result
def rating_type(self):
"""评价类型"""
search_body = self.dict_to_show()['搜索体']
records = self.db.find_single_data(
'企业数据',
'评价记录',
search_body,
['评价项目']
)
return records
def result_search(self):
"""评价结果查询"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def credit_result():
"""综信评价结果"""
result = self.db.find_single_data(
'综信评价数据',
'评价结果',
search_body,
['企业ID', '评价ID', '企业名称', '评价年度', '评价方式', '评价时间', '信用等级', '信用评分', '经营评分', '财务评分', '风险评分']
)
rating_result = CreditRatingResult()
rating_result.cid = result['企业ID']
rating_result.rid = result['评价ID']
rating_result.name = result['企业名称']
rating_result.year = result['评价年度']
rating_result.score = result['信用评分']
rating_result.level = result['信用等级']
rating_result.method = result['评价方式']
rating_result.rating_date = result['评价时间']
def operating():
"""经营评分"""
operate = OperatingScore()
operate.environment = result['经营评分']['环境']
operate.social = result['经营评分']['社会责任']
operate.governance = result['经营评分']['公司治理']
operate.total = result['经营评分']['合计']
rating_result.operating_score = operate
def finance():
"""财务评分"""
finance_score = FinanceScore()
def profit_about():
"""盈利能力"""
profit = finance_score.Profitability()
profit.roa = result['财务评分']['盈利能力']['净资产收益率']
profit.roe = result['财务评分']['盈利能力']['总资产报酬率']
profit.total = result['财务评分']['盈利能力']['合计']
return profit
def aseet_about():
"""资产质量"""
asset = finance_score.AssetQuality()
asset.total_asset_turnover = result['财务评分']['资产质量']['总资产周转率']
asset.inventory_turnover = result['财务评分']['资产质量']['存货周转率']
asset.accounts_receivable_turnover = result['财务评分']['资产质量']['应收账款周转率']
asset.total = result['财务评分']['资产质量']['合计']
return asset
def debt_about():
"""债务风险"""
debt = finance_score.DebtRisk()
debt.assets_liabilities = result['财务评分']['债务风险']['资产负债率']
debt.earned_interest_multiple = result['财务评分']['债务风险']['已获利息倍数']
debt.quick_ratio = result['财务评分']['债务风险']['速动比率']
debt.total = result['财务评分']['债务风险']['合计']
return debt
def business_about():
"""经营增长"""
business = finance_score.BusinessGrowth()
business.operating_growth_rate = result['财务评分']['经营增长']['营业增长率']
business.total_asset_growth_rate = result['财务评分']['经营增长']['总资产增长率']
business.technology_investment_ratio = result['财务评分']['经营增长']['技术投入比率']
business.total = result['财务评分']['经营增长']['合计']
return business
finance_score.profitability = profit_about()
finance_score.asset_quality = aseet_about()
finance_score.debt_risk = debt_about()
finance_score.business_growth = business_about()
finance_score.total = result['财务评分']['合计']
rating_result.finance_score = finance_score
def risk():
"""风险评分"""
risk_score = RiskScore()
risk_score.total = 0
def management():
"""经营风险"""
business = risk_score.BusinessRisk()
business.case_filing_information = result['风险评分']['经营风险']['立案信息']
business.court_announcement = result['风险评分']['经营风险']['开庭公告']
business.executed = result['风险评分']['经营风险']['被执行人']
business.court_notice = result['风险评分']['经营风险']['法院公告']
business.litigation = result['风险评分']['经营风险']['诉讼']
business.service_announcement = result['风险评分']['经营风险']['送达公告']
business.equity_pledge = result['风险评分']['经营风险']['股权出质']
business.legal_entity_change = result['风险评分']['经营风险']['法人变更']
business.members_change = result['风险评分']['经营风险']['主要成员变更']
business.total = result['风险评分']['经营风险']['合计']
risk_score.total += result['风险评分']['经营风险']['合计']
return business
def peripheral():
"""关联风险"""
associated = risk_score.AssociatedRisk()
peripheral_ = associated.PeripheralRisk()
peripheral_.high_risk = result['风险评分']['关联风险']['周边风险']['高风险']
peripheral_.warning = result['风险评分']['关联风险']['周边风险']['警示']
peripheral_.total = result['风险评分']['关联风险']['周边风险']['合计']
associated.peripheral_risk = peripheral_
associated.total = result['风险评分']['关联风险']['合计']
risk_score.total += result['风险评分']['关联风险']['合计']
return associated
risk_score.compliance_risk = result['风险评分']['合规风险']
risk_score.business_risk = management()
risk_score.associated_risk = peripheral()
risk_score.total += risk_score.compliance_risk
self.risk_score = risk_score
def __main__():
operating()
finance()
risk()
data = rating_result.dict_to_show()
return data
return __main__()
def esg_result():
"""esg评价结果"""
result = self.db.find_single_data(
'ESG评价数据',
'评价结果',
search_body,
['企业ID', '评价ID', '企业名称', '评价年度', '评价时间', '评价等级', 'ESG得分', '环境得分', '社会得分', '公司治理得分']
)
rating_result = EsgRatingResult()
rating_result.cid = result['企业ID']
rating_result.rid = result['评价ID']
rating_result.name = result['企业名称']
rating_result.year = result['评价年度']
rating_result.esg_score = result['ESG得分']
rating_result.level = result['评价等级']
rating_result.rating_date = result['评价时间']
def environment():
"""环境得分"""
score = EnvironmentalScore()
score.carbon_dioxide = result['环境得分']['单位收入二氧化碳排放']
score.energy_consumption = result['环境得分']['单位收入的能耗']
score.water_consumption = result['环境得分']['单位收入的耗水']
score.income_ratio = result['环境得分']['绿色业务收入占比(%']
score.greenhouse_gas = result['环境得分']['公司是否有温室气体减排目标']
score.energy_saving = result['环境得分']['企业是否有节能目标']
score.water_saving = result['环境得分']['企业是否有节约用水目标']
score.green_business = result['环境得分']['是否有绿色业务']
score.punish = result['环境得分']['近三年是否被环境或水务等监管部门处罚']
score.negative_effects = result['环境得分']['国家双碳目标对企业业务是否有不利影响']
score.beneficial_influence = result['环境得分']['国家双碳目标对企业业务是否有有利影响']
score.clean_energy = result['环境得分']['企业是否使用风电、光电、水电等清洁能源,是否使用清洁交通工具']
score.total = result['环境得分']['合计']
rating_result.environmental_score = score
def social():
"""社会得分"""
score = SocialScore()
score.resign = result['社会得分']['离职人数占比']
score.salary_increase = result['社会得分']['人均薪酬涨幅']
score.work_length = result['社会得分']['劳动合同中的工作时长(周)']
score.labor_disputes = result['社会得分']['劳动纠纷']
score.security_incident = result['社会得分']['安全事故']
score.provide_training = result['社会得分']['提供培训']
score.social_security = result['社会得分']['社保缴纳是否符合当地标准']
score.provident_fund = result['社会得分']['公积金缴纳是否符合当地标准']
score.physical_examination = result['社会得分']['是否提供员工体检']
score.paid_leave = result['社会得分']['是否提供带薪假期']
score.supplier = result['社会得分']['公司从前三大供货商拿货占比']
score.customer_sales = result['社会得分']['公司前3大客户销量占比']
score.repair_ratio = result['社会得分']['公司返修、退回、投诉产品比例(%']
score.poverty_alleviation = result['社会得分']['扶贫+捐赠规模(万元)']
score.judicial_risk = result['社会得分']['司法风险']
score.total = result['社会得分']['合计']
rating_result.social_score = score
def governance():
"""治理得分"""
score = GovernanceScore()
score.enterprise_nature = result['公司治理得分']['企业性质']
score.directors_board = result['公司治理得分']['公司是否设有董事会']
score.supervisory_board = result['公司治理得分']['公司是否设有监事会']
score.experience_year = result['公司治理得分']['董监高平均拥有的行业经验年数']
score.turnover_rate = result['公司治理得分']['董监高近三年离职率']
score.information_disclosure = result['公司治理得分']['公司近三年信息披露及时、可靠、完备、审计质量']
score.meetings_number = result['公司治理得分']['公司董事会近三年年均开会次数']
score.roe = result['公司治理得分']['净资产收益率']
score.audit_report = result['公司治理得分']['公司是否有审计报告']
score.total = result['公司治理得分']['合计']
rating_result.governance_score = score
def __main__():
environment()
social()
governance()
data = rating_result.dict_to_show()
return data
return __main__()
if records['评价项目'] == '综合信用评价':
res = credit_result()
else:
res = esg_result()
return res
def process_search(self):
"""评价流程"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def credit_process():
"""综信评价流程"""
process = self.db.find_single_data(
'综信评价数据',
'评价流程',
search_body,
['评价流程']
)
return process
def esg_process():
"""esg评价流程"""
process = self.db.find_single_data(
'ESG评价数据',
'评价流程',
search_body,
['评价流程']
)
return process
if records['评价项目'] == '综合信用评价':
res = credit_process()
else:
res = esg_process()
return res
def detail_search(self):
"""填报数据"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def credit_detail():
"""综信填报数据"""
detail = self.db.find_single_data(
'综信评价数据',
'填报数据',
search_body,
['企业ID', '企业名称', '评价年度', '行业选择', '经营问卷', '财务填报']
)
return detail
def esg_detail():
"""esg填报数据"""
detail = self.db.find_single_data(
'ESG评价数据',
'填报数据',
search_body,
['企业ID', '企业名称', '评价年度', '所属行业', '环境问卷', '社会问卷', '治理问卷']
)
return detail
if records['评价项目'] == '综合信用评价':
res = credit_detail()
else:
res = esg_detail()
return res
def risk_search(self):
"""风险数据"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def credit_risk():
"""综信风险数据"""
detail = self.db.find_single_data(
'综信评价数据',
'风险数据',
search_body,
['企业ID', '关联风险', '合规风险', '经营风险']
)
return detail
def esg_risk():
"""esg风险数据"""
detail = self.db.find_single_data(
'ESG评价数据',
'风险数据',
search_body,
['企业ID', '更新日期', '严重违法', '失信人', '法律诉讼', '税收违法', '经营异常', '行政处罚', '被执行人']
)
return detail
if records['评价项目'] == '综合信用评价':
res = credit_risk()
else:
res = esg_risk()
return res
def financial_search(self):
"""财指结果"""
search_body = self.dict_to_show()['搜索体']
financial = self.db.find_all_data(
'综信评价数据',
'财指结果',
search_body,
['企业ID', '年报期', '企业名称', '净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率',
'总资产增长率', '总资产报酬率', '技术投入比率', '营业增长率', '资产负债率', '速动比率']
)
return financial
def report_search(self):
"""报告数据"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def credit_report():
"""综信风险数据"""
report_data = self.db.find_single_data(
'综信评价数据',
'报告数据',
search_body,
['企业ID', '企业名称', '评价年度', '行业选择', '生成日期', '报告内容']
)
return report_data
def esg_report():
"""esg风险数据"""
report_data = self.db.find_single_data(
'ESG评价数据',
'报告数据',
search_body,
['企业ID', '企业名称', '评价年度', '生成日期', '报告内容']
)
return report_data
if records['评价项目'] == '综合信用评价':
res = credit_report()
else:
res = esg_report()
return res
def report_revise(self, text_model):
"""报告修改"""
search_body = self.dict_to_show()['搜索体']
records = self.rating_type()
def revise_credit_report():
"""综信报告修改"""
def edit():
"""更新报告数据"""
insert_data = dict()
insert_data['报告内容'] = text_model
self.db.update_single_data(
'综信评价数据',
'报告数据',
search_body,
insert_data
)
return True
def delete():
"""删除报告相关数据"""
record = self.db.find_single_data(
'企业数据',
'评价记录',
search_body,
['报告fid']
)
if not record:
return False
else:
fid = record['报告fid']
# self.db.delete_file(
# '文件',
# '综信报告',
# fid
# )
self.db.update_single_data(
'企业数据',
'评价记录',
search_body,
{'报告fid': None}
)
return True
def create():
"""生成报告"""
report_data = self.db.find_single_data(
'综信评价数据',
'报告数据',
search_body,
['评价ID', '企业ID', '企业名称', '报告内容', '生成日期', '行业选择', '评价年度']
)
report_text = dict()
report_text['text_model'] = report_data
def generate_report():
"""
调用报告生成接口
Parameters:
-
Returns:
result: type 生成结果
"""
url = 'http://api.fecribd.com/tfse_rating/report/generate_pdf_report'
token = 'X0gSlC!YE8jmr2jJr&ilcjS83j!tsoh5'
headers = {'token': token, 'Content-Type': 'application/json;charset=UTF-8'}
res_ = requests.post(url, headers=headers, data=json.dumps(report_text))
return res_
r = generate_report()
result = r.json()
if result['info'] == '生成报告成功':
self.db.update_single_data('企业数据', '评价记录', search_body, {"报告fid": result['result']['FileID']})
result['result']['FileID'] = '/file/get_company_report?file_id={}'.format(
result['result']['FileID'])
self.db.update_single_data('企业数据', '综合信用分析', search_body, {"信用分析.查看报告": result['result']['FileID']})
return result
step_1 = edit()
if step_1:
step_2 = delete()
if step_2:
step_3 = create()
return step_3
else:
return {"info": "删除失败"}
else:
return {"info": "此公司不存在报告数据"}
def revise_esg_report():
"""esg报告修改"""
return True
if records['评价项目'] == '综合信用评价':
res = revise_credit_report()
else:
res = revise_esg_report()
return res
def comprehensive_credit_search(self):
"""综合信用分析"""
search_body = self.dict_to_show()['搜索体']
data = self.db.find_single_data(
'企业数据',
'综合信用分析',
search_body,
['企业ID', '企业名称', '更新时间', '综合信用表现', '信用分析', '指标表格', '历史级别']
)
return data
def business_risk_search(self):
"""经营风险分析"""
search_body = self.dict_to_show()['搜索体']
data = self.db.find_single_data(
'企业数据',
'经营风险分析',
search_body,
['企业ID', '更新时间', '风险分数', '风险级别', '风险数量', '列入失信名单', '合规风险', '经营风险', '周边风险', '变更记录']
)
return data
def financial_elements_search(self):
"""财务要素分析"""
search_body = self.dict_to_show()['搜索体']
data = self.db.find_single_data(
'企业数据',
'财务要素分析',
search_body,
['企业ID', '更新时间', '财报期', '指标详情', '财务得分年度比较', '财务得分同行比较', '财务得分较去年变化', '财务得分较同行差异']
)
return data
def esg_evaluation_search(self):
"""esg评价分析"""
search_body = self.dict_to_show()['搜索体']
data = self.db.find_single_data(
'企业数据',
'ESG评价分析',
search_body,
['企业ID', '更新日期', 'ESG评级', '维度得分情况']
)
return data
if __name__ == '__main__':
insert = dict()
insert['企业ID'] = 'rh3XINDu'
insert['评价ID'] = 'wEtHEscX'
insert['评价流程'] = list()
step_01 = {"数据准备": ['填报数据', '风险数据']}
step_02 = {"模型打分": ['评价结果']}
step_03 = {"文档生成": ['报告数据', '综信报告', '综信证书']}
step_04 = {"数据清洗": ['ESG评价分析']}
insert['评价流程'].append(step_01)
insert['评价流程'].append(step_02)
insert['评价流程'].append(step_03)
insert['评价流程'].append(step_04)
db = MongoHelper("tfse_v0.21")
db.upsert_single_data(
'ESG评价数据',
'评价流程',
{'评价ID': 'wEtHEscX'},
insert
)

View File

View File

@ -0,0 +1,186 @@
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr, Validate
RATING_RESULT = ["AAA", "AA+", "AA", "AA-", "A+", "A", "A-", "BBB+", "BBB", "BBB-", "BB+", "BB", "BB-", "B+", "B", "B-",
"CCC", "CC", None]
RATING_METHOD = ["企业申报", "跟踪评价"]
class OperatingScore(SpecObject):
"""经营评分"""
environment = ValidateAttr(field="environment", type=[float, int])
social = ValidateAttr(field="social", type=[float, int])
governance = ValidateAttr(field="governance", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"environment": "环境",
"social": "社会责任",
"governance": "公司治理",
"total": "合计"
}
class FinanceScore(SpecObject):
"""财务评分"""
class Profitability(SpecObject):
"""盈利能力"""
roe = ValidateAttr(field="roe", type=[float, int])
roa = ValidateAttr(field="roa", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"roe": "净资产收益率",
"roa": "总资产报酬率",
"total": "合计"
}
class AssetQuality(SpecObject):
"""资产质量"""
total_asset_turnover = ValidateAttr(field="total_asset_turnover", type=[float, int])
inventory_turnover = ValidateAttr(field="inventory_turnover", type=[float, int])
accounts_receivable_turnover = ValidateAttr(field="accounts_receivable_turnover", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"total_asset_turnover": "总资产周转率",
"inventory_turnover": "存货周转率",
"accounts_receivable_turnover": "应收账款周转率",
"total": "合计"
}
class DebtRisk(SpecObject):
"""债务风险"""
assets_liabilities = ValidateAttr(field="assets_liabilities", type=[float, int])
earned_interest_multiple = ValidateAttr(field="earned_interest_multiple", type=[float, int])
quick_ratio = ValidateAttr(field="quick_ratio", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"assets_liabilities": "资产负债率",
"earned_interest_multiple": "已获利息倍数",
"quick_ratio": "速动比率",
"total": "合计"
}
class BusinessGrowth(SpecObject):
"""经营增长"""
operating_growth_rate = ValidateAttr(field="operating_growth_rate", type=[float, int])
total_asset_growth_rate = ValidateAttr(field="total_asset_growth_rate", type=[float, int])
technology_investment_ratio = ValidateAttr(field="technology_investment_ratio", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"operating_growth_rate": "营业增长率",
"total_asset_growth_rate": "总资产增长率",
"technology_investment_ratio": "技术投入比率",
"total": "合计"
}
profitability = ValidateAttr(field="profitability", type=Profitability)
asset_quality = ValidateAttr(field="asset_quality", type=AssetQuality)
debt_risk = ValidateAttr(field="debt_risk", type=DebtRisk)
business_growth = ValidateAttr(field="business_growth", type=BusinessGrowth)
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长",
"total": "合计"
}
class RiskScore(SpecObject):
"""风险评分"""
class BusinessRisk(SpecObject):
"""经营风险"""
case_filing_information = ValidateAttr(field="case_filing_information", type=[float, int])
court_announcement = ValidateAttr(field="court_announcement", type=[float, int])
executed = ValidateAttr(field="executed", type=[float, int])
court_notice = ValidateAttr(field="court_notice", type=[float, int])
litigation = ValidateAttr(field="litigation", type=[float, int])
service_announcement = ValidateAttr(field="service_announcement", type=[float, int])
equity_pledge = ValidateAttr(field="equity_pledge", type=[float, int])
legal_entity_change = ValidateAttr(field="legal_entity_change", type=[float, int])
members_change = ValidateAttr(field="members_change", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"case_filing_information": "立案信息",
"court_announcement": "开庭公告",
"executed": "被执行人",
"court_notice": "法院公告",
"litigation": "诉讼",
"service_announcement": "送达公告",
"equity_pledge": "股权出质",
"legal_entity_change": "法人变更",
"members_change": "主要成员变更",
"total": "合计"
}
class AssociatedRisk(SpecObject):
"""关联风险"""
class PeripheralRisk(SpecObject):
"""周边风险"""
high_risk = ValidateAttr(field="high_risk", type=[float, int])
warning = ValidateAttr(field="warning", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"high_risk": "高风险",
"warning": "警示",
"total": "合计"
}
peripheral_risk = ValidateAttr(field="peripheral_risk", type=PeripheralRisk)
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"peripheral_risk": "周边风险",
"total": "合计"
}
compliance_risk = ValidateAttr(field="compliance_risk", type=[float, int])
business_risk = ValidateAttr(field="business_risk", type=BusinessRisk)
associated_risk = ValidateAttr(field="associated_risk", type=AssociatedRisk)
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"compliance_risk": "合规风险",
"business_risk": "经营风险",
"associated_risk": "关联风险",
"total": "合计"
}
class CreditRatingResult(SpecObject):
"""综信填报数据"""
cid = ValidateAttr(field='cid', type=str, length=8, default=None)
rid = ValidateAttr(field="rid", type=str, length=8, default=None)
name = ValidateAttr(field='name', type=str, default=None)
year = ValidateAttr(field='year', type=str, default=None)
score = ValidateAttr(field='score', type=[float, int], default=None)
level = ValidateAttr(field='level', type=str, in_list=RATING_RESULT)
method = ValidateAttr(field='method', type=str, in_list=RATING_METHOD)
rating_date = ValidateAttr(field='rating_date', func=Validate.date_format)
operating_score = ValidateAttr(field='operating_score', type=OperatingScore)
finance_score = ValidateAttr(field='finance_score', type=FinanceScore)
risk_score = ValidateAttr(field='risk_score', type=RiskScore)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"name": "企业名称",
"year": "评价年度",
"score": "信用评分",
"level": "信用等级",
"method": "评价方式",
"rating_date": "评价时间",
"operating_score": "经营评分",
"finance_score": "财务评分",
"risk_score": "风险评分"
}

View File

@ -0,0 +1,129 @@
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr, Validate
RATING_RESULT = ["AAA", "AA+", "AA", "AA-", "A+", "A", "A-", "BBB+", "BBB", "BBB-", "BB+", "BB", "BB-", "B+", "B", "B-", "CCC", "CC", None]
class EnvironmentalScore(SpecObject):
"""环境得分"""
carbon_dioxide = ValidateAttr(field='carbon_dioxide', type=[float, int])
energy_consumption = ValidateAttr(field='energy_consumption', type=[float, int])
water_consumption = ValidateAttr(field='water_consumption', type=[float, int])
income_ratio = ValidateAttr(field='income_ratio', type=[float, int])
greenhouse_gas = ValidateAttr(field='greenhouse_gas', type=[float, int])
energy_saving = ValidateAttr(field='energy_saving', type=[float, int])
water_saving = ValidateAttr(field='water_saving', type=[float, int])
green_business = ValidateAttr(field='green_business', type=[float, int])
punish = ValidateAttr(field='punish', type=[float, int, str])
negative_effects = ValidateAttr(field='negative_effects', type=[float, int])
beneficial_influence = ValidateAttr(field='beneficial_influence', type=[float, int])
clean_energy = ValidateAttr(field='clean_energy', type=[float, int])
total = ValidateAttr(field='total', type=[float, int])
fields_map = {
"carbon_dioxide": "单位收入二氧化碳排放",
"energy_consumption": "单位收入的能耗",
"water_consumption": "单位收入的耗水",
"income_ratio": "绿色业务收入占比(%",
"greenhouse_gas": "公司是否有温室气体减排目标",
"energy_saving": "企业是否有节能目标",
"water_saving": "企业是否有节约用水目标",
"green_business": "是否有绿色业务",
"punish": "近三年是否被环境或水务等监管部门处罚",
"negative_effects": "国家双碳目标对企业业务是否有不利影响",
"beneficial_influence": "国家双碳目标对企业业务是否有有利影响",
"clean_energy": "企业是否使用风电、光电、水电等清洁能源,是否使用清洁交通工具",
"total": "合计"
}
class SocialScore(SpecObject):
"""社会得分"""
resign = ValidateAttr(field="resign", type=[float, int])
salary_increase = ValidateAttr(field="salary_increase", type=[float, int])
work_length = ValidateAttr(field="work_length", type=[float, int])
labor_disputes = ValidateAttr(field="labor_disputes", type=[float, int])
security_incident = ValidateAttr(field="security_incident", type=[float, int])
provide_training = ValidateAttr(field="provide_training", type=[float, int])
social_security = ValidateAttr(field="social_security", type=[float, int])
provident_fund = ValidateAttr(field="provident_fund", type=[float, int])
physical_examination = ValidateAttr(field="physical_examination", type=[float, int])
paid_leave = ValidateAttr(field="paid_leave", type=[float, int])
supplier = ValidateAttr(field="supplier", type=[float, int])
customer_sales = ValidateAttr(field="customer_sales", type=[float, int])
repair_ratio = ValidateAttr(field="repair_ratio", type=[float, int])
poverty_alleviation = ValidateAttr(field="poverty_alleviation", type=[float, int])
judicial_risk = ValidateAttr(field="judicial_risk", type=[float, int, str])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"resign": "离职人数占比",
"salary_increase": "人均薪酬涨幅",
"work_length": "劳动合同中的工作时长(周)",
"labor_disputes": "劳动纠纷",
"security_incident": "安全事故",
"provide_training": "提供培训",
"social_security": "社保缴纳是否符合当地标准",
"provident_fund": "公积金缴纳是否符合当地标准",
"physical_examination": "是否提供员工体检",
"paid_leave": "是否提供带薪假期",
"supplier": "公司从前三大供货商拿货占比",
"customer_sales": "公司前3大客户销量占比",
"repair_ratio": "公司返修、退回、投诉产品比例(%",
"poverty_alleviation": "扶贫+捐赠规模(万元)",
"judicial_risk": "司法风险",
"total": "合计"
}
class GovernanceScore(SpecObject):
"""治理得分"""
enterprise_nature = ValidateAttr(field="enterprise_nature", type=[float, int])
directors_board = ValidateAttr(field="directors_board", type=[float, int])
supervisory_board = ValidateAttr(field="supervisory_board", type=[float, int])
experience_year = ValidateAttr(field="experience_year", type=[float, int])
turnover_rate = ValidateAttr(field="turnover_rate", type=[float, int])
information_disclosure = ValidateAttr(field="information_disclosure", type=[float, int])
meetings_number = ValidateAttr(field="meetings_number", type=[float, int])
roe = ValidateAttr(field="roe", type=[float, int])
audit_report = ValidateAttr(field="audit_report", type=[float, int])
total = ValidateAttr(field="total", type=[float, int])
fields_map = {
"enterprise_nature": "企业性质",
"directors_board": "公司是否设有董事会",
"supervisory_board": "公司是否设有监事会",
"experience_year": "董监高平均拥有的行业经验年数",
"turnover_rate": "董监高近三年离职率",
"information_disclosure": "公司近三年信息披露及时、可靠、完备、审计质量",
"meetings_number": "公司董事会近三年年均开会次数",
"roe": "净资产收益率",
"audit_report": "公司是否有审计报告",
"total": "合计"
}
class EsgRatingResult(SpecObject):
"""esg评价结果"""
cid = ValidateAttr(field='cid', type=str, length=8, default=None)
rid = ValidateAttr(field="rid", type=str, length=8, default=None)
name = ValidateAttr(field='name', type=str, default=None)
year = ValidateAttr(field='year', type=str, default=None)
esg_score = ValidateAttr(field='esg_score', type=[float, int], default=None)
environmental_score = ValidateAttr(field='environmental_score', type=EnvironmentalScore)
social_score = ValidateAttr(field='social_score', type=SocialScore)
governance_score = ValidateAttr(field='governance_score', type=GovernanceScore)
level = ValidateAttr(field='level', type=str, in_list=RATING_RESULT)
rating_date = ValidateAttr(field='rating_date', func=Validate.date_format)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"name": "企业名称",
"year": "评价年度",
"esg_score": "ESG得分",
"environmental_score": "环境得分",
"social_score": "社会得分",
"governance_score": "公司治理得分",
"level": "评价等级",
"rating_date": "评价时间"
}

View File

@ -0,0 +1,137 @@
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr, Validate
RATING_RESULT = ["AAA", "AA+", "AA", "AA-", "A+", "A", "A-", "BBB+", "BBB", "BBB-", "BB+", "BB",
"BB-", "B+", "B", "B-", "CCC+", "CCC", "CCC-", "CC+", "CC", "CC-", "C+", "C", "C-", "D"]
class SearchRatingApi(SpecObject):
"""服务查询类"""
class SearchBody(SpecObject):
"""查询体"""
cid = ValidateAttr(field='cid', type=str)
rid = ValidateAttr(field='rid', type=str)
name = ValidateAttr(field='name', type=str)
project = ValidateAttr(field='project', type=str, in_list=['综合信用评价', 'ESG评价'])
method = ValidateAttr(field='method', type=str, in_list=['企业申报', '跟踪评价'])
status = ValidateAttr(field='status', type=str, in_list=['完成', '进行'])
result = ValidateAttr(field='result', type=str, in_list=RATING_RESULT)
completion_date = ValidateAttr(field='completion_date', type=str, func=Validate.date_format)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"name": "企业名称",
"project": "评价项目",
"method": "评价方式",
"status": "进行状态",
"result": "评价结果",
"time": "评价时间"
}
def make_search_body(self):
""""""
search_keys = list(self.__dict__.keys())
body = dict()
if "cid" in search_keys:
body['企业ID'] = self.cid
if "rid" in search_keys:
body['评价ID'] = self.cid
if "name" in search_keys:
body['企业名称'] = {"$regex": self.name}
if "project" in search_keys:
body['评价项目'] = {"$regex": self.project}
if "method" in search_keys:
body['评价方式'] = {"$regex": self.method}
if "status" in search_keys:
body['进行状态'] = {"$regex": self.status}
if "result" in search_keys:
body['评价结果'] = {"$regex": self.result}
if "time" in search_keys:
body['评价完成日期'] = {"$regex": self.completion_date}
return body
class SortBody(SpecObject):
""""""
field = ValidateAttr(field='field', type=str)
sort = ValidateAttr(field='sort', in_list=["asc", "desc"])
fields_map = {
"field": "排序字段",
"sort": "排序方式"
}
def make_sort_body(self):
""""""
if self.__dict__ != {}:
columns_map = {
"企业ID": "企业ID",
"评价ID": "评价ID",
"企业名称": "企业名称",
"评价项目": "评价项目",
"评价方式": "评价方式",
"进行状态": "进行状态",
"评价结果": "评价结果",
"评价完成日期": "评价完成日期"
}
asc_or_desc = 1 if self.sort == "asc" else -1
sort_column = columns_map[self.field]
body = {sort_column: asc_or_desc}
else:
body = {"评价完成时间": -1}
return body
search = ValidateAttr(field='search', type=SearchBody)
sort = ValidateAttr(field='sort', type=SortBody)
page_size = ValidateAttr(field='page_size', type=int)
page_no = ValidateAttr(field='page_no', type=int)
fields_map = {
"search": "搜索体",
"sort": "排序",
"page_size": "显示数量",
"page_no": "页码"
}
def condition_search(self):
"""条件查询"""
class SearchRatingResult(SpecObject):
"""服务查询返回结果"""
cid = ValidateAttr(field='cid', type=str)
rid = ValidateAttr(field='rid', type=str)
name = ValidateAttr(field='name', type=str)
project = ValidateAttr(field='project', type=str, in_list=['综合信用评价', 'ESG评价'])
method = ValidateAttr(field='method', type=str, in_list=['企业申报', '跟踪评价'])
status = ValidateAttr(field='status', type=str, in_list=['完成', '进行'])
result = ValidateAttr(field='result', type=str, in_list=RATING_RESULT, default=None)
completion_date = ValidateAttr(field='completion_date', type=str, func=Validate.date_format, default=None)
report_fid = ValidateAttr(field='report_fid', type=str, default=None)
certificate_fid = ValidateAttr(field='certificate_fid', type=str, default=None)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"name": "企业名称",
"project": "评价项目",
"method": "评价方式",
"status": "进行状态",
"result": "评价结果",
"completion_date": "评价完成日期",
"report_fid": "报告fid",
"certificate_fid": "证书fid"
}

View File

View File

@ -0,0 +1,347 @@
from flask import Blueprint, request
from Manage.Ratings.Implements.SearchRatingApiImpl import SearchRatingApiImpl
from Utils.ErrorUtil import ReturnConditionCheckFailed
from user.user_auth import verify_token, authority_scope
rating_route = Blueprint('rating', __name__)
@rating_route.route('/search', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def search_rating(**kwargs):
"""
企业评价记录搜索
Parameters:
-
Returns:
info: 返回信息
result: 返回数据
"""
try:
req = request.json
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
sort_body = search_body_impl.SortBody()
search = req['search'] if req.__contains__('search') else {}
sort = req['sort'] if req.__contains__('sort') else {}
if search.__contains__('企业ID'):
search_body.cid = search['企业ID']
if search.__contains__('评价ID'):
search_body.rid = search['评价ID']
if search.__contains__('企业名称'):
search_body.name = search['企业名称']
if search.__contains__('评价项目'):
search_body.project = search['评价项目']
if search.__contains__('评价方式'):
search_body.method = search['评价方式']
if search.__contains__('进行状态'):
search_body.status = search['进行状态']
if search.__contains__('评价结果'):
search_body.result = search['评价结果']
if search.__contains__('评价时间'):
search_body.time = search['评价时间']
if sort != {}:
sort_body.field = list(sort.keys())[0]
sort_body.sort = list(sort.values())[0]
search_body_impl.search = search_body
search_body_impl.sort = sort_body
search_body_impl.page_size = req['page_size']
search_body_impl.page_no = req['page_no']
result = search_body_impl.conditions_search()
return {"info": '查询结果', "result": result}, 200
except ReturnConditionCheckFailed as e:
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/rating_result', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def rating_result(**kwargs):
"""
查询评价结果
Parameters:
-
Returns:
info: 返回信息
result: 返回数据
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.result_search()
return {"info": '查询成功', "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/get_company_process', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def get_company_process(**kwargs):
"""
获取评测流程
Parameters:
-
Returns:
result dict 流程数据
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.process_search()
return {"info": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/details', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def fill_details(**kwargs):
"""
查看填报详情信息
Parameters:
-
Returns:
result dict 流程数据
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.detail_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/risk', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def risk_info(**kwargs):
"""
查询风险数据
Parameters:
-
Returns:
result dict 流程数据
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.risk_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/report_data', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def report_data(**kwargs):
"""
查看报告数据
Parameters:
-
Returns:
result dict 流程数据
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.report_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/report_revise', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def report_revise(**kwargs):
"""
报告编辑保存删除操作
Parameters:
-
Returns:
result dict 生成结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
text_model = request.json['text_model']
search_body_impl.search = search_body
result = search_body_impl.report_revise(text_model)
return result
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/financial_index', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def financial_index(**kwargs):
"""
查看财指结果
Parameters:
-
Returns:
result dict 财指结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.financial_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/comprehensive_credit_analysis', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def comprehensive_credit(**kwargs):
"""
查看综合信用分析
Parameters:
-
Returns:
result dict 财指结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.comprehensive_credit_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('/business_risk_analysis', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def business_risk(**kwargs):
"""
查看经营风险分析
Parameters:
-
Returns:
result dict 财指结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.business_risk_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('financial_elements_analysis', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def financial_elements(**kwargs):
"""
查看财务要素分析
Parameters:
-
Returns:
result dict 财指结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.financial_elements_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@rating_route.route('esg_evaluation_analysis', methods=['POST'])
@verify_token
@authority_scope(['admin', 'developer', 'analysts', 'operator'])
def esg_evaluation(**kwargs):
"""
查看财务要素分析
Parameters:
-
Returns:
result dict 财指结果
"""
try:
search_body_impl = SearchRatingApiImpl()
search_body = search_body_impl.SearchBody()
search_body.rid = request.json['rid']
search_body_impl.search = search_body
result = search_body_impl.esg_evaluation_search()
return {"info": "查询成功", "result": result}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400

View File

3
app.py
View File

@ -2,11 +2,12 @@ from flask import Flask
from flask_cors import *
from Board.board_routes import board_route
from Manage.Ratings.RatingRoutes import rating_route
from Manage.industry.industry_routes import industry_route
from Model.model_routes import model_route
from Test.TestRoute import test_route
from Manage.Company.CompanyRoutes import company_route
from Manage.rating.routes import rating_route
from user.user_routes import user_route
from Manage.macro.routes import macro_route
from file.file_routes import file_route