Files
junhong_cmp_fiber/migrations/000268_add_package_usage_adjustment.up.sql
邹进 9c3c258f16
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m27s
feat: 卡流量读数先过采集队列再入账,扣减按采集时刻确定套餐
- 每卡 Redis 采集队列(默认 N=3、跨天清空、回退容差 1 MB),攒满且不下降才写最后一个点
- 测试环境全量切换日快照计量,下线灰度名单、切换水位与卡表基线扣费;全部卡置待建起点
- 读数区分没给值与 0;有套餐的卡读数 0 也写快照与日用量 0 行;重置日比较基准为 0 照常防旧值
- 新增采集记录(按月分区保留 90 天)、人工冲正流水与后台接口、采集告警
- 扣减按采集时刻有效套餐查找,只对生效中套餐做状态迁移,查不到套餐按成功跳过
- 换货新卡(新设备下的卡)打待建起点;采集间隔上限只校验启用中的轮询配置

Change: add-card-traffic-queue-and-observed-deduction

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:18:47 +09:00

39 lines
2.7 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 套餐流量人工冲正流水(add-card-traffic-queue-and-observed-deduction)。
-- 冲正只通过本表进行:事务内锁套餐行、按当前已用量加减,退回后不得小于 0;冲正不改卡日快照与已结算。
-- 只新增不修改、不删除;不使用数据库外键(ENG-MODEL-001)。
CREATE TABLE tb_package_usage_adjustment (
id BIGSERIAL PRIMARY KEY,
package_usage_id BIGINT NOT NULL,
iot_card_id BIGINT NOT NULL DEFAULT 0,
device_id BIGINT NOT NULL DEFAULT 0,
delta_mb BIGINT NOT NULL,
before_usage_mb BIGINT NOT NULL,
after_usage_mb BIGINT NOT NULL,
before_status INTEGER NOT NULL,
after_status INTEGER NOT NULL,
reason VARCHAR(500) NOT NULL,
ref_observation_id VARCHAR(128) NOT NULL DEFAULT '',
ref_event_id VARCHAR(128) NOT NULL DEFAULT '',
operator_id BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT ck_package_usage_adjustment_delta CHECK (delta_mb <> 0),
CONSTRAINT ck_package_usage_adjustment_after CHECK (after_usage_mb >= 0)
);
CREATE INDEX idx_package_usage_adjustment_usage ON tb_package_usage_adjustment (package_usage_id, created_at DESC);
CREATE INDEX idx_package_usage_adjustment_card ON tb_package_usage_adjustment (iot_card_id, created_at DESC);
COMMENT ON TABLE tb_package_usage_adjustment IS '套餐流量人工冲正流水:正数补扣、负数退回';
COMMENT ON COLUMN tb_package_usage_adjustment.package_usage_id IS '套餐使用记录ID';
COMMENT ON COLUMN tb_package_usage_adjustment.iot_card_id IS '单卡套餐的卡ID,设备套餐为 0';
COMMENT ON COLUMN tb_package_usage_adjustment.device_id IS '设备套餐的设备ID,单卡套餐为 0';
COMMENT ON COLUMN tb_package_usage_adjustment.delta_mb IS '调整量(MB):正数补扣,负数退回';
COMMENT ON COLUMN tb_package_usage_adjustment.before_usage_mb IS '锁定后调整前的套餐已用量(MB)';
COMMENT ON COLUMN tb_package_usage_adjustment.after_usage_mb IS '调整后的套餐已用量(MB)';
COMMENT ON COLUMN tb_package_usage_adjustment.before_status IS '调整前套餐状态';
COMMENT ON COLUMN tb_package_usage_adjustment.after_status IS '调整后套餐状态';
COMMENT ON COLUMN tb_package_usage_adjustment.reason IS '冲正原因(必填)';
COMMENT ON COLUMN tb_package_usage_adjustment.ref_observation_id IS '关联的采集 ID(可选)';
COMMENT ON COLUMN tb_package_usage_adjustment.ref_event_id IS '关联的流量事件 ID(可选)';
COMMENT ON COLUMN tb_package_usage_adjustment.operator_id IS '操作人账号ID';