-----------shop-user-trade 2026-08-28 12:00:00-------------- --------------------pgsql创建knapsack表语句--------------------------- -- 背包表 CREATE TABLE IF NOT EXISTS knapsack ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 背包核心字段 user_id BIGINT NOT NULL, asset_id BIGINT NOT NULL, asset_name VARCHAR(255) NOT NULL DEFAULT '', sku_id BIGINT NOT NULL DEFAULT 0, sku_name VARCHAR(255) NOT NULL DEFAULT '', spec_values JSONB, image_url VARCHAR(512) NOT NULL DEFAULT '', type VARCHAR(32) NOT NULL, stock_detail_id BIGINT NOT NULL DEFAULT 0, batch_id BIGINT NOT NULL DEFAULT 0, batch_no VARCHAR(64) NOT NULL DEFAULT '', stock_mode SMALLINT NOT NULL DEFAULT 1, status SMALLINT NOT NULL DEFAULT 1, used_at BIGINT, expire_at BIGINT, physical_asset_config JSONB, service_asset_config JSONB, virtual_asset_config JSONB ); -- 索引 CREATE INDEX IF NOT EXISTS idx_knapsack_user_id ON knapsack(user_id); CREATE INDEX IF NOT EXISTS idx_knapsack_asset_id ON knapsack(asset_id); CREATE INDEX IF NOT EXISTS idx_knapsack_status ON knapsack(status); CREATE INDEX IF NOT EXISTS idx_knapsack_tenant_id ON knapsack(tenant_id); -- 表和字段注释 COMMENT ON TABLE knapsack IS '背包表'; COMMENT ON COLUMN knapsack.id IS '主键ID(非自增)'; COMMENT ON COLUMN knapsack.tenant_id IS '租户ID'; COMMENT ON COLUMN knapsack.creator IS '创建人'; COMMENT ON COLUMN knapsack.created_at IS '创建时间'; COMMENT ON COLUMN knapsack.updater IS '更新人'; COMMENT ON COLUMN knapsack.updated_at IS '更新时间'; COMMENT ON COLUMN knapsack.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN knapsack.user_id IS '用户ID'; COMMENT ON COLUMN knapsack.asset_id IS '资产ID'; COMMENT ON COLUMN knapsack.asset_name IS '资产名称'; COMMENT ON COLUMN knapsack.sku_id IS 'SKU ID'; COMMENT ON COLUMN knapsack.sku_name IS 'SKU名称'; COMMENT ON COLUMN knapsack.spec_values IS '规格值(JSONB)'; COMMENT ON COLUMN knapsack.image_url IS '资产图片URL'; COMMENT ON COLUMN knapsack.type IS '资产类型:physical/virtual/service'; COMMENT ON COLUMN knapsack.stock_detail_id IS '库存明细ID(明细模式)'; COMMENT ON COLUMN knapsack.batch_id IS '批次ID(批次模式)'; COMMENT ON COLUMN knapsack.batch_no IS '批次号(批次模式)'; COMMENT ON COLUMN knapsack.stock_mode IS '库存管理模式:1-明细模式,2-批次模式'; COMMENT ON COLUMN knapsack.status IS '状态:0禁用/1启用/2已使用/3已上架/4已过期'; COMMENT ON COLUMN knapsack.used_at IS '使用时间(时间戳)'; COMMENT ON COLUMN knapsack.expire_at IS '过期时间(时间戳)'; COMMENT ON COLUMN knapsack.physical_asset_config IS '实物资产配置(JSONB)'; COMMENT ON COLUMN knapsack.service_asset_config IS '服务资产配置(JSONB)'; COMMENT ON COLUMN knapsack.virtual_asset_config IS '虚拟资产配置(JSONB)'; --------------------pgsql创建knapsack表语句--------------------------- --------------------pgsql创建knapsack_log表语句--------------------------- -- 背包日志表 CREATE TABLE IF NOT EXISTS knapsack_log ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 日志核心字段 knapsack_id BIGINT NOT NULL, user_id BIGINT NOT NULL, action VARCHAR(32) NOT NULL, operator_id BIGINT NOT NULL DEFAULT 0, operator_name VARCHAR(64) NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '' ); -- 索引 CREATE INDEX IF NOT EXISTS idx_knapsack_log_knapsack_id ON knapsack_log(knapsack_id); -- 表和字段注释 COMMENT ON TABLE knapsack_log IS '背包日志表'; COMMENT ON COLUMN knapsack_log.id IS '主键ID(非自增)'; COMMENT ON COLUMN knapsack_log.tenant_id IS '租户ID'; COMMENT ON COLUMN knapsack_log.creator IS '创建人'; COMMENT ON COLUMN knapsack_log.created_at IS '创建时间'; COMMENT ON COLUMN knapsack_log.updater IS '更新人'; COMMENT ON COLUMN knapsack_log.updated_at IS '更新时间'; COMMENT ON COLUMN knapsack_log.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN knapsack_log.knapsack_id IS '背包项ID'; COMMENT ON COLUMN knapsack_log.user_id IS '用户ID'; COMMENT ON COLUMN knapsack_log.action IS '操作类型'; COMMENT ON COLUMN knapsack_log.operator_id IS '操作者ID'; COMMENT ON COLUMN knapsack_log.operator_name IS '操作者名称'; COMMENT ON COLUMN knapsack_log.description IS '操作描述'; --------------------pgsql创建knapsack_log表语句--------------------------- --------------------pgsql创建market表语句--------------------------- -- 市场表 CREATE TABLE IF NOT EXISTS market ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 市场核心字段 knapsack_id BIGINT NOT NULL, user_id BIGINT NOT NULL, asset_id BIGINT NOT NULL, asset_name VARCHAR(255) NOT NULL DEFAULT '', sku_id BIGINT NOT NULL DEFAULT 0, sku_name VARCHAR(255) NOT NULL DEFAULT '', image_url VARCHAR(512) NOT NULL DEFAULT '', type VARCHAR(32) NOT NULL, stock_detail_id BIGINT NOT NULL DEFAULT 0, batch_id BIGINT NOT NULL DEFAULT 0, batch_no VARCHAR(64) NOT NULL DEFAULT '', stock_mode SMALLINT NOT NULL DEFAULT 1, price BIGINT NOT NULL DEFAULT 0, original_price BIGINT NOT NULL DEFAULT 0, description TEXT NOT NULL DEFAULT '', status SMALLINT NOT NULL DEFAULT 1, list_expire_at BIGINT ); -- 索引 CREATE INDEX IF NOT EXISTS idx_market_user_id ON market(user_id); CREATE INDEX IF NOT EXISTS idx_market_knapsack_id ON market(knapsack_id); CREATE INDEX IF NOT EXISTS idx_market_status ON market(status); CREATE INDEX IF NOT EXISTS idx_market_tenant_id ON market(tenant_id); -- 表和字段注释 COMMENT ON TABLE market IS '市场表'; COMMENT ON COLUMN market.id IS '主键ID(非自增)'; COMMENT ON COLUMN market.tenant_id IS '租户ID'; COMMENT ON COLUMN market.creator IS '创建人'; COMMENT ON COLUMN market.created_at IS '创建时间'; COMMENT ON COLUMN market.updater IS '更新人'; COMMENT ON COLUMN market.updated_at IS '更新时间'; COMMENT ON COLUMN market.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN market.knapsack_id IS '背包项ID'; COMMENT ON COLUMN market.user_id IS '卖家用户ID'; COMMENT ON COLUMN market.asset_id IS '资产ID'; COMMENT ON COLUMN market.asset_name IS '资产名称'; COMMENT ON COLUMN market.sku_id IS 'SKU ID'; COMMENT ON COLUMN market.sku_name IS 'SKU名称'; COMMENT ON COLUMN market.image_url IS '资产图片URL'; COMMENT ON COLUMN market.type IS '资产类型:physical/virtual/service'; COMMENT ON COLUMN market.stock_detail_id IS '库存明细ID(明细模式)'; COMMENT ON COLUMN market.batch_id IS '批次ID(批次模式)'; COMMENT ON COLUMN market.batch_no IS '批次号(批次模式)'; COMMENT ON COLUMN market.stock_mode IS '库存管理模式:1-明细模式,2-批次模式'; COMMENT ON COLUMN market.price IS '售价(分)'; COMMENT ON COLUMN market.original_price IS '原价(分)'; COMMENT ON COLUMN market.description IS '描述信息'; COMMENT ON COLUMN market.status IS '状态:1活跃/2已售/3下架/4过期'; COMMENT ON COLUMN market.list_expire_at IS '上架过期时间(时间戳)'; --------------------pgsql创建market表语句--------------------------- --------------------pgsql创建market_log表语句--------------------------- -- 市场日志表 CREATE TABLE IF NOT EXISTS market_log ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 日志核心字段 market_id BIGINT NOT NULL, knapsack_id BIGINT NOT NULL, user_id BIGINT NOT NULL, action VARCHAR(32) NOT NULL, operator_id BIGINT NOT NULL DEFAULT 0, operator_name VARCHAR(64) NOT NULL DEFAULT '', description TEXT NOT NULL DEFAULT '' ); -- 索引 CREATE INDEX IF NOT EXISTS idx_market_log_market_id ON market_log(market_id); -- 表和字段注释 COMMENT ON TABLE market_log IS '市场日志表'; COMMENT ON COLUMN market_log.id IS '主键ID(非自增)'; COMMENT ON COLUMN market_log.tenant_id IS '租户ID'; COMMENT ON COLUMN market_log.creator IS '创建人'; COMMENT ON COLUMN market_log.created_at IS '创建时间'; COMMENT ON COLUMN market_log.updater IS '更新人'; COMMENT ON COLUMN market_log.updated_at IS '更新时间'; COMMENT ON COLUMN market_log.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN market_log.market_id IS '市场物品ID'; COMMENT ON COLUMN market_log.knapsack_id IS '背包项ID'; COMMENT ON COLUMN market_log.user_id IS '用户ID'; COMMENT ON COLUMN market_log.action IS '操作类型'; COMMENT ON COLUMN market_log.operator_id IS '操作者ID'; COMMENT ON COLUMN market_log.operator_name IS '操作者名称'; COMMENT ON COLUMN market_log.description IS '操作描述'; --------------------pgsql创建market_log表语句--------------------------- --------------------pgsql创建wallet_account表语句--------------------------- -- 钱包表 CREATE TABLE IF NOT EXISTS wallet_account ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 钱包核心字段 user_id BIGINT NOT NULL, user_name VARCHAR(64) NOT NULL DEFAULT '', balance NUMERIC(15,2) NOT NULL DEFAULT 0, currency VARCHAR(16) NOT NULL DEFAULT 'CNY', status SMALLINT NOT NULL DEFAULT 1 ); -- 索引 CREATE UNIQUE INDEX IF NOT EXISTS uk_account_user_id ON wallet_account(user_id); CREATE INDEX IF NOT EXISTS idx_account_user_id ON wallet_account(user_id); CREATE INDEX IF NOT EXISTS idx_account_tenant_id ON wallet_account(tenant_id); -- 表和字段注释 COMMENT ON TABLE wallet_account IS '钱包表'; COMMENT ON COLUMN wallet_account.id IS '主键ID(非自增)'; COMMENT ON COLUMN wallet_account.tenant_id IS '租户ID'; COMMENT ON COLUMN wallet_account.creator IS '创建人'; COMMENT ON COLUMN wallet_account.created_at IS '创建时间'; COMMENT ON COLUMN wallet_account.updater IS '更新人'; COMMENT ON COLUMN wallet_account.updated_at IS '更新时间'; COMMENT ON COLUMN wallet_account.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN wallet_account.user_id IS '用户ID(唯一)'; COMMENT ON COLUMN wallet_account.user_name IS '用户名'; COMMENT ON COLUMN wallet_account.balance IS '可用余额(元,保留2位小数),可为负=欠费'; COMMENT ON COLUMN wallet_account.currency IS '货币类型:CNY-人民币'; COMMENT ON COLUMN wallet_account.status IS '状态:1启用/0禁用/-1冻结'; --------------------pgsql创建wallet_account表语句--------------------------- --------------------pgsql创建wallet_account_log表语句--------------------------- -- 钱包日志表 CREATE TABLE IF NOT EXISTS wallet_account_log ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 流水核心字段 user_id BIGINT NOT NULL, wallet_id BIGINT NOT NULL, order_no VARCHAR(64) NOT NULL DEFAULT '', transaction_no VARCHAR(64) NOT NULL DEFAULT '', type VARCHAR(16) NOT NULL, amount NUMERIC(15,2) NOT NULL DEFAULT 0, balance_before NUMERIC(15,2) NOT NULL DEFAULT 0, balance_after NUMERIC(15,2) NOT NULL DEFAULT 0, currency VARCHAR(16) NOT NULL DEFAULT 'CNY', description TEXT NOT NULL DEFAULT '', extra_data JSONB ); -- 索引 CREATE INDEX IF NOT EXISTS idx_account_log_user_id ON wallet_account_log(user_id); CREATE INDEX IF NOT EXISTS idx_account_log_wallet_id ON wallet_account_log(wallet_id); CREATE INDEX IF NOT EXISTS idx_account_log_order_no ON wallet_account_log(order_no); CREATE UNIQUE INDEX IF NOT EXISTS uk_account_log_transaction ON wallet_account_log(transaction_no) WHERE transaction_no <> ''; -- 表和字段注释 COMMENT ON TABLE wallet_account_log IS '钱包日志表'; COMMENT ON COLUMN wallet_account_log.id IS '主键ID(非自增)'; COMMENT ON COLUMN wallet_account_log.tenant_id IS '租户ID'; COMMENT ON COLUMN wallet_account_log.creator IS '创建人'; COMMENT ON COLUMN wallet_account_log.created_at IS '创建时间'; COMMENT ON COLUMN wallet_account_log.updater IS '更新人'; COMMENT ON COLUMN wallet_account_log.updated_at IS '更新时间'; COMMENT ON COLUMN wallet_account_log.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN wallet_account_log.user_id IS '用户ID'; COMMENT ON COLUMN wallet_account_log.wallet_id IS '钱包ID'; COMMENT ON COLUMN wallet_account_log.order_no IS '业务单据号(计费单号/充值单号)'; COMMENT ON COLUMN wallet_account_log.transaction_no IS '账务流水号(唯一,幂等)'; COMMENT ON COLUMN wallet_account_log.type IS '账务类型:income/expense'; COMMENT ON COLUMN wallet_account_log.amount IS '本次变动金额(元,保留2位小数,正数)'; COMMENT ON COLUMN wallet_account_log.balance_before IS '可用余额变动前(元)'; COMMENT ON COLUMN wallet_account_log.balance_after IS '可用余额变动后(元)'; COMMENT ON COLUMN wallet_account_log.currency IS '货币类型'; COMMENT ON COLUMN wallet_account_log.description IS '描述'; COMMENT ON COLUMN wallet_account_log.extra_data IS '额外数据(JSONB)'; --------------------pgsql创建wallet_account_log表语句--------------------------- --------------------pgsql创建wallet_pricing_config表语句--------------------------- -- 计价配置表(费率全 DB 配置,改价/加档只改 rules,代码不写死金额) CREATE TABLE IF NOT EXISTS wallet_pricing_config ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 计价配置核心字段 subject_type VARCHAR(16) NOT NULL, -- workflow | model | business subject_id VARCHAR(64) NOT NULL, -- workflow | 模型ID | 业务模块标识 rules JSONB NOT NULL DEFAULT '{}', -- 费率JSON对象(见设计§4,rules 自描述) min_balance NUMERIC(15,2) NOT NULL DEFAULT 0, currency VARCHAR(16) NOT NULL DEFAULT 'CNY', enabled SMALLINT NOT NULL DEFAULT 1 ); -- 索引 CREATE UNIQUE INDEX IF NOT EXISTS uk_pricing_config_subject ON wallet_pricing_config(subject_type, subject_id); CREATE INDEX IF NOT EXISTS idx_pricing_config_enabled ON wallet_pricing_config(enabled); -- 表和字段注释 COMMENT ON TABLE wallet_pricing_config IS '计价配置表(计价对象固定枚举,费率全 DB 配置)'; COMMENT ON COLUMN wallet_pricing_config.id IS '主键ID(非自增)'; COMMENT ON COLUMN wallet_pricing_config.tenant_id IS '租户ID'; COMMENT ON COLUMN wallet_pricing_config.creator IS '创建人'; COMMENT ON COLUMN wallet_pricing_config.created_at IS '创建时间'; COMMENT ON COLUMN wallet_pricing_config.updater IS '更新人'; COMMENT ON COLUMN wallet_pricing_config.updated_at IS '更新时间'; COMMENT ON COLUMN wallet_pricing_config.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN wallet_pricing_config.subject_type IS '计价对象类型:workflow/model/business'; COMMENT ON COLUMN wallet_pricing_config.subject_id IS '计价对象ID(workflow/模型ID/业务模块标识)'; COMMENT ON COLUMN wallet_pricing_config.rules IS '费率JSON(workflow三模式容器/model自适应/business周期)'; COMMENT ON COLUMN wallet_pricing_config.min_balance IS '门禁:调用前可用余额须>=该值(元),0=不校验'; COMMENT ON COLUMN wallet_pricing_config.currency IS '货币类型'; COMMENT ON COLUMN wallet_pricing_config.enabled IS '1启用 0停用'; --------------------pgsql创建wallet_pricing_config表语句--------------------------- --------------------pgsql创建wallet_charge_order表语句--------------------------- -- 计费单表(一次计价调用 = 一张计费单,幂等键 subject_type + subject_id + biz_order_no) CREATE TABLE IF NOT EXISTS wallet_charge_order ( -- 基础字段(继承 SQLBaseCol 通用字段,与 SQLBaseDO 对齐) id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL DEFAULT 0, 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), -- 计费单核心字段 subject_type VARCHAR(16) NOT NULL, subject_id VARCHAR(64) NOT NULL, biz_order_no VARCHAR(128) NOT NULL, user_id BIGINT NOT NULL, charge_mode VARCHAR(32) NOT NULL, status SMALLINT NOT NULL DEFAULT 1, actual_amount NUMERIC(15,2) NOT NULL DEFAULT 0, usage JSONB NOT NULL DEFAULT '{}', rule_snapshot JSONB NOT NULL DEFAULT '{}', settle_time TIMESTAMP ); -- 索引 CREATE UNIQUE INDEX IF NOT EXISTS uk_charge_order_subject ON wallet_charge_order(subject_type, subject_id, biz_order_no); CREATE INDEX IF NOT EXISTS idx_charge_order_user_id ON wallet_charge_order(user_id); CREATE INDEX IF NOT EXISTS idx_charge_order_status ON wallet_charge_order(status); -- 表和字段注释 COMMENT ON TABLE wallet_charge_order IS '计费单表(一次计价调用 = 一张计费单)'; COMMENT ON COLUMN wallet_charge_order.id IS '主键ID(非自增)'; COMMENT ON COLUMN wallet_charge_order.tenant_id IS '租户ID'; COMMENT ON COLUMN wallet_charge_order.creator IS '创建人'; COMMENT ON COLUMN wallet_charge_order.created_at IS '创建时间'; COMMENT ON COLUMN wallet_charge_order.updater IS '更新人'; COMMENT ON COLUMN wallet_charge_order.updated_at IS '更新时间'; COMMENT ON COLUMN wallet_charge_order.deleted_at IS '删除时间(软删)'; COMMENT ON COLUMN wallet_charge_order.subject_type IS '计价对象类型'; COMMENT ON COLUMN wallet_charge_order.subject_id IS '计价对象ID'; COMMENT ON COLUMN wallet_charge_order.biz_order_no IS '业务单据号(幂等键,如工作流 execId)'; COMMENT ON COLUMN wallet_charge_order.user_id IS '扣费用户ID'; COMMENT ON COLUMN wallet_charge_order.charge_mode IS '计费方式(建单快照)'; COMMENT ON COLUMN wallet_charge_order.status IS '状态:1已建单 2已结算 3已失败'; COMMENT ON COLUMN wallet_charge_order.actual_amount IS '实收金额(元,保留2位小数)'; COMMENT ON COLUMN wallet_charge_order.usage IS '实际用量JSON'; COMMENT ON COLUMN wallet_charge_order.rule_snapshot IS '结算用费率快照JSON(防改价影响在途单)'; COMMENT ON COLUMN wallet_charge_order.settle_time IS '结算时间'; --------------------pgsql创建wallet_charge_order表语句---------------------------