76 lines
3.4 KiB
MySQL
76 lines
3.4 KiB
MySQL
|
|
-- =============================================================================
|
|||
|
|
-- 借库转交 · 拒收须告知发起方
|
|||
|
|
--
|
|||
|
|
-- 背景
|
|||
|
|
-- 双向握手补上了「接收人确认」这一环,但只做了单向告知:接收人能看到待办,
|
|||
|
|
-- 发起方却对结果一无所知 —— 尤其是**被拒绝**时,物品责任仍在发起方手上,
|
|||
|
|
-- 他若不查列表就会误以为已经交接出去,责任链出现静默断点。
|
|||
|
|
--
|
|||
|
|
-- ---------------------------------------------------------------------------
|
|||
|
|
-- 为什么需要 reject_seen_at 这一列
|
|||
|
|
-- ACCEPTED 不需要告知(东西已经交出去了,发起方无需动作);
|
|||
|
|
-- REJECTED 必须告知,且**必须能标记「已告知」** —— 否则发起方每次登录
|
|||
|
|
-- 都会收到同一条提醒,从「提醒」退化成「骚扰」。
|
|||
|
|
--
|
|||
|
|
-- 不宜用前端 sessionStorage 去重:换台电脑、换个浏览器就会重新提醒,
|
|||
|
|
-- 而这条信息的分量(责任归属)值得一个持久标记。
|
|||
|
|
--
|
|||
|
|
-- 语义
|
|||
|
|
-- reject_seen_at IS NULL 且 status='REJECTED' → 尚未告知发起方
|
|||
|
|
-- 发起方在前端看到提醒并确认后,写当前时间
|
|||
|
|
--
|
|||
|
|
-- ★ 存量已拒绝的流水一律标记为「已告知」
|
|||
|
|
-- 它们产生于本功能上线之前,追溯提醒只会打扰(实测仅 1 条:
|
|||
|
|
-- #22 测试 → 小龙虾,是验收时的测试数据)。新产生的拒绝才会触发提醒。
|
|||
|
|
--
|
|||
|
|
-- 幂等:带 IF NOT EXISTS,可重复执行。
|
|||
|
|
-- 执行:docker exec -i inventory_db psql -U test -d inventory_system < 本文件
|
|||
|
|
-- =============================================================================
|
|||
|
|
|
|||
|
|
BEGIN;
|
|||
|
|
|
|||
|
|
ALTER TABLE trans_borrow_transfer
|
|||
|
|
ADD COLUMN IF NOT EXISTS reject_seen_at timestamp without time zone;
|
|||
|
|
|
|||
|
|
COMMENT ON COLUMN trans_borrow_transfer.reject_seen_at IS
|
|||
|
|
'发起方看到「被拒绝」提醒并确认的时间。NULL 且 status=REJECTED 表示尚未告知';
|
|||
|
|
|
|||
|
|
-- 存量已拒绝的流转为已告知(本功能上线前的历史,不追溯打扰)
|
|||
|
|
UPDATE trans_borrow_transfer
|
|||
|
|
SET reject_seen_at = CURRENT_TIMESTAMP
|
|||
|
|
WHERE status = 'REJECTED'
|
|||
|
|
AND reject_seen_at IS NULL;
|
|||
|
|
|
|||
|
|
-- 支撑「待告知发起方的拒绝」查询
|
|||
|
|
CREATE INDEX IF NOT EXISTS ix_trans_borrow_transfer_from_status
|
|||
|
|
ON trans_borrow_transfer (from_user_id, status);
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- 执行后核对
|
|||
|
|
-- =============================================================================
|
|||
|
|
\echo '--- 1) 新列已就位 ---'
|
|||
|
|
SELECT column_name, data_type FROM information_schema.columns
|
|||
|
|
WHERE table_name = 'trans_borrow_transfer' AND column_name = 'reject_seen_at';
|
|||
|
|
|
|||
|
|
\echo '--- 2) 拒绝流水均已标记为已告知(应为 0 行待告知)---'
|
|||
|
|
SELECT id, borrow_no, status, from_user_name, to_user_name, reject_seen_at
|
|||
|
|
FROM trans_borrow_transfer
|
|||
|
|
WHERE status = 'REJECTED' AND reject_seen_at IS NULL;
|
|||
|
|
|
|||
|
|
\echo '--- 3) 全部流水一览 ---'
|
|||
|
|
SELECT id, status, from_user_name, to_user_name,
|
|||
|
|
CASE WHEN reject_seen_at IS NULL THEN '' ELSE '已告知' END AS 拒绝告知
|
|||
|
|
FROM trans_borrow_transfer ORDER BY id;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- 回滚段
|
|||
|
|
-- =============================================================================
|
|||
|
|
-- BEGIN;
|
|||
|
|
-- DROP INDEX IF EXISTS ix_trans_borrow_transfer_from_status;
|
|||
|
|
-- ALTER TABLE trans_borrow_transfer DROP COLUMN IF EXISTS reject_seen_at;
|
|||
|
|
-- COMMIT;
|