feat: 支持待分配/待抢单修改付款金额并增加价格历史
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
-- 120_work_order_user_payment_amount_audit.sql
|
||||
-- 工单「用户付款金额」最近一次修正快照:旧价、修改时间、修改人。
|
||||
-- 完整修改历史仍在 work_order_events.payment_amount_updated。
|
||||
|
||||
ALTER TABLE work_orders
|
||||
ADD COLUMN IF NOT EXISTS user_payment_amount_previous_fen BIGINT,
|
||||
ADD COLUMN IF NOT EXISTS user_payment_amount_updated_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS user_payment_amount_updated_by TEXT;
|
||||
|
||||
COMMENT ON COLUMN work_orders.user_payment_amount_previous_fen IS
|
||||
'最近一次修改用户付款金额前的金额(分);NULL 表示首次修改前金额未知';
|
||||
COMMENT ON COLUMN work_orders.user_payment_amount_updated_at IS
|
||||
'最近一次修改用户付款金额的时间';
|
||||
COMMENT ON COLUMN work_orders.user_payment_amount_updated_by IS
|
||||
'最近一次修改用户付款金额的操作人展示名/用户名快照';
|
||||
@@ -0,0 +1,72 @@
|
||||
-- 121_work_order_payment_amount_history.sql
|
||||
-- 工单「用户付款金额」完整修改历史:每次修改一行。
|
||||
-- 独立于 work_order_events(默认只保留 180 天),工单删除时级联删除。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS work_order_payment_amount_history (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
work_order_id BIGINT NOT NULL REFERENCES work_orders(id) ON DELETE CASCADE,
|
||||
previous_amount_fen BIGINT,
|
||||
amount_fen BIGINT NOT NULL,
|
||||
reason TEXT NOT NULL DEFAULT '',
|
||||
changed_by TEXT NOT NULL DEFAULT '',
|
||||
changed_at TIMESTAMPTZ NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_work_order_payment_amount_history_order
|
||||
ON work_order_payment_amount_history(work_order_id, changed_at DESC, id DESC);
|
||||
|
||||
COMMENT ON TABLE work_order_payment_amount_history IS
|
||||
'工单用户付款金额完整修改历史;每次实际修改一行,供后台价格历史查看';
|
||||
COMMENT ON COLUMN work_order_payment_amount_history.previous_amount_fen IS
|
||||
'本次修改前的金额(分);NULL 表示首次修改前金额未知';
|
||||
COMMENT ON COLUMN work_order_payment_amount_history.amount_fen IS
|
||||
'本次修改后的金额(分)';
|
||||
COMMENT ON COLUMN work_order_payment_amount_history.reason IS
|
||||
'修改原因(选填,最多 200 字)';
|
||||
COMMENT ON COLUMN work_order_payment_amount_history.changed_by IS
|
||||
'修改人展示名/用户名快照';
|
||||
COMMENT ON COLUMN work_order_payment_amount_history.changed_at IS
|
||||
'本次修改时间';
|
||||
|
||||
-- 回填已有的 payment_amount_updated 事件。迁移只执行一次,仍按
|
||||
-- (work_order_id, changed_at, amount_fen) 防重,避免手工重跑时重复插入。
|
||||
WITH parsed AS (
|
||||
SELECT
|
||||
e.work_order_id,
|
||||
CASE
|
||||
WHEN e.payload_json->>'previousAmountFen' ~ '^-?[0-9]+$'
|
||||
THEN (e.payload_json->>'previousAmountFen')::bigint
|
||||
ELSE NULL
|
||||
END AS previous_amount_fen,
|
||||
(e.payload_json->>'amountFen')::bigint AS amount_fen,
|
||||
COALESCE(e.payload_json->>'reason', '') AS reason,
|
||||
COALESCE(e.actor_id, '') AS changed_by,
|
||||
e.created_at
|
||||
FROM work_order_events e
|
||||
WHERE e.event_type = 'payment_amount_updated'
|
||||
AND e.payload_json->>'amountFen' ~ '^-?[0-9]+$'
|
||||
)
|
||||
INSERT INTO work_order_payment_amount_history (
|
||||
work_order_id,
|
||||
previous_amount_fen,
|
||||
amount_fen,
|
||||
reason,
|
||||
changed_by,
|
||||
changed_at
|
||||
)
|
||||
SELECT
|
||||
p.work_order_id,
|
||||
p.previous_amount_fen,
|
||||
p.amount_fen,
|
||||
p.reason,
|
||||
p.changed_by,
|
||||
p.created_at
|
||||
FROM parsed p
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM work_order_payment_amount_history h
|
||||
WHERE h.work_order_id = p.work_order_id
|
||||
AND h.changed_at = p.created_at
|
||||
AND h.amount_fen = p.amount_fen
|
||||
);
|
||||
Reference in New Issue
Block a user