CREATE DATABASE IF NOT EXISTS wy_order DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE wy_order; -- 订单表(支持音乐平台多种商品类型) CREATE TABLE `orders` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号,格式:YYMMDDHHMMSS+6位随机数', `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `product_id` INT NULL COMMENT '关联本服务的id', `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额', `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额', `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额', `order_type` TINYINT NOT NULL COMMENT '订单类型:1-电子类 2-会员类,3-推送类,4-周边类 5 实体类专辑 ', `status` TINYINT NOT NULL COMMENT '状态:0-待支付,1-已支付,2-已取消,3-已退款,4-已完成,5-配送中', `pay_time` DATETIME COMMENT '支付时间', `cancel_time` DATETIME COMMENT '取消时间', `finish_time` DATETIME COMMENT '完成时间', `receive_name` VARCHAR(100) COMMENT '收货人姓名(周边类商品使用)', `receive_phone` VARCHAR(20) COMMENT '收货人电话(周边类商品使用)', `receive_address` TEXT COMMENT '收货地址(周边类商品使用)', `note` TEXT COMMENT '订单备注', `shipping_fee` DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费(周边类商品使用)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_order_no` (`order_no`), INDEX `idx_user_id` (`user_id`), INDEX `idx_status` (`status`), INDEX `idx_create_time` (`create_time`), INDEX `idx_order_type` (`order_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- 电子类订单项表(电子专辑、电子歌曲,绑定歌手,根据类型绑定歌曲和专辑) CREATE TABLE `order_item_digital` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_id` INT NULL COMMENT '关联本服务的product.id', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照', `product_cover` VARCHAR(500) COMMENT '商品封面快照', `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价', `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `item_type` TINYINT NOT NULL COMMENT '电子商品类型:1-电子专辑,2-电子歌曲', `artist_id` INT COMMENT '关联artist服务的artist.id', `album_id` INT COMMENT '关联content服务的album.id(仅专辑使用)', `song_id` INT COMMENT '关联content服务的song.id(仅歌曲使用)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, INDEX `idx_order_id` (`order_id`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_album_id` (`album_id`), INDEX `idx_song_id` (`song_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='电子类订单项表'; -- 会员类订单项表(VIP会员,记录开始和到期时间) CREATE TABLE `order_item_vip` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照', `product_cover` VARCHAR(500) COMMENT '商品封面快照', `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价', `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `vip_type` TINYINT NOT NULL COMMENT 'VIP类型:1-普通VIP,2-超级VIP,3-黑胶VIP', `duration_days` INT NOT NULL COMMENT 'VIP时长(天)', `vip_start_time` DATETIME COMMENT 'VIP开始时间', `vip_end_time` DATETIME COMMENT 'VIP结束时间', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, INDEX `idx_order_id` (`order_id`), INDEX `idx_vip_start_time` (`vip_start_time`), INDEX `idx_vip_end_time` (`vip_end_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员类订单项表'; -- 推送类订单项表(推送流量,记录推送日期) CREATE TABLE `order_item_push` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_id` INT NULL COMMENT '关联本服务的id', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `push_amount` INT NOT NULL COMMENT '推送流量数量', `push_date` DATE COMMENT '推送执行日期', `push_status` TINYINT DEFAULT 0 COMMENT '推送状态:0-待推送,1-已推送,2-推送失败', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, INDEX `idx_order_id` (`order_id`), INDEX `idx_push_date` (`push_date`), INDEX `idx_push_status` (`push_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推送类订单项表'; -- 周边类订单项表(网易云主题周边、专辑周边、歌手周边、其他周边) CREATE TABLE `order_item_peripheral` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `product_id` INT NULL COMMENT '关联本服务的id', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照', `product_cover` VARCHAR(500) COMMENT '商品封面快照', `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价', `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量', `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `peripheral_type` TINYINT NOT NULL COMMENT '周边类型:1-网易云主题周边,2-专辑周边,3-歌手周边,4-其他周边', `artist_id` INT COMMENT '关联artist服务的artist.id(歌手周边和专辑周边使用)', `album_id` INT COMMENT '关联content服务的album.id(专辑周边使用)', `shipping_status` TINYINT DEFAULT 0 COMMENT '物流状态:0-待发货,1-已发货,2-已签收,3-退货中,4-已退货', `tracking_number` VARCHAR(100) COMMENT '物流单号', `shipping_company` VARCHAR(50) COMMENT '物流公司', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE, INDEX `idx_order_id` (`order_id`), INDEX `idx_artist_id` (`artist_id`), INDEX `idx_album_id` (`album_id`), INDEX `idx_shipping_status` (`shipping_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周边类订单项表'; -- ------------------------------ -- 实体专辑库存表(关联content服务的album.id) -- ------------------------------ CREATE TABLE `physical_album_stock` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `album_id` INT NOT NULL COMMENT '关联content服务的album.id', `sku_code` VARCHAR(50) NOT NULL COMMENT 'SKU编码,唯一标识实体专辑的规格', `edition_type` VARCHAR(50) COMMENT '版本类型:如标准版、豪华版、限量版、签名版等', `format_type` VARCHAR(50) COMMENT '格式类型:CD、黑胶、磁带、数字专辑码等', `specifications` VARCHAR(500) COMMENT '详细规格描述,如尺寸、材质、包装等', `original_price` DECIMAL(10,2) COMMENT '原价', `current_price` DECIMAL(10,2) COMMENT '当前售价', `stock_quantity` INT NOT NULL DEFAULT 0 COMMENT '库存数量', `weight` DECIMAL(5,2) COMMENT '商品重量(kg)', `size_info` VARCHAR(200) COMMENT '商品尺寸信息', `sale_status` TINYINT DEFAULT 1 COMMENT '销售状态:0-停止销售,1-正常销售,2-限量销售,3-预售', `release_date` DATE COMMENT '实体专辑发行日期', `preorder_start_time` DATETIME COMMENT '预售开始时间', `preorder_end_time` DATETIME COMMENT '预售结束时间', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_sku_code` (`sku_code`), INDEX `idx_album_id` (`album_id`), INDEX `idx_sku_code` (`sku_code`), INDEX `idx_sale_status` (`sale_status`), INDEX `idx_stock_quantity` (`stock_quantity`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='实体专辑库存表'; -- 实体商品表(通用版:包含网易云主题周边、专辑周边、歌手周边、其他周边等) CREATE TABLE `physical_product` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL COMMENT '商品名称', `cover_url` VARCHAR(500) COMMENT '商品封面URL', `description` TEXT COMMENT '商品描述', `price` DECIMAL(10,2) NOT NULL COMMENT '售价', `original_price` DECIMAL(10,2) COMMENT '原价', `stock` INT NOT NULL DEFAULT 0 COMMENT '库存数量', `product_type` TINYINT NOT NULL COMMENT '实体商品类型:1-网易云主题周边,2-专辑周边,3-歌手周边,4-其他周边', `publisher_id` INT COMMENT '发布者ID(关联对应服务的发布者表:如artist.id/up主id/品牌id等)', `content_id` INT COMMENT '关联内容ID(如album.id/视频id/文章id等,根据publisher_type匹配)', `specifications` VARCHAR(500) COMMENT '商品规格,如尺寸、材质、颜色等', `weight` DECIMAL(5,2) COMMENT '商品重量(kg)', `size_info` VARCHAR(200) COMMENT '商品尺寸信息', `status` TINYINT DEFAULT 1 COMMENT '状态:0-下架,1-上架', `sales_count` INT DEFAULT 0 COMMENT '销量', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_product_type` (`product_type`), INDEX `idx_status` (`status`), INDEX `idx_content_id` (`content_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='实体商品表(通用版)'; -- ------------------------------ -- 5. 用户余额表(关联auth服务的user.id) -- ------------------------------ CREATE TABLE `user_balance` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `balance` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '用户余额', `frozen_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '冻结金额', `available_balance` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '可用余额(balance - frozen_amount)', `last_recharge_time` DATETIME COMMENT '最后充值时间', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_user_id` (`user_id`), INDEX `idx_balance` (`balance`), INDEX `idx_available_balance` (`available_balance`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户余额表'; -- ------------------------------ -- 6. 用户充值记录表(关联auth服务的user.id) -- ------------------------------ CREATE TABLE `recharge_record` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `order_no` VARCHAR(50) NOT NULL COMMENT '充值订单号', `recharge_amount` DECIMAL(10,2) NOT NULL COMMENT '充值金额', `actual_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '实际到账金额', `gift_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '赠送金额', `pay_type` TINYINT NOT NULL COMMENT '支付方式:1-微信,2-支付宝,3-银行卡', `status` TINYINT NOT NULL COMMENT '状态:0-待支付,1-充值成功,2-充值失败,3-已退款', `pay_time` DATETIME COMMENT '支付时间', `complete_time` DATETIME COMMENT '完成时间', `channel_order_no` VARCHAR(100) COMMENT '第三方支付渠道订单号', `remark` VARCHAR(255) COMMENT '备注', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_order_no` (`order_no`), INDEX `idx_user_id` (`user_id`), INDEX `idx_status` (`status`), INDEX `idx_create_time` (`create_time`), INDEX `idx_pay_time` (`pay_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户充值记录表'; -- ------------------------------ -- 7. 用户消费记录表(关联auth服务的user.id和order表) -- ------------------------------ CREATE TABLE `consume_record` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号', `consume_amount` DECIMAL(10,2) NOT NULL COMMENT '消费金额', `payment_method` TINYINT NOT NULL COMMENT '支付方式:0-余额支付,1-微信,2-支付宝,3-银行卡', `balance_used` DECIMAL(10,2) DEFAULT 0.00 COMMENT '使用余额支付金额', `balance_after` DECIMAL(10,2) NOT NULL COMMENT '消费后余额', `consume_time` DATETIME NOT NULL COMMENT '消费时间', `remark` VARCHAR(255) COMMENT '备注', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', UNIQUE KEY `uk_order_no` (`order_no`), INDEX `idx_user_id` (`user_id`), INDEX `idx_order_id` (`order_id`), INDEX `idx_consume_time` (`consume_time`), INDEX `idx_payment_method` (`payment_method`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户消费记录表'; -- ------------------------------ -- 8. 退款记录表(关联order表) -- ------------------------------ CREATE TABLE `refund_record` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id', `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号', `user_id` INT NOT NULL COMMENT '关联auth服务的user.id', `refund_amount` DECIMAL(10,2) NOT NULL COMMENT '退款金额', `refund_reason` VARCHAR(255) NOT NULL COMMENT '退款原因', `refund_type` TINYINT NOT NULL COMMENT '退款类型:1-全额退款,2-部分退款', `status` TINYINT NOT NULL COMMENT '状态:1-申请中,2-同意退款,3-拒绝退款,4-已退款', `apply_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间', `process_time` DATETIME COMMENT '处理时间', `refund_channel` TINYINT COMMENT '退款渠道:1-原路退回,2-退回余额', `admin_id` INT COMMENT '处理管理员ID', `remark` TEXT COMMENT '处理备注', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_order_id` (`order_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_status` (`status`), INDEX `idx_apply_time` (`apply_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退款记录表';