shinnosuke
2026-08-18 69138ddcf4936098cb3b67688412badfc8f503a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
alter table ticket_package
    add column total_quantity int not null default 0 comment '票包配置数量' after package_name;
 
create table if not exists ticket_package_merchant (
    id bigint not null auto_increment,
    package_id bigint not null comment '票包ID',
    merchant_id bigint not null comment '适用商家ID',
    sort_no int not null default 0 comment '排序',
    created_at datetime not null default current_timestamp,
    updated_at datetime not null default current_timestamp on update current_timestamp,
    deleted tinyint not null default 0,
    primary key (id),
    unique key uk_ticket_package_merchant (package_id, merchant_id),
    key idx_ticket_package_merchant_package (package_id),
    key idx_ticket_package_merchant_merchant (merchant_id)
) engine=InnoDB default charset=utf8mb4 comment='票包适用商家';
 
create table if not exists ticket_package_level_rule (
    id bigint not null auto_increment,
    package_id bigint not null comment '票包ID',
    talent_level varchar(64) not null comment '人才卡等级',
    enabled tinyint not null default 1 comment '是否启用',
    claimable_count int not null default 1 comment '当前等级可领数量',
    reset_cycle varchar(32) not null default '每天' comment '重置周期:每天/每周/每月/每年',
    created_at datetime not null default current_timestamp,
    updated_at datetime not null default current_timestamp on update current_timestamp,
    deleted tinyint not null default 0,
    primary key (id),
    unique key uk_ticket_package_level_rule (package_id, talent_level),
    key idx_ticket_package_level_rule_package (package_id)
) engine=InnoDB default charset=utf8mb4 comment='票包人才等级领取规则';
 
update ticket_package p
set p.total_quantity = (
    select count(*)
    from ticket_package_code c
    where c.package_id = p.id
      and c.deleted = 0
)
where p.total_quantity = 0;
 
insert into ticket_package_merchant(package_id, merchant_id, sort_no)
select p.id, p.merchant_id, 0
from ticket_package p
where p.deleted = 0
  and p.merchant_id is not null
  and not exists (
      select 1
      from ticket_package_merchant pm
      where pm.package_id = p.id
        and pm.merchant_id = p.merchant_id
  );
 
insert into ticket_package_level_rule(package_id, talent_level, enabled, claimable_count, reset_cycle)
select p.id,
       levels.talent_level,
       case
           when coalesce(p.talent_levels, '') = '' then 1
           when instr(p.talent_levels, levels.talent_level) > 0 then 1
           else 0
       end,
       greatest(coalesce(p.per_user_limit, r.claimable_count, 1), 1),
       coalesce(nullif(r.reset_cycle, ''), '每天')
from ticket_package p
join (
    select '卓越人才卡' as talent_level
    union all select '杰出人才卡'
    union all select '菁英人才卡'
) levels
left join movie_ticket_rule r on r.talent_level = levels.talent_level
where p.deleted = 0
  and not exists (
      select 1
      from ticket_package_level_rule pr
      where pr.package_id = p.id
        and pr.talent_level = levels.talent_level
  );