367 lines
14 KiB
Python
367 lines
14 KiB
Python
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',
|
||
'boolean':'Boolean'
|
||
}
|
||
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) 借款方式(信用、抵押、保证、质押...)
|
||
# status 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) 借款方式(信用、抵押、保证、质押...)
|
||
# status 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) 借款方式(信用、抵押、保证、质押...)
|
||
# status char(4) 状态:存续、已兑付、违约
|
||
# remark text 备注""",
|
||
# "Mods/OtherInformation2/Mods")
|
||
#
|
||
crud_code_make("rate_flow",
|
||
"评级结果",
|
||
"""id varchar(255) 评级ID
|
||
rate_date datetime 评级时间
|
||
phone varchar(255) 手机号
|
||
rate_level varchar(255) 评级等级
|
||
rate_scope double 评级分数
|
||
company_name varchar(255) 企业名称
|
||
status double 评级状态
|
||
publish boolean 是否披露
|
||
create_time datetime 创建时间""",
|
||
"Mods/OtherInformation2/Mods")
|
||
|
||
# id = Column(String(16), primary_key=True, default=lambda: create_time_serial_num(prefix="R"))
|
||
# rate_date = Column(DateTime, comment='评级时间')
|
||
# rate_level = Column(String(32), comment="评级等级")
|
||
# rate_scope = Column(Float, comment="评级分数")
|
||
# company_name = Column(String(255), index=True, comment="企业名称")
|
||
# nodes = relationship("RateFlowNode", backref="rate_flow")
|
||
# status = Column(String(32), default="未评级", comment="评级状态")
|
||
# publish = Column(Boolean, default=False, comment="是否披露")
|
||
# create_time = Column(DateTime, server_default=func.now(), comment='创建时间')
|
||
|
||
|
||
# crud_code_make("company_search_main",
|
||
# "城投查询数据",
|
||
# """company_id int 企业ID
|
||
# district varchar(255) 区域
|
||
# score double 城投评分
|
||
# rank char(10) 省内排名
|
||
# rate char(10) 最新主体评级
|
||
# administrative_level char(10) 行政等级
|
||
# background char(10) 股东背景
|
||
# equity_relationship char(10) 股权关系
|
||
# importance char(10) 平台重要性
|
||
# caliber char(10) 城投口径
|
||
# controller varchar(255) 实控人
|
||
# total_assets double 总资产(亿元)
|
||
# monetary_assets double 货币资金(亿元)
|
||
# land_assets double 土地资产(亿元)
|
||
# restricted_assets double 受限资产(亿元)
|
||
# receivable double 应收账款(亿元)
|
||
# gov_rate_receivable double 应收类款项政府占比(%)
|
||
# revenue double 营业收入(亿元)
|
||
# welfare_rate double 公益性&准公益性主营占比(%)
|
||
# net_income double 归母净利润(亿元)
|
||
# gov_subsidies double 政府补助(亿元)
|
||
# return_on_total_assets double 总资产报酬率(%)
|
||
# interest_bearing_debt double 有息债务(亿元)
|
||
# short_term_debt double 短期债务(亿元)
|
||
# loan double 借款(亿元)
|
||
# bond_balance double 债券余额(亿元)
|
||
# private_rate_debt double 私募债占比(%)
|
||
# non_standard_financing double 非标融资(亿元)
|
||
# assets_and_liabilities double 资产负债率(%)
|
||
# debt_capitalization_ratio double 债务资本化比率(%)
|
||
# external_guarantee_ratio double 对外担保比例(%)
|
||
# ebitda_rate_interest double EBITDA/利息(倍)
|
||
# ebitda_rate_total_debt double EBITDA全部债务比(%)
|
||
# credit_balance double 授信余额(亿元)
|
||
# report_date varchar(255) 最新报告期
|
||
# industry varchar(255) 申万行业""",
|
||
# "Mods/RegionalEconomies2/Mods") |