feat(pricing): init.sql 建表 subject 化 + config.yml 加 model-gateway 服务名

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-28 18:11:34 +08:00
co-authored by Claude
parent 27bde0ee5b
commit 42ff4baac0
2 changed files with 410 additions and 122 deletions
+28 -3
View File
@@ -46,10 +46,31 @@ database:
updatedAt: "updated_at"
deletedAt: "deleted_at"
timeMaintainDisabled: false
wallet:
- type: "pgsql"
host: "localhost"
port: "5432"
user: "postgres"
pass: "123456"
name: "wallet"
prefix: "wallet_" # (可选)表名前缀
role: "master"
debug: true # (可选)开启调试模式
dryRun: false # (可选)ORM空跑(只读不写)
charset: "utf8" # (可选)数据库编码(如: utf8mb4/utf8/gbk/gb2312),一般设置为utf8mb4。默认为utf8。
timezone: "Asia/Shanghai" # (可选)时区配置,例如:Local
maxIdle: 5 # (可选)连接池最大闲置的连接数(默认10)
maxOpen: 20 # (可选)连接池最大打开的连接数(默认无限制)
maxLifetime: "30s" # (可选)连接对象可重复使用的时间长度(默认30秒)
maxIdleConnTime: "30s" # (可选,v2.10新增)连接池中空闲连接的最大生存时间(默认30秒)。可以通过配置文件或SetConnMaxIdleTime方法设置,避免长时间空闲连接占用资源。
createdAt: "created_at" # (可选)自动创建时间字段名称
updatedAt: "updated_at" # (可选)自动更新时间字段名称
deletedAt: "deleted_at" # (可选)软删除时间字段名称
timeMaintainDisabled: false # (可选)是否完全关闭时间更新特性,为true时CreatedAt/UpdatedAt/DeletedAt都将失效
redis:
default:
address: 116.204.74.41:6379
address: localhost:6379
db: 0
idleTimeout: "60s"
maxConnLifetime: "90s"
@@ -60,7 +81,11 @@ redis:
maxActive: 100
consul:
address: 116.204.74.41:8500
address: localhost:8500
jaeger:
addr: 116.204.74.41:4318
addr: localhost:4318
# pricing 计价模块
pricing:
modelGatewayService: "model-gateway" # model-gateway consul 服务名(枚举接口拉系统模型用)
+382 -119
View File
@@ -1,164 +1,427 @@
-- shop_user_trade 数据库初始化脚本
-----------shop-user-trade 2026-08-28 12:00:00--------------
--------------------pgsql创建knapsack表语句---------------------------
-- 背包表
CREATE TABLE IF NOT EXISTS knapsack (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
-- 基础字段(继承 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,
-- 背包核心字段
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
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 (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
-- 基础字段(继承 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 ''
-- 日志核心字段
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 (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
-- 基础字段(继承 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,
-- 市场核心字段
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 (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
-- 基础字段(继承 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 ''
-- 日志核心字段
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);
-- 钱包
CREATE TABLE IF NOT EXISTS wallet (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
-- 表和字段注释
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 '操作描述';
user_id BIGINT NOT NULL UNIQUE,
balance BIGINT NOT NULL DEFAULT 0,
currency VARCHAR(16) NOT NULL DEFAULT 'CNY',
status SMALLINT NOT NULL DEFAULT 1,
version BIGINT NOT NULL DEFAULT 1
--------------------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,
version BIGINT NOT NULL DEFAULT 1
);
CREATE INDEX IF NOT EXISTS idx_wallet_user_id ON wallet(user_id);
CREATE INDEX IF NOT EXISTS idx_wallet_tenant_id ON wallet(tenant_id);
-- 索引
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冻结';
COMMENT ON COLUMN wallet_account.version IS '乐观锁版本号';
--------------------pgsql创建wallet_account表语句---------------------------
--------------------pgsql创建wallet_account_log表语句---------------------------
-- 钱包日志表
CREATE TABLE IF NOT EXISTS wallet_log (
id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL DEFAULT 0,
creator VARCHAR(64) NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updater VARCHAR(64) NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
deleted_at TIMESTAMPTZ,
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
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 BIGINT NOT NULL DEFAULT 0,
balance_before BIGINT NOT NULL DEFAULT 0,
balance_after BIGINT NOT NULL DEFAULT 0,
currency VARCHAR(16) NOT NULL DEFAULT 'CNY',
description TEXT NOT NULL DEFAULT '',
extra_data JSONB
-- 流水核心字段
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_wallet_log_user_id ON wallet_log(user_id);
CREATE INDEX IF NOT EXISTS idx_wallet_log_wallet_id ON wallet_log(wallet_id);
CREATE INDEX IF NOT EXISTS idx_wallet_log_order_no ON wallet_log(order_no);
-- 索引
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创建pricing_config表语句---------------------------
-- 计价配置表(费率全 DB 配置,改价/加档只改 rules,代码不写死金额)
CREATE TABLE IF NOT EXISTS 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 TEXT NOT NULL, -- 费率JSON(见设计§4rules 自描述)
min_balance NUMERIC(15,2) NOT NULL DEFAULT 0,
currency VARCHAR(16) NOT NULL DEFAULT 'CNY',
enabled SMALLINT NOT NULL DEFAULT 1,
version BIGINT NOT NULL DEFAULT 1
);
-- 索引
CREATE UNIQUE INDEX IF NOT EXISTS uk_pricing_config_subject ON pricing_config(subject_type, subject_id);
CREATE INDEX IF NOT EXISTS idx_pricing_config_enabled ON pricing_config(enabled);
-- 表和字段注释
COMMENT ON TABLE pricing_config IS '计价配置表(计价对象固定枚举,费率全 DB 配置)';
COMMENT ON COLUMN pricing_config.id IS '主键ID(非自增)';
COMMENT ON COLUMN pricing_config.tenant_id IS '租户ID';
COMMENT ON COLUMN pricing_config.creator IS '创建人';
COMMENT ON COLUMN pricing_config.created_at IS '创建时间';
COMMENT ON COLUMN pricing_config.updater IS '更新人';
COMMENT ON COLUMN pricing_config.updated_at IS '更新时间';
COMMENT ON COLUMN pricing_config.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN pricing_config.subject_type IS '计价对象类型:workflow/model/business';
COMMENT ON COLUMN pricing_config.subject_id IS '计价对象IDworkflow/模型ID/业务模块标识)';
COMMENT ON COLUMN pricing_config.rules IS '费率JSONworkflow三模式容器/model自适应/business周期)';
COMMENT ON COLUMN pricing_config.min_balance IS '门禁:调用前可用余额须>=该值(元),0=不校验';
COMMENT ON COLUMN pricing_config.currency IS '货币类型';
COMMENT ON COLUMN pricing_config.enabled IS '1启用 0停用';
COMMENT ON COLUMN pricing_config.version IS '乐观锁版本号';
--------------------pgsql创建pricing_config表语句---------------------------
--------------------pgsql创建charge_order表语句---------------------------
-- 计费单表(一次计价调用 = 一张计费单,幂等键 subject_type + subject_id + biz_order_no
CREATE TABLE IF NOT EXISTS 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 TEXT NOT NULL DEFAULT '',
rule_snapshot TEXT NOT NULL DEFAULT '',
settle_time TIMESTAMP
);
-- 索引
CREATE UNIQUE INDEX IF NOT EXISTS uk_charge_order_subject ON charge_order(subject_type, subject_id, biz_order_no);
CREATE INDEX IF NOT EXISTS idx_charge_order_user_id ON charge_order(user_id);
CREATE INDEX IF NOT EXISTS idx_charge_order_status ON charge_order(status);
-- 表和字段注释
COMMENT ON TABLE charge_order IS '计费单表(一次计价调用 = 一张计费单)';
COMMENT ON COLUMN charge_order.id IS '主键ID(非自增)';
COMMENT ON COLUMN charge_order.tenant_id IS '租户ID';
COMMENT ON COLUMN charge_order.creator IS '创建人';
COMMENT ON COLUMN charge_order.created_at IS '创建时间';
COMMENT ON COLUMN charge_order.updater IS '更新人';
COMMENT ON COLUMN charge_order.updated_at IS '更新时间';
COMMENT ON COLUMN charge_order.deleted_at IS '删除时间(软删)';
COMMENT ON COLUMN charge_order.subject_type IS '计价对象类型';
COMMENT ON COLUMN charge_order.subject_id IS '计价对象ID';
COMMENT ON COLUMN charge_order.biz_order_no IS '业务单据号(幂等键,如工作流 execId)';
COMMENT ON COLUMN charge_order.user_id IS '扣费用户ID';
COMMENT ON COLUMN charge_order.charge_mode IS '计费方式(建单快照)';
COMMENT ON COLUMN charge_order.status IS '状态:1已建单 2已结算 3已失败';
COMMENT ON COLUMN charge_order.actual_amount IS '实收金额(元,保留2位小数)';
COMMENT ON COLUMN charge_order.usage IS '实际用量JSON';
COMMENT ON COLUMN charge_order.rule_snapshot IS '结算用费率快照JSON(防改价影响在途单)';
COMMENT ON COLUMN charge_order.settle_time IS '结算时间';
--------------------pgsql创建charge_order表语句---------------------------