179 lines
10 KiB
SQL
179 lines
10 KiB
SQL
-- =============================================================================
|
||
-- 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;
|