urban-investment-research/CodeMakeUtils.py

320 lines
11 KiB
Python
Raw Normal View History

2023-03-28 15:08:12 +08:00
import shutil
from pathlib import Path
import os
import string
def code_make(dir_path, replace_dic={}, save_path="temp"):
"""
增删改查代码生成
@param dir_path: 代码模板
@param replace_dic: 需要替换的名称
@param save_path: 保存路径
"""
code_path = Path(dir_path)
if not code_path.exists():
os.makedirs(code_path)
if code_path.is_dir():
save_path = Path(save_path)
shutil.copytree(code_path, save_path)
for root, dirs, files in os.walk(save_path):
for file in files:
file_path = Path(os.path.join(root, file))
item_code_str = file_path.read_text(encoding="utf-8")
new_code_str = item_code_str
for replace_word, replaced_word in replace_dic.items():
new_code_str = new_code_str.replace(replace_word, replaced_word)
with open(file_path, "w", encoding="utf-8") as f:
f.write(new_code_str)
def to_snake(name):
new_name = ""
for i in range(len(name)):
k = name[i]
if name[i] in string.ascii_letters:
if name[i].isupper():
if i == 0:
k = name[i].lower()
else:
k = '_' + name[i].lower()
new_name += k
return new_name
def to_upper_camel_case(name):
items = name.split("_")
new_name = ""
for item in items:
new_name += item[0].upper() + item[1:]
return new_name
def table_str_convert(table_str, key='id'):
replace_dic = {
'varchar': 'String',
'char': 'String',
'date': 'Date',
'datetime': 'DateTime',
'text': 'Text',
'int': 'Integer',
'double': 'Double'
}
new_lines = []
for line in table_str.split("\n"):
if line:
cols = line.split("\t")
col_name = cols[0].replace(' ', "").replace("-", '_')
col_type = cols[1].replace(" ", '')
col_type = col_type.replace(col_type.split('(')[0], replace_dic[col_type.split('(')[0]])
comment = cols[3]
comment_str = f', comment="{comment}"' if comment.replace(" ", '') else ""
primary_key_str = f', primary_key=True' if col_name == key else ''
new_line = f'{col_name} = Column({col_type}{primary_key_str}{comment_str})'
new_lines.append(new_line)
new_content = "\n ".join(new_lines)
return new_content
def make_info_str(table_str, key='id'):
replace_dic = {
'varchar': 'str',
'char': 'str',
'text': 'str',
'double': 'float'
}
info_lines = []
add_info_lines = []
for line in table_str.split("\n"):
if line:
cols = line.split("\t")
col_name = cols[0].replace(' ', "").replace("-", '_')
col_type = cols[1].replace(" ", '')
if col_type.split('(')[0] in replace_dic:
col_type = replace_dic[col_type.split('(')[0]]
# comment = col_type[3]
# comment_str = f',comment="{col_type[3]}"' if comment else ""
# primary_key_str = f',primary_key=True' if col_name == key else ''
new_line = f'{col_name}: Optional[{col_type}]'
info_lines.append(new_line)
if col_name != "id":
add_info_lines.append(new_line)
info_content = "\n ".join(info_lines)
add_info_content = "\n ".join(add_info_lines)
return info_content, add_info_content
def crud_code_make(table_name: str, chinese_name, table_str, path: str):
model_content = table_str_convert(table_str)
info_content, add_info_content = make_info_str(table_str)
upper_camel_case_name = to_upper_camel_case(table_name)
code_make("Utils/CodeMake/CrudTemplate",
{"EditItemType": upper_camel_case_name,
"edit_item_type": table_name,
"修改项类型": chinese_name,
'"""model_content"""': model_content,
'"""info_content"""': info_content,
'"""add_info_content"""': add_info_content,
}
, f"{path}/{upper_camel_case_name}")
crud_code_make("company_credit_rating",
"主体评级",
"""id int unsigned auto_increment
company_id int 企业ID
result char(5) 评级结果
rate_date date 评级日期
publish_date date 披露日期
outlook char(5) 展望
rate_agency varchar(50) 评级机构
rate_file text 评级报告文件地址链接""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_business_compose",
"业务构成",
"""id int unsigned auto_increment
company_id int 企业ID
name varchar(255) not null 业务名称
income double 收入
total_date date 统计截至时间
remark text 业务描述""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_business_items",
"重要项目",
"""id int unsigned auto_increment
company_id int 企业ID
name varchar(255) not null 项目名称
product varchar(255) 产品类型
industry varchar(255) 行业类型
region int 地区
year int 业务年度
remark text 项目描述""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_finance_main",
"财务报表主要指标",
"""id int unsigned auto_increment
company_id int 企业ID
total_date date 统计截至日期
total_assets double 资产总额
owners_equity double 所有者权益
short_term_debt double 短期债务
long_term_debt double 长期债务
total_debt double 总债务
operating_income double 营业收入
total_profit double 利润总额
net_profit double 净利润
ebdita double EBITDA
operating_net_cash_inflow double 经营性净现金流入
receivable_turnover_times double 应收款项周转次数()
inventory_turnover_times double 存货周转次数()
total_asset_turnover_times double 总资产周转次数()
cash_to_income_ratio double 现金收入比
operating_margin double 营业利润率
long_debt_capitalization_ratio double 长期债务资本化比率
total_debt_capitalization_ratio double 总债务资本化比率
asset_liability_ratio double 资产负债率
current_ratio double 流动比率
quick_ratio double 速动比率
ebdita_interest_coverage_ratio double EBITDA利息保障倍数()
total_debt_ebdita double 总债务/EBITDA()""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_restricted_assets",
"受限资产",
"""id int unsigned auto_increment
company_id int 企业ID
total_date date 统计截至时间
name varchar(255) 受限资产明细
duration varchar(255) 受限期限期限
amount varchar(255) 资产账面价值
reason varchar(255) 受限原因
remark text 受限资产说明""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_financial_statement",
"财务说明",
"""id int unsigned auto_increment
company_id int 企业ID
total_date date 评价截至时间
assets text 资产说明
debt text 负债说明
rights text 权益说明""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_credit",
"授信情况",
"""id int unsigned auto_increment
company_id int 企业ID
total_date date 统计时间
credit_amount double 授信额度
used_amount double 使用额度
unused_amount double 剩余额度
credit_institution varchar(255) 授信机构""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_guarantee",
"提供担保",
"""id int unsigned auto_increment
company_id int 企业ID
third_name varchar(255) 被担保方
type varchar(255) 担保类型
amount double 担保规模
duration varchar(255) 担保期限
method varchar(255) 保证方式
status char(2) 担保状态存续完成
remark text 担保说明""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_bond",
"发债情况",
"""id int unsigned auto_increment
company_id int 企业ID
name varchar(255) 债券简称
code varchar(255) 债券代码
type char(20) 债券类型
asset varchar(255) 发行规模
publish_date date 发行日期
duration varchar(255) 债券期限
raising_way char(5) 募集方式
due_date date 到期日期
coupon varchar(255) 票面利率
rate_result char(5) 债项评级
rate_agency varchar(255) 评级机构
status char(4) 发债状态:存续到期偿付违约""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_bank_lease",
"银行借款",
"""id int unsigned auto_increment
company_id int 企业ID
third_name varchar(255) 借款机构
amount varchar(255) 借款金额
start_date date 借款日期
end_date date 到期日期
coupon varchar(255) 利率
method varchar(255) 借款方式信用抵押保证质押...
status char(4) 状态:存续到期偿付违约
remark text 备注""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_trust_lease",
"信托融资",
"""id int unsigned auto_increment
company_id int 企业ID
third_name varchar(255) 借款机构
amount varchar(255) 借款金额
start_date date 借款日期
end_date date 到期日期
coupon varchar(255) 利率
method varchar(255) 借款方式信用抵押保证质押...
stutus char(4) 状态:存续到期偿付违约
remark text 备注""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_rental_lease",
"租赁融资",
"""id int unsigned auto_increment
company_id int 企业ID
third_name varchar(255) 借款机构
amount varchar(255) 借款金额
start_date date 借款日期
end_date date 到期日期
coupon varchar(255) 利率
method varchar(255) 借款方式信用抵押保证质押...
stutus char(4) 状态:存续到期偿付违约
remark text 备注""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_other_lease",
"其他融资",
"""id int unsigned auto_increment
company_id int 企业ID
type varchar(255) 融资类型
third_name varchar(255) 借款机构
amount double 借款金额
duration varchar(255) 借款期限
coupon varchar(255) 利率
method varchar(255) 借款方式信用抵押保证质押...
stutus char(4) 状态:存续已兑付违约
remark text 备注""",
"Mods/OtherInformation2/Mods")
crud_code_make("company_judicial_document",
"裁判文书",
"""id int unsigned auto_increment
company_id int 企业ID
doc_type varchar(255) 文书类型
case_date date 裁判日期
title varchar(255) 案件名称
code varchar(255) 案号
type varchar(255) 案件类型
reason varchar(255) 案由
amount double 案件金额
identity varchar(255) 案件身份
result text 裁判结果
court varchar(255) 审理法院
publish_date date 发布日期""",
"Mods/OtherInformation2/Mods")