unis_crm/sql/20260525_日历.sql

99 lines
4.5 KiB
MySQL
Raw Normal View History

2026-05-27 05:35:50 +00:00
begin;
set search_path to public;
-- 2026-05-25 日历能力升级脚本
-- 说明:
-- 1. 创建并补齐业务日历表 business_calendar_day。
-- 2. 用于“同步当年日历”功能落库存储节假日、法定休息日、调休补班、工作日定义。
-- 3. 可重复执行。
create table if not exists business_calendar_day (
id bigint generated by default as identity primary key,
calendar_date date not null,
calendar_year integer not null,
day_of_week integer not null,
day_type_code integer not null default 0,
day_type varchar(32) not null default 'WORKDAY',
day_name varchar(64) not null,
holiday_name varchar(100),
holiday_target varchar(100),
holiday_wage integer,
is_weekend boolean not null default false,
is_rest_day boolean not null default false,
is_workday boolean not null default true,
is_holiday boolean not null default false,
is_legal_holiday boolean not null default false,
is_makeup_workday boolean not null default false,
source varchar(50) not null default 'timor',
synced_by_user_id bigint,
synced_at timestamptz not null default now(),
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
alter table if exists business_calendar_day
add column if not exists calendar_year integer not null default 1970,
add column if not exists day_of_week integer not null default 1,
add column if not exists day_type_code integer not null default 0,
add column if not exists day_type varchar(32) not null default 'WORKDAY',
add column if not exists day_name varchar(64) not null default '周一',
add column if not exists holiday_name varchar(100),
add column if not exists holiday_target varchar(100),
add column if not exists holiday_wage integer,
add column if not exists is_weekend boolean not null default false,
add column if not exists is_rest_day boolean not null default false,
add column if not exists is_workday boolean not null default true,
add column if not exists is_holiday boolean not null default false,
add column if not exists is_legal_holiday boolean not null default false,
add column if not exists is_makeup_workday boolean not null default false,
add column if not exists source varchar(50) not null default 'timor',
add column if not exists synced_by_user_id bigint,
add column if not exists synced_at timestamptz not null default now();
do $$
begin
if exists (
select 1
from information_schema.tables
where table_schema = current_schema()
and table_name = 'business_calendar_day'
) and not exists (
select 1
from pg_constraint
where conname = 'uk_business_calendar_day_date'
) then
alter table business_calendar_day
add constraint uk_business_calendar_day_date unique (calendar_date);
end if;
end
$$;
create index if not exists idx_business_calendar_day_year_date
on business_calendar_day (calendar_year asc, calendar_date asc);
create index if not exists idx_business_calendar_day_type
on business_calendar_day (day_type asc, calendar_date asc);
comment on table business_calendar_day is '业务日历定义表';
comment on column business_calendar_day.calendar_date is '日历日期';
comment on column business_calendar_day.calendar_year is '年份';
comment on column business_calendar_day.day_of_week is '星期1-7 对应周一到周日';
comment on column business_calendar_day.day_type_code is '日历类型编码0工作日、1周末休息、2节假日、3调休补班';
comment on column business_calendar_day.day_type is '日历类型';
comment on column business_calendar_day.day_name is '日历展示名称';
comment on column business_calendar_day.holiday_name is '节假日名称';
comment on column business_calendar_day.holiday_target is '调休关联节日';
comment on column business_calendar_day.holiday_wage is '节假日工资倍数';
comment on column business_calendar_day.is_weekend is '是否周末';
comment on column business_calendar_day.is_rest_day is '是否休息日';
comment on column business_calendar_day.is_workday is '是否工作日';
comment on column business_calendar_day.is_holiday is '是否节假日';
comment on column business_calendar_day.is_legal_holiday is '是否法定节假日';
comment on column business_calendar_day.is_makeup_workday is '是否法定调休补班';
comment on column business_calendar_day.source is '日历来源';
comment on column business_calendar_day.synced_by_user_id is '最近同步人ID';
comment on column business_calendar_day.synced_at is '最近同步时间';
commit;