2022-04-29 16:19:01 +08:00
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
from Certificate.PdfCertificate import CertificateGenerator
|
|
|
|
|
from DBHelper.MongoHelper import MongoHelper
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from Certificate.scripts.path_tool import get_json_path, get_gen_certificate_path
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GenerateCertificate:
|
|
|
|
|
"""证书生成类"""
|
|
|
|
|
db = MongoHelper("tfse_v0.21")
|
|
|
|
|
|
|
|
|
|
cid = None
|
|
|
|
|
rid = None
|
|
|
|
|
company = None
|
|
|
|
|
type = None
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def generate_code(param1, param2, param3):
|
|
|
|
|
"""
|
|
|
|
|
生成校验码(4位)
|
|
|
|
|
第一位由项目类型+项目编号生成
|
|
|
|
|
后三位由时间戳生成
|
|
|
|
|
Parameters:
|
|
|
|
|
param1: string 项目类型
|
|
|
|
|
param2: string 项目编号
|
|
|
|
|
param3: string 时间戳
|
|
|
|
|
Returns:
|
|
|
|
|
result: type 校验码
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def generate_01():
|
|
|
|
|
"""
|
|
|
|
|
生成第一位校验码
|
|
|
|
|
由项目类型+项目编号生成
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: string 校验码
|
|
|
|
|
"""
|
|
|
|
|
param1_list = list(param1)
|
|
|
|
|
res = 0
|
|
|
|
|
for item in param1_list:
|
|
|
|
|
res += letter[item]
|
|
|
|
|
if param2 == '01':
|
|
|
|
|
res = res * 2
|
|
|
|
|
else:
|
|
|
|
|
res = res * 1
|
|
|
|
|
|
|
|
|
|
res_list = list(str(res))
|
|
|
|
|
return res_list[0]
|
|
|
|
|
|
|
|
|
|
def generate_02():
|
|
|
|
|
"""
|
|
|
|
|
生成后三位校验码
|
|
|
|
|
由时间戳生成
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: string 校验码
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def generate_random(data):
|
|
|
|
|
"""
|
|
|
|
|
通过数组中的数字生成随机数
|
|
|
|
|
Parameters:
|
|
|
|
|
data: 数字列表
|
|
|
|
|
Returns:
|
|
|
|
|
result: string 校验码
|
|
|
|
|
"""
|
|
|
|
|
res = list(str(sum([int(x) for x in data])))
|
|
|
|
|
return str(res[0])
|
|
|
|
|
|
|
|
|
|
# Paramter
|
|
|
|
|
param3_list = list(param3)
|
|
|
|
|
param3_01 = generate_random(param3_list[0:3])
|
|
|
|
|
param3_02 = generate_random(param3_list[3:6])
|
|
|
|
|
param3_03 = generate_random(param3_list[6:9])
|
|
|
|
|
|
|
|
|
|
return param3_01 + param3_02 + param3_03
|
|
|
|
|
|
|
|
|
|
with open(get_json_path(common='letter.json'), 'r', encoding='utf-8') as f:
|
|
|
|
|
letter = json.load(f)
|
|
|
|
|
result = generate_01() + generate_02()
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def effective_date():
|
|
|
|
|
"""
|
|
|
|
|
生成有效日期
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: 有效日期
|
|
|
|
|
"""
|
|
|
|
|
year = datetime.now().year
|
|
|
|
|
|
|
|
|
|
date = '{}年1月1日至{}年1月1日'.format(year, year + 1)
|
|
|
|
|
|
|
|
|
|
return date
|
|
|
|
|
|
|
|
|
|
def generate_number(self):
|
|
|
|
|
"""
|
|
|
|
|
生成证书编号
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: 证书编号
|
|
|
|
|
"""
|
|
|
|
|
project_type = 'CCRE'
|
|
|
|
|
project_number = '01'
|
|
|
|
|
project_time = str(datetime.now().strftime('%Y%m%d%H%M'))
|
|
|
|
|
project_code = self.generate_code(project_type, project_number, project_time)
|
|
|
|
|
|
|
|
|
|
number = project_type + project_number + project_time + project_code
|
|
|
|
|
|
|
|
|
|
return number
|
|
|
|
|
|
|
|
|
|
def generate_esg_number(self):
|
|
|
|
|
"""
|
|
|
|
|
生成esg证书编号
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: 证书编号
|
|
|
|
|
"""
|
|
|
|
|
project_type = 'ESG'
|
|
|
|
|
project_number = '02'
|
|
|
|
|
project_time = str(datetime.now().strftime('%Y%m%d%H%M'))
|
|
|
|
|
project_code = self.generate_code(project_type, project_number, project_time)
|
|
|
|
|
|
|
|
|
|
number = project_type + project_number + project_time + project_code
|
|
|
|
|
|
|
|
|
|
return number
|
|
|
|
|
|
|
|
|
|
def generate_certificate(self):
|
|
|
|
|
"""证书生成"""
|
|
|
|
|
|
|
|
|
|
def get_certificate_data():
|
|
|
|
|
"""
|
|
|
|
|
获取证书所需数据
|
|
|
|
|
Parameters:
|
|
|
|
|
param: dict 查询条件(包括企业名称/cid/rid)
|
|
|
|
|
Returns:
|
|
|
|
|
result: dict 证书所需数据
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def general():
|
|
|
|
|
"""
|
|
|
|
|
获取综合信用评价证书所需数据
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: dict 证书所需数据
|
|
|
|
|
"""
|
|
|
|
|
# 企业基本信息
|
|
|
|
|
data_01 = self.db.find_single_data("企业数据", "基本工商信息", {'企业ID': self.cid}, ['工商信息'])
|
|
|
|
|
# 评价结果
|
|
|
|
|
data_02 = self.db.find_single_data("综信评价数据", "评价结果", {'评价ID': self.rid}, ['信用等级'])
|
|
|
|
|
info = dict()
|
|
|
|
|
info['企业名称'] = self.company
|
|
|
|
|
info['统一社会信用代码'] = data_01['工商信息']['纳税人识别号']
|
|
|
|
|
info['企业级别'] = data_02['信用等级']
|
|
|
|
|
info['证书编号'] = self.generate_number()
|
|
|
|
|
info['有效日期'] = self.effective_date()
|
|
|
|
|
return info
|
|
|
|
|
|
|
|
|
|
def esg():
|
|
|
|
|
"""
|
|
|
|
|
获取esg评价证书所需数据
|
|
|
|
|
Parameters:
|
|
|
|
|
-
|
|
|
|
|
Returns:
|
|
|
|
|
result: dict 证书所需数据
|
|
|
|
|
"""
|
|
|
|
|
# 企业基本信息
|
|
|
|
|
data_01 = self.db.find_single_data("企业数据", "基本工商信息", {'企业ID': self.cid}, ['工商信息'])
|
|
|
|
|
# 评价结果
|
|
|
|
|
data_02 = self.db.find_single_data("ESG评价数据", "评价结果", {'评价ID': self.rid}, ['ESG得分', '评价等级'])
|
|
|
|
|
info = dict()
|
|
|
|
|
info['企业名称'] = self.company
|
|
|
|
|
info['统一社会信用代码'] = data_01['工商信息']['纳税人识别号']
|
|
|
|
|
info['ESG得分'] = data_02['ESG得分']
|
|
|
|
|
info['评价等级'] = data_02['评价等级']
|
|
|
|
|
info['证书编号'] = self.generate_esg_number()
|
|
|
|
|
info['有效日期'] = self.effective_date()
|
|
|
|
|
return info
|
|
|
|
|
|
|
|
|
|
if self.type == 'esg':
|
|
|
|
|
res = esg()
|
|
|
|
|
else:
|
|
|
|
|
res = general()
|
|
|
|
|
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def certificate():
|
|
|
|
|
"""
|
|
|
|
|
生成证书pdf
|
|
|
|
|
Parameters:
|
|
|
|
|
param: dict 证书所需数据
|
|
|
|
|
Returns:
|
|
|
|
|
res: 处理成功返回报告FileID;处理失败返回False
|
|
|
|
|
"""
|
|
|
|
|
# 生成PDF报告文件,以时间戳命名,临时存储
|
|
|
|
|
certificate_file_name = '{}_{}.pdf'.format(self.company, datetime.now().strftime('%Y%m%d'))
|
|
|
|
|
pdf_report = CertificateGenerator(name=certificate_file_name, text_data=text_data)
|
|
|
|
|
if len(text_data) > 5:
|
|
|
|
|
pdf_report.gen_esg()
|
|
|
|
|
else:
|
|
|
|
|
pdf_report.gen()
|
|
|
|
|
|
|
|
|
|
return certificate_file_name
|
|
|
|
|
|
|
|
|
|
def save_certificate():
|
|
|
|
|
"""
|
|
|
|
|
保存证书pdf
|
|
|
|
|
Parameters:
|
|
|
|
|
'-'
|
|
|
|
|
Returns:
|
|
|
|
|
res: 处理成功返回报告FileID;处理失败返回False
|
|
|
|
|
"""
|
|
|
|
|
# 保存PDF报告文件,删除临时存储的报告
|
|
|
|
|
if len(text_data) > 5:
|
2022-05-05 14:41:45 +08:00
|
|
|
|
file_id = self.db.upsert_certificate_file('文件', 'ESG证书', certifice_pdf)
|
2022-04-29 16:19:01 +08:00
|
|
|
|
else:
|
2022-05-05 14:41:45 +08:00
|
|
|
|
file_id = self.db.upsert_certificate_file('文件', '综信证书', certifice_pdf)
|
2022-04-29 16:19:01 +08:00
|
|
|
|
certificate_path = get_gen_certificate_path(name=certifice_pdf)
|
|
|
|
|
os.remove(certificate_path)
|
|
|
|
|
|
|
|
|
|
# 保存PDF报告成功,返回FileID;保存PDF报告文件失败,返回False
|
|
|
|
|
return file_id if file_id else False
|
|
|
|
|
|
|
|
|
|
text_data = get_certificate_data()
|
|
|
|
|
certifice_pdf = certificate()
|
|
|
|
|
result = save_certificate()
|
|
|
|
|
|
|
|
|
|
if result is not False:
|
|
|
|
|
return {"info": "生成证书成功", "result": {"FileID": result}}, 200
|
|
|
|
|
else:
|
|
|
|
|
return {"info": "生成证书失败"}, 210
|