-- ============================================ -- 代金券模块建表脚本 -- ============================================ -- 代金券模板表 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);