yeg
2026-09-14 564980d1c1b98692e21fea66c05c95072c1bc987
fix(db): 补建家属卡申请与商户权益规则两张漏建的迁移表

这两张表一直被代码使用,但迁移里从来没建过——当年是直接在开发库里手建的,于是任何按迁移全新建的库都缺表:后台工作台统计和家属卡申请页会 500,酒店权益的兜底分支也会报表不存在。

V141 按开发库实际结构补建 dependent_card_apply(小程序家属卡申请与后台审核的主表);V142 补建 merchant_benefit_rule(开发库里是 0 行,补空表让代码路径不再炸)。
2个文件已添加
77 ■■■■■ 已修改文件
talent-card-server/src/main/resources/db/migration/V141__create_dependent_card_apply.sql 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/resources/db/migration/V142__create_merchant_benefit_rule.sql 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/resources/db/migration/V141__create_dependent_card_apply.sql
New file
@@ -0,0 +1,44 @@
-- 家属卡(附属卡)申请主表。
--
-- 这张表一直在用:人才端小程序走 /api/app/family-cards/applications 提交、查询、驳回后重提、
-- 解绑;后台「家属卡申请」页走 /api/admin/dependent-card-applies 审核,变更留痕写进
-- dependent_card_apply_status_log(那张表 V90 已经建好)。
--
-- 但主表当年是直接在开发库里手建的,迁移里一直没有,于是任何按迁移全新建的库都缺它:
-- 后台工作台统计(待办项里查这张表)和家属卡申请页都会直接 500。
--
-- 这里按开发库里的实际结构补建,让新库与开发库一致。
create table if not exists dependent_card_apply (
    id bigint unsigned not null auto_increment comment '主键',
    apply_no varchar(64) not null comment '申请编号',
    talent_id bigint unsigned not null comment '持卡人ID',
    talent_card_id bigint unsigned default null comment '人才卡ID',
    talent_name varchar(64) not null comment '持卡人姓名',
    talent_mobile varchar(32) not null comment '持卡人手机号',
    talent_card_no varchar(64) default null comment '人才卡号',
    card_level varchar(64) default null comment '卡片等级',
    family_talent_id bigint default null comment '通过审核后家属的人才用户ID',
    family_card_id bigint default null comment '通过审核后家属的人才卡ID',
    dependent_name varchar(64) not null comment '家属姓名',
    dependent_mobile varchar(32) not null comment '家属手机号',
    dependent_id_card_no varchar(32) default null comment '家属身份证号',
    relation varchar(32) not null comment '家属关系',
    proof_files json default null comment '证明材料文件列表',
    apply_type varchar(32) not null default 'FAMILY' comment '申请类型:FAMILY家属卡 CHILD子女等',
    apply_time datetime not null default current_timestamp comment '申请时间',
    status tinyint not null default '0' comment '状态:0待审核 1通过 2驳回 3取消',
    audit_by bigint unsigned default null comment '审核人',
    audit_time datetime default null comment '审核时间',
    audit_remark varchar(500) default null comment '审核备注',
    created_at datetime not null default current_timestamp comment '创建时间',
    updated_at datetime not null default current_timestamp on update current_timestamp comment '更新时间',
    deleted tinyint not null default '0' comment '逻辑删除:0否 1是',
    primary key (id),
    unique key uk_dependent_apply_no (apply_no),
    key idx_dependent_talent_id (talent_id),
    key idx_dependent_mobile (dependent_mobile),
    key idx_dependent_card_level (card_level),
    key idx_dependent_apply_time (apply_time),
    key idx_dependent_status (status),
    key idx_dependent_card_apply_family_card (family_card_id)
) engine=InnoDB default charset=utf8mb4 comment='家属卡申请';
talent-card-server/src/main/resources/db/migration/V142__create_merchant_benefit_rule.sql
New file
@@ -0,0 +1,33 @@
-- 商户权益规则表。
--
-- 按「商户 + 商品 + 人才卡等级」配置权益:折扣、减免金额、免费次数、重置周期、家属是否可用、
-- 是否可到店使用。当前代码里只有酒店权益会读它,而且是兜底:BenefitQuotaService.hotelPolicy
-- 先读 merchant.merchant_rights_config(JSON),为空时才回落到这张表按卡等级取免费次数。
--
-- 这张表和 dependent_card_apply 一样,只在开发库里手建过,迁移里一直没有;新库走到这个回落
-- 分支就会报「表不存在」。开发库里它是 0 行,所以补建空表即可,代码路径不再炸。
create table if not exists merchant_benefit_rule (
    id bigint unsigned not null auto_increment comment '主键',
    merchant_id bigint unsigned not null comment '商户ID',
    product_id bigint unsigned default null comment '商品ID,为空表示商户级权益',
    card_level varchar(64) not null comment '适用人才卡等级',
    local_type tinyint not null default '0' comment '本地/外地:0不限 1本地 2外地',
    benefit_type varchar(64) not null comment '权益类型:DISCOUNT折扣 AMOUNT减免 FREE免费 COUPON券',
    discount_rate decimal(5,2) default null comment '折扣,如8.80表示8.8折',
    reduce_amount decimal(10,2) default null comment '减免金额',
    free_count int default null comment '免费次数',
    reset_cycle varchar(32) not null default 'NONE' comment '重置周期:NONE/DAY/WEEK/MONTH/QUARTER/YEAR',
    over_limit_rule varchar(500) default null comment '超过次数后的规则',
    can_family_use tinyint not null default '0' comment '家属是否可用:0否 1是',
    can_on_site_use tinyint not null default '0' comment '是否到店消费可用:0否 1是',
    use_desc text comment '使用说明',
    status tinyint not null default '1' comment '状态:0禁用 1启用',
    created_at datetime not null default current_timestamp comment '创建时间',
    updated_at datetime not null default current_timestamp on update current_timestamp comment '更新时间',
    deleted tinyint not null default '0' comment '逻辑删除:0否 1是',
    primary key (id),
    key idx_benefit_rule_merchant_id (merchant_id),
    key idx_benefit_rule_product_id (product_id),
    key idx_benefit_rule_card_level (card_level),
    key idx_benefit_rule_status (status)
) engine=InnoDB default charset=utf8mb4 comment='商户权益规则';