59 lines
2.9 KiB
MySQL
59 lines
2.9 KiB
MySQL
|
|
-- =============================================================================
|
|||
|
|
-- 借库转交一期收口:trans_borrow 补 dispatch_operator(发货操作人)
|
|||
|
|
--
|
|||
|
|
-- 背景
|
|||
|
|
-- 责任链上「谁借的 / 谁现在拿着 / 谁还的」在此前改造中已全部锚定到 ID,
|
|||
|
|
-- 唯独**执行借出的库管操作人**一直没落库 —— execute_dispatch 的
|
|||
|
|
-- operator_name 形参被接收后从未写入任何字段(首轮调研已标记该缺口)。
|
|||
|
|
-- 本迁移补齐最后一环,使一次借出在台账上能回答四个问题:
|
|||
|
|
-- 借用人 borrower_id / 当前持有人 current_holder_id /
|
|||
|
|
-- 发货操作人 dispatch_operator / 归还人 trans_borrow_return.returner_id
|
|||
|
|
--
|
|||
|
|
-- ---------------------------------------------------------------------------
|
|||
|
|
-- ★ 为什么存「姓名」而不是 ID
|
|||
|
|
-- execute_dispatch 的 operator_name 由 API 层经 _current_username() 取得,
|
|||
|
|
-- 本身就是展示口径的字符串(与 trans_borrow_return.operator_name 一致)。
|
|||
|
|
-- 该字段仅用于台账展示与追溯,不参与任何权限判定或持有人校验,
|
|||
|
|
-- 故不引入 ID —— 需要精确到人时,审计日志(audit_listener)另有记录。
|
|||
|
|
--
|
|||
|
|
-- ★ 为什么不回填历史值
|
|||
|
|
-- 改造前的执行人信息**从未被采集**,系统中不存在任何可回填的数据源
|
|||
|
|
-- (trans_borrow 没有对应列,TransBorrow 也没有其它操作人字段)。
|
|||
|
|
-- 刻意留空而非猜测填充 —— 用申请人或借用人冒充实物交接人,
|
|||
|
|
-- 比留空更危险。NULL 即表示「本次借出发生在该字段上线之前」。
|
|||
|
|
--
|
|||
|
|
-- 幂等:带 IF NOT EXISTS,可重复执行。
|
|||
|
|
-- 执行:docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
|||
|
|
-- =============================================================================
|
|||
|
|
|
|||
|
|
BEGIN;
|
|||
|
|
|
|||
|
|
ALTER TABLE trans_borrow
|
|||
|
|
ADD COLUMN IF NOT EXISTS dispatch_operator varchar(100);
|
|||
|
|
|
|||
|
|
COMMENT ON COLUMN trans_borrow.dispatch_operator IS
|
|||
|
|
'执行借出(扫码发货)的库管操作人姓名。仅展示/追溯用,不参与权限判定;'
|
|||
|
|
'该列上线前的历史记录为 NULL';
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- 执行后核对
|
|||
|
|
-- =============================================================================
|
|||
|
|
\echo '--- 1) 新列已就位 ---'
|
|||
|
|
SELECT column_name, data_type, character_maximum_length
|
|||
|
|
FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'trans_borrow' AND column_name = 'dispatch_operator';
|
|||
|
|
|
|||
|
|
\echo '--- 2) 存量行均为 NULL(预期:全部为 NULL,历史数据无从回填)---'
|
|||
|
|
SELECT count(*) AS total, count(dispatch_operator) AS filled FROM trans_borrow;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- 回滚段
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- BEGIN;
|
|||
|
|
-- ALTER TABLE trans_borrow DROP COLUMN IF EXISTS dispatch_operator;
|
|||
|
|
-- COMMIT;
|