313 lines
14 KiB
SQL
313 lines
14 KiB
SQL
-- Muyu Warehouse Management System - Database Init Script
|
|
|
|
SET NAMES utf8mb4;
|
|
SET CHARACTER SET utf8mb4;
|
|
|
|
CREATE DATABASE IF NOT EXISTS `muyu_wms` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
USE `muyu_wms`;
|
|
|
|
-- ==================== System Management Tables ====================
|
|
|
|
CREATE TABLE `sys_user` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` VARCHAR(32) NOT NULL,
|
|
`username` VARCHAR(50) NOT NULL,
|
|
`password` VARCHAR(255) NOT NULL,
|
|
`salt` VARCHAR(32) NOT NULL,
|
|
`real_name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`phone` VARCHAR(20) NOT NULL DEFAULT '',
|
|
`email` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`avatar` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1:enabled 0:disabled',
|
|
`last_login_time` DATETIME DEFAULT NULL,
|
|
`last_login_ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
`deleted_at` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_user_id` (`user_id`),
|
|
UNIQUE KEY `uk_username` (`username`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_deleted_at` (`deleted_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_role` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`role_id` VARCHAR(32) NOT NULL,
|
|
`role_name` VARCHAR(50) NOT NULL,
|
|
`role_key` VARCHAR(50) NOT NULL,
|
|
`role_desc` VARCHAR(200) NOT NULL DEFAULT '',
|
|
`sort_order` INT NOT NULL DEFAULT 0,
|
|
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1:enabled 0:disabled',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_role_id` (`role_id`),
|
|
UNIQUE KEY `uk_role_key` (`role_key`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_user_role` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`user_id` VARCHAR(32) NOT NULL,
|
|
`role_id` VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_user_role` (`user_id`, `role_id`),
|
|
KEY `idx_role_id` (`role_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_menu` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`menu_id` VARCHAR(32) NOT NULL,
|
|
`parent_id` VARCHAR(32) NOT NULL DEFAULT '',
|
|
`menu_name` VARCHAR(50) NOT NULL,
|
|
`menu_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1:directory 2:menu 3:button',
|
|
`path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
`component` VARCHAR(200) NOT NULL DEFAULT '',
|
|
`permission` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`icon` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`sort_order` INT NOT NULL DEFAULT 0,
|
|
`visible` TINYINT NOT NULL DEFAULT 1 COMMENT '1:visible 0:hidden',
|
|
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1:enabled 0:disabled',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_menu_id` (`menu_id`),
|
|
KEY `idx_parent_id` (`parent_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_role_menu` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`role_id` VARCHAR(32) NOT NULL,
|
|
`menu_id` VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_role_menu` (`role_id`, `menu_id`),
|
|
KEY `idx_menu_id` (`menu_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_operation_log` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`log_id` VARCHAR(32) NOT NULL,
|
|
`user_id` VARCHAR(32) NOT NULL DEFAULT '',
|
|
`username` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`module` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`operation` VARCHAR(20) NOT NULL DEFAULT '',
|
|
`method` VARCHAR(10) NOT NULL DEFAULT '',
|
|
`path` VARCHAR(200) NOT NULL DEFAULT '',
|
|
`request_body` TEXT,
|
|
`response_body` TEXT,
|
|
`ip` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`user_agent` VARCHAR(500) NOT NULL DEFAULT '',
|
|
`duration` INT NOT NULL DEFAULT 0 COMMENT 'milliseconds',
|
|
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1:success 0:fail',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_log_id` (`log_id`),
|
|
KEY `idx_user_id` (`user_id`),
|
|
KEY `idx_module` (`module`),
|
|
KEY `idx_created_at` (`created_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sys_config` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`config_id` VARCHAR(32) NOT NULL,
|
|
`config_key` VARCHAR(50) NOT NULL,
|
|
`config_value` TEXT,
|
|
`config_name` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`config_group` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`remark` TEXT,
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_config_id` (`config_id`),
|
|
UNIQUE KEY `uk_config_key` (`config_key`),
|
|
KEY `idx_config_group` (`config_group`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- ==================== Inventory Management Tables ====================
|
|
|
|
CREATE TABLE `inv_product` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`product_id` VARCHAR(32) NOT NULL,
|
|
`product_name` VARCHAR(100) NOT NULL,
|
|
`image_url` VARCHAR(255) NOT NULL DEFAULT '',
|
|
`spec` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`color` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`unit_pieces` INT NOT NULL DEFAULT 0,
|
|
`unit_rolls` INT NOT NULL DEFAULT 0,
|
|
`stock_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`location` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`cost_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`sales_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`remark` TEXT,
|
|
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1:enabled 0:disabled',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
`deleted_at` DATETIME DEFAULT NULL,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_product_id` (`product_id`),
|
|
UNIQUE KEY `uk_product_name` (`product_name`),
|
|
KEY `idx_color` (`color`),
|
|
KEY `idx_location` (`location`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_deleted_at` (`deleted_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `inv_stock_import_log` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`import_id` VARCHAR(32) NOT NULL,
|
|
`file_name` VARCHAR(200) NOT NULL DEFAULT '',
|
|
`total_count` INT NOT NULL DEFAULT 0,
|
|
`success_count` INT NOT NULL DEFAULT 0,
|
|
`fail_count` INT NOT NULL DEFAULT 0,
|
|
`error_msg` TEXT,
|
|
`operator` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_import_id` (`import_id`),
|
|
KEY `idx_created_at` (`created_at`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `inv_stock_check` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`check_id` VARCHAR(32) NOT NULL,
|
|
`check_no` VARCHAR(32) NOT NULL,
|
|
`check_date` DATE NOT NULL,
|
|
`checker` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0:draft 1:in_progress 2:completed',
|
|
`remark` TEXT,
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_check_id` (`check_id`),
|
|
UNIQUE KEY `uk_check_no` (`check_no`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_check_date` (`check_date`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `inv_stock_check_detail` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`detail_id` VARCHAR(32) NOT NULL,
|
|
`check_id` VARCHAR(32) NOT NULL,
|
|
`product_id` VARCHAR(32) NOT NULL,
|
|
`system_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`actual_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`diff_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`diff_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
`remark` TEXT,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_detail_id` (`detail_id`),
|
|
KEY `idx_check_id` (`check_id`),
|
|
KEY `idx_product_id` (`product_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `inv_stock_adjust` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`adjust_id` VARCHAR(32) NOT NULL,
|
|
`adjust_no` VARCHAR(32) NOT NULL,
|
|
`adjust_date` DATE NOT NULL,
|
|
`adjust_reason` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`operator` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`approver` VARCHAR(50) NOT NULL DEFAULT '',
|
|
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0:pending 1:approved 2:rejected',
|
|
`remark` TEXT,
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_adjust_id` (`adjust_id`),
|
|
UNIQUE KEY `uk_adjust_no` (`adjust_no`),
|
|
KEY `idx_status` (`status`),
|
|
KEY `idx_adjust_date` (`adjust_date`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `inv_stock_adjust_detail` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`detail_id` VARCHAR(32) NOT NULL,
|
|
`adjust_id` VARCHAR(32) NOT NULL,
|
|
`product_id` VARCHAR(32) NOT NULL,
|
|
`before_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`adjust_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`after_quantity` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
|
`remark` TEXT,
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_detail_id` (`detail_id`),
|
|
KEY `idx_adjust_id` (`adjust_id`),
|
|
KEY `idx_product_id` (`product_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Casbin policy storage
|
|
CREATE TABLE `casbin_rule` (
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
|
`ptype` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v0` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v1` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v2` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v3` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v4` VARCHAR(100) NOT NULL DEFAULT '',
|
|
`v5` VARCHAR(100) NOT NULL DEFAULT '',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_casbin` (`ptype`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- ==================== Initial Data ====================
|
|
|
|
-- Default admin user (password: admin123, bcrypt hashed)
|
|
INSERT INTO `sys_user` (`user_id`, `username`, `password`, `salt`, `real_name`, `status`)
|
|
VALUES ('u_admin_001', 'admin', '$2a$10$S5XPWRXUnexAt9KJw2CefeHMa6aude7j5dm5qgWM1YMQAAwRgsGXa', 'bcrypt', 'System Admin', 1);
|
|
|
|
-- Default roles
|
|
INSERT INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_desc`, `sort_order`, `status`) VALUES
|
|
('r_001', '系统管理员', 'admin', 'Full system access', 1, 1),
|
|
('r_002', '仓库管理员', 'warehouse', 'Warehouse management access', 2, 1),
|
|
('r_003', '普通用户', 'user', 'Basic read access', 3, 1);
|
|
|
|
-- Assign admin role to admin user
|
|
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES ('u_admin_001', 'r_001');
|
|
|
|
-- Default menus
|
|
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `menu_name`, `menu_type`, `path`, `component`, `permission`, `icon`, `sort_order`, `visible`, `status`) VALUES
|
|
-- Dashboard
|
|
('m_001', '', '首页', 1, '/dashboard', './Dashboard', '', 'DashboardOutlined', 1, 1, 1),
|
|
-- System Management
|
|
('m_100', '', '系统管理', 1, '/system', '', '', 'SettingOutlined', 100, 1, 1),
|
|
('m_101', 'm_100', '用户管理', 2, '/system/users', './System/Users', 'system:user:list', 'UserOutlined', 1, 1, 1),
|
|
('m_102', 'm_100', '角色管理', 2, '/system/roles', './System/Roles', 'system:role:list', 'TeamOutlined', 2, 1, 1),
|
|
('m_103', 'm_100', '菜单管理', 2, '/system/menus', './System/Menus', 'system:menu:list', 'MenuOutlined', 3, 1, 1),
|
|
('m_104', 'm_100', '操作日志', 2, '/system/logs', './System/Logs', 'system:log:list', 'FileTextOutlined', 4, 1, 1),
|
|
('m_105', 'm_100', '系统配置', 2, '/system/configs', './System/Configs', 'system:config:list', 'ToolOutlined', 5, 1, 1),
|
|
-- Inventory Management
|
|
('m_200', '', '库存管理', 1, '/inventory', '', '', 'DatabaseOutlined', 200, 1, 1),
|
|
('m_201', 'm_200', '产品档案', 2, '/inventory/products', './Inventory/Products', 'inventory:product:list', 'AppstoreOutlined', 1, 1, 1),
|
|
('m_202', 'm_200', '库存查询', 2, '/inventory/stocks', './Inventory/Stocks', 'inventory:stock:list', 'SearchOutlined', 2, 1, 1),
|
|
('m_203', 'm_200', '库存统计', 2, '/inventory/stats', './Inventory/Stats', 'inventory:stock:stats', 'BarChartOutlined', 3, 1, 1),
|
|
('m_204', 'm_200', '库存盘点', 2, '/inventory/checks', './Inventory/Checks', 'inventory:check:list', 'AuditOutlined', 4, 1, 1),
|
|
('m_205', 'm_200', '库存调整', 2, '/inventory/adjusts', './Inventory/Adjusts', 'inventory:adjust:list', 'SwapOutlined', 5, 1, 1),
|
|
('m_206', 'm_200', 'Excel导入', 2, '/inventory/import', './Inventory/Import', 'inventory:import:exec', 'ImportOutlined', 6, 1, 1);
|
|
|
|
-- Assign all menus to admin role
|
|
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
|
|
SELECT 'r_001', `menu_id` FROM `sys_menu`;
|
|
|
|
-- Assign inventory menus to warehouse role
|
|
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
|
|
('r_002', 'm_001'),
|
|
('r_002', 'm_200'), ('r_002', 'm_201'), ('r_002', 'm_202'),
|
|
('r_002', 'm_203'), ('r_002', 'm_204'), ('r_002', 'm_205'), ('r_002', 'm_206');
|
|
|
|
-- Default Casbin policies
|
|
INSERT INTO `casbin_rule` (`ptype`, `v0`, `v1`, `v2`) VALUES
|
|
('p', 'admin', '/api/v1/*', '*'),
|
|
('p', 'warehouse', '/api/v1/auth/*', '*'),
|
|
('p', 'warehouse', '/api/v1/inventory/*', '*'),
|
|
('p', 'user', '/api/v1/auth/*', '*'),
|
|
('p', 'user', '/api/v1/inventory/products', 'GET'),
|
|
('p', 'user', '/api/v1/inventory/stocks', 'GET'),
|
|
('p', 'user', '/api/v1/inventory/stocks/*', 'GET');
|
|
|
|
-- Default system configs
|
|
INSERT INTO `sys_config` (`config_id`, `config_key`, `config_value`, `config_name`, `config_group`, `remark`) VALUES
|
|
('c_001', 'sys_name', 'muyuqingfeng仓储管理系统', 'System Name', 'basic', 'System display name'),
|
|
('c_002', 'sys_logo', '', 'System Logo', 'basic', 'System logo URL'),
|
|
('c_003', 'upload_max_size', '10', 'Upload Max Size (MB)', 'upload', 'Maximum file upload size'),
|
|
('c_004', 'upload_allowed_types', 'jpg,jpeg,png,gif,xlsx,xls,csv', 'Allowed Upload Types', 'upload', 'Allowed file extensions');
|