-- ============================================ -- 核心支付流程 - 数据库脚本 -- 创建日期: 2026-01-23 -- 数据库: peixue -- 说明: 支持钱包、次卡、套餐、优惠券、地址关联 -- ============================================ USE peixue; -- ============================================ -- 1. 扩展订单表 (order) -- ============================================ -- 支付方式相关字段 ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `payment_method` VARCHAR(50) COMMENT '支付方式:wallet,timecard,package,wechat,mixed' AFTER `payment_status`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `wallet_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '钱包支付金额' AFTER `payment_method`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `timecard_id` BIGINT COMMENT '使用的次卡ID' AFTER `wallet_amount`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `package_id` BIGINT COMMENT '使用的套餐ID' AFTER `timecard_id`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `coupon_id` BIGINT COMMENT '使用的优惠券ID' AFTER `package_id`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `coupon_discount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠券折扣金额' AFTER `coupon_id`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `service_address_id` BIGINT COMMENT '服务地址ID' AFTER `coupon_discount`; -- 金额相关字段 ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `original_amount` DECIMAL(10,2) COMMENT '原价' AFTER `actual_amount`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '总折扣金额' AFTER `original_amount`; -- 结算相关字段 ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `teacher_income` DECIMAL(10,2) DEFAULT 0.00 COMMENT '陪伴员收益' AFTER `discount_amount`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `manager_commission` DECIMAL(10,2) DEFAULT 0.00 COMMENT '管理师提成' AFTER `teacher_income`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `platform_income` DECIMAL(10,2) DEFAULT 0.00 COMMENT '平台收益' AFTER `manager_commission`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `settlement_status` TINYINT DEFAULT 0 COMMENT '结算状态:0-未结算,1-已结算' AFTER `platform_income`; ALTER TABLE `order` ADD COLUMN IF NOT EXISTS `settlement_time` DATETIME COMMENT '结算时间' AFTER `settlement_status`; -- 添加索引 ALTER TABLE `order` ADD INDEX IF NOT EXISTS `idx_timecard_id` (`timecard_id`); ALTER TABLE `order` ADD INDEX IF NOT EXISTS `idx_package_id` (`package_id`); ALTER TABLE `order` ADD INDEX IF NOT EXISTS `idx_coupon_id` (`coupon_id`); ALTER TABLE `order` ADD INDEX IF NOT EXISTS `idx_service_address_id` (`service_address_id`); ALTER TABLE `order` ADD INDEX IF NOT EXISTS `idx_settlement_status` (`settlement_status`); -- ============================================ -- 2. 创建钱包表 (wallet) -- ============================================ CREATE TABLE IF NOT EXISTS `wallet` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `balance` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '余额', `frozen_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '冻结金额', `total_recharge` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计充值', `total_consume` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计消费', `total_withdraw` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计提现', `version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包表'; -- ============================================ -- 3. 创建钱包交易记录表 (wallet_transaction) -- ============================================ CREATE TABLE IF NOT EXISTS `wallet_transaction` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `wallet_id` BIGINT NOT NULL COMMENT '钱包ID', `order_id` BIGINT COMMENT '关联订单ID', `transaction_type` VARCHAR(50) NOT NULL COMMENT '交易类型:recharge-充值,consume-消费,refund-退款,withdraw-提现,income-收益', `amount` DECIMAL(10,2) NOT NULL COMMENT '交易金额', `balance_before` DECIMAL(10,2) NOT NULL COMMENT '交易前余额', `balance_after` DECIMAL(10,2) NOT NULL COMMENT '交易后余额', `transaction_no` VARCHAR(100) COMMENT '交易流水号', `payment_channel` VARCHAR(50) COMMENT '支付渠道:wechat,alipay', `status` TINYINT DEFAULT 1 COMMENT '状态:0-失败,1-成功,2-处理中', `remark` VARCHAR(500) COMMENT '备注', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_wallet_id` (`wallet_id`), KEY `idx_order_id` (`order_id`), KEY `idx_transaction_no` (`transaction_no`), KEY `idx_created_time` (`created_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钱包交易记录表'; -- ============================================ -- 4. 扩展次卡表 (time_card) -- ============================================ -- 检查表是否存在,如不存在则创建 CREATE TABLE IF NOT EXISTS `time_card` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `name` VARCHAR(100) NOT NULL COMMENT '次卡名称', `total_times` INT NOT NULL DEFAULT 0 COMMENT '总次数', `used_times` INT NOT NULL DEFAULT 0 COMMENT '已使用次数', `remaining_times` INT NOT NULL DEFAULT 0 COMMENT '剩余次数', `price` DECIMAL(10,2) NOT NULL COMMENT '价格', `expire_date` DATE COMMENT '过期日期', `status` TINYINT DEFAULT 1 COMMENT '状态:0-已过期,1-使用中,2-已用完', `version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_status` (`status`), KEY `idx_expire_date` (`expire_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='次卡表'; -- 如果表已存在,添加缺失字段 ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `total_times` INT NOT NULL DEFAULT 0 COMMENT '总次数' AFTER `name`; ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `used_times` INT NOT NULL DEFAULT 0 COMMENT '已使用次数' AFTER `total_times`; ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `remaining_times` INT NOT NULL DEFAULT 0 COMMENT '剩余次数' AFTER `used_times`; ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `expire_date` DATE COMMENT '过期日期' AFTER `price`; ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `status` TINYINT DEFAULT 1 COMMENT '状态:0-已过期,1-使用中,2-已用完' AFTER `expire_date`; ALTER TABLE `time_card` ADD COLUMN IF NOT EXISTS `version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号' AFTER `status`; -- 添加索引 ALTER TABLE `time_card` ADD INDEX IF NOT EXISTS `idx_user_id` (`user_id`); ALTER TABLE `time_card` ADD INDEX IF NOT EXISTS `idx_status` (`status`); ALTER TABLE `time_card` ADD INDEX IF NOT EXISTS `idx_expire_date` (`expire_date`); -- ============================================ -- 5. 创建次卡使用记录表 (time_card_usage) -- ============================================ CREATE TABLE IF NOT EXISTS `time_card_usage` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `timecard_id` BIGINT NOT NULL COMMENT '次卡ID', `order_id` BIGINT NOT NULL COMMENT '订单ID', `used_times` INT NOT NULL DEFAULT 1 COMMENT '使用次数', `remaining_times` INT NOT NULL COMMENT '剩余次数', `remark` VARCHAR(500) COMMENT '备注', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_timecard_id` (`timecard_id`), KEY `idx_order_id` (`order_id`), KEY `idx_created_time` (`created_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='次卡使用记录表'; -- ============================================ -- 6. 扩展套餐表 (package) -- ============================================ -- 如果表已存在,添加缺失字段 ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `total_hours` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '总课时' AFTER `name`; ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `used_hours` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '已使用课时' AFTER `total_hours`; ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `remaining_hours` DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '剩余课时' AFTER `used_hours`; ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `expire_date` DATE COMMENT '过期日期' AFTER `price`; ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `status` TINYINT DEFAULT 1 COMMENT '状态:0-已过期,1-使用中,2-已用完' AFTER `expire_date`; ALTER TABLE `package` ADD COLUMN IF NOT EXISTS `version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号' AFTER `status`; -- 添加索引 ALTER TABLE `package` ADD INDEX IF NOT EXISTS `idx_user_id` (`user_id`); ALTER TABLE `package` ADD INDEX IF NOT EXISTS `idx_status` (`status`); ALTER TABLE `package` ADD INDEX IF NOT EXISTS `idx_expire_date` (`expire_date`); -- ============================================ -- 7. 创建优惠券表 (coupon) -- ============================================ CREATE TABLE IF NOT EXISTS `coupon` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` VARCHAR(100) NOT NULL COMMENT '优惠券名称', `type` TINYINT NOT NULL COMMENT '类型:1-满减券,2-折扣券,3-代金券', `discount_type` TINYINT NOT NULL COMMENT '折扣类型:1-金额,2-折扣', `discount_value` DECIMAL(10,2) NOT NULL COMMENT '折扣值(金额或折扣率)', `min_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '最低消费金额', `max_discount` DECIMAL(10,2) COMMENT '最大折扣金额', `total_quantity` INT NOT NULL COMMENT '发行总量', `received_quantity` INT DEFAULT 0 COMMENT '已领取数量', `used_quantity` INT DEFAULT 0 COMMENT '已使用数量', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '结束时间', `status` TINYINT DEFAULT 1 COMMENT '状态:0-停用,1-启用', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_status` (`status`), KEY `idx_start_end_time` (`start_time`, `end_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券表'; -- ============================================ -- 8. 创建用户优惠券表 (user_coupon) -- ============================================ CREATE TABLE IF NOT EXISTS `user_coupon` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `coupon_id` BIGINT NOT NULL COMMENT '优惠券ID', `order_id` BIGINT COMMENT '使用的订单ID', `status` TINYINT DEFAULT 0 COMMENT '状态:0-未使用,1-已使用,2-已过期', `receive_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '领取时间', `use_time` DATETIME COMMENT '使用时间', `expire_time` DATETIME NOT NULL COMMENT '过期时间', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_coupon_id` (`coupon_id`), KEY `idx_order_id` (`order_id`), KEY `idx_status` (`status`), KEY `idx_expire_time` (`expire_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户优惠券表'; -- ============================================ -- 9. 创建用户地址表 (user_address) -- ============================================ CREATE TABLE IF NOT EXISTS `user_address` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID', `contact_name` VARCHAR(50) NOT NULL COMMENT '联系人姓名', `contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话', `province` VARCHAR(50) COMMENT '省份', `city` VARCHAR(50) COMMENT '城市', `district` VARCHAR(50) COMMENT '区县', `address` VARCHAR(200) NOT NULL COMMENT '详细地址', `address_tag` VARCHAR(20) COMMENT '地址标签:家,公司,学校', `longitude` DECIMAL(10,6) COMMENT '经度', `latitude` DECIMAL(10,6) COMMENT '纬度', `is_default` TINYINT DEFAULT 0 COMMENT '是否默认地址:0-否,1-是', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_is_default` (`is_default`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户地址表'; -- ============================================ -- 10. 扩展陪伴员收益表 (teacher_salary) -- ============================================ ALTER TABLE `teacher_salary` ADD COLUMN IF NOT EXISTS `order_id` BIGINT COMMENT '订单ID' AFTER `teacher_id`; ALTER TABLE `teacher_salary` ADD COLUMN IF NOT EXISTS `settlement_type` VARCHAR(50) DEFAULT 'order' COMMENT '结算类型:order-订单结算,manual-手动结算' AFTER `order_id`; ALTER TABLE `teacher_salary` ADD COLUMN IF NOT EXISTS `income_ratio` DECIMAL(5,2) DEFAULT 70.00 COMMENT '收益比例(%)' AFTER `settlement_type`; -- 添加索引 ALTER TABLE `teacher_salary` ADD INDEX IF NOT EXISTS `idx_order_id` (`order_id`); ALTER TABLE `teacher_salary` ADD INDEX IF NOT EXISTS `idx_settlement_type` (`settlement_type`); -- ============================================ -- 11. 创建管理师提成表 (manager_commission) -- ============================================ CREATE TABLE IF NOT EXISTS `manager_commission` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `manager_id` BIGINT NOT NULL COMMENT '管理师ID', `order_id` BIGINT NOT NULL COMMENT '订单ID', `order_amount` DECIMAL(10,2) NOT NULL COMMENT '订单金额', `commission_ratio` DECIMAL(5,2) NOT NULL DEFAULT 10.00 COMMENT '提成比例(%)', `commission_amount` DECIMAL(10,2) NOT NULL COMMENT '提成金额', `status` TINYINT DEFAULT 0 COMMENT '状态:0-未结算,1-已结算', `settlement_time` DATETIME COMMENT '结算时间', `remark` VARCHAR(500) COMMENT '备注', `tenant_id` BIGINT COMMENT '租户ID', `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', PRIMARY KEY (`id`), KEY `idx_manager_id` (`manager_id`), KEY `idx_order_id` (`order_id`), KEY `idx_status` (`status`), KEY `idx_created_time` (`created_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理师提成表'; -- ============================================ -- 完成提示 -- ============================================ SELECT '✅ 核心支付流程数据库脚本执行完成!' AS message; SELECT '📊 请检查以下表是否创建/更新成功:' AS message; SELECT '1. order - 订单表(已扩展)' AS message; SELECT '2. wallet - 钱包表' AS message; SELECT '3. wallet_transaction - 钱包交易记录表' AS message; SELECT '4. time_card - 次卡表(已扩展)' AS message; SELECT '5. time_card_usage - 次卡使用记录表' AS message; SELECT '6. package - 套餐表(已扩展)' AS message; SELECT '7. package_usage - 套餐使用记录表(已存在)' AS message; SELECT '8. coupon - 优惠券表' AS message; SELECT '9. user_coupon - 用户优惠券表' AS message; SELECT '10. user_address - 用户地址表' AS message; SELECT '11. teacher_salary - 陪伴员收益表(已扩展)' AS message; SELECT '12. manager_commission - 管理师提成表' AS message;