停止跟踪本地工具和日志并完善生产迁移交付

This commit is contained in:
焦龙言
2026-10-08 17:40:30 +08:00
parent 56e646bcc1
commit f3393d78fb
73 changed files with 738 additions and 555163 deletions
@@ -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');