2025-04-11 08:54:28 +08:00

181 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version : 1.0
# @Create Time : 2022/11/23 11:21
# @File : initialize.py
# @IDE : PyCharm
# @desc : 简要说明
from enum import Enum
from sqlalchemy import insert
from core.database import db_getter
from utils.excel.excel_manage import ExcelManage
from application.settings import BASE_DIR, VERSION
import os
from apps.vadmin.auth import models as auth_models
from apps.vadmin.system import models as system_models
from apps.vadmin.help import models as help_models
import subprocess
class Environment(str, Enum):
dev = "dev"
pro = "pro"
class InitializeData:
"""
初始化数据
生成步骤:
1. 读取数据
2. 获取数据库
3. 创建数据
"""
SCRIPT_DIR = os.path.join(BASE_DIR, 'scripts', 'initialize')
def __init__(self):
self.sheet_names = []
self.datas = {}
self.ex = None
self.db = None
self.__serializer_data()
self.__get_sheet_data()
@classmethod
def migrate_model(cls, env: Environment = Environment.pro):
"""
模型迁移映射到数据库
"""
subprocess.check_call(['alembic', '--name', f'{env.value}', 'revision', '--autogenerate', '-m', f'{VERSION}'], cwd=BASE_DIR)
subprocess.check_call(['alembic', '--name', f'{env.value}', 'upgrade', 'head'], cwd=BASE_DIR)
print(f"环境:{env} {VERSION} 数据库表迁移完成")
def __serializer_data(self):
"""
序列化数据将excel数据转为python对象
"""
self.ex = ExcelManage()
self.ex.open_workbook(os.path.join(self.SCRIPT_DIR, 'data', 'init.xlsx'), read_only=True)
self.sheet_names = self.ex.get_sheets()
def __get_sheet_data(self):
"""
获取工作区数据
"""
for sheet in self.sheet_names:
sheet_data = []
self.ex.open_sheet(sheet)
headers = self.ex.get_header()
datas = self.ex.readlines(min_row=2, max_col=len(headers))
for row in datas:
sheet_data.append(dict(zip(headers, row)))
self.datas[sheet] = sheet_data
async def __generate_data(self, table_name: str, model):
"""
生成数据
:param table_name: 表名
:param model: 数据表模型
"""
async_session = db_getter()
db = await async_session.__anext__()
datas = self.datas.get(table_name)
await db.execute(insert(model), datas)
await db.flush()
await db.commit()
print(f"{table_name} 表数据已生成")
async def generate_dept(self):
"""
生成部门详情数据
"""
await self.__generate_data("vadmin_auth_dept", auth_models.VadminDept)
async def generate_user_dept(self):
"""
生成用户关联部门详情数据
"""
await self.__generate_data("vadmin_auth_user_depts", auth_models.vadmin_auth_user_depts)
async def generate_menu(self):
"""
生成菜单数据
"""
await self.__generate_data("vadmin_auth_menu", auth_models.VadminMenu)
async def generate_role(self):
"""
生成角色
"""
await self.__generate_data("vadmin_auth_role", auth_models.VadminRole)
async def generate_user(self):
"""
生成用户
"""
await self.__generate_data("vadmin_auth_user", auth_models.VadminUser)
async def generate_user_role(self):
"""
生成用户
"""
await self.__generate_data("vadmin_auth_user_roles", auth_models.vadmin_auth_user_roles)
async def generate_system_tab(self):
"""
生成系统配置分类数据
"""
await self.__generate_data("vadmin_system_settings_tab", system_models.VadminSystemSettingsTab)
async def generate_system_config(self):
"""
生成系统配置数据
"""
await self.__generate_data("vadmin_system_settings", system_models.VadminSystemSettings)
async def generate_dict_type(self):
"""
生成字典类型数据
"""
await self.__generate_data("vadmin_system_dict_type", system_models.VadminDictType)
async def generate_dict_details(self):
"""
生成字典详情数据
"""
await self.__generate_data("vadmin_system_dict_details", system_models.VadminDictDetails)
async def generate_help_issue_category(self):
"""
生成常见问题类别数据
"""
await self.__generate_data("vadmin_help_issue_category", help_models.VadminIssueCategory)
async def generate_help_issue(self):
"""
生成常见问题详情数据
"""
await self.__generate_data("vadmin_help_issue", help_models.VadminIssue)
async def run(self, env: Environment = Environment.pro):
"""
执行初始化工作
"""
self.migrate_model(env)
await self.generate_menu()
await self.generate_role()
await self.generate_dept()
await self.generate_user()
await self.generate_user_dept()
await self.generate_user_role()
await self.generate_system_tab()
await self.generate_dict_type()
await self.generate_system_config()
await self.generate_dict_details()
await self.generate_help_issue_category()
await self.generate_help_issue()
print(f"环境:{env} {VERSION} 数据已初始化完成")