From 42ff4baac0632c22727d6d6b6fff5245a6eaafa6 Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Fri, 28 Aug 2026 18:11:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(pricing):=20init.sql=20=E5=BB=BA=E8=A1=A8?= =?UTF-8?q?=20subject=20=E5=8C=96=20+=20config.yml=20=E5=8A=A0=20model-gat?= =?UTF-8?q?eway=20=E6=9C=8D=E5=8A=A1=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- config.yml | 31 +++- init.sql | 501 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 410 insertions(+), 122 deletions(-) diff --git a/config.yml b/config.yml index d5c9636..5d9e88a 100644 --- a/config.yml +++ b/config.yml @@ -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 服务名(枚举接口拉系统模型用) diff --git a/init.sql b/init.sql index e1aca61..281e557 100644 --- a/init.sql +++ b/init.sql @@ -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(见设计§4,rules 自描述) + 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 '计价对象ID(workflow/模型ID/业务模块标识)'; +COMMENT ON COLUMN pricing_config.rules IS '费率JSON(workflow三模式容器/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表语句--------------------------- \ No newline at end of file