Files
jcgl-dev/dev/sql/apt_rev01/17_it4_columns.sql
T
zfjia 35751b4f00
IT-0 verify / verify (push) Waiting to run
1111
2026-11-11 18:30:31 +08:00

179 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- IT-4 入住作业核心补列与状态字典(可重放):CI-02 ~ CI-05。
-- 依据:公寓端/11 §3(表 11-7 / 11-8 / 11-9)、CR-02 §13 表 3-57 验收 18~20、13 表 13-14。
-- 口径:
-- 1) 59 张业务表不变:只补列、不放宽既有事实列语义、不新增 gy_jcxx 状态字段。
-- 2) `checkin_state` / `sync_state` 两条流程态字典按表 11-4 / 11-9 扩展:
-- checkin_state: SUBMITTED/REVIEWING/APPROVED/ROOM_ADJUSTED/REJECTED/CHECKED_IN/CANCELLED/CLOSED
-- sync_state : PENDING/REPORTED/MATCHED/UNMATCHED/TASK_READY
-- 这是**流程态**字典替换(表 11-4),不是新增状态字段;gy_jcxx 的 ryzt/finish_ly 仍只经 apt.duty.state 写入。
-- 3) `gygl_ly_event.event_type` 按 CR-02 表 3-14 增补 ROOM_SWAP(审核期换房的证据事件)。
-- 4) 复用既有列:`audited_by` / `audited_at` 即表 11-7 的 reviewed_by / reviewed_at(不重复建列)。
-- 5) 依赖 00_common.sql 的 apt_add_column_if_missing(与 07_patch_columns.sql 同一辅助)。
-- =============================================================================
-- 1. apt_local_task 申请阶段补列(表 11-7)
CALL apt_add_column_if_missing('apt_local_task', 'device_code',
'device_code VARCHAR(64) NULL COMMENT ''签到终端来源(表 11-7)''');
CALL apt_add_column_if_missing('apt_local_task', 'device_event_id',
'device_event_id VARCHAR(64) NULL COMMENT ''设备侧幂等键(表 11-7)''');
CALL apt_add_column_if_missing('apt_local_task', 'work_no',
'work_no VARCHAR(64) NULL COMMENT ''工号快照(平台匹配输入)''');
CALL apt_add_column_if_missing('apt_local_task', 'name_snapshot',
'name_snapshot VARCHAR(128) NULL COMMENT ''姓名快照(不替代 apt_master_person)''');
CALL apt_add_column_if_missing('apt_local_task', 'reg_id',
'reg_id VARCHAR(64) NULL COMMENT ''关联 apt_person_face_reg''');
CALL apt_add_column_if_missing('apt_local_task', 'reg_state_at_apply',
'reg_state_at_apply VARCHAR(20) NULL COMMENT ''申请时注册态,必须是 CONFIRMED''');
CALL apt_add_column_if_missing('apt_local_task', 'jch',
'jch VARCHAR(32) NULL COMMENT ''机次快照''');
CALL apt_add_column_if_missing('apt_local_task', 'kcsj_snapshot',
'kcsj_snapshot DATETIME(3) NULL COMMENT ''开车时刻快照(不写主数据)''');
CALL apt_add_column_if_missing('apt_local_task', 'verified_ryid',
'verified_ryid VARCHAR(64) NULL COMMENT ''N-38 核验通过的人员''');
CALL apt_add_column_if_missing('apt_local_task', 'verified_at',
'verified_at DATETIME(3) NULL COMMENT ''N-38 核验时刻(≤5 min 才能提交申请)''');
CALL apt_add_column_if_missing('apt_local_task', 'feature_version',
'feature_version BIGINT NULL COMMENT ''核验所用特征版本''');
CALL apt_add_column_if_missing('apt_local_task', 'source',
'source VARCHAR(20) NOT NULL DEFAULT ''DEVICE'' COMMENT ''DEVICE / DUTY / SELF(CR-02 表 3-14)''');
CALL apt_add_column_if_missing('apt_local_task', 'submitted_at',
'submitted_at DATETIME(3) NULL COMMENT ''申请提交时刻''');
CALL apt_add_column_if_missing('apt_local_task', 'occurred_at',
'occurred_at DATETIME(3) NULL COMMENT ''业务发生时刻(设备事件时间,不判日切)''');
CALL apt_add_column_if_missing('apt_local_task', 'review_note',
'review_note VARCHAR(256) NULL COMMENT ''审核说明 / 驳回原因''');
CALL apt_add_column_if_missing('apt_local_task', 'adjusted_by',
'adjusted_by VARCHAR(64) NULL COMMENT ''房间调整操作人''');
CALL apt_add_column_if_missing('apt_local_task', 'adjusted_at',
'adjusted_at DATETIME(3) NULL COMMENT ''房间调整时刻''');
CALL apt_add_column_if_missing('apt_local_task', 'adjust_reason',
'adjust_reason VARCHAR(256) NULL COMMENT ''房间调整理由''');
CALL apt_add_column_if_missing('apt_local_task', 'reported_at',
'reported_at DATETIME(3) NULL COMMENT ''#9 CHECKIN 入队时刻''');
CALL apt_add_column_if_missing('apt_local_task', 'matched_at',
'matched_at DATETIME(3) NULL COMMENT ''#7 匹配结论落库时刻''');
CALL apt_add_column_if_missing('apt_local_task', 'task_ready_at',
'task_ready_at DATETIME(3) NULL COMMENT ''任务就绪(jcsj 复算完成)时刻''');
CALL apt_add_column_if_missing('apt_local_task', 'matched_plan_key',
'matched_plan_key VARCHAR(128) NULL COMMENT ''平台匹配键(仅登记,不替代 jcid)''');
CALL apt_add_column_if_missing('apt_local_task', 'base_kcsj',
'base_kcsj DATETIME(3) NULL COMMENT ''平台补齐的开車时刻(要素非叫乘时刻)''');
CALL apt_add_column_if_missing('apt_local_task', 'base_jcfs',
'base_jcfs VARCHAR(32) NULL COMMENT ''平台补齐的叫乘方式''');
CALL apt_add_column_if_missing('apt_local_task', 'origin_jcsj',
'origin_jcsj DATETIME(3) NULL COMMENT ''本地指定叫乘时刻(锁定时保留)''');
CALL apt_add_column_if_missing('apt_local_task', 'derived_rule_version',
'derived_rule_version BIGINT NULL COMMENT ''jcsj 复算所用规则版本,升级不回溯''');
CALL apt_add_column_if_missing('apt_local_task', 'jllx',
'jllx VARCHAR(8) NULL COMMENT ''1=本地锁定交路要素(D8 例外②)''');
-- 2. 幂等键:设备事件唯一、申请单唯一(表 11-7)
SET @uk_device_event = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE apt_local_task ADD UNIQUE KEY uk_lt_gyid_device_event (gyid, device_code, device_event_id)',
'DO 0')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND INDEX_NAME = 'uk_lt_gyid_device_event');
PREPARE apt_stmt_uk_de FROM @uk_device_event;
EXECUTE apt_stmt_uk_de;
DEALLOCATE PREPARE apt_stmt_uk_de;
SET @uk_apply = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE apt_local_task ADD UNIQUE KEY uk_lt_gyid_apply (gyid, apply_id)',
'DO 0')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND INDEX_NAME = 'uk_lt_gyid_apply');
PREPARE apt_stmt_uk_apply FROM @uk_apply;
EXECUTE apt_stmt_uk_apply;
DEALLOCATE PREPARE apt_stmt_uk_apply;
-- 3. 流程态字典(表 11-4 / 11-9):先删旧 CHECK,再按新字典重建,可重放
SET @drop_checkin = (SELECT IF(COUNT(*) > 0,
'ALTER TABLE apt_local_task DROP CHECK ck_lt_checkin',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND CONSTRAINT_NAME = 'ck_lt_checkin' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_drop_ci FROM @drop_checkin;
EXECUTE apt_stmt_drop_ci;
DEALLOCATE PREPARE apt_stmt_drop_ci;
SET @add_checkin = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE apt_local_task ADD CONSTRAINT ck_lt_checkin CHECK (checkin_state IN (''SUBMITTED'',''REVIEWING'',''APPROVED'',''ROOM_ADJUSTED'',''REJECTED'',''CHECKED_IN'',''CANCELLED'',''CLOSED''))',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND CONSTRAINT_NAME = 'ck_lt_checkin' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_add_ci FROM @add_checkin;
EXECUTE apt_stmt_add_ci;
DEALLOCATE PREPARE apt_stmt_add_ci;
SET @drop_sync = (SELECT IF(COUNT(*) > 0,
'ALTER TABLE apt_local_task DROP CHECK ck_lt_sync',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND CONSTRAINT_NAME = 'ck_lt_sync' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_drop_sync FROM @drop_sync;
EXECUTE apt_stmt_drop_sync;
DEALLOCATE PREPARE apt_stmt_drop_sync;
SET @add_sync = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE apt_local_task ADD CONSTRAINT ck_lt_sync CHECK (sync_state IN (''PENDING'',''REPORTED'',''MATCHED'',''UNMATCHED'',''TASK_READY''))',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND CONSTRAINT_NAME = 'ck_lt_sync' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_add_sync FROM @add_sync;
EXECUTE apt_stmt_add_sync;
DEALLOCATE PREPARE apt_stmt_add_sync;
-- 4. gygl_ly_event.event_type 增补 ROOM_SWAP(CR-02 表 3-14;审核期换房证据)
SET @drop_lye = (SELECT IF(COUNT(*) > 0,
'ALTER TABLE gygl_ly_event DROP CHECK ck_lye_type',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'gygl_ly_event'
AND CONSTRAINT_NAME = 'ck_lye_type' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_drop_lye FROM @drop_lye;
EXECUTE apt_stmt_drop_lye;
DEALLOCATE PREPARE apt_stmt_drop_lye;
SET @add_lye = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE gygl_ly_event ADD CONSTRAINT ck_lye_type CHECK (event_type IN (''CHECKIN'',''CHECKOUT'',''ROOM_SWAP''))',
'DO 0')
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'gygl_ly_event'
AND CONSTRAINT_NAME = 'ck_lye_type' AND CONSTRAINT_TYPE = 'CHECK');
PREPARE apt_stmt_add_lye FROM @add_lye;
EXECUTE apt_stmt_add_lye;
DEALLOCATE PREPARE apt_stmt_add_lye;
-- 5. 校验
SELECT '=== IT-4 apt_local_task 补列(应 27 行)===' AS section;
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND COLUMN_NAME IN ('device_code','device_event_id','work_no','name_snapshot','reg_id',
'reg_state_at_apply','jch','kcsj_snapshot','verified_ryid','verified_at','feature_version',
'source','submitted_at','occurred_at','review_note','adjusted_by','adjusted_at','adjust_reason',
'reported_at','matched_at','task_ready_at','matched_plan_key','base_kcsj','base_jcfs',
'origin_jcsj','derived_rule_version','jllx')
ORDER BY COLUMN_NAME;
SELECT '=== 流程态字典 CHECK(checkin_state 应 8 值 / sync_state 应 5 值)===' AS section;
SELECT CONSTRAINT_NAME, CHECK_CLAUSE
FROM information_schema.CHECK_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = DATABASE()
AND CONSTRAINT_NAME IN ('ck_lt_checkin','ck_lt_sync','ck_lye_type')
ORDER BY CONSTRAINT_NAME;
SELECT '=== 幂等唯一键(应 2 行)===' AS section;
SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
AND INDEX_NAME IN ('uk_lt_gyid_device_event','uk_lt_gyid_apply')
GROUP BY INDEX_NAME;