first commit

This commit is contained in:
2026-09-21 17:36:33 +08:00
commit a29a3979d7
69 changed files with 4337 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
-- 创建数据库
CREATE DATABASE IF NOT EXISTS accounting_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE accounting_db;
-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
`password` VARCHAR(255) NOT NULL COMMENT '密码(加密)',
`nickname` VARCHAR(50) COMMENT '昵称',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 分类表
CREATE TABLE IF NOT EXISTS `category` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`user_id` BIGINT COMMENT '用户ID(NULL表示系统预设分类)',
`name` VARCHAR(50) NOT NULL COMMENT '分类名称',
`icon` VARCHAR(100) COMMENT '图标',
`type` TINYINT NOT NULL COMMENT '类型:1-支出,2-收入',
`sort_order` INT DEFAULT 0 COMMENT '排序顺序',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分类表';
-- 账单表
CREATE TABLE IF NOT EXISTS `bill` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '账单ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`account_id` BIGINT COMMENT '账户ID',
`category_id` BIGINT NOT NULL COMMENT '分类ID',
`amount` DECIMAL(10,2) NOT NULL COMMENT '金额',
`description` VARCHAR(255) COMMENT '描述',
`bill_date` DATE NOT NULL COMMENT '账单日期',
`image_url` VARCHAR(500) COMMENT '图片URL',
`type` TINYINT COMMENT '类型:1-支出,2-收入',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_account_id` (`account_id`),
INDEX `idx_category_id` (`category_id`),
INDEX `idx_bill_date` (`bill_date`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`account_id`) REFERENCES `account` (`id`) ON DELETE RESTRICT,
FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='账单表';
-- 账户表
CREATE TABLE IF NOT EXISTS `account` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '账户ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`name` VARCHAR(50) NOT NULL DEFAULT '默认账户' COMMENT '账户名称',
`initial_balance` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '初始余额',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_user_id` (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
UNIQUE KEY `uk_user_account` (`user_id`) COMMENT '每个用户只有一个账户'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='账户表';
-- 预算表
CREATE TABLE IF NOT EXISTS `budget` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '预算ID',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`year` INT NOT NULL COMMENT '年份',
`month` INT NOT NULL COMMENT '月份(1-12)',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '预算金额',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
INDEX `idx_user_id` (`user_id`),
INDEX `idx_year_month` (`year`, `month`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE,
UNIQUE KEY `uk_user_year_month` (`user_id`, `year`, `month`) COMMENT '每个用户每个月只有一个预算'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预算表';
-- OCR记录表
CREATE TABLE IF NOT EXISTS `ocr_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'OCR记录ID',
`bill_id` BIGINT COMMENT '账单ID(识别成功后关联)',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`image_url` VARCHAR(500) NOT NULL COMMENT '图片URL',
`ocr_result` TEXT COMMENT 'OCR识别结果(JSON格式)',
`parsed_amount` DECIMAL(10,2) COMMENT '解析出的金额',
`parsed_merchant` VARCHAR(255) COMMENT '解析出的商户名称',
`parsed_date` DATE COMMENT '解析出的日期',
`confidence` DECIMAL(5,2) COMMENT '置信度',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
INDEX `idx_bill_id` (`bill_id`),
INDEX `idx_user_id` (`user_id`),
FOREIGN KEY (`bill_id`) REFERENCES `bill` (`id`) ON DELETE SET NULL,
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OCR记录表';
-- 黄金价格记录表
CREATE TABLE IF NOT EXISTS `gold_price` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`gold_id` VARCHAR(20) NOT NULL COMMENT '黄金品种ID',
`gold_name` VARCHAR(50) COMMENT '黄金品种名称',
`price` DECIMAL(10,2) NOT NULL COMMENT '当前价格',
`price_change` DECIMAL(10,2) COMMENT '涨跌额',
`price_change_percent` DECIMAL(5,2) COMMENT '涨跌百分比',
`high_price` DECIMAL(10,2) COMMENT '最高价',
`low_price` DECIMAL(10,2) COMMENT '最低价',
`open_price` DECIMAL(10,2) COMMENT '开盘价',
`yesterday_close` DECIMAL(10,2) COMMENT '昨收价',
`update_time` DATETIME NOT NULL COMMENT 'API返回的更新时间',
`price_date` DATE NOT NULL COMMENT '价格日期',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (`id`),
INDEX `idx_gold_id` (`gold_id`),
INDEX `idx_price_date` (`price_date`),
INDEX `idx_gold_date` (`gold_id`, `price_date`) COMMENT '索引:用于按日期查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='黄金价格记录表';
-- 插入预设分类(支出)
INSERT INTO `category` (`user_id`, `name`, `icon`, `type`, `sort_order`) VALUES
(NULL, '餐饮', '🍔', 1, 1),
(NULL, '交通', '🚗', 1, 2),
(NULL, '购物', '🛍️', 1, 3),
(NULL, '娱乐', '🎬', 1, 4),
(NULL, '医疗', '🏥', 1, 5),
(NULL, '教育', '📚', 1, 6),
(NULL, '住房', '🏠', 1, 7),
(NULL, '水电', '💡', 1, 8),
(NULL, '通讯', '📱', 1, 9),
(NULL, '其他', '📦', 1, 10);
-- 插入预设分类(收入)
INSERT INTO `category` (`user_id`, `name`, `icon`, `type`, `sort_order`) VALUES
(NULL, '工资', '💰', 2, 1),
(NULL, '奖金', '🎁', 2, 2),
(NULL, '投资', '📈', 2, 3),
(NULL, '兼职', '💼', 2, 4),
(NULL, '其他', '📦', 2, 5);