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='退款记录表';
