Files
junhong_cmp_fiber/migrations/000265_add_asset_outbound_time.up.sql
邹进 909f4d0ec2
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 8m39s
feat: 实名即生效套餐沉默期、延期办理与资产出库时间
- 迁移 000259~000265:套餐记录沉默期字段与扫描索引、套餐默认沉默期、延期政策/流水/订单/批次/明细 5 张表、默认政策与系统配置(总开关默认关闭)、企微审批白名单、卡与设备出库时间及出库记录
- 沉默期设置(订单发放、自动购包、钱包续费)、后台购买时调整(超默认值按政策免审或企微审批)、统一判定与激活闸门、排队与孤儿扫描跳过过期套餐、过期套餐禁止退款、每 10 分钟扫描
- 总开关专用接口与打开前 4 项检查;延期政策;延期资格与计费;H5 自助与后台二维码在线支付(商户池路由)、支付回调与查单恢复、线下登记、特殊/批量延期、异常重试与原路退款;沉默期审批场景与终态处理
- 换货沉默期流水与出库时间;卡/设备列表、详情、导出与出库记录接口;延期订单与即将过期套餐列表及导出;财务流水纳入延期支付
- 沉默期与出库时间回填工具 cmd/silence-backfill;前端接口变更说明

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:32:58 +09:00

43 lines
2.8 KiB
SQL
Raw 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.
-- 卡与设备出库时间、出库记录(技术方案 §17)。
-- outbound_at = 资产当前世代第 1 次购买套餐的订单支付时间;设备上绑定的卡不记;换货新资产取换货完成时间。
-- 只做记录与展示,不参与业务判断,不受沉默期总开关影响。
ALTER TABLE tb_iot_card ADD COLUMN outbound_at TIMESTAMPTZ;
ALTER TABLE tb_device ADD COLUMN outbound_at TIMESTAMPTZ;
COMMENT ON COLUMN tb_iot_card.outbound_at IS '出库时间(当前世代首次购买套餐的支付时间)';
COMMENT ON COLUMN tb_device.outbound_at IS '出库时间(当前世代首次购买套餐的支付时间)';
CREATE INDEX IF NOT EXISTS idx_iot_card_outbound_at ON tb_iot_card (outbound_at) WHERE outbound_at IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_device_outbound_at ON tb_device (outbound_at) WHERE outbound_at IS NOT NULL;
CREATE TABLE tb_asset_outbound_record (
id BIGSERIAL PRIMARY KEY,
asset_type VARCHAR(20) NOT NULL,
asset_id BIGINT NOT NULL,
asset_identifier_snapshot VARCHAR(100) NOT NULL DEFAULT '',
generation INTEGER NOT NULL,
outbound_at TIMESTAMPTZ NOT NULL,
source VARCHAR(20) NOT NULL,
order_id BIGINT,
order_no VARCHAR(40) NOT NULL DEFAULT '',
exchange_order_id BIGINT,
exchange_no VARCHAR(64) NOT NULL DEFAULT '',
shop_id BIGINT,
ended_at TIMESTAMPTZ,
end_reason VARCHAR(40) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT ck_asset_outbound_asset_type CHECK (asset_type IN ('iot_card', 'device')),
CONSTRAINT ck_asset_outbound_source CHECK (source IN ('order', 'exchange', 'backfill'))
);
CREATE UNIQUE INDEX uq_asset_outbound_generation ON tb_asset_outbound_record (asset_type, asset_id, generation);
CREATE INDEX idx_asset_outbound_created ON tb_asset_outbound_record (created_at DESC);
COMMENT ON TABLE tb_asset_outbound_record IS '资产出库记录:每个世代一条,只新增与填写结束信息,不修改出库时间、不删除';
COMMENT ON COLUMN tb_asset_outbound_record.asset_type IS '资产类型:iot_card / device';
COMMENT ON COLUMN tb_asset_outbound_record.asset_identifier_snapshot IS '写入时的 ICCID / 虚拟号 / IMEI 快照';
COMMENT ON COLUMN tb_asset_outbound_record.generation IS '资产世代';
COMMENT ON COLUMN tb_asset_outbound_record.source IS '来源:order-首次购买套餐 exchange-换货新资产 backfill-历史回填';
COMMENT ON COLUMN tb_asset_outbound_record.ended_at IS '该世代结束时间(当前世代为空)';
COMMENT ON COLUMN tb_asset_outbound_record.end_reason IS '结束原因:exchange_return-换货回库';