暂存一下,防止丢失

This commit is contained in:
2026-07-24 16:07:18 +08:00
parent 5d6e23f1a5
commit a18ed8bc8d
180 changed files with 13597 additions and 1986 deletions

View File

@@ -0,0 +1,65 @@
DO $$
BEGIN
IF EXISTS (
SELECT 1
FROM tb_agent_wallet
WHERE deleted_at IS NULL
AND wallet_type = 'main'
AND frozen_balance > 0
) THEN
RAISE EXCEPTION '存在无法关联稳定业务引用的历史主钱包冻结金额,禁止自动切换统一冻结能力';
END IF;
IF EXISTS (
SELECT 1
FROM tb_order
WHERE deleted_at IS NULL
AND buyer_type = 'agent'
AND payment_method = 'wallet'
AND payment_status = 1
) THEN
RAISE EXCEPTION '存在缺少预占事实的历史待支付代理钱包订单,禁止自动切换统一冻结能力';
END IF;
END
$$;
CREATE TABLE tb_agent_wallet_reservation (
id BIGSERIAL PRIMARY KEY,
agent_wallet_id BIGINT NOT NULL,
shop_id BIGINT NOT NULL,
amount BIGINT NOT NULL,
status INT NOT NULL DEFAULT 1,
reference_type VARCHAR(50) NOT NULL,
reference_id BIGINT NOT NULL,
creator BIGINT NOT NULL DEFAULT 0,
completed_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
shop_id_tag BIGINT NOT NULL,
enterprise_id_tag BIGINT,
CONSTRAINT ck_agent_wallet_reservation_amount CHECK (amount > 0),
CONSTRAINT ck_agent_wallet_reservation_status CHECK (status IN (1, 2, 3)),
CONSTRAINT uq_agent_wallet_reservation_reference UNIQUE (reference_type, reference_id)
);
COMMENT ON TABLE tb_agent_wallet_reservation IS '代理主钱包资金预占事实表';
COMMENT ON COLUMN tb_agent_wallet_reservation.id IS '预占事实ID';
COMMENT ON COLUMN tb_agent_wallet_reservation.agent_wallet_id IS '代理主钱包ID无外键';
COMMENT ON COLUMN tb_agent_wallet_reservation.shop_id IS '钱包所属店铺ID';
COMMENT ON COLUMN tb_agent_wallet_reservation.amount IS '预占金额(单位:分)';
COMMENT ON COLUMN tb_agent_wallet_reservation.status IS '预占状态1-已冻结 2-已释放 3-已完成扣除';
COMMENT ON COLUMN tb_agent_wallet_reservation.reference_type IS '稳定业务引用类型';
COMMENT ON COLUMN tb_agent_wallet_reservation.reference_id IS '稳定业务引用ID';
COMMENT ON COLUMN tb_agent_wallet_reservation.creator IS '创建人账号ID';
COMMENT ON COLUMN tb_agent_wallet_reservation.completed_at IS '释放或完成扣除时间';
COMMENT ON COLUMN tb_agent_wallet_reservation.created_at IS '创建时间';
COMMENT ON COLUMN tb_agent_wallet_reservation.updated_at IS '更新时间';
COMMENT ON COLUMN tb_agent_wallet_reservation.shop_id_tag IS '店铺数据权限标签';
COMMENT ON COLUMN tb_agent_wallet_reservation.enterprise_id_tag IS '企业数据权限标签';
CREATE INDEX idx_agent_wallet_reservation_wallet ON tb_agent_wallet_reservation (agent_wallet_id, created_at DESC);
CREATE INDEX idx_agent_wallet_reservation_shop ON tb_agent_wallet_reservation (shop_id, created_at DESC);
CREATE INDEX idx_agent_wallet_reservation_status ON tb_agent_wallet_reservation (status, created_at ASC);
COMMENT ON INDEX idx_agent_wallet_reservation_wallet IS '按钱包查询预占事实';
COMMENT ON INDEX idx_agent_wallet_reservation_shop IS '按店铺查询预占事实';
COMMENT ON INDEX idx_agent_wallet_reservation_status IS '按预占状态扫描待处理事实';