- 修改 GltUserTicketReleaseParam 中 id 和 userTicketId 类型从 Long 改为 Integer - 移除 ShopOrderServiceImpl 中的 shopTicketBizService 依赖注入 - 注释掉订单支付成功后的套票发放调用 - 添加套票功能开发计划文档,定义套票模板、用户套票账户、释放计划和变更流水的核心概念 - 设计并创建套票相关数据库表,包括套票模板表、用户套票账户表、释放计划表和变更流水表
122 lines
3.8 KiB
SQL
122 lines
3.8 KiB
SQL
-- 套票(冻结/可用、分期释放)相关表
|
||
-- 说明:项目使用了 MyBatis-Plus 的 tenant 拦截;表内显式保留 tenant_id 字段并建议建立联合唯一索引。
|
||
|
||
-- 1) 套票模板(按商品配置)
|
||
CREATE TABLE IF NOT EXISTS shop_ticket_template (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
goods_id INT NOT NULL,
|
||
name VARCHAR(100) NOT NULL,
|
||
|
||
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||
unit_name VARCHAR(20) NOT NULL DEFAULT '桶',
|
||
|
||
-- 起售/起送
|
||
min_buy_qty INT NOT NULL DEFAULT 1,
|
||
start_send_qty INT NOT NULL DEFAULT 1,
|
||
|
||
-- 买赠:买1送4 => gift_multiplier=4
|
||
gift_multiplier INT NOT NULL DEFAULT 0,
|
||
-- 是否把购买量也计入套票总量(默认仅计入赠送量)
|
||
include_buy_qty TINYINT(1) NOT NULL DEFAULT 0,
|
||
|
||
-- 释放规则:二选一
|
||
-- A) 每期释放数量(默认每月释放10)
|
||
monthly_release_qty INT NOT NULL DEFAULT 10,
|
||
-- B) 总共释放多少期(若配置>0,则按期数平均分摊)
|
||
release_periods INT NULL,
|
||
|
||
-- 首期释放时机:0=支付成功当刻;1=下个月同日
|
||
first_release_mode INT NOT NULL DEFAULT 0,
|
||
|
||
comments VARCHAR(255) NULL,
|
||
sort_number INT NOT NULL DEFAULT 0,
|
||
user_id INT NULL,
|
||
|
||
deleted INT NOT NULL DEFAULT 0,
|
||
tenant_id INT NOT NULL,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
|
||
UNIQUE KEY uk_ticket_template_tenant_goods (tenant_id, goods_id),
|
||
KEY idx_ticket_template_tenant (tenant_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
-- 2) 用户套票账户(一次购买通常生成一条)
|
||
CREATE TABLE IF NOT EXISTS shop_user_ticket (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
template_id INT NOT NULL,
|
||
goods_id INT NOT NULL,
|
||
|
||
user_id INT NOT NULL,
|
||
order_id INT NULL,
|
||
order_no VARCHAR(64) NULL,
|
||
order_goods_id INT NULL,
|
||
|
||
total_qty INT NOT NULL DEFAULT 0,
|
||
available_qty INT NOT NULL DEFAULT 0,
|
||
frozen_qty INT NOT NULL DEFAULT 0,
|
||
used_qty INT NOT NULL DEFAULT 0,
|
||
released_qty INT NOT NULL DEFAULT 0,
|
||
|
||
status INT NOT NULL DEFAULT 0,
|
||
|
||
deleted INT NOT NULL DEFAULT 0,
|
||
tenant_id INT NOT NULL,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
|
||
KEY idx_user_ticket_user (tenant_id, user_id),
|
||
KEY idx_user_ticket_order (tenant_id, order_no),
|
||
UNIQUE KEY uk_user_ticket_order_goods (tenant_id, template_id, order_no, order_goods_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
-- 3) 释放计划/释放记录(每期一条,幂等执行)
|
||
CREATE TABLE IF NOT EXISTS shop_user_ticket_release (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
user_ticket_id BIGINT NOT NULL,
|
||
user_id INT NOT NULL,
|
||
period_no INT NOT NULL,
|
||
|
||
release_qty INT NOT NULL,
|
||
release_time DATETIME NOT NULL,
|
||
|
||
status INT NOT NULL DEFAULT 0, -- 0待释放 1已释放 2作废
|
||
released_time DATETIME NULL,
|
||
|
||
tenant_id INT NOT NULL,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
|
||
UNIQUE KEY uk_ticket_release_period (tenant_id, user_ticket_id, period_no),
|
||
KEY idx_ticket_release_due (status, release_time),
|
||
KEY idx_ticket_release_user (tenant_id, user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|
||
-- 4) 套票变更流水(发放/释放/消费/回滚等)
|
||
CREATE TABLE IF NOT EXISTS shop_user_ticket_log (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
user_ticket_id BIGINT NOT NULL,
|
||
user_id INT NOT NULL,
|
||
|
||
change_type INT NOT NULL, -- 10发放 20释放 30消费 40回滚/退款
|
||
change_available INT NOT NULL DEFAULT 0,
|
||
change_frozen INT NOT NULL DEFAULT 0,
|
||
change_used INT NOT NULL DEFAULT 0,
|
||
|
||
available_after INT NOT NULL DEFAULT 0,
|
||
frozen_after INT NOT NULL DEFAULT 0,
|
||
used_after INT NOT NULL DEFAULT 0,
|
||
|
||
order_id INT NULL,
|
||
order_no VARCHAR(64) NULL,
|
||
remark VARCHAR(255) NULL,
|
||
|
||
tenant_id INT NOT NULL,
|
||
create_time DATETIME NULL,
|
||
update_time DATETIME NULL,
|
||
|
||
KEY idx_ticket_log_user (tenant_id, user_id),
|
||
KEY idx_ticket_log_ticket (tenant_id, user_ticket_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
|