269 lines
11 KiB
Python
269 lines
11 KiB
Python
import os
|
||
import time
|
||
import json
|
||
import random
|
||
import requests
|
||
|
||
from DBHelper.MongoHelper import MongoHelper
|
||
from Rating.Credit.CreditObj import RatingRecord, CreditInputData, FinancialReport, BusinessQuestionnaire, BalanceSheet, \
|
||
IncomeSheet, AppendixDataSheet
|
||
from Rating.Process.ProcessObj import CreditProcess
|
||
|
||
|
||
class CreditUtils:
|
||
"""综合信用评价相关方法"""
|
||
db = MongoHelper('tfse_v0.21')
|
||
|
||
@staticmethod
|
||
def get_current_year():
|
||
"""获取当前年度"""
|
||
current_year = time.strftime("%Y", time.localtime()) + "年"
|
||
return current_year
|
||
|
||
@staticmethod
|
||
def gen_new_rid():
|
||
"""生成新的评价ID,如果该ID存在,则重新生成"""
|
||
db = MongoHelper('tfse_v0.21')
|
||
|
||
def make_id(num):
|
||
"""
|
||
随机生成字符串
|
||
"""
|
||
choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||
salt = ''
|
||
for i in range(num):
|
||
salt += random.choice(choices)
|
||
return salt
|
||
|
||
# 生成新ID
|
||
new_id = make_id(8)
|
||
# 检查新ID是否存在,如果存在则继续生成新ID
|
||
case = db.find_all_data_with_count(
|
||
'企业数据',
|
||
'评价记录',
|
||
{'评价ID': new_id}
|
||
)
|
||
while case > 0:
|
||
new_id = make_id(8)
|
||
# 新ID可使用,返回新ID
|
||
return new_id
|
||
|
||
@staticmethod
|
||
def make_3_report_dates():
|
||
"""
|
||
生成最近三年报告期 日期
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
report_dates 三年报告期
|
||
"""
|
||
current_year = int(time.strftime("%Y", time.localtime())) - 1
|
||
date_01 = str(current_year) + '-12-31'
|
||
date_02 = str(current_year - 1) + '-12-31'
|
||
date_03 = str(current_year - 2) + '-12-31'
|
||
report_dates = [date_01, date_02, date_03]
|
||
return report_dates
|
||
|
||
@staticmethod
|
||
def update_process_status(self, rid, update_data):
|
||
"""
|
||
调用更新流程接口
|
||
Parameters:
|
||
update_data dict 需要更新的数据
|
||
Returns:
|
||
result str 更新结果
|
||
"""
|
||
url = "http://api.fecribd.com/etl_tfse/company/update_process_data"
|
||
token = "dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4"
|
||
headers = {'token': token, 'Content-Type': 'application/json; charset=UTF-8'}
|
||
data = json.dumps({"rid": rid, "types": "综合评价流程", "renew_data": update_data})
|
||
requests.post(url, headers=headers, data=data)
|
||
|
||
|
||
class CreditRating(CreditInputData, CreditUtils):
|
||
"""综合信用评价"""
|
||
db = MongoHelper('tfse_v0.21')
|
||
|
||
def records(self):
|
||
"""评价记录"""
|
||
cc_report = '/file/pdf?file_id={}'
|
||
esg_report = '/file/pdf?file_id={}'
|
||
cc_certification = "/file/pdf?file_id={}"
|
||
esg_certification = "/file/pdf?file_id={}"
|
||
|
||
rating_recprds = self.db.find_all_data(
|
||
"企业数据",
|
||
"评价记录",
|
||
{"企业ID": self.cid},
|
||
["评价ID", "评价项目", "评价方式", "进行状态", "评价结果", "报告fid", "证书fid"]
|
||
)
|
||
|
||
for record in rating_recprds:
|
||
if rating_recprds is not None:
|
||
if record['评价项目'] == '综合信用评价':
|
||
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
|
||
record.pop('报告fid')
|
||
record.pop('证书fid')
|
||
else:
|
||
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
|
||
record.pop('报告fid')
|
||
record.pop('证书fid')
|
||
return rating_recprds
|
||
|
||
def start_cc_rating(self):
|
||
"""开始综合评价"""
|
||
|
||
def check_input_data():
|
||
"""
|
||
input_data: 已存在的填报数据
|
||
根据企业ID+当前年度,查询是否存在填报数据
|
||
若存在填报数据,则返回填报数据
|
||
若不存在填报数据,则返回False
|
||
"""
|
||
input_data = self.db.find_single_data(
|
||
"综信评价数据",
|
||
"填报数据",
|
||
{"企业ID": self.cid, "评价年度": self.get_current_year()},
|
||
["评价ID", "企业名称", "评价年度", "行业选择", "经营问卷", "财务填报"]
|
||
)
|
||
return input_data if input_data else False
|
||
|
||
def case_input_exist(param):
|
||
"""
|
||
param: dict 填报数据
|
||
根据评价ID查询评价进行状态
|
||
若评价已完成,返回‘本年度已评价’的提示,且返回空对象
|
||
若评价进行中,返回‘继续填报’的提示,且返回填报数据
|
||
"""
|
||
# rating_status: 评价服务状态
|
||
rating_status = self.db.find_single_data(
|
||
"企业数据",
|
||
"评价记录",
|
||
{"评价ID": param["评价ID"]},
|
||
["进行状态"]
|
||
)
|
||
# 把不需要返回的字段删掉
|
||
param.pop('评价ID')
|
||
# 方法返回结果
|
||
return ("本年度已评价", {}) if rating_status['进行状态'] == "完成" else ("继续填报", param)
|
||
|
||
def case_input_not_exist():
|
||
"""不存在填报数据"""
|
||
# new_rid: 新生成填报ID
|
||
new_rid = self.gen_new_rid()
|
||
# report_dates: 生成报告期
|
||
report_dates = self.make_3_report_dates()
|
||
# company_name: 企业名称
|
||
company_name = self.db.find_single_data(
|
||
"应用端",
|
||
"企业用户",
|
||
{"企业ID": self.cid},
|
||
["企业名称"]
|
||
)
|
||
|
||
def prepare_input_template():
|
||
"""
|
||
根据模板生成新的填报数据
|
||
input_template: 填报数据模板
|
||
"""
|
||
self.rid = new_rid
|
||
self.cid = self.cid
|
||
self.company = company_name['企业名称']
|
||
self.year = self.get_current_year()
|
||
financial_report = FinancialReport()
|
||
financial_report.balance_sheet_list = list()
|
||
financial_report.income_sheet_list = list()
|
||
financial_report.appendix_data_sheet_list = list()
|
||
balance_sheet = BalanceSheet()
|
||
income_sheet = IncomeSheet()
|
||
appendix_sheet = AppendixDataSheet()
|
||
for n in range(3):
|
||
financial_report.balance_sheet_list.append(balance_sheet.dict_to_save())
|
||
financial_report.income_sheet_list.append(income_sheet.dict_to_save())
|
||
financial_report.appendix_data_sheet_list.append(appendix_sheet.dict_to_save())
|
||
for i in range(3):
|
||
financial_report.balance_sheet_list[i]['报告期'] = report_dates[i]
|
||
financial_report.income_sheet_list[i]['报告期'] = report_dates[i]
|
||
financial_report.appendix_data_sheet_list[i]['报告期'] = report_dates[i]
|
||
self.financial_report = financial_report
|
||
input_template = self.dict_to_save()
|
||
self.business_questionnaire = list()
|
||
# 插入新的填报记录
|
||
self.db.insert_single_data(
|
||
'综信评价数据',
|
||
'填报数据',
|
||
input_template
|
||
)
|
||
|
||
def prepare_rating_record_template():
|
||
"""根据模板生成新的评价记录"""
|
||
rating_record = RatingRecord()
|
||
rating_record.rid = new_rid
|
||
rating_record.company = company_name['企业名称']
|
||
rating_record.project = '综合信用评价'
|
||
rating_record.methods = '企业申报'
|
||
rating_record.status = '进行'
|
||
rating_record.begin_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||
rating_record_template = rating_record.dict_to_save()
|
||
self.db.insert_single_data(
|
||
'企业数据',
|
||
'评价记录',
|
||
rating_record_template
|
||
)
|
||
|
||
def prepare_process_template():
|
||
"""根据数据模板生成新的评价流程数据"""
|
||
credit_process = CreditProcess()
|
||
credit_process.fill_in_questionnaire = 0
|
||
credit_process.fill_in_financial_data = 0
|
||
credit_process.clean_risk_data = 0
|
||
credit_process.model_scoring = 0
|
||
credit_process.report_generation = 0
|
||
credit_process.certificate_generation = 0
|
||
credit_process.cc_evaluation_homepage = 0
|
||
credit_process.fe_evaluation_homepage = 0
|
||
credit_process.cr_analysis_homepage = 0
|
||
credit_process.am_details_homepage = 0
|
||
process_template = dict()
|
||
process_template['评价ID'] = new_rid
|
||
process_template['企业ID'] = self.cid
|
||
process_template['企业评价流程ID'] = credit_process.dict_to_save()
|
||
self.db.insert_single_data(
|
||
'综信评价数据',
|
||
'评价流程',
|
||
process_template
|
||
)
|
||
|
||
def prepare_risk_data():
|
||
# 调用清洗数据接口,执行风险数据清洗程序
|
||
url = "http://api.fecribd.com/etl_tfse/rating/risk_data"
|
||
token = "dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4"
|
||
headers = {'token': token, 'Content-Type': 'application/json; charset=UTF-8'}
|
||
data = json.dumps({"company_id": self.cid, "company_name": company_name, "evaluation_id": new_rid})
|
||
requests.post(url, headers=headers, data=data)
|
||
# 风险数据清洗完成后更新流程状态
|
||
self.update_process_status(new_rid, {"评价流程.清洗风险数据": 1})
|
||
|
||
def __main__():
|
||
prepare_input_template()
|
||
prepare_rating_record_template()
|
||
prepare_process_template()
|
||
prepare_risk_data()
|
||
|
||
__main__()
|
||
return "开始填报", check_input_data()
|
||
|
||
def execute_func():
|
||
"""判断是否有填报记录"""
|
||
input_data = check_input_data()
|
||
if input_data is not False:
|
||
return case_input_exist(input_data)
|
||
else:
|
||
return case_input_not_exist()
|
||
|
||
return execute_func()
|
||
|
||
|