d7a6b7cc94
- 修改 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;
|
|
|