tfse-model-api-v0.2/Certificate/CertificateImpl.py

243 lines
7.8 KiB
Python
Raw Normal View History

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)
else:
2022-05-05 14:41:45 +08:00
file_id = self.db.upsert_certificate_file('文件', '综信证书', certifice_pdf)
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