0e42f0e417
- 项目目录结构:backend/ deploy/ schema/ migrations/ - 数据库 Schema:所有建表 SQL,含 hotel_id 多租户隔离 - Go 后端:config、model、handler、service、middleware、router - 认证:账号密码登录 + JWT(Access + Refresh Token) - 许可证:HMAC-SHA256 激活码生成 + 设备绑定验证 - 业务模块:商品、仓库、往来单位、入库、出库、库存、盘点 - 库存事务:入库/出库审核时原子更新库存 + 流水记录 - 数据导入:Excel/CSV 批量导入商品、往来单位 - Docker Compose:本地 MySQL + Adminer Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
72 lines
3.3 KiB
SQL
72 lines
3.3 KiB
SQL
CREATE TABLE IF NOT EXISTS `product_categories` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`hotel_id` BIGINT UNSIGNED NOT NULL,
|
|
`name` VARCHAR(100) NOT NULL,
|
|
`parent_id` BIGINT UNSIGNED DEFAULT NULL,
|
|
`sort_order` INT NOT NULL DEFAULT 0,
|
|
`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`),
|
|
KEY `idx_hotel_id` (`hotel_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `products` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`hotel_id` BIGINT UNSIGNED NOT NULL,
|
|
`code` VARCHAR(50) DEFAULT NULL,
|
|
`barcode` VARCHAR(100) DEFAULT NULL,
|
|
`name` VARCHAR(200) NOT NULL,
|
|
`series` VARCHAR(100) DEFAULT NULL,
|
|
`spec` VARCHAR(100) DEFAULT NULL,
|
|
`unit` VARCHAR(20) DEFAULT NULL,
|
|
`category_id` BIGINT UNSIGNED DEFAULT NULL,
|
|
`brand` VARCHAR(100) DEFAULT NULL,
|
|
`purchase_price` DECIMAL(12,2) DEFAULT NULL,
|
|
`sale_price` DECIMAL(12,2) DEFAULT NULL,
|
|
`min_stock` INT DEFAULT 0,
|
|
`custom_fields` JSON DEFAULT NULL,
|
|
`remark` VARCHAR(500) DEFAULT NULL,
|
|
`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`),
|
|
KEY `idx_hotel_id` (`hotel_id`),
|
|
FULLTEXT KEY `ft_name` (`name`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `warehouses` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`hotel_id` BIGINT UNSIGNED NOT NULL,
|
|
`name` VARCHAR(100) NOT NULL,
|
|
`location` VARCHAR(200) DEFAULT NULL,
|
|
`is_default` TINYINT(1) NOT NULL DEFAULT 0,
|
|
`custom_fields` JSON DEFAULT NULL,
|
|
`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`),
|
|
KEY `idx_hotel_id` (`hotel_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE IF NOT EXISTS `partners` (
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`hotel_id` BIGINT UNSIGNED NOT NULL,
|
|
`code` VARCHAR(50) DEFAULT NULL,
|
|
`name` VARCHAR(200) NOT NULL,
|
|
`type` SET('supplier','customer') NOT NULL DEFAULT 'supplier',
|
|
`contact` VARCHAR(50) DEFAULT NULL,
|
|
`phone` VARCHAR(30) DEFAULT NULL,
|
|
`address` VARCHAR(255) DEFAULT NULL,
|
|
`bank_account` VARCHAR(100) DEFAULT NULL,
|
|
`credit_limit` DECIMAL(12,2) DEFAULT NULL,
|
|
`balance` DECIMAL(12,2) NOT NULL DEFAULT 0,
|
|
`custom_fields` JSON DEFAULT NULL,
|
|
`remark` VARCHAR(500) DEFAULT NULL,
|
|
`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`),
|
|
KEY `idx_hotel_id` (`hotel_id`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|