peixue-dev/Archive/peidu-temp-files/sql/payment_system_database_2026-01-23.sql

304 lines
17 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- 核心支付流程 - 数据库脚本
-- 创建日期: 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;