feat: 实现单卡资产分配与回收功能
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m45s

- 新增单卡分配/回收 API(支持 ICCID 列表、号段范围、筛选条件三种选卡方式)
- 新增资产分配记录查询 API(支持多条件筛选和分页)
- 新增 AssetAllocationRecord 模型、Store、Service、Handler 完整实现
- 扩展 IotCardStore 新增批量更新、号段查询、筛选查询等方法
- 修复 GORM Callback 处理 slice 类型(BatchCreate)的问题
- 新增完整的单元测试和集成测试
- 同步 OpenSpec 规范并归档 change
This commit is contained in:
2026-01-24 15:46:15 +08:00
parent a924e63e68
commit 194078674a
33 changed files with 2785 additions and 92 deletions

View File

@@ -0,0 +1 @@
DROP TABLE IF EXISTS tb_asset_allocation_record;

View File

@@ -0,0 +1,47 @@
-- 创建资产分配记录表
-- 记录卡/设备在平台和代理商之间的流转历史
CREATE TABLE IF NOT EXISTS tb_asset_allocation_record (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMPTZ,
creator BIGINT,
updater BIGINT,
allocation_no VARCHAR(50) NOT NULL,
allocation_type VARCHAR(20) NOT NULL,
asset_type VARCHAR(20) NOT NULL,
asset_id BIGINT NOT NULL,
asset_identifier VARCHAR(50) NOT NULL,
from_owner_type VARCHAR(20),
from_owner_id BIGINT,
to_owner_type VARCHAR(20) NOT NULL,
to_owner_id BIGINT NOT NULL,
related_device_id BIGINT,
related_card_ids JSONB,
operator_id BIGINT NOT NULL,
remark TEXT
);
-- 创建索引(非唯一,同批次多条记录共用相同单号)
CREATE INDEX IF NOT EXISTS idx_asset_allocation_record_allocation_no ON tb_asset_allocation_record(allocation_no);
CREATE INDEX IF NOT EXISTS idx_asset_allocation_record_allocation_type ON tb_asset_allocation_record(allocation_type);
CREATE INDEX IF NOT EXISTS idx_asset_allocation_record_asset_type ON tb_asset_allocation_record(asset_type);
CREATE INDEX IF NOT EXISTS idx_asset_allocation_record_asset_id ON tb_asset_allocation_record(asset_id);
CREATE INDEX IF NOT EXISTS idx_asset_allocation_record_deleted_at ON tb_asset_allocation_record(deleted_at);
-- 添加表注释
COMMENT ON TABLE tb_asset_allocation_record IS '资产分配记录表';
COMMENT ON COLUMN tb_asset_allocation_record.allocation_no IS '分配单号(同批次相同)';
COMMENT ON COLUMN tb_asset_allocation_record.allocation_type IS '分配类型 allocate=分配 recall=回收';
COMMENT ON COLUMN tb_asset_allocation_record.asset_type IS '资产类型 iot_card=物联网卡 device=设备';
COMMENT ON COLUMN tb_asset_allocation_record.asset_id IS '资产ID';
COMMENT ON COLUMN tb_asset_allocation_record.asset_identifier IS '资产标识符ICCID或设备号';
COMMENT ON COLUMN tb_asset_allocation_record.from_owner_type IS '来源所有者类型 platform=平台 shop=店铺';
COMMENT ON COLUMN tb_asset_allocation_record.from_owner_id IS '来源所有者ID';
COMMENT ON COLUMN tb_asset_allocation_record.to_owner_type IS '目标所有者类型 platform=平台 shop=店铺';
COMMENT ON COLUMN tb_asset_allocation_record.to_owner_id IS '目标所有者ID';
COMMENT ON COLUMN tb_asset_allocation_record.related_device_id IS '关联设备ID设备分配时使用';
COMMENT ON COLUMN tb_asset_allocation_record.related_card_ids IS '关联卡ID列表设备分配时使用';
COMMENT ON COLUMN tb_asset_allocation_record.operator_id IS '操作人ID';
COMMENT ON COLUMN tb_asset_allocation_record.remark IS '备注';