2021-02-27 10:22:21 +00:00
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from django.db import connection
|
|
|
|
|
2021-03-13 10:06:47 +00:00
|
|
|
from ....scripts import getSql
|
2021-02-27 10:22:21 +00:00
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
"""
|
|
|
|
项目初始化命令: python manage.py initialization
|
|
|
|
"""
|
|
|
|
|
2021-03-02 16:28:21 +00:00
|
|
|
def customSql(self, sql_list, model_name, table_name):
|
2021-02-27 10:22:21 +00:00
|
|
|
"""
|
|
|
|
批量执行sql
|
|
|
|
:param sql_list:
|
2021-03-02 16:28:21 +00:00
|
|
|
:param table_name: 表名
|
2021-02-27 10:22:21 +00:00
|
|
|
:return:
|
|
|
|
"""
|
|
|
|
with connection.cursor() as cursor:
|
2021-03-02 16:28:21 +00:00
|
|
|
num = 0
|
|
|
|
for ele in table_name.split(','):
|
|
|
|
cursor.execute("select count(*) from {}".format(ele))
|
|
|
|
result = cursor.fetchone()
|
|
|
|
num += result[0]
|
|
|
|
if num > 0:
|
|
|
|
while True:
|
|
|
|
inp = input(f'[{model_name}]模型已初始化完成,继续将清空[{table_name}]表中所有数据,是否继续初始化?【 Y/N 】')
|
|
|
|
if inp.upper() == 'N':
|
|
|
|
return False
|
|
|
|
elif inp.upper() == 'Y':
|
|
|
|
logger.info(f'正在清空[{table_name}]中数据...')
|
|
|
|
cursor.execute("SET foreign_key_checks = 0")
|
|
|
|
for ele in table_name.split(','):
|
|
|
|
cursor.execute("truncate table {};".format(ele))
|
|
|
|
cursor.execute("SET foreign_key_checks = 1")
|
|
|
|
connection.commit()
|
|
|
|
logger.info(f'清空[{table_name}]中数据{result[0]}条')
|
|
|
|
break
|
|
|
|
|
2021-02-27 10:22:21 +00:00
|
|
|
for sql in sql_list:
|
2021-03-10 16:26:47 +00:00
|
|
|
try:
|
|
|
|
cursor.execute(sql)
|
2021-03-14 04:30:43 +00:00
|
|
|
except:
|
|
|
|
pass
|
2021-02-27 10:22:21 +00:00
|
|
|
connection.commit()
|
2021-03-02 16:28:21 +00:00
|
|
|
return True
|
2021-02-27 10:22:21 +00:00
|
|
|
|
2021-03-02 16:28:21 +00:00
|
|
|
def init(self, sql_filename, model_name, table_name):
|
2021-02-27 10:22:21 +00:00
|
|
|
"""
|
|
|
|
初始化
|
|
|
|
:param sql_filename: sql存放位置
|
|
|
|
:param model_name: 模块名
|
2021-03-02 16:28:21 +00:00
|
|
|
:param table_name: 表名
|
2021-02-27 10:22:21 +00:00
|
|
|
:return:
|
|
|
|
"""
|
|
|
|
logger.info(f'正在初始化[{model_name}]中...')
|
2021-03-02 16:28:21 +00:00
|
|
|
if self.customSql(getSql(sql_filename), model_name, table_name):
|
|
|
|
logger.info(f'[{model_name}]初始化完成!')
|
|
|
|
else:
|
|
|
|
logger.info(f'已取消[{table_name}]初始化')
|
2021-02-27 10:22:21 +00:00
|
|
|
|
2021-03-14 04:30:43 +00:00
|
|
|
def add_arguments(self, parser):
|
2021-03-15 08:26:11 +00:00
|
|
|
parser.add_argument('init_name', nargs='?', type=str)
|
2021-03-14 04:30:43 +00:00
|
|
|
|
2021-02-27 10:22:21 +00:00
|
|
|
def handle(self, *args, **options):
|
2021-03-14 04:30:43 +00:00
|
|
|
init_dict = {
|
|
|
|
'system_dictdata': [os.path.join('system', 'system_dictdata.sql'), '字典管理', 'system_dictdata'],
|
|
|
|
'system_dictdetails': [os.path.join('system', 'system_dictdetails.sql'), '字典详情', 'system_dictdetails'],
|
|
|
|
'system_configsettings': [os.path.join('system', 'system_configsettings.sql'), '参数设置',
|
|
|
|
'system_configsettings'],
|
|
|
|
'permission_post': [os.path.join('permission', 'permission_post.sql'), '岗位管理', 'permission_post'],
|
|
|
|
'permission_dept': [os.path.join('permission', 'permission_dept.sql'), '部门管理', 'permission_dept'],
|
|
|
|
'permission_menu': [os.path.join('permission', 'permission_menu.sql'), '菜单管理', 'permission_menu'],
|
|
|
|
'permission_role': [os.path.join('permission', 'permission_role.sql'), '角色管理',
|
|
|
|
','.join(['permission_role', 'permission_role_dept', 'permission_role_menu'])],
|
|
|
|
'permission_userprofile': [os.path.join('permission', 'permission_userprofile.sql'), '用户管理', ','.join(
|
|
|
|
['permission_userprofile_groups', 'permission_userprofile', 'permission_userprofile_role',
|
|
|
|
'permission_userprofile_post'])]
|
|
|
|
}
|
|
|
|
init_name = options.get('init_name')
|
|
|
|
if init_name:
|
|
|
|
for ele in init_name:
|
|
|
|
if ele in init_dict:
|
|
|
|
self.init(*init_dict[ele])
|
|
|
|
|
|
|
|
else:
|
|
|
|
for ele in init_dict.values():
|
|
|
|
self.init(*ele)
|