停止跟踪本地工具和日志并完善生产迁移交付
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
-- 只读:在持续停写期间,于迁移前/后各执行一次,保存到权限600的文件后 cmp。
|
||||
-- 只选择用户提供结构中的原字段,新增列不参与比较。覆盖正式及测试数据,不输出密码/Token。
|
||||
-- JSON_ARRAY 保持 NULL 与空字符串差异并转义换行;按主键排序,避免行序造成假差异。
|
||||
-- 文件包含业务信息,只留在受控生产备份位置,不上传聊天、不提交仓库。
|
||||
SELECT 'biz_tunnel', JSON_ARRAY(tunnel_id, test_batch_id, site_id, tunnel_code, tunnel_name,
|
||||
current_trace_no, current_trace_started_at, status, create_by, create_time, update_by, update_time, remark)
|
||||
FROM biz_tunnel ORDER BY tunnel_id;
|
||||
|
||||
SELECT 'biz_pallet_inventory', JSON_ARRAY(pallet_id, test_batch_id, active_filling_id, warehouse_id,
|
||||
site_id, current_line_id, flow_state, remaining_packages, last_event_id, version, updated_at)
|
||||
FROM biz_pallet_inventory ORDER BY pallet_id;
|
||||
|
||||
SELECT 'biz_usage_record', JSON_ARRAY(usage_id, test_batch_id, usage_no, pallet_id, active_filling_id,
|
||||
site_id, line_id, used_packages, remaining_packages_after, idempotency_key, request_hash, operator_id, occurred_at)
|
||||
FROM biz_usage_record ORDER BY usage_id;
|
||||
|
||||
SELECT 'biz_return_item', JSON_ARRAY(return_item_id, test_batch_id, return_id, pallet_id,
|
||||
active_filling_id_snapshot, remaining_packages_snapshot, create_by, create_time)
|
||||
FROM biz_return_item ORDER BY return_item_id;
|
||||
|
||||
SELECT 'biz_pallet_event', JSON_ARRAY(event_id, test_batch_id, pallet_id, event_seq, event_type,
|
||||
source_type, source_id, before_state, after_state, before_warehouse_id, before_site_id,
|
||||
before_line_id, after_warehouse_id, after_site_id, after_line_id, before_remaining_packages,
|
||||
after_remaining_packages, operator_id, occurred_at, idempotency_key, request_hash)
|
||||
FROM biz_pallet_event ORDER BY event_id;
|
||||
|
||||
SELECT 'biz_filling_record', JSON_ARRAY(filling_id, test_batch_id, filling_no, pallet_id, warehouse_id,
|
||||
strain_id, strain_code_snapshot, strain_name_snapshot, batch_no, production_date, expiry_date,
|
||||
package_spec, initial_packages, active_slot, closed_at, idempotency_key, request_hash, operator_id,
|
||||
operated_at, create_by, create_time, update_by, update_time, remark)
|
||||
FROM biz_filling_record ORDER BY filling_id;
|
||||
|
||||
SELECT 'biz_shipment_order', JSON_ARRAY(shipment_id, test_batch_id, shipment_no, source_warehouse_id,
|
||||
target_site_id, status, confirm_idempotency_key, confirm_request_hash, confirmed_by, confirmed_at,
|
||||
create_by, create_time, update_by, update_time, remark)
|
||||
FROM biz_shipment_order ORDER BY shipment_id;
|
||||
@@ -0,0 +1,90 @@
|
||||
-- 只读:三份补丁成功后、仍停写时执行。所有 status=OK、异常计数=0;还需原字段快照一致。
|
||||
SELECT DATABASE() AS db_name, VERSION() AS mysql_version;
|
||||
|
||||
WITH expected AS (
|
||||
SELECT 'biz_pallet_inventory' AS tab, 'tunnel_id' AS col, 'bigint' AS typ, 'YES' AS nullable
|
||||
UNION ALL SELECT 'biz_pallet_inventory', 'trace_no', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_inventory', 'site_arrived_at', 'datetime', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'tunnel_id', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'trace_no', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'batch_no_snapshot', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'fifo_skip_reason', 'varchar(500)', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'fifo_recommendation', 'json', 'YES'
|
||||
UNION ALL SELECT 'biz_usage_record', 'line_id', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_return_item', 'tunnel_id_snapshot', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_return_item', 'trace_no_snapshot', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_return_item', 'batch_no_snapshot', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'before_tunnel_id', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'after_tunnel_id', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'trace_no', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'batch_no_snapshot', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'fifo_skip_reason', 'varchar(500)', 'YES'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'fifo_recommendation', 'json', 'YES'
|
||||
UNION ALL SELECT 'biz_filling_record', 'production_date', 'date', 'YES'
|
||||
UNION ALL SELECT 'biz_filling_record', 'expiry_date', 'date', 'YES'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'receipt_state', 'varchar(16)', 'NO'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'received_by', 'bigint', 'YES'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'received_at', 'datetime', 'YES'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'receipt_idempotency_key', 'varchar(64)', 'YES'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'receipt_request_hash', 'varchar(64)', 'YES'
|
||||
)
|
||||
SELECT e.tab, e.col, c.column_type, c.is_nullable,
|
||||
CASE WHEN c.column_name IS NULL THEN 'MISSING'
|
||||
WHEN c.column_type <> e.typ OR c.is_nullable <> e.nullable THEN 'MISMATCH'
|
||||
ELSE 'OK' END AS status
|
||||
FROM expected e LEFT JOIN information_schema.columns c
|
||||
ON c.table_schema = DATABASE() AND c.table_name = e.tab AND c.column_name = e.col
|
||||
ORDER BY e.tab, e.col;
|
||||
|
||||
WITH expected AS (
|
||||
SELECT 'biz_usage_record' AS tab, 'tunnel_id' AS col, 'biz_tunnel' AS ref_tab, 'tunnel_id' AS ref_col
|
||||
UNION ALL SELECT 'biz_return_item', 'tunnel_id_snapshot', 'biz_tunnel', 'tunnel_id'
|
||||
UNION ALL SELECT 'biz_pallet_inventory', 'tunnel_id', 'biz_tunnel', 'tunnel_id'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'before_tunnel_id', 'biz_tunnel', 'tunnel_id'
|
||||
UNION ALL SELECT 'biz_pallet_event', 'after_tunnel_id', 'biz_tunnel', 'tunnel_id'
|
||||
UNION ALL SELECT 'biz_shipment_order', 'received_by', 'sys_user', 'user_id'
|
||||
)
|
||||
SELECT e.tab, e.col,
|
||||
CASE WHEN EXISTS (SELECT 1 FROM information_schema.key_column_usage k
|
||||
WHERE k.table_schema = DATABASE() AND k.table_name = e.tab AND k.column_name = e.col
|
||||
AND k.referenced_table_schema = DATABASE()
|
||||
AND k.referenced_table_name = e.ref_tab AND k.referenced_column_name = e.ref_col)
|
||||
THEN 'OK' ELSE 'MISSING' END AS status
|
||||
FROM expected e;
|
||||
|
||||
-- 三个 CHECK 必须存在且 ENFORCED=YES;人工核对枚举含 IN_TRANSIT、TUNNEL_ENTERED、SHIPMENT_RECEIVED。
|
||||
SELECT t.table_name, t.constraint_name, t.enforced, c.check_clause
|
||||
FROM information_schema.table_constraints t JOIN information_schema.check_constraints c
|
||||
ON c.constraint_schema = t.constraint_schema AND c.constraint_name = t.constraint_name
|
||||
WHERE t.constraint_schema = DATABASE()
|
||||
AND t.constraint_name IN ('ck_biz_pallet_inventory_flow_state', 'ck_biz_pallet_event_event_type',
|
||||
'ck_biz_shipment_order_receipt_state');
|
||||
SELECT index_name, non_unique, GROUP_CONCAT(column_name ORDER BY seq_in_index) AS columns_in_order
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE() AND table_name = 'biz_shipment_order'
|
||||
AND index_name = 'uq_biz_shipment_receipt_site_key'
|
||||
GROUP BY index_name, non_unique;
|
||||
|
||||
-- 必须恰有5行且编号/父菜单/权限与操作说明一致;不应自动出现任何普通角色映射。
|
||||
SELECT menu_id, parent_id, menu_type, perms FROM sys_menu
|
||||
WHERE menu_id IN (520, 1116, 1117, 1118, 1119) ORDER BY menu_id;
|
||||
SELECT COUNT(*) AS unexpected_role_grants FROM sys_role_menu WHERE menu_id IN (520, 1116, 1117, 1118, 1119);
|
||||
|
||||
SELECT COUNT(*) AS unexpected_receipt_history FROM biz_shipment_order
|
||||
WHERE (status = 'CONFIRMED' AND receipt_state <> 'LEGACY')
|
||||
OR (status = 'DRAFT' AND receipt_state <> 'PENDING')
|
||||
OR received_by IS NOT NULL OR received_at IS NOT NULL
|
||||
OR receipt_idempotency_key IS NOT NULL OR receipt_request_hash IS NOT NULL;
|
||||
SELECT COUNT(*) AS unexpected_inventory_history FROM biz_pallet_inventory
|
||||
WHERE tunnel_id IS NOT NULL OR trace_no IS NOT NULL OR site_arrived_at IS NOT NULL;
|
||||
SELECT COUNT(*) AS unexpected_usage_history FROM biz_usage_record
|
||||
WHERE tunnel_id IS NOT NULL OR trace_no IS NOT NULL OR batch_no_snapshot IS NOT NULL
|
||||
OR fifo_skip_reason IS NOT NULL OR fifo_recommendation IS NOT NULL;
|
||||
SELECT COUNT(*) AS unexpected_return_history FROM biz_return_item
|
||||
WHERE tunnel_id_snapshot IS NOT NULL OR trace_no_snapshot IS NOT NULL OR batch_no_snapshot IS NOT NULL;
|
||||
SELECT COUNT(*) AS unexpected_event_history FROM biz_pallet_event
|
||||
WHERE before_tunnel_id IS NOT NULL OR after_tunnel_id IS NOT NULL OR trace_no IS NOT NULL
|
||||
OR batch_no_snapshot IS NOT NULL OR fifo_skip_reason IS NOT NULL OR fifo_recommendation IS NOT NULL;
|
||||
SELECT COUNT(*) AS remaining_migration_routines FROM information_schema.routines
|
||||
WHERE routine_schema = DATABASE() AND routine_name IN ('repair_prod_existing_tunnel_20261008',
|
||||
'migrate_shipment_receipt_20261008', 'migrate_usage_fifo_20261008');
|
||||
Reference in New Issue
Block a user