From 989d89579b97dd1b0e3b6185de6ffa31866dc718 Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Mon, 23 Mar 2026 10:30:44 +0800 Subject: [PATCH] sql --- update.sql | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 156 insertions(+), 4 deletions(-) diff --git a/update.sql b/update.sql index 21dc323..bf02f6c 100644 --- a/update.sql +++ b/update.sql @@ -129,8 +129,8 @@ COMMENT ON COLUMN assets_asset.tenant_module_type IS '租户模块类型'; -- 资产SKU表 CREATE TABLE IF NOT EXISTS assets_asset_sku ( -- 基础字段(继承 SQLBaseDO 通用字段) - id BIGINT PRIMARY KEY, -- 主键ID(非自增) - creator VARCHAR(64) NOT NULL, + id BIGINT PRIMARY KEY, -- 主键ID(非自增) + creator VARCHAR(64) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updater VARCHAR(64) NOT NULL, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -157,7 +157,7 @@ CREATE TABLE IF NOT EXISTS assets_asset_sku ( -- 外键约束(可选,根据业务需要启用) CONSTRAINT fk_sku_asset_id FOREIGN KEY (asset_id) REFERENCES assets_asset(id) ON DELETE CASCADE, CONSTRAINT fk_sku_category_id FOREIGN KEY (category_id) REFERENCES assets_category(id) ON DELETE SET DEFAULT - ); +); -- 索引(根据查询场景优化) CREATE INDEX idx_sku_asset_id ON assets_asset_sku(asset_id); @@ -192,4 +192,156 @@ COMMENT ON COLUMN assets_asset_sku.category_id IS '分类ID'; COMMENT ON COLUMN assets_asset_sku.category_path IS '分类路径'; COMMENT ON COLUMN assets_asset_sku.tenant_module_type IS '租户模块类型'; ---------------------pgsql创建assets_sku表语句--------------------------- +--------------------pgsql创建assets_asset_sku表语句--------------------------- + +--------------------pgsql创建assets_stock_batch表语句--------------------------- +-- 库存批次表(批次管理模式专用) +CREATE TABLE IF NOT EXISTS assets_stock_batch ( + -- 基础字段(继承 SQLBaseDO 通用字段) + id BIGINT PRIMARY KEY, -- 主键ID(非自增) + creator VARCHAR(64) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater VARCHAR(64) NOT NULL, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at timestamp(6), + + -- 核心关联字段 + asset_id BIGINT NOT NULL, -- 关联资产ID + asset_sku_id BIGINT NOT NULL, -- 关联资产SKU ID + batch_no VARCHAR(64) NOT NULL, -- 批次号 + batch_qty INT NOT NULL DEFAULT 0, -- 批次总数量(入库后不可变) + available_qty INT NOT NULL DEFAULT 0, -- 可用数量(实时变化) + +-- 批次元数据 + metadata JSONB NOT NULL DEFAULT '[]'::JSONB, -- 其他元数据:[]map[string]interface{} + +-- 状态 + status SMALLINT NOT NULL DEFAULT 1, + +-- 订单关联 + order_id BIGINT DEFAULT 0, -- 关联订单ID(如果有) + +-- 渠道分配信息 + assigned_channel VARCHAR(64) DEFAULT '', -- 分配的销售渠道 + channel_sku VARCHAR(128) DEFAULT '', -- 渠道商品SKU + channel_metadata JSONB DEFAULT '{}'::JSONB, -- 渠道专属数据:map[string]interface{} + allocated_at TIMESTAMP, -- 分配时间(可为空) + +-- 临期管理 + production_date TIMESTAMP, -- 生产日期(可为空) + expiry_date TIMESTAMP, -- 过期日期(可为空) + expiry_warning_date TIMESTAMP, -- 临期预警时间(可为空) + category_path VARCHAR(512) DEFAULT '', -- 分类路径 + +-- 外键约束(可选,根据业务需要启用) + CONSTRAINT fk_batch_asset_id FOREIGN KEY (asset_id) REFERENCES assets_asset(id) ON DELETE CASCADE, + CONSTRAINT fk_batch_asset_sku_id FOREIGN KEY (asset_sku_id) REFERENCES assets_asset_sku(id) ON DELETE CASCADE +); + +-- 索引(针对高频查询场景优化) +CREATE INDEX idx_batch_asset_id ON assets_stock_batch(asset_id); +CREATE INDEX idx_batch_asset_sku_id ON assets_stock_batch(asset_sku_id); +CREATE INDEX idx_batch_batch_no ON assets_stock_batch(batch_no); -- 批次号查询索引 +CREATE INDEX idx_batch_status ON assets_stock_batch(status); -- 状态筛选索引 +CREATE INDEX idx_batch_order_id ON assets_stock_batch(order_id); -- 订单关联查询索引 +CREATE INDEX idx_batch_expiry_date ON assets_stock_batch(expiry_date); -- 临期/过期筛选索引 +CREATE INDEX idx_batch_assigned_channel ON assets_stock_batch(assigned_channel); -- 渠道筛选索引 +CREATE INDEX idx_batch_deleted_at ON assets_stock_batch(deleted_at); -- 软删字段索引 + +-- 唯一索引(保证批次号+SKU唯一性,避免重复批次) +CREATE UNIQUE INDEX uk_batch_sku_batch_no ON assets_stock_batch(asset_sku_id, batch_no) WHERE deleted_at IS NULL; + +-- 表和字段注释 +COMMENT ON TABLE assets_stock_batch IS '库存批次表(批次管理模式专用)'; +COMMENT ON COLUMN assets_stock_batch.id IS '主键ID(非自增)'; +COMMENT ON COLUMN assets_stock_batch.creator IS '创建人'; +COMMENT ON COLUMN assets_stock_batch.created_at IS '创建时间'; +COMMENT ON COLUMN assets_stock_batch.updater IS '更新人'; +COMMENT ON COLUMN assets_stock_batch.updated_at IS '更新时间'; +COMMENT ON COLUMN assets_stock_batch.deleted_at IS '删除时间(软删)'; +COMMENT ON COLUMN assets_stock_batch.asset_id IS '关联资产ID'; +COMMENT ON COLUMN assets_stock_batch.asset_sku_id IS '关联资产SKU ID'; +COMMENT ON COLUMN assets_stock_batch.batch_no IS '批次号'; +COMMENT ON COLUMN assets_stock_batch.batch_qty IS '批次总数量(入库后不可变)'; +COMMENT ON COLUMN assets_stock_batch.available_qty IS '可用数量(实时变化)'; +COMMENT ON COLUMN assets_stock_batch.metadata IS '其他元数据,结构为[]map[string]interface{}'; +COMMENT ON COLUMN assets_stock_batch.status IS '批次状态(1-活跃/2-临期/3-过期/4-售罄)'; +COMMENT ON COLUMN assets_stock_batch.order_id IS '关联订单ID(如果有)'; +COMMENT ON COLUMN assets_stock_batch.assigned_channel IS '分配的销售渠道'; +COMMENT ON COLUMN assets_stock_batch.channel_sku IS '渠道商品SKU'; +COMMENT ON COLUMN assets_stock_batch.channel_metadata IS '渠道专属数据,结构为map[string]interface{}'; +COMMENT ON COLUMN assets_stock_batch.allocated_at IS '分配时间'; +COMMENT ON COLUMN assets_stock_batch.production_date IS '生产日期'; +COMMENT ON COLUMN assets_stock_batch.expiry_date IS '过期日期'; +COMMENT ON COLUMN assets_stock_batch.expiry_warning_date IS '临期预警时间(有过期日期时建议填写)'; +COMMENT ON COLUMN assets_stock_batch.category_path IS '分类路径'; + +--------------------pgsql创建assets_stock_batch表语句--------------------------- + +--------------------pgsql创建assets_stock_details表语句--------------------------- +-- 库存明细表(单件商品独立ID,适配区块链虚拟资产场景) +CREATE TABLE IF NOT EXISTS assets_stock_details ( + -- 基础字段(继承 SQLBaseDO 通用字段) + id BIGINT PRIMARY KEY, -- 主键ID(非自增,单件商品独立ID,适配区块链资产标识) + creator VARCHAR(64) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updater VARCHAR(64) NOT NULL, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at timestamp(6), + + -- 核心关联字段 + asset_id BIGINT NOT NULL, -- 关联资产ID + asset_sku_id BIGINT NOT NULL, -- 关联资产SKU ID + status SMALLINT NOT NULL DEFAULT 1, + order_id BIGINT DEFAULT 0, -- 关联订单ID(如果有) + lock_expire TIMESTAMP, -- 锁定过期时间(可为空) + metadata JSONB NOT NULL DEFAULT '[]'::JSONB, -- 其他元数据:[]map[string]interface{} + token_id VARCHAR(256) DEFAULT '', -- 区块链TokenID(如果有) + +-- 渠道分配信息 + assigned_channel VARCHAR(64) DEFAULT '', -- 分配的销售渠道 + channel_sku VARCHAR(128) DEFAULT '', -- 渠道商品SKU + channel_metadata JSONB DEFAULT '{}'::JSONB, -- 渠道专属数据:map[string]interface{} + allocated_at TIMESTAMP, -- 分配时间(可为空) + category_path VARCHAR(512) DEFAULT '', -- 分类路径 + +-- 外键约束(可选,根据业务需要启用) + CONSTRAINT fk_details_asset_id FOREIGN KEY (asset_id) REFERENCES assets_asset(id) ON DELETE CASCADE, + CONSTRAINT fk_details_asset_sku_id FOREIGN KEY (asset_sku_id) REFERENCES assets_asset_sku(id) ON DELETE CASCADE +); + +-- 索引(针对高频查询+区块链场景优化) +CREATE INDEX idx_details_asset_id ON assets_stock_details(asset_id); +CREATE INDEX idx_details_asset_sku_id ON assets_stock_details(asset_sku_id); +CREATE INDEX idx_details_status ON assets_stock_details(status); -- 库存状态筛选(核心查询维度) +CREATE INDEX idx_details_order_id ON assets_stock_details(order_id); -- 订单关联查询 +CREATE INDEX idx_details_lock_expire ON assets_stock_details(lock_expire); -- 锁定过期时间筛选(解锁/清理锁定库存) +CREATE INDEX idx_details_token_id ON assets_stock_details(token_id); -- 区块链TokenID查询(核心索引) +CREATE INDEX idx_details_assigned_channel ON assets_stock_details(assigned_channel); -- 渠道筛选 +CREATE INDEX idx_details_deleted_at ON assets_stock_details(deleted_at); -- 软删字段索引 + +-- 唯一索引(保证区块链TokenID唯一性,避免重复资产) +CREATE UNIQUE INDEX uk_details_token_id ON assets_stock_details(token_id) WHERE deleted_at IS NULL AND token_id != ''; + +-- 表和字段注释 +COMMENT ON TABLE assets_stock_details IS '库存明细表(单件商品独立ID,用于区块链虚拟资产管理)'; +COMMENT ON COLUMN assets_stock_details.id IS '主键ID(非自增,单件商品独立唯一标识)'; +COMMENT ON COLUMN assets_stock_details.creator IS '创建人'; +COMMENT ON COLUMN assets_stock_details.created_at IS '创建时间'; +COMMENT ON COLUMN assets_stock_details.updater IS '更新人'; +COMMENT ON COLUMN assets_stock_details.updated_at IS '更新时间'; +COMMENT ON COLUMN assets_stock_details.deleted_at IS '删除时间(软删)'; +COMMENT ON COLUMN assets_stock_details.asset_id IS '关联资产ID'; +COMMENT ON COLUMN assets_stock_details.asset_sku_id IS '关联资产SKU ID'; +COMMENT ON COLUMN assets_stock_details.status IS '库存状态(1-可用/2-已售出/3-预留/4-锁定)'; +COMMENT ON COLUMN assets_stock_details.order_id IS '关联订单ID(如果有)'; +COMMENT ON COLUMN assets_stock_details.lock_expire IS '锁定过期时间(锁定状态下有效)'; +COMMENT ON COLUMN assets_stock_details.metadata IS '其他元数据,结构为[]map[string]interface{}'; +COMMENT ON COLUMN assets_stock_details.token_id IS '区块链TokenID(虚拟资产唯一标识,可为空)'; +COMMENT ON COLUMN assets_stock_details.assigned_channel IS '分配的销售渠道'; +COMMENT ON COLUMN assets_stock_details.channel_sku IS '渠道商品SKU'; +COMMENT ON COLUMN assets_stock_details.channel_metadata IS '渠道专属数据,结构为map[string]interface{}'; +COMMENT ON COLUMN assets_stock_details.allocated_at IS '分配时间'; +COMMENT ON COLUMN assets_stock_details.category_path IS '分类路径'; + +--------------------pgsql创建assets_stock_details表语句--------------------------- \ No newline at end of file