voucher/sql/tables.sql
yumoqing 2c56aa904a feat: 代金券模块初始实现
- 4张表: voucher_template, voucher_rule, voucher_instance, voucher_usage_log
- 可配置规则引擎: registry + validators + engine
- 8种内置规则: min_amount, max_amount, applicable_product_type,
  applicable_product, exclude_product, max_usage_count, valid_period, user_level
- CRUD定义 + API接口 + 前端页面
- SQL建表脚本 + RBAC权限配置
- 一次性使用,不找零
2026-05-29 00:28:01 +08:00

108 lines
5.6 KiB
SQL

-- ============================================
-- 代金券模块建表脚本
-- ============================================
-- 代金券模板表
CREATE TABLE IF NOT EXISTS voucher_template (
id VARCHAR(32) NOT NULL COMMENT '主键ID',
name VARCHAR(64) NOT NULL COMMENT '模板名称',
code VARCHAR(32) NOT NULL COMMENT '模板编码',
face_value DECIMAL(10,2) NOT NULL COMMENT '面值',
total_count INT NOT NULL DEFAULT 0 COMMENT '总发行量',
issued_count INT NOT NULL DEFAULT 0 COMMENT '已发放量',
valid_days INT NOT NULL DEFAULT 30 COMMENT '有效期天数',
status VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT '状态: draft/active/inactive',
remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
creator VARCHAR(32) DEFAULT NULL COMMENT '创建人',
updater VARCHAR(32) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (id),
UNIQUE KEY idx_template_code (code),
KEY idx_template_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代金券模板';
-- 代金券规则表
CREATE TABLE IF NOT EXISTS voucher_rule (
id VARCHAR(32) NOT NULL COMMENT '主键ID',
template_id VARCHAR(32) NOT NULL COMMENT '模板ID',
rule_type VARCHAR(32) NOT NULL COMMENT '规则类型',
rule_config TEXT NOT NULL COMMENT '规则配置(JSON)',
enabled SMALLINT NOT NULL DEFAULT 1 COMMENT '是否启用',
sort_order INT NOT NULL DEFAULT 0 COMMENT '执行顺序',
remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
KEY idx_rule_template (template_id),
KEY idx_rule_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代金券规则定义';
-- 代金券实例表
CREATE TABLE IF NOT EXISTS voucher_instance (
id VARCHAR(32) NOT NULL COMMENT '主键ID',
template_id VARCHAR(32) NOT NULL COMMENT '模板ID',
customer_id VARCHAR(32) NOT NULL COMMENT '客户ID',
code VARCHAR(64) NOT NULL COMMENT '唯一券码',
status VARCHAR(16) NOT NULL DEFAULT 'unused' COMMENT '状态: unused/used/expired',
face_value DECIMAL(10,2) NOT NULL COMMENT '面值',
actual_deducted DECIMAL(10,2) DEFAULT NULL COMMENT '实际抵扣金额',
valid_from DATETIME NOT NULL COMMENT '生效时间',
valid_to DATETIME NOT NULL COMMENT '过期时间',
issued_at DATETIME NOT NULL COMMENT '发放时间',
used_at DATETIME DEFAULT NULL COMMENT '使用时间',
order_id VARCHAR(64) DEFAULT NULL COMMENT '使用的订单ID',
source VARCHAR(32) DEFAULT NULL COMMENT '来源',
remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY idx_instance_code (code),
KEY idx_instance_customer (customer_id),
KEY idx_instance_template (template_id),
KEY idx_instance_status (status),
KEY idx_instance_valid_to (valid_to)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代金券实例(一次性使用)';
-- 代金券使用流水表
CREATE TABLE IF NOT EXISTS voucher_usage_log (
id VARCHAR(32) NOT NULL COMMENT '主键ID',
instance_id VARCHAR(32) NOT NULL COMMENT '券实例ID',
customer_id VARCHAR(32) NOT NULL COMMENT '客户ID',
order_id VARCHAR(64) NOT NULL COMMENT '订单/消费ID',
face_value DECIMAL(10,2) NOT NULL COMMENT '券面值',
deducted_amount DECIMAL(10,2) NOT NULL COMMENT '实际抵扣金额',
used_at DATETIME NOT NULL COMMENT '使用时间',
used_by VARCHAR(32) DEFAULT NULL COMMENT '操作人',
product_type VARCHAR(32) DEFAULT NULL COMMENT '产品类型',
product_name VARCHAR(64) DEFAULT NULL COMMENT '产品名称',
PRIMARY KEY (id),
KEY idx_log_instance (instance_id),
KEY idx_log_customer (customer_id),
KEY idx_log_order (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代金券使用流水';
-- 初始化编码数据
INSERT INTO appcodes (id, name, hierarchy_flg) VALUES
('voucher_template_status', '代金券模板状态', '0'),
('voucher_instance_status', '代金券实例状态', '0'),
('voucher_rule_type', '代金券规则类型', '0')
ON DUPLICATE KEY UPDATE name=VALUES(name);
INSERT INTO appcodes_kv (id, parentid, k, v) VALUES
('vts_draft', 'voucher_template_status', 'draft', '草稿'),
('vts_active', 'voucher_template_status', 'active', '启用'),
('vts_inactive', 'voucher_template_status', 'inactive', '停用'),
('vis_unused', 'voucher_instance_status', 'unused', '未使用'),
('vis_used', 'voucher_instance_status', 'used', '已使用'),
('vis_expired', 'voucher_instance_status', 'expired', '已过期'),
('vrt_min', 'voucher_rule_type', 'min_amount', '最低消费'),
('vrt_max', 'voucher_rule_type', 'max_amount', '最高消费'),
('vrt_ptype', 'voucher_rule_type', 'applicable_product_type', '限定产品类型'),
('vrt_prod', 'voucher_rule_type', 'applicable_product', '限定特定产品'),
('vrt_exprod', 'voucher_rule_type', 'exclude_product', '排除特定产品'),
('vrt_usage', 'voucher_rule_type', 'max_usage_count', '最大使用次数'),
('vrt_period', 'voucher_rule_type', 'valid_period', '有效期'),
('vrt_level', 'voucher_rule_type', 'user_level', '用户等级')
ON DUPLICATE KEY UPDATE v=VALUES(v);