From 8a535e3f387f58d736ca44a544e45ac1fe784cc8 Mon Sep 17 00:00:00 2001
From: cyh666666 <2398882793@qq.com>
Date: Tue, 3 Feb 2026 17:11:50 +0800
Subject: [PATCH] =?UTF-8?q?consumer=E6=A8=A1=E5=9D=97=E5=AE=8C=E6=88=9090%?=
=?UTF-8?q?=EF=BC=8C=E5=89=8D=E7=AB=AF=E5=AE=8C=E6=88=90supabase=E5=AF=B9?=
=?UTF-8?q?=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ak/config.uts | 4 +
doc_mall/create_mall_subscription_tables.sql | 71 -
doc_mall/database/complete_mall_database.sql | 1377 -----------
.../database/create_supabase_auth_users.sql | 0
doc_mall/database/mall_alter_upgrade.sql | 692 ------
doc_mall/database/mall_database_check.sql | 332 ---
.../database/mall_fields_only_upgrade.sql | 734 ------
doc_mall/database/mall_migration.sql | 868 -------
doc_mall/database/mall_seo_security.sql | 666 -----
doc_mall/database/mock_data_insert.sql | 1180 ---------
doc_mall/database/product_database.sql | 452 ----
doc_mall/database/quick_role_migration.sql | 249 --
doc_mall/database/role_field_cleanup.sql | 207 --
doc_mall/database/role_field_unification.sql | 287 ---
.../user_compatibility_implementation.sql | 273 ---
doc_mall/database/validation_test.sql | 113 -
doc_mall/database/verify_mock_data_fix.sql | 113 -
doc_mall/reports/PAYMENT_PAGE_GUIDE.md | 75 +
doc_mall/subscription_guard_trigger.sql | 47 -
doc_mall/subscription_rls_policies.sql | 119 -
.../consumer/Supabase Snippet SQL Query.csv | 487 ----
pages/mall/consumer/address-list.uvue | 2 +-
pages/mall/consumer/apply-refund.uvue | 85 +-
pages/mall/consumer/cart - 副本.uvue | 810 -------
pages/mall/consumer/cart copy.uvue | 1435 -----------
pages/mall/consumer/cart.uvue | 275 ++-
pages/mall/consumer/category - 副本.uvue | 1419 -----------
pages/mall/consumer/category.uvue | 149 +-
pages/mall/consumer/categorygood.uvue | 1159 ---------
.../category完成分类及商品数据获取.uvue | 1131 ---------
pages/mall/consumer/chat.uvue | 34 +-
pages/mall/consumer/checkout copy 2.uvue | 1733 -------------
pages/mall/consumer/checkout copy.uvue | 1730 -------------
pages/mall/consumer/checkout.uvue | 250 +-
pages/mall/consumer/checkoutgood.uvue | 1733 -------------
pages/mall/consumer/doc/FEATURES_&_PAGES.md | 62 +
pages/mall/consumer/doc/MOCK_DATA_GUIDE.md | 44 +
pages/mall/consumer/doc/README.md | 62 +
.../mall/consumer/doc/SUPABASE_INTEGRATION.md | 121 +
pages/mall/consumer/favorites.uvue | 83 +-
pages/mall/consumer/footprint.uvue | 121 +-
pages/mall/consumer/index.uvue | 299 ++-
...分类、热销药品数据获取.uvue => index医药.uvue} | 126 +-
pages/mall/consumer/index药品.uvue | 2158 -----------------
pages/mall/consumer/messages - 副本.uvue | 634 -----
pages/mall/consumer/messages.uvue | 311 +--
pages/mall/consumer/messages医药.uvue | 1277 ++++++++++
pages/mall/consumer/order-detail.uvue | 948 ++++----
pages/mall/consumer/orders.uvue | 66 +-
pages/mall/consumer/ordersgood.uvue | 996 --------
pages/mall/consumer/orderss.uvue | 1050 --------
pages/mall/consumer/ordersx.uvue | 1046 --------
pages/mall/consumer/payment.uvue | 182 +-
.../mall/consumer/product-detail copy 2.uvue | 1392 -----------
.../mall/consumer/product-detail copy 3.uvue | 1392 -----------
...oduct-detail copy完成图片数量数据获取.uvue | 1359 -----------
pages/mall/consumer/product-detail.uvue | 539 ++--
pages/mall/consumer/profile - 副本.uvue | 909 -------
pages/mall/consumer/profile.uvue | 120 +-
pages/mall/consumer/refund.uvue | 72 +-
pages/mall/consumer/review.uvue | 39 +-
pages/mall/consumer/search.uvue | 230 +-
pages/mall/consumer/settings - 副本.uvue | 702 ------
pages/mall/consumer/settings.uvue | 117 +-
.../sql/SUPABASE_CONSUMER_INTEGRATION.md | 231 ++
pages/user/bind-email.uvue | 118 +-
pages/user/bind-phone.uvue | 119 +-
pages/user/change-password.uvue | 49 +-
utils/supabaseService.uts | 1028 ++++++--
69 files changed, 5020 insertions(+), 33273 deletions(-)
delete mode 100644 doc_mall/create_mall_subscription_tables.sql
delete mode 100644 doc_mall/database/complete_mall_database.sql
delete mode 100644 doc_mall/database/create_supabase_auth_users.sql
delete mode 100644 doc_mall/database/mall_alter_upgrade.sql
delete mode 100644 doc_mall/database/mall_database_check.sql
delete mode 100644 doc_mall/database/mall_fields_only_upgrade.sql
delete mode 100644 doc_mall/database/mall_migration.sql
delete mode 100644 doc_mall/database/mall_seo_security.sql
delete mode 100644 doc_mall/database/mock_data_insert.sql
delete mode 100644 doc_mall/database/product_database.sql
delete mode 100644 doc_mall/database/quick_role_migration.sql
delete mode 100644 doc_mall/database/role_field_cleanup.sql
delete mode 100644 doc_mall/database/role_field_unification.sql
delete mode 100644 doc_mall/database/user_compatibility_implementation.sql
delete mode 100644 doc_mall/database/validation_test.sql
delete mode 100644 doc_mall/database/verify_mock_data_fix.sql
create mode 100644 doc_mall/reports/PAYMENT_PAGE_GUIDE.md
delete mode 100644 doc_mall/subscription_guard_trigger.sql
delete mode 100644 doc_mall/subscription_rls_policies.sql
delete mode 100644 pages/mall/consumer/Supabase Snippet SQL Query.csv
delete mode 100644 pages/mall/consumer/cart - 副本.uvue
delete mode 100644 pages/mall/consumer/cart copy.uvue
delete mode 100644 pages/mall/consumer/category - 副本.uvue
delete mode 100644 pages/mall/consumer/categorygood.uvue
delete mode 100644 pages/mall/consumer/category完成分类及商品数据获取.uvue
delete mode 100644 pages/mall/consumer/checkout copy 2.uvue
delete mode 100644 pages/mall/consumer/checkout copy.uvue
delete mode 100644 pages/mall/consumer/checkoutgood.uvue
create mode 100644 pages/mall/consumer/doc/FEATURES_&_PAGES.md
create mode 100644 pages/mall/consumer/doc/MOCK_DATA_GUIDE.md
create mode 100644 pages/mall/consumer/doc/README.md
create mode 100644 pages/mall/consumer/doc/SUPABASE_INTEGRATION.md
rename pages/mall/consumer/{index - 副本 (4)完成分类、热销药品数据获取.uvue => index医药.uvue} (93%)
delete mode 100644 pages/mall/consumer/index药品.uvue
delete mode 100644 pages/mall/consumer/messages - 副本.uvue
create mode 100644 pages/mall/consumer/messages医药.uvue
delete mode 100644 pages/mall/consumer/ordersgood.uvue
delete mode 100644 pages/mall/consumer/orderss.uvue
delete mode 100644 pages/mall/consumer/ordersx.uvue
delete mode 100644 pages/mall/consumer/product-detail copy 2.uvue
delete mode 100644 pages/mall/consumer/product-detail copy 3.uvue
delete mode 100644 pages/mall/consumer/product-detail copy完成图片数量数据获取.uvue
delete mode 100644 pages/mall/consumer/profile - 副本.uvue
delete mode 100644 pages/mall/consumer/settings - 副本.uvue
create mode 100644 pages/mall/consumer/sql/SUPABASE_CONSUMER_INTEGRATION.md
diff --git a/ak/config.uts b/ak/config.uts
index 83113b95..3413f86c 100644
--- a/ak/config.uts
+++ b/ak/config.uts
@@ -2,11 +2,15 @@
// 内网环境 - 本地部署的 Supabase
// IP: 192.168.1.62
// Kong HTTP Port: 8000
+
+//export const SUPA_URL: string = 'http://localhost:18000'
+//export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
export const SUPA_URL: string = 'http://192.168.1.61:18000'
export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
// WebSocket 实时连接(内网使用 ws:// 而非 wss://)
export const WS_URL: string = 'ws://192.168.1.61:18000/realtime/v1/websocket'
+//export const WS_URL: string = 'ws://localhost:18000/realtime/v1/websocket'
// 备用配置(已注释,如需切换可取消注释)
// 开发环境 - 其他内网地址
diff --git a/doc_mall/create_mall_subscription_tables.sql b/doc_mall/create_mall_subscription_tables.sql
deleted file mode 100644
index 7ab4f104..00000000
--- a/doc_mall/create_mall_subscription_tables.sql
+++ /dev/null
@@ -1,71 +0,0 @@
--- Mall Software Subscription Tables
--- PostgreSQL DDL; adjust schema name as needed (default public)
-
--- Plans
-create table if not exists ml_subscription_plans (
- id uuid primary key default gen_random_uuid(),
- plan_code text not null unique,
- name text not null,
- description text,
- features jsonb,
- price numeric(12,2) not null,
- currency text default 'CNY',
- billing_period text not null check (billing_period in ('monthly','yearly')),
- trial_days int default 0,
- is_active boolean default true,
- sort_order int default 0,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
-create index if not exists idx_ml_subscription_plans_active on ml_subscription_plans(is_active) where is_active = true;
-create index if not exists idx_ml_subscription_plans_sort on ml_subscription_plans(sort_order);
-
--- User Subscriptions
-create table if not exists ml_user_subscriptions (
- id uuid primary key default gen_random_uuid(),
- user_id uuid not null,
- plan_id uuid not null references ml_subscription_plans(id) on delete restrict,
- status text not null default 'active' check (status in ('trial','active','past_due','canceled','expired')),
- start_date timestamptz not null default now(),
- end_date timestamptz,
- next_billing_date timestamptz,
- auto_renew boolean not null default true,
- cancel_at_period_end boolean not null default false,
- metadata jsonb,
- created_at timestamptz not null default now(),
- updated_at timestamptz not null default now()
-);
-
-create index if not exists idx_ml_user_subscriptions_user on ml_user_subscriptions(user_id);
-create index if not exists idx_ml_user_subscriptions_plan on ml_user_subscriptions(plan_id);
-create index if not exists idx_ml_user_subscriptions_status on ml_user_subscriptions(status);
-
--- updated_at trigger helper (idempotent)
-create or replace function public.set_updated_at()
-returns trigger
-language plpgsql
-as $fn$
-begin
- new.updated_at = now();
- return new;
-end;
-$fn$;
-
--- Recreate triggers safely
-drop trigger if exists trg_ml_subscription_plans_updated on ml_subscription_plans;
-create trigger trg_ml_subscription_plans_updated
- before update on ml_subscription_plans
- for each row execute function public.set_updated_at();
-
-drop trigger if exists trg_ml_user_subscriptions_updated on ml_user_subscriptions;
-create trigger trg_ml_user_subscriptions_updated
- before update on ml_user_subscriptions
- for each row execute function public.set_updated_at();
-
--- Optional: basic RLS scaffolding (customize policies per project standards)
--- alter table ml_user_subscriptions enable row level security;
--- create policy rls_ml_user_subscriptions_owner on ml_user_subscriptions
--- using (user_id::text = current_setting('app.user_id', true));
-
--- Done
diff --git a/doc_mall/database/complete_mall_database.sql b/doc_mall/database/complete_mall_database.sql
deleted file mode 100644
index ba0a8cf5..00000000
--- a/doc_mall/database/complete_mall_database.sql
+++ /dev/null
@@ -1,1377 +0,0 @@
--- =====================================================================================
--- 电商商城系统完整数据库设�?(PostgreSQL + Supabase)
--- 表名前缀: ml_ (mall)
--- 复用�? ak_users (用户主表)
--- 包含: 表结构、索引、触发器、RLS策略、视图、函�?
--- =====================================================================================
-
--- =====================================================================================
--- 1. 基础配置和扩�?
--- =====================================================================================
-
--- 启用必要的扩�?
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-CREATE EXTENSION IF NOT EXISTS "pg_stat_statements";
-CREATE EXTENSION IF NOT EXISTS "btree_gin";
-
--- =====================================================================================
--- 2. 用户扩展�?
--- =====================================================================================
-
--- 商城用户扩展信息�?
-CREATE TABLE public.ml_user_profiles (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- status INTEGER DEFAULT 1 NOT NULL, -- 1:正常 2:冻结 3:注销 4:待审核
- real_name VARCHAR(100), -- 真实姓名
- id_card VARCHAR(32), -- 身份证号
- business_license VARCHAR(100), -- 营业执照�?
- credit_score INTEGER DEFAULT 100, -- 信用分数 0-1000
- verification_status INTEGER DEFAULT 0, -- 认证状�?0:未认�?1:已认�?2:认证失败
- verification_data JSONB DEFAULT '{}', -- 认证相关数据
- preferences JSONB DEFAULT '{}', -- 用户偏好设置
- emergency_contact VARCHAR(200), -- 紧急联系人
- service_areas JSONB, -- 服务区域(配送员)
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_user_status CHECK (status IN (1,2,3,4)),
- CONSTRAINT chk_ml_verification_status CHECK (verification_status IN (0,1,2)),
- CONSTRAINT chk_ml_credit_score CHECK (credit_score >= 0 AND credit_score <= 1000)
-);
-
-COMMENT ON TABLE public.ml_user_profiles IS '商城用户扩展信息表';
-COMMENT ON COLUMN public.ml_user_profiles.status IS '用户状态:1正常 2冻结 3注销 4待审核';
-
--- 用户地址�?
-CREATE TABLE public.ml_user_addresses (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- receiver_name VARCHAR(100) NOT NULL,
- receiver_phone VARCHAR(32) NOT NULL,
- province VARCHAR(100) NOT NULL,
- city VARCHAR(100) NOT NULL,
- district VARCHAR(100) NOT NULL,
- street VARCHAR(200),
- address_detail TEXT NOT NULL,
- postal_code VARCHAR(16),
- is_default BOOLEAN DEFAULT FALSE,
- label VARCHAR(50), -- home/office/school/other
- latitude DECIMAL(10,7),
- longitude DECIMAL(10,7),
- delivery_instructions TEXT,
- business_hours VARCHAR(100),
- status INTEGER DEFAULT 1, -- 1:正常 2:禁用
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_address_status CHECK (status IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_user_addresses IS '用户地址�?;
-
--- =====================================================================================
--- 3. 商品管理�?
--- =====================================================================================
-
--- 商品分类�?
-CREATE TABLE public.ml_categories (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- parent_id UUID REFERENCES public.ml_categories(id),
- name VARCHAR(200) NOT NULL,
- slug VARCHAR(200) UNIQUE,
- description TEXT,
- icon_url TEXT,
- banner_url TEXT,
- sort_order INTEGER DEFAULT 0,
- level INTEGER DEFAULT 1,
- path TEXT[], -- 分类路径
- is_active BOOLEAN DEFAULT TRUE,
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_categories IS '商品分类�?;
-
--- 品牌�?
-CREATE TABLE public.ml_brands (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- name VARCHAR(200) NOT NULL,
- logo_url TEXT,
- description TEXT,
- website VARCHAR(500),
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_brands IS '品牌�?;
-
--- 商品�?
-CREATE TABLE public.ml_products (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- category_id UUID NOT NULL REFERENCES public.ml_categories(id),
- brand_id UUID REFERENCES public.ml_brands(id),
- product_code VARCHAR(100) UNIQUE NOT NULL,
- name VARCHAR(500) NOT NULL,
- subtitle VARCHAR(1000),
- description TEXT,
- main_image_url TEXT,
- image_urls JSONB DEFAULT '[]',
- video_urls JSONB DEFAULT '[]',
-
- -- 价格信息
- base_price DECIMAL(12,2) NOT NULL CHECK (base_price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
-
- -- 库存信息
- total_stock INTEGER DEFAULT 0 CHECK (total_stock >= 0),
- available_stock INTEGER DEFAULT 0 CHECK (available_stock >= 0),
- min_order_qty INTEGER DEFAULT 1 CHECK (min_order_qty > 0),
- max_order_qty INTEGER,
-
- -- 基础属�?
- weight DECIMAL(10,3),
- dimensions JSONB, -- {length, width, height}
-
- -- 状�?
- status INTEGER DEFAULT 1, -- 1:上架 2:下架 3:草稿 4:删除
- is_featured BOOLEAN DEFAULT FALSE,
- is_new BOOLEAN DEFAULT FALSE,
- is_hot BOOLEAN DEFAULT FALSE,
-
- -- 统计
- view_count INTEGER DEFAULT 0,
- sale_count INTEGER DEFAULT 0,
- favorite_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00 CHECK (rating_avg >= 0 AND rating_avg <= 5),
- rating_count INTEGER DEFAULT 0,
-
- -- SEO
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- seo_keywords TEXT[],
- slug VARCHAR(200) UNIQUE,
-
- -- 其他
- tags TEXT[],
- attributes JSONB DEFAULT '{}',
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- published_at TIMESTAMP WITH TIME ZONE,
-
- CONSTRAINT chk_ml_product_status CHECK (status IN (1,2,3,4))
-);
-
-COMMENT ON TABLE public.ml_products IS '商品�?;
-
--- 商品SKU�?
-CREATE TABLE public.ml_product_skus (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_code VARCHAR(100) UNIQUE NOT NULL,
- specifications JSONB DEFAULT '{}', -- 规格组合
- price DECIMAL(12,2) NOT NULL CHECK (price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
- stock INTEGER DEFAULT 0 CHECK (stock >= 0),
- warning_stock INTEGER DEFAULT 10, -- 库存预警
- image_url TEXT,
- weight DECIMAL(10,3),
- status INTEGER DEFAULT 1, -- 1:正常 2:禁用
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_sku_status CHECK (status IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_product_skus IS '商品SKU�?;
-
--- 商品规格�?
-CREATE TABLE public.ml_product_specs (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- spec_name VARCHAR(100) NOT NULL, -- 规格名称:颜色、尺寸等
- spec_values JSONB NOT NULL DEFAULT '[]', -- 规格值数�?
- sort_order INTEGER DEFAULT 0,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_product_specs IS '商品规格�?;
-
--- =====================================================================================
--- 4. 店铺管理�?
--- =====================================================================================
-
--- 店铺信息�?
-CREATE TABLE public.ml_shops (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- shop_name VARCHAR(200) NOT NULL,
- shop_logo TEXT,
- shop_banner TEXT,
- description TEXT,
- business_license VARCHAR(100),
- contact_name VARCHAR(100),
- contact_phone VARCHAR(32),
- contact_email VARCHAR(200),
- address JSONB, -- 店铺地址信息
- business_hours JSONB, -- 营业时间
-
- -- 状�?
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:关闭
-
- -- 统计
- product_count INTEGER DEFAULT 0,
- order_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- rating_count INTEGER DEFAULT 0,
-
- -- 认证信息
- verified_at TIMESTAMP WITH TIME ZONE,
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_shop_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_shops IS '店铺信息�?;
-
--- =====================================================================================
--- 5. 订单管理�?
--- =====================================================================================
-
--- 订单�?
-CREATE TABLE public.ml_orders (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- order_no VARCHAR(50) UNIQUE NOT NULL,
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
-
- -- 金额信息
- product_amount DECIMAL(12,2) NOT NULL DEFAULT 0, -- 商品金额
- discount_amount DECIMAL(12,2) DEFAULT 0, -- 优惠金额
- shipping_fee DECIMAL(12,2) DEFAULT 0, -- 运费
- total_amount DECIMAL(12,2) NOT NULL, -- 总金�?
- paid_amount DECIMAL(12,2) DEFAULT 0, -- 已付金额
-
- -- 地址信息
- shipping_address JSONB NOT NULL, -- 收货地址
-
- -- 状态信�?
- order_status INTEGER DEFAULT 1, -- 1:待付�?2:待发�?3:待收�?4:已完�?5:已取�?6:退款中 7:已退�?
- payment_status INTEGER DEFAULT 1, -- 1:未付�?2:已付�?3:部分退�?4:全额退�?
- shipping_status INTEGER DEFAULT 1, -- 1:未发�?2:已发�?3:运输�?4:已送达
-
- -- 时间信息
- paid_at TIMESTAMP WITH TIME ZONE,
- shipped_at TIMESTAMP WITH TIME ZONE,
- delivered_at TIMESTAMP WITH TIME ZONE,
- completed_at TIMESTAMP WITH TIME ZONE,
-
- -- 其他信息
- remark TEXT, -- 买家备注
- merchant_memo TEXT, -- 商家备注
- cancel_reason TEXT, -- 取消原因
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_order_status CHECK (order_status IN (1,2,3,4,5,6,7)),
- CONSTRAINT chk_ml_payment_status CHECK (payment_status IN (1,2,3,4)),
- CONSTRAINT chk_ml_shipping_status CHECK (shipping_status IN (1,2,3,4))
-);
-
-COMMENT ON TABLE public.ml_orders IS '订单�?;
-
--- 订单商品�?
-CREATE TABLE public.ml_order_items (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID NOT NULL REFERENCES public.ml_orders(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id),
- sku_id UUID REFERENCES public.ml_product_skus(id),
- product_name VARCHAR(500) NOT NULL,
- sku_name VARCHAR(500),
- specifications JSONB DEFAULT '{}',
- image_url TEXT,
- price DECIMAL(12,2) NOT NULL,
- quantity INTEGER NOT NULL CHECK (quantity > 0),
- total_amount DECIMAL(12,2) NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_order_items IS '订单商品�?;
-
--- =====================================================================================
--- 6. 购物车表
--- =====================================================================================
-
--- 购物车表
-CREATE TABLE public.ml_shopping_cart (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_id UUID REFERENCES public.ml_product_skus(id) ON DELETE CASCADE,
- quantity INTEGER NOT NULL CHECK (quantity > 0),
- selected BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, product_id, sku_id)
-);
-
-COMMENT ON TABLE public.ml_shopping_cart IS '购物车表';
-
--- =====================================================================================
--- 7. 营销管理�?
--- =====================================================================================
-
--- 优惠券模板表
-CREATE TABLE public.ml_coupon_templates (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID REFERENCES public.ak_users(id), -- NULL表示平台�?
- name VARCHAR(200) NOT NULL,
- description TEXT,
- coupon_type INTEGER NOT NULL, -- 1:满减�?2:折扣�?3:免运费券
- discount_type INTEGER NOT NULL, -- 1:固定金额 2:百分�?
- discount_value DECIMAL(12,2) NOT NULL, -- 优惠�?
- min_order_amount DECIMAL(12,2) DEFAULT 0, -- 最低订单金�?
- max_discount_amount DECIMAL(12,2), -- 最大优惠金�?
- total_quantity INTEGER, -- 总发放数�?
- per_user_limit INTEGER DEFAULT 1, -- 每用户限领数�?
- usage_limit INTEGER DEFAULT 1, -- 每张券使用次数限�?
-
- -- 适用范围
- applicable_products JSONB DEFAULT '[]', -- 适用商品ID数组
- applicable_categories JSONB DEFAULT '[]', -- 适用分类ID数组
-
- -- 时间限制
- start_time TIMESTAMP WITH TIME ZONE NOT NULL,
- end_time TIMESTAMP WITH TIME ZONE NOT NULL,
-
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:已结�?
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_coupon_type CHECK (coupon_type IN (1,2,3)),
- CONSTRAINT chk_ml_discount_type CHECK (discount_type IN (1,2)),
- CONSTRAINT chk_ml_coupon_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_coupon_templates IS '优惠券模板表';
-
--- 用户优惠券表
-CREATE TABLE public.ml_user_coupons (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- template_id UUID NOT NULL REFERENCES public.ml_coupon_templates(id),
- coupon_code VARCHAR(50) UNIQUE NOT NULL,
- status INTEGER DEFAULT 1, -- 1:未使�?2:已使�?3:已过�?
- used_at TIMESTAMP WITH TIME ZONE,
- order_id UUID REFERENCES public.ml_orders(id),
- received_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- expire_at TIMESTAMP WITH TIME ZONE NOT NULL,
-
- CONSTRAINT chk_ml_user_coupon_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_user_coupons IS '用户优惠券表';
-
--- =====================================================================================
--- 8. 配送管理表
--- =====================================================================================
-
--- 配送员信息�?
-CREATE TABLE public.ml_delivery_drivers (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- real_name VARCHAR(100) NOT NULL,
- id_card VARCHAR(32) NOT NULL,
- driver_license VARCHAR(50),
- vehicle_type INTEGER, -- 1:电动�?2:摩托�?3:汽车
- vehicle_number VARCHAR(20),
- service_areas JSONB DEFAULT '[]', -- 服务区域
- work_status INTEGER DEFAULT 1, -- 1:在线 2:忙碌 3:离线
- current_lat DECIMAL(10,7),
- current_lng DECIMAL(10,7),
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- rating_count INTEGER DEFAULT 0,
- order_count INTEGER DEFAULT 0,
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:离职
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_driver_vehicle_type CHECK (vehicle_type IN (1,2,3)),
- CONSTRAINT chk_ml_driver_work_status CHECK (work_status IN (1,2,3)),
- CONSTRAINT chk_ml_driver_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_delivery_drivers IS '配送员信息�?;
-
--- 配送任务表
-CREATE TABLE public.ml_delivery_tasks (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID UNIQUE NOT NULL REFERENCES public.ml_orders(id),
- driver_id UUID REFERENCES public.ml_delivery_drivers(id),
- pickup_address JSONB NOT NULL, -- 取货地址
- delivery_address JSONB NOT NULL, -- 配送地址
- distance DECIMAL(8,2), -- 配送距�?km)
- estimated_time INTEGER, -- 预计配送时�?分钟)
- delivery_fee DECIMAL(10,2) NOT NULL DEFAULT 0,
-
- status INTEGER DEFAULT 1, -- 1:待接�?2:已接�?3:取货�?4:配送中 5:已送达 6:配送失�?
-
- -- 时间记录
- assigned_at TIMESTAMP WITH TIME ZONE,
- picked_at TIMESTAMP WITH TIME ZONE,
- delivered_at TIMESTAMP WITH TIME ZONE,
-
- -- 其他信息
- delivery_code VARCHAR(10), -- 取货�?
- remark TEXT,
- failure_reason TEXT,
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_delivery_status CHECK (status IN (1,2,3,4,5,6))
-);
-
-COMMENT ON TABLE public.ml_delivery_tasks IS '配送任务表';
-
--- =====================================================================================
--- 9. 评价管理�?
--- =====================================================================================
-
--- 商品评价�?
-CREATE TABLE public.ml_product_reviews (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID NOT NULL REFERENCES public.ml_orders(id),
- order_item_id UUID NOT NULL REFERENCES public.ml_order_items(id),
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- product_id UUID NOT NULL REFERENCES public.ml_products(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
-
- rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5),
- content TEXT,
- images JSONB DEFAULT '[]', -- 评价图片
- is_anonymous BOOLEAN DEFAULT FALSE,
-
- -- 商家回复
- merchant_reply TEXT,
- merchant_replied_at TIMESTAMP WITH TIME ZONE,
-
- status INTEGER DEFAULT 1, -- 1:正常 2:已删�?3:已隐�?
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_review_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_product_reviews IS '商品评价�?;
-
--- =====================================================================================
--- 10. 用户行为�?
--- =====================================================================================
-
--- 用户收藏�?
-CREATE TABLE public.ml_user_favorites (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- target_type INTEGER NOT NULL, -- 1:商品 2:店铺
- target_id UUID NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, target_type, target_id),
- CONSTRAINT chk_ml_favorite_type CHECK (target_type IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_user_favorites IS '用户收藏�?;
-
--- 用户浏览历史�?
-CREATE TABLE public.ml_browse_history (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- browse_duration INTEGER DEFAULT 0, -- 浏览时长(�?
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, product_id)
-);
-
-COMMENT ON TABLE public.ml_browse_history IS '用户浏览历史�?;
-
--- 搜索记录�?
-CREATE TABLE public.ml_search_history (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID REFERENCES public.ak_users(id) ON DELETE CASCADE,
- keyword VARCHAR(200) NOT NULL,
- result_count INTEGER DEFAULT 0,
- ip_address INET,
- user_agent TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_search_history IS '搜索记录�?;
-
--- =====================================================================================
--- 11. 系统配置�?
--- =====================================================================================
-
--- 系统配置�?
-CREATE TABLE public.ml_system_configs (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- config_key VARCHAR(100) UNIQUE NOT NULL,
- config_value JSONB,
- description TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_system_configs IS '系统配置�?;
-
--- 地区�?如果需要独立的地区管理)
-CREATE TABLE public.ml_regions (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- parent_id UUID REFERENCES public.ml_regions(id),
- name VARCHAR(100) NOT NULL,
- code VARCHAR(20),
- level INTEGER NOT NULL, -- 1:省份 2:城市 3:区县 4:街道
- sort_order INTEGER DEFAULT 0,
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_regions IS '地区�?;
-
--- =====================================================================================
--- 12. 创建索引
--- =====================================================================================
-
--- 用户扩展表索�?
-CREATE INDEX idx_ml_user_profiles_user_id ON public.ml_user_profiles(user_id);
-
-CREATE INDEX idx_ml_user_profiles_status ON public.ml_user_profiles(status);
-
--- 分类表索引
-CREATE INDEX idx_ml_categories_cid ON public.ml_categories(cid);
-CREATE INDEX idx_ml_categories_parent ON public.ml_categories(parent_id);
-CREATE INDEX idx_ml_categories_slug ON public.ml_categories(slug);
-CREATE INDEX idx_ml_categories_level ON public.ml_categories(level, sort_order);
-
--- 品牌表索引
-CREATE INDEX idx_ml_brands_cid ON public.ml_brands(cid);
-CREATE INDEX idx_ml_brands_name ON public.ml_brands(name);
-
--- 地址表索�?
-CREATE INDEX idx_ml_user_addresses_user_id ON public.ml_user_addresses(user_id);
-CREATE INDEX idx_ml_user_addresses_default ON public.ml_user_addresses(user_id, is_default);
-CREATE INDEX idx_ml_user_addresses_location ON public.ml_user_addresses(city, district);
-
--- 商品表索�?
-CREATE INDEX idx_ml_products_cid ON public.ml_products(cid);
-CREATE INDEX idx_ml_products_merchant ON public.ml_products(merchant_id, status);
-CREATE INDEX idx_ml_products_category ON public.ml_products(category_id, status);
-CREATE INDEX idx_ml_products_status ON public.ml_products(status, created_at DESC);
-CREATE INDEX idx_ml_products_featured ON public.ml_products(is_featured, status);
-CREATE INDEX idx_ml_products_price ON public.ml_products(base_price);
-CREATE INDEX idx_ml_products_rating ON public.ml_products(rating_avg DESC, rating_count DESC);
-CREATE INDEX idx_ml_products_sale_count ON public.ml_products(sale_count DESC);
-CREATE INDEX idx_ml_products_tags ON public.ml_products USING GIN(tags);
-CREATE INDEX idx_ml_products_slug ON public.ml_products(slug);
-
--- 店铺表索引
-CREATE INDEX idx_ml_shops_cid ON public.ml_shops(cid);
-CREATE INDEX idx_ml_shops_merchant ON public.ml_shops(merchant_id);
-
--- SKU表索�?
-CREATE INDEX idx_ml_product_skus_product ON public.ml_product_skus(product_id);
-CREATE INDEX idx_ml_product_skus_code ON public.ml_product_skus(sku_code);
-
--- 订单表索�?
-CREATE INDEX idx_ml_orders_cid ON public.ml_orders(cid);
-CREATE INDEX idx_ml_orders_user ON public.ml_orders(user_id, created_at DESC);
-CREATE INDEX idx_ml_orders_merchant ON public.ml_orders(merchant_id, created_at DESC);
-CREATE INDEX idx_ml_orders_status ON public.ml_orders(order_status, created_at DESC);
-CREATE INDEX idx_ml_orders_no ON public.ml_orders(order_no);
-
--- 订单商品表索�?
-CREATE INDEX idx_ml_order_items_order ON public.ml_order_items(order_id);
-CREATE INDEX idx_ml_order_items_product ON public.ml_order_items(product_id);
-
--- 购物车表索引
-CREATE INDEX idx_ml_shopping_cart_user ON public.ml_shopping_cart(user_id);
-
--- 优惠券模板表索引
-CREATE INDEX idx_ml_coupon_templates_cid ON public.ml_coupon_templates(cid);
-CREATE INDEX idx_ml_coupon_templates_merchant ON public.ml_coupon_templates(merchant_id);
-
--- 优惠券表索引
-CREATE INDEX idx_ml_user_coupons_user ON public.ml_user_coupons(user_id, status);
-CREATE INDEX idx_ml_user_coupons_code ON public.ml_user_coupons(coupon_code);
-
--- 收藏表索�?
-CREATE INDEX idx_ml_user_favorites_user ON public.ml_user_favorites(user_id, target_type);
-CREATE INDEX idx_ml_user_favorites_target ON public.ml_user_favorites(target_type, target_id);
-
--- 浏览历史索引
-CREATE INDEX idx_ml_browse_history_user ON public.ml_browse_history(user_id, created_at DESC);
-CREATE INDEX idx_ml_browse_history_product ON public.ml_browse_history(product_id);
-
--- =====================================================================================
--- 13. 触发器函�?
--- =====================================================================================
-
--- 自动更新 updated_at 字段的函�?
-CREATE OR REPLACE FUNCTION public.update_updated_at_column()
-RETURNS TRIGGER AS $$
-BEGIN
- NEW.updated_at = NOW();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 为需要的表创�?updated_at 触发�?
-CREATE TRIGGER trigger_ml_user_profiles_updated_at
- BEFORE UPDATE ON public.ml_user_profiles
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_user_addresses_updated_at
- BEFORE UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_products_updated_at
- BEFORE UPDATE ON public.ml_products
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_product_skus_updated_at
- BEFORE UPDATE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_shops_updated_at
- BEFORE UPDATE ON public.ml_shops
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_orders_updated_at
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-CREATE TRIGGER trigger_ml_shopping_cart_updated_at
- BEFORE UPDATE ON public.ml_shopping_cart
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
--- 确保每个用户只有一个默认地址的触发器
-CREATE OR REPLACE FUNCTION public.ensure_single_default_address()
-RETURNS TRIGGER AS $$
-BEGIN
- IF NEW.is_default = TRUE THEN
- UPDATE public.ml_user_addresses
- SET is_default = FALSE
- WHERE user_id = NEW.user_id AND id != NEW.id;
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_ml_single_default_address
- BEFORE INSERT OR UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
-
--- 商品库存更新触发�?
-CREATE OR REPLACE FUNCTION public.update_product_stock()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 更新商品总库�?
- UPDATE public.ml_products
- SET
- total_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = NEW.product_id AND status = 1
- ),
- available_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = NEW.product_id AND status = 1
- )
- WHERE id = NEW.product_id;
-
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_ml_update_product_stock
- AFTER INSERT OR UPDATE OR DELETE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_product_stock();
-
--- 订单状态变更时的处�?
-CREATE OR REPLACE FUNCTION public.handle_order_status_change()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 如果订单状态变为已付款
- IF NEW.order_status = 2 AND OLD.order_status = 1 THEN
- NEW.paid_at = NOW();
- END IF;
-
- -- 如果订单状态变为已发货
- IF NEW.order_status = 3 AND OLD.order_status = 2 THEN
- NEW.shipped_at = NOW();
- END IF;
-
- -- 如果订单状态变为已完成
- IF NEW.order_status = 4 AND OLD.order_status = 3 THEN
- NEW.delivered_at = NOW();
- NEW.completed_at = NOW();
-
- -- 更新商品销�?
- UPDATE public.ml_products
- SET sale_count = sale_count + (
- SELECT SUM(quantity)
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- )
- WHERE id IN (
- SELECT product_id
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- );
- END IF;
-
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_ml_order_status_change
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.handle_order_status_change();
-
--- =====================================================================================
--- 14. 实用函数
--- =====================================================================================
-
--- 生成订单号的函数
-CREATE OR REPLACE FUNCTION public.generate_order_no()
-RETURNS TEXT AS $$
-DECLARE
- order_no TEXT;
-BEGIN
- order_no := 'ML' || TO_CHAR(NOW(), 'YYYYMMDD') || LPAD(NEXTVAL('ml_order_seq')::TEXT, 6, '0');
- RETURN order_no;
-END;
-$$ LANGUAGE plpgsql;
-
--- 创建订单序列
-CREATE SEQUENCE IF NOT EXISTS public.ml_order_seq START 1;
-
--- 生成优惠券码的函�?
-CREATE OR REPLACE FUNCTION public.generate_coupon_code()
-RETURNS TEXT AS $$
-DECLARE
- code TEXT;
- chars TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- result TEXT := '';
- i INTEGER;
-BEGIN
- FOR i IN 1..8 LOOP
- result := result || substr(chars, (random() * length(chars))::integer + 1, 1);
- END LOOP;
- RETURN 'CP' || result;
-END;
-$$ LANGUAGE plpgsql;
-
--- 获取用户默认地址
-CREATE OR REPLACE FUNCTION public.get_user_default_address(p_user_id UUID)
-RETURNS TABLE (
- id UUID,
- receiver_name VARCHAR,
- receiver_phone VARCHAR,
- full_address TEXT,
- latitude DECIMAL,
- longitude DECIMAL
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- a.id,
- a.receiver_name,
- a.receiver_phone,
- (a.province || ' ' || a.city || ' ' || a.district || ' ' || a.address_detail) as full_address,
- a.latitude,
- a.longitude
- FROM public.ml_user_addresses a
- WHERE a.user_id = p_user_id AND a.is_default = TRUE AND a.status = 1
- LIMIT 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 检查用户是否为认证商家
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(p_user_id UUID)
-RETURNS BOOLEAN AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (u.role = 'merchant' AND p.verification_status = 1) INTO result
- FROM public.ml_user_profiles p
- JOIN public.ak_users u ON p.user_id = u.id
- WHERE p.user_id = p_user_id;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$ LANGUAGE plpgsql;
-
--- 计算购物车总金�?
-CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
-RETURNS DECIMAL AS $$
-DECLARE
- total_amount DECIMAL := 0;
-BEGIN
- SELECT COALESCE(SUM(s.price * c.quantity), 0) INTO total_amount
- FROM public.ml_shopping_cart c
- LEFT JOIN public.ml_product_skus s ON c.sku_id = s.id
- LEFT JOIN public.ml_products p ON c.product_id = p.id
- WHERE c.user_id = p_user_id
- AND c.selected = TRUE
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1);
-
- RETURN total_amount;
-END;
-$$ LANGUAGE plpgsql;
-
--- 获取商品可用库存
-CREATE OR REPLACE FUNCTION public.get_product_available_stock(p_product_id UUID, p_sku_id UUID DEFAULT NULL)
-RETURNS INTEGER AS $$
-DECLARE
- stock_count INTEGER := 0;
-BEGIN
- IF p_sku_id IS NOT NULL THEN
- -- 获取特定SKU库存
- SELECT COALESCE(stock, 0) INTO stock_count
- FROM public.ml_product_skus
- WHERE id = p_sku_id AND product_id = p_product_id AND status = 1;
- ELSE
- -- 获取商品总库�?
- SELECT COALESCE(available_stock, 0) INTO stock_count
- FROM public.ml_products
- WHERE id = p_product_id AND status = 1;
- END IF;
-
- RETURN stock_count;
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 15. 创建视图
--- =====================================================================================
-
--- 商城用户完整信息视图
-CREATE OR REPLACE VIEW public.ml_users_view AS
-SELECT
- u.id,
- u.username,
- u.email,
- u.phone,
- u.avatar_url,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- u.role,
- p.status,
- p.real_name,
- p.credit_score,
- p.verification_status,
- p.created_at as profile_created_at,
- p.updated_at as profile_updated_at,
- CASE
- WHEN u.role = 'customer' THEN '消费者'
- WHEN u.role = 'merchant' THEN '商家'
- WHEN u.role = 'delivery' THEN '配送员'
- WHEN u.role = 'service' THEN '客服'
- WHEN u.role = 'admin' THEN '管理员'
- ELSE '未知'
- END as role_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
-COMMENT ON VIEW public.ml_users_view IS '商城用户完整信息视图';
-
--- 商品详情视图
-CREATE OR REPLACE VIEW public.ml_products_detail_view AS
-SELECT
- p.*,
- c.cid as category_cid,
- c.name as category_name,
- c.path as category_path,
- b.cid as brand_cid,
- b.name as brand_name,
- s.cid as shop_cid,
- s.shop_name,
- u.username as merchant_name,
- CASE
- WHEN p.status = 1 THEN '上架'
- WHEN p.status = 2 THEN '下架'
- WHEN p.status = 3 THEN '草稿'
- WHEN p.status = 4 THEN '删除'
- ELSE '未知'
- END as status_name
-FROM public.ml_products p
-LEFT JOIN public.ml_categories c ON p.category_id = c.id
-LEFT JOIN public.ml_brands b ON p.brand_id = b.id
-LEFT JOIN public.ml_shops s ON p.merchant_id = s.merchant_id
-LEFT JOIN public.ak_users u ON p.merchant_id = u.id;
-
-COMMENT ON VIEW public.ml_products_detail_view IS '商品详情视图';
-
--- 订单详情视图
-CREATE OR REPLACE VIEW public.ml_orders_detail_view AS
-SELECT
- o.*,
- u.username as customer_name,
- u.phone as customer_phone,
- m.username as merchant_name,
- s.shop_name,
- CASE
- WHEN o.order_status = 1 THEN '待付�?
- WHEN o.order_status = 2 THEN '待发�?
- WHEN o.order_status = 3 THEN '待收�?
- WHEN o.order_status = 4 THEN '已完�?
- WHEN o.order_status = 5 THEN '已取�?
- WHEN o.order_status = 6 THEN '退款中'
- WHEN o.order_status = 7 THEN '已退�?
- ELSE '未知'
- END as order_status_name,
- CASE
- WHEN o.payment_status = 1 THEN '未付�?
- WHEN o.payment_status = 2 THEN '已付�?
- WHEN o.payment_status = 3 THEN '部分退�?
- WHEN o.payment_status = 4 THEN '全额退�?
- ELSE '未知'
- END as payment_status_name
-FROM public.ml_orders o
-LEFT JOIN public.ak_users u ON o.user_id = u.id
-LEFT JOIN public.ak_users m ON o.merchant_id = m.id
-LEFT JOIN public.ml_shops s ON o.merchant_id = s.merchant_id;
-
-COMMENT ON VIEW public.ml_orders_detail_view IS '订单详情视图';
-
--- =====================================================================================
--- 16. RLS (Row Level Security) 策略
--- =====================================================================================
-
--- 启用 RLS
-ALTER TABLE public.ml_user_profiles ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_addresses ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_shopping_cart ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_favorites ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_browse_history ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_coupons ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_orders ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_products ENABLE ROW LEVEL SECURITY;
-
--- 用户只能访问自己的数�?
-CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_profiles_insert_policy ON public.ml_user_profiles
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_profiles_update_policy ON public.ml_user_profiles
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_profiles_delete_policy ON public.ml_user_profiles
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_addresses_select_policy ON public.ml_user_addresses
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_addresses_insert_policy ON public.ml_user_addresses
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_addresses_update_policy ON public.ml_user_addresses
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_addresses_delete_policy ON public.ml_user_addresses
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_shopping_cart_select_policy ON public.ml_shopping_cart
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_shopping_cart_insert_policy ON public.ml_shopping_cart
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_shopping_cart_update_policy ON public.ml_shopping_cart
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_shopping_cart_delete_policy ON public.ml_shopping_cart
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_favorites_select_policy ON public.ml_user_favorites
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_favorites_insert_policy ON public.ml_user_favorites
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_favorites_update_policy ON public.ml_user_favorites
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_favorites_delete_policy ON public.ml_user_favorites
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_browse_history_select_policy ON public.ml_browse_history
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_browse_history_insert_policy ON public.ml_browse_history
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_browse_history_update_policy ON public.ml_browse_history
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_browse_history_delete_policy ON public.ml_browse_history
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_coupons_select_policy ON public.ml_user_coupons
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_coupons_insert_policy ON public.ml_user_coupons
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_coupons_update_policy ON public.ml_user_coupons
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
-CREATE POLICY ml_user_coupons_delete_policy ON public.ml_user_coupons
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
--- 订单策略:用户可以查看自己的订单,商家可以查看自己店铺的订单
-CREATE POLICY ml_orders_select_policy ON public.ml_orders
- FOR SELECT USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
-CREATE POLICY ml_orders_insert_policy ON public.ml_orders
- FOR INSERT WITH CHECK (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
-CREATE POLICY ml_orders_update_policy ON public.ml_orders
- FOR UPDATE USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
-CREATE POLICY ml_orders_delete_policy ON public.ml_orders
- FOR DELETE USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
--- 商品策略:所有人可以查看上架商品,商家只能管理自己的商品
-CREATE POLICY ml_products_select_policy ON public.ml_products
- FOR SELECT USING (status = 1);
-
-CREATE POLICY ml_products_insert_policy ON public.ml_products
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-
-CREATE POLICY ml_products_update_policy ON public.ml_products
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-
-CREATE POLICY ml_products_delete_policy ON public.ml_products
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-
--- =====================================================================================
--- 17. 初始化数�?
--- =====================================================================================
-
--- 插入系统配置
-INSERT INTO public.ml_system_configs (config_key, config_value, description) VALUES
-('shipping_fee', '{"default": 10, "free_threshold": 88}', '配送费配置'),
-('platform_commission', '{"rate": 0.05}', '平台佣金配置'),
-('coupon_settings', '{"max_per_user": 10}', '优惠券设�?),
-('order_auto_confirm_days', '7', '订单自动确认天数');
-
--- 插入默认分类
-INSERT INTO public.ml_categories (id, name, slug, level, path) VALUES
-(uuid_generate_v4(), '数码电器', 'digital', 1, ARRAY['数码电器']),
-(uuid_generate_v4(), '服装鞋帽', 'fashion', 1, ARRAY['服装鞋帽']),
-(uuid_generate_v4(), '家居用品', 'home', 1, ARRAY['家居用品']),
-(uuid_generate_v4(), '食品饮料', 'food', 1, ARRAY['食品饮料']),
-(uuid_generate_v4(), '美妆护肤', 'beauty', 1, ARRAY['美妆护肤']);
-
--- 为现有 ak_users 用户创建默认商城档案
-INSERT INTO public.ml_user_profiles (user_id, status)
-SELECT
- id,
- 1 -- 默认状态正常
-FROM public.ak_users
-WHERE id NOT IN (SELECT user_id FROM public.ml_user_profiles WHERE user_id IS NOT NULL);
-
--- =====================================================================================
--- 18. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '商城数据库创建完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '已创建表数量: 20+ 张表';
- RAISE NOTICE '已创建索�? 30+ 个索�?;
- RAISE NOTICE '已创建触发器: 8 个触发器';
- RAISE NOTICE '已创建函�? 10+ 个函�?;
- RAISE NOTICE '已创建视�? 3 个视�?;
- RAISE NOTICE '已设置RLS策略: 多个策略';
- RAISE NOTICE '已为现有用户创建默认档案';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '表名前缀: ml_';
- RAISE NOTICE '复用�? ak_users';
- RAISE NOTICE '兼容: Supabase';
- RAISE NOTICE '=======================================================';
-END $$;
-
--- =====================================================================================
--- SEO 优化相关函数
--- =====================================================================================
-
--- 根据 cid 获取商品信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_product_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- main_image_url TEXT,
- base_price DECIMAL,
- rating_avg DECIMAL,
- sale_count INTEGER,
- category_name VARCHAR,
- brand_name VARCHAR,
- shop_name VARCHAR
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- p.id,
- p.cid,
- p.name,
- p.slug,
- p.description,
- p.main_image_url,
- p.base_price,
- p.rating_avg,
- p.sale_count,
- c.name as category_name,
- b.name as brand_name,
- s.shop_name
- FROM public.ml_products p
- LEFT JOIN public.ml_categories c ON p.category_id = c.id
- LEFT JOIN public.ml_brands b ON p.brand_id = b.id
- LEFT JOIN public.ml_shops s ON p.merchant_id = s.merchant_id
- WHERE p.cid = p_cid AND p.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取分类信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_category_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- icon_url TEXT,
- path TEXT[]
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- c.id,
- c.cid,
- c.name,
- c.slug,
- c.description,
- c.icon_url,
- c.path
- FROM public.ml_categories c
- WHERE c.cid = p_cid AND c.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取品牌信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_brand_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- logo_url TEXT,
- description TEXT
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- b.id,
- b.cid,
- b.name,
- b.logo_url,
- b.description
- FROM public.ml_brands b
- WHERE b.cid = p_cid AND b.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取店铺信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_shop_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- shop_name VARCHAR,
- description TEXT,
- shop_logo TEXT,
- rating_avg DECIMAL,
- product_count INTEGER
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- s.id,
- s.cid,
- s.shop_name,
- s.description,
- s.shop_logo,
- s.rating_avg,
- s.product_count
- FROM public.ml_shops s
- WHERE s.cid = p_cid AND s.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 生成 SEO 友好的 URL 路径
-CREATE OR REPLACE FUNCTION public.generate_seo_url(
- p_type VARCHAR, -- 'product', 'category', 'brand', 'shop'
- p_cid INTEGER,
- p_slug VARCHAR DEFAULT NULL
-)
-RETURNS TEXT AS $$
-DECLARE
- url_path TEXT;
-BEGIN
- CASE p_type
- WHEN 'product' THEN
- url_path := '/product/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'category' THEN
- url_path := '/category/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'brand' THEN
- url_path := '/brand/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'shop' THEN
- url_path := '/shop/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- ELSE
- url_path := '/' || p_type || '/' || p_cid;
- END CASE;
-
- RETURN url_path;
-END;
-$$ LANGUAGE plpgsql;
-
--- 批量更新 slug 字段(用于现有数据)
-CREATE OR REPLACE FUNCTION public.update_seo_slugs()
-RETURNS VOID AS $$
-BEGIN
- -- 更新商品 slug
- UPDATE public.ml_products
- SET slug = LOWER(REGEXP_REPLACE(name, '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
-
- -- 更新分类 slug
- UPDATE public.ml_categories
- SET slug = LOWER(REGEXP_REPLACE(name, '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
-
- RAISE NOTICE 'SEO slugs updated successfully';
-END;
-$$ LANGUAGE plpgsql;
diff --git a/doc_mall/database/create_supabase_auth_users.sql b/doc_mall/database/create_supabase_auth_users.sql
deleted file mode 100644
index e69de29b..00000000
diff --git a/doc_mall/database/mall_alter_upgrade.sql b/doc_mall/database/mall_alter_upgrade.sql
deleted file mode 100644
index 6b82771f..00000000
--- a/doc_mall/database/mall_alter_upgrade.sql
+++ /dev/null
@@ -1,692 +0,0 @@
--- =====================================================================================
--- 商城系统增量升级脚本 (ALTER方式)
--- 用于在现有数据库基础上添加商城功能
--- 表名前缀: ml_ (mall)
--- 复用表: ak_users (用户主表)
--- 兼容: PostgreSQL + Supabase
--- =====================================================================================
-
--- =====================================================================================
--- 1. 启用必要的扩展
--- =====================================================================================
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-CREATE EXTENSION IF NOT EXISTS "pg_stat_statements";
-CREATE EXTENSION IF NOT EXISTS "btree_gin";
-
--- =====================================================================================
--- 2. 检查并创建商城核心表(如果不存在)
--- =====================================================================================
-
--- 商城用户扩展信息表
-CREATE TABLE IF NOT EXISTS public.ml_user_profiles (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- user_type INTEGER DEFAULT 1 NOT NULL,
- status INTEGER DEFAULT 1 NOT NULL,
- real_name VARCHAR(100),
- id_card VARCHAR(32),
- business_license VARCHAR(100),
- credit_score INTEGER DEFAULT 100,
- verification_status INTEGER DEFAULT 0,
- verification_data JSONB DEFAULT '{}',
- preferences JSONB DEFAULT '{}',
- emergency_contact VARCHAR(200),
- service_areas JSONB,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_user_type CHECK (user_type IN (1,2,3,4,5)),
- CONSTRAINT chk_ml_user_status CHECK (status IN (1,2,3,4)),
- CONSTRAINT chk_ml_verification_status CHECK (verification_status IN (0,1,2)),
- CONSTRAINT chk_ml_credit_score CHECK (credit_score >= 0 AND credit_score <= 1000)
-);
-
--- 用户地址表
-CREATE TABLE IF NOT EXISTS public.ml_user_addresses (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- receiver_name VARCHAR(100) NOT NULL,
- receiver_phone VARCHAR(32) NOT NULL,
- province VARCHAR(100) NOT NULL,
- city VARCHAR(100) NOT NULL,
- district VARCHAR(100) NOT NULL,
- street VARCHAR(200),
- address_detail TEXT NOT NULL,
- postal_code VARCHAR(16),
- is_default BOOLEAN DEFAULT FALSE,
- label VARCHAR(50),
- latitude DECIMAL(10,7),
- longitude DECIMAL(10,7),
- delivery_instructions TEXT,
- business_hours VARCHAR(100),
- status INTEGER DEFAULT 1,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_address_status CHECK (status IN (1,2))
-);
-
--- 商品分类表
-CREATE TABLE IF NOT EXISTS public.ml_categories (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- parent_id UUID REFERENCES public.ml_categories(id),
- name VARCHAR(200) NOT NULL,
- slug VARCHAR(200) UNIQUE,
- description TEXT,
- icon_url TEXT,
- banner_url TEXT,
- sort_order INTEGER DEFAULT 0,
- level INTEGER DEFAULT 1,
- path TEXT[],
- is_active BOOLEAN DEFAULT TRUE,
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
--- 品牌表
-CREATE TABLE IF NOT EXISTS public.ml_brands (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- name VARCHAR(200) NOT NULL,
- logo_url TEXT,
- description TEXT,
- website VARCHAR(500),
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
--- 商品表
-CREATE TABLE IF NOT EXISTS public.ml_products (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- category_id UUID NOT NULL REFERENCES public.ml_categories(id),
- brand_id UUID REFERENCES public.ml_brands(id),
- product_code VARCHAR(100) UNIQUE NOT NULL,
- name VARCHAR(500) NOT NULL,
- subtitle VARCHAR(1000),
- description TEXT,
- main_image_url TEXT,
- image_urls JSONB DEFAULT '[]',
- video_urls JSONB DEFAULT '[]',
- base_price DECIMAL(12,2) NOT NULL CHECK (base_price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
- total_stock INTEGER DEFAULT 0 CHECK (total_stock >= 0),
- available_stock INTEGER DEFAULT 0 CHECK (available_stock >= 0),
- min_order_qty INTEGER DEFAULT 1 CHECK (min_order_qty > 0),
- max_order_qty INTEGER,
- weight DECIMAL(10,3),
- dimensions JSONB,
- status INTEGER DEFAULT 1,
- is_featured BOOLEAN DEFAULT FALSE,
- is_new BOOLEAN DEFAULT FALSE,
- is_hot BOOLEAN DEFAULT FALSE,
- view_count INTEGER DEFAULT 0,
- sale_count INTEGER DEFAULT 0,
- favorite_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00 CHECK (rating_avg >= 0 AND rating_avg <= 5),
- rating_count INTEGER DEFAULT 0,
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- seo_keywords TEXT[],
- slug VARCHAR(200) UNIQUE,
- tags TEXT[],
- attributes JSONB DEFAULT '{}',
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- published_at TIMESTAMP WITH TIME ZONE,
-
- CONSTRAINT chk_ml_product_status CHECK (status IN (1,2,3,4))
-);
-
--- 商品SKU表
-CREATE TABLE IF NOT EXISTS public.ml_product_skus (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_code VARCHAR(100) UNIQUE NOT NULL,
- specifications JSONB DEFAULT '{}',
- price DECIMAL(12,2) NOT NULL CHECK (price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
- stock INTEGER DEFAULT 0 CHECK (stock >= 0),
- warning_stock INTEGER DEFAULT 10,
- image_url TEXT,
- weight DECIMAL(10,3),
- status INTEGER DEFAULT 1,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_sku_status CHECK (status IN (1,2))
-);
-
--- 店铺信息表
-CREATE TABLE IF NOT EXISTS public.ml_shops (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- merchant_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- shop_name VARCHAR(200) NOT NULL,
- shop_logo TEXT,
- shop_banner TEXT,
- description TEXT,
- business_license VARCHAR(100),
- contact_name VARCHAR(100),
- contact_phone VARCHAR(32),
- contact_email VARCHAR(200),
- address JSONB,
- business_hours JSONB,
- status INTEGER DEFAULT 1,
- product_count INTEGER DEFAULT 0,
- order_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- rating_count INTEGER DEFAULT 0,
- verified_at TIMESTAMP WITH TIME ZONE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_shop_status CHECK (status IN (1,2,3))
-);
-
--- 订单表
-CREATE TABLE IF NOT EXISTS public.ml_orders (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL,
- order_no VARCHAR(50) UNIQUE NOT NULL,
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- product_amount DECIMAL(12,2) NOT NULL DEFAULT 0,
- discount_amount DECIMAL(12,2) DEFAULT 0,
- shipping_fee DECIMAL(12,2) DEFAULT 0,
- total_amount DECIMAL(12,2) NOT NULL,
- paid_amount DECIMAL(12,2) DEFAULT 0,
- shipping_address JSONB NOT NULL,
- order_status INTEGER DEFAULT 1,
- payment_status INTEGER DEFAULT 1,
- shipping_status INTEGER DEFAULT 1,
- paid_at TIMESTAMP WITH TIME ZONE,
- shipped_at TIMESTAMP WITH TIME ZONE,
- delivered_at TIMESTAMP WITH TIME ZONE,
- completed_at TIMESTAMP WITH TIME ZONE,
- remark TEXT,
- merchant_memo TEXT,
- cancel_reason TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_order_status CHECK (order_status IN (1,2,3,4,5,6,7)),
- CONSTRAINT chk_ml_payment_status CHECK (payment_status IN (1,2,3,4)),
- CONSTRAINT chk_ml_shipping_status CHECK (shipping_status IN (1,2,3,4))
-);
-
--- 购物车表
-CREATE TABLE IF NOT EXISTS public.ml_shopping_cart (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_id UUID REFERENCES public.ml_product_skus(id) ON DELETE CASCADE,
- quantity INTEGER NOT NULL CHECK (quantity > 0),
- selected BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, product_id, sku_id)
-);
-
--- =====================================================================================
--- 3. ALTER 语句:为现有表添加商城相关字段
--- =====================================================================================
-
--- 为 ak_users 表添加商城相关字段(如果不存在)
-DO $$
-BEGIN
- -- 添加商城相关字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_status') THEN
- ALTER TABLE public.ak_users ADD COLUMN mall_status INTEGER DEFAULT 1; -- 1:正常 2:禁用
- END IF;
-
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_type') THEN
- ALTER TABLE public.ak_users ADD COLUMN mall_type INTEGER DEFAULT 1; -- 1:消费者 2:商家
- END IF;
-
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'last_login_ip') THEN
- ALTER TABLE public.ak_users ADD COLUMN last_login_ip INET;
- END IF;
-
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_orders') THEN
- ALTER TABLE public.ak_users ADD COLUMN total_orders INTEGER DEFAULT 0;
- END IF;
-
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_spent') THEN
- ALTER TABLE public.ak_users ADD COLUMN total_spent DECIMAL(12,2) DEFAULT 0.00;
- END IF;
-
- RAISE NOTICE 'ak_users 表字段添加完成';
-END $$;
-
--- =====================================================================================
--- 4. 创建索引
--- =====================================================================================
-
--- 用户扩展表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_user_id ON public.ml_user_profiles(user_id);
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_type ON public.ml_user_profiles(user_type);
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_status ON public.ml_user_profiles(status);
-
--- 分类表索引
-CREATE INDEX IF NOT EXISTS idx_ml_categories_cid ON public.ml_categories(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_parent ON public.ml_categories(parent_id);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_slug ON public.ml_categories(slug);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_level ON public.ml_categories(level, sort_order);
-
--- 品牌表索引
-CREATE INDEX IF NOT EXISTS idx_ml_brands_cid ON public.ml_brands(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_brands_name ON public.ml_brands(name);
-
--- 地址表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_addresses_user_id ON public.ml_user_addresses(user_id);
-CREATE INDEX IF NOT EXISTS idx_ml_user_addresses_default ON public.ml_user_addresses(user_id, is_default);
-
--- 商品表索引
-CREATE INDEX IF NOT EXISTS idx_ml_products_cid ON public.ml_products(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_products_merchant ON public.ml_products(merchant_id, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_category ON public.ml_products(category_id, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_status ON public.ml_products(status, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_products_featured ON public.ml_products(is_featured, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_price ON public.ml_products(base_price);
-CREATE INDEX IF NOT EXISTS idx_ml_products_rating ON public.ml_products(rating_avg DESC, rating_count DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_products_tags ON public.ml_products USING GIN(tags);
-CREATE INDEX IF NOT EXISTS idx_ml_products_slug ON public.ml_products(slug);
-
--- 店铺表索引
-CREATE INDEX IF NOT EXISTS idx_ml_shops_cid ON public.ml_shops(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_shops_merchant ON public.ml_shops(merchant_id);
-
--- SKU表索引
-CREATE INDEX IF NOT EXISTS idx_ml_product_skus_product ON public.ml_product_skus(product_id);
-CREATE INDEX IF NOT EXISTS idx_ml_product_skus_code ON public.ml_product_skus(sku_code);
-
--- 订单表索引
-CREATE INDEX IF NOT EXISTS idx_ml_orders_cid ON public.ml_orders(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_user ON public.ml_orders(user_id, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_merchant ON public.ml_orders(merchant_id, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_status ON public.ml_orders(order_status, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_no ON public.ml_orders(order_no);
-
--- 购物车表索引
-CREATE INDEX IF NOT EXISTS idx_ml_shopping_cart_user ON public.ml_shopping_cart(user_id);
-
--- ak_users 表新增字段索引
-CREATE INDEX IF NOT EXISTS idx_ak_users_mall_status ON public.ak_users(mall_status);
-CREATE INDEX IF NOT EXISTS idx_ak_users_mall_type ON public.ak_users(mall_type);
-CREATE INDEX IF NOT EXISTS idx_ak_users_total_orders ON public.ak_users(total_orders DESC);
-
--- =====================================================================================
--- 5. 创建序列(如果不存在)
--- =====================================================================================
-
-CREATE SEQUENCE IF NOT EXISTS public.ml_order_seq START 1;
-
--- =====================================================================================
--- 6. 创建或替换触发器函数
--- =====================================================================================
-
--- 自动更新 updated_at 字段的函数
-CREATE OR REPLACE FUNCTION public.update_updated_at_column()
-RETURNS TRIGGER AS $$
-BEGIN
- NEW.updated_at = NOW();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 确保每个用户只有一个默认地址的触发器函数
-CREATE OR REPLACE FUNCTION public.ensure_single_default_address()
-RETURNS TRIGGER AS $$
-BEGIN
- IF NEW.is_default = TRUE THEN
- UPDATE public.ml_user_addresses
- SET is_default = FALSE
- WHERE user_id = NEW.user_id AND id != NEW.id;
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 商品库存更新触发器函数
-CREATE OR REPLACE FUNCTION public.update_product_stock()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 更新商品总库存
- UPDATE public.ml_products
- SET
- total_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = COALESCE(NEW.product_id, OLD.product_id) AND status = 1
- ),
- available_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = COALESCE(NEW.product_id, OLD.product_id) AND status = 1
- )
- WHERE id = COALESCE(NEW.product_id, OLD.product_id);
-
- RETURN COALESCE(NEW, OLD);
-END;
-$$ LANGUAGE plpgsql;
-
--- 订单状态变更处理函数
-CREATE OR REPLACE FUNCTION public.handle_order_status_change()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 如果订单状态变为已付款
- IF NEW.order_status = 2 AND OLD.order_status = 1 THEN
- NEW.paid_at = NOW();
- END IF;
-
- -- 如果订单状态变为已发货
- IF NEW.order_status = 3 AND OLD.order_status = 2 THEN
- NEW.shipped_at = NOW();
- END IF;
-
- -- 如果订单状态变为已完成
- IF NEW.order_status = 4 AND OLD.order_status = 3 THEN
- NEW.delivered_at = NOW();
- NEW.completed_at = NOW();
-
- -- 更新用户统计数据
- UPDATE public.ak_users
- SET
- total_orders = total_orders + 1,
- total_spent = total_spent + NEW.total_amount
- WHERE id = NEW.user_id;
-
- -- 更新商品销量
- UPDATE public.ml_products
- SET sale_count = sale_count + (
- SELECT SUM(quantity)
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- )
- WHERE id IN (
- SELECT product_id
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- );
- END IF;
-
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 7. 创建触发器
--- =====================================================================================
-
--- 删除可能存在的同名触发器,然后重新创建
-DROP TRIGGER IF EXISTS trigger_ml_user_profiles_updated_at ON public.ml_user_profiles;
-CREATE TRIGGER trigger_ml_user_profiles_updated_at
- BEFORE UPDATE ON public.ml_user_profiles
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_user_addresses_updated_at ON public.ml_user_addresses;
-CREATE TRIGGER trigger_ml_user_addresses_updated_at
- BEFORE UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_products_updated_at ON public.ml_products;
-CREATE TRIGGER trigger_ml_products_updated_at
- BEFORE UPDATE ON public.ml_products
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_product_skus_updated_at ON public.ml_product_skus;
-CREATE TRIGGER trigger_ml_product_skus_updated_at
- BEFORE UPDATE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_shops_updated_at ON public.ml_shops;
-CREATE TRIGGER trigger_ml_shops_updated_at
- BEFORE UPDATE ON public.ml_shops
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_orders_updated_at ON public.ml_orders;
-CREATE TRIGGER trigger_ml_orders_updated_at
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_shopping_cart_updated_at ON public.ml_shopping_cart;
-CREATE TRIGGER trigger_ml_shopping_cart_updated_at
- BEFORE UPDATE ON public.ml_shopping_cart
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
-
-DROP TRIGGER IF EXISTS trigger_ml_single_default_address ON public.ml_user_addresses;
-CREATE TRIGGER trigger_ml_single_default_address
- BEFORE INSERT OR UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
-
-DROP TRIGGER IF EXISTS trigger_ml_update_product_stock ON public.ml_product_skus;
-CREATE TRIGGER trigger_ml_update_product_stock
- AFTER INSERT OR UPDATE OR DELETE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_product_stock();
-
-DROP TRIGGER IF EXISTS trigger_ml_order_status_change ON public.ml_orders;
-CREATE TRIGGER trigger_ml_order_status_change
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.handle_order_status_change();
-
--- =====================================================================================
--- 8. 创建实用函数
--- =====================================================================================
-
--- 生成订单号的函数
-CREATE OR REPLACE FUNCTION public.generate_order_no()
-RETURNS TEXT AS $$
-DECLARE
- order_no TEXT;
-BEGIN
- order_no := 'ML' || TO_CHAR(NOW(), 'YYYYMMDD') || LPAD(NEXTVAL('ml_order_seq')::TEXT, 6, '0');
- RETURN order_no;
-END;
-$$ LANGUAGE plpgsql;
-
--- 生成优惠券码的函数
-CREATE OR REPLACE FUNCTION public.generate_coupon_code()
-RETURNS TEXT AS $$
-DECLARE
- code TEXT;
- chars TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- result TEXT := '';
- i INTEGER;
-BEGIN
- FOR i IN 1..8 LOOP
- result := result || substr(chars, (random() * length(chars))::integer + 1, 1);
- END LOOP;
- RETURN 'CP' || result;
-END;
-$$ LANGUAGE plpgsql;
-
--- 检查用户是否为认证商家
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(p_user_id UUID)
-RETURNS BOOLEAN AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (user_type = 2 AND verification_status = 1) INTO result
- FROM public.ml_user_profiles
- WHERE user_id = p_user_id;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$ LANGUAGE plpgsql;
-
--- 计算购物车总金额
-CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
-RETURNS DECIMAL AS $$
-DECLARE
- total_amount DECIMAL := 0;
-BEGIN
- SELECT COALESCE(SUM(
- CASE
- WHEN c.sku_id IS NOT NULL THEN s.price * c.quantity
- ELSE p.base_price * c.quantity
- END
- ), 0) INTO total_amount
- FROM public.ml_shopping_cart c
- LEFT JOIN public.ml_product_skus s ON c.sku_id = s.id
- LEFT JOIN public.ml_products p ON c.product_id = p.id
- WHERE c.user_id = p_user_id
- AND c.selected = TRUE
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1);
-
- RETURN total_amount;
-END;
-$$ LANGUAGE plpgsql;
-
--- SEO友好的获取商品信息函数
-CREATE OR REPLACE FUNCTION public.get_product_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- main_image_url TEXT,
- base_price DECIMAL,
- rating_avg DECIMAL,
- sale_count INTEGER
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- p.id,
- p.cid,
- p.name,
- p.slug,
- p.description,
- p.main_image_url,
- p.base_price,
- p.rating_avg,
- p.sale_count
- FROM public.ml_products p
- WHERE p.cid = p_cid AND p.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 9. 创建视图
--- =====================================================================================
-
--- 商城用户完整信息视图
-CREATE OR REPLACE VIEW public.ml_users_view AS
-SELECT
- u.id,
- u.username,
- u.email,
- u.phone,
- u.avatar_url,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- u.mall_status,
- u.mall_type,
- u.total_orders,
- u.total_spent,
- p.user_type,
- p.status,
- p.real_name,
- p.credit_score,
- p.verification_status,
- CASE
- WHEN p.user_type = 1 THEN '消费者'
- WHEN p.user_type = 2 THEN '商家'
- WHEN p.user_type = 3 THEN '配送员'
- WHEN p.user_type = 4 THEN '客服'
- WHEN p.user_type = 5 THEN '管理员'
- ELSE '未知'
- END as user_type_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
--- 商品详情视图
-CREATE OR REPLACE VIEW public.ml_products_detail_view AS
-SELECT
- p.*,
- c.cid as category_cid,
- c.name as category_name,
- c.path as category_path,
- b.cid as brand_cid,
- b.name as brand_name,
- s.cid as shop_cid,
- s.shop_name,
- u.username as merchant_name,
- CASE
- WHEN p.status = 1 THEN '上架'
- WHEN p.status = 2 THEN '下架'
- WHEN p.status = 3 THEN '草稿'
- WHEN p.status = 4 THEN '删除'
- ELSE '未知'
- END as status_name
-FROM public.ml_products p
-LEFT JOIN public.ml_categories c ON p.category_id = c.id
-LEFT JOIN public.ml_brands b ON p.brand_id = b.id
-LEFT JOIN public.ml_shops s ON p.merchant_id = s.merchant_id
-LEFT JOIN public.ak_users u ON p.merchant_id = u.id;
-
--- =====================================================================================
--- 10. 初始化基础数据
--- =====================================================================================
-
--- 插入默认分类(如果不存在)
-INSERT INTO public.ml_categories (id, name, slug, level, path)
-SELECT * FROM (VALUES
- (uuid_generate_v4(), '数码电器', 'digital', 1, ARRAY['数码电器']),
- (uuid_generate_v4(), '服装鞋帽', 'fashion', 1, ARRAY['服装鞋帽']),
- (uuid_generate_v4(), '家居用品', 'home', 1, ARRAY['家居用品']),
- (uuid_generate_v4(), '食品饮料', 'food', 1, ARRAY['食品饮料']),
- (uuid_generate_v4(), '美妆护肤', 'beauty', 1, ARRAY['美妆护肤'])
-) AS v(id, name, slug, level, path)
-WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories WHERE slug = v.slug);
-
--- 为现有 ak_users 用户创建默认商城档案(如果不存在)
-INSERT INTO public.ml_user_profiles (user_id, user_type, status)
-SELECT
- id,
- 1, -- 默认为消费者
- 1 -- 默认状态正常
-FROM public.ak_users
-WHERE id NOT IN (SELECT user_id FROM public.ml_user_profiles WHERE user_id IS NOT NULL);
-
--- =====================================================================================
--- 11. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '商城系统增量升级完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '✓ 扩展创建完成';
- RAISE NOTICE '✓ 商城表结构创建/检查完成';
- RAISE NOTICE '✓ ak_users 表字段添加完成';
- RAISE NOTICE '✓ 索引创建完成';
- RAISE NOTICE '✓ 触发器创建完成';
- RAISE NOTICE '✓ 实用函数创建完成';
- RAISE NOTICE '✓ 视图创建完成';
- RAISE NOTICE '✓ 基础数据初始化完成';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '使用说明:';
- RAISE NOTICE '1. 此脚本安全执行,不会覆盖现有数据';
- RAISE NOTICE '2. 使用 IF NOT EXISTS 和 IF EXISTS 检查避免重复';
- RAISE NOTICE '3. 为现有用户自动创建商城档案';
- RAISE NOTICE '4. 所有新表前缀: ml_';
- RAISE NOTICE '5. 复用表: ak_users';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/mall_database_check.sql b/doc_mall/database/mall_database_check.sql
deleted file mode 100644
index a9e0f023..00000000
--- a/doc_mall/database/mall_database_check.sql
+++ /dev/null
@@ -1,332 +0,0 @@
--- =====================================================================================
--- 商城系统数据库状态检查脚本
--- 分析现有数据库结构,生成个性化ALTER建议
--- =====================================================================================
-
--- =====================================================================================
--- 1. 检查现有表结构
--- =====================================================================================
-
--- 检查 ak_users 表字段情况
-DO $$
-DECLARE
- missing_fields TEXT[] := ARRAY[]::TEXT[];
- existing_fields TEXT[] := ARRAY[]::TEXT[];
- field_name TEXT;
- field_names TEXT[] := ARRAY['mall_status', 'mall_type', 'last_login_ip', 'total_orders', 'total_spent', 'user_level', 'points', 'verified_status'];
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '检查 ak_users 表字段状态';
- RAISE NOTICE '=======================================================';
-
- FOREACH field_name IN ARRAY field_names LOOP
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = field_name) THEN
- existing_fields := array_append(existing_fields, field_name);
- RAISE NOTICE '✓ 字段已存在: %', field_name;
- ELSE
- missing_fields := array_append(missing_fields, field_name);
- RAISE NOTICE '✗ 字段缺失: %', field_name;
- END IF;
- END LOOP;
-
- RAISE NOTICE '-------------------------------------------------------';
- RAISE NOTICE '已存在字段数量: %', array_length(existing_fields, 1);
- RAISE NOTICE '缺失字段数量: %', array_length(missing_fields, 1);
-
- IF array_length(missing_fields, 1) > 0 THEN
- RAISE NOTICE '需要添加的字段: %', array_to_string(missing_fields, ', ');
- ELSE
- RAISE NOTICE 'ak_users 表所有商城字段均已存在';
- END IF;
-END $$;
-
--- 检查商城表存在情况
-DO $$
-DECLARE
- table_name TEXT;
- table_names TEXT[] := ARRAY['ml_user_profiles', 'ml_user_addresses', 'ml_categories', 'ml_brands', 'ml_products', 'ml_product_skus', 'ml_shops', 'ml_orders', 'ml_shopping_cart'];
- existing_tables TEXT[] := ARRAY[]::TEXT[];
- missing_tables TEXT[] := ARRAY[]::TEXT[];
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '检查商城核心表存在情况';
- RAISE NOTICE '=======================================================';
-
- FOREACH table_name IN ARRAY table_names LOOP
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = table_name) THEN
- existing_tables := array_append(existing_tables, table_name);
- RAISE NOTICE '✓ 表已存在: %', table_name;
- ELSE
- missing_tables := array_append(missing_tables, table_name);
- RAISE NOTICE '✗ 表缺失: %', table_name;
- END IF;
- END LOOP;
-
- RAISE NOTICE '-------------------------------------------------------';
- RAISE NOTICE '已存在表数量: %', array_length(existing_tables, 1);
- RAISE NOTICE '缺失表数量: %', array_length(missing_tables, 1);
-
- IF array_length(missing_tables, 1) > 0 THEN
- RAISE NOTICE '需要创建的表: %', array_to_string(missing_tables, ', ');
- ELSE
- RAISE NOTICE '所有商城核心表均已存在';
- END IF;
-END $$;
-
--- =====================================================================================
--- 2. 检查现有索引情况
--- =====================================================================================
-
--- 检查重要索引存在情况
-DO $$
-DECLARE
- index_info RECORD;
- missing_indexes TEXT[] := ARRAY[]::TEXT[];
- existing_indexes TEXT[] := ARRAY[]::TEXT[];
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '检查重要索引存在情况';
- RAISE NOTICE '=======================================================';
-
- -- 定义重要索引列表
- FOR index_info IN
- SELECT * FROM (VALUES
- ('idx_ak_users_mall_status', 'ak_users', 'mall_status'),
- ('idx_ak_users_mall_type', 'ak_users', 'mall_type'),
- ('idx_ak_users_total_orders', 'ak_users', 'total_orders'),
- ('idx_ml_products_cid', 'ml_products', 'cid'),
- ('idx_ml_products_slug', 'ml_products', 'slug'),
- ('idx_ml_categories_cid', 'ml_categories', 'cid'),
- ('idx_ml_orders_cid', 'ml_orders', 'cid'),
- ('idx_ml_shops_cid', 'ml_shops', 'cid')
- ) AS t(index_name, table_name, column_name)
- LOOP
- -- 检查表是否存在
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = index_info.table_name) THEN
- -- 检查索引是否存在
- IF EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = index_info.index_name) THEN
- existing_indexes := array_append(existing_indexes, index_info.index_name);
- RAISE NOTICE '✓ 索引已存在: % (表: %)', index_info.index_name, index_info.table_name;
- ELSE
- missing_indexes := array_append(missing_indexes, index_info.index_name);
- RAISE NOTICE '✗ 索引缺失: % (表: %)', index_info.index_name, index_info.table_name;
- END IF;
- ELSE
- RAISE NOTICE '○ 表不存在,跳过索引检查: % (表: %)', index_info.index_name, index_info.table_name;
- END IF;
- END LOOP;
-
- RAISE NOTICE '-------------------------------------------------------';
- RAISE NOTICE '已存在索引数量: %', array_length(existing_indexes, 1);
- RAISE NOTICE '缺失索引数量: %', array_length(missing_indexes, 1);
-END $$;
-
--- =====================================================================================
--- 3. 检查扩展和函数
--- =====================================================================================
-
--- 检查必要的PostgreSQL扩展
-DO $$
-DECLARE
- ext_name TEXT;
- extensions TEXT[] := ARRAY['uuid-ossp', 'btree_gin'];
- existing_ext TEXT[] := ARRAY[]::TEXT[];
- missing_ext TEXT[] := ARRAY[]::TEXT[];
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '检查PostgreSQL扩展';
- RAISE NOTICE '=======================================================';
-
- FOREACH ext_name IN ARRAY extensions LOOP
- IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = ext_name) THEN
- existing_ext := array_append(existing_ext, ext_name);
- RAISE NOTICE '✓ 扩展已安装: %', ext_name;
- ELSE
- missing_ext := array_append(missing_ext, ext_name);
- RAISE NOTICE '✗ 扩展缺失: %', ext_name;
- END IF;
- END LOOP;
-
- IF array_length(missing_ext, 1) > 0 THEN
- RAISE NOTICE '需要安装的扩展: %', array_to_string(missing_ext, ', ');
- END IF;
-END $$;
-
--- 检查商城相关函数
-DO $$
-DECLARE
- func_name TEXT;
- functions TEXT[] := ARRAY['generate_order_no', 'calculate_cart_total', 'update_user_mall_stats'];
- existing_funcs TEXT[] := ARRAY[]::TEXT[];
- missing_funcs TEXT[] := ARRAY[]::TEXT[];
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '检查商城相关函数';
- RAISE NOTICE '=======================================================';
-
- FOREACH func_name IN ARRAY functions LOOP
- IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = func_name) THEN
- existing_funcs := array_append(existing_funcs, func_name);
- RAISE NOTICE '✓ 函数已存在: %', func_name;
- ELSE
- missing_funcs := array_append(missing_funcs, func_name);
- RAISE NOTICE '✗ 函数缺失: %', func_name;
- END IF;
- END LOOP;
-
- IF array_length(missing_funcs, 1) > 0 THEN
- RAISE NOTICE '需要创建的函数: %', array_to_string(missing_funcs, ', ');
- END IF;
-END $$;
-
--- =====================================================================================
--- 4. 生成个性化建议
--- =====================================================================================
-
-DO $$
-DECLARE
- ak_users_missing INTEGER := 0;
- mall_tables_missing INTEGER := 0;
- suggestion TEXT := '';
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '个性化升级建议';
- RAISE NOTICE '=======================================================';
-
- -- 统计ak_users缺失字段
- SELECT COUNT(*) INTO ak_users_missing
- FROM (VALUES ('mall_status'), ('mall_type'), ('total_orders'), ('total_spent')) AS t(field)
- WHERE NOT EXISTS (
- SELECT 1 FROM information_schema.columns
- WHERE table_name = 'ak_users' AND column_name = t.field
- );
-
- -- 统计商城表缺失情况
- SELECT COUNT(*) INTO mall_tables_missing
- FROM (VALUES ('ml_products'), ('ml_categories'), ('ml_orders'), ('ml_shops')) AS t(table_name)
- WHERE NOT EXISTS (
- SELECT 1 FROM information_schema.tables
- WHERE table_name = t.table_name
- );
-
- -- 生成建议
- IF ak_users_missing > 0 AND mall_tables_missing > 0 THEN
- suggestion := '建议使用 mall_alter_upgrade.sql(完整升级脚本)';
- ELSIF ak_users_missing > 0 AND mall_tables_missing = 0 THEN
- suggestion := '建议使用 mall_fields_only_upgrade.sql(仅字段升级脚本)';
- ELSIF ak_users_missing = 0 AND mall_tables_missing > 0 THEN
- suggestion := '建议使用 mall_migration.sql(表结构创建脚本)';
- ELSE
- suggestion := '数据库结构已完整,建议检查数据完整性和权限配置';
- END IF;
-
- RAISE NOTICE '根据您的数据库状态分析:';
- RAISE NOTICE '• ak_users 表缺失字段数: %', ak_users_missing;
- RAISE NOTICE '• 缺失商城核心表数: %', mall_tables_missing;
- RAISE NOTICE '';
- RAISE NOTICE '推荐执行方案: %', suggestion;
-
- -- 详细建议
- RAISE NOTICE '';
- RAISE NOTICE '详细执行步骤:';
- IF ak_users_missing > 0 THEN
- RAISE NOTICE '1. 先执行字段升级脚本为ak_users表添加商城字段';
- END IF;
- IF mall_tables_missing > 0 THEN
- RAISE NOTICE '2. 执行表结构创建脚本建立商城核心表';
- END IF;
- RAISE NOTICE '3. 执行SEO和安全策略脚本(mall_seo_security.sql)';
- RAISE NOTICE '4. 根据需要执行模拟数据插入脚本进行测试';
-END $$;
-
--- =====================================================================================
--- 5. 生成具体的ALTER语句(可选)
--- =====================================================================================
-
--- 生成ak_users表缺失字段的ALTER语句
-DO $$
-DECLARE
- alter_statements TEXT := '';
- field_name TEXT;
- field_configs TEXT[] := ARRAY[
- 'mall_status INTEGER DEFAULT 1 CHECK (mall_status IN (1,2))',
- 'mall_type INTEGER DEFAULT 1 CHECK (mall_type IN (1,2,3))',
- 'total_orders INTEGER DEFAULT 0 CHECK (total_orders >= 0)',
- 'total_spent DECIMAL(12,2) DEFAULT 0.00 CHECK (total_spent >= 0)',
- 'user_level INTEGER DEFAULT 1 CHECK (user_level >= 1 AND user_level <= 10)',
- 'points INTEGER DEFAULT 0 CHECK (points >= 0)',
- 'verified_status INTEGER DEFAULT 0 CHECK (verified_status IN (0,1,2))'
- ];
- field_names TEXT[] := ARRAY['mall_status', 'mall_type', 'total_orders', 'total_spent', 'user_level', 'points', 'verified_status'];
- i INTEGER;
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '生成ak_users表ALTER语句';
- RAISE NOTICE '=======================================================';
-
- FOR i IN 1..array_length(field_names, 1) LOOP
- field_name := field_names[i];
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = field_name) THEN
- alter_statements := alter_statements || format('ALTER TABLE public.ak_users ADD COLUMN %s;' || chr(10), field_configs[i]);
- RAISE NOTICE '需要执行: ALTER TABLE public.ak_users ADD COLUMN %;', field_configs[i];
- END IF;
- END LOOP;
-
- IF alter_statements = '' THEN
- RAISE NOTICE 'ak_users表无需添加字段';
- ELSE
- RAISE NOTICE '';
- RAISE NOTICE '完整ALTER脚本:';
- RAISE NOTICE '%', alter_statements;
- END IF;
-END $$;
-
--- =====================================================================================
--- 6. 数据完整性检查
--- =====================================================================================
-
-DO $$
-DECLARE
- users_count INTEGER;
- profiles_count INTEGER;
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '数据完整性检查';
- RAISE NOTICE '=======================================================';
-
- -- 检查用户表数据
- SELECT COUNT(*) INTO users_count FROM public.ak_users;
- RAISE NOTICE 'ak_users 表用户数量: %', users_count;
-
- -- 检查用户档案表(如果存在)
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_user_profiles') THEN
- SELECT COUNT(*) INTO profiles_count FROM public.ml_user_profiles;
- RAISE NOTICE 'ml_user_profiles 表档案数量: %', profiles_count;
-
- IF users_count > profiles_count THEN
- RAISE NOTICE '注意: 有 % 个用户缺少商城档案,建议执行档案补充脚本', users_count - profiles_count;
- END IF;
- ELSE
- RAISE NOTICE 'ml_user_profiles 表不存在';
- END IF;
-END $$;
-
--- =====================================================================================
--- 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '数据库状态检查完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '请根据上述分析结果选择合适的升级脚本:';
- RAISE NOTICE '';
- RAISE NOTICE '• mall_alter_upgrade.sql - 完整升级(表+字段+索引+函数)';
- RAISE NOTICE '• mall_fields_only_upgrade.sql - 仅字段升级(最小化修改)';
- RAISE NOTICE '• mall_migration.sql - 完整建表(全新部署)';
- RAISE NOTICE '• mall_seo_security.sql - SEO优化和安全策略';
- RAISE NOTICE '';
- RAISE NOTICE '建议在生产环境执行前先在测试环境验证!';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/mall_fields_only_upgrade.sql b/doc_mall/database/mall_fields_only_upgrade.sql
deleted file mode 100644
index efeba845..00000000
--- a/doc_mall/database/mall_fields_only_upgrade.sql
+++ /dev/null
@@ -1,734 +0,0 @@
--- =====================================================================================
--- 商城系统字段增量添加脚本 (仅字段和索引)
--- 适用于已有表结构,仅添加缺失字段和索引的场景
--- =====================================================================================
-
--- =====================================================================================
--- 1. 为现有 ak_users 表添加商城字段
--- =====================================================================================
-
-DO $$
-BEGIN
- -- 商城状态字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_status') THEN
- ALTER TABLE public.ak_users ADD COLUMN mall_status INTEGER DEFAULT 1;
- ALTER TABLE public.ak_users ADD CONSTRAINT chk_ak_users_mall_status CHECK (mall_status IN (1,2));
- RAISE NOTICE '✓ 添加字段: ak_users.mall_status';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.mall_status';
- END IF;
-
- -- 商城用户类型字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_type') THEN
- ALTER TABLE public.ak_users ADD COLUMN mall_type INTEGER DEFAULT 1;
- ALTER TABLE public.ak_users ADD CONSTRAINT chk_ak_users_mall_type CHECK (mall_type IN (1,2,3));
- RAISE NOTICE '✓ 添加字段: ak_users.mall_type';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.mall_type';
- END IF;
-
- -- 最后登录IP字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'last_login_ip') THEN
- ALTER TABLE public.ak_users ADD COLUMN last_login_ip INET;
- RAISE NOTICE '✓ 添加字段: ak_users.last_login_ip';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.last_login_ip';
- END IF;
-
- -- 总订单数字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_orders') THEN
- ALTER TABLE public.ak_users ADD COLUMN total_orders INTEGER DEFAULT 0 CHECK (total_orders >= 0);
- RAISE NOTICE '✓ 添加字段: ak_users.total_orders';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.total_orders';
- END IF;
-
- -- 总消费金额字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_spent') THEN
- ALTER TABLE public.ak_users ADD COLUMN total_spent DECIMAL(12,2) DEFAULT 0.00 CHECK (total_spent >= 0);
- RAISE NOTICE '✓ 添加字段: ak_users.total_spent';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.total_spent';
- END IF;
-
- -- 用户等级字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'user_level') THEN
- ALTER TABLE public.ak_users ADD COLUMN user_level INTEGER DEFAULT 1 CHECK (user_level >= 1 AND user_level <= 10);
- RAISE NOTICE '✓ 添加字段: ak_users.user_level';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.user_level';
- END IF;
-
- -- 积分字段
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'points') THEN
- ALTER TABLE public.ak_users ADD COLUMN points INTEGER DEFAULT 0 CHECK (points >= 0);
- RAISE NOTICE '✓ 添加字段: ak_users.points';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.points';
- END IF;
-
- -- 实名认证状态
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'verified_status') THEN
- ALTER TABLE public.ak_users ADD COLUMN verified_status INTEGER DEFAULT 0 CHECK (verified_status IN (0,1,2));
- RAISE NOTICE '✓ 添加字段: ak_users.verified_status';
- ELSE
- RAISE NOTICE '○ 字段已存在: ak_users.verified_status';
- END IF;
-
- RAISE NOTICE '>> ak_users 表字段检查完成';
-END $$;
-
--- =====================================================================================
--- 2. 为现有商城表添加CID字段(SEO优化必需)
--- =====================================================================================
-
--- 为主要商城表添加cid自增字段
-DO $$
-BEGIN
- -- 为 ml_categories 表添加 cid 字段
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_categories') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'cid') THEN
- -- 创建序列
- CREATE SEQUENCE IF NOT EXISTS public.ml_categories_cid_seq;
- -- 添加cid字段
- ALTER TABLE public.ml_categories ADD COLUMN cid INTEGER UNIQUE DEFAULT nextval('public.ml_categories_cid_seq');
- -- 设置序列所有者
- ALTER SEQUENCE public.ml_categories_cid_seq OWNED BY public.ml_categories.cid;
- -- 更新现有记录的cid值
- UPDATE public.ml_categories SET cid = nextval('public.ml_categories_cid_seq') WHERE cid IS NULL;
- RAISE NOTICE '✓ 添加字段: ml_categories.cid (自增SEO ID)';
- ELSE
- RAISE NOTICE '○ 字段已存在: ml_categories.cid';
- END IF;
- END IF;
-
- -- 为 ml_brands 表添加 cid 字段
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_brands') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_brands' AND column_name = 'cid') THEN
- CREATE SEQUENCE IF NOT EXISTS public.ml_brands_cid_seq;
- ALTER TABLE public.ml_brands ADD COLUMN cid INTEGER UNIQUE DEFAULT nextval('public.ml_brands_cid_seq');
- ALTER SEQUENCE public.ml_brands_cid_seq OWNED BY public.ml_brands.cid;
- UPDATE public.ml_brands SET cid = nextval('public.ml_brands_cid_seq') WHERE cid IS NULL;
- RAISE NOTICE '✓ 添加字段: ml_brands.cid (自增SEO ID)';
- ELSE
- RAISE NOTICE '○ 字段已存在: ml_brands.cid';
- END IF;
- END IF;
-
- -- 为 ml_products 表添加 cid 字段
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_products') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'cid') THEN
- CREATE SEQUENCE IF NOT EXISTS public.ml_products_cid_seq;
- ALTER TABLE public.ml_products ADD COLUMN cid INTEGER UNIQUE DEFAULT nextval('public.ml_products_cid_seq');
- ALTER SEQUENCE public.ml_products_cid_seq OWNED BY public.ml_products.cid;
- UPDATE public.ml_products SET cid = nextval('public.ml_products_cid_seq') WHERE cid IS NULL;
- RAISE NOTICE '✓ 添加字段: ml_products.cid (自增SEO ID)';
- ELSE
- RAISE NOTICE '○ 字段已存在: ml_products.cid';
- END IF;
- END IF;
-
- -- 为 ml_shops 表添加 cid 字段
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_shops') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_shops' AND column_name = 'cid') THEN
- CREATE SEQUENCE IF NOT EXISTS public.ml_shops_cid_seq;
- ALTER TABLE public.ml_shops ADD COLUMN cid INTEGER UNIQUE DEFAULT nextval('public.ml_shops_cid_seq');
- ALTER SEQUENCE public.ml_shops_cid_seq OWNED BY public.ml_shops.cid;
- UPDATE public.ml_shops SET cid = nextval('public.ml_shops_cid_seq') WHERE cid IS NULL;
- RAISE NOTICE '✓ 添加字段: ml_shops.cid (自增SEO ID)';
- ELSE
- RAISE NOTICE '○ 字段已存在: ml_shops.cid';
- END IF;
- END IF;
-
- -- 为 ml_orders 表添加 cid 字段
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_orders') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_orders' AND column_name = 'cid') THEN
- CREATE SEQUENCE IF NOT EXISTS public.ml_orders_cid_seq;
- ALTER TABLE public.ml_orders ADD COLUMN cid INTEGER UNIQUE DEFAULT nextval('public.ml_orders_cid_seq');
- ALTER SEQUENCE public.ml_orders_cid_seq OWNED BY public.ml_orders.cid;
- UPDATE public.ml_orders SET cid = nextval('public.ml_orders_cid_seq') WHERE cid IS NULL;
- RAISE NOTICE '✓ 添加字段: ml_orders.cid (自增SEO ID)';
- ELSE
- RAISE NOTICE '○ 字段已存在: ml_orders.cid';
- END IF;
- END IF;
-
- RAISE NOTICE '>> CID 字段添加完成';
-END $$;
-
--- =====================================================================================
--- 3. 为现有商城表添加其他字段(如果表存在的话)
--- =====================================================================================
-
--- 为 ml_products 表添加SEO和营销字段
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_products') THEN
- -- SEO标题
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'seo_title') THEN
- ALTER TABLE public.ml_products ADD COLUMN seo_title VARCHAR(200);
- RAISE NOTICE '✓ 添加字段: ml_products.seo_title';
- END IF;
-
- -- SEO描述
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'seo_description') THEN
- ALTER TABLE public.ml_products ADD COLUMN seo_description VARCHAR(500);
- RAISE NOTICE '✓ 添加字段: ml_products.seo_description';
- END IF;
-
- -- SEO关键词
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'seo_keywords') THEN
- ALTER TABLE public.ml_products ADD COLUMN seo_keywords TEXT[];
- RAISE NOTICE '✓ 添加字段: ml_products.seo_keywords';
- END IF;
-
- -- URL slug
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'slug') THEN
- ALTER TABLE public.ml_products ADD COLUMN slug VARCHAR(200) UNIQUE;
- RAISE NOTICE '✓ 添加字段: ml_products.slug';
- END IF;
-
- -- 标签
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'tags') THEN
- ALTER TABLE public.ml_products ADD COLUMN tags TEXT[];
- RAISE NOTICE '✓ 添加字段: ml_products.tags';
- END IF;
-
- -- 是否特色商品
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'is_featured') THEN
- ALTER TABLE public.ml_products ADD COLUMN is_featured BOOLEAN DEFAULT FALSE;
- RAISE NOTICE '✓ 添加字段: ml_products.is_featured';
- END IF;
-
- -- 是否新品
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'is_new') THEN
- ALTER TABLE public.ml_products ADD COLUMN is_new BOOLEAN DEFAULT FALSE;
- RAISE NOTICE '✓ 添加字段: ml_products.is_new';
- END IF;
-
- -- 是否热销
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'is_hot') THEN
- ALTER TABLE public.ml_products ADD COLUMN is_hot BOOLEAN DEFAULT FALSE;
- RAISE NOTICE '✓ 添加字段: ml_products.is_hot';
- END IF;
-
- -- 浏览次数
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'view_count') THEN
- ALTER TABLE public.ml_products ADD COLUMN view_count INTEGER DEFAULT 0;
- RAISE NOTICE '✓ 添加字段: ml_products.view_count';
- END IF;
-
- -- 销售数量
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'sale_count') THEN
- ALTER TABLE public.ml_products ADD COLUMN sale_count INTEGER DEFAULT 0;
- RAISE NOTICE '✓ 添加字段: ml_products.sale_count';
- END IF;
-
- -- 收藏数量
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'favorite_count') THEN
- ALTER TABLE public.ml_products ADD COLUMN favorite_count INTEGER DEFAULT 0;
- RAISE NOTICE '✓ 添加字段: ml_products.favorite_count';
- END IF;
-
- RAISE NOTICE '>> ml_products 表字段检查完成';
- ELSE
- RAISE NOTICE '○ ml_products 表不存在,跳过字段添加';
- END IF;
-END $$;
-
--- 为 ml_categories 表添加SEO字段
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_categories') THEN
- -- SEO标题
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'seo_title') THEN
- ALTER TABLE public.ml_categories ADD COLUMN seo_title VARCHAR(200);
- RAISE NOTICE '✓ 添加字段: ml_categories.seo_title';
- END IF;
-
- -- SEO描述
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'seo_description') THEN
- ALTER TABLE public.ml_categories ADD COLUMN seo_description VARCHAR(500);
- RAISE NOTICE '✓ 添加字段: ml_categories.seo_description';
- END IF;
-
- -- URL slug
- IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'slug') THEN
- ALTER TABLE public.ml_categories ADD COLUMN slug VARCHAR(200) UNIQUE;
- RAISE NOTICE '✓ 添加字段: ml_categories.slug';
- END IF;
-
- RAISE NOTICE '>> ml_categories 表字段检查完成';
- ELSE
- RAISE NOTICE '○ ml_categories 表不存在,跳过字段添加';
- END IF;
-END $$;
-
--- =====================================================================================
--- 4. 创建CID字段索引(SEO优化必需)
--- =====================================================================================
-
--- 为CID字段创建索引
-DO $$
-BEGIN
- -- ml_categories cid 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'cid') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_categories_cid ON public.ml_categories(cid);
- RAISE NOTICE '✓ 创建索引: idx_ml_categories_cid';
- END IF;
-
- -- ml_brands cid 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_brands' AND column_name = 'cid') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_brands_cid ON public.ml_brands(cid);
- RAISE NOTICE '✓ 创建索引: idx_ml_brands_cid';
- END IF;
-
- -- ml_products cid 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'cid') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_cid ON public.ml_products(cid);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_cid';
- END IF;
-
- -- ml_shops cid 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_shops' AND column_name = 'cid') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_shops_cid ON public.ml_shops(cid);
- RAISE NOTICE '✓ 创建索引: idx_ml_shops_cid';
- END IF;
-
- -- ml_orders cid 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_orders' AND column_name = 'cid') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_orders_cid ON public.ml_orders(cid);
- RAISE NOTICE '✓ 创建索引: idx_ml_orders_cid';
- END IF;
-
- RAISE NOTICE '>> CID 索引创建完成';
-END $$;
-
--- =====================================================================================
--- 5. 创建索引(仅在字段存在时创建)
--- =====================================================================================
-
--- ak_users 表索引
-DO $$
-BEGIN
- -- 商城状态索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_status') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_mall_status ON public.ak_users(mall_status);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_mall_status';
- END IF;
-
- -- 商城类型索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_type') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_mall_type ON public.ak_users(mall_type);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_mall_type';
- END IF;
-
- -- 订单数量索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_orders') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_total_orders ON public.ak_users(total_orders DESC);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_total_orders';
- END IF;
-
- -- 消费金额索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'total_spent') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_total_spent ON public.ak_users(total_spent DESC);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_total_spent';
- END IF;
-
- -- 用户等级索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'user_level') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_level ON public.ak_users(user_level);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_level';
- END IF;
-
- -- 积分索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'points') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_points ON public.ak_users(points DESC);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_points';
- END IF;
-
- -- 认证状态索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'verified_status') THEN
- CREATE INDEX IF NOT EXISTS idx_ak_users_verified ON public.ak_users(verified_status);
- RAISE NOTICE '✓ 创建索引: idx_ak_users_verified';
- END IF;
-
- RAISE NOTICE '>> ak_users 表索引创建完成';
-END $$;
-
--- ml_products 表索引
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_products') THEN
- -- slug 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'slug') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_slug ON public.ml_products(slug);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_slug';
- END IF;
-
- -- 特色商品索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'is_featured') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_featured ON public.ml_products(is_featured, status);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_featured';
- END IF;
-
- -- 标签索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'tags') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_tags ON public.ml_products USING GIN(tags);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_tags (GIN)';
- END IF;
-
- -- 浏览量索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'view_count') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_view_count ON public.ml_products(view_count DESC);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_view_count';
- END IF;
-
- -- 销量索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'sale_count') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_products_sale_count ON public.ml_products(sale_count DESC);
- RAISE NOTICE '✓ 创建索引: idx_ml_products_sale_count';
- END IF;
-
- RAISE NOTICE '>> ml_products 表索引创建完成';
- ELSE
- RAISE NOTICE '○ ml_products 表不存在,跳过索引创建';
- END IF;
-END $$;
-
--- ml_categories 表索引
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_categories') THEN
- -- slug 索引
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'slug') THEN
- CREATE INDEX IF NOT EXISTS idx_ml_categories_slug ON public.ml_categories(slug);
- RAISE NOTICE '✓ 创建索引: idx_ml_categories_slug';
- END IF;
-
- RAISE NOTICE '>> ml_categories 表索引创建完成';
- ELSE
- RAISE NOTICE '○ ml_categories 表不存在,跳过索引创建';
- END IF;
-END $$;
-
--- =====================================================================================
--- 6. 创建或更新约束
--- =====================================================================================
-
-DO $$
-BEGIN
- -- ak_users 表约束检查
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_status') THEN
- -- 检查约束是否存在,不存在则添加
- IF NOT EXISTS (SELECT 1 FROM information_schema.check_constraints WHERE constraint_name = 'chk_ak_users_mall_status') THEN
- ALTER TABLE public.ak_users ADD CONSTRAINT chk_ak_users_mall_status CHECK (mall_status IN (1,2));
- RAISE NOTICE '✓ 添加约束: chk_ak_users_mall_status';
- END IF;
- END IF;
-
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'mall_type') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.check_constraints WHERE constraint_name = 'chk_ak_users_mall_type') THEN
- ALTER TABLE public.ak_users ADD CONSTRAINT chk_ak_users_mall_type CHECK (mall_type IN (1,2,3));
- RAISE NOTICE '✓ 添加约束: chk_ak_users_mall_type';
- END IF;
- END IF;
-
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ak_users' AND column_name = 'verified_status') THEN
- IF NOT EXISTS (SELECT 1 FROM information_schema.check_constraints WHERE constraint_name = 'chk_ak_users_verified_status') THEN
- ALTER TABLE public.ak_users ADD CONSTRAINT chk_ak_users_verified_status CHECK (verified_status IN (0,1,2));
- RAISE NOTICE '✓ 添加约束: chk_ak_users_verified_status';
- END IF;
- END IF;
-
- RAISE NOTICE '>> 约束检查完成';
-END $$;
-
--- =====================================================================================
--- 7. 创建SEO相关函数
--- =====================================================================================
-
--- 根据 cid 获取商品信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_product_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- main_image_url TEXT,
- base_price DECIMAL,
- rating_avg DECIMAL,
- sale_count INTEGER
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- p.id,
- p.cid,
- p.name,
- p.slug,
- p.description,
- p.main_image_url,
- p.base_price,
- p.rating_avg,
- p.sale_count
- FROM public.ml_products p
- WHERE p.cid = p_cid AND p.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取分类信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_category_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- icon_url TEXT,
- path TEXT[]
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- c.id,
- c.cid,
- c.name,
- c.slug,
- c.description,
- c.icon_url,
- c.path
- FROM public.ml_categories c
- WHERE c.cid = p_cid AND c.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取品牌信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_brand_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- logo_url TEXT,
- description TEXT
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- b.id,
- b.cid,
- b.name,
- b.logo_url,
- b.description
- FROM public.ml_brands b
- WHERE b.cid = p_cid AND b.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取店铺信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_shop_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- shop_name VARCHAR,
- description TEXT,
- shop_logo TEXT,
- rating_avg DECIMAL,
- product_count INTEGER
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- s.id,
- s.cid,
- s.shop_name,
- s.description,
- s.shop_logo,
- s.rating_avg,
- s.product_count
- FROM public.ml_shops s
- WHERE s.cid = p_cid AND s.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 生成 SEO 友好的 URL 路径
-CREATE OR REPLACE FUNCTION public.generate_seo_url(
- p_type VARCHAR, -- 'product', 'category', 'brand', 'shop'
- p_cid INTEGER,
- p_slug VARCHAR DEFAULT NULL
-)
-RETURNS TEXT AS $$
-DECLARE
- url_path TEXT;
-BEGIN
- CASE p_type
- WHEN 'product' THEN
- url_path := '/product/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'category' THEN
- url_path := '/category/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'brand' THEN
- url_path := '/brand/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'shop' THEN
- url_path := '/shop/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- ELSE
- url_path := '/' || p_type || '/' || p_cid;
- END CASE;
-
- RETURN url_path;
-END;
-$$ LANGUAGE plpgsql;
-
--- 批量更新 slug 字段的函数
-CREATE OR REPLACE FUNCTION public.update_seo_slugs()
-RETURNS VOID AS $$
-BEGIN
- -- 更新商品 slug
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_products') THEN
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_products' AND column_name = 'slug') THEN
- UPDATE public.ml_products
- SET slug = LOWER(REGEXP_REPLACE(TRIM(name), '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
- END IF;
- END IF;
-
- -- 更新分类 slug
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_categories') THEN
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_categories' AND column_name = 'slug') THEN
- UPDATE public.ml_categories
- SET slug = LOWER(REGEXP_REPLACE(TRIM(name), '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
- END IF;
- END IF;
-
- RAISE NOTICE 'SEO slugs updated successfully';
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 8. 创建基础函数(如果不存在)
--- =====================================================================================
-
--- 更新用户商城统计数据的函数
-CREATE OR REPLACE FUNCTION public.update_user_mall_stats(p_user_id UUID)
-RETURNS VOID AS $$
-BEGIN
- UPDATE public.ak_users
- SET
- total_orders = (
- SELECT COUNT(*)
- FROM public.ml_orders
- WHERE user_id = p_user_id AND order_status = 4
- ),
- total_spent = (
- SELECT COALESCE(SUM(total_amount), 0)
- FROM public.ml_orders
- WHERE user_id = p_user_id AND order_status = 4
- )
- WHERE id = p_user_id;
-END;
-$$ LANGUAGE plpgsql;
-
--- 为用户计算等级的函数
-CREATE OR REPLACE FUNCTION public.calculate_user_level(p_total_spent DECIMAL)
-RETURNS INTEGER AS $$
-BEGIN
- CASE
- WHEN p_total_spent >= 100000 THEN RETURN 10;
- WHEN p_total_spent >= 50000 THEN RETURN 9;
- WHEN p_total_spent >= 20000 THEN RETURN 8;
- WHEN p_total_spent >= 10000 THEN RETURN 7;
- WHEN p_total_spent >= 5000 THEN RETURN 6;
- WHEN p_total_spent >= 2000 THEN RETURN 5;
- WHEN p_total_spent >= 1000 THEN RETURN 4;
- WHEN p_total_spent >= 500 THEN RETURN 3;
- WHEN p_total_spent >= 100 THEN RETURN 2;
- ELSE RETURN 1;
- END CASE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 批量更新用户等级的函数
-CREATE OR REPLACE FUNCTION public.update_all_user_levels()
-RETURNS INTEGER AS $$
-DECLARE
- affected_rows INTEGER := 0;
-BEGIN
- UPDATE public.ak_users
- SET user_level = public.calculate_user_level(total_spent)
- WHERE total_spent > 0;
-
- GET DIAGNOSTICS affected_rows = ROW_COUNT;
- RETURN affected_rows;
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 9. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '商城系统字段增量添加完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '执行内容:';
- RAISE NOTICE '✓ ak_users 表增加商城相关字段';
- RAISE NOTICE '✓ 商城核心表增加 cid 自增字段 (SEO优化)';
- RAISE NOTICE '✓ 现有商城表增加SEO和营销字段';
- RAISE NOTICE '✓ 创建相应的索引 (包括CID索引)';
- RAISE NOTICE '✓ 添加约束检查';
- RAISE NOTICE '✓ 创建SEO相关函数';
- RAISE NOTICE '✓ 创建实用函数';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '新增字段说明:';
- RAISE NOTICE '• ak_users.mall_status: 商城状态 (1:正常 2:禁用)';
- RAISE NOTICE '• ak_users.mall_type: 用户类型 (1:消费者 2:商家 3:其他)';
- RAISE NOTICE '• ak_users.total_orders: 总订单数';
- RAISE NOTICE '• ak_users.total_spent: 总消费金额';
- RAISE NOTICE '• ak_users.user_level: 用户等级 (1-10)';
- RAISE NOTICE '• ak_users.points: 用户积分';
- RAISE NOTICE '• ak_users.verified_status: 认证状态 (0:未认证 1:已认证 2:认证失败)';
- RAISE NOTICE '-------------------------------------------------------';
- RAISE NOTICE 'CID 字段说明 (SEO优化):';
- RAISE NOTICE '• ml_categories.cid: 分类SEO友好ID';
- RAISE NOTICE '• ml_brands.cid: 品牌SEO友好ID';
- RAISE NOTICE '• ml_products.cid: 商品SEO友好ID';
- RAISE NOTICE '• ml_shops.cid: 店铺SEO友好ID';
- RAISE NOTICE '• ml_orders.cid: 订单SEO友好ID';
- RAISE NOTICE '-------------------------------------------------------';
- RAISE NOTICE 'SEO 函数说明:';
- RAISE NOTICE '• get_product_by_cid(cid): 根据CID获取商品信息';
- RAISE NOTICE '• get_category_by_cid(cid): 根据CID获取分类信息';
- RAISE NOTICE '• get_brand_by_cid(cid): 根据CID获取品牌信息';
- RAISE NOTICE '• get_shop_by_cid(cid): 根据CID获取店铺信息';
- RAISE NOTICE '• generate_seo_url(type, cid, slug): 生成SEO友好URL';
- RAISE NOTICE '• update_seo_slugs(): 批量更新slug字段';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '使用建议:';
- RAISE NOTICE '1. 此脚本可安全重复执行';
- RAISE NOTICE '2. 使用 IF NOT EXISTS 检查避免重复操作';
- RAISE NOTICE '3. 建议在测试环境先执行验证';
- RAISE NOTICE '4. 可根据实际需要注释掉不需要的字段';
- RAISE NOTICE '5. 执行后可调用 update_seo_slugs() 初始化slug字段';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE 'SEO URL 示例:';
- RAISE NOTICE '• 商品页面: /product/123/iphone-15-pro';
- RAISE NOTICE '• 分类页面: /category/45/digital-electronics';
- RAISE NOTICE '• 品牌页面: /brand/12/apple';
- RAISE NOTICE '• 店铺页面: /shop/88/official-store';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/mall_migration.sql b/doc_mall/database/mall_migration.sql
deleted file mode 100644
index 2ccd0bba..00000000
--- a/doc_mall/database/mall_migration.sql
+++ /dev/null
@@ -1,868 +0,0 @@
--- =====================================================================================
--- 商城系统数据库迁移脚本 (PostgreSQL + Supabase)
--- 用途: 在现有数据库基础上添加商城相关表和功能
--- 说明: 复用 ak_users 表,新增 ml_ 前缀的商城表
--- 执行方式: 直接在数据库中执行此脚本
--- =====================================================================================
-
--- 检查必要的扩展
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-CREATE EXTENSION IF NOT EXISTS "pg_stat_statements";
-CREATE EXTENSION IF NOT EXISTS "btree_gin";
-
--- =====================================================================================
--- 1. 创建商城用户扩展表
--- =====================================================================================
-
--- 商城用户档案表
-CREATE TABLE IF NOT EXISTS public.ml_user_profiles (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- user_type INTEGER DEFAULT 1 NOT NULL, -- 1:消费者 2:商家 3:配送员 4:客服 5:管理员
- status INTEGER DEFAULT 1 NOT NULL, -- 1:正常 2:冻结 3:注销 4:待审核
- real_name VARCHAR(100), -- 真实姓名
- id_card VARCHAR(32), -- 身份证号
- business_license VARCHAR(100), -- 营业执照号
- credit_score INTEGER DEFAULT 100, -- 信用分数 0-1000
- verification_status INTEGER DEFAULT 0, -- 认证状态 0:未认证 1:已认证 2:认证失败
- verification_data JSONB DEFAULT '{}', -- 认证相关数据
- preferences JSONB DEFAULT '{}', -- 用户偏好设置
- emergency_contact VARCHAR(200), -- 紧急联系人
- service_areas JSONB, -- 服务区域(配送员)
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_user_type CHECK (user_type IN (1,2,3,4,5)),
- CONSTRAINT chk_ml_user_status CHECK (status IN (1,2,3,4)),
- CONSTRAINT chk_ml_verification_status CHECK (verification_status IN (0,1,2)),
- CONSTRAINT chk_ml_credit_score CHECK (credit_score >= 0 AND credit_score <= 1000)
-);
-
-COMMENT ON TABLE public.ml_user_profiles IS '商城用户扩展信息表';
-
--- 用户地址表
-CREATE TABLE IF NOT EXISTS public.ml_user_addresses (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- receiver_name VARCHAR(100) NOT NULL,
- receiver_phone VARCHAR(32) NOT NULL,
- province VARCHAR(100) NOT NULL,
- city VARCHAR(100) NOT NULL,
- district VARCHAR(100) NOT NULL,
- street VARCHAR(200),
- address_detail TEXT NOT NULL,
- postal_code VARCHAR(16),
- is_default BOOLEAN DEFAULT FALSE,
- label VARCHAR(50), -- home/office/school/other
- latitude DECIMAL(10,7),
- longitude DECIMAL(10,7),
- delivery_instructions TEXT,
- business_hours VARCHAR(100),
- status INTEGER DEFAULT 1, -- 1:正常 2:禁用
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_address_status CHECK (status IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_user_addresses IS '用户地址表';
-
--- =====================================================================================
--- 2. 创建商品相关表
--- =====================================================================================
-
--- 商品分类表
-CREATE TABLE IF NOT EXISTS public.ml_categories (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- parent_id UUID REFERENCES public.ml_categories(id),
- name VARCHAR(200) NOT NULL,
- slug VARCHAR(200) UNIQUE,
- description TEXT,
- icon_url TEXT,
- banner_url TEXT,
- sort_order INTEGER DEFAULT 0,
- level INTEGER DEFAULT 1,
- path TEXT[], -- 分类路径
- is_active BOOLEAN DEFAULT TRUE,
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_categories IS '商品分类表';
-
--- 品牌表
-CREATE TABLE IF NOT EXISTS public.ml_brands (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- name VARCHAR(200) NOT NULL,
- logo_url TEXT,
- description TEXT,
- website VARCHAR(500),
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_brands IS '品牌表';
-
--- 商品表
-CREATE TABLE IF NOT EXISTS public.ml_products (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- category_id UUID NOT NULL REFERENCES public.ml_categories(id),
- brand_id UUID REFERENCES public.ml_brands(id),
- product_code VARCHAR(100) UNIQUE NOT NULL,
- name VARCHAR(500) NOT NULL,
- subtitle VARCHAR(1000),
- description TEXT,
- main_image_url TEXT,
- image_urls JSONB DEFAULT '[]',
- video_urls JSONB DEFAULT '[]',
-
- -- 价格信息
- base_price DECIMAL(12,2) NOT NULL CHECK (base_price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
-
- -- 库存信息
- total_stock INTEGER DEFAULT 0 CHECK (total_stock >= 0),
- available_stock INTEGER DEFAULT 0 CHECK (available_stock >= 0),
- min_order_qty INTEGER DEFAULT 1 CHECK (min_order_qty > 0),
- max_order_qty INTEGER,
-
- -- 基础属性
- weight DECIMAL(10,3),
- dimensions JSONB, -- {length, width, height}
-
- -- 状态
- status INTEGER DEFAULT 1, -- 1:上架 2:下架 3:草稿 4:删除
- is_featured BOOLEAN DEFAULT FALSE,
- is_new BOOLEAN DEFAULT FALSE,
- is_hot BOOLEAN DEFAULT FALSE,
-
- -- 统计
- view_count INTEGER DEFAULT 0,
- sale_count INTEGER DEFAULT 0,
- favorite_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00 CHECK (rating_avg >= 0 AND rating_avg <= 5),
- rating_count INTEGER DEFAULT 0,
-
- -- SEO
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- seo_keywords TEXT[],
- slug VARCHAR(200) UNIQUE,
-
- -- 其他
- tags TEXT[],
- attributes JSONB DEFAULT '{}',
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- published_at TIMESTAMP WITH TIME ZONE,
-
- CONSTRAINT chk_ml_product_status CHECK (status IN (1,2,3,4))
-);
-
-COMMENT ON TABLE public.ml_products IS '商品表';
-
--- 商品SKU表
-CREATE TABLE IF NOT EXISTS public.ml_product_skus (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_code VARCHAR(100) UNIQUE NOT NULL,
- specifications JSONB DEFAULT '{}', -- 规格组合
- price DECIMAL(12,2) NOT NULL CHECK (price >= 0),
- market_price DECIMAL(12,2),
- cost_price DECIMAL(12,2),
- stock INTEGER DEFAULT 0 CHECK (stock >= 0),
- warning_stock INTEGER DEFAULT 10, -- 库存预警
- image_url TEXT,
- weight DECIMAL(10,3),
- status INTEGER DEFAULT 1, -- 1:正常 2:禁用
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_sku_status CHECK (status IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_product_skus IS '商品SKU表';
-
--- 商品规格表
-CREATE TABLE IF NOT EXISTS public.ml_product_specs (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- spec_name VARCHAR(100) NOT NULL, -- 规格名称:颜色、尺寸等
- spec_values JSONB NOT NULL DEFAULT '[]', -- 规格值数组
- sort_order INTEGER DEFAULT 0,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_product_specs IS '商品规格表';
-
--- =====================================================================================
--- 3. 创建店铺相关表
--- =====================================================================================
-
--- 店铺信息表
-CREATE TABLE IF NOT EXISTS public.ml_shops (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- shop_name VARCHAR(200) NOT NULL,
- shop_logo TEXT,
- shop_banner TEXT,
- description TEXT,
- business_license VARCHAR(100),
- contact_name VARCHAR(100),
- contact_phone VARCHAR(32),
- contact_email VARCHAR(200),
- address JSONB, -- 店铺地址信息
- business_hours JSONB, -- 营业时间
-
- -- 状态
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:关闭
-
- -- 统计
- product_count INTEGER DEFAULT 0,
- order_count INTEGER DEFAULT 0,
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- rating_count INTEGER DEFAULT 0,
-
- -- 认证信息
- verified_at TIMESTAMP WITH TIME ZONE,
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_shop_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_shops IS '店铺信息表';
-
--- =====================================================================================
--- 4. 创建订单相关表
--- =====================================================================================
-
--- 订单表
-CREATE TABLE IF NOT EXISTS public.ml_orders (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- order_no VARCHAR(50) UNIQUE NOT NULL,
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
-
- -- 金额信息
- product_amount DECIMAL(12,2) NOT NULL DEFAULT 0, -- 商品金额
- discount_amount DECIMAL(12,2) DEFAULT 0, -- 优惠金额
- shipping_fee DECIMAL(12,2) DEFAULT 0, -- 运费
- total_amount DECIMAL(12,2) NOT NULL, -- 总金额
- paid_amount DECIMAL(12,2) DEFAULT 0, -- 已付金额
-
- -- 地址信息
- shipping_address JSONB NOT NULL, -- 收货地址
-
- -- 状态信息
- order_status INTEGER DEFAULT 1, -- 1:待付款 2:待发货 3:待收货 4:已完成 5:已取消 6:退款中 7:已退款
- payment_status INTEGER DEFAULT 1, -- 1:未付款 2:已付款 3:部分退款 4:全额退款
- shipping_status INTEGER DEFAULT 1, -- 1:未发货 2:已发货 3:运输中 4:已送达
-
- -- 时间信息
- paid_at TIMESTAMP WITH TIME ZONE,
- shipped_at TIMESTAMP WITH TIME ZONE,
- delivered_at TIMESTAMP WITH TIME ZONE,
- completed_at TIMESTAMP WITH TIME ZONE,
-
- -- 其他信息
- remark TEXT, -- 买家备注
- merchant_memo TEXT, -- 商家备注
- cancel_reason TEXT, -- 取消原因
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_order_status CHECK (order_status IN (1,2,3,4,5,6,7)),
- CONSTRAINT chk_ml_payment_status CHECK (payment_status IN (1,2,3,4)),
- CONSTRAINT chk_ml_shipping_status CHECK (shipping_status IN (1,2,3,4))
-);
-
-COMMENT ON TABLE public.ml_orders IS '订单表';
-
--- 订单商品表
-CREATE TABLE IF NOT EXISTS public.ml_order_items (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID NOT NULL REFERENCES public.ml_orders(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id),
- sku_id UUID REFERENCES public.ml_product_skus(id),
- product_name VARCHAR(500) NOT NULL,
- sku_name VARCHAR(500),
- specifications JSONB DEFAULT '{}',
- image_url TEXT,
- price DECIMAL(12,2) NOT NULL,
- quantity INTEGER NOT NULL CHECK (quantity > 0),
- total_amount DECIMAL(12,2) NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_order_items IS '订单商品表';
-
--- =====================================================================================
--- 5. 创建购物车和营销相关表
--- =====================================================================================
-
--- 购物车表
-CREATE TABLE IF NOT EXISTS public.ml_shopping_cart (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- sku_id UUID REFERENCES public.ml_product_skus(id) ON DELETE CASCADE,
- quantity INTEGER NOT NULL CHECK (quantity > 0),
- selected BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, product_id, sku_id)
-);
-
-COMMENT ON TABLE public.ml_shopping_cart IS '购物车表';
-
--- 优惠券模板表
-CREATE TABLE IF NOT EXISTS public.ml_coupon_templates (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- cid SERIAL UNIQUE NOT NULL, -- SEO友好的自增ID
- merchant_id UUID REFERENCES public.ak_users(id), -- NULL表示平台券
- name VARCHAR(200) NOT NULL,
- description TEXT,
- coupon_type INTEGER NOT NULL, -- 1:满减券 2:折扣券 3:免运费券
- discount_type INTEGER NOT NULL, -- 1:固定金额 2:百分比
- discount_value DECIMAL(12,2) NOT NULL, -- 优惠值
- min_order_amount DECIMAL(12,2) DEFAULT 0, -- 最低订单金额
- max_discount_amount DECIMAL(12,2), -- 最大优惠金额
- total_quantity INTEGER, -- 总发放数量
- per_user_limit INTEGER DEFAULT 1, -- 每用户限领数量
- usage_limit INTEGER DEFAULT 1, -- 每张券使用次数限制
-
- -- 适用范围
- applicable_products JSONB DEFAULT '[]', -- 适用商品ID数组
- applicable_categories JSONB DEFAULT '[]', -- 适用分类ID数组
-
- -- 时间限制
- start_time TIMESTAMP WITH TIME ZONE NOT NULL,
- end_time TIMESTAMP WITH TIME ZONE NOT NULL,
-
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:已结束
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_coupon_type CHECK (coupon_type IN (1,2,3)),
- CONSTRAINT chk_ml_discount_type CHECK (discount_type IN (1,2)),
- CONSTRAINT chk_ml_coupon_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_coupon_templates IS '优惠券模板表';
-
--- 用户优惠券表
-CREATE TABLE IF NOT EXISTS public.ml_user_coupons (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- template_id UUID NOT NULL REFERENCES public.ml_coupon_templates(id),
- coupon_code VARCHAR(50) UNIQUE NOT NULL,
- status INTEGER DEFAULT 1, -- 1:未使用 2:已使用 3:已过期
- used_at TIMESTAMP WITH TIME ZONE,
- order_id UUID REFERENCES public.ml_orders(id),
- received_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- expire_at TIMESTAMP WITH TIME ZONE NOT NULL,
-
- CONSTRAINT chk_ml_user_coupon_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_user_coupons IS '用户优惠券表';
-
--- =====================================================================================
--- 6. 创建配送和评价相关表
--- =====================================================================================
-
--- 配送员信息表
-CREATE TABLE IF NOT EXISTS public.ml_delivery_drivers (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID UNIQUE NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- real_name VARCHAR(100) NOT NULL,
- id_card VARCHAR(32) NOT NULL,
- driver_license VARCHAR(50),
- vehicle_type INTEGER, -- 1:电动车 2:摩托车 3:汽车
- vehicle_number VARCHAR(20),
- service_areas JSONB DEFAULT '[]', -- 服务区域
- work_status INTEGER DEFAULT 1, -- 1:在线 2:忙碌 3:离线
- current_lat DECIMAL(10,7),
- current_lng DECIMAL(10,7),
- rating_avg DECIMAL(3,2) DEFAULT 0.00,
- rating_count INTEGER DEFAULT 0,
- order_count INTEGER DEFAULT 0,
- status INTEGER DEFAULT 1, -- 1:正常 2:暂停 3:离职
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_driver_vehicle_type CHECK (vehicle_type IN (1,2,3)),
- CONSTRAINT chk_ml_driver_work_status CHECK (work_status IN (1,2,3)),
- CONSTRAINT chk_ml_driver_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_delivery_drivers IS '配送员信息表';
-
--- 配送任务表
-CREATE TABLE IF NOT EXISTS public.ml_delivery_tasks (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID UNIQUE NOT NULL REFERENCES public.ml_orders(id),
- driver_id UUID REFERENCES public.ml_delivery_drivers(id),
- pickup_address JSONB NOT NULL, -- 取货地址
- delivery_address JSONB NOT NULL, -- 配送地址
- distance DECIMAL(8,2), -- 配送距离(km)
- estimated_time INTEGER, -- 预计配送时间(分钟)
- delivery_fee DECIMAL(10,2) NOT NULL DEFAULT 0,
-
- status INTEGER DEFAULT 1, -- 1:待接单 2:已接单 3:取货中 4:配送中 5:已送达 6:配送失败
-
- -- 时间记录
- assigned_at TIMESTAMP WITH TIME ZONE,
- picked_at TIMESTAMP WITH TIME ZONE,
- delivered_at TIMESTAMP WITH TIME ZONE,
-
- -- 其他信息
- delivery_code VARCHAR(10), -- 取货码
- remark TEXT,
- failure_reason TEXT,
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_delivery_status CHECK (status IN (1,2,3,4,5,6))
-);
-
-COMMENT ON TABLE public.ml_delivery_tasks IS '配送任务表';
-
--- 商品评价表
-CREATE TABLE IF NOT EXISTS public.ml_product_reviews (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- order_id UUID NOT NULL REFERENCES public.ml_orders(id),
- order_item_id UUID NOT NULL REFERENCES public.ml_order_items(id),
- user_id UUID NOT NULL REFERENCES public.ak_users(id),
- product_id UUID NOT NULL REFERENCES public.ml_products(id),
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
-
- rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5),
- content TEXT,
- images JSONB DEFAULT '[]', -- 评价图片
- is_anonymous BOOLEAN DEFAULT FALSE,
-
- -- 商家回复
- merchant_reply TEXT,
- merchant_replied_at TIMESTAMP WITH TIME ZONE,
-
- status INTEGER DEFAULT 1, -- 1:正常 2:已删除 3:已隐藏
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- CONSTRAINT chk_ml_review_status CHECK (status IN (1,2,3))
-);
-
-COMMENT ON TABLE public.ml_product_reviews IS '商品评价表';
-
--- =====================================================================================
--- 7. 创建用户行为和系统配置表
--- =====================================================================================
-
--- 用户收藏表
-CREATE TABLE IF NOT EXISTS public.ml_user_favorites (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- target_type INTEGER NOT NULL, -- 1:商品 2:店铺
- target_id UUID NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, target_type, target_id),
- CONSTRAINT chk_ml_favorite_type CHECK (target_type IN (1,2))
-);
-
-COMMENT ON TABLE public.ml_user_favorites IS '用户收藏表';
-
--- 用户浏览历史表
-CREATE TABLE IF NOT EXISTS public.ml_browse_history (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
- browse_duration INTEGER DEFAULT 0, -- 浏览时长(秒)
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(user_id, product_id)
-);
-
-COMMENT ON TABLE public.ml_browse_history IS '用户浏览历史表';
-
--- 搜索记录表
-CREATE TABLE IF NOT EXISTS public.ml_search_history (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- user_id UUID REFERENCES public.ak_users(id) ON DELETE CASCADE,
- keyword VARCHAR(200) NOT NULL,
- result_count INTEGER DEFAULT 0,
- ip_address INET,
- user_agent TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_search_history IS '搜索记录表';
-
--- 系统配置表
-CREATE TABLE IF NOT EXISTS public.ml_system_configs (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- config_key VARCHAR(100) UNIQUE NOT NULL,
- config_value JSONB,
- description TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_system_configs IS '系统配置表';
-
--- 地区表
-CREATE TABLE IF NOT EXISTS public.ml_regions (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- parent_id UUID REFERENCES public.ml_regions(id),
- name VARCHAR(100) NOT NULL,
- code VARCHAR(20),
- level INTEGER NOT NULL, -- 1:省份 2:城市 3:区县 4:街道
- sort_order INTEGER DEFAULT 0,
- is_active BOOLEAN DEFAULT TRUE,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
-COMMENT ON TABLE public.ml_regions IS '地区表';
-
--- =====================================================================================
--- 8. 创建索引
--- =====================================================================================
-
--- 用户扩展表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_user_id ON public.ml_user_profiles(user_id);
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_type ON public.ml_user_profiles(user_type);
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_status ON public.ml_user_profiles(status);
-
--- 分类表索引
-CREATE INDEX IF NOT EXISTS idx_ml_categories_cid ON public.ml_categories(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_parent ON public.ml_categories(parent_id);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_slug ON public.ml_categories(slug);
-CREATE INDEX IF NOT EXISTS idx_ml_categories_level ON public.ml_categories(level, sort_order);
-
--- 品牌表索引
-CREATE INDEX IF NOT EXISTS idx_ml_brands_cid ON public.ml_brands(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_brands_name ON public.ml_brands(name);
-
--- 地址表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_addresses_user_id ON public.ml_user_addresses(user_id);
-CREATE INDEX IF NOT EXISTS idx_ml_user_addresses_default ON public.ml_user_addresses(user_id, is_default);
-CREATE INDEX IF NOT EXISTS idx_ml_user_addresses_location ON public.ml_user_addresses(city, district);
-
--- 商品表索引
-CREATE INDEX IF NOT EXISTS idx_ml_products_cid ON public.ml_products(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_products_merchant ON public.ml_products(merchant_id, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_category ON public.ml_products(category_id, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_status ON public.ml_products(status, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_products_featured ON public.ml_products(is_featured, status);
-CREATE INDEX IF NOT EXISTS idx_ml_products_price ON public.ml_products(base_price);
-CREATE INDEX IF NOT EXISTS idx_ml_products_rating ON public.ml_products(rating_avg DESC, rating_count DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_products_sale_count ON public.ml_products(sale_count DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_products_tags ON public.ml_products USING GIN(tags);
-CREATE INDEX IF NOT EXISTS idx_ml_products_slug ON public.ml_products(slug);
-
--- 店铺表索引
-CREATE INDEX IF NOT EXISTS idx_ml_shops_cid ON public.ml_shops(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_shops_merchant ON public.ml_shops(merchant_id);
-
--- SKU表索引
-CREATE INDEX IF NOT EXISTS idx_ml_product_skus_product ON public.ml_product_skus(product_id);
-CREATE INDEX IF NOT EXISTS idx_ml_product_skus_code ON public.ml_product_skus(sku_code);
-
--- 订单表索引
-CREATE INDEX IF NOT EXISTS idx_ml_orders_cid ON public.ml_orders(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_user ON public.ml_orders(user_id, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_merchant ON public.ml_orders(merchant_id, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_status ON public.ml_orders(order_status, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_orders_no ON public.ml_orders(order_no);
-
--- 订单商品表索引
-CREATE INDEX IF NOT EXISTS idx_ml_order_items_order ON public.ml_order_items(order_id);
-CREATE INDEX IF NOT EXISTS idx_ml_order_items_product ON public.ml_order_items(product_id);
-
--- 购物车表索引
-CREATE INDEX IF NOT EXISTS idx_ml_shopping_cart_user ON public.ml_shopping_cart(user_id);
-
--- 优惠券模板表索引
-CREATE INDEX IF NOT EXISTS idx_ml_coupon_templates_cid ON public.ml_coupon_templates(cid);
-CREATE INDEX IF NOT EXISTS idx_ml_coupon_templates_merchant ON public.ml_coupon_templates(merchant_id);
-
--- 优惠券表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_coupons_user ON public.ml_user_coupons(user_id, status);
-CREATE INDEX IF NOT EXISTS idx_ml_user_coupons_code ON public.ml_user_coupons(coupon_code);
-
--- 收藏表索引
-CREATE INDEX IF NOT EXISTS idx_ml_user_favorites_user ON public.ml_user_favorites(user_id, target_type);
-CREATE INDEX IF NOT EXISTS idx_ml_user_favorites_target ON public.ml_user_favorites(target_type, target_id);
-
--- 浏览历史索引
-CREATE INDEX IF NOT EXISTS idx_ml_browse_history_user ON public.ml_browse_history(user_id, created_at DESC);
-CREATE INDEX IF NOT EXISTS idx_ml_browse_history_product ON public.ml_browse_history(product_id);
-
--- =====================================================================================
--- 9. 创建触发器函数
--- =====================================================================================
-
--- 自动更新 updated_at 字段的函数
-CREATE OR REPLACE FUNCTION public.update_updated_at_column()
-RETURNS TRIGGER AS $$
-BEGIN
- NEW.updated_at = NOW();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 创建触发器 (使用 DO 块避免重复创建错误)
-DO $$
-BEGIN
- -- 用户档案更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_user_profiles_updated_at') THEN
- CREATE TRIGGER trigger_ml_user_profiles_updated_at
- BEFORE UPDATE ON public.ml_user_profiles
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- 用户地址更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_user_addresses_updated_at') THEN
- CREATE TRIGGER trigger_ml_user_addresses_updated_at
- BEFORE UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- 商品更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_products_updated_at') THEN
- CREATE TRIGGER trigger_ml_products_updated_at
- BEFORE UPDATE ON public.ml_products
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- SKU更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_product_skus_updated_at') THEN
- CREATE TRIGGER trigger_ml_product_skus_updated_at
- BEFORE UPDATE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- 店铺更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_shops_updated_at') THEN
- CREATE TRIGGER trigger_ml_shops_updated_at
- BEFORE UPDATE ON public.ml_shops
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- 订单更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_orders_updated_at') THEN
- CREATE TRIGGER trigger_ml_orders_updated_at
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-
- -- 购物车更新触发器
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_shopping_cart_updated_at') THEN
- CREATE TRIGGER trigger_ml_shopping_cart_updated_at
- BEFORE UPDATE ON public.ml_shopping_cart
- FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
- END IF;
-END $$;
-
--- 确保每个用户只有一个默认地址的触发器
-CREATE OR REPLACE FUNCTION public.ensure_single_default_address()
-RETURNS TRIGGER AS $$
-BEGIN
- IF NEW.is_default = TRUE THEN
- UPDATE public.ml_user_addresses
- SET is_default = FALSE
- WHERE user_id = NEW.user_id AND id != NEW.id;
- END IF;
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_single_default_address') THEN
- CREATE TRIGGER trigger_ml_single_default_address
- BEFORE INSERT OR UPDATE ON public.ml_user_addresses
- FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
- END IF;
-END $$;
-
--- =====================================================================================
--- 10. 创建实用函数
--- =====================================================================================
-
--- 创建订单序列
-CREATE SEQUENCE IF NOT EXISTS public.ml_order_seq START 1;
-
--- 生成订单号的函数
-CREATE OR REPLACE FUNCTION public.generate_order_no()
-RETURNS TEXT AS $$
-DECLARE
- order_no TEXT;
-BEGIN
- order_no := 'ML' || TO_CHAR(NOW(), 'YYYYMMDD') || LPAD(NEXTVAL('ml_order_seq')::TEXT, 6, '0');
- RETURN order_no;
-END;
-$$ LANGUAGE plpgsql;
-
--- 生成优惠券码的函数
-CREATE OR REPLACE FUNCTION public.generate_coupon_code()
-RETURNS TEXT AS $$
-DECLARE
- code TEXT;
- chars TEXT := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- result TEXT := '';
- i INTEGER;
-BEGIN
- FOR i IN 1..8 LOOP
- result := result || substr(chars, (random() * length(chars))::integer + 1, 1);
- END LOOP;
- RETURN 'CP' || result;
-END;
-$$ LANGUAGE plpgsql;
-
--- 获取用户默认地址
-CREATE OR REPLACE FUNCTION public.get_user_default_address(p_user_id UUID)
-RETURNS TABLE (
- id UUID,
- receiver_name VARCHAR,
- receiver_phone VARCHAR,
- full_address TEXT,
- latitude DECIMAL,
- longitude DECIMAL
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- a.id,
- a.receiver_name,
- a.receiver_phone,
- (a.province || ' ' || a.city || ' ' || a.district || ' ' || a.address_detail) as full_address,
- a.latitude,
- a.longitude
- FROM public.ml_user_addresses a
- WHERE a.user_id = p_user_id AND a.is_default = TRUE AND a.status = 1
- LIMIT 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 检查用户是否为认证商家
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(p_user_id UUID)
-RETURNS BOOLEAN AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (user_type = 2 AND verification_status = 1) INTO result
- FROM public.ml_user_profiles
- WHERE user_id = p_user_id;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 11. 创建基础视图
--- =====================================================================================
-
--- 商城用户完整信息视图
-CREATE OR REPLACE VIEW public.ml_users_view AS
-SELECT
- u.id,
- u.username,
- u.email,
- u.phone,
- u.avatar_url,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- p.user_type,
- p.status,
- p.real_name,
- p.credit_score,
- p.verification_status,
- p.created_at as profile_created_at,
- p.updated_at as profile_updated_at,
- CASE
- WHEN p.user_type = 1 THEN '消费者'
- WHEN p.user_type = 2 THEN '商家'
- WHEN p.user_type = 3 THEN '配送员'
- WHEN p.user_type = 4 THEN '客服'
- WHEN p.user_type = 5 THEN '管理员'
- ELSE '未知'
- END as user_type_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
-COMMENT ON VIEW public.ml_users_view IS '商城用户完整信息视图';
-
--- =====================================================================================
--- 12. 插入初始配置数据
--- =====================================================================================
-
--- 插入系统配置
-INSERT INTO public.ml_system_configs (config_key, config_value, description) VALUES
-('shipping_fee', '{"default": 10, "free_threshold": 88}', '配送费配置'),
-('platform_commission', '{"rate": 0.05}', '平台佣金配置'),
-('coupon_settings', '{"max_per_user": 10}', '优惠券设置'),
-('order_auto_confirm_days', '7', '订单自动确认天数')
-ON CONFLICT (config_key) DO NOTHING;
-
--- 插入默认分类
-INSERT INTO public.ml_categories (id, name, slug, level, path) VALUES
-(uuid_generate_v4(), '数码电器', 'digital', 1, ARRAY['数码电器']),
-(uuid_generate_v4(), '服装鞋帽', 'fashion', 1, ARRAY['服装鞋帽']),
-(uuid_generate_v4(), '家居用品', 'home', 1, ARRAY['家居用品']),
-(uuid_generate_v4(), '食品饮料', 'food', 1, ARRAY['食品饮料']),
-(uuid_generate_v4(), '美妆护肤', 'beauty', 1, ARRAY['美妆护肤'])
-ON CONFLICT (slug) DO NOTHING;
-
--- 为现有 ak_users 用户创建默认商城档案 (如果不存在)
-INSERT INTO public.ml_user_profiles (user_id, user_type, status)
-SELECT
- id,
- 1, -- 默认为消费者
- 1 -- 默认状态正常
-FROM public.ak_users
-WHERE id NOT IN (SELECT user_id FROM public.ml_user_profiles WHERE user_id IS NOT NULL);
-
--- =====================================================================================
--- 13. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '商城数据库迁移完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '已创建表数量: 17 张商城表';
- RAISE NOTICE '已创建索引: 30+ 个索引';
- RAISE NOTICE '已创建触发器: 8 个触发器';
- RAISE NOTICE '已创建函数: 6 个函数';
- RAISE NOTICE '已创建视图: 1 个视图';
- RAISE NOTICE '已插入基础配置和分类数据';
- RAISE NOTICE '已为现有用户创建默认商城档案';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '表名前缀: ml_';
- RAISE NOTICE '复用表: ak_users';
- RAISE NOTICE '兼容: Supabase';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/mall_seo_security.sql b/doc_mall/database/mall_seo_security.sql
deleted file mode 100644
index 39eaedeb..00000000
--- a/doc_mall/database/mall_seo_security.sql
+++ /dev/null
@@ -1,666 +0,0 @@
--- =====================================================================================
--- 商城系统 SEO 优化和安全策略脚本
--- 用途: 为商城系统添加 SEO 优化函数和 RLS 安全策略
--- 前置条件: 需要先执行 mall_migration.sql
--- =====================================================================================
-
--- =====================================================================================
--- 1. SEO 优化相关函数
--- =====================================================================================
-
--- 根据 cid 获取商品信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_product_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- main_image_url TEXT,
- base_price DECIMAL,
- rating_avg DECIMAL,
- sale_count INTEGER,
- category_name VARCHAR,
- brand_name VARCHAR,
- shop_name VARCHAR
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- p.id,
- p.cid,
- p.name,
- p.slug,
- p.description,
- p.main_image_url,
- p.base_price,
- p.rating_avg,
- p.sale_count,
- c.name as category_name,
- b.name as brand_name,
- s.shop_name
- FROM public.ml_products p
- LEFT JOIN public.ml_categories c ON p.category_id = c.id
- LEFT JOIN public.ml_brands b ON p.brand_id = b.id
- LEFT JOIN public.ml_shops s ON p.merchant_id = s.merchant_id
- WHERE p.cid = p_cid AND p.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取分类信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_category_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- slug VARCHAR,
- description TEXT,
- icon_url TEXT,
- path TEXT[]
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- c.id,
- c.cid,
- c.name,
- c.slug,
- c.description,
- c.icon_url,
- c.path
- FROM public.ml_categories c
- WHERE c.cid = p_cid AND c.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取品牌信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_brand_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- name VARCHAR,
- logo_url TEXT,
- description TEXT
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- b.id,
- b.cid,
- b.name,
- b.logo_url,
- b.description
- FROM public.ml_brands b
- WHERE b.cid = p_cid AND b.is_active = TRUE;
-END;
-$$ LANGUAGE plpgsql;
-
--- 根据 cid 获取店铺信息 (SEO 友好)
-CREATE OR REPLACE FUNCTION public.get_shop_by_cid(p_cid INTEGER)
-RETURNS TABLE (
- id UUID,
- cid INTEGER,
- shop_name VARCHAR,
- description TEXT,
- shop_logo TEXT,
- rating_avg DECIMAL,
- product_count INTEGER
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- s.id,
- s.cid,
- s.shop_name,
- s.description,
- s.shop_logo,
- s.rating_avg,
- s.product_count
- FROM public.ml_shops s
- WHERE s.cid = p_cid AND s.status = 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 生成 SEO 友好的 URL 路径
-CREATE OR REPLACE FUNCTION public.generate_seo_url(
- p_type VARCHAR, -- 'product', 'category', 'brand', 'shop'
- p_cid INTEGER,
- p_slug VARCHAR DEFAULT NULL
-)
-RETURNS TEXT AS $$
-DECLARE
- url_path TEXT;
-BEGIN
- CASE p_type
- WHEN 'product' THEN
- url_path := '/product/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'category' THEN
- url_path := '/category/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'brand' THEN
- url_path := '/brand/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- WHEN 'shop' THEN
- url_path := '/shop/' || p_cid;
- IF p_slug IS NOT NULL THEN
- url_path := url_path || '/' || p_slug;
- END IF;
- ELSE
- url_path := '/' || p_type || '/' || p_cid;
- END CASE;
-
- RETURN url_path;
-END;
-$$ LANGUAGE plpgsql;
-
--- 批量更新 slug 字段(用于现有数据)
-CREATE OR REPLACE FUNCTION public.update_seo_slugs()
-RETURNS VOID AS $$
-BEGIN
- -- 更新商品 slug
- UPDATE public.ml_products
- SET slug = LOWER(REGEXP_REPLACE(name, '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
-
- -- 更新分类 slug
- UPDATE public.ml_categories
- SET slug = LOWER(REGEXP_REPLACE(name, '[^a-zA-Z0-9\u4e00-\u9fa5]+', '-', 'g'))
- WHERE slug IS NULL OR slug = '';
-
- RAISE NOTICE 'SEO slugs updated successfully';
-END;
-$$ LANGUAGE plpgsql;
-
--- =====================================================================================
--- 2. 商业逻辑函数
--- =====================================================================================
-
--- 计算购物车总金额
-CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
-RETURNS DECIMAL AS $$
-DECLARE
- total_amount DECIMAL := 0;
-BEGIN
- SELECT COALESCE(SUM(
- CASE
- WHEN s.id IS NOT NULL THEN s.price * c.quantity
- ELSE p.base_price * c.quantity
- END
- ), 0) INTO total_amount
- FROM public.ml_shopping_cart c
- LEFT JOIN public.ml_product_skus s ON c.sku_id = s.id
- LEFT JOIN public.ml_products p ON c.product_id = p.id
- WHERE c.user_id = p_user_id
- AND c.selected = TRUE
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1);
-
- RETURN total_amount;
-END;
-$$ LANGUAGE plpgsql;
-
--- 获取商品可用库存
-CREATE OR REPLACE FUNCTION public.get_product_available_stock(p_product_id UUID, p_sku_id UUID DEFAULT NULL)
-RETURNS INTEGER AS $$
-DECLARE
- stock_count INTEGER := 0;
-BEGIN
- IF p_sku_id IS NOT NULL THEN
- -- 获取特定SKU库存
- SELECT COALESCE(stock, 0) INTO stock_count
- FROM public.ml_product_skus
- WHERE id = p_sku_id AND product_id = p_product_id AND status = 1;
- ELSE
- -- 获取商品总库存
- SELECT COALESCE(available_stock, 0) INTO stock_count
- FROM public.ml_products
- WHERE id = p_product_id AND status = 1;
- END IF;
-
- RETURN stock_count;
-END;
-$$ LANGUAGE plpgsql;
-
--- 商品库存更新触发器函数
-CREATE OR REPLACE FUNCTION public.update_product_stock()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 更新商品总库存
- IF TG_OP = 'DELETE' THEN
- UPDATE public.ml_products
- SET
- total_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = OLD.product_id AND status = 1
- ),
- available_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = OLD.product_id AND status = 1
- )
- WHERE id = OLD.product_id;
- RETURN OLD;
- ELSE
- UPDATE public.ml_products
- SET
- total_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = NEW.product_id AND status = 1
- ),
- available_stock = (
- SELECT COALESCE(SUM(stock), 0)
- FROM public.ml_product_skus
- WHERE product_id = NEW.product_id AND status = 1
- )
- WHERE id = NEW.product_id;
- RETURN NEW;
- END IF;
-END;
-$$ LANGUAGE plpgsql;
-
--- 订单状态变更时的处理
-CREATE OR REPLACE FUNCTION public.handle_order_status_change()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 如果订单状态变为已付款
- IF NEW.order_status = 2 AND (OLD.order_status IS NULL OR OLD.order_status = 1) THEN
- NEW.paid_at = NOW();
- END IF;
-
- -- 如果订单状态变为已发货
- IF NEW.order_status = 3 AND OLD.order_status = 2 THEN
- NEW.shipped_at = NOW();
- END IF;
-
- -- 如果订单状态变为已完成
- IF NEW.order_status = 4 AND OLD.order_status = 3 THEN
- NEW.delivered_at = NOW();
- NEW.completed_at = NOW();
-
- -- 更新商品销量
- UPDATE public.ml_products
- SET sale_count = sale_count + (
- SELECT SUM(quantity)
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- )
- WHERE id IN (
- SELECT product_id
- FROM public.ml_order_items
- WHERE order_id = NEW.id
- );
- END IF;
-
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 创建库存更新触发器
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_update_product_stock') THEN
- CREATE TRIGGER trigger_ml_update_product_stock
- AFTER INSERT OR UPDATE OR DELETE ON public.ml_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_product_stock();
- END IF;
-END $$;
-
--- 创建订单状态变更触发器
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'trigger_ml_order_status_change') THEN
- CREATE TRIGGER trigger_ml_order_status_change
- BEFORE UPDATE ON public.ml_orders
- FOR EACH ROW EXECUTE FUNCTION public.handle_order_status_change();
- END IF;
-END $$;
-
--- =====================================================================================
--- 3. 创建详细视图
--- =====================================================================================
-
--- 商品详情视图
-CREATE OR REPLACE VIEW public.ml_products_detail_view AS
-SELECT
- p.*,
- c.cid as category_cid,
- c.name as category_name,
- c.path as category_path,
- b.cid as brand_cid,
- b.name as brand_name,
- s.cid as shop_cid,
- s.shop_name,
- u.username as merchant_name,
- CASE
- WHEN p.status = 1 THEN '上架'
- WHEN p.status = 2 THEN '下架'
- WHEN p.status = 3 THEN '草稿'
- WHEN p.status = 4 THEN '删除'
- ELSE '未知'
- END as status_name
-FROM public.ml_products p
-LEFT JOIN public.ml_categories c ON p.category_id = c.id
-LEFT JOIN public.ml_brands b ON p.brand_id = b.id
-LEFT JOIN public.ml_shops s ON p.merchant_id = s.merchant_id
-LEFT JOIN public.ak_users u ON p.merchant_id = u.id;
-
-COMMENT ON VIEW public.ml_products_detail_view IS '商品详情视图';
-
--- 订单详情视图
-CREATE OR REPLACE VIEW public.ml_orders_detail_view AS
-SELECT
- o.*,
- u.username as customer_name,
- u.phone as customer_phone,
- m.username as merchant_name,
- s.shop_name,
- CASE
- WHEN o.order_status = 1 THEN '待付款'
- WHEN o.order_status = 2 THEN '待发货'
- WHEN o.order_status = 3 THEN '待收货'
- WHEN o.order_status = 4 THEN '已完成'
- WHEN o.order_status = 5 THEN '已取消'
- WHEN o.order_status = 6 THEN '退款中'
- WHEN o.order_status = 7 THEN '已退款'
- ELSE '未知'
- END as order_status_name,
- CASE
- WHEN o.payment_status = 1 THEN '未付款'
- WHEN o.payment_status = 2 THEN '已付款'
- WHEN o.payment_status = 3 THEN '部分退款'
- WHEN o.payment_status = 4 THEN '全额退款'
- ELSE '未知'
- END as payment_status_name
-FROM public.ml_orders o
-LEFT JOIN public.ak_users u ON o.user_id = u.id
-LEFT JOIN public.ak_users m ON o.merchant_id = m.id
-LEFT JOIN public.ml_shops s ON o.merchant_id = s.merchant_id;
-
-COMMENT ON VIEW public.ml_orders_detail_view IS '订单详情视图';
-
--- =====================================================================================
--- 4. RLS (Row Level Security) 策略
--- =====================================================================================
-
--- 启用 RLS
-ALTER TABLE public.ml_user_profiles ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_addresses ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_shopping_cart ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_favorites ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_browse_history ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_user_coupons ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_orders ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ml_products ENABLE ROW LEVEL SECURITY;
-
--- 用户档案策略:用户只能访问自己的数据
-DO $$
-BEGIN
- -- 删除可能存在的策略
- DROP POLICY IF EXISTS ml_user_profiles_select_policy ON public.ml_user_profiles;
- DROP POLICY IF EXISTS ml_user_profiles_insert_policy ON public.ml_user_profiles;
- DROP POLICY IF EXISTS ml_user_profiles_update_policy ON public.ml_user_profiles;
- DROP POLICY IF EXISTS ml_user_profiles_delete_policy ON public.ml_user_profiles;
-
- -- 创建新策略
- CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_profiles_insert_policy ON public.ml_user_profiles
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_profiles_update_policy ON public.ml_user_profiles
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_profiles_delete_policy ON public.ml_user_profiles
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- 用户地址策略
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_user_addresses_select_policy ON public.ml_user_addresses;
- DROP POLICY IF EXISTS ml_user_addresses_insert_policy ON public.ml_user_addresses;
- DROP POLICY IF EXISTS ml_user_addresses_update_policy ON public.ml_user_addresses;
- DROP POLICY IF EXISTS ml_user_addresses_delete_policy ON public.ml_user_addresses;
-
- CREATE POLICY ml_user_addresses_select_policy ON public.ml_user_addresses
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_addresses_insert_policy ON public.ml_user_addresses
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_addresses_update_policy ON public.ml_user_addresses
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_addresses_delete_policy ON public.ml_user_addresses
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- 购物车策略
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_shopping_cart_select_policy ON public.ml_shopping_cart;
- DROP POLICY IF EXISTS ml_shopping_cart_insert_policy ON public.ml_shopping_cart;
- DROP POLICY IF EXISTS ml_shopping_cart_update_policy ON public.ml_shopping_cart;
- DROP POLICY IF EXISTS ml_shopping_cart_delete_policy ON public.ml_shopping_cart;
-
- CREATE POLICY ml_shopping_cart_select_policy ON public.ml_shopping_cart
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_shopping_cart_insert_policy ON public.ml_shopping_cart
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_shopping_cart_update_policy ON public.ml_shopping_cart
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_shopping_cart_delete_policy ON public.ml_shopping_cart
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- 订单策略:用户可以查看自己的订单,商家可以查看自己店铺的订单
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_orders_select_policy ON public.ml_orders;
- DROP POLICY IF EXISTS ml_orders_insert_policy ON public.ml_orders;
- DROP POLICY IF EXISTS ml_orders_update_policy ON public.ml_orders;
- DROP POLICY IF EXISTS ml_orders_delete_policy ON public.ml_orders;
-
- CREATE POLICY ml_orders_select_policy ON public.ml_orders
- FOR SELECT USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
- CREATE POLICY ml_orders_insert_policy ON public.ml_orders
- FOR INSERT WITH CHECK (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
- CREATE POLICY ml_orders_update_policy ON public.ml_orders
- FOR UPDATE USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-
- CREATE POLICY ml_orders_delete_policy ON public.ml_orders
- FOR DELETE USING (
- auth.uid() IN (
- SELECT auth_id FROM public.ak_users WHERE id IN (user_id, merchant_id)
- )
- );
-END $$;
-
--- 商品策略:所有人可以查看上架商品,商家只能管理自己的商品
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_products_select_policy ON public.ml_products;
- DROP POLICY IF EXISTS ml_products_insert_policy ON public.ml_products;
- DROP POLICY IF EXISTS ml_products_update_policy ON public.ml_products;
- DROP POLICY IF EXISTS ml_products_delete_policy ON public.ml_products;
-
- CREATE POLICY ml_products_select_policy ON public.ml_products
- FOR SELECT USING (status = 1);
-
- CREATE POLICY ml_products_insert_policy ON public.ml_products
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-
- CREATE POLICY ml_products_update_policy ON public.ml_products
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-
- CREATE POLICY ml_products_delete_policy ON public.ml_products
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = merchant_id)
- );
-END $$;
-
--- 收藏策略
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_user_favorites_select_policy ON public.ml_user_favorites;
- DROP POLICY IF EXISTS ml_user_favorites_insert_policy ON public.ml_user_favorites;
- DROP POLICY IF EXISTS ml_user_favorites_update_policy ON public.ml_user_favorites;
- DROP POLICY IF EXISTS ml_user_favorites_delete_policy ON public.ml_user_favorites;
-
- CREATE POLICY ml_user_favorites_select_policy ON public.ml_user_favorites
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_favorites_insert_policy ON public.ml_user_favorites
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_favorites_update_policy ON public.ml_user_favorites
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_favorites_delete_policy ON public.ml_user_favorites
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- 浏览历史策略
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_browse_history_select_policy ON public.ml_browse_history;
- DROP POLICY IF EXISTS ml_browse_history_insert_policy ON public.ml_browse_history;
- DROP POLICY IF EXISTS ml_browse_history_update_policy ON public.ml_browse_history;
- DROP POLICY IF EXISTS ml_browse_history_delete_policy ON public.ml_browse_history;
-
- CREATE POLICY ml_browse_history_select_policy ON public.ml_browse_history
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_browse_history_insert_policy ON public.ml_browse_history
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_browse_history_update_policy ON public.ml_browse_history
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_browse_history_delete_policy ON public.ml_browse_history
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- 优惠券策略
-DO $$
-BEGIN
- DROP POLICY IF EXISTS ml_user_coupons_select_policy ON public.ml_user_coupons;
- DROP POLICY IF EXISTS ml_user_coupons_insert_policy ON public.ml_user_coupons;
- DROP POLICY IF EXISTS ml_user_coupons_update_policy ON public.ml_user_coupons;
- DROP POLICY IF EXISTS ml_user_coupons_delete_policy ON public.ml_user_coupons;
-
- CREATE POLICY ml_user_coupons_select_policy ON public.ml_user_coupons
- FOR SELECT USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_coupons_insert_policy ON public.ml_user_coupons
- FOR INSERT WITH CHECK (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_coupons_update_policy ON public.ml_user_coupons
- FOR UPDATE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-
- CREATE POLICY ml_user_coupons_delete_policy ON public.ml_user_coupons
- FOR DELETE USING (
- auth.uid() = (SELECT auth_id FROM public.ak_users WHERE id = user_id)
- );
-END $$;
-
--- =====================================================================================
--- 5. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE 'SEO 优化和安全策略配置完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '已创建 SEO 函数: 6 个';
- RAISE NOTICE '已创建业务函数: 4 个';
- RAISE NOTICE '已创建详细视图: 2 个';
- RAISE NOTICE '已配置 RLS 策略: 8 个表';
- RAISE NOTICE '已创建库存和订单触发器';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '功能说明:';
- RAISE NOTICE '- SEO 友好的 URL 生成';
- RAISE NOTICE '- CID 基础的数据查询';
- RAISE NOTICE '- 自动库存管理';
- RAISE NOTICE '- 订单状态自动更新';
- RAISE NOTICE '- 用户数据安全隔离';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/mock_data_insert.sql b/doc_mall/database/mock_data_insert.sql
deleted file mode 100644
index d1d4b775..00000000
--- a/doc_mall/database/mock_data_insert.sql
+++ /dev/null
@@ -1,1180 +0,0 @@
--- =====================================================================================
--- 商城系统模拟数据插入脚本
--- 依赖: complete_mall_database.sql (必须先执行主数据库脚本)
--- 重要: 需要先在 Supabase Auth 中创建测试用户,建议使用 create_supabase_auth_users.js
--- 用途: 为商城系统生成测试数据,便于开发和测试
--- =====================================================================================
-
--- =====================================================================================
--- 0. 检查 Supabase Auth 用户环境
--- =====================================================================================
-
--- 检查是否为 Supabase 环境
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'auth') THEN
- RAISE WARNING '当前环境不是 Supabase,将使用虚拟 auth_id';
- RAISE WARNING '如果是 Supabase 环境,请先使用以下方式创建测试用户:';
- RAISE WARNING '1. 执行 create_supabase_auth_users.js 脚本';
- RAISE WARNING '2. 或在 Supabase Dashboard 中手动创建用户';
- ELSE
- RAISE NOTICE '检测到 Supabase 环境,将尝试关联真实 auth 用户';
-
- -- 检查是否有测试用户
- IF EXISTS (SELECT 1 FROM auth.users WHERE email LIKE '%@mall.com') THEN
- RAISE NOTICE '发现测试用户,将使用真实 auth_id';
- ELSE
- RAISE WARNING '未发现测试用户,建议先执行 create_supabase_auth_users.js';
- RAISE WARNING '或手动在 Supabase Dashboard 创建以下测试用户:';
- RAISE WARNING '- admin@mall.com';
- RAISE WARNING '- merchant1@mall.com';
- RAISE WARNING '- merchant2@mall.com';
- RAISE WARNING '- customer1@mall.com';
- RAISE WARNING '- customer2@mall.com';
- RAISE WARNING '- customer3@mall.com';
- RAISE WARNING '- driver1@mall.com';
- RAISE WARNING '- driver2@mall.com';
- END IF;
- END IF;
-END $$;
-
--- =====================================================================================
--- 1. 清理现有测试数据 (可选,谨慎使用)
--- =====================================================================================
-
--- TRUNCATE TABLE public.ml_product_reviews CASCADE;
--- TRUNCATE TABLE public.ml_order_items CASCADE;
--- TRUNCATE TABLE public.ml_orders CASCADE;
--- TRUNCATE TABLE public.ml_shopping_cart CASCADE;
--- TRUNCATE TABLE public.ml_user_coupons CASCADE;
--- TRUNCATE TABLE public.ml_coupon_templates CASCADE;
--- TRUNCATE TABLE public.ml_product_skus CASCADE;
--- TRUNCATE TABLE public.ml_products CASCADE;
--- TRUNCATE TABLE public.ml_shops CASCADE;
--- TRUNCATE TABLE public.ml_brands CASCADE;
--- TRUNCATE TABLE public.ml_categories CASCADE;
--- TRUNCATE TABLE public.ml_user_addresses CASCADE;
--- TRUNCATE TABLE public.ml_user_profiles CASCADE;
-
--- =====================================================================================
--- 2. Supabase Auth 用户创建 + ak_users 数据
--- =====================================================================================
-
--- 重要提示:在 Supabase 环境中,建议通过以下方式创建测试用户:
---
--- 方法一:使用 Supabase Dashboard 手动创建用户
--- 1. 进入 Supabase Dashboard -> Authentication -> Users
--- 2. 点击 "Add user" 创建以下测试用户:
--- - admin@mall.com (密码: Test123456!)
--- - merchant1@mall.com (密码: Test123456!)
--- - merchant2@mall.com (密码: Test123456!)
--- - customer1@mall.com (密码: Test123456!)
--- - customer2@mall.com (密码: Test123456!)
--- - customer3@mall.com (密码: Test123456!)
--- - driver1@mall.com (密码: Test123456!)
--- - driver2@mall.com (密码: Test123456!)
---
--- 方法二:使用 Supabase Admin API (需要在服务端执行)
---
--- 方法三:如果在本地开发环境,可以尝试直接插入 auth.users 表(仅限开发)
-
--- 检查是否为 Supabase 环境
-DO $$
-DECLARE
- is_supabase BOOLEAN := FALSE;
- auth_user_rec RECORD;
- test_emails TEXT[] := ARRAY[
- 'admin@mall.com',
- 'merchant1@mall.com',
- 'merchant2@mall.com',
- 'customer1@mall.com',
- 'customer2@mall.com',
- 'customer3@mall.com',
- 'driver1@mall.com',
- 'driver2@mall.com'
- ];
- email_addr TEXT;
-BEGIN
- -- 检查是否存在 auth schema (Supabase 特征)
- SELECT EXISTS (
- SELECT 1 FROM information_schema.schemata WHERE schema_name = 'auth'
- ) INTO is_supabase;
-
- IF is_supabase THEN
- RAISE NOTICE '检测到 Supabase 环境,检查 auth.users 表中的测试用户...';
-
- -- 检查测试用户是否存在
- FOREACH email_addr IN ARRAY test_emails LOOP
- SELECT id, email INTO auth_user_rec
- FROM auth.users
- WHERE email = email_addr
- LIMIT 1;
-
- IF FOUND THEN
- RAISE NOTICE '✓ Auth用户已存在: % (ID: %)', auth_user_rec.email, auth_user_rec.id;
- ELSE
- RAISE NOTICE '✗ Auth用户不存在: %', email_addr;
- RAISE NOTICE '请在 Supabase Dashboard 中创建此用户或使用 Admin API';
- END IF;
- END LOOP;
-
- RAISE NOTICE '============================================';
- RAISE NOTICE '如果有缺失的用户,请按以下步骤操作:';
- RAISE NOTICE '1. 登录 Supabase Dashboard';
- RAISE NOTICE '2. 进入 Authentication -> Users';
- RAISE NOTICE '3. 点击 "Add user" 创建缺失的用户';
- RAISE NOTICE '4. 邮箱格式: user@mall.com, 密码: Test123456!';
- RAISE NOTICE '5. 重新执行此脚本';
- RAISE NOTICE '============================================';
- ELSE
- RAISE NOTICE '非 Supabase 环境,将创建虚拟 auth_id...';
- END IF;
-END $$;
-
--- =====================================================================================
--- 1. 插入用户数据 (ak_users) - 关联 Supabase Auth 用户
--- =====================================================================================
-
--- 临时函数:获取或创建 auth_id
-CREATE OR REPLACE FUNCTION get_or_create_auth_id(user_email TEXT)
-RETURNS UUID AS $$
-DECLARE
- auth_user_id UUID;
-BEGIN
- -- 尝试从 auth.users 获取真实用户ID
- IF EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'auth') THEN
- SELECT id INTO auth_user_id FROM auth.users WHERE email = user_email LIMIT 1;
-
- IF auth_user_id IS NOT NULL THEN
- RETURN auth_user_id;
- ELSE
- RAISE WARNING '用户 % 在 auth.users 中不存在,使用虚拟UUID', user_email;
- END IF;
- END IF;
-
- -- 生成确定性虚拟UUID (基于邮箱)
- RETURN uuid_generate_v5(uuid_ns_dns(), user_email);
-END;
-$$ LANGUAGE plpgsql;
-
--- 插入系统管理员
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('admin@mall.com'),
- '系统管理员',
- 'admin',
- 'admin@mall.com',
- '13800138000',
- 'https://example.com/avatars/admin.jpg',
- 'active',
- 'web',
- NOW() - INTERVAL '365 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'admin@mall.com');
-
--- 插入商家用户
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('merchant1@mall.com'),
- '数码专营店',
- 'merchant',
- 'merchant1@mall.com',
- '13800138001',
- 'https://example.com/avatars/merchant1.jpg',
- 'active',
- 'web',
- NOW() - INTERVAL '300 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'merchant1@mall.com');
-
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('merchant2@mall.com'),
- '时尚服饰店',
- 'merchant',
- 'merchant2@mall.com',
- '13800138002',
- 'https://example.com/avatars/merchant2.jpg',
- 'active',
- 'web',
- NOW() - INTERVAL '200 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'merchant2@mall.com');
-
--- 插入普通用户
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('customer1@mall.com'),
- '张小明',
- 'customer',
- 'customer1@mall.com',
- '13800138101',
- 'https://example.com/avatars/customer1.jpg',
- 'active',
- 'mobile',
- NOW() - INTERVAL '180 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'customer1@mall.com');
-
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('customer2@mall.com'),
- '李小红',
- 'customer',
- 'customer2@mall.com',
- '13800138102',
- 'https://example.com/avatars/customer2.jpg',
- 'active',
- 'mobile',
- NOW() - INTERVAL '120 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'customer2@mall.com');
-
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('customer3@mall.com'),
- '王小华',
- 'customer',
- 'customer3@mall.com',
- '13800138103',
- 'https://example.com/avatars/customer3.jpg',
- 'active',
- 'web',
- NOW() - INTERVAL '90 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'customer3@mall.com');
-
--- 插入配送员
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('driver1@mall.com'),
- '快递小哥1',
- 'delivery',
- 'driver1@mall.com',
- '13800138201',
- 'https://example.com/avatars/driver1.jpg',
- 'active',
- 'mobile',
- NOW() - INTERVAL '150 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'driver1@mall.com');
-
-INSERT INTO ak_users (auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
-SELECT
- get_or_create_auth_id('driver2@mall.com'),
- '快递小哥2',
- 'delivery',
- 'driver2@mall.com',
- '13800138202',
- 'https://example.com/avatars/driver2.jpg',
- 'active',
- 'mobile',
- NOW() - INTERVAL '100 days',
- NOW()
-WHERE NOT EXISTS (SELECT 1 FROM ak_users WHERE email = 'driver2@mall.com');
-
--- 清理临时函数
-DROP FUNCTION get_or_create_auth_id(TEXT);
-
--- =====================================================================================
--- 2. 获取用户ID (用于后续插入)
--- =====================================================================================
-DO $$
-DECLARE
- admin_id UUID;
- merchant1_id UUID;
- merchant2_id UUID;
- customer1_id UUID;
- customer2_id UUID;
- customer3_id UUID;
- driver1_id UUID;
- driver2_id UUID;
-BEGIN
- -- 获取用户ID(使用email字段)
- SELECT id INTO admin_id FROM ak_users WHERE email = 'admin@mall.com';
- SELECT id INTO merchant1_id FROM ak_users WHERE email = 'merchant1@mall.com';
- SELECT id INTO merchant2_id FROM ak_users WHERE email = 'merchant2@mall.com';
- SELECT id INTO customer1_id FROM ak_users WHERE email = 'customer1@mall.com';
- SELECT id INTO customer2_id FROM ak_users WHERE email = 'customer2@mall.com';
- SELECT id INTO customer3_id FROM ak_users WHERE email = 'customer3@mall.com';
- SELECT id INTO driver1_id FROM ak_users WHERE email = 'driver1@mall.com';
- SELECT id INTO driver2_id FROM ak_users WHERE email = 'driver2@mall.com';
-
- -- 创建临时表存储ID
- CREATE TEMP TABLE IF NOT EXISTS temp_user_ids (
- role VARCHAR(20),
- user_id UUID
- );
-
- INSERT INTO temp_user_ids VALUES
- ('admin', admin_id),
- ('merchant1', merchant1_id),
- ('merchant2', merchant2_id),
- ('customer1', customer1_id),
- ('customer2', customer2_id),
- ('customer3', customer3_id),
- ('driver1', driver1_id),
- ('driver2', driver2_id);
-END $$;
-
--- =====================================================================================
--- 3. 用户档案数据
--- =====================================================================================
-
--- 插入用户档案
-INSERT INTO public.ml_user_profiles (user_id, status, real_name, credit_score, verification_status, verification_data, preferences)
-SELECT
- t.user_id,
- 1, -- 正常状态
- CASE
- WHEN t.role = 'admin' THEN '系统管理员'
- WHEN t.role = 'merchant1' THEN '张三丰'
- WHEN t.role = 'merchant2' THEN '李四海'
- WHEN t.role = 'customer1' THEN '王小明'
- WHEN t.role = 'customer2' THEN '刘小红'
- WHEN t.role = 'customer3' THEN '陈小华'
- WHEN t.role = 'driver1' THEN '赵配送'
- WHEN t.role = 'driver2' THEN '钱师傅'
- END,
- CASE
- WHEN t.role = 'admin' THEN 1000
- WHEN t.role IN ('merchant1', 'merchant2') THEN 950
- WHEN t.role IN ('driver1', 'driver2') THEN 900
- ELSE 850
- END,
- CASE
- WHEN t.role IN ('admin', 'merchant1', 'merchant2') THEN 1 -- 已认证
- ELSE 0 -- 未认证
- END,
- '{}', -- 认证数据
- '{"language": "zh-CN", "currency": "CNY", "notifications": true}' -- 偏好设置
-FROM temp_user_ids t
-ON CONFLICT (user_id) DO UPDATE SET
- real_name = EXCLUDED.real_name,
- credit_score = EXCLUDED.credit_score,
- verification_status = EXCLUDED.verification_status;
-
--- =====================================================================================
--- 4. 用户地址数据
--- =====================================================================================
-
--- 插入用户地址
-INSERT INTO public.ml_user_addresses (user_id, receiver_name, receiver_phone, province, city, district, address_detail, is_default, label, latitude, longitude)
-SELECT
- t.user_id,
- CASE
- WHEN t.role = 'customer1' THEN '王小明'
- WHEN t.role = 'customer2' THEN '刘小红'
- WHEN t.role = 'customer3' THEN '陈小华'
- WHEN t.role = 'merchant1' THEN '张三丰'
- WHEN t.role = 'merchant2' THEN '李四海'
- END,
- CASE
- WHEN t.role = 'customer1' THEN '13800138003'
- WHEN t.role = 'customer2' THEN '13800138004'
- WHEN t.role = 'customer3' THEN '13800138005'
- WHEN t.role = 'merchant1' THEN '13800138001'
- WHEN t.role = 'merchant2' THEN '13800138002'
- END,
- '北京市',
- '朝阳区',
- '望京街道',
- CASE
- WHEN t.role = 'customer1' THEN '望京SOHO T1座 1201室'
- WHEN t.role = 'customer2' THEN '国贸大厦 A座 2301室'
- WHEN t.role = 'customer3' THEN '三里屯太古里 B1-023'
- WHEN t.role = 'merchant1' THEN '中关村创业大街 8号楼'
- WHEN t.role = 'merchant2' THEN '亦庄经济开发区 科创园'
- END,
- TRUE, -- 默认地址
- 'home',
- 39.9942 + (random() - 0.5) * 0.01, -- 北京纬度附近
- 116.3258 + (random() - 0.5) * 0.01 -- 北京经度附近
-FROM temp_user_ids t
-WHERE t.role IN ('customer1', 'customer2', 'customer3', 'merchant1', 'merchant2');
-
--- 为部分用户添加第二个地址
-INSERT INTO public.ml_user_addresses (user_id, receiver_name, receiver_phone, province, city, district, address_detail, is_default, label, latitude, longitude)
-SELECT
- t.user_id,
- '公司收货',
- '010-12345678',
- '北京市',
- '海淀区',
- '中关村街道',
- '中关村大街1号 科技大厦',
- FALSE,
- 'office',
- 39.9042,
- 116.3958
-FROM temp_user_ids t
-WHERE t.role IN ('customer1', 'customer2');
-
--- =====================================================================================
--- 5. 商品分类数据
--- =====================================================================================
-
--- 删除默认分类,插入更详细的分类
-DELETE FROM public.ml_categories;
-
--- 一级分类
-INSERT INTO public.ml_categories (id, name, slug, level, path, sort_order, icon_url, description) VALUES
-(uuid_generate_v4(), '数码电器', 'digital', 1, ARRAY['数码电器'], 1, 'icon-digital', '手机、电脑、家电等数码产品'),
-(uuid_generate_v4(), '服装鞋帽', 'fashion', 1, ARRAY['服装鞋帽'], 2, 'icon-fashion', '男装、女装、鞋子、配饰'),
-(uuid_generate_v4(), '家居用品', 'home', 1, ARRAY['家居用品'], 3, 'icon-home', '家具、装饰、生活用品'),
-(uuid_generate_v4(), '食品饮料', 'food', 1, ARRAY['食品饮料'], 4, 'icon-food', '新鲜食材、零食、饮品'),
-(uuid_generate_v4(), '美妆护肤', 'beauty', 1, ARRAY['美妆护肤'], 5, 'icon-beauty', '化妆品、护肤品、个人护理'),
-(uuid_generate_v4(), '运动户外', 'sports', 1, ARRAY['运动户外'], 6, 'icon-sports', '运动器材、户外装备、健身用品'),
-(uuid_generate_v4(), '图书文娱', 'books', 1, ARRAY['图书文娱'], 7, 'icon-books', '图书、音像、文具、玩具'),
-(uuid_generate_v4(), '母婴用品', 'baby', 1, ARRAY['母婴用品'], 8, 'icon-baby', '婴儿用品、孕妇用品、儿童玩具');
-
--- 获取一级分类ID并创建二级分类
-DO $$
-DECLARE
- digital_id UUID;
- fashion_id UUID;
- home_id UUID;
- food_id UUID;
-BEGIN
- -- 获取一级分类ID
- SELECT id INTO digital_id FROM public.ml_categories WHERE slug = 'digital';
- SELECT id INTO fashion_id FROM public.ml_categories WHERE slug = 'fashion';
- SELECT id INTO home_id FROM public.ml_categories WHERE slug = 'home';
- SELECT id INTO food_id FROM public.ml_categories WHERE slug = 'food';
-
- -- 数码电器二级分类
- INSERT INTO public.ml_categories (parent_id, name, slug, level, path, sort_order) VALUES
- (digital_id, '手机通讯', 'mobile', 2, ARRAY['数码电器', '手机通讯'], 1),
- (digital_id, '电脑办公', 'computer', 2, ARRAY['数码电器', '电脑办公'], 2),
- (digital_id, '家用电器', 'appliance', 2, ARRAY['数码电器', '家用电器'], 3),
- (digital_id, '数码配件', 'accessories', 2, ARRAY['数码电器', '数码配件'], 4);
-
- -- 服装鞋帽二级分类
- INSERT INTO public.ml_categories (parent_id, name, slug, level, path, sort_order) VALUES
- (fashion_id, '男装', 'mens-wear', 2, ARRAY['服装鞋帽', '男装'], 1),
- (fashion_id, '女装', 'womens-wear', 2, ARRAY['服装鞋帽', '女装'], 2),
- (fashion_id, '男鞋', 'mens-shoes', 2, ARRAY['服装鞋帽', '男鞋'], 3),
- (fashion_id, '女鞋', 'womens-shoes', 2, ARRAY['服装鞋帽', '女鞋'], 4);
-
- -- 家居用品二级分类
- INSERT INTO public.ml_categories (parent_id, name, slug, level, path, sort_order) VALUES
- (home_id, '家具', 'furniture', 2, ARRAY['家居用品', '家具'], 1),
- (home_id, '家装', 'decoration', 2, ARRAY['家居用品', '家装'], 2),
- (home_id, '厨具', 'kitchen', 2, ARRAY['家居用品', '厨具'], 3),
- (home_id, '生活用品', 'daily', 2, ARRAY['家居用品', '生活用品'], 4);
-
- -- 食品饮料二级分类
- INSERT INTO public.ml_categories (parent_id, name, slug, level, path, sort_order) VALUES
- (food_id, '新鲜水果', 'fruits', 2, ARRAY['食品饮料', '新鲜水果'], 1),
- (food_id, '肉禽蛋类', 'meat', 2, ARRAY['食品饮料', '肉禽蛋类'], 2),
- (food_id, '零食坚果', 'snacks', 2, ARRAY['食品饮料', '零食坚果'], 3),
- (food_id, '酒水饮料', 'drinks', 2, ARRAY['食品饮料', '酒水饮料'], 4);
-END $$;
-
--- =====================================================================================
--- 6. 品牌数据
--- =====================================================================================
-
-INSERT INTO public.ml_brands (name, logo_url, description, website) VALUES
-('苹果', 'https://cdn.jsdelivr.net/gh/devicons/devicon/icons/apple/apple-original.svg', '创新科技品牌', 'https://www.apple.com'),
-('华为', 'https://logo.clearbit.com/huawei.com', '全球领先的信息与通信技术解决方案供应商', 'https://www.huawei.com'),
-('小米', 'https://logo.clearbit.com/mi.com', '专注于智能硬件和电子产品', 'https://www.mi.com'),
-('三星', 'https://logo.clearbit.com/samsung.com', '全球知名电子产品制造商', 'https://www.samsung.com'),
-('耐克', 'https://logo.clearbit.com/nike.com', '全球著名体育用品品牌', 'https://www.nike.com'),
-('阿迪达斯', 'https://logo.clearbit.com/adidas.com', '德国运动用品制造商', 'https://www.adidas.com'),
-('优衣库', 'https://logo.clearbit.com/uniqlo.com', '日本休闲服饰品牌', 'https://www.uniqlo.com'),
-('宜家', 'https://logo.clearbit.com/ikea.com', '瑞典家居用品零售商', 'https://www.ikea.com'),
-('美的', 'https://logo.clearbit.com/midea.com', '中国家电制造商', 'https://www.midea.com'),
-('海尔', 'https://logo.clearbit.com/haier.com', '全球知名家电品牌', 'https://www.haier.com');
-
--- =====================================================================================
--- 7. 店铺数据
--- =====================================================================================
-
--- 获取商家用户ID并创建店铺
-INSERT INTO public.ml_shops (merchant_id, shop_name, shop_logo, shop_banner, description, business_license, contact_name, contact_phone, contact_email, address, business_hours, status, verified_at)
-SELECT
- t.user_id,
- CASE
- WHEN t.role = 'merchant1' THEN '张三丰数码专营店'
- WHEN t.role = 'merchant2' THEN '李四海时尚小铺'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN 'https://api.dicebear.com/7.x/shapes/svg?seed=shop1'
- WHEN t.role = 'merchant2' THEN 'https://api.dicebear.com/7.x/shapes/svg?seed=shop2'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN 'https://picsum.photos/800/200?random=1'
- WHEN t.role = 'merchant2' THEN 'https://picsum.photos/800/200?random=2'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN '专业销售各类数码产品,品质保证,服务至上'
- WHEN t.role = 'merchant2' THEN '时尚潮流服饰,让您成为街头最亮的星'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN '91110000MA0001234A'
- WHEN t.role = 'merchant2' THEN '91110000MA0005678B'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN '张三丰'
- WHEN t.role = 'merchant2' THEN '李四海'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN '13800138001'
- WHEN t.role = 'merchant2' THEN '13800138002'
- END,
- CASE
- WHEN t.role = 'merchant1' THEN 'merchant1@mall.com'
- WHEN t.role = 'merchant2' THEN 'merchant2@mall.com'
- END,
- '{"province": "北京市", "city": "朝阳区", "district": "望京街道", "detail": "望京商业中心"}',
- '{"monday": "09:00-21:00", "tuesday": "09:00-21:00", "wednesday": "09:00-21:00", "thursday": "09:00-21:00", "friday": "09:00-21:00", "saturday": "09:00-22:00", "sunday": "10:00-20:00"}',
- 1, -- 正常状态
- NOW() - INTERVAL '30 days' -- 30天前认证
-FROM temp_user_ids t
-WHERE t.role IN ('merchant1', 'merchant2');
-
--- =====================================================================================
--- 8. 商品数据
--- =====================================================================================
-
--- 获取分类和品牌ID
-DO $$
-DECLARE
- mobile_cat_id UUID;
- computer_cat_id UUID;
- mens_wear_cat_id UUID;
- womens_wear_cat_id UUID;
- furniture_cat_id UUID;
- fruits_cat_id UUID;
-
- apple_brand_id UUID;
- huawei_brand_id UUID;
- xiaomi_brand_id UUID;
- nike_brand_id UUID;
- uniqlo_brand_id UUID;
- ikea_brand_id UUID;
-
- merchant1_id UUID;
- merchant2_id UUID;
-BEGIN
- -- 获取分类ID
- SELECT id INTO mobile_cat_id FROM public.ml_categories WHERE slug = 'mobile';
- SELECT id INTO computer_cat_id FROM public.ml_categories WHERE slug = 'computer';
- SELECT id INTO mens_wear_cat_id FROM public.ml_categories WHERE slug = 'mens-wear';
- SELECT id INTO womens_wear_cat_id FROM public.ml_categories WHERE slug = 'womens-wear';
- SELECT id INTO furniture_cat_id FROM public.ml_categories WHERE slug = 'furniture';
- SELECT id INTO fruits_cat_id FROM public.ml_categories WHERE slug = 'fruits';
-
- -- 获取品牌ID
- SELECT id INTO apple_brand_id FROM public.ml_brands WHERE name = '苹果';
- SELECT id INTO huawei_brand_id FROM public.ml_brands WHERE name = '华为';
- SELECT id INTO xiaomi_brand_id FROM public.ml_brands WHERE name = '小米';
- SELECT id INTO nike_brand_id FROM public.ml_brands WHERE name = '耐克';
- SELECT id INTO uniqlo_brand_id FROM public.ml_brands WHERE name = '优衣库';
- SELECT id INTO ikea_brand_id FROM public.ml_brands WHERE name = '宜家';
-
- -- 获取商家ID
- SELECT user_id INTO merchant1_id FROM temp_user_ids WHERE role = 'merchant1';
- SELECT user_id INTO merchant2_id FROM temp_user_ids WHERE role = 'merchant2';
-
- -- 插入商品数据 - 商家1的数码产品
- INSERT INTO public.ml_products (
- merchant_id, category_id, brand_id, product_code, name, subtitle, description,
- main_image_url, image_urls, base_price, market_price, total_stock, available_stock,
- weight, status, is_featured, is_new, is_hot, tags, slug
- ) VALUES
- -- iPhone 15 Pro
- (merchant1_id, mobile_cat_id, apple_brand_id, 'IP15P-001',
- 'iPhone 15 Pro 256GB 深空黑色',
- 'A17 Pro芯片,钛金属设计,专业级摄像头系统',
- '全新iPhone 15 Pro采用航空级钛金属设计,搭载A17 Pro芯片,配备专业级摄像头系统,支持5G网络。48MP主摄像头,2倍变焦,4K视频录制。',
- 'https://picsum.photos/600/600?random=10',
- '["https://picsum.photos/600/600?random=11", "https://picsum.photos/600/600?random=12", "https://picsum.photos/600/600?random=13"]',
- 8999.00, 9999.00, 50, 45, 0.187, 1, true, true, true,
- ARRAY['手机', '苹果', 'iPhone', '5G', '新品'], 'iphone-15-pro-256gb-black'),
-
- -- 华为 Mate 60 Pro
- (merchant1_id, mobile_cat_id, huawei_brand_id, 'HW-M60P-001',
- '华为 Mate 60 Pro 512GB 雅川青',
- '卫星通话,昆仑玻璃,超聚光夜拍',
- '华为Mate 60 Pro支持卫星通话功能,采用昆仑玻璃,配备超聚光夜拍摄像头,5000万像素主摄,支持100倍数字变焦。',
- 'https://picsum.photos/600/600?random=20',
- '["https://picsum.photos/600/600?random=21", "https://picsum.photos/600/600?random=22"]',
- 6999.00, 7999.00, 30, 28, 0.225, 1, true, false, true,
- ARRAY['手机', '华为', 'Mate', '卫星通话'], 'huawei-mate-60-pro-512gb'),
-
- -- 小米笔记本
- (merchant1_id, computer_cat_id, xiaomi_brand_id, 'XM-NB-001',
- '小米笔记本 Pro 14 增强版',
- '2.8K OLED屏幕,12代酷睿处理器',
- '14英寸2.8K OLED全面屏,120Hz刷新率,第12代Intel Core处理器,16GB内存,512GB固态硬盘,雷电4接口。',
- 'https://picsum.photos/600/600?random=30',
- '["https://picsum.photos/600/600?random=31", "https://picsum.photos/600/600?random=32"]',
- 5999.00, 6999.00, 20, 18, 1.4, 1, false, true, false,
- ARRAY['笔记本', '小米', 'OLED', '办公'], 'xiaomi-notebook-pro-14');
-
- -- 插入商品数据 - 商家2的时尚产品
- INSERT INTO public.ml_products (
- merchant_id, category_id, brand_id, product_code, name, subtitle, description,
- main_image_url, image_urls, base_price, market_price, total_stock, available_stock,
- weight, status, is_featured, is_new, is_hot, tags, slug
- ) VALUES
- -- 耐克运动鞋
- (merchant2_id, mens_wear_cat_id, nike_brand_id, 'NK-AIR-001',
- 'Nike Air Max 270 男士运动鞋',
- '全掌气垫,舒适透气,时尚百搭',
- 'Nike Air Max 270采用全新的Air Max气垫设计,提供卓越的缓震效果。透气网面鞋身,轻量化设计,适合日常运动和休闲穿着。',
- 'https://picsum.photos/600/600?random=40',
- '["https://picsum.photos/600/600?random=41", "https://picsum.photos/600/600?random=42"]',
- 899.00, 1099.00, 100, 95, 0.8, 1, true, false, true,
- ARRAY['运动鞋', '耐克', '气垫', '男鞋'], 'nike-air-max-270-mens'),
-
- -- 优衣库T恤
- (merchant2_id, mens_wear_cat_id, uniqlo_brand_id, 'UQ-TEE-001',
- 'UNIQLO 优质棉圆领T恤(短袖)',
- '100%纯棉,柔软舒适,多色可选',
- '采用100%精选纯棉制作,触感柔软,吸汗透气。简约设计,多种颜色可选,是日常穿搭的必备单品。',
- 'https://picsum.photos/600/600?random=50',
- '["https://picsum.photos/600/600?random=51", "https://picsum.photos/600/600?random=52"]',
- 59.00, 79.00, 200, 180, 0.2, 1, false, false, false,
- ARRAY['T恤', '优衣库', '纯棉', '基础款'], 'uniqlo-cotton-tshirt'),
-
- -- 女装连衣裙
- (merchant2_id, womens_wear_cat_id, uniqlo_brand_id, 'UQ-DRESS-001',
- 'UNIQLO 女装雪纺连衣裙',
- '轻盈雪纺面料,优雅飘逸,职场通勤',
- '采用轻盈雪纺面料,版型优雅,适合职场通勤和日常聚会。A字版型修饰身形,多种花色可选。',
- 'https://picsum.photos/600/600?random=60',
- '["https://picsum.photos/600/600?random=61", "https://picsum.photos/600/600?random=62"]',
- 299.00, 399.00, 80, 75, 0.3, 1, true, true, false,
- ARRAY['连衣裙', '优衣库', '雪纺', '女装'], 'uniqlo-chiffon-dress');
-END $$;
-
--- =====================================================================================
--- 9. 商品SKU数据
--- =====================================================================================
-
--- 为iPhone添加SKU
-INSERT INTO public.ml_product_skus (product_id, sku_code, specifications, price, market_price, stock, image_url)
-SELECT
- p.id,
- 'IP15P-' || color.code || '-' || storage.code,
- jsonb_build_object('颜色', color.name, '存储容量', storage.name),
- p.base_price + storage.price_diff,
- p.market_price + storage.price_diff,
- 15,
- 'https://picsum.photos/400/400?random=' || (10 + color.id)
-FROM public.ml_products p
-CROSS JOIN (VALUES
- (1, 'BLK', '深空黑色', 0),
- (2, 'WHT', '白色钛金属', 0),
- (3, 'BLU', '蓝色钛金属', 0)
-) AS color(id, code, name, price_diff)
-CROSS JOIN (VALUES
- (1, '128G', '128GB', -1000),
- (2, '256G', '256GB', 0),
- (3, '512G', '512GB', 1500)
-) AS storage(id, code, name, price_diff)
-WHERE p.product_code = 'IP15P-001';
-
--- 为运动鞋添加SKU
-INSERT INTO public.ml_product_skus (product_id, sku_code, specifications, price, market_price, stock, image_url)
-SELECT
- p.id,
- 'NK-AIR-' || color.code || '-' || size.code,
- jsonb_build_object('颜色', color.name, '尺码', size.name),
- p.base_price,
- p.market_price,
- 10,
- 'https://picsum.photos/400/400?random=' || (40 + color.id)
-FROM public.ml_products p
-CROSS JOIN (VALUES
- (1, 'BLK', '黑色'),
- (2, 'WHT', '白色'),
- (3, 'RED', '红色')
-) AS color(id, code, name)
-CROSS JOIN (VALUES
- (1, '40', '40码'),
- (2, '41', '41码'),
- (3, '42', '42码'),
- (4, '43', '43码'),
- (5, '44', '44码')
-) AS size(id, code, name)
-WHERE p.product_code = 'NK-AIR-001';
-
--- 为T恤添加SKU
-INSERT INTO public.ml_product_skus (product_id, sku_code, specifications, price, market_price, stock, image_url)
-SELECT
- p.id,
- 'UQ-TEE-' || color.code || '-' || size.code,
- jsonb_build_object('颜色', color.name, '尺码', size.name),
- p.base_price,
- p.market_price,
- 25,
- 'https://picsum.photos/400/400?random=' || (50 + color.id)
-FROM public.ml_products p
-CROSS JOIN (VALUES
- (1, 'WHT', '白色'),
- (2, 'BLK', '黑色'),
- (3, 'GRY', '灰色'),
- (4, 'NVY', '深蓝色')
-) AS color(id, code, name)
-CROSS JOIN (VALUES
- (1, 'S', 'S'),
- (2, 'M', 'M'),
- (3, 'L', 'L'),
- (4, 'XL', 'XL')
-) AS size(id, code, name)
-WHERE p.product_code = 'UQ-TEE-001';
-
--- =====================================================================================
--- 10. 购物车数据
--- =====================================================================================
-
--- 为消费者添加购物车数据
-INSERT INTO public.ml_shopping_cart (user_id, product_id, sku_id, quantity, selected)
-SELECT
- customer.user_id,
- p.id,
- s.id,
- CASE
- WHEN customer.role = 'customer1' THEN 1
- WHEN customer.role = 'customer2' THEN 2
- ELSE 1
- END,
- true
-FROM temp_user_ids customer
-CROSS JOIN public.ml_products p
-LEFT JOIN public.ml_product_skus s ON p.id = s.product_id
-WHERE customer.role IN ('customer1', 'customer2', 'customer3')
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1)
- AND random() < 0.3 -- 30%的概率添加到购物车
-LIMIT 15;
-
--- =====================================================================================
--- 11. 优惠券数据
--- =====================================================================================
-
--- 创建优惠券模板
-INSERT INTO public.ml_coupon_templates (
- merchant_id, name, description, coupon_type, discount_type, discount_value,
- min_order_amount, max_discount_amount, total_quantity, per_user_limit,
- start_time, end_time, status
-) VALUES
--- 平台券
-(NULL, '新用户专享券', '新用户注册即送50元无门槛券', 1, 1, 50.00, 0, 50.00, 1000, 1,
- NOW() - INTERVAL '1 day', NOW() + INTERVAL '30 days', 1),
-(NULL, '满200减30', '全平台满200元减30元', 1, 1, 30.00, 200.00, 30.00, 500, 3,
- NOW() - INTERVAL '1 day', NOW() + INTERVAL '15 days', 1),
-(NULL, '9折优惠券', '全平台9折优惠,最高减100元', 2, 2, 0.9, 100.00, 100.00, 200, 1,
- NOW() - INTERVAL '1 day', NOW() + INTERVAL '7 days', 1),
-
--- 商家券
-((SELECT user_id FROM temp_user_ids WHERE role = 'merchant1'),
- '数码专营店满1000减100', '店铺满1000元减100元', 1, 1, 100.00, 1000.00, 100.00, 100, 2,
- NOW() - INTERVAL '1 day', NOW() + INTERVAL '20 days', 1),
-((SELECT user_id FROM temp_user_ids WHERE role = 'merchant2'),
- '时尚小铺免运费券', '店铺订单免运费', 3, 1, 15.00, 0, 15.00, 50, 1,
- NOW() - INTERVAL '1 day', NOW() + INTERVAL '10 days', 1);
-
--- 为用户发放优惠券
-INSERT INTO public.ml_user_coupons (user_id, template_id, coupon_code, status, expire_at)
-SELECT
- customer.user_id,
- t.id,
- public.generate_coupon_code(),
- 1, -- 未使用
- t.end_time
-FROM temp_user_ids customer
-CROSS JOIN public.ml_coupon_templates t
-WHERE customer.role IN ('customer1', 'customer2', 'customer3')
- AND t.status = 1
- AND random() < 0.6; -- 60%的概率获得优惠券
-
--- =====================================================================================
--- 12. 订单数据
--- =====================================================================================
-
--- 生成订单数据
-DO $$
-DECLARE
- customer_rec RECORD;
- selected_merchant_id UUID;
- product_rec RECORD;
- order_id UUID;
- order_no TEXT;
- total_amount DECIMAL;
-BEGIN
- -- 为每个客户生成2-4个订单
- FOR customer_rec IN
- SELECT user_id, role FROM temp_user_ids WHERE role LIKE 'customer%'
- LOOP
- FOR i IN 1..FLOOR(2 + random() * 3)::INTEGER LOOP
- -- 生成订单号
- order_no := public.generate_order_no();
-
- -- 随机选择商家
- SELECT user_id INTO selected_merchant_id FROM temp_user_ids
- WHERE role LIKE 'merchant%'
- ORDER BY random() LIMIT 1;
-
- -- 计算订单总金额(这里简化,实际应该根据商品计算)
- total_amount := 100 + random() * 2000;
-
- -- 创建订单
- INSERT INTO public.ml_orders (
- id, order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount,
- shipping_address, order_status, payment_status, shipping_status,
- paid_at, shipped_at, delivered_at,
- remark, created_at
- ) VALUES (
- uuid_generate_v4(), order_no, customer_rec.user_id, selected_merchant_id,
- total_amount - 10, 10.00, total_amount,
- jsonb_build_object(
- 'receiver_name', '收货人姓名',
- 'receiver_phone', '13800138000',
- 'province', '北京市',
- 'city', '朝阳区',
- 'district', '望京街道',
- 'address_detail', '望京SOHO T1座 1201室'
- ),
- CASE
- WHEN random() < 0.6 THEN 4 -- 已完成
- WHEN random() < 0.8 THEN 3 -- 待收货
- WHEN random() < 0.9 THEN 2 -- 待发货
- ELSE 1 -- 待付款
- END,
- CASE
- WHEN random() < 0.8 THEN 2 -- 已付款
- ELSE 1 -- 未付款
- END,
- CASE
- WHEN random() < 0.7 THEN 4 -- 已送达
- WHEN random() < 0.85 THEN 3 -- 运输中
- WHEN random() < 0.9 THEN 2 -- 已发货
- ELSE 1 -- 未发货
- END,
- CASE WHEN random() < 0.8 THEN NOW() - INTERVAL '1 day' * FLOOR(random() * 10) END,
- CASE WHEN random() < 0.7 THEN NOW() - INTERVAL '1 day' * FLOOR(random() * 8) END,
- CASE WHEN random() < 0.6 THEN NOW() - INTERVAL '1 day' * FLOOR(random() * 5) END,
- '请尽快发货,谢谢!',
- NOW() - INTERVAL '1 day' * FLOOR(random() * 30)
- ) RETURNING id INTO order_id;
-
- -- 为订单添加商品
- FOR product_rec IN
- SELECT
- p.id as product_id,
- s.id as sku_id,
- p.name,
- COALESCE(s.price, p.base_price) as price, -- 使用SKU价格,如果没有则使用基础价格
- COALESCE(s.image_url, p.main_image_url) as image_url -- 使用SKU图片,如果没有则使用主图
- FROM public.ml_products p
- LEFT JOIN public.ml_product_skus s ON p.id = s.product_id
- WHERE p.merchant_id = selected_merchant_id
- AND p.status = 1
- AND (s.id IS NULL OR s.status = 1)
- ORDER BY random()
- LIMIT FLOOR(1 + random() * 3)::INTEGER
- LOOP
- DECLARE
- item_quantity INTEGER;
- item_price DECIMAL;
- BEGIN
- item_quantity := FLOOR(1 + random() * 2)::INTEGER;
- item_price := product_rec.price;
-
- INSERT INTO public.ml_order_items (
- order_id, product_id, sku_id, product_name,
- price, quantity, total_amount, image_url
- ) VALUES (
- order_id, product_rec.product_id, product_rec.sku_id, product_rec.name,
- item_price, item_quantity,
- item_price * item_quantity,
- product_rec.image_url
- );
- END;
- END LOOP;
- END LOOP;
- END LOOP;
-END $$;
-
--- =====================================================================================
--- 13. 商品评价数据
--- =====================================================================================
-
--- 为已完成的订单生成评价
-INSERT INTO public.ml_product_reviews (
- order_id, order_item_id, user_id, product_id, merchant_id,
- rating, content, images, is_anonymous, status, created_at
-)
-SELECT
- o.id,
- oi.id,
- o.user_id,
- oi.product_id,
- o.merchant_id,
- FLOOR(3 + random() * 3)::INTEGER, -- 3-5星评价
- CASE
- WHEN random() < 0.3 THEN '商品质量很好,物流很快,推荐购买!'
- WHEN random() < 0.6 THEN '包装完好,商品和描述一致,满意的购物体验。'
- WHEN random() < 0.8 THEN '性价比不错,会再次购买的。'
- ELSE '商品不错,快递也很快,好评!'
- END,
- CASE
- WHEN random() < 0.3 THEN '["https://picsum.photos/300/300?random=' || FLOOR(random() * 100)::INTEGER || '"]'
- ELSE '[]'
- END::JSONB,
- random() < 0.1, -- 10%匿名评价
- 1, -- 正常状态
- o.delivered_at + INTERVAL '1 day' * FLOOR(random() * 10)
-FROM public.ml_orders o
-JOIN public.ml_order_items oi ON o.id = oi.order_id
-WHERE o.order_status = 4 -- 已完成的订单
- AND o.delivered_at IS NOT NULL
- AND random() < 0.7; -- 70%的概率有评价
-
--- =====================================================================================
--- 14. 用户行为数据
--- =====================================================================================
-
--- 用户收藏数据
-INSERT INTO public.ml_user_favorites (user_id, target_type, target_id)
-SELECT
- customer.user_id,
- 1, -- 商品收藏
- p.id
-FROM temp_user_ids customer
-CROSS JOIN public.ml_products p
-WHERE customer.role LIKE 'customer%'
- AND p.status = 1
- AND random() < 0.2 -- 20%的概率收藏
-ON CONFLICT (user_id, target_type, target_id) DO NOTHING;
-
--- 店铺收藏
-INSERT INTO public.ml_user_favorites (user_id, target_type, target_id)
-SELECT
- customer.user_id,
- 2, -- 店铺收藏
- s.merchant_id
-FROM temp_user_ids customer
-CROSS JOIN public.ml_shops s
-WHERE customer.role LIKE 'customer%'
- AND random() < 0.3 -- 30%的概率收藏店铺
-ON CONFLICT (user_id, target_type, target_id) DO NOTHING;
-
--- 浏览历史数据
-INSERT INTO public.ml_browse_history (user_id, product_id, browse_duration, created_at, updated_at)
-SELECT
- customer.user_id,
- p.id,
- FLOOR(10 + random() * 300)::INTEGER, -- 10-300秒浏览时长
- NOW() - INTERVAL '1 day' * FLOOR(random() * 30), -- 30天内的浏览记录
- NOW() - INTERVAL '1 day' * FLOOR(random() * 30)
-FROM temp_user_ids customer
-CROSS JOIN public.ml_products p
-WHERE customer.role LIKE 'customer%'
- AND p.status = 1
- AND random() < 0.4 -- 40%的概率有浏览记录
-ON CONFLICT (user_id, product_id) DO UPDATE SET
- browse_duration = EXCLUDED.browse_duration,
- updated_at = EXCLUDED.updated_at;
-
--- 搜索历史数据
-INSERT INTO public.ml_search_history (user_id, keyword, result_count, created_at)
-SELECT
- customer.user_id,
- keyword.word,
- FLOOR(1 + random() * 50)::INTEGER, -- 1-50个结果
- NOW() - INTERVAL '1 day' * FLOOR(random() * 30)
-FROM temp_user_ids customer
-CROSS JOIN (VALUES
- ('iPhone'), ('华为手机'), ('笔记本电脑'), ('运动鞋'),
- ('T恤'), ('连衣裙'), ('耳机'), ('充电器'), ('数据线'), ('手机壳')
-) AS keyword(word)
-WHERE customer.role LIKE 'customer%'
- AND random() < 0.3; -- 30%的概率有搜索记录
-
--- =====================================================================================
--- 15. 配送数据
--- =====================================================================================
-
--- 配送员信息
-INSERT INTO public.ml_delivery_drivers (
- user_id, real_name, id_card, driver_license, vehicle_type, vehicle_number,
- service_areas, work_status, current_lat, current_lng, status
-)
-SELECT
- t.user_id,
- CASE
- WHEN t.role = 'driver1' THEN '赵配送'
- WHEN t.role = 'driver2' THEN '钱师傅'
- END,
- CASE
- WHEN t.role = 'driver1' THEN '110101199001011234'
- WHEN t.role = 'driver2' THEN '110101199002022345'
- END,
- CASE
- WHEN t.role = 'driver1' THEN 'D110101199001011234'
- WHEN t.role = 'driver2' THEN 'D110101199002022345'
- END,
- 1, -- 电动车
- CASE
- WHEN t.role = 'driver1' THEN '京A12345'
- WHEN t.role = 'driver2' THEN '京A67890'
- END,
- '["朝阳区", "海淀区", "东城区"]'::JSONB,
- 1, -- 在线
- 39.9042 + (random() - 0.5) * 0.01,
- 116.4074 + (random() - 0.5) * 0.01,
- 1 -- 正常状态
-FROM temp_user_ids t
-WHERE t.role LIKE 'driver%';
-
--- 配送任务(为部分已发货订单创建配送任务)
-INSERT INTO public.ml_delivery_tasks (
- order_id, driver_id, pickup_address, delivery_address,
- distance, estimated_time, delivery_fee, status,
- assigned_at, picked_at, delivered_at, delivery_code
-)
-SELECT DISTINCT ON (o.id) -- 确保每个订单只有一个配送任务
- o.id,
- d.id,
- jsonb_build_object(
- 'name', '商家仓库',
- 'phone', '010-12345678',
- 'address', '北京市朝阳区望京商业中心'
- ),
- o.shipping_address,
- ROUND((5 + random() * 15)::NUMERIC, 2), -- 5-20公里
- FLOOR(20 + random() * 40)::INTEGER, -- 20-60分钟
- CASE
- WHEN (o.shipping_address->>'district') = '朝阳区' THEN 8.00
- ELSE 12.00
- END,
- CASE
- WHEN o.order_status >= 4 THEN 5 -- 已送达
- WHEN o.order_status >= 3 THEN 4 -- 配送中
- WHEN o.shipping_status >= 2 THEN 2 -- 已接单
- ELSE 1 -- 待接单
- END,
- o.shipped_at,
- CASE WHEN o.order_status >= 3 THEN o.shipped_at + INTERVAL '30 minutes' END,
- CASE WHEN o.order_status >= 4 THEN o.delivered_at END,
- LPAD(FLOOR(random() * 10000)::TEXT, 4, '0') -- 4位取货码
-FROM public.ml_orders o
-CROSS JOIN public.ml_delivery_drivers d
-WHERE o.shipping_status >= 2 -- 已发货的订单
- AND random() < 0.8 -- 80%的概率有配送任务
- AND NOT EXISTS ( -- 确保订单尚未有配送任务
- SELECT 1 FROM public.ml_delivery_tasks dt WHERE dt.order_id = o.id
- )
-ORDER BY o.id, random() -- 每个订单随机选择一个配送员
-LIMIT 50; -- 限制配送任务数量,避免过多数据
-
--- =====================================================================================
--- 16. 更新统计数据
--- =====================================================================================
-
--- 更新商品统计数据
-UPDATE public.ml_products SET
- view_count = FLOOR(100 + random() * 9900)::INTEGER,
- sale_count = (
- SELECT COALESCE(SUM(oi.quantity), 0)
- FROM public.ml_order_items oi
- JOIN public.ml_orders o ON oi.order_id = o.id
- WHERE oi.product_id = ml_products.id
- AND o.order_status = 4
- ),
- favorite_count = (
- SELECT COUNT(*)
- FROM public.ml_user_favorites f
- WHERE f.target_type = 1
- AND f.target_id = ml_products.id
- ),
- rating_avg = (
- SELECT COALESCE(AVG(rating), 0)
- FROM public.ml_product_reviews r
- WHERE r.product_id = ml_products.id
- AND r.status = 1
- ),
- rating_count = (
- SELECT COUNT(*)
- FROM public.ml_product_reviews r
- WHERE r.product_id = ml_products.id
- AND r.status = 1
- );
-
--- 更新店铺统计数据
-UPDATE public.ml_shops SET
- product_count = (
- SELECT COUNT(*)
- FROM public.ml_products p
- WHERE p.merchant_id = ml_shops.merchant_id
- AND p.status = 1
- ),
- order_count = (
- SELECT COUNT(*)
- FROM public.ml_orders o
- WHERE o.merchant_id = ml_shops.merchant_id
- AND o.order_status = 4
- ),
- rating_avg = (
- SELECT COALESCE(AVG(r.rating), 0)
- FROM public.ml_product_reviews r
- WHERE r.merchant_id = ml_shops.merchant_id
- AND r.status = 1
- ),
- rating_count = (
- SELECT COUNT(*)
- FROM public.ml_product_reviews r
- WHERE r.merchant_id = ml_shops.merchant_id
- AND r.status = 1
- );
-
--- 更新配送员统计数据
-UPDATE public.ml_delivery_drivers SET
- order_count = (
- SELECT COUNT(*)
- FROM public.ml_delivery_tasks dt
- WHERE dt.driver_id = ml_delivery_drivers.id
- AND dt.status = 5
- ),
- rating_avg = 4.5 + random() * 0.5, -- 4.5-5.0星评价
- rating_count = FLOOR(10 + random() * 90)::INTEGER; -- 10-100个评价
-
--- =====================================================================================
--- 17. 清理临时数据
--- =====================================================================================
-
-DROP TABLE IF EXISTS temp_user_ids;
-
--- =====================================================================================
--- 18. 完成提示
--- =====================================================================================
-
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '商城系统模拟数据插入完成!';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '已创建数据概况:';
- RAISE NOTICE '- 测试用户: 8个 (管理员1个, 商家2个, 消费者3个, 配送员2个)';
- RAISE NOTICE '- 用户地址: 7个';
- RAISE NOTICE '- 商品分类: 多级分类体系';
- RAISE NOTICE '- 品牌: 10个知名品牌';
- RAISE NOTICE '- 店铺: 2个商家店铺';
- RAISE NOTICE '- 商品: 6个商品 + 多规格SKU';
- RAISE NOTICE '- 购物车: 随机购物车数据';
- RAISE NOTICE '- 优惠券: 5个优惠券模板 + 用户优惠券';
- RAISE NOTICE '- 订单: 多个测试订单 + 订单商品';
- RAISE NOTICE '- 商品评价: 基于完成订单的评价';
- RAISE NOTICE '- 用户行为: 收藏、浏览、搜索记录';
- RAISE NOTICE '- 配送数据: 配送员 + 配送任务';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '数据状态: 包含各种业务场景的测试数据';
- RAISE NOTICE '建议: 可根据实际需要调整数据量和内容';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/database/product_database.sql b/doc_mall/database/product_database.sql
deleted file mode 100644
index 5c13e095..00000000
--- a/doc_mall/database/product_database.sql
+++ /dev/null
@@ -1,452 +0,0 @@
--- ===================================================================
--- 电商商城商品管理数据库设计
--- 基于PostgreSQL,兼容现有ak_contents资讯系统
--- ===================================================================
-
--- ===================================================================
--- 1. 商品核心表
--- ===================================================================
-
--- 商品基础信息表
-CREATE TABLE IF NOT EXISTS public.mall_products (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_code VARCHAR(50) UNIQUE NOT NULL, -- 商品编码
- name VARCHAR(500) NOT NULL, -- 商品名称
- subtitle VARCHAR(1000), -- 副标题/卖点
- description TEXT, -- 商品描述
-
- -- 商家信息
- merchant_id UUID NOT NULL REFERENCES public.ak_users(id),
- brand_id UUID REFERENCES public.mall_brands(id),
-
- -- 分类信息
- category_id UUID NOT NULL REFERENCES public.mall_categories(id),
- category_path TEXT[], -- 分类路径,便于查询
-
- -- 基础属性
- weight DECIMAL(10,3), -- 重量(kg)
- dimensions JSONB, -- 尺寸信息 {长,宽,高}
-
- -- 价格信息
- base_price DECIMAL(12,2) NOT NULL, -- 基础价格
- market_price DECIMAL(12,2), -- 市场价
- cost_price DECIMAL(12,2), -- 成本价
-
- -- 库存信息
- stock_quantity INTEGER DEFAULT 0, -- 总库存
- available_quantity INTEGER DEFAULT 0, -- 可用库存
- reserved_quantity INTEGER DEFAULT 0, -- 预留库存
- min_order_quantity INTEGER DEFAULT 1, -- 最小起订量
- max_order_quantity INTEGER, -- 最大限购量
-
- -- 状态信息
- status VARCHAR(20) DEFAULT 'draft', -- 状态:draft/active/inactive/deleted
- is_featured BOOLEAN DEFAULT false, -- 是否精选
- is_new BOOLEAN DEFAULT false, -- 是否新品
- is_hot BOOLEAN DEFAULT false, -- 是否热卖
- is_on_sale BOOLEAN DEFAULT false, -- 是否促销
-
- -- 多媒体
- main_image_url TEXT, -- 主图
- image_urls TEXT[], -- 图片URL数组
- video_urls TEXT[], -- 视频URL数组
-
- -- SEO相关
- seo_title VARCHAR(200), -- SEO标题
- seo_description VARCHAR(500), -- SEO描述
- seo_keywords TEXT[], -- SEO关键词
- slug VARCHAR(200) UNIQUE, -- URL友好标识
-
- -- 销售统计
- view_count INTEGER DEFAULT 0, -- 浏览次数
- sale_count INTEGER DEFAULT 0, -- 销售数量
- favorite_count INTEGER DEFAULT 0, -- 收藏次数
- rating_average DECIMAL(3,2) DEFAULT 0, -- 平均评分
- rating_count INTEGER DEFAULT 0, -- 评分次数
-
- -- 时间信息
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- published_at TIMESTAMP WITH TIME ZONE, -- 上架时间
- sale_start_at TIMESTAMP WITH TIME ZONE, -- 开售时间
- sale_end_at TIMESTAMP WITH TIME ZONE, -- 停售时间
-
- -- 额外信息
- tags TEXT[], -- 标签
- attributes JSONB DEFAULT '{}', -- 自定义属性
- notes TEXT, -- 内部备注
-
- -- 约束
- CONSTRAINT chk_price_positive CHECK (base_price >= 0),
- CONSTRAINT chk_stock_non_negative CHECK (stock_quantity >= 0),
- CONSTRAINT chk_available_stock CHECK (available_quantity >= 0),
- CONSTRAINT chk_reserved_stock CHECK (reserved_quantity >= 0),
- CONSTRAINT chk_rating_range CHECK (rating_average >= 0 AND rating_average <= 5)
-);
-
--- 商品表索引
-CREATE INDEX IF NOT EXISTS idx_mall_products_merchant ON public.mall_products(merchant_id, status);
-CREATE INDEX IF NOT EXISTS idx_mall_products_category ON public.mall_products(category_id, status);
-CREATE INDEX IF NOT EXISTS idx_mall_products_status ON public.mall_products(status, published_at DESC);
-CREATE INDEX IF NOT EXISTS idx_mall_products_featured ON public.mall_products(is_featured, published_at DESC);
-CREATE INDEX IF NOT EXISTS idx_mall_products_price ON public.mall_products(base_price, status);
-CREATE INDEX IF NOT EXISTS idx_mall_products_sale_count ON public.mall_products(sale_count DESC);
-CREATE INDEX IF NOT EXISTS idx_mall_products_rating ON public.mall_products(rating_average DESC, rating_count DESC);
-CREATE INDEX IF NOT EXISTS idx_mall_products_code ON public.mall_products(product_code);
-CREATE INDEX IF NOT EXISTS idx_mall_products_slug ON public.mall_products(slug);
-CREATE INDEX IF NOT EXISTS idx_mall_products_tags ON public.mall_products USING GIN(tags);
-CREATE INDEX IF NOT EXISTS idx_mall_products_category_path ON public.mall_products USING GIN(category_path);
-
-COMMENT ON TABLE public.mall_products IS '商品基础信息表';
-
--- ===================================================================
--- 2. 商品SKU表
--- ===================================================================
-
--- 商品SKU表
-CREATE TABLE IF NOT EXISTS public.mall_product_skus (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.mall_products(id) ON DELETE CASCADE,
- sku_code VARCHAR(100) UNIQUE NOT NULL, -- SKU编码
-
- -- 规格信息
- specification_values JSONB NOT NULL DEFAULT '{}', -- 规格值 {"颜色":"红色","尺寸":"L"}
- specification_text VARCHAR(500), -- 规格描述文本
-
- -- 价格库存
- price DECIMAL(12,2) NOT NULL, -- SKU价格
- cost_price DECIMAL(12,2), -- SKU成本价
- stock_quantity INTEGER DEFAULT 0, -- SKU库存
- available_quantity INTEGER DEFAULT 0, -- SKU可用库存
- reserved_quantity INTEGER DEFAULT 0, -- SKU预留库存
-
- -- SKU属性
- weight DECIMAL(10,3), -- SKU重量
- barcode VARCHAR(50), -- 条形码
- image_url TEXT, -- SKU图片
-
- -- 状态
- is_active BOOLEAN DEFAULT true, -- 是否启用
- is_default BOOLEAN DEFAULT false, -- 是否默认SKU
-
- -- 销售统计
- sale_count INTEGER DEFAULT 0, -- 销售数量
-
- -- 时间
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- -- 约束
- CONSTRAINT chk_sku_price_positive CHECK (price >= 0),
- CONSTRAINT chk_sku_stock_non_negative CHECK (stock_quantity >= 0)
-);
-
--- SKU表索引
-CREATE INDEX IF NOT EXISTS idx_mall_product_skus_product ON public.mall_product_skus(product_id, is_active);
-CREATE INDEX IF NOT EXISTS idx_mall_product_skus_code ON public.mall_product_skus(sku_code);
-CREATE INDEX IF NOT EXISTS idx_mall_product_skus_barcode ON public.mall_product_skus(barcode);
-CREATE INDEX IF NOT EXISTS idx_mall_product_skus_default ON public.mall_product_skus(product_id, is_default);
-CREATE INDEX IF NOT EXISTS idx_mall_product_skus_spec ON public.mall_product_skus USING GIN(specification_values);
-
-COMMENT ON TABLE public.mall_product_skus IS '商品SKU表';
-
--- ===================================================================
--- 3. 商品分类表
--- ===================================================================
-
--- 商品分类表
-CREATE TABLE IF NOT EXISTS public.mall_categories (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- name VARCHAR(200) NOT NULL, -- 分类名称
- slug VARCHAR(200) UNIQUE, -- URL友好标识
- description TEXT, -- 分类描述
-
- -- 层级关系
- parent_id UUID REFERENCES public.mall_categories(id),
- level INTEGER DEFAULT 0, -- 层级:0=顶级
- path TEXT, -- 路径:/1/2/3
- sort_order INTEGER DEFAULT 0, -- 排序
-
- -- 显示信息
- icon_url TEXT, -- 分类图标
- banner_url TEXT, -- 分类横幅
-
- -- 状态
- is_active BOOLEAN DEFAULT true, -- 是否启用
- is_featured BOOLEAN DEFAULT false, -- 是否精选
-
- -- 统计
- product_count INTEGER DEFAULT 0, -- 商品数量
-
- -- SEO
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- seo_keywords TEXT[],
-
- -- 时间
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- -- 自定义属性
- attributes JSONB DEFAULT '{}'
-);
-
--- 分类表索引
-CREATE INDEX IF NOT EXISTS idx_mall_categories_parent ON public.mall_categories(parent_id, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_categories_level ON public.mall_categories(level, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_categories_active ON public.mall_categories(is_active, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_categories_featured ON public.mall_categories(is_featured, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_categories_slug ON public.mall_categories(slug);
-
-COMMENT ON TABLE public.mall_categories IS '商品分类表';
-
--- ===================================================================
--- 4. 商品品牌表
--- ===================================================================
-
--- 商品品牌表
-CREATE TABLE IF NOT EXISTS public.mall_brands (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- name VARCHAR(200) NOT NULL UNIQUE, -- 品牌名称
- english_name VARCHAR(200), -- 英文名称
- slug VARCHAR(200) UNIQUE, -- URL友好标识
- description TEXT, -- 品牌描述
-
- -- 品牌信息
- logo_url TEXT, -- 品牌Logo
- banner_url TEXT, -- 品牌横幅
- website_url TEXT, -- 官网地址
- origin_country VARCHAR(100), -- 品牌原产国
- founded_year INTEGER, -- 创立年份
-
- -- 状态
- is_active BOOLEAN DEFAULT true, -- 是否启用
- is_featured BOOLEAN DEFAULT false, -- 是否精选
-
- -- 统计
- product_count INTEGER DEFAULT 0, -- 商品数量
-
- -- SEO
- seo_title VARCHAR(200),
- seo_description VARCHAR(500),
- seo_keywords TEXT[],
-
- -- 时间
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- -- 排序
- sort_order INTEGER DEFAULT 0
-);
-
--- 品牌表索引
-CREATE INDEX IF NOT EXISTS idx_mall_brands_active ON public.mall_brands(is_active, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_brands_featured ON public.mall_brands(is_featured, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_brands_slug ON public.mall_brands(slug);
-
-COMMENT ON TABLE public.mall_brands IS '商品品牌表';
-
--- ===================================================================
--- 5. 商品规格相关表
--- ===================================================================
-
--- 规格名表(如:颜色、尺寸、款式等)
-CREATE TABLE IF NOT EXISTS public.mall_specifications (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- name VARCHAR(100) NOT NULL, -- 规格名称:颜色、尺寸等
- slug VARCHAR(100) UNIQUE, -- URL友好标识
- type VARCHAR(50) DEFAULT 'select', -- 类型:select/input/color/image
- sort_order INTEGER DEFAULT 0, -- 排序
- is_required BOOLEAN DEFAULT false, -- 是否必选
- is_active BOOLEAN DEFAULT true, -- 是否启用
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
--- 规格值表(如:红色、蓝色、L、XL等)
-CREATE TABLE IF NOT EXISTS public.mall_specification_values (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- specification_id UUID NOT NULL REFERENCES public.mall_specifications(id) ON DELETE CASCADE,
- value VARCHAR(200) NOT NULL, -- 规格值:红色、L等
- color_code VARCHAR(20), -- 颜色代码(仅颜色规格)
- image_url TEXT, -- 规格值图片
- sort_order INTEGER DEFAULT 0, -- 排序
- is_active BOOLEAN DEFAULT true, -- 是否启用
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(specification_id, value)
-);
-
--- 商品规格关联表
-CREATE TABLE IF NOT EXISTS public.mall_product_specifications (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.mall_products(id) ON DELETE CASCADE,
- specification_id UUID NOT NULL REFERENCES public.mall_specifications(id) ON DELETE CASCADE,
- is_required BOOLEAN DEFAULT false, -- 该商品的该规格是否必选
- sort_order INTEGER DEFAULT 0, -- 在该商品中的排序
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(product_id, specification_id)
-);
-
--- 索引
-CREATE INDEX IF NOT EXISTS idx_mall_specifications_active ON public.mall_specifications(is_active, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_specification_values_spec ON public.mall_specification_values(specification_id, is_active, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_product_specifications_product ON public.mall_product_specifications(product_id, sort_order);
-
--- ===================================================================
--- 6. 商品详情相关表
--- ===================================================================
-
--- 商品详情内容表(富文本、图文混排)
-CREATE TABLE IF NOT EXISTS public.mall_product_details (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.mall_products(id) ON DELETE CASCADE,
-
- -- 详情内容
- detail_type VARCHAR(50) DEFAULT 'rich_text', -- 类型:rich_text/markdown/html
- content TEXT, -- 详情内容
- images TEXT[], -- 详情图片
-
- -- 显示控制
- section_title VARCHAR(200), -- 区块标题
- sort_order INTEGER DEFAULT 0, -- 排序
- is_active BOOLEAN DEFAULT true, -- 是否显示
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
-);
-
--- 商品参数表
-CREATE TABLE IF NOT EXISTS public.mall_product_attributes (
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
- product_id UUID NOT NULL REFERENCES public.mall_products(id) ON DELETE CASCADE,
-
- -- 参数信息
- attribute_name VARCHAR(200) NOT NULL, -- 参数名称
- attribute_value TEXT NOT NULL, -- 参数值
- attribute_group VARCHAR(100), -- 参数分组
-
- -- 显示控制
- sort_order INTEGER DEFAULT 0, -- 排序
- is_key_attribute BOOLEAN DEFAULT false, -- 是否关键参数
-
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-
- UNIQUE(product_id, attribute_name)
-);
-
--- 索引
-CREATE INDEX IF NOT EXISTS idx_mall_product_details_product ON public.mall_product_details(product_id, sort_order);
-CREATE INDEX IF NOT EXISTS idx_mall_product_attributes_product ON public.mall_product_attributes(product_id, attribute_group, sort_order);
-
--- ===================================================================
--- 7. 视图和函数
--- ===================================================================
-
--- 商品列表视图(包含完整信息)
-CREATE OR REPLACE VIEW public.vw_mall_products_full AS
-SELECT
- p.*,
- c.name as category_name,
- c.path as category_full_path,
- b.name as brand_name,
- b.logo_url as brand_logo_url,
-
- -- SKU汇总信息
- (SELECT MIN(price) FROM public.mall_product_skus WHERE product_id = p.id AND is_active = true) as min_price,
- (SELECT MAX(price) FROM public.mall_product_skus WHERE product_id = p.id AND is_active = true) as max_price,
- (SELECT SUM(stock_quantity) FROM public.mall_product_skus WHERE product_id = p.id AND is_active = true) as total_stock,
-
- -- 默认SKU信息
- default_sku.id as default_sku_id,
- default_sku.sku_code as default_sku_code,
- default_sku.price as default_price,
- default_sku.stock_quantity as default_stock
-
-FROM public.mall_products p
-LEFT JOIN public.mall_categories c ON p.category_id = c.id
-LEFT JOIN public.mall_brands b ON p.brand_id = b.id
-LEFT JOIN public.mall_product_skus default_sku ON p.id = default_sku.product_id AND default_sku.is_default = true
-WHERE p.status != 'deleted';
-
-COMMENT ON VIEW public.vw_mall_products_full IS '商品完整信息视图';
-
--- ===================================================================
--- 8. 触发器(维护统计数据)
--- ===================================================================
-
--- 更新商品SKU统计的触发器函数
-CREATE OR REPLACE FUNCTION public.update_product_sku_stats()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 更新商品的库存统计
- UPDATE public.mall_products
- SET
- stock_quantity = (
- SELECT COALESCE(SUM(stock_quantity), 0)
- FROM public.mall_product_skus
- WHERE product_id = COALESCE(NEW.product_id, OLD.product_id) AND is_active = true
- ),
- available_quantity = (
- SELECT COALESCE(SUM(available_quantity), 0)
- FROM public.mall_product_skus
- WHERE product_id = COALESCE(NEW.product_id, OLD.product_id) AND is_active = true
- ),
- updated_at = NOW()
- WHERE id = COALESCE(NEW.product_id, OLD.product_id);
-
- RETURN COALESCE(NEW, OLD);
-END;
-$$ LANGUAGE plpgsql;
-
--- 创建触发器
-DO $$
-BEGIN
- DROP TRIGGER IF EXISTS trigger_update_product_sku_stats ON public.mall_product_skus;
- CREATE TRIGGER trigger_update_product_sku_stats
- AFTER INSERT OR UPDATE OR DELETE ON public.mall_product_skus
- FOR EACH ROW EXECUTE FUNCTION public.update_product_sku_stats();
-END
-$$;
-
--- ===================================================================
--- 9. 初始化数据
--- ===================================================================
-
--- 插入基础商品分类
-INSERT INTO public.mall_categories (name, slug, level, sort_order) VALUES
-('服装鞋包', 'fashion', 0, 1),
-('数码家电', 'electronics', 0, 2),
-('食品生鲜', 'food', 0, 3),
-('家居日用', 'home', 0, 4),
-('美妆护肤', 'beauty', 0, 5),
-('运动户外', 'sports', 0, 6),
-('图书文娱', 'books', 0, 7),
-('医药保健', 'health', 0, 8)
-ON CONFLICT (slug) DO NOTHING;
-
--- 插入基础规格
-INSERT INTO public.mall_specifications (name, slug, type, sort_order) VALUES
-('颜色', 'color', 'color', 1),
-('尺寸', 'size', 'select', 2),
-('款式', 'style', 'select', 3),
-('容量', 'capacity', 'select', 4),
-('材质', 'material', 'select', 5)
-ON CONFLICT (slug) DO NOTHING;
-
--- 输出完成信息
-DO $$
-BEGIN
- RAISE NOTICE '商品管理数据库结构创建完成!';
- RAISE NOTICE '已创建以下核心表:';
- RAISE NOTICE '- mall_products: 商品基础信息';
- RAISE NOTICE '- mall_product_skus: 商品SKU';
- RAISE NOTICE '- mall_categories: 商品分类';
- RAISE NOTICE '- mall_brands: 商品品牌';
- RAISE NOTICE '- mall_specifications: 商品规格';
- RAISE NOTICE '可以开始添加商品数据了!';
-END
-$$;
diff --git a/doc_mall/database/quick_role_migration.sql b/doc_mall/database/quick_role_migration.sql
deleted file mode 100644
index 0cc8284a..00000000
--- a/doc_mall/database/quick_role_migration.sql
+++ /dev/null
@@ -1,249 +0,0 @@
--- ====================================================================
--- 角色字段统一说明
--- ====================================================================
--- 注意:角色信息统一存储在 ak_users.role 字段中
--- ml_user_profiles 表不再包含 role 字段,避免数据重复
--- 本脚本主要用于清理可能存在的重复字段和更新相关函数
--- ====================================================================
-
-\echo '检查角色字段统一状态...'
-
-BEGIN;
-
--- ====================================================================
--- 1. 安全检查
--- ====================================================================
-
--- 检查表是否存在
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ml_user_profiles') THEN
- RAISE EXCEPTION '表 ml_user_profiles 不存在,请先运行完整数据库创建脚本';
- END IF;
-END $$;
-
--- 检查是否已经有 role 字段
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'ml_user_profiles' AND column_name = 'role') THEN
- RAISE NOTICE '检测到 role 字段已存在,跳过字段创建';
- ELSE
- RAISE NOTICE '开始添加 role 字段';
- -- 添加 role 字段
- ALTER TABLE public.ml_user_profiles
- ADD COLUMN role TEXT DEFAULT 'customer';
- END IF;
-END $$;
-
--- ====================================================================
--- 2. 数据迁移
--- ====================================================================
-
--- 迁移现有 user_type 数据到 role 字段
-UPDATE public.ml_user_profiles
-SET role = CASE
- WHEN user_type = 1 THEN 'customer' -- 消费者
- WHEN user_type = 2 THEN 'merchant' -- 商家
- WHEN user_type = 3 THEN 'delivery' -- 配送员
- WHEN user_type = 4 THEN 'service' -- 客服
- WHEN user_type = 5 THEN 'admin' -- 管理员
- ELSE 'customer'
-END
-WHERE role = 'customer' OR role IS NULL;
-
--- 设置非空约束
-ALTER TABLE public.ml_user_profiles
-ALTER COLUMN role SET NOT NULL;
-
--- ====================================================================
--- 3. 约束和索引更新
--- ====================================================================
-
--- 添加新的约束
-DO $$
-BEGIN
- IF NOT EXISTS (SELECT 1 FROM information_schema.check_constraints WHERE constraint_name = 'chk_ml_user_role') THEN
- ALTER TABLE public.ml_user_profiles
- ADD CONSTRAINT chk_ml_user_role
- CHECK (role IN ('customer', 'merchant', 'delivery', 'service', 'admin'));
- RAISE NOTICE '已添加 role 字段约束';
- END IF;
-END $$;
-
--- 创建新索引
-DROP INDEX IF EXISTS idx_ml_user_profiles_role;
-CREATE INDEX idx_ml_user_profiles_role ON public.ml_user_profiles(role);
-
--- ====================================================================
--- 4. 同步 ak_users 表的 role 字段
--- ====================================================================
-
--- 同步 ak_users.role 字段
-UPDATE public.ak_users
-SET role = p.role,
- updated_at = CURRENT_TIMESTAMP
-FROM public.ml_user_profiles p
-WHERE ak_users.id = p.user_id
-AND (ak_users.role != p.role OR ak_users.role IS NULL);
-
--- ====================================================================
--- 5. 更新函数和视图
--- ====================================================================
-
--- 更新商家验证函数
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(user_uuid UUID)
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (role = 'merchant' AND verification_status = 1) INTO result
- FROM public.ml_user_profiles
- WHERE user_id = user_uuid;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$;
-
--- 更新用户信息视图
-CREATE OR REPLACE VIEW public.ml_users_view AS
-SELECT
- u.id,
- u.email,
- u.username,
- u.phone,
- u.avatar_url,
- u.status as user_status,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- p.role,
- p.status,
- p.real_name,
- p.credit_score,
- p.verification_status,
- p.created_at as profile_created_at,
- p.updated_at as profile_updated_at,
- CASE
- WHEN p.role = 'customer' THEN '消费者'
- WHEN p.role = 'merchant' THEN '商家'
- WHEN p.role = 'delivery' THEN '配送员'
- WHEN p.role = 'service' THEN '客服'
- WHEN p.role = 'admin' THEN '管理员'
- ELSE '未知'
- END as role_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
--- ====================================================================
--- 6. 更新字段注释
--- ====================================================================
-
-COMMENT ON COLUMN public.ml_user_profiles.role IS '用户角色:customer消费者, merchant商家, delivery配送员, service客服, admin管理员';
-
--- ====================================================================
--- 7. 验证迁移结果
--- ====================================================================
-
-DO $$
-DECLARE
- total_users INTEGER;
- migrated_users INTEGER;
- role_stats RECORD;
-BEGIN
- -- 统计总用户数
- SELECT COUNT(*) INTO total_users FROM public.ml_user_profiles;
-
- -- 统计已迁移用户数
- SELECT COUNT(*) INTO migrated_users
- FROM public.ml_user_profiles
- WHERE role IN ('customer', 'merchant', 'delivery', 'service', 'admin');
-
- RAISE NOTICE '迁移完成:总用户 %, 已迁移 %', total_users, migrated_users;
-
- -- 显示角色分布
- RAISE NOTICE '角色分布统计:';
- FOR role_stats IN
- SELECT role, COUNT(*) as count
- FROM public.ml_user_profiles
- GROUP BY role
- ORDER BY count DESC
- LOOP
- RAISE NOTICE ' %: % 用户', role_stats.role, role_stats.count;
- END LOOP;
-END $$;
-
-COMMIT;
-
-\echo '角色字段迁移完成!'
-
--- ====================================================================
--- 8. 可选:清理旧字段(请谨慎执行)
--- ====================================================================
-
-/*
--- 警告:以下操作将永久删除 user_type 字段,请确保迁移成功后再执行
-
-BEGIN;
-
--- 删除旧约束
-ALTER TABLE public.ml_user_profiles DROP CONSTRAINT IF EXISTS chk_ml_user_type;
-
--- 删除旧索引
-DROP INDEX IF EXISTS idx_ml_user_profiles_type;
-
--- 删除旧字段
-ALTER TABLE public.ml_user_profiles DROP COLUMN IF EXISTS user_type;
-
-COMMIT;
-
-\echo '旧 user_type 字段清理完成';
-*/
-
--- ====================================================================
--- 9. 回滚脚本(如需回滚,请执行以下命令)
--- ====================================================================
-
-/*
--- 回滚到 user_type 字段(仅在必要时执行)
-
-BEGIN;
-
--- 重新添加 user_type 字段
-ALTER TABLE public.ml_user_profiles
-ADD COLUMN user_type INTEGER DEFAULT 1;
-
--- 从 role 字段恢复数据
-UPDATE public.ml_user_profiles
-SET user_type = CASE
- WHEN role = 'customer' THEN 1
- WHEN role = 'merchant' THEN 2
- WHEN role = 'delivery' THEN 3
- WHEN role = 'service' THEN 4
- WHEN role = 'admin' THEN 5
- ELSE 1
-END;
-
--- 设置非空约束
-ALTER TABLE public.ml_user_profiles
-ALTER COLUMN user_type SET NOT NULL;
-
--- 重新添加约束
-ALTER TABLE public.ml_user_profiles
-ADD CONSTRAINT chk_ml_user_type CHECK (user_type IN (1,2,3,4,5));
-
--- 重新创建索引
-CREATE INDEX idx_ml_user_profiles_type ON public.ml_user_profiles(user_type);
-
--- 删除 role 字段
-ALTER TABLE public.ml_user_profiles DROP CONSTRAINT IF EXISTS chk_ml_user_role;
-ALTER TABLE public.ml_user_profiles DROP COLUMN IF EXISTS role;
-
-COMMIT;
-
-\echo '已回滚到 user_type 字段';
-*/
diff --git a/doc_mall/database/role_field_cleanup.sql b/doc_mall/database/role_field_cleanup.sql
deleted file mode 100644
index 6af83afb..00000000
--- a/doc_mall/database/role_field_cleanup.sql
+++ /dev/null
@@ -1,207 +0,0 @@
--- ====================================================================
--- 角色字段清理脚本 - Role Field Cleanup
--- ====================================================================
--- 目的:确保角色信息只存储在 ak_users.role 字段中
--- 清理 ml_user_profiles 表中可能存在的重复 role 字段
--- 兼容性:Supabase + PostgreSQL 14+
--- ====================================================================
-
-\echo '开始角色字段清理...'
-
-BEGIN;
-
--- ====================================================================
--- 1. 检查并清理 ml_user_profiles 中的 role 字段
--- ====================================================================
-
--- 检查是否存在重复的 role 字段
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.columns
- WHERE table_name = 'ml_user_profiles'
- AND column_name = 'role') THEN
-
- RAISE NOTICE '发现 ml_user_profiles 表中存在 role 字段,开始清理...';
-
- -- 如果 ak_users.role 字段为空,从 ml_user_profiles.role 迁移数据
- UPDATE public.ak_users
- SET role = COALESCE(ak_users.role, p.role),
- updated_at = CURRENT_TIMESTAMP
- FROM public.ml_user_profiles p
- WHERE ak_users.id = p.user_id
- AND (ak_users.role IS NULL OR ak_users.role = '');
-
- -- 删除相关约束
- ALTER TABLE public.ml_user_profiles DROP CONSTRAINT IF EXISTS chk_ml_user_role;
-
- -- 删除相关索引
- DROP INDEX IF EXISTS idx_ml_user_profiles_role;
-
- -- 删除 role 字段
- ALTER TABLE public.ml_user_profiles DROP COLUMN IF EXISTS role;
-
- RAISE NOTICE '已删除 ml_user_profiles 表中的 role 字段';
- ELSE
- RAISE NOTICE 'ml_user_profiles 表中不存在 role 字段,无需清理';
- END IF;
-END $$;
-
--- ====================================================================
--- 2. 更新相关函数
--- ====================================================================
-
--- 更新商家验证函数
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(user_uuid UUID)
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (u.role = 'merchant' AND p.verification_status = 1) INTO result
- FROM public.ml_user_profiles p
- JOIN public.ak_users u ON p.user_id = u.id
- WHERE p.user_id = user_uuid;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$;
-
--- 获取用户角色函数
-CREATE OR REPLACE FUNCTION public.get_user_role(user_uuid UUID)
-RETURNS TEXT
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- user_role TEXT;
-BEGIN
- SELECT role INTO user_role
- FROM public.ak_users
- WHERE id = user_uuid;
-
- RETURN COALESCE(user_role, 'customer');
-END;
-$$;
-
--- 检查用户权限函数
-CREATE OR REPLACE FUNCTION public.check_user_permission(user_uuid UUID, required_roles TEXT[])
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- user_role TEXT;
-BEGIN
- SELECT role INTO user_role
- FROM public.ak_users
- WHERE id = user_uuid;
-
- RETURN user_role = ANY(required_roles);
-END;
-$$;
-
--- ====================================================================
--- 3. 更新视图
--- ====================================================================
-
--- 更新用户信息视图
-CREATE OR REPLACE VIEW public.ml_users_view AS
-SELECT
- u.id,
- u.email,
- u.username,
- u.phone,
- u.avatar_url,
- u.status as user_status,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- u.role,
- p.status,
- p.real_name,
- p.credit_score,
- p.verification_status,
- p.created_at as profile_created_at,
- p.updated_at as profile_updated_at,
- CASE
- WHEN u.role = 'customer' THEN '消费者'
- WHEN u.role = 'merchant' THEN '商家'
- WHEN u.role = 'delivery' THEN '配送员'
- WHEN u.role = 'service' THEN '客服'
- WHEN u.role = 'admin' THEN '管理员'
- ELSE '未知'
- END as role_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
--- 创建角色统计视图
-CREATE OR REPLACE VIEW public.vw_role_statistics AS
-SELECT
- role,
- COUNT(*) as user_count,
- COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() as percentage
-FROM public.ak_users
-WHERE role IS NOT NULL
-GROUP BY role
-ORDER BY user_count DESC;
-
--- ====================================================================
--- 4. 确保数据一致性
--- ====================================================================
-
--- 确保所有用户都有角色
-UPDATE public.ak_users
-SET role = 'customer'
-WHERE role IS NULL OR role = '';
-
--- 确保角色字段有约束
-DO $$
-BEGIN
- -- 检查约束是否存在
- IF NOT EXISTS (SELECT 1 FROM information_schema.check_constraints
- WHERE constraint_name = 'chk_ak_users_role') THEN
- ALTER TABLE public.ak_users
- ADD CONSTRAINT chk_ak_users_role
- CHECK (role IN ('customer', 'merchant', 'delivery', 'service', 'admin'));
- RAISE NOTICE '已添加 ak_users.role 字段约束';
- END IF;
-END $$;
-
--- 创建角色字段索引(如果不存在)
-CREATE INDEX IF NOT EXISTS idx_ak_users_role ON public.ak_users(role);
-
-COMMIT;
-
-\echo '角色字段清理完成!'
-
--- ====================================================================
--- 验证结果
--- ====================================================================
-
--- 检查角色分布
-SELECT '角色分布统计:' as info;
-SELECT * FROM public.vw_role_statistics;
-
--- 检查是否还有重复字段
-SELECT '字段检查:' as info;
-SELECT
- CASE
- WHEN EXISTS (SELECT 1 FROM information_schema.columns
- WHERE table_name = 'ml_user_profiles'
- AND column_name = 'role')
- THEN '❌ ml_user_profiles.role 字段仍然存在'
- ELSE '✅ ml_user_profiles.role 字段已清理'
- END as ml_user_profiles_check,
- CASE
- WHEN EXISTS (SELECT 1 FROM information_schema.columns
- WHERE table_name = 'ak_users'
- AND column_name = 'role')
- THEN '✅ ak_users.role 字段存在'
- ELSE '❌ ak_users.role 字段不存在'
- END as ak_users_check;
-
-SELECT '角色字段统一完成!角色信息统一存储在 ak_users.role 字段中。' as result;
diff --git a/doc_mall/database/role_field_unification.sql b/doc_mall/database/role_field_unification.sql
deleted file mode 100644
index fd2115a2..00000000
--- a/doc_mall/database/role_field_unification.sql
+++ /dev/null
@@ -1,287 +0,0 @@
--- ====================================================================
--- 角色字段统一升级脚本 - Role Field Unification Upgrade
--- ====================================================================
--- 目的:将所有表的 user_type (INTEGER) 字段统一为 role (TEXT) 字段
--- 兼容性:Supabase + PostgreSQL 14+
--- 执行顺序:在现有数据库基础上执行
--- ====================================================================
-
-BEGIN;
-
--- ====================================================================
--- 1. 统一 ml_user_profiles 表的角色字段
--- ====================================================================
-
--- 1.1 添加新的 role 字段
-ALTER TABLE public.ml_user_profiles
-ADD COLUMN IF NOT EXISTS role TEXT DEFAULT 'customer';
-
--- 1.2 将现有 user_type 数据迁移到 role 字段
-UPDATE public.ml_user_profiles
-SET role = CASE
- WHEN user_type = 1 THEN 'customer' -- 消费者
- WHEN user_type = 2 THEN 'merchant' -- 商家
- WHEN user_type = 3 THEN 'delivery' -- 配送员
- WHEN user_type = 4 THEN 'service' -- 客服
- WHEN user_type = 5 THEN 'admin' -- 管理员
- ELSE 'customer'
-END
-WHERE role IS NULL OR role = 'customer';
-
--- 1.3 设置 role 字段约束
-ALTER TABLE public.ml_user_profiles
-ALTER COLUMN role SET NOT NULL;
-
-ALTER TABLE public.ml_user_profiles
-ADD CONSTRAINT IF NOT EXISTS chk_ml_user_role
-CHECK (role IN ('customer', 'merchant', 'delivery', 'service', 'admin'));
-
--- 1.4 更新索引
-DROP INDEX IF EXISTS idx_ml_user_profiles_type;
-CREATE INDEX IF NOT EXISTS idx_ml_user_profiles_role ON public.ml_user_profiles(role);
-
--- 1.5 删除旧的 user_type 字段和约束(可选,建议在测试确认后执行)
--- ALTER TABLE public.ml_user_profiles DROP CONSTRAINT IF EXISTS chk_ml_user_type;
--- ALTER TABLE public.ml_user_profiles DROP COLUMN IF EXISTS user_type;
-
--- ====================================================================
--- 2. 更新相关函数中的字段引用
--- ====================================================================
-
--- 2.1 更新商家验证函数
-CREATE OR REPLACE FUNCTION public.is_verified_merchant(user_uuid UUID)
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- result BOOLEAN := FALSE;
-BEGIN
- SELECT (role = 'merchant' AND verification_status = 1) INTO result
- FROM public.ml_user_profiles
- WHERE user_id = user_uuid;
-
- RETURN COALESCE(result, FALSE);
-END;
-$$;
-
--- 2.2 更新用户信息视图
-CREATE OR REPLACE VIEW public.vw_user_info AS
-SELECT
- u.id as user_id,
- u.email,
- u.username,
- u.role as user_role,
- u.status as user_status,
- u.created_at as user_created_at,
- p.cid as profile_cid,
- p.role as profile_role,
- p.status as profile_status,
- p.real_name,
- p.avatar_url,
- p.phone,
- p.credit_score,
- p.verification_status,
- p.created_at as profile_created_at,
- CASE
- WHEN p.role = 'customer' THEN '消费者'
- WHEN p.role = 'merchant' THEN '商家'
- WHEN p.role = 'delivery' THEN '配送员'
- WHEN p.role = 'service' THEN '客服'
- WHEN p.role = 'admin' THEN '管理员'
- ELSE '未知'
- END as role_name
-FROM public.ak_users u
-LEFT JOIN public.ml_user_profiles p ON u.id = p.user_id;
-
--- ====================================================================
--- 3. 更新 RLS 策略中的角色检查
--- ====================================================================
-
--- 3.1 更新商品相关策略
-DROP POLICY IF EXISTS "商家管理自己的商品" ON public.ml_products;
-CREATE POLICY "商家管理自己的商品"
-ON public.ml_products
-FOR ALL
-TO authenticated
-USING (
- merchant_id = auth.uid()
- OR EXISTS (
- SELECT 1 FROM public.ml_user_profiles p
- WHERE p.user_id = auth.uid()
- AND p.role IN ('admin', 'service')
- )
-);
-
--- 3.2 更新订单相关策略
-DROP POLICY IF EXISTS "配送员查看分配的订单" ON public.ml_orders;
-CREATE POLICY "配送员查看分配的订单"
-ON public.ml_orders
-FOR SELECT
-TO authenticated
-USING (
- delivery_id = auth.uid()
- OR EXISTS (
- SELECT 1 FROM public.ml_user_profiles p
- WHERE p.user_id = auth.uid()
- AND p.role IN ('admin', 'service')
- )
-);
-
--- 3.3 更新用户资料策略
-DROP POLICY IF EXISTS "用户管理自己的资料" ON public.ml_user_profiles;
-CREATE POLICY "用户管理自己的资料"
-ON public.ml_user_profiles
-FOR ALL
-TO authenticated
-USING (
- user_id = auth.uid()
- OR EXISTS (
- SELECT 1 FROM public.ml_user_profiles p
- WHERE p.user_id = auth.uid()
- AND p.role IN ('admin', 'service')
- )
-);
-
--- ====================================================================
--- 4. 更新字段注释
--- ====================================================================
-
-COMMENT ON COLUMN public.ml_user_profiles.role IS '用户角色:customer消费者, merchant商家, delivery配送员, service客服, admin管理员';
-
--- ====================================================================
--- 5. 创建角色辅助函数
--- ====================================================================
-
--- 5.1 获取用户角色函数
-CREATE OR REPLACE FUNCTION public.get_user_role(user_uuid UUID)
-RETURNS TEXT
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- user_role TEXT;
-BEGIN
- SELECT role INTO user_role
- FROM public.ml_user_profiles
- WHERE user_id = user_uuid;
-
- RETURN COALESCE(user_role, 'customer');
-END;
-$$;
-
--- 5.2 检查用户权限函数
-CREATE OR REPLACE FUNCTION public.check_user_permission(user_uuid UUID, required_roles TEXT[])
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-DECLARE
- user_role TEXT;
-BEGIN
- SELECT role INTO user_role
- FROM public.ml_user_profiles
- WHERE user_id = user_uuid;
-
- RETURN user_role = ANY(required_roles);
-END;
-$$;
-
--- 5.3 角色升级函数(将用户提升为商家等)
-CREATE OR REPLACE FUNCTION public.upgrade_user_role(user_uuid UUID, new_role TEXT)
-RETURNS BOOLEAN
-LANGUAGE plpgsql
-SECURITY DEFINER
-AS $$
-BEGIN
- -- 检查新角色是否有效
- IF new_role NOT IN ('customer', 'merchant', 'delivery', 'service', 'admin') THEN
- RAISE EXCEPTION '无效的角色类型: %', new_role;
- END IF;
-
- -- 更新用户角色
- UPDATE public.ml_user_profiles
- SET role = new_role,
- updated_at = CURRENT_TIMESTAMP
- WHERE user_id = user_uuid;
-
- -- 同步更新 ak_users 表的 role 字段
- UPDATE public.ak_users
- SET role = new_role,
- updated_at = CURRENT_TIMESTAMP
- WHERE id = user_uuid;
-
- RETURN FOUND;
-END;
-$$;
-
--- ====================================================================
--- 6. 数据一致性检查
--- ====================================================================
-
--- 6.1 检查角色字段一致性
-DO $$
-DECLARE
- inconsistent_count INTEGER;
-BEGIN
- SELECT COUNT(*) INTO inconsistent_count
- FROM public.ak_users u
- JOIN public.ml_user_profiles p ON u.id = p.user_id
- WHERE u.role != p.role;
-
- IF inconsistent_count > 0 THEN
- RAISE NOTICE '发现 % 条记录的角色字段不一致,正在同步...', inconsistent_count;
-
- -- 以 ml_user_profiles.role 为准同步到 ak_users.role
- UPDATE public.ak_users
- SET role = p.role,
- updated_at = CURRENT_TIMESTAMP
- FROM public.ml_user_profiles p
- WHERE ak_users.id = p.user_id
- AND ak_users.role != p.role;
-
- RAISE NOTICE '角色字段同步完成';
- ELSE
- RAISE NOTICE '角色字段一致性检查通过';
- END IF;
-END;
-$$;
-
--- ====================================================================
--- 7. 创建角色统计视图
--- ====================================================================
-
-CREATE OR REPLACE VIEW public.vw_role_statistics AS
-SELECT
- role,
- COUNT(*) as user_count,
- COUNT(*) * 100.0 / SUM(COUNT(*)) OVER() as percentage
-FROM public.ml_user_profiles
-GROUP BY role
-ORDER BY user_count DESC;
-
-COMMIT;
-
--- ====================================================================
--- 执行验证
--- ====================================================================
-
--- 检查角色分布
-SELECT '角色分布统计:' as info;
-SELECT * FROM public.vw_role_statistics;
-
--- 检查索引
-SELECT '索引检查:' as info;
-SELECT indexname, indexdef
-FROM pg_indexes
-WHERE tablename = 'ml_user_profiles'
-AND indexname LIKE '%role%';
-
--- 检查约束
-SELECT '约束检查:' as info;
-SELECT conname, pg_get_constraintdef(oid) as definition
-FROM pg_constraint
-WHERE conrelid = 'public.ml_user_profiles'::regclass
-AND conname LIKE '%role%';
-
-SELECT '角色字段统一升级完成!' as result;
diff --git a/doc_mall/database/user_compatibility_implementation.sql b/doc_mall/database/user_compatibility_implementation.sql
deleted file mode 100644
index 688b7c7c..00000000
--- a/doc_mall/database/user_compatibility_implementation.sql
+++ /dev/null
@@ -1,273 +0,0 @@
--- 商城系统用户兼容性实施方案
--- 基于混合方案:复用 ak_users 主表 + 商城扩展表
-
--- 1. 商城用户扩展表
-CREATE TABLE public.mall_user_profiles (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id uuid UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
- user_type INTEGER DEFAULT 1, -- 1:消费者 2:商家 3:配送员 4:客服 5:管理员
- status INTEGER DEFAULT 1, -- 1:正常 2:冻结 3:注销 4:待审核
- real_name VARCHAR(64), -- 真实姓名(商家认证、配送员必填)
- id_card VARCHAR(32), -- 身份证号(商家认证、配送员必填)
- credit_score INTEGER DEFAULT 100, -- 信用分数 0-1000
- mall_role VARCHAR(32) DEFAULT 'consumer', -- 商城角色标识
- verification_status INTEGER DEFAULT 0, -- 认证状态 0:未认证 1:已认证 2:认证失败
- verification_data JSONB, -- 认证相关数据
- business_license VARCHAR(128), -- 营业执照号(商家)
- shop_category VARCHAR(64), -- 店铺类别(商家)
- service_areas JSONB, -- 服务区域(配送员)
- emergency_contact VARCHAR(128), -- 紧急联系人(配送员)
- preferences JSONB, -- 用户偏好设置
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
-);
-
-COMMENT ON TABLE public.mall_user_profiles IS '商城用户扩展信息表';
-COMMENT ON COLUMN public.mall_user_profiles.user_id IS '关联ak_users表的用户ID';
-COMMENT ON COLUMN public.mall_user_profiles.user_type IS '用户类型:1消费者 2商家 3配送员 4客服 5管理员';
-COMMENT ON COLUMN public.mall_user_profiles.status IS '用户状态:1正常 2冻结 3注销 4待审核';
-COMMENT ON COLUMN public.mall_user_profiles.credit_score IS '信用分数,影响交易权限';
-COMMENT ON COLUMN public.mall_user_profiles.verification_status IS '认证状态:0未认证 1已认证 2认证失败';
-
--- 创建索引
-CREATE INDEX idx_mall_user_profiles_user_id ON public.mall_user_profiles(user_id);
-CREATE INDEX idx_mall_user_profiles_user_type ON public.mall_user_profiles(user_type);
-CREATE INDEX idx_mall_user_profiles_status ON public.mall_user_profiles(status);
-CREATE INDEX idx_mall_user_profiles_mall_role ON public.mall_user_profiles(mall_role);
-
--- 2. 用户地址表
-CREATE TABLE public.ak_user_addresses (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE,
- receiver_name VARCHAR(64) NOT NULL, -- 收货人姓名
- receiver_phone VARCHAR(32) NOT NULL, -- 收货人手机
- province VARCHAR(64) NOT NULL, -- 省份
- city VARCHAR(64) NOT NULL, -- 城市
- district VARCHAR(64) NOT NULL, -- 区县
- address_detail TEXT NOT NULL, -- 详细地址
- postal_code VARCHAR(16), -- 邮编
- is_default BOOLEAN DEFAULT false, -- 是否默认地址
- label VARCHAR(32), -- 地址标签:home/office/school/other
- coordinates POINT, -- 经纬度坐标,用于配送距离计算
- delivery_instructions TEXT, -- 配送说明
- business_hours VARCHAR(128), -- 可配送时间(如:9:00-18:00)
- status INTEGER DEFAULT 1, -- 地址状态:1正常 2禁用
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
-);
-
-COMMENT ON TABLE public.ak_user_addresses IS '用户地址表';
-COMMENT ON COLUMN public.ak_user_addresses.coordinates IS '经纬度坐标,格式:POINT(longitude latitude)';
-COMMENT ON COLUMN public.ak_user_addresses.label IS '地址标签:home家 office公司 school学校 other其他';
-
--- 创建索引
-CREATE INDEX idx_user_addresses_user_id ON public.ak_user_addresses(user_id);
-CREATE INDEX idx_user_addresses_city ON public.ak_user_addresses(city);
-CREATE INDEX idx_user_addresses_district ON public.ak_user_addresses(district);
-CREATE INDEX idx_user_addresses_is_default ON public.ak_user_addresses(is_default);
-
--- 创建地理位置索引(用于附近配送查询)
-CREATE INDEX idx_user_addresses_coordinates ON public.ak_user_addresses USING GIST(coordinates);
-
--- 3. 用户收藏表
-CREATE TABLE public.mall_user_favorites (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE,
- target_type VARCHAR(32) NOT NULL, -- 收藏类型:product/shop
- target_id uuid NOT NULL, -- 目标ID
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
-);
-
-COMMENT ON TABLE public.mall_user_favorites IS '用户收藏表';
-COMMENT ON COLUMN public.mall_user_favorites.target_type IS '收藏类型:product商品 shop店铺';
-
--- 创建索引和唯一约束
-CREATE INDEX idx_mall_user_favorites_user_id ON public.mall_user_favorites(user_id);
-CREATE INDEX idx_mall_user_favorites_target ON public.mall_user_favorites(target_type, target_id);
-CREATE UNIQUE INDEX idx_mall_user_favorites_unique ON public.mall_user_favorites(user_id, target_type, target_id);
-
--- 4. 用户搜索历史表
-CREATE TABLE public.mall_user_search_history (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE,
- keyword VARCHAR(256) NOT NULL, -- 搜索关键词
- search_count INTEGER DEFAULT 1, -- 搜索次数
- last_search_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
-);
-
-COMMENT ON TABLE public.mall_user_search_history IS '用户搜索历史表';
-
--- 创建索引
-CREATE INDEX idx_mall_search_history_user_id ON public.mall_user_search_history(user_id);
-CREATE INDEX idx_mall_search_history_keyword ON public.mall_user_search_history(keyword);
-CREATE UNIQUE INDEX idx_mall_search_history_unique ON public.mall_user_search_history(user_id, keyword);
-
--- 5. 用户浏览历史表
-CREATE TABLE public.mall_user_browse_history (
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
- user_id uuid REFERENCES public.ak_users(id) ON DELETE CASCADE,
- product_id uuid NOT NULL, -- 浏览的商品ID
- browse_count INTEGER DEFAULT 1, -- 浏览次数
- browse_duration INTEGER DEFAULT 0, -- 浏览时长(秒)
- last_browse_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now()
-);
-
-COMMENT ON TABLE public.mall_user_browse_history IS '用户浏览历史表';
-
--- 创建索引
-CREATE INDEX idx_mall_browse_history_user_id ON public.mall_user_browse_history(user_id);
-CREATE INDEX idx_mall_browse_history_product_id ON public.mall_user_browse_history(product_id);
-CREATE INDEX idx_mall_browse_history_last_browse ON public.mall_user_browse_history(last_browse_at);
-CREATE UNIQUE INDEX idx_mall_browse_history_unique ON public.mall_user_browse_history(user_id, product_id);
-
--- 6. 触发器:确保每个用户只有一个默认地址
-CREATE OR REPLACE FUNCTION ensure_single_default_address()
-RETURNS TRIGGER AS $$
-BEGIN
- -- 如果新插入/更新的地址设为默认
- IF NEW.is_default = true THEN
- -- 将该用户的其他地址的默认状态设为false
- UPDATE public.ak_user_addresses
- SET is_default = false
- WHERE user_id = NEW.user_id AND id != NEW.id;
- END IF;
-
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 创建触发器
-CREATE TRIGGER trigger_ensure_single_default_address
- BEFORE INSERT OR UPDATE ON public.ak_user_addresses
- FOR EACH ROW
- EXECUTE FUNCTION ensure_single_default_address();
-
--- 7. 触发器:自动更新 updated_at 字段
-CREATE OR REPLACE FUNCTION update_updated_at_column()
-RETURNS TRIGGER AS $$
-BEGIN
- NEW.updated_at = now();
- RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
--- 为相关表创建更新时间触发器
-CREATE TRIGGER trigger_mall_user_profiles_updated_at
- BEFORE UPDATE ON public.mall_user_profiles
- FOR EACH ROW
- EXECUTE FUNCTION update_updated_at_column();
-
-CREATE TRIGGER trigger_user_addresses_updated_at
- BEFORE UPDATE ON public.ak_user_addresses
- FOR EACH ROW
- EXECUTE FUNCTION update_updated_at_column();
-
--- 8. 数据迁移:为现有 ak_users 用户创建默认商城档案
-INSERT INTO public.mall_user_profiles (user_id, user_type, status, mall_role)
-SELECT
- id,
- 1, -- 默认为消费者
- 1, -- 默认状态正常
- 'consumer' -- 默认角色消费者
-FROM public.ak_users
-WHERE id NOT IN (SELECT user_id FROM public.mall_user_profiles WHERE user_id IS NOT NULL);
-
--- 9. 创建视图:商城用户完整信息视图
-CREATE VIEW public.mall_users_view AS
-SELECT
- u.id,
- u.username,
- u.email,
- u.phone,
- u.avatar_url,
- u.gender,
- u.birthday,
- u.bio,
- u.created_at as user_created_at,
- u.updated_at as user_updated_at,
- mp.user_type,
- mp.status,
- mp.real_name,
- mp.credit_score,
- mp.mall_role,
- mp.verification_status,
- mp.created_at as profile_created_at,
- mp.updated_at as profile_updated_at
-FROM public.ak_users u
-INNER JOIN public.mall_user_profiles mp ON u.id = mp.user_id;
-
-COMMENT ON VIEW public.mall_users_view IS '商城用户完整信息视图';
-
--- 10. 权限设置(根据实际需要调整)
--- 创建商城相关的RLS策略
-ALTER TABLE public.mall_user_profiles ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.ak_user_addresses ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.mall_user_favorites ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.mall_user_search_history ENABLE ROW LEVEL SECURITY;
-ALTER TABLE public.mall_user_browse_history ENABLE ROW LEVEL SECURITY;
-
--- 用户只能访问自己的数据
-CREATE POLICY mall_user_profiles_policy ON public.mall_user_profiles
- FOR ALL USING (auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id));
-
-CREATE POLICY user_addresses_policy ON public.ak_user_addresses
- FOR ALL USING (auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id));
-
-CREATE POLICY mall_user_favorites_policy ON public.mall_user_favorites
- FOR ALL USING (auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id));
-
-CREATE POLICY mall_user_search_history_policy ON public.mall_user_search_history
- FOR ALL USING (auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id));
-
-CREATE POLICY mall_user_browse_history_policy ON public.mall_user_browse_history
- FOR ALL USING (auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id));
-
--- 11. 示例查询函数
--- 获取用户默认地址
-CREATE OR REPLACE FUNCTION get_user_default_address(p_user_id uuid)
-RETURNS TABLE (
- id uuid,
- receiver_name varchar,
- receiver_phone varchar,
- full_address text,
- coordinates point
-) AS $$
-BEGIN
- RETURN QUERY
- SELECT
- a.id,
- a.receiver_name,
- a.receiver_phone,
- (a.province || a.city || a.district || a.address_detail) as full_address,
- a.coordinates
- FROM public.ak_user_addresses a
- WHERE a.user_id = p_user_id AND a.is_default = true AND a.status = 1
- LIMIT 1;
-END;
-$$ LANGUAGE plpgsql;
-
--- 检查用户是否为商城认证商家
-CREATE OR REPLACE FUNCTION is_verified_merchant(p_user_id uuid)
-RETURNS boolean AS $$
-DECLARE
- result boolean := false;
-BEGIN
- SELECT (user_type = 2 AND verification_status = 1) INTO result
- FROM public.mall_user_profiles
- WHERE user_id = p_user_id;
-
- RETURN COALESCE(result, false);
-END;
-$$ LANGUAGE plpgsql;
-
--- 12. 完成提示
-DO $$
-BEGIN
- RAISE NOTICE '商城用户兼容性方案部署完成!';
- RAISE NOTICE '已创建表:mall_user_profiles, ak_user_addresses, mall_user_favorites, mall_user_search_history, mall_user_browse_history';
- RAISE NOTICE '已创建视图:mall_users_view';
- RAISE NOTICE '已设置触发器和RLS策略';
- RAISE NOTICE '已为现有用户创建默认商城档案';
-END $$;
diff --git a/doc_mall/database/validation_test.sql b/doc_mall/database/validation_test.sql
deleted file mode 100644
index d9681f59..00000000
--- a/doc_mall/database/validation_test.sql
+++ /dev/null
@@ -1,113 +0,0 @@
--- 商城数据库脚本验证测试
--- 这个脚本用于验证数据库创建和模拟数据插入是否正常工作
-
--- 1. 检查必要的扩展是否可用
-DO $$
-BEGIN
- -- 检查 uuid-ossp 扩展
- IF NOT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'uuid-ossp') THEN
- RAISE NOTICE 'uuid-ossp 扩展未安装,请先执行: CREATE EXTENSION IF NOT EXISTS "uuid-ossp";';
- ELSE
- RAISE NOTICE 'uuid-ossp 扩展已安装 ✓';
- END IF;
-
- -- 检查 pgcrypto 扩展
- IF NOT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'pgcrypto') THEN
- RAISE NOTICE 'pgcrypto 扩展未安装,请先执行: CREATE EXTENSION IF NOT EXISTS "pgcrypto";';
- ELSE
- RAISE NOTICE 'pgcrypto 扩展已安装 ✓';
- END IF;
-END $$;
-
--- 2. 检查 ak_users 表是否存在
-DO $$
-BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'ak_users') THEN
- RAISE NOTICE 'ak_users 表已存在 ✓';
-
- -- 检查 ak_users 表结构
- IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'auth_id' AND data_type = 'uuid') THEN
- RAISE NOTICE 'ak_users.auth_id 字段类型正确 (uuid) ✓';
- ELSE
- RAISE NOTICE 'ak_users.auth_id 字段类型可能不正确,应为 uuid 类型';
- END IF;
- ELSE
- RAISE NOTICE 'ak_users 表不存在,需要先创建或从现有系统迁移';
- END IF;
-END $$;
-
--- 3. 语法验证 - 测试典型的 RLS 策略语法
-DO $$
-BEGIN
- RAISE NOTICE '开始验证 RLS 策略语法...';
-
- -- 测试 UUID 比较语法
- BEGIN
- -- 这个查询应该能正常解析
- PERFORM 1 WHERE '00000000-0000-0000-0000-000000000000'::uuid = '00000000-0000-0000-0000-000000000000'::uuid;
- RAISE NOTICE 'UUID 比较语法正确 ✓';
- EXCEPTION WHEN OTHERS THEN
- RAISE NOTICE 'UUID 比较语法错误: %', SQLERRM;
- END;
-
- RAISE NOTICE 'RLS 策略语法验证完成 ✓';
-END $$;
-
--- 4. 检查商城表是否已存在
-DO $$
-DECLARE
- table_count INTEGER;
- mall_tables TEXT[] := ARRAY[
- 'ml_user_profiles', 'ml_user_addresses', 'ml_shopping_cart',
- 'ml_merchants', 'ml_categories', 'ml_products', 'ml_product_images',
- 'ml_product_variants', 'ml_inventory', 'ml_orders', 'ml_order_items',
- 'ml_reviews', 'ml_user_behavior', 'ml_promotions', 'ml_coupons',
- 'ml_user_coupons', 'ml_delivery_info', 'ml_system_config'
- ];
- tbl TEXT;
-BEGIN
- table_count := 0;
-
- FOREACH tbl IN ARRAY mall_tables
- LOOP
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = tbl) THEN
- table_count := table_count + 1;
- END IF;
- END LOOP;
-
- RAISE NOTICE '商城表检查: %/% 个表已存在', table_count, array_length(mall_tables, 1);
-
- IF table_count = 0 THEN
- RAISE NOTICE '商城表尚未创建,可以执行 complete_mall_database.sql';
- ELSIF table_count = array_length(mall_tables, 1) THEN
- RAISE NOTICE '所有商城表已存在 ✓';
- ELSE
- RAISE NOTICE '部分商城表已存在,建议检查现有表结构';
- END IF;
-END $$;
-
--- 5. 模拟数据检查
-DO $$
-DECLARE
- user_count INTEGER;
- profile_count INTEGER;
- product_count INTEGER;
-BEGIN
- -- 检查用户数据
- SELECT COUNT(*) INTO user_count FROM public.ak_users WHERE username IN ('admin', 'merchant1', 'merchant2', 'customer1', 'customer2', 'customer3', 'driver1', 'driver2');
- RAISE NOTICE '测试用户数量: %', user_count;
-
- -- 检查商城相关数据(如果表存在)
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'ml_user_profiles') THEN
- SELECT COUNT(*) INTO profile_count FROM public.ml_user_profiles;
- RAISE NOTICE '用户档案数量: %', profile_count;
- END IF;
-
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'ml_products') THEN
- SELECT COUNT(*) INTO product_count FROM public.ml_products;
- RAISE NOTICE '商品数量: %', product_count;
- END IF;
-END $$;
-
--- 验证完成
-SELECT '数据库验证测试完成' AS status;
diff --git a/doc_mall/database/verify_mock_data_fix.sql b/doc_mall/database/verify_mock_data_fix.sql
deleted file mode 100644
index fdfb11e8..00000000
--- a/doc_mall/database/verify_mock_data_fix.sql
+++ /dev/null
@@ -1,113 +0,0 @@
--- =================================================================-- 验证7:检查临时表是否已清理
-SELECT
- '临时表清理检查' as check_type,
- CASE
- WHEN EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'temp_user_ids')
- THEN '临时表仍存在'
- ELSE '临时表已清理'
- END as cleanup_status;
-
--- 验证8:检查配送任务分配逻辑
-SELECT
- '配送任务分配检查' as check_type,
- COUNT(DISTINCT dt.driver_id) as assigned_drivers,
- COUNT(*) as total_tasks,
- ROUND(AVG(tasks_per_driver.task_count), 2) as avg_tasks_per_driver
-FROM public.ml_delivery_tasks dt
-CROSS JOIN (
- SELECT driver_id, COUNT(*) as task_count
- FROM public.ml_delivery_tasks
- GROUP BY driver_id
-) as tasks_per_driver;============
--- mock_data_insert.sql 修复验证脚本
--- 用途: 验证修复后的模拟数据插入脚本是否能正常执行
--- =====================================================================================
-
--- 验证1:检查商品价格数据完整性
-SELECT
- '商品价格检查' as check_type,
- COUNT(*) as total_products,
- COUNT(CASE WHEN base_price IS NULL THEN 1 END) as null_base_price_count,
- COUNT(CASE WHEN base_price > 0 THEN 1 END) as valid_price_count
-FROM public.ml_products;
-
--- 验证2:检查SKU价格数据完整性
-SELECT
- 'SKU价格检查' as check_type,
- COUNT(*) as total_skus,
- COUNT(CASE WHEN price IS NULL THEN 1 END) as null_price_count,
- COUNT(CASE WHEN price > 0 THEN 1 END) as valid_price_count
-FROM public.ml_product_skus;
-
--- 验证3:测试商品-SKU价格查询逻辑
-SELECT
- '价格查询逻辑测试' as check_type,
- p.name as product_name,
- p.base_price,
- s.price as sku_price,
- COALESCE(s.price, p.base_price) as final_price,
- CASE
- WHEN s.price IS NOT NULL THEN 'SKU价格'
- ELSE '基础价格'
- END as price_source
-FROM public.ml_products p
-LEFT JOIN public.ml_product_skus s ON p.id = s.product_id
-ORDER BY p.name, s.sku_code
-LIMIT 10;
-
--- 验证4:检查订单商品价格是否存在NULL值
-SELECT
- '订单商品价格检查' as check_type,
- COUNT(*) as total_order_items,
- COUNT(CASE WHEN price IS NULL THEN 1 END) as null_price_count,
- COUNT(CASE WHEN price > 0 THEN 1 END) as valid_price_count,
- MIN(price) as min_price,
- MAX(price) as max_price
-FROM public.ml_order_items;
-
--- 验证5:检查订单关联的商家ID是否正确
-SELECT
- '订单商家关联检查' as check_type,
- COUNT(DISTINCT o.merchant_id) as unique_merchants,
- COUNT(*) as total_orders,
- COUNT(CASE WHEN u.role = 'merchant' THEN 1 END) as valid_merchant_orders
-FROM public.ml_orders o
-LEFT JOIN public.ak_users u ON o.merchant_id = u.id;
-
--- 验证6:检查配送任务唯一性
-SELECT
- '配送任务唯一性检查' as check_type,
- COUNT(*) as total_delivery_tasks,
- COUNT(DISTINCT order_id) as unique_orders,
- COUNT(*) - COUNT(DISTINCT order_id) as duplicate_order_count,
- CASE
- WHEN COUNT(*) = COUNT(DISTINCT order_id) THEN '✓ 无重复订单'
- ELSE '✗ 存在重复订单配送任务'
- END as uniqueness_status
-FROM public.ml_delivery_tasks;
-
--- 验证7:检查临时表是否已清理
-SELECT
- '临时表清理检查' as check_type,
- CASE
- WHEN EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'temp_user_ids')
- THEN '临时表仍存在'
- ELSE '临时表已清理'
- END as cleanup_status;
-
--- 输出总体验证结果
-DO $$
-BEGIN
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '模拟数据插入脚本修复验证完成';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '请检查以上查询结果:';
- RAISE NOTICE '1. 商品和SKU价格应无NULL值';
- RAISE NOTICE '2. 订单商品价格应无NULL值';
- RAISE NOTICE '3. 订单应正确关联到商家用户';
- RAISE NOTICE '4. 配送任务应无重复订单';
- RAISE NOTICE '5. 临时表应已清理';
- RAISE NOTICE '=======================================================';
- RAISE NOTICE '如所有检查通过,说明修复有效';
- RAISE NOTICE '=======================================================';
-END $$;
diff --git a/doc_mall/reports/PAYMENT_PAGE_GUIDE.md b/doc_mall/reports/PAYMENT_PAGE_GUIDE.md
new file mode 100644
index 00000000..709e4fd0
--- /dev/null
+++ b/doc_mall/reports/PAYMENT_PAGE_GUIDE.md
@@ -0,0 +1,75 @@
+# Payment Page Documentation
+
+**File Path:** `pages/mall/consumer/payment.uvue`
+
+## 1. Overview
+The Payment Page is the final step in the checkout process. It presents the user with the order total, allows selection of a payment method, and processes the transaction. It is fully integrated with the Supabase backend to ensure order status consistency.
+
+## 2. Page Parameters (`onLoad`)
+
+The page expects the following parameters when navigating to it:
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `orderId` | String | **Yes** | The UUID of the order created in the previous step. |
+| `amount` | Number | No | The total amount to pay. Defaults to fetching from DB if omitted. |
+| `productAmount` | Number | No | Subtotal for products (for display). |
+| `deliveryFee` | Number | No | Shipping cost (for display). |
+| `discountAmount` | Number | No | Any discounts applied (for display). |
+
+## 3. Data Integration (Supabase)
+
+The page uses `supabaseService.uts` to interact with the database.
+
+### 3.1 Loading Order Information
+- **Method:** `supabaseService.getOrderDetail(orderId)`
+- **Behavior:** Fetches `ml_orders` data.
+- **Failover:** If DB load fails, falls back to `options.amount` or generates a mock Order No.
+
+### 3.2 Loading User Balance
+- **Method:** `supabaseService.getUserBalance()`
+- **Behavior:** Fetches the current user's wallet balance to determine if "Balance Payment" is viable.
+
+### 3.3 Processing Payment
+- **Method:** `supabaseService.payOrder(orderId, method, amount)`
+- **Updates Performed:**
+ - Sets `order_status` to `2` (Pending Delivery / Paid).
+ - Sets `payment_status` to `1` (Success).
+ - Sets `payment_method` (e.g., 'wechat', 'balance').
+ - Sets `payment_time`.
+
+## 4. Key Features
+
+### 4.1 Payment Methods
+Supported methods (configured in `loadPaymentMethods`):
+1. **WeChat Pay** (Simulated SDK)
+2. **Alipay** (Simulated SDK)
+3. **Balance Payment**
+ - Checks if `userBalance >= amount`.
+ - Requires 6-digit password input.
+ - Password verification is currently simulated.
+4. **Bank Card** (Simulated)
+
+### 4.2 User Interaction
+- **Password Input:** A custom 6-digit dot display and numeric keypad overlay appear when "Balance Payment" is selected.
+- **Interception:** `onBackPress` is intercepted to warn the user that cancelling will save the order as "Pending Payment".
+
+## 5. State Management
+
+- **Success Flow:**
+ 1. `confirmPayment` validates inputs (balance, password).
+ 2. Calls `payOrder` API.
+ 3. Updates local storage `orders` cache (backup).
+ 4. Emits `orderUpdated` global event (for Profile page refresh).
+ 5. Redirects to `/pages/mall/consumer/payment-success`.
+
+- **Cancellation Flow:**
+ 1. User attempts to go back.
+ 2. Modal prompts for confirmation.
+ 3. On confirm, acts as "Pending Payment" (Status remains `1`).
+ 4. Returns to previous page.
+
+## 6. Future Improvements (TODO)
+- **Real Payment SDK:** Integrate actual `uni.requestPayment` for WeChat/Alipay.
+- **Server-Side Verification:** Move password verification to a Supabase Edge Function instead of frontend simulation.
+- **Inventory Lock:** Ensure inventory is deducted atomically on the server side (currently simulated or implicit).
diff --git a/doc_mall/subscription_guard_trigger.sql b/doc_mall/subscription_guard_trigger.sql
deleted file mode 100644
index 5464d863..00000000
--- a/doc_mall/subscription_guard_trigger.sql
+++ /dev/null
@@ -1,47 +0,0 @@
--- Optional guard to restrict non-admin updates on ml_user_subscriptions
--- Purpose: Allow normal users to toggle auto_renew and cancel_at_period_end only.
--- Admins can update any fields.
--- Dependencies: public.is_admin() from subscription_rls_policies.sql
-
-begin;
-
--- Create or replace the guard function
-create or replace function public.enforce_user_sub_update()
-returns trigger
-language plpgsql
-as $$
-begin
- -- Admin can change anything
- if public.is_admin() then
- return new;
- end if;
-
- -- Owner can only toggle limited fields
- if new.user_id = auth.uid() then
- -- Revert disallowed fields to old values
- new.status := old.status;
- new.plan_id := old.plan_id;
- new.start_date := old.start_date;
- new.end_date := old.end_date;
- new.next_billing_date := old.next_billing_date;
- new.metadata := old.metadata;
- -- Allow: auto_renew, cancel_at_period_end (and updated_at will be set by trigger)
- return new;
- end if;
-
- -- Neither admin nor owner
- raise exception 'Forbidden (not owner)';
-end;
-$$;
-
--- Recreate trigger (idempotent)
-drop trigger if exists trg_enforce_user_sub_update on public.ml_user_subscriptions;
-create trigger trg_enforce_user_sub_update
- before update on public.ml_user_subscriptions
- for each row execute function public.enforce_user_sub_update();
-
-commit;
-
--- Usage:
--- 1) Ensure subscription tables and RLS policies are created (see create_mall_subscription_tables.sql, subscription_rls_policies.sql)
--- 2) Run this script to enforce column-level restrictions for non-admins
\ No newline at end of file
diff --git a/doc_mall/subscription_rls_policies.sql b/doc_mall/subscription_rls_policies.sql
deleted file mode 100644
index 535d4c33..00000000
--- a/doc_mall/subscription_rls_policies.sql
+++ /dev/null
@@ -1,119 +0,0 @@
--- Subscription RLS and permissions
--- Purpose: Ensure admins can read/write ml_user_subscriptions and ml_subscription_plans;
--- consumers can only access their own subscriptions; everyone can read active plans.
--- Notes:
--- - Designed for Supabase (auth.uid(), auth.jwt()).
--- - Adjust table/column names if they differ in your DB.
-
--- 1) Helper: identify admin users
--- Prefer JWT app_metadata.role = 'admin' if you set it; fallback to ak_users.user_type = 5
--- (5 corresponds to ADMIN per MALL_USER_TYPE).
-create or replace function public.is_admin()
-returns boolean
-language sql
-stable
-as $$
- select coalesce(
- -- Check custom claim from JWT: { app_metadata: { role: 'admin' } }
- ((auth.jwt() -> 'app_metadata' ->> 'role') = 'admin')
- -- Fallback: ak_users.user_type = 5 (cast to text for compatibility), match user by id as text
- or exists (
- select 1 from public.ak_users u
- where u.id::text = auth.uid()::text
- and u.user_type::text = '5'
- )
- , false);
-$$;
-
-comment on function public.is_admin is 'Returns true if current JWT/app user is admin by claim or ak_users.user_type=5.';
-
--- 2) Enable RLS on subscription tables
-alter table if exists public.ml_subscription_plans enable row level security;
-alter table if exists public.ml_user_subscriptions enable row level security;
-
-grant select on table public.ml_subscription_plans to anon, authenticated;
-grant select, insert, update, delete on table public.ml_subscription_plans to authenticated; -- limited by RLS
-grant select, insert, update, delete on table public.ml_user_subscriptions to authenticated; -- limited by RLS
-
--- 4) Policies for ml_subscription_plans
--- 4.1 Everyone can read active plans
-drop policy if exists ml_plans_select_active on public.ml_subscription_plans;
-create policy ml_plans_select_active
-on public.ml_subscription_plans
-for select
-to anon, authenticated
-using (is_active = true);
-
--- 4.2 Admin can do anything
-drop policy if exists ml_plans_admin_all on public.ml_subscription_plans;
-create policy ml_plans_admin_all
-on public.ml_subscription_plans
-for all
-to authenticated
-using (public.is_admin())
-with check (public.is_admin());
-
--- 5) Policies for ml_user_subscriptions
--- 5.1 Users can see their own subscriptions
-drop policy if exists ml_user_subs_select_own on public.ml_user_subscriptions;
-create policy ml_user_subs_select_own
-on public.ml_user_subscriptions
-for select
-to authenticated
-using (user_id = auth.uid());
-
--- 5.2 Users can create their own subscriptions (checkout)
-drop policy if exists ml_user_subs_insert_own on public.ml_user_subscriptions;
-create policy ml_user_subs_insert_own
-on public.ml_user_subscriptions
-for insert
-to authenticated
-with check (user_id = auth.uid());
-
--- 5.3 Users may update their own records (e.g., auto_renew, cancel_at_period_end)
--- NOTE: This allows updating any columns; for stricter control, add a BEFORE UPDATE trigger
--- that restricts column changes for non-admins.
-drop policy if exists ml_user_subs_update_own on public.ml_user_subscriptions;
-create policy ml_user_subs_update_own
-on public.ml_user_subscriptions
-for update
-to authenticated
-using (user_id = auth.uid())
-with check (user_id = auth.uid());
-
--- 5.4 Admin can do anything on user subscriptions
-drop policy if exists ml_user_subs_admin_all on public.ml_user_subscriptions;
-create policy ml_user_subs_admin_all
-on public.ml_user_subscriptions
-for all
-to authenticated
-using (public.is_admin())
-with check (public.is_admin());
-
--- 6) Optional: Trigger to limit non-admin updates to specific fields
--- Uncomment if you want to enforce column-level restrictions
--- create or replace function public.enforce_user_sub_update()
--- returns trigger language plpgsql as $$
--- begin
--- if public.is_admin() then
--- return new; -- admins can change anything
--- end if;
--- -- Only allow toggling auto_renew and cancel_at_period_end for owners
--- if new.user_id = auth.uid() then
--- new.status := old.status;
--- new.plan_id := old.plan_id;
--- new.start_date := old.start_date;
--- new.end_date := old.end_date;
--- new.next_billing_date := old.next_billing_date;
--- -- allow: auto_renew, cancel_at_period_end
--- return new;
--- end if;
--- raise exception 'Forbidden';
--- end $$;
--- drop trigger if exists trg_enforce_user_sub_update on public.ml_user_subscriptions;
--- create trigger trg_enforce_user_sub_update
--- before update on public.ml_user_subscriptions
--- for each row execute function public.enforce_user_sub_update();
-
--- 7) Safety: ensure no rows are exposed to non-auth users except active plans via select policy above.
--- Admins authenticate as normal users with admin claim or ak_users.user_type=5.
diff --git a/pages/mall/consumer/Supabase Snippet SQL Query.csv b/pages/mall/consumer/Supabase Snippet SQL Query.csv
deleted file mode 100644
index 134f8361..00000000
--- a/pages/mall/consumer/Supabase Snippet SQL Query.csv
+++ /dev/null
@@ -1,487 +0,0 @@
-table_name,columns,table_comment
-act_app_appdef,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10}]",null
-act_app_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_app_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_app_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6}]",null
-act_app_deployment_resource,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""resource_bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_cmmn_casedef,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""has_graphical_notation_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""dgrm_resource_name_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""has_start_form_key_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13}]",null
-act_cmmn_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_cmmn_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_cmmn_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""parent_deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7}]",null
-act_cmmn_deployment_resource,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""resource_bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""generated_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",null
-act_cmmn_hi_case_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""business_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""parent_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""state_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""callback_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""callback_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""last_reactivation_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""last_reactivation_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""business_status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18}]",null
-act_cmmn_hi_mil_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""time_stamp_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""case_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8}]",null
-act_cmmn_hi_plan_item_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""state_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""case_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_stage_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""item_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""item_definition_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""last_available_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""last_enabled_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""last_disabled_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""last_started_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""last_suspended_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""completed_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""occurred_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""terminated_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""exit_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""ended_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""last_updated_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":27},{""column_name"":""entry_criterion_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""exit_criterion_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""show_in_overview_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""extra_value_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""derived_case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""last_unavailable_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33}]",null
-act_cmmn_ru_case_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""business_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""parent_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""state_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""callback_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""callback_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""lock_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""is_completeable_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""last_reactivation_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""last_reactivation_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""business_status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20}]",null
-act_cmmn_ru_mil_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""time_stamp_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""case_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7}]",null
-act_cmmn_ru_plan_item_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""case_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_stage_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""state_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""item_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""item_definition_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""is_completeable_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""is_count_enabled_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""var_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""sentry_part_inst_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""last_available_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""last_enabled_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""last_disabled_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""last_started_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""last_suspended_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""completed_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""occurred_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""terminated_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""exit_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""ended_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""entry_criterion_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""exit_criterion_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""extra_value_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""derived_case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""last_unavailable_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35}]",null
-act_cmmn_ru_sentry_part_inst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""case_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""case_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""plan_item_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""on_part_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""if_part_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""time_stamp_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-act_co_content_item,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""mime_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content_store_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""content_store_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""field_"",""data_type"":""character varying"",""character_maximum_length"":400,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""content_available_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""created_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_by_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""last_modified_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""last_modified_by_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""content_size_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17}]",null
-act_co_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_co_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_dmn_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_dmn_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_dmn_decision,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""decision_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",null
-act_dmn_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""parent_deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",null
-act_dmn_deployment_resource,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""resource_bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_dmn_hi_decision_execution,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""decision_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""instance_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""activity_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""failed_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""execution_json_"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",null
-act_evt_log,"[{""column_name"":""log_nr_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('act_evt_log_log_nr__seq'::regclass)"",""ordinal_position"":1},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""time_stamp_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""data_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""lock_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""is_processed_"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12}]",null
-act_fo_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_fo_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_fo_form_definition,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10}]",null
-act_fo_form_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""parent_deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",null
-act_fo_form_instance,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""form_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""submitted_date_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""submitted_by_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""form_values_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",null
-act_fo_form_resource,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""resource_bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_ge_bytearray,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""generated_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",null
-act_ge_property,"[{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""value_"",""data_type"":""character varying"",""character_maximum_length"":300,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3}]",null
-act_hi_actinst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":2},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""call_proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""act_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""act_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""assignee_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""transaction_order_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""duration_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""delete_reason_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17}]",null
-act_hi_attachment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""url_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""content_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",null
-act_hi_comment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""action_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""message_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""full_msg_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",null
-act_hi_detail,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""act_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""var_type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""bytearray_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""double_"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""long_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""text_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""text2_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",null
-act_hi_entitylink,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""link_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""parent_element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""ref_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""ref_scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ref_scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""root_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""root_scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""hierarchy_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-act_hi_identitylink,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""group_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",null
-act_hi_procinst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":2},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""business_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""duration_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""start_act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""end_act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""super_process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""delete_reason_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""callback_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""callback_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""propagated_stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""business_status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21}]",null
-act_hi_taskinst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":2},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""task_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_def_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""propagated_stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""parent_task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""assignee_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""claim_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""duration_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""delete_reason_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""priority_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""due_date_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""form_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":27},{""column_name"":""last_updated_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28}]",null
-act_hi_tsk_log,"[{""column_name"":""id_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('act_hi_tsk_log_id__seq'::regclass)"",""ordinal_position"":1},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""time_stamp_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""data_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14}]",null
-act_hi_varinst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":2},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""var_type_"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""bytearray_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""double_"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""long_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""text_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""text2_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""last_updated_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17}]",null
-act_id_bytearray,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_id_group,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_id_info,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""value_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""password_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""parent_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-act_id_membership,"[{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""group_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2}]",null
-act_id_priv,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2}]",null
-act_id_priv_mapping,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""priv_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""group_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_id_property,"[{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""value_"",""data_type"":""character varying"",""character_maximum_length"":300,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3}]",null
-act_id_token,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""token_value_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""token_date_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ip_address_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""user_agent_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""token_data_"",""data_type"":""character varying"",""character_maximum_length"":2000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-act_id_user,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""first_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""last_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""display_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""email_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""pwd_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""picture_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9}]",null
-act_procdef_info,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""info_json_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-act_re_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""derived_from_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""derived_from_root_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""parent_deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""engine_version_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10}]",null
-act_re_model,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""last_update_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""meta_info_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""editor_source_value_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""editor_source_extra_value_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13}]",null
-act_re_model_damap,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""last_update_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""meta_info_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""editor_source_value_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""editor_source_extra_value_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""srcfields"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""mapfields"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""destfields"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""description_"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""hintfields"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18}]",null
-act_re_procdef,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""dgrm_resource_name_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""has_start_form_key_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""has_graphical_notation_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""suspension_state_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""derived_from_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""derived_from_root_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""derived_version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""engine_version_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18}]",null
-act_ru_actinst,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":2},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""call_proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""act_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""act_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""assignee_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""end_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""duration_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""transaction_order_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""delete_reason_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17}]",null
-act_ru_deadletter_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""exclusive_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""element_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""correlation_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""duedate_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""repeat_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":24}]",null
-act_ru_entitylink,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""link_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""parent_element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""ref_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ref_scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""ref_scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""root_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""root_scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""hierarchy_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",null
-act_ru_event_subscr,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""event_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""event_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""activity_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""configuration_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""lock_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17}]",null
-act_ru_execution,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""business_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""parent_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""super_exec_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""root_proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""is_active_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_concurrent_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""is_scope_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""is_event_scope_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""is_mi_root_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""suspension_state_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""cached_ent_state_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""start_act_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""start_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""start_user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""lock_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""is_count_enabled_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""evt_subscr_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""task_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""job_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""timer_job_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""susp_job_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""deadletter_job_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""external_worker_job_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""var_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""id_link_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""callback_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""callback_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""reference_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36},{""column_name"":""reference_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":37},{""column_name"":""propagated_stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""business_status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39}]",null
-act_ru_external_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""lock_exp_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""exclusive_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""element_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""correlation_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""retries_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""duedate_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""repeat_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":27}]",null
-act_ru_history_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lock_exp_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""retries_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""adv_handler_cfg_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14}]",null
-act_ru_identitylink,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""group_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""user_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",null
-act_ru_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""lock_exp_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""exclusive_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""element_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""correlation_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""retries_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""duedate_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""repeat_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":27}]",null
-act_ru_suspended_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""exclusive_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""element_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""correlation_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""retries_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""duedate_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""repeat_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":25}]",null
-act_ru_task,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""task_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""propagated_stage_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""parent_task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""task_def_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""assignee_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""delegation_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""priority_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""due_date_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""suspension_state_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":24},{""column_name"":""form_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""claim_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""is_count_enabled_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""var_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""id_link_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""sub_task_count_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30}]",null
-act_ru_timer_job,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""lock_exp_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""lock_owner_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""exclusive_"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_instance_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""proc_def_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""element_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""element_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""scope_definition_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""correlation_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""retries_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""exception_stack_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""exception_msg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""duedate_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""repeat_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""handler_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""handler_cfg_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""custom_values_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":27}]",null
-act_ru_variable,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""execution_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""proc_inst_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""task_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""bytearray_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""double_"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""long_"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""text_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""text2_"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",null
-ak_achievements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'general'::character varying"",""ordinal_position"":4},{""column_name"":""difficulty"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'easy'::character varying"",""ordinal_position"":5},{""column_name"":""points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""10"",""ordinal_position"":6},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'🏆'::character varying"",""ordinal_position"":7},{""column_name"":""requirements"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",成就定义表
-ak_ai_evaluations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""submission_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""evaluation_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""ai_model"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""evaluation_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""suggested_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""feedback_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""improvement_suggestions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""risk_indicators"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""processed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",AI评估结果表
-ak_ai_reports,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""report_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""analysis_data"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7}]",AI评估报告表
-ak_ai_tags,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""tag_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tag_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'topic'::character varying"",""ordinal_position"":5},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",AI生成的标签表
-ak_ai_training_suggestions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""suggestion_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""priority"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'medium'::character varying"",""ordinal_position"":4},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""data_source"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""action_required"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""acknowledged"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""acknowledged_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""acknowledged_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",AI训练建议表
-ak_ai_translation_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""source_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""model_version"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tokens_used"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""cost_usd"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""success"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",AI翻译日志表
-ak_ai_usage_stats,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""service_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""model_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""tokens_used"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""requests_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":7},{""column_name"":""cost_usd"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""success_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""error_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""date_bucket"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",AI服务使用统计表
-ak_app_translations,"[{""column_name"":""key"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",应用翻译表(前端界面文本)
-ak_area,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""pid"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deep"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""pinyin_prefix"",""data_type"":""character varying"",""character_maximum_length"":8,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""pinyin"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""ext_id"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ext_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-ak_assignment_stats,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""assignment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""total_students"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""submitted_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""reviewed_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""avg_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""last_updated"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",作业统计表
-ak_assignment_submissions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""assignment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""student_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""submit_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""content_md"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""attachment_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""feedback"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'submitted'::character varying"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""device_data_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""video_analysis_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""ai_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""manual_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""final_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""review_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":16},{""column_name"":""reviewed_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""reviewed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""ai_feedback_approved"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":19},{""column_name"":""submission_data"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""submission_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""teacher_feedback"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22}]",作业提交表
-ak_assignment_types,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""default_duration_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""7"",""ordinal_position"":4},{""column_name"":""requires_device"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":5},{""column_name"":""requires_video"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""scoring_criteria"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ai_evaluation_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",运动作业类型定义表
-ak_assignment_workflow,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""assignment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""action"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""actor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""previous_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""new_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""comments"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",作业审批工作流记录表
-ak_assignments,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""teacher_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""due_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""assignment_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""target_metrics"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ai_grading_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""auto_approval"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""workflow_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'draft'::character varying"",""ordinal_position"":13},{""column_name"":""approval_required"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":14},{""column_name"":""approved_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""approved_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""project_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":18},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""gen_random_uuid()"",""ordinal_position"":21},{""column_name"":""requirements"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22}]",作业表
-ak_biometric_data,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""data_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""unit"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""measured_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""extra"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",体征监测数据表
-ak_class_schedules,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""teacher_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""subject"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""day_of_week"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""start_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""end_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""location"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",课程安排表
-ak_classes,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""grade_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",班级表
-ak_cms_articles,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_cms_articles__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""excerpt"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""article_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""is_sticky"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""is_essence"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""comment_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""comment_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""last_comment_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""thumbnail"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""publish_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":16},{""column_name"":""publish_ip"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""last_modify_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""last_modify_ip"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""preview_secret"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""preview_expired"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":22},{""column_name"":""updated_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23}]",null
-ak_cms_categories,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_cms_categories__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""icon"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""article_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""create_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7}]",null
-ak_cms_unlock_record,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_cms_unlock_record__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""unique_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""unique_type"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""trans_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""create_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6}]",null
-ak_comment_likes,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""comment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ak_comment_moderation_queue,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""comment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""reason"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""priority_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""assigned_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""ai_risk_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ai_recommendations"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""assigned_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",评论审核队列表
-ak_comment_reactions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""comment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""reaction_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":""'like'::character varying"",""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",评论反应表(点赞、踩等)
-ak_comment_reports,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""comment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""reporter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""report_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""report_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""reviewed_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""reviewed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""action_taken"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",评论举报表
-ak_comments,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""target_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""author_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""author_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""author_avatar"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""content_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":10},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""dislike_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""reply_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""thread_path"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""is_pinned"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""is_author_reply"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":17},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.5"",""ordinal_position"":18},{""column_name"":""sentiment_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""language_detected"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""device_info"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""moderation_flags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""ai_analysis"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":26},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":27},{""column_name"":""deleted_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28}]",评论表
-ak_content_analysis,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sentiment_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sentiment_label"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""readability_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""credibility_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""toxicity_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""keywords"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""entities"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""topics"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""key_phrases"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""model_version"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""ai_processed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",内容分析结果表
-ak_content_categories,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name_key"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""ai_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""confidence_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.8"",""ordinal_position"":6},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",内容分类表
-ak_content_category_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""category_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",内容分类多语言名称表
-ak_content_comments,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""reply_to_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""reply_to_user_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""reply_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":11},{""column_name"":""is_pinned"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16}]",null
-ak_content_favorites,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""folder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_public"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",内容收藏表
-ak_content_quality_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""quality_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""model_version"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""assessment_criteria"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""reviewer_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",内容质量评估历史表
-ak_content_shares,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""share_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":""'forward'::character varying"",""ordinal_position"":5},{""column_name"":""share_platform"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""share_content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""share_title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""original_author_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""parent_share_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""share_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""reach_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""click_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""comment_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""reshare_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""is_deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":17},{""column_name"":""deleted_reason"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""device_info"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""geo_location"",""data_type"":""point"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":23},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":24},{""column_name"":""deleted_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25}]",内容转发分享表
-ak_content_sources,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""config"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""quality_weight"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1.0"",""ordinal_position"":8},{""column_name"":""crawl_frequency"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""3600"",""ordinal_position"":9},{""column_name"":""last_crawled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""ai_quality_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.6"",""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",内容源配置表
-ak_content_statistics,"[{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":2},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""favorite_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""share_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""comment_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""danmu_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""play_completion_rate"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""average_play_duration"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""download_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",null
-ak_content_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""translation_method"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'ai'::character varying"",""ordinal_position"":7},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""ai_confidence"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""human_verified"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""human_verified_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""human_verified_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tokens_used"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""ai_timeused"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::bigint"",""ordinal_position"":18}]",内容翻译表
-ak_contents,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""raw_content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""source_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""original_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""category_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""entities"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""sentiment_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""readability_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""credibility_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":18},{""column_name"":""share_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""comment_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""published_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""featured_until"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'published'::character varying"",""ordinal_position"":23},{""column_name"":""ai_processed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":25},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":26},{""column_name"":""favorite_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""is_featured"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":28},{""column_name"":""content_type"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":29},{""column_name"":""video_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""video_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""video_poster"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""video_width"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""video_height"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""video_size"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""video_format"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36},{""column_name"":""video_quality"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":37},{""column_name"":""audio_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""audio_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39},{""column_name"":""audio_size"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":40},{""column_name"":""audio_format"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":41},{""column_name"":""audio_bitrate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":42},{""column_name"":""audio_sample_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":43},{""column_name"":""audio_cover"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":44},{""column_name"":""image_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":45},{""column_name"":""image_width"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":46},{""column_name"":""image_height"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":47},{""column_name"":""image_size"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":48},{""column_name"":""image_format"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":49},{""column_name"":""image_quality"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":50},{""column_name"":""image_alt_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":51},{""column_name"":""images"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":52},{""column_name"":""allow_danmu"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":53},{""column_name"":""allow_download"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":54},{""column_name"":""media_metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":55},{""column_name"":""cid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_contents_cid_seq'::regclass)"",""ordinal_position"":56},{""column_name"":""need_retranslate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":57},{""column_name"":""tenent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":58},{""column_name"":""generation_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":59},{""column_name"":""generation_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'generated'::character varying"",""ordinal_position"":60},{""column_name"":""need_regenerate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":61},{""column_name"":""is_reviewed"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":62},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":63}]",处理后的内容表
-ak_cost_limits,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""limit_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""limit_scope"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""scope_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""limit_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""current_usage"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""period_start"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""period_end"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""alert_threshold"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.8"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",成本控制限额表
-ak_danmu_reports,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""danmu_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""reporter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""report_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""report_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",null
-ak_data_quality_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""table_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""quality_check_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""issue_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""severity"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'medium'::character varying"",""ordinal_position"":6},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""resolved"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""resolved_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""resolved_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",数据质量监控表
-ak_database_versions,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_database_versions_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""version"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""applied_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ak_device_events,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""event_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""event_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",设备事件日志表
-ak_devices,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""device_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""device_mac"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""bind_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":7},{""column_name"":""extra"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""watch_id"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",设备表
-ak_favorite_folders,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""color"",""data_type"":""character varying"",""character_maximum_length"":7,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""display_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""is_default"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""is_public"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""item_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",收藏夹表
-ak_favorite_shares,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""folder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""shared_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""share_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'link'::character varying"",""ordinal_position"":4},{""column_name"":""share_code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""access_password"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""expire_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""clone_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",收藏夹分享表
-ak_global_config,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""config_key"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""config_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'string'::character varying"",""ordinal_position"":3},{""column_name"":""config_category"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'general'::character varying"",""ordinal_position"":4},{""column_name"":""default_value"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_translatable"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""default_key"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""need_retranslate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":12},{""column_name"":""tenent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":13}]",全局配置主表
-ak_global_config_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""config_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""translated_value"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""translated_key"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""ai_timeused"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",全局配置翻译表
-ak_goal_progress_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""goal_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""old_value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""new_value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""change_amount"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""change_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""recorded_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",目标进度历史记录表
-ak_grades,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",年级表
-ak_image_tags,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""tag_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""tag_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'user'::character varying"",""ordinal_position"":4},{""column_name"":""confidence"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",null
-ak_image_view_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""view_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""zoom_level"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1.0"",""ordinal_position"":5},{""column_name"":""device_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""screen_resolution"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-ak_info,"[{""column_name"":""zid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_info_zid_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""ztid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":2},{""column_name"":""cid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""classid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""newstime"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""mid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""isgood"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""changetime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""onclick"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""scnum"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""unzannum"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""zannum"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""plnum"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""totaldown"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""newspath"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":16},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":36,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""userid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":18},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""firsttitle"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""ispic"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":21},{""column_name"":""istop"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":22},{""column_name"":""isqf"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":23},{""column_name"":""ismember"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":24},{""column_name"":""isurl"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":25},{""column_name"":""truetime"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":26},{""column_name"":""lastdotime"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""havehtml"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":28},{""column_name"":""groupid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":29},{""column_name"":""userfen"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":30},{""column_name"":""titlefont"",""data_type"":""character varying"",""character_maximum_length"":14,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":31},{""column_name"":""titleurl"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":32}]",null
-ak_interactions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""interaction_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",互动记录表
-ak_languages,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""native_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":5},{""column_name"":""is_default"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""ai_translation_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""translation_quality_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.8"",""ordinal_position"":9},{""column_name"":""ai_provider_priority"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{\""baidu\"": 3, \""google\"": 2, \""openai\"": 1}'::jsonb"",""ordinal_position"":10},{""column_name"":""cultural_adaptation_rules"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12}]",支持的语言表
-ak_learning_analytics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""analysis_period_start"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""analysis_period_end"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""total_assignments"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""completed_assignments"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""avg_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""improvement_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""attendance_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""effort_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""skill_progression"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""health_indicators"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""risk_factors"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""recommendations"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",学习分析表
-ak_media_library,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_media_library__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""src"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""cover"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""alt"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""original_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""fileType"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""create_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""duration"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""size"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""width"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""height"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""resolution"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""uploadUser"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""originalName"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",null
-ak_message_group_members,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""group_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""role"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'member'::character varying"",""ordinal_position"":4},{""column_name"":""permissions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":6},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_muted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""muted_until"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""muted_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""mute_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""last_read_message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""last_read_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""unread_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""notification_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":15},{""column_name"":""mention_only"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""message_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""join_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":18},{""column_name"":""joined_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19},{""column_name"":""left_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":21},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":22}]",群组成员表
-ak_message_groups,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""group_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'normal'::character varying"",""ordinal_position"":4},{""column_name"":""owner_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""avatar_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""is_public"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""member_limit"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""500"",""ordinal_position"":9},{""column_name"":""message_limit_per_day"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1000"",""ordinal_position"":10},{""column_name"":""file_size_limit_mb"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""100"",""ordinal_position"":11},{""column_name"":""settings"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":12},{""column_name"":""permissions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":13},{""column_name"":""auto_archive_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""30"",""ordinal_position"":14},{""column_name"":""auto_delete_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""90"",""ordinal_position"":15},{""column_name"":""related_class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""related_school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",消息群组表
-ak_message_recipients,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""recipient_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""recipient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""recipient_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""delivery_method"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""sent_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""delivered_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""read_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""replied_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""delivery_attempts"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""last_attempt_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""failure_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""device_token"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""is_starred"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""is_archived"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":17},{""column_name"":""is_deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":18},{""column_name"":""deleted_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""read_duration_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""interaction_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":22},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":23}]",消息接收记录表
-ak_message_stats,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""date_bucket"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""hour_bucket"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""message_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sender_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""total_sent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""total_delivered"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""total_read"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""total_replied"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""total_failed"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""avg_delivery_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""avg_read_time_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""avg_response_time_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""device_online_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""device_offline_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""device_error_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18}]",消息统计表
-ak_message_templates,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'general'::character varying"",""ordinal_position"":5},{""column_name"":""message_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""title_template"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""content_template"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""variables"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":9},{""column_name"":""required_variables"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""is_system"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":""'zh-CN'::character varying"",""ordinal_position"":13},{""column_name"":""default_priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""default_push"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":15},{""column_name"":""default_email"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""usage_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""last_used_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":20},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":21}]",消息模板表
-ak_message_types,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""color"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""is_system"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""auto_read_timeout"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""retention_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""30"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",消息类型定义表
-ak_messages,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""message_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sender_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sender_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sender_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""receiver_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":""'user'::character varying"",""ordinal_position"":6},{""column_name"":""receiver_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""content_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'text'::character varying"",""ordinal_position"":10},{""column_name"":""attachments"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""media_urls"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""device_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""location_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""is_broadcast"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":18},{""column_name"":""is_urgent"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":19},{""column_name"":""conversation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""parent_message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""thread_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":22},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'sent'::character varying"",""ordinal_position"":23},{""column_name"":""total_recipients"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":24},{""column_name"":""delivered_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":25},{""column_name"":""read_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":26},{""column_name"":""reply_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""delivery_options"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""push_notification"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":29},{""column_name"":""email_notification"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":30},{""column_name"":""sms_notification"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":31},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":32},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":33},{""column_name"":""scheduled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""delivered_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""is_deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":36}]",消息主表
-ak_notifications,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'unread'::character varying"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_read"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",消息/通知表
-ak_permissions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""resource_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""action"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_system"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",权限定义表
-ak_personalized_recommendations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""recommendation_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""recommendation_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""viewed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""applied_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",个性化推荐记录表
-ak_point_rules,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""rule_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""event_code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""limit_per_day"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",积分规则表
-ak_point_transactions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""transaction_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""reference_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",积分交易记录表
-ak_raw_contents,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""source_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""external_id"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""source_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""published_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""language_detected"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""language_confidence"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""content_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""raw_metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""processing_status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":14},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""duplicate_of"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18}]",原始内容表
-ak_recommendations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""algorithm_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""position"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""shown_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""clicked_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""feedback_score"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""feedback_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",推荐记录表
-ak_region_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""region_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6}]",区域名称翻译表
-ak_regions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'''''active''''::character varying'::character varying"",""ordinal_position"":6}]",地区表
-ak_review_queue,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""translation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""review_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":5},{""column_name"":""reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""ai_confidence"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""requested_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""assigned_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":10},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""review_result"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",人工审核队列表
-ak_role_permissions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""role_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""permission_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",角色-权限关联表
-ak_roles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""is_system"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",角色定义表
-ak_school_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""school_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""school_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7}]",学校名称翻译表
-ak_schools,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""region_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",学校表
-ak_search_hot,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_search_hot__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""create_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-ak_search_log,"[{""column_name"":""_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_search_log__id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""platform"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""ip"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""create_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7}]",null
-ak_share_analytics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""target_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""date_recorded"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_DATE"",""ordinal_position"":4},{""column_name"":""platform"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""share_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""unique_sharers"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""total_reach"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""total_clicks"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""avg_share_level"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""viral_coefficient"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",分享统计分析表
-ak_slides,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_slides_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""slides"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""NULL::timestamp without time zone"",""ordinal_position"":6},{""column_name"":""updated_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""NULL::timestamp without time zone"",""ordinal_position"":7}]",null
-ak_sport_report_shares,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""report_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""shared_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""shared_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""share_type"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'link'::character varying"",""ordinal_position"":5},{""column_name"":""share_token"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""expired_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",运动报告分享记录表
-ak_sport_reports,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content_md"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""cover_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""visibility"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'private'::character varying"",""ordinal_position"":6},{""column_name"":""visible_until"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""allow_comment"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""gen_random_uuid()"",""ordinal_position"":12},{""column_name"":""semester"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""report_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""content"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",运动报告表
-ak_sport_types,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""icon_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""difficulty_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":6},{""column_name"":""calorie_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",运动项目/类型表
-ak_student_achievements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""student_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""achievement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""unlocked_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""progress_current"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""progress_target"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":6},{""column_name"":""is_featured"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",学生成就记录表
-ak_teacher_roles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""role"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'teacher'::character varying"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",老师权限管理表
-ak_teaching_resources,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""teacher_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tags"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_public"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",教学资源表
-ak_topic_content_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""topic_content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""editor_note"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""translation_method"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'ai'::character varying"",""ordinal_position"":5},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""human_verified"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""human_verified_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""human_verified_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",专题内容关联多语言翻译表
-ak_topic_contents,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""topic_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""display_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""editor_note"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_featured"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""added_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""added_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",专题内容关联表
-ak_topic_subscriptions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""topic_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""notification_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":4},{""column_name"":""subscribed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""last_notified_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",专题订阅表
-ak_topic_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""topic_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""meta_description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""meta_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""translation_method"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'ai'::character varying"",""ordinal_position"":8},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ai_confidence"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""human_verified"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""human_verified_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""human_verified_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""tokens_used"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""seo_slug"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19}]",专题多语言翻译表
-ak_topics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""topic_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":""'series'::character varying"",""ordinal_position"":4},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":5},{""column_name"":""cover_image_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""editor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""content_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""like_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""share_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""comment_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""subscriber_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""last_content_added_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""featured_until"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""meta_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""meta_description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""seo_slug"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""priority_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":22},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":23},{""column_name"":""favorite_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":24},{""column_name"":""need_retranslate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":25},{""column_name"":""tenent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":26}]",专题表
-ak_training_intensity_settings,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sport_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""heart_rate_zones"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""perceived_exertion_scale"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":5},{""column_name"":""auto_adjust_intensity"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":6},{""column_name"":""max_workout_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""60"",""ordinal_position"":7},{""column_name"":""cooldown_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":8},{""column_name"":""warmup_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",训练强度偏好设置表
-ak_training_patterns,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""pattern_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""pattern_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.5"",""ordinal_position"":5},{""column_name"":""detected_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",训练模式分析表
-ak_training_plan_items,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""plan_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""item_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""activity_type"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""target_value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""unit"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",训练计划明细表
-ak_training_plans,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""plan_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""start_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""end_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",训练计划表
-ak_training_projects,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sport_type"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""difficulty_level"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":""'beginner'::character varying"",""ordinal_position"":5},{""column_name"":""duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""30"",""ordinal_position"":6},{""column_name"":""equipment_required"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""target_age_group"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""objectives"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""instructions"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""video_url"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""image_url"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":13},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""scoring_criteria"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17}]",null
-ak_training_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""plan_item_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""activity_type"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""duration_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""distance_km"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""calories"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""steps"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""avg_heart_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""max_heart_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",训练记录表
-ak_training_reminders,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""reminder_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""trigger_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""trigger_days"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""trigger_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""sound_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":10},{""column_name"":""vibrate_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""advance_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""repeat_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":13},{""column_name"":""repeat_interval_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16}]",训练提醒设置表
-ak_training_templates,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_age_min"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""target_age_max"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""difficulty_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":6},{""column_name"":""duration_weeks"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""4"",""ordinal_position"":7},{""column_name"":""template_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""ai_adaptive"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",训练计划模板表
-ak_translation_configs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""config_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""config_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""source_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""target_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""language_pair"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""model_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""api_endpoint"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""translation_params"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":10},{""column_name"":""quality_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.8"",""ordinal_position"":11},{""column_name"":""confidence_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.7"",""ordinal_position"":12},{""column_name"":""rate_limit_per_minute"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""60"",""ordinal_position"":13},{""column_name"":""rate_limit_per_hour"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1000"",""ordinal_position"":14},{""column_name"":""timeout_seconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""300"",""ordinal_position"":15},{""column_name"":""cultural_adaptation_rules"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":16},{""column_name"":""terminology_glossary"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":17},{""column_name"":""style_guide"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":18},{""column_name"":""cost_per_request"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":19},{""column_name"":""monthly_budget_limit"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""current_monthly_cost"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":21},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":22},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":23},{""column_name"":""fallback_config_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""success_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":25},{""column_name"":""average_quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":26},{""column_name"":""average_response_time"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":27},{""column_name"":""total_usage_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":28},{""column_name"":""last_used_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":31},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":32}]",翻译服务配置表,存储不同AI提供商和语言对的配置信息
-ak_translation_quality_metrics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""bleu_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""rouge_1_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""rouge_2_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""rouge_l_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""semantic_similarity"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""fluency_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""adequacy_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""length_ratio"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""character_level_similarity"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""word_level_similarity"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""terminology_accuracy"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""terminology_violations"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":14},{""column_name"":""grammar_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""style_consistency"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""cultural_adaptation_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""human_quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""human_fluency_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""human_adequacy_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""human_creativity_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""evaluator_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":22},{""column_name"":""evaluator_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""evaluation_method"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""evaluation_model"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""evaluation_version"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""evaluation_params"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":27},{""column_name"":""reference_translations"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":28},{""column_name"":""overall_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""weighted_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""score_breakdown"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":31},{""column_name"":""improvement_suggestions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":32},{""column_name"":""error_categories"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":33},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":34},{""column_name"":""evaluation_duration_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35}]",翻译质量评估表,存储详细的质量指标
-ak_translation_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""task_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""source_table"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""source_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""source_field"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""source_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""source_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""source_char_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""source_word_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""target_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""translated_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""target_char_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""target_word_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""translation_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":14},{""column_name"":""config_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""model_version"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""translation_params"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":18},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""bleu_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""semantic_similarity"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""fluency_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""adequacy_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""processing_cost"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":25},{""column_name"":""token_usage"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":26},{""column_name"":""review_required"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":27},{""column_name"":""reviewed_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""reviewed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""review_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""human_quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""version"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":33},{""column_name"":""parent_record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""is_latest_version"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":35},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":36},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":37},{""column_name"":""translated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":40},{""column_name"":""error_code"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":41},{""column_name"":""error_details"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":42},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":43},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":44},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":45}]",翻译记录表,存储每个具体的翻译结果
-ak_translation_review_tasks,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""task_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""review_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""urgency_level"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'normal'::character varying"",""ordinal_position"":6},{""column_name"":""assigned_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""assigned_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""assigned_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""auto_assigned"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":11},{""column_name"":""started_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""estimated_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""actual_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""decision"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""confidence_level"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""specific_issues"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":19},{""column_name"":""suggestions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":20},{""column_name"":""corrected_translation"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""overall_rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""quality_rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""accuracy_rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""fluency_rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""review_criteria"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":26},{""column_name"":""allow_delegation"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":27},{""column_name"":""require_secondary_review"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":28},{""column_name"":""notification_sent"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":29},{""column_name"":""reminder_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":30},{""column_name"":""last_reminder_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":32},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":33}]",人工审核任务表,管理翻译结果的人工审核流程
-ak_translation_stats_daily,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""source_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ai_provider"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""total_requests"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""successful_translations"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""failed_translations"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""average_quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""average_confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""high_quality_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""low_quality_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""average_processing_time_ms"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""total_processing_time_ms"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""min_processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""max_processing_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""total_cost"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":17},{""column_name"":""average_cost_per_request"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":18},{""column_name"":""total_source_chars"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""total_target_chars"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""average_chars_per_request"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""reviews_required"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":22},{""column_name"":""reviews_completed"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":23},{""column_name"":""average_review_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":25},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":26}]",每日翻译统计表,用于性能监控和报表
-ak_translation_system_metrics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""metric_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""metric_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""labels"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":5},{""column_name"":""timestamp"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6},{""column_name"":""instance_id"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""version"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""environment"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'production'::character varying"",""ordinal_position"":9}]",系统监控指标表,存储系统运行时的各种指标
-ak_translation_tasks,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""task_name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""task_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""source_table"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""source_ids"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""source_filter"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""source_language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""target_languages"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""config_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""translation_config"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":10},{""column_name"":""quality_threshold"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.8"",""ordinal_position"":11},{""column_name"":""require_human_review"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""auto_publish"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":13},{""column_name"":""schedule_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'immediate'::character varying"",""ordinal_position"":14},{""column_name"":""scheduled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""cron_expression"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""timezone"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'UTC'::character varying"",""ordinal_position"":17},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":18},{""column_name"":""progress_percentage"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""total_items"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""completed_items"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":21},{""column_name"":""failed_items"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":22},{""column_name"":""skipped_items"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":23},{""column_name"":""reviewed_items"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":24},{""column_name"":""estimated_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""actual_duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""average_quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""total_cost"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":28},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""error_details"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":31},{""column_name"":""max_retries"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""3"",""ordinal_position"":32},{""column_name"":""last_retry_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""celery_task_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""external_task_ids"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":35},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":37},{""column_name"":""started_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":40},{""column_name"":""notification_settings"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":41},{""column_name"":""archive_after_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""30"",""ordinal_position"":42},{""column_name"":""auto_cleanup"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":43}]",翻译任务表,管理批量翻译任务的生命周期
-ak_translations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""language_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",数据翻译基础表(用于继承)
-ak_user_behavior_analytics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""behavior_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""behavior_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""session_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",用户行为分析表
-ak_user_behaviors,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""behavior_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""behavior_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""duration_seconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scroll_percentage"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""device_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""source"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""session_id"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",用户行为记录表
-ak_user_classes,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""role"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",用户-班级多对多关系表
-ak_user_contacts,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""contact_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""contact_value"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""is_primary"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",用户联系方式表
-ak_user_feedback,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",用户反馈表
-ak_user_fitness_profile,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""fitness_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'beginner'::character varying"",""ordinal_position"":3},{""column_name"":""experience_years"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""injury_history"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""health_conditions"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""preferred_workout_time"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""available_equipment"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""workout_location_preference"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""weekly_time_budget_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""180"",""ordinal_position"":10},{""column_name"":""rest_day_preference"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",用户健身等级和经验表
-ak_user_interactions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""interaction_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""interaction_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",null
-ak_user_message_preferences,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""global_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":3},{""column_name"":""do_not_disturb"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":4},{""column_name"":""quiet_hours_start"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'22:00:00'::time without time zone"",""ordinal_position"":5},{""column_name"":""quiet_hours_end"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'07:00:00'::time without time zone"",""ordinal_position"":6},{""column_name"":""timezone"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'Asia/Shanghai'::character varying"",""ordinal_position"":7},{""column_name"":""push_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""email_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""sms_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""type_preferences"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":11},{""column_name"":""group_message_preview"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":12},{""column_name"":""mention_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""spam_filter_enabled"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":14},{""column_name"":""block_unknown_senders"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":15},{""column_name"":""auto_mark_read_delay"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""auto_archive_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""30"",""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",用户消息偏好设置表
-ak_user_point_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""change_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""related_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",积分变动明细表
-ak_user_points,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""total_points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""available_points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",积分账户表
-ak_user_preference_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sport_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""action_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""old_values"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""new_values"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",用户偏好历史记录表
-ak_user_profiles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""avatar_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""background_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""declaration"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status_media_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",用户兴趣画像表
-ak_user_roles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""role_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""scope_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scope_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",用户-角色关联表
-ak_user_sport_preferences,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sport_type_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""preference_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""3"",""ordinal_position"":4},{""column_name"":""frequency_per_week"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""duration_minutes"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""30"",""ordinal_position"":6},{""column_name"":""intensity_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""2"",""ordinal_position"":7},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_favorite"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",用户运动偏好表
-ak_user_training_goals,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""goal_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""current_value"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""unit"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""target_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":9},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",用户训练目标表
-ak_users,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""password_hash"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":4},{""column_name"":""gender"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'other'::character varying"",""ordinal_position"":5},{""column_name"":""birthday"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""height_cm"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""weight_kg"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""avatar_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""region_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""grade_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""role"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'student'::character varying"",""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""auth_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""uid()"",""ordinal_position"":17},{""column_name"":""preferred_language"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""bio"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""phone"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""mall_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":22},{""column_name"":""mall_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":23},{""column_name"":""last_login_ip"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""total_orders"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":25},{""column_name"":""total_spent"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.00"",""ordinal_position"":26},{""column_name"":""user_level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":27},{""column_name"":""points"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":28},{""column_name"":""verified_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":29},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""user_type"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""registration_source"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""real_name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""qq"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""wechat"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""alipay"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36}]",用户表
-ak_users_zhipao,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""password_hash"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":4},{""column_name"":""gender"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'other'::character varying"",""ordinal_position"":5},{""column_name"":""birthday"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""height_cm"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""weight_kg"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""avatar_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""region_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""grade_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""role"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'student'::character varying"",""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""auth_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""preferred_language"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""bio"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""phone"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21}]",This is a duplicate of ak_users
-ak_video_analysis,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""video_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""analysis_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""result"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",视频分析结果表
-ak_video_danmakus,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""time_point"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""color"",""data_type"":""character varying"",""character_maximum_length"":7,""is_nullable"":""YES"",""column_default"":""'#FFFFFF'::character varying"",""ordinal_position"":7},{""column_name"":""font_size"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""25"",""ordinal_position"":8},{""column_name"":""position_type"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":""'scroll'::character varying"",""ordinal_position"":9},{""column_name"":""speed"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":10},{""column_name"":""is_visible"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":12},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16}]",null
-ak_video_play_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""play_position"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""play_duration"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""play_percentage"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""is_completed"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""device_type"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""resolution"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""quality"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""play_speed"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1.0"",""ordinal_position"":11},{""column_name"":""volume"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""100"",""ordinal_position"":12},{""column_name"":""media_type"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",null
-ak_zt,"[{""column_name"":""ztid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ak_zt_ztid_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""ztname"",""data_type"":""character varying"",""character_maximum_length"":60,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""onclick"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""ztnum"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""listtempid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""ztpath"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""zttype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""zturl"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""classid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""islist"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""maxnum"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""reorder"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""intro"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""ztimg"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""zcid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""showzt"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""ztpagekey"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""classtempid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":18},{""column_name"":""myorder"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""usezt"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":20},{""column_name"":""yhid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":21},{""column_name"":""endtime"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":22},{""column_name"":""closepl"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":23},{""column_name"":""checkpl"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":24},{""column_name"":""restb"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":25},{""column_name"":""usernames"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":26},{""column_name"":""addtime"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""pltempid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":28},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":29},{""column_name"":""created_at"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""updated_at"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""spic"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":32},{""column_name"":""slider1"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""slider2"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""slider3"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""slider4"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36},{""column_name"":""slider5"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":37},{""column_name"":""zhiding"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""parentzt"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39}]",null
-analysis_requests,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""query"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""context"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":4},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""result"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-bpm_dm_beikao,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_beikao_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""fp_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""fp_zdj"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""fp_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fp_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""fp_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""fp_css"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",bpm_dm_beikao
-bpm_dm_bq,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_bq_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""bq_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""bq_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""bq_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""bq_css"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""bq_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""bq_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":14},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",bpm_dm_bq
-bpm_dm_cx,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_cx_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""cx_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""cx_card"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""cx_tel"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""cx_comp"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""cx_dbname"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""cx_dbcard"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""cx_dbtel"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""cx_gx"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""cx_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""cx_cxmd"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""cx_cxfs"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""cx_cxtype"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""cx_bltype"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""cx_dah"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""cx_jh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""cx_yh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""cx_jnsxh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""cx_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":19},{""column_name"":""cx_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":20},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":22},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23},{""column_name"":""back_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":24},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":25},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":26},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":27},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":28},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29}]",bpm_dm_cx
-bpm_dm_da,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""da_fenlei"",""data_type"":""real"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""da_years"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""da_bm"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""da_bgqx"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""da_lmmc"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""da_ajtm"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""da_dh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""da_gdh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""da_qsrq"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""da_jsrq"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""da_jnwjs"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""da_ajys"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""da_jnsxh"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""da_hh"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""da_wh"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""da_wjtm"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""da_wjrq"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""da_zrz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""da_mj"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""da_yh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""da_ztc"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""da_bz"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""da_ys"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""da_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""da_qzh"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""da_qzmc"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""da_mlh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""da_js"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""da_ajh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""da_fz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""da_fj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""da_zj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""da_xh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""da_lrr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":35},{""column_name"":""da_qzhh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":36},{""column_name"":""da_kw"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":37},{""column_name"":""da_files"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":39},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":40},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":41},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":42},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":43},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":44},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":45},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":46},{""column_name"":""da_fengpi"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":47},{""column_name"":""da_beikao"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":48},{""column_name"":""pdf_tmp_files"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":49},{""column_name"":""pdf_all_info_file"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":50},{""column_name"":""da_fengpi_file"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":51},{""column_name"":""da_beikao_file"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":52},{""column_name"":""da_reserve1"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":53},{""column_name"":""da_reserve2"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":54},{""column_name"":""da_shuiyin"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":55},{""column_name"":""bjqksmhint"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""'本卷情况说明'::character varying"",""ordinal_position"":56},{""column_name"":""bjqksm"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":57},{""column_name"":""daljrhint"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""'立卷人'::character varying"",""ordinal_position"":58},{""column_name"":""daljr"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":59},{""column_name"":""dajcrhint"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""'检查人'::character varying"",""ordinal_position"":60},{""column_name"":""dajcr"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":61},{""column_name"":""daljsjhint"",""data_type"":""character varying"",""character_maximum_length"":15,""is_nullable"":""YES"",""column_default"":""'立卷时间'::character varying"",""ordinal_position"":62},{""column_name"":""daljsj"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":63},{""column_name"":""isjuan"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::smallint"",""ordinal_position"":64},{""column_name"":""da_showtemplate"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":65},{""column_name"":""pid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":66},{""column_name"":""label"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":67},{""column_name"":""aaa"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":69},{""column_name"":""bbbb"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":71},{""column_name"":""da_path_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":74},{""column_name"":""da_path_full"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":75},{""column_name"":""status"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":76},{""column_name"":""ccccc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":77},{""column_name"":""cccc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":78}]",bpm_dm_da
-bpm_dm_dept,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":3},{""column_name"":""sort"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":4},{""column_name"":""leader_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""phone"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":14},{""column_name"":""showtemplate"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""da_attribute"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""desc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17}]",bpm_dm_dept
-bpm_dm_ew,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_ew_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""ew_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""ew_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""ew_html"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ew_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""ew_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",bpm_dm_ew
-bpm_dm_fcd_model,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":2},{""column_name"":""forminfo"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""desc"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""tablename"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tableid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""optinfo"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""aaa"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",null
-bpm_dm_fj,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_fj_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""fj_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""fj_dah"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""fj_jh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fj_yh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""fj_jnsx"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""fj_path"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""fj_lx"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":15},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",bpm_dm_fj
-bpm_dm_forminfo,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":2},{""column_name"":""forminfo"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""desc"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""tablename"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tableid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""optinfo"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""aaa"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",formcreate info
-bpm_dm_fp,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_fp_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""fp_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""fp_zdj"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""fp_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fp_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""fp_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""fp_css"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",bpm_dm_fp
-bpm_dm_import,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_import_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""content"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":3},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""userid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""username"",""data_type"":""name"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""fromfile"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""desc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-bpm_dm_jb,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_jb_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""jb_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""jb_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""jb_html"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""jb_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""jb_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",bpm_dm_jb
-bpm_dm_jy,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_jy_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""jy_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""jy_card"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""yj_tel"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""yj_comp"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""jy_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""jy_desc"",""data_type"":""character varying"",""character_maximum_length"":800,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""jy_type"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""jy_dah"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""jy_jh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""jy_yh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""jy_jnsxh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""jy_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""jy_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":16},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":17},{""column_name"":""back_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":20},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":21},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":22},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23}]",bpm_dm_jy
-bpm_dm_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_log_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""content"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":3},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""userid"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""username"",""data_type"":""name"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""fromfile"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""desc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8}]",null
-bpm_dm_menu,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":3},{""column_name"":""page"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""icontype"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""desc"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7}]",bpm_dm_menu
-bpm_dm_ml,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_ml_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""ml_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""ml_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""ml_html"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""ml_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""ml_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",bpm_dm_ml
-bpm_dm_parsetemplate,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":2},{""column_name"":""parse_title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""parse_info"",""data_type"":""json"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""descript"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",parse the string to info
-bpm_dm_rw,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_rw_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""rw_dafl"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""rw_ldr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""rw_dqgx"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""rw_smr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""rw_clr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""rw_zjr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""rw_mlzhulr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""rw_mlzhijr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""rw_mlejr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""rw_mlzhongjr"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""rw_cpjf"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""rw_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""rw_dah"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""rw_jh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""rw_yh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""rw_mlh"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""rw_pch"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""rw_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":19},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":21},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":22},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":23},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":24},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":25},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":26},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27}]",bpm_dm_rw
-bpm_dm_showtemplate,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_showtemplate_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""conf"",""data_type"":""character varying"",""character_maximum_length"":1000,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fields"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":12},{""column_name"":""fieldsjsonb"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13}]",bpm_dm_showtemplate
-bpm_dm_sy,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_sy_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""sy_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sy_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sy_html"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sy_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sy_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",bpm_dm_sy
-bpm_dm_yz,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_dm_yz_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""yz_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""yz_zdj"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""yz_html"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""yz_path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""yz_bz"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'0'::bigint"",""ordinal_position"":13},{""column_name"":""result"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",bpm_dm_yz
-bpm_form,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('bpm_form_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""conf"",""data_type"":""character varying"",""character_maximum_length"":1000,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fields"",""data_type"":""character varying"",""character_maximum_length"":5000,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",工作流的表单定义
-bpm_oa_leave,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""reason"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""start_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""day"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""result"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",OA 请假申请表
-bpm_process_definition_ext,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""process_definition_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""model_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""form_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""form_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""form_conf"",""data_type"":""character varying"",""character_maximum_length"":1000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""form_fields"",""data_type"":""character varying"",""character_maximum_length"":5000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""form_custom_create_path"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""form_custom_view_path"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":16}]","Bpm 流程定义的拓展表
-"
-bpm_process_instance_ext,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""start_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""process_definition_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""result"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""form_variables"",""data_type"":""character varying"",""character_maximum_length"":5000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":16}]",工作流的流程实例的拓展
-bpm_task_assign_rule,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""model_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""process_definition_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""task_definition_key"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""options"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",Bpm 任务规则表
-bpm_task_ext,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""assignee_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""task_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""result"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""reason"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""process_instance_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""process_definition_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",工作流的流程任务的拓展表
-bpm_user_group,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""member_user_ids"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",用户组
-chat_conversations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""is_group"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":3},{""column_name"":""owner_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""last_message_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-chat_gateway_heartbeats,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""gateway_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":3},{""column_name"":""uptime_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""mem_rss_mb"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""heap_used_mb"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""mqtt_connected"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""kafka_connected"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""redis_connected"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""msgs_in"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""msgs_out"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""msgs_dropped"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""errors"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""acl_denied"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""kafka_produced"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""extra"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",null
-chat_gateway_nodes,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""mqtt_client_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""region"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""tags"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-chat_messages,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""conversation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sender_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'text'::text"",""ordinal_position"":5},{""column_name"":""reply_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""ingress_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'manual'::text"",""ordinal_position"":10}]",null
-chat_mqtt_downlinks,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""conversation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""topic"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""payload"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""payload_encoding"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'utf8'::text"",""ordinal_position"":6},{""column_name"":""qos"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":7},{""column_name"":""retain"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'pending'::text"",""ordinal_position"":9},{""column_name"":""scheduled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""sent_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""ack_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""last_error"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""correlation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":19},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20}]",null
-chat_notifications,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""conversation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'message'::text"",""ordinal_position"":5},{""column_name"":""is_read"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7}]",null
-chat_participants,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""conversation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""role"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'member'::text"",""ordinal_position"":4},{""column_name"":""joined_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""last_read_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_muted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""settings"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":10}]",null
-chat_sessions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""session_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":""'zh-CN'::character varying"",""ordinal_position"":4},{""column_name"":""context"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""ai_model"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""'gpt-4'::character varying"",""ordinal_position"":6},{""column_name"":""total_messages"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""total_tokens"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""cost_usd"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""last_message_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",AI聊天会话表
-cl_categories,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",null
-cl_content_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""content_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""change_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""old_content_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""new_content_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""changed_fields"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""content_diff"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-cl_crawl_jobs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""site_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":3},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""pages_crawled"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""pages_processed"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""new_content_found"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""errors_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""config"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""log_messages"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",null
-cl_crawl_state,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""site_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""job_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""url_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""depth"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""parent_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""crawl_attempts"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""last_attempt_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""http_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""response_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""content_type"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""content_length"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""retry_after"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18}]",null
-cl_page_content,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""site_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""job_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""url_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""excerpt"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""publish_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""crawl_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""content_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""word_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""language"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":""'zh'::character varying"",""ordinal_position"":17},{""column_name"":""structured_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""raw_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""embedding"",""data_type"":""USER-DEFINED"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""embedding_model"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'text-embedding-ada-002'::character varying"",""ordinal_position"":21},{""column_name"":""ai_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""sentiment_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""confidence_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""entities"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""ai_summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""content_length"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""topic_tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""vector_index_hint"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""is_duplicate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":30},{""column_name"":""is_processed"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":31},{""column_name"":""quality_score"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0"",""ordinal_position"":32},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":33},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":34}]",null
-cl_query_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""query_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""query_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_ip"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""results_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""response_time_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""search_filters"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",null
-cl_sites,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""domain"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""base_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_urls"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""selectors"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'{}'::jsonb"",""ordinal_position"":7},{""column_name"":""max_pages"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1000"",""ordinal_position"":8},{""column_name"":""max_depth"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":9},{""column_name"":""follow_links"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":10},{""column_name"":""respect_robots"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""delay_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1000"",""ordinal_position"":12},{""column_name"":""schedule"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":""'0 */6 * * *'::character varying"",""ordinal_position"":13},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":14},{""column_name"":""incremental_field"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":""'date'::character varying"",""ordinal_position"":15},{""column_name"":""last_crawl_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""last_content_hash"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",null
-cl_system_config,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""config_key"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""config_value"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",null
-cl_user_sessions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""session_name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""permissions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{\""read\"": true, \""admin\"": false, \""write\"": false}'::jsonb"",""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""(now() + '30 days'::interval)"",""ordinal_position"":6}]",null
-ec_activities,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""facility_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""activity_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""activity_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""location"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""max_participants"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""instructor"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""requirements"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""materials_needed"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'scheduled'::character varying"",""ordinal_position"":13},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",null
-ec_activity_participations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""activity_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""participation_status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""enjoyment_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""behavior_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""staff_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-ec_appointments,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""doctor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""scheduled_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""appointment_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""NO"",""column_default"":""'scheduled'::character varying"",""ordinal_position"":6},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10}]",null
-ec_behavior_analysis,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""analysis_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""video_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""timestamp_start"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""timestamp_end"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ai_results"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""confidence_score"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""is_anomaly"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""alert_generated"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""reviewed_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""review_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",null
-ec_care_plans,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""plan_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""plan_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""frequency"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""assigned_caregiver"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",null
-ec_care_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""task_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""caregiver_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""actual_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""care_content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""elder_condition"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""issues_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""photo_urls"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'completed'::character varying"",""ordinal_position"":12},{""column_name"":""rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""supervisor_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""record_type"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17}]",null
-ec_care_tasks,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""care_plan_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""task_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""task_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scheduled_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""assigned_to"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""priority"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'normal'::character varying"",""ordinal_position"":9},{""column_name"":""estimated_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":11},{""column_name"":""due_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",null
-ec_care_units,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""facility_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""unit_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""bed_capacity"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""current_occupancy"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",null
-ec_consultations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""doctor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""scheduled_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""actual_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""consultation_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""chief_complaint"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""diagnosis"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""treatment"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""prescription"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""follow_up_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15}]",null
-ec_devices,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""facility_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""device_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""device_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""device_mac"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""location"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""bind_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":9},{""column_name"":""last_sync"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""extra"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",null
-ec_elders,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""facility_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""care_unit_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""elder_code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""id_card"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""gender"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""birthday"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""nationality"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""religion"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""marital_status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""education"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""occupation"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""admission_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""care_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""room_number"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""bed_number"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""payment_method"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""monthly_fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""deposit"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":22},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":23},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":24}]",null
-ec_emergencies,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""appointment_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""doctor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""emergency_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""severity"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":7},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""occurred_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""handled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""handler_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13}]",null
-ec_emergency_handlings,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""emergency_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""handler_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""handle_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":4},{""column_name"":""handling_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7}]",null
-ec_facilities,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""region_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""license_number"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""contact_phone"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""address"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""capacity"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""current_occupancy"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""admin_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",null
-ec_family_contacts,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""relationship"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""phone"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""address"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_emergency_contact"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""is_primary"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",null
-ec_health_alerts,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""alert_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""severity"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""data_source"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ai_analysis"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""recommendations"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":10},{""column_name"":""acknowledged_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""acknowledged_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""resolved_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""resolved_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",null
-ec_health_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""record_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""record_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""height_cm"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""weight_kg"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""blood_pressure_systolic"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""blood_pressure_diastolic"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""heart_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""temperature"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""blood_sugar"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""medical_history"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""current_medications"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""allergies"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""mental_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""mobility_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""cognitive_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""recorded_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",null
-ec_meal_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""meal_service_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""meal_type"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""meal_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""food_items"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""appetite_level"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""amount_consumed"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""assistance_needed"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""assisted_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",null
-ec_meal_services,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""facility_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""meal_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""meal_type"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""menu_items"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""nutritional_info"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""special_diet_options"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",null
-ec_medical_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""doctor_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""visit_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""visit_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""chief_complaint"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""symptoms"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""diagnosis"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""treatment_plan"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""prescription"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""follow_up_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13}]",null
-ec_medication_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""medication_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""administered_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scheduled_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""actual_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""dosage_given"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""side_effects_observed"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",null
-ec_medications,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""medical_record_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""medication_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""dosage"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""frequency"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""route"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""start_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""end_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""prescribed_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""instructions"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""side_effects"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'active'::character varying"",""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",null
-ec_notification_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""template_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""recipient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""subject"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""delivery_method"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""delivery_status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""sent_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""delivered_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",null
-ec_notification_templates,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""template_code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""template_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""subject_template"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content_template"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""variables"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""delivery_methods"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10}]",null
-ec_service_requests,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""priority"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'normal'::character varying"",""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":6},{""column_name"":""handler_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""handled_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10}]",null
-ec_visits,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""visitor_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""visitor_relationship"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""visitor_id_card"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""visitor_phone"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""visit_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""start_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""end_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""visit_purpose"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""items_brought"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""approved_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""check_in_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""check_out_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""'scheduled'::character varying"",""ordinal_position"":15},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",null
-ec_vital_signs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""elder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""vital_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""systolic_pressure"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""diastolic_pressure"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""heart_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""temperature"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""oxygen_saturation"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""glucose_level"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""measured_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""measured_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""is_abnormal"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""recorded_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",null
-em_customers,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""email"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""company"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::text[]"",""ordinal_position"":5},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""first_seen_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""last_seen_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-em_emails,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""message_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""thread_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""subject"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sender_email"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sender_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""recipient_email"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""content_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""content_html"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""attachments"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":10},{""column_name"":""classification"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":11},{""column_name"":""sentiment"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":12},{""column_name"":""summary"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""embedding"",""data_type"":""USER-DEFINED"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'pending'::text"",""ordinal_position"":15},{""column_name"":""priority"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'normal'::text"",""ordinal_position"":16},{""column_name"":""received_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":19}]",null
-em_knowledge_base,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""category"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""embedding"",""data_type"":""USER-DEFINED"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-em_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""action"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""details"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":3},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-em_replies,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""email_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""version"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":4},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'ai_draft'::text"",""ordinal_position"":5},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'draft'::text"",""ordinal_position"":6},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":9}]",null
-event_records,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('event_records_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""menjin_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""major"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""minor"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""card_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""card_reader_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""door_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""employee_no_string"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""serial_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""user_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""current_verify_mode"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""mask"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""picture_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""face_rect_height"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""face_rect_width"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""face_rect_x"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""face_rect_y"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""stored"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::smallint"",""ordinal_position"":20},{""column_name"":""stored_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""down_local"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::smallint"",""ordinal_position"":22}]",null
-event_records_bak,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":1},{""column_name"":""menjin_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""major"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""minor"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""card_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""card_reader_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""door_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""employee_no_string"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""serial_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""user_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""current_verify_mode"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""mask"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""picture_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""face_rect_height"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""face_rect_width"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""face_rect_x"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""face_rect_y"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""stored"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""stored_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""down_local"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22}]",null
-event_records_req_mission,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('event_records_req_mission_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""menjin_no"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""last_success_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""last_req_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""total_request"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""target_ip"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""cur_cookie"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""cur_session_tag"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",null
-event_valid_data,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('event_valid_data_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""username"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""cardno"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""certificatenumber"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""first_alarmstarttime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""valid_records"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6}]",null
-event_valid_data_60,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""username"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""certificatenumber"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""total_records"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""periodmatch"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""isvalid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""auditorname"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""auditorid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""audit_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""first_alarmstarttime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""event_door_cardno"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""event_door_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""judge"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::bigint"",""ordinal_position"":14},{""column_name"":""duration"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'0'::numeric"",""ordinal_position"":15},{""column_name"":""addtype"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16}]",null
-event_valid_data_60_bak,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":1},{""column_name"":""username"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""certificatenumber"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""total_records"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""periodmatch"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""isvalid"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""auditorname"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""auditorid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""audit_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""first_alarmstarttime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""event_door_cardno"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""event_door_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""judge"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-eventdoor,"[{""column_name"":""major"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":1},{""column_name"":""minor"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""cardno"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""cardtype"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""cardreaderno"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""doorno"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""employeenostring"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""serialno"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""usertype"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""currentverifymode"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""mask"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""netuser"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""remotehostaddr"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",null
-eventtargets,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""channel"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""alarmstarttime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""alarmendtime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""triggerchannel"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""pictureurl"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""prerecordtimeseconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""postrecordtimeseconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""starttime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""endtime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""eventtype"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""metadatamatches"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""alarmresultauxeventtype"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""alarmresult"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""accesscontrollerevent"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""iotd"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",null
-fhir_resource_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""resource_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""resource_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""version"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""last_updated"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""resource"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":7}]",null
-fhir_resources,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""resource_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""resource_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""version"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":4},{""column_name"":""last_updated"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""resource"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6}]",null
-flw_channel_definition,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""implementation_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",null
-flw_ev_databasechangelog,"[{""column_name"":""id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""filename"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""dateexecuted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""orderexecuted"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""exectype"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""md5sum"",""data_type"":""character varying"",""character_maximum_length"":35,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""comments"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tag"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""liquibase"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""contexts"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""labels"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deployment_id"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-flw_ev_databasechangeloglock,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""locked"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lockgranted"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""lockedby"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-flw_event_definition,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""version_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""resource_name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""description_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",null
-flw_event_deployment,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""deploy_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""parent_deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",null
-flw_event_resource,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""deployment_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""resource_bytes_"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-flw_ru_batch,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""search_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""search_key2_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""complete_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""batch_doc_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10}]",null
-flw_ru_batch_part,"[{""column_name"":""id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""rev_"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""batch_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scope_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sub_scope_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""scope_type_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""search_key_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""search_key2_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""create_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""complete_time_"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""status_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""result_doc_id_"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""tenant_id_"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14}]",null
-health_metrics,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""heart_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""blood_oxygen"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""steps"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""calories"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""latitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""longitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""activity_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""timestamp"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",null
-his_allergy_intolerance,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""clinical_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'active'::text"",""ordinal_position"":4},{""column_name"":""verification_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'confirmed'::text"",""ordinal_position"":5},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""category"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""display_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""criticality"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""last_occurrence"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""recorded_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""recorder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":15}]",null
-his_care_plan,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""encounter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'active'::text"",""ordinal_position"":5},{""column_name"":""intent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'order'::text"",""ordinal_position"":6},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""start_period"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""end_period"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""authored_on"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""author_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":14}]",null
-his_charge_item,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""encounter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""display_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""quantity"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":8},{""column_name"":""unit_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""total_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""occurrence_day"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_DATE"",""ordinal_position"":11},{""column_name"":""entered_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""compliance_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'unchecked'::text"",""ordinal_position"":13},{""column_name"":""violation_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""violation_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":17}]",null
-his_condition,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""encounter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""clinical_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""verification_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""category"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""severity"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""code_system"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'ICD-10'::text"",""ordinal_position"":10},{""column_name"":""display_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""on_set_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""abatement_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""recorded_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""recorder_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""audit_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'pending'::text"",""ordinal_position"":16},{""column_name"":""risk_level"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'normal'::text"",""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":19}]",null
-his_encounter,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""class"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""department"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""service_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""reason_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""reason_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13}]",null
-his_medication_request,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""encounter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""intent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""category"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""medication_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""medication_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""dosage_instruction"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""quantity"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""quantity_unit"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""authored_on"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""requester_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""audit_status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'pending'::text"",""ordinal_position"":15},{""column_name"":""risk_level"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'normal'::text"",""ordinal_position"":16},{""column_name"":""audit_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":19}]",null
-his_observation,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""patient_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""encounter_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""value_quantity"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""value_unit"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""value_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""value_boolean"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""value_datetime"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""effective_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""issued_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""performer_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":17}]",null
-his_patient,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""hospital_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""external_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""full_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""gender"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""birth_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""phone"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""email"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""id_number"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""address"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13}]",null
-hw_student,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('homework_homework_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""student_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""assignment_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""answer_text"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""videos"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""images"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""checkin_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""checkin_time"",""data_type"":""time without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""'submitted'::character varying"",""ordinal_position"":9},{""column_name"":""grade"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""teacher_comments"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""feedback_files"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""is_graded"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":13},{""column_name"":""location"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""latitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""longitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""device_id"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""is_approved"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":19},{""column_name"":""approver_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""remarks"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":22},{""column_name"":""updated_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23},{""column_name"":""responseall"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""approve_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""ex_times"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""ex_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":27}]",null
-hw_teacher,"[{""column_name"":""teacher_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""due_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""updated_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""review_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""text_content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""images"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""videos"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""additional_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":""'pending'::character varying"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":14},{""column_name"":""start_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""targets"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('hw_teacher_id_seq'::regclass)"",""ordinal_position"":17},{""column_name"":""ex_times"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":18},{""column_name"":""ex_types"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":19}]",null
-infra_api_access_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trace_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""application_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""request_method"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""request_url"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""request_params"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""response_body"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""user_agent"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""operate_module"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":12},{""column_name"":""operate_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":13},{""column_name"":""operate_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""begin_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""result_code"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":18},{""column_name"":""result_msg"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":20},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":21},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":22},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":24},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":25}]",API 访问日志表
-infra_api_error_log,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trace_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""application_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""request_method"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""request_url"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""request_params"",""data_type"":""character varying"",""character_maximum_length"":8000,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""user_agent"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""exception_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""exception_name"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""exception_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""exception_root_cause_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""exception_stack_trace"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""exception_class_name"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""exception_file_name"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""exception_method_name"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""exception_line_number"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":19},{""column_name"":""process_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":20},{""column_name"":""process_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""process_user_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":22},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":23},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":24},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":25},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":26},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":28}]",系统异常日志
-infra_codegen_column,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""table_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""column_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""data_type"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""column_comment"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""nullable"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""primary_key"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ordinal_position"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""java_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""java_field"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""dict_type"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""example"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":12},{""column_name"":""create_operation"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""update_operation"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""list_operation"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""list_operation_condition"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":""'='::character varying"",""ordinal_position"":16},{""column_name"":""list_operation_result"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":17},{""column_name"":""html_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":20},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":21},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":22},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":23}]",代码生成表字段定义
-infra_codegen_table,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""data_source_config_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""scene"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":3},{""column_name"":""table_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""table_comment"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""module_name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""business_name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""class_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""class_comment"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""template_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":12},{""column_name"":""front_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""parent_menu_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""master_table_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""sub_join_column_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""sub_join_many"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""tree_parent_column_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""tree_name_column_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":20},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":21},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":22},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":24}]",代码生成表定义
-infra_config,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""config_key"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""value"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""visible"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",参数配置表
-infra_data_source_config,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""password"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",数据源配置表
-infra_file,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""config_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":3},{""column_name"":""path"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""size"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",文件表
-infra_file_config,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""storage"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":4},{""column_name"":""master"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""config"",""data_type"":""character varying"",""character_maximum_length"":4096,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",文件配置表
-infra_file_content,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""config_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""path"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9}]",文件表
-infra_job,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""handler_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""handler_param"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""cron_expression"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""retry_interval"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""monitor_timeout"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]",定时任务表
-infra_job_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""job_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""handler_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""handler_param"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":4},{""column_name"":""execute_index"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""begin_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""result"",""data_type"":""character varying"",""character_maximum_length"":4000,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",定时任务日志表
-infra_test_demo,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""category"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",字典类型表
-location_gateways,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""organization_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""campus_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""area_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""building_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""floor_label"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""room_label"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""system_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""serial_number"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""latitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""longitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""altitude_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""coordinate_system"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'WGS84'::text"",""ordinal_position"":15},{""column_name"":""install_height_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""orientation_deg"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""coverage_radius_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""coverage_notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""lan_mac"",""data_type"":""macaddr"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""upstream_mac"",""data_type"":""macaddr"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""firmware_version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""hardware_version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""heartbeat_interval_s"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'active'::text"",""ordinal_position"":26},{""column_name"":""last_online_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""last_maintenance_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""extra"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":31},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":32},{""column_name"":""deleted_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33}]",Registry of 2.4G gateways installed across campuses.
-market_activity,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('market_activity_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""activity_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""start_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""invalid_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""delete_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""time_limited_discount"",""data_type"":""character varying"",""character_maximum_length"":2000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""full_privilege"",""data_type"":""character varying"",""character_maximum_length"":2000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":15},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16}]",促销活动
-medical_records,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""gender"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""birthdate"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""id_number"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""phone"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""medical_card_no"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""hospital"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""department"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""blood_type"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""height"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""weight"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""allergies"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""medical_history"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""diagnosis_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""diagnosis"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""treatment_plan"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""medication"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""notes"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""attachments"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":22},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":23},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":24}]",用户医疗档案表
-member_address,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_address_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""area_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""detail_address"",""data_type"":""character varying"",""character_maximum_length"":250,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""default_status"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12}]",null
-member_brokerage_record,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_brokerage_record_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""biz_id"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""biz_type"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""total_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""frozen_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""unfreeze_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":16},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":17}]",null
-member_group,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_group_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",用户分组
-member_level,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_level_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""experience"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""discount_percent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""background_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]",会员等级
-member_sign_in_config,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_sign_in_config_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""day"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""point"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""experience"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13}]",null
-member_sign_in_record,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_sign_in_record_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""day"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""point"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""experience"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":12}]",null
-member_tag,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_tag_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":4},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8}]",null
-member_user,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('member_user_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sex"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""birthday"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""area_id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""mark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""point"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""avatar"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'1'::smallint"",""ordinal_position"":10},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""YES"",""column_default"":""''''''::character varying"",""ordinal_position"":11},{""column_name"":""password"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""register_ip"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""''''''::character varying"",""ordinal_position"":13},{""column_name"":""login_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""login_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""tag_ids"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""level_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""experience"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""group_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":20},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":21},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":22},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":23},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":24},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":25},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":26},{""column_name"":""cardno"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""certificationnumber"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""dept_ids"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29},{""column_name"":""role_ids"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""avatar_file"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31}]",会员表
-member_user_bak,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""avatar"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""password"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""register_ip"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""login_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""login_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",用户
-messages,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""username"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""file_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""file_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""file_size"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""thumbnail_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""channel"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11}]",null
-ml_brands,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""logo_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""website"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""cid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""nextval('ml_brands_cid_seq'::regclass)"",""ordinal_position"":9}]",品牌表
-ml_browse_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""browse_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",用户浏览历史表
-ml_categories,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""slug"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""icon_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""banner_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":9},{""column_name"":""path"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":11},{""column_name"":""seo_title"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""seo_description"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15},{""column_name"":""cid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""nextval('ml_categories_cid_seq'::regclass)"",""ordinal_position"":16}]",商品分类表
-ml_coupon_templates,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""coupon_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""discount_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""discount_value"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""min_order_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""max_discount_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""total_quantity"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""per_user_limit"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":11},{""column_name"":""usage_limit"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":12},{""column_name"":""applicable_products"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":13},{""column_name"":""applicable_categories"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":14},{""column_name"":""start_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""end_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",优惠券模板表
-ml_delivery_drivers,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""real_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""id_card"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""driver_license"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""vehicle_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""vehicle_number"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""service_areas"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":8},{""column_name"":""work_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":9},{""column_name"":""current_lat"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""current_lng"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""rating_avg"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.00"",""ordinal_position"":12},{""column_name"":""rating_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""order_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",配送员信息表
-ml_delivery_tasks,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""order_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""driver_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""pickup_address"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""delivery_address"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""distance"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""estimated_time"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""delivery_fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":9},{""column_name"":""assigned_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""picked_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""delivered_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""delivery_code"",""data_type"":""character varying"",""character_maximum_length"":10,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""remark"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""failure_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":16},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17}]",配送任务表
-ml_order_items,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""order_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sku_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""product_name"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sku_name"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""specifications"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":7},{""column_name"":""image_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""quantity"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""total_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12}]",订单商品表
-ml_orders,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""order_no"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""merchant_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""product_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""discount_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""shipping_fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""total_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""paid_amount"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""shipping_address"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""order_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":11},{""column_name"":""payment_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":12},{""column_name"":""shipping_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":13},{""column_name"":""paid_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""shipped_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""delivered_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""remark"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""merchant_memo"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""cancel_reason"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":21},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":22},{""column_name"":""cid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""nextval('ml_orders_cid_seq'::regclass)"",""ordinal_position"":23}]",订单表
-ml_product_reviews,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""order_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""order_item_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""merchant_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""rating"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""images"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":9},{""column_name"":""is_anonymous"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""merchant_reply"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""merchant_replied_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",商品评价表
-ml_product_skus,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sku_code"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""specifications"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":4},{""column_name"":""price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""market_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""cost_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""warning_stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""10"",""ordinal_position"":9},{""column_name"":""image_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""weight"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14}]",商品SKU表
-ml_product_specs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""spec_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""spec_values"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'[]'::jsonb"",""ordinal_position"":4},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",商品规格表
-ml_products,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""category_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""brand_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""product_code"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""subtitle"",""data_type"":""character varying"",""character_maximum_length"":1000,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""main_image_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""image_urls"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":10},{""column_name"":""video_urls"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":11},{""column_name"":""base_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""market_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""cost_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""total_stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""available_stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""min_order_qty"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":17},{""column_name"":""max_order_qty"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""weight"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""dimensions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":21},{""column_name"":""is_featured"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":22},{""column_name"":""is_new"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":23},{""column_name"":""is_hot"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":24},{""column_name"":""view_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":25},{""column_name"":""sale_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":26},{""column_name"":""favorite_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":27},{""column_name"":""rating_avg"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.00"",""ordinal_position"":28},{""column_name"":""rating_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":29},{""column_name"":""seo_title"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30},{""column_name"":""seo_description"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":31},{""column_name"":""seo_keywords"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":32},{""column_name"":""slug"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":33},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":34},{""column_name"":""attributes"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":35},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":36},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":37},{""column_name"":""published_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":38},{""column_name"":""cid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""nextval('ml_products_cid_seq'::regclass)"",""ordinal_position"":39}]",商品表
-ml_regions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""parent_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""level"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",地区表
-ml_search_history,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""keyword"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""result_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""ip_address"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",搜索记录表
-ml_shopping_cart,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""product_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sku_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""quantity"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""selected"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",购物车表
-ml_shops,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""shop_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""shop_logo"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""shop_banner"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""business_license"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""contact_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""contact_phone"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""contact_email"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""address"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""business_hours"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":13},{""column_name"":""product_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""order_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""rating_avg"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.00"",""ordinal_position"":16},{""column_name"":""rating_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""verified_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":20},{""column_name"":""cid"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""nextval('ml_shops_cid_seq'::regclass)"",""ordinal_position"":21}]",店铺信息表
-ml_subscription_plans,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""plan_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""features"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""currency"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'CNY'::text"",""ordinal_position"":7},{""column_name"":""billing_period"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""trial_days"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":10},{""column_name"":""sort_order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13}]",null
-ml_system_configs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""config_key"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""config_value"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",系统配置表
-ml_user_addresses,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""receiver_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""receiver_phone"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""province"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""city"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""district"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""street"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""address_detail"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""postal_code"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""is_default"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""label"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""latitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""longitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""delivery_instructions"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""business_hours"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":17},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":19}]",用户地址表
-ml_user_coupons,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""template_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""coupon_code"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""used_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""order_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""received_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""expire_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9}]",用户优惠券表
-ml_user_favorites,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""target_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""target_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",用户收藏表
-ml_user_profiles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":3},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":4},{""column_name"":""real_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""id_card"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""business_license"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""credit_score"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""100"",""ordinal_position"":8},{""column_name"":""verification_status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""verification_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":10},{""column_name"":""preferences"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":11},{""column_name"":""emergency_contact"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""service_areas"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":14},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":15}]",商城用户扩展信息表
-ml_user_subscriptions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""plan_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""'active'::text"",""ordinal_position"":4},{""column_name"":""start_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""end_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""next_billing_date"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""auto_renew"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""cancel_at_period_end"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":9},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":12}]",null
-ocr_recognition_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""document_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""file_url"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""recognition_result"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7}]",null
-pay_app,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""pay_notify_url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""refund_notify_url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""merchant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",支付应用信息
-pay_channel,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""fee_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""merchant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""app_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""config"",""data_type"":""character varying"",""character_maximum_length"":4096,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]","支付渠道
-"
-pay_merchant,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""no"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""short_name"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",支付商户信息
-pay_notify_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""task_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""notify_times"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""response"",""data_type"":""character varying"",""character_maximum_length"":2048,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",支付通知 App 的日志
-pay_notify_task,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""app_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""data_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""merchant_order_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""next_notify_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""last_execute_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""notify_times"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""max_notify_times"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""notify_url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":17},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":18}]","商户支付、退款等的通知
-"
-pay_order,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""app_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""channel_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""channel_code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""merchant_order_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""subject"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""body"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""notify_url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""notify_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""amount"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""channel_fee_rate"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""channel_fee_amount"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""expire_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""success_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""notify_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""success_extension_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""refund_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":20},{""column_name"":""refund_times"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":21},{""column_name"":""refund_amount"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":22},{""column_name"":""channel_user_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""channel_order_no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":26},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":28},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":29},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":30}]","支付订单
-"
-pay_order_extension,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""order_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""channel_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""channel_code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""channel_extras"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""channel_notify_data"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]","支付订单
-"
-pay_refund,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""merchant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""app_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""channel_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""channel_code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""order_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""trade_no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""merchant_order_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""merchant_refund_no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""notify_url"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""notify_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""pay_amount"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""refund_amount"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""reason"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":16},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""channel_order_no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":18},{""column_name"":""channel_refund_no"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""channel_error_code"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""channel_error_msg"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""channel_extras"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""expire_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""success_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""notify_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":27},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":28},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":29},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":30},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":31}]",退款订单
-promotion_article,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_article_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""category_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""author"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""pic_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""introduction"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""browse_count"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""spu_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""recommend_hot"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""recommend_banner"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""content"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":16},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":17},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":18},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":19}]",文章管理表
-promotion_article_category,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_article_category_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""pic_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11}]",文章分类表
-promotion_combination_activity,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_combination_activity_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""spu_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""total_limit_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""single_limit_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""user_size"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""total_num"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""success_num"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""order_user_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""virtual_group"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":13},{""column_name"":""limit_duration"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":15},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":16},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":19},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":20}]",拼团活动
-promotion_coupon,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_coupon_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""template_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""take_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""useprice"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""valid_start_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""valid_end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""product_scope"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""product_spu_ids"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""discount_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""discount_percent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""discount_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""discount_limit_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""use_order_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""use_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":18},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":19},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":20},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":21},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":22}]",优惠劵
-promotion_coupon_template,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_coupon_template_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""total_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""take_limit_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""take_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""use_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""product_scope"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""product_spu_ids"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""validity_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""valid_start_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""valid_end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""fixed_start_term"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""fixed_end_term"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""discount_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":15},{""column_name"":""discount_percent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""discount_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""discount_limit_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""take_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""use_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":21},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":22},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":23},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":24},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":25}]",优惠劵模板
-promotion_diy_page,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_diy_page_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""template_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""preview_pic_urls"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""property"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12}]",装修页面
-promotion_diy_template,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_diy_template_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""used"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""used_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""preview_pic_urls"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""property"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",null
-promotion_reward_activity,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_reward_activity_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""start_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""end_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""condition_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""product_scope"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""product_spu_ids"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""rules"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":15}]",满减送活动
-promotion_seckill_activity,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_seckill_activity_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""spu_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""start_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""config_ids"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""order_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""user_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""total_price"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""total_limit_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""single_limit_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""total_stock"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":20},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":21},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":22}]",秒杀活动
-promotion_seckill_config,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('promotion_seckill_config_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""start_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""end_time"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""pic_url"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""status"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12}]",秒杀时段配置
-ps_message_processing_logs,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""processing_step"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""started_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""completed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""duration_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""details"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""error_details"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9}]",消息处理日志表 - 记录消息处理过程的详细日志
-ps_push_messages,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""message_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""push_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""source_ip"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""raw_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""parsed_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""received_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""processing_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":13},{""column_name"":""processed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""error_message"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""retry_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":17},{""column_name"":""category"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""tags"",""data_type"":""ARRAY"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""checksum"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""is_duplicate"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":21},{""column_name"":""original_message_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""latitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":23},{""column_name"":""longitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":24},{""column_name"":""location_accuracy"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":25},{""column_name"":""location_timestamp"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":26},{""column_name"":""search_vector"",""data_type"":""tsvector"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":27},{""column_name"":""is_deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":28},{""column_name"":""deleted_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":29}]",推送消息主表 - 存储所有接收到的推送消息
-ps_push_msg_raw,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""message_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""push_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""source_ip"",""data_type"":""inet"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""user_agent"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""raw_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":12},{""column_name"":""processing_status"",""data_type"":""character varying"",""character_maximum_length"":20,""is_nullable"":""YES"",""column_default"":""'pending'::character varying"",""ordinal_position"":13},{""column_name"":""is_deleted"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":28},{""column_name"":""checksum"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":30}]",This is a duplicate of ps_push_messages
-ps_push_types,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('ps_push_types_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""type_code"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""type_name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""default_priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""5"",""ordinal_position"":5},{""column_name"":""validation_schema"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",推送类型配置表 - 定义各种推送消息类型及其验证规则
-ps_system_stats,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""stat_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_DATE"",""ordinal_position"":2},{""column_name"":""stat_hour"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""EXTRACT(hour FROM now())"",""ordinal_position"":3},{""column_name"":""push_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""message_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""success_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""error_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":7},{""column_name"":""avg_processing_time_ms"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":9}]",系统统计表 - 存储系统运行统计数据
-qrtz_blob_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""blob_data"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-qrtz_calendars,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""calendar_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""calendar"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3}]",null
-qrtz_cron_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""cron_expression"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""time_zone_id"",""data_type"":""character varying"",""character_maximum_length"":80,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",null
-qrtz_fired_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""entry_id"",""data_type"":""character varying"",""character_maximum_length"":95,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""instance_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""fired_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""sched_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""state"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""job_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""job_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""is_nonconcurrent"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""requests_recovery"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13}]",null
-qrtz_job_details,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""job_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""job_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":250,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""job_class_name"",""data_type"":""character varying"",""character_maximum_length"":250,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""is_durable"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""is_nonconcurrent"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""is_update_data"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""requests_recovery"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""job_data"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10}]",null
-qrtz_locks,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""lock_name"",""data_type"":""character varying"",""character_maximum_length"":40,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2}]",null
-qrtz_paused_trigger_grps,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2}]",null
-qrtz_scheduler_state,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""instance_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""last_checkin_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""checkin_interval"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4}]",null
-qrtz_simple_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""repeat_count"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""repeat_interval"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""times_triggered"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6}]",null
-qrtz_simprop_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""str_prop_1"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""str_prop_2"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""str_prop_3"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""int_prop_1"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""int_prop_2"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""long_prop_1"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""long_prop_2"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""dec_prop_1"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""dec_prop_2"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""bool_prop_1"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""bool_prop_2"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14}]",null
-qrtz_triggers,"[{""column_name"":""sched_name"",""data_type"":""character varying"",""character_maximum_length"":120,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trigger_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trigger_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""job_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""job_group"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":250,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""next_fire_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""prev_fire_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""priority"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""trigger_state"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""trigger_type"",""data_type"":""character varying"",""character_maximum_length"":8,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""start_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""end_time"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""calendar_name"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""misfire_instr"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""job_data"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16}]",null
-realtime_device_states,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""room_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""batch_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":4}]",null
-sessions,"[{""column_name"":""id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""messages"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'[]'::jsonb"",""ordinal_position"":3},{""column_name"":""context"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":4},{""column_name"":""model"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-ss_blood_pressure,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""systolic"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""diastolic"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_ecg_measurements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""duration_sec"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sample_rate_hz"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_ecg_samples,"[{""column_name"":""ecg_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""sample_index"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""voltage_mv"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3}]",null
-ss_eeg_measurements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""duration_sec"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sample_rate_hz"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_eeg_samples,"[{""column_name"":""eeg_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""sample_index"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""voltage_uv"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3}]",null
-ss_emg_measurements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""duration_sec"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sample_rate_hz"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_emg_samples,"[{""column_name"":""emg_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""sample_index"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""voltage_mv"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3}]",null
-ss_energy_expenditure,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""calories_kcal"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""met"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_fall_events,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""fall_detected"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""event_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_glucose,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""glucose_mg_dl"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_gsr,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""gsr_us"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_heart_rate,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""heart_rate_bpm"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_hrv,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""hrv_rmssd"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""hrv_sdnn"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_lactate,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""lactate_mmol_l"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_location,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""latitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""longitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""altitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""speed"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""heading"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-ss_posture,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""posture"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_ppg_measurements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""duration_sec"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sample_rate_hz"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_ppg_samples,"[{""column_name"":""ppg_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""sample_index"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""amplitude"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3}]",null
-ss_respiratory_rate,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""respiratory_rate"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_respiratory_sounds,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""audio_data"",""data_type"":""bytea"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_sensor_measurements,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""measurement_type"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""measured_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""unit"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""raw_data"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":8}]",null
-ss_skin_temperature,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""skin_temp_c"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_sleep_metrics,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""sleep_stage"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""duration_sec"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-ss_spo2,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""spo2_percent"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_steps,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""step_count"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_stride_length,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""stride_cm"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_temperature,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""temperature_c"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_tidal_volume,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""tidal_volume_ml"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4}]",null
-ss_vo2,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""measurement_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""vo2_ml_per_min"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""vo2max_ml_per_min"",""data_type"":""double precision"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":5}]",null
-stock_accounts,"[{""column_name"":""simulation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""cash"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""positions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":3},{""column_name"":""used_fees"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5}]",null
-stock_app_users,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""device_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""is_anonymous"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":3},{""column_name"":""display_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":5},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",null
-stock_basic,"[{""column_name"":""ts_code"",""data_type"":""character varying"",""character_maximum_length"":12,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""symbol"",""data_type"":""character varying"",""character_maximum_length"":12,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""area"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""industry"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""fullname"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""enname"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""market"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""exchange"",""data_type"":""character varying"",""character_maximum_length"":8,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""curr_type"",""data_type"":""character varying"",""character_maximum_length"":8,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""list_status"",""data_type"":""character varying"",""character_maximum_length"":2,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""list_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""delist_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""is_hs"",""data_type"":""character varying"",""character_maximum_length"":2,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""cnspell"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15},{""column_name"":""order"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":17},{""column_name"":""updated_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":18}]",null
-stock_devices,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""app_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""device_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""platform"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""model"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""system"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""app_version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""last_seen_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-stock_entitlements,"[{""column_name"":""app_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""plan_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""effective"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-stock_namechange,"[{""column_name"":""id"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('stock_namechange_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""ts_code"",""data_type"":""character varying"",""character_maximum_length"":12,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""start_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""end_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""change_reason"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",null
-stock_orders,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""simulation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""symbol"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""side"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""qty"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'created'::text"",""ordinal_position"":7},{""column_name"":""placed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8},{""column_name"":""executed_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10}]",null
-stock_plans,"[{""column_name"":""id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""price_cents"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""interval"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""quotas"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6}]",null
-stock_positions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""simulation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""symbol"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""qty"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""avg_price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":6}]",null
-stock_simulation_results,"[{""column_name"":""simulation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""final_cash"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""final_positions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":3},{""column_name"":""total_pnl"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""total_fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""trades_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7}]",null
-stock_simulations,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""app_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""title"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""symbol"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""interval"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'1D'::text"",""ordinal_position"":5},{""column_name"":""start_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""end_date"",""data_type"":""date"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""initial_funds"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""100000.00"",""ordinal_position"":8},{""column_name"":""fee_rate"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0.0003"",""ordinal_position"":9},{""column_name"":""allow_t0"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":10},{""column_name"":""allow_short"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":11},{""column_name"":""hide_date"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""false"",""ordinal_position"":12},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'running'::text"",""ordinal_position"":14}]",null
-stock_subscriptions,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""app_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""plan_id"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""current_period_end"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""provider"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""provider_ref"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":8}]",null
-stock_symbols,"[{""column_name"":""symbol"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""exchange"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""metadata"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4}]",null
-stock_trades,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""order_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""simulation_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""symbol"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""qty"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""price"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""traded_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":7},{""column_name"":""fee"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":8}]",null
-stock_usage_counters,"[{""column_name"":""app_user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""key"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""value"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""window_start"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""window_end"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5}]",null
-system_dept,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""leader_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""phone"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""name_alias"",""data_type"":""character varying"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":15}]",部门表
-system_dict_data,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":2},{""column_name"":""label"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""value"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""dict_type"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""color_type"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""css_class"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]",字典数据表
-system_dict_type,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""deleted_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11}]",字典类型表
-system_error_code,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""application_name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""code"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""message"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""memo"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",错误码表
-system_login_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""log_type"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""trace_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""result"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""user_agent"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",系统访问记录
-system_mail_account,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""mail"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""password"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""host"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""port"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""ssl_enable"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":7},{""column_name"":""starttls_enable"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",邮箱账号表
-system_mail_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""to_mail"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""account_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""from_mail"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""template_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""template_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""template_nickname"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""template_title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""template_content"",""data_type"":""character varying"",""character_maximum_length"":10240,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""template_params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""send_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""send_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""send_message_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":15},{""column_name"":""send_exception"",""data_type"":""character varying"",""character_maximum_length"":4096,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":16},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":20},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":21}]",邮件日志表
-system_mail_template,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""account_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""content"",""data_type"":""character varying"",""character_maximum_length"":10240,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",邮件模版表
-system_menu,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""permission"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""parent_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""path"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""icon"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""YES"",""column_default"":""'#'::character varying"",""ordinal_position"":8},{""column_name"":""component"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""component_name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":10},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""visible"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":12},{""column_name"":""keep_alive"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":13},{""column_name"":""always_show"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""true"",""ordinal_position"":14},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":15},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":16},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19}]",菜单权限表
-system_notice,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""title"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""content"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",通知公告表
-system_notify_message,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""template_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""template_code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""template_nickname"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""template_content"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""template_type"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""template_params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""read_status"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""read_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":16},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":17}]",站内信消息表
-system_notify_template,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""content"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]",站内信模板表
-system_oauth2_access_token,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_info"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""access_token"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""refresh_token"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""scopes"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":8},{""column_name"":""expires_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",OAuth2 访问令牌
-system_oauth2_approve,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scope"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""approved"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""false"",""ordinal_position"":6},{""column_name"":""expires_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",OAuth2 批准表
-system_oauth2_client,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""secret"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""logo"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""access_token_validity_seconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""refresh_token_validity_seconds"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""redirect_uris"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""authorized_grant_types"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""scopes"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":12},{""column_name"":""auto_approve_scopes"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":13},{""column_name"":""authorities"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":14},{""column_name"":""resource_ids"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":15},{""column_name"":""additional_information"",""data_type"":""character varying"",""character_maximum_length"":4096,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":16},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":19},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":20},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":21}]",OAuth2 客户端表
-system_oauth2_code,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""scopes"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""expires_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""redirect_uri"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":8},{""column_name"":""state"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",OAuth2 授权码表
-system_oauth2_refresh_token,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""refresh_token"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""scopes"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""expires_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",OAuth2 刷新令牌
-system_operate_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""trace_id"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":4},{""column_name"":""type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""sub_type"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""biz_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""action"",""data_type"":""character varying"",""character_maximum_length"":2000,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""extra"",""data_type"":""character varying"",""character_maximum_length"":2000,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""request_method"",""data_type"":""character varying"",""character_maximum_length"":16,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""request_url"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":12},{""column_name"":""user_agent"",""data_type"":""character varying"",""character_maximum_length"":200,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":13},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":16},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":17},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":18},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19}]",操作日志记录 V2 版本
-system_post,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",岗位信息表
-system_role,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""sort"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""data_scope"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""1"",""ordinal_position"":5},{""column_name"":""data_scope_dept_ids"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",角色信息表
-system_role_menu,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""role_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""menu_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":5},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9}]",角色和菜单关联表
-system_sensitive_word,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""tags"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",敏感词
-system_sms_channel,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""signature"",""data_type"":""character varying"",""character_maximum_length"":12,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""api_key"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""api_secret"",""data_type"":""character varying"",""character_maximum_length"":128,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""callback_url"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13}]",短信渠道
-system_sms_code,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":6,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""create_ip"",""data_type"":""character varying"",""character_maximum_length"":15,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""scene"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""today_index"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""used"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""used_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""used_ip"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":9},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":10},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":11},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",手机验证码
-system_sms_log,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""channel_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""channel_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""template_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""template_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""template_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""template_content"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""template_params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""api_template_id"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""send_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""send_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""api_send_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":15},{""column_name"":""api_send_msg"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":16},{""column_name"":""api_request_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":17},{""column_name"":""api_serial_no"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":18},{""column_name"":""receive_status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""receive_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""api_receive_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":21},{""column_name"":""api_receive_msg"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":22},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":23},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":24},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":25},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":26},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":27}]",短信日志
-system_sms_template,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""content"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""params"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":8},{""column_name"":""api_template_id"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""channel_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""channel_code"",""data_type"":""character varying"",""character_maximum_length"":63,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":11},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":12},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":13},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":14},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":15},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":16}]",短信模板
-system_social_client,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""social_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""client_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""client_secret"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""agent_id"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":14}]",社交客户端表
-system_social_user,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""openid"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""token"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":4},{""column_name"":""raw_token_info"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""avatar"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""raw_user_info"",""data_type"":""character varying"",""character_maximum_length"":1024,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""code"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""state"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":16}]",社交用户表
-system_social_user_bind,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""social_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""social_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",社交绑定表
-system_tenant,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""contact_user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""contact_name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""contact_mobile"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":6},{""column_name"":""website"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""package_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""expire_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":9},{""column_name"":""account_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":12},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":14},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":15}]",租户表
-system_tenant_package,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":256,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""menu_ids"",""data_type"":""character varying"",""character_maximum_length"":4096,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",租户套餐表
-system_user_post,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":2},{""column_name"":""post_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":3},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":5},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9}]",用户岗位表
-system_user_role,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""role_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":5},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9}]",用户和角色关联表
-system_user_session,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""token"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""user_type"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""session_timeout"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""user_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":7},{""column_name"":""user_agent"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":8},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":10},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":12},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":13},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":14}]",用户在线 Session
-system_users,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""username"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""password"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""nickname"",""data_type"":""character varying"",""character_maximum_length"":30,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""remark"",""data_type"":""character varying"",""character_maximum_length"":500,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":5},{""column_name"":""dept_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""post_ids"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":7},{""column_name"":""email"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""mobile"",""data_type"":""character varying"",""character_maximum_length"":11,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""sex"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""avatar"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":11},{""column_name"":""status"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12},{""column_name"":""login_ip"",""data_type"":""character varying"",""character_maximum_length"":50,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":13},{""column_name"":""login_date"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":15},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":16},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":17},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":18},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":19},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":20},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21}]",用户信息表
-training_stream_events,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""training_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""event_type"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""student_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""status"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""ack"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""metrics"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""payload"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""ingest_source"",""data_type"":""character varying"",""character_maximum_length"":32,""is_nullable"":""YES"",""column_default"":""'gateway'::character varying"",""ordinal_position"":11},{""column_name"":""ingest_note"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""recorded_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":13},{""column_name"":""ingested_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":14}]",课堂训练实时事件流,供 Supabase realtime 推送给教师端
-user_roles,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""gen_random_uuid()"",""ordinal_position"":1},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":2},{""column_name"":""role"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""class_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""school_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""department"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""permissions"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'{}'::jsonb"",""ordinal_position"":7},{""column_name"":""is_active"",""data_type"":""boolean"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""true"",""ordinal_position"":8},{""column_name"":""expires_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":10},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""now()"",""ordinal_position"":11},{""column_name"":""created_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""updated_by"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13}]",null
-wearable_location_observations,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""nextval('wearable_location_observations_id_seq'::regclass)"",""ordinal_position"":1},{""column_name"":""snapshot_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""gateway_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""received_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""gateway_time"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""rssi_dbm"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":6},{""column_name"":""snr_db"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""distance_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""channel"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""frequency_mhz"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""packet_sequence"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""latency_ms"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""firmware_version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""payload"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":15}]",Raw 2.4G gateway readings contributing to a wearable location snapshot.
-wearable_location_snapshots,"[{""column_name"":""id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""uuid_generate_v4()"",""ordinal_position"":1},{""column_name"":""device_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""user_id"",""data_type"":""uuid"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""estimated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":4},{""column_name"":""window_started_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""window_ended_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""latitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""longitude"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""altitude_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""coordinate_system"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""'WGS84'::text"",""ordinal_position"":10},{""column_name"":""uncertainty_radius_m"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""confidence"",""data_type"":""numeric"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12},{""column_name"":""method"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":13},{""column_name"":""algorithm_version"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":14},{""column_name"":""observation_count"",""data_type"":""integer"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":""0"",""ordinal_position"":15},{""column_name"":""campus_code"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":16},{""column_name"":""area_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":17},{""column_name"":""building_name"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":18},{""column_name"":""floor_label"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":19},{""column_name"":""room_label"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":20},{""column_name"":""observations"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":21},{""column_name"":""diagnostics"",""data_type"":""jsonb"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":22},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":23},{""column_name"":""updated_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":24}]",Estimated wearable locations derived from multi-gateway RSSI aggregation.
-yudao_demo01_contact,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""sex"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""birthday"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""avatar"",""data_type"":""character varying"",""character_maximum_length"":512,""is_nullable"":""YES"",""column_default"":""NULL::character varying"",""ordinal_position"":6},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":9},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":10},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":12}]",示例联系人表
-yudao_demo02_category,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""parent_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":4},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":5},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":8},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9}]",示例分类表
-yudao_demo03_course,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""student_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""score"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",学生课程表
-yudao_demo03_grade,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""student_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":2},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":3},{""column_name"":""teacher"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":5},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":6},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":7},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":8},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":9},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10}]",学生班级表
-yudao_demo03_student,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""name"",""data_type"":""character varying"",""character_maximum_length"":100,""is_nullable"":""NO"",""column_default"":""''::character varying"",""ordinal_position"":2},{""column_name"":""sex"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":3},{""column_name"":""birthday"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":4},{""column_name"":""description"",""data_type"":""character varying"",""character_maximum_length"":255,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":5},{""column_name"":""creator"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":6},{""column_name"":""create_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":7},{""column_name"":""updater"",""data_type"":""character varying"",""character_maximum_length"":64,""is_nullable"":""YES"",""column_default"":""''::character varying"",""ordinal_position"":8},{""column_name"":""update_time"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""CURRENT_TIMESTAMP"",""ordinal_position"":9},{""column_name"":""deleted"",""data_type"":""smallint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":10},{""column_name"":""tenant_id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""0"",""ordinal_position"":11}]",学生表
-zp_face,"[{""column_name"":""id"",""data_type"":""bigint"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":null,""ordinal_position"":1},{""column_name"":""created_at"",""data_type"":""timestamp with time zone"",""character_maximum_length"":null,""is_nullable"":""NO"",""column_default"":""now()"",""ordinal_position"":2},{""column_name"":""imgurl"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":3},{""column_name"":""faceid"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":4},{""column_name"":""imgtime"",""data_type"":""timestamp without time zone"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":5},{""column_name"":""desc"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":6},{""column_name"":""cameraid"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":7},{""column_name"":""rtmpurl"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":8},{""column_name"":""description"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":9},{""column_name"":""videofile"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":10},{""column_name"":""videotime"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":11},{""column_name"":""faceimage"",""data_type"":""text"",""character_maximum_length"":null,""is_nullable"":""YES"",""column_default"":null,""ordinal_position"":12}]",zhipao face info
\ No newline at end of file
diff --git a/pages/mall/consumer/address-list.uvue b/pages/mall/consumer/address-list.uvue
index 9938dd2a..b49d1790 100644
--- a/pages/mall/consumer/address-list.uvue
+++ b/pages/mall/consumer/address-list.uvue
@@ -21,7 +21,7 @@
📝
- �️
+ 🗑️
diff --git a/pages/mall/consumer/apply-refund.uvue b/pages/mall/consumer/apply-refund.uvue
index af3c2306..656d76dd 100644
--- a/pages/mall/consumer/apply-refund.uvue
+++ b/pages/mall/consumer/apply-refund.uvue
@@ -57,7 +57,7 @@
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/cart copy.uvue b/pages/mall/consumer/cart copy.uvue
deleted file mode 100644
index c8506011..00000000
--- a/pages/mall/consumer/cart copy.uvue
+++ /dev/null
@@ -1,1435 +0,0 @@
-
-
-
-
-
-
- 购物车
-
-
- {{ isManageMode ? '✓' : '⚙️' }}
- {{ isManageMode ? '完成' : '管理' }}
-
-
-
-
-
-
-
-
-
-
-
-
- 🛒
- 购物车是空的
- 快去挑选喜欢的商品吧
-
-
-
-
-
-
-
-
-
-
-
-
- ✓
-
-
-
-
-
-
-
- {{ item.name }}
- {{ item.spec }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- ✓
-
- 全选
-
-
-
-
-
- 合计:
- ¥{{ totalPrice }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ product.name }}
-
- ¥{{ product.price }}
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/cart.uvue b/pages/mall/consumer/cart.uvue
index f0a56a63..4b4eb4ca 100644
--- a/pages/mall/consumer/cart.uvue
+++ b/pages/mall/consumer/cart.uvue
@@ -168,7 +168,7 @@
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/category.uvue b/pages/mall/consumer/category.uvue
index a26780fb..ac527d51 100644
--- a/pages/mall/consumer/category.uvue
+++ b/pages/mall/consumer/category.uvue
@@ -48,7 +48,12 @@
-
+
-
+
-
+
- 调试:共{{ checkoutItems.length }}件商品,总价计算:{{ totalAmount }}
+ 共 {{ checkoutItems.length }} 件商品
-
-
-
-
- {{ item.product_name }}
- {{ getSpecText(item.sku_specifications) }}
-
- ¥{{ item.price }}
- ×{{ item.quantity }}
-
-
-
+
+
+
+
+
+
+
+
+ {{ item.product_name }}
+ {{ getSpecText(item.sku_specifications) }}
+
+ ¥{{ item.price }}
+ ×{{ item.quantity }}
+
+
+
+
+
+
+ 配送方式
+ 快递 免邮
+
+
+ 小计:
+ ¥{{ getGroupTotal(group) }}
+
+
暂无商品信息
@@ -286,6 +304,8 @@ type CheckoutItemType = {
sku_specifications: any
price: number
quantity: number
+ shop_id?: string
+ shop_name?: string
}
type DeliveryOptionType = {
@@ -329,6 +349,32 @@ const showSaveConfirm = ref(false)
const smartAddressInput = ref('')
// 计算属性 - 修复价格同步问题
+// 按店铺分组商品
+const shopGroups = computed(() => {
+ const groups = new Map()
+ checkoutItems.value.forEach(item => {
+ // 使用类型断言访问可能的额外属性
+ const rawItem = item as any
+ const shopId = rawItem.shop_id || 'unknown'
+ if (!groups.has(shopId)) {
+ groups.set(shopId, {
+ shopId: shopId,
+ shopName: rawItem.shop_name || '商城优选',
+ merchant_id: rawItem.merchant_id || rawItem.shop_id,
+ items: [] as any[]
+ })
+ }
+ groups.get(shopId).items.push(item)
+ })
+ return Array.from(groups.values())
+})
+
+const getGroupTotal = (group: any) => {
+ return group.items.reduce((sum: number, item: any) => {
+ return sum + (Number(item.price) * Number(item.quantity))
+ }, 0).toFixed(2)
+}
+
const totalAmount = computed(() => {
console.log('计算商品总价,checkoutItems:', checkoutItems.value)
if (!checkoutItems.value || checkoutItems.value.length === 0) {
@@ -405,34 +451,38 @@ watch(checkoutItems, (newItems) => {
// 页面加载时监听eventChannel
onLoad(() => {
- // 优先检查Storage中是否有"立即购买"的数据
+ let dataLoaded = false
+ // 优先检查Storage中是否有结算数据 (支持 buy_now 和 cart 两种模式)
const checkoutType = uni.getStorageSync('checkout_type')
- if (checkoutType === 'buy_now') {
- console.log('检测到立即购买模式,从Storage加载数据')
+ if (checkoutType === 'buy_now' || checkoutType === 'cart') {
+ console.log(`检测到结算模式(${checkoutType}),从Storage加载数据`)
const itemsStr = uni.getStorageSync('checkout_items')
if (itemsStr) {
try {
const items = JSON.parse(itemsStr as string)
console.log('从Storage加载的商品数据:', items)
- processCheckoutItems(items)
-
- // 清除Storage,避免污染下次进入(刷新页面时可能需要保留?暂时不清除,或者在离开页面时清除)
- // uni.removeStorageSync('checkout_type')
- // uni.removeStorageSync('checkout_items')
- loadDefaultAddress()
- return // 成功加载,直接返回
+ if (items && Array.isArray(items) && items.length > 0) {
+ processCheckoutItems(items)
+ dataLoaded = true
+ }
} catch (e) {
- console.error('解析立即购买数据失败', e)
+ console.error('解析结算数据失败', e)
}
}
}
+ // 如果没有从checkout_items加载到数据,则尝试从通用购物车Storage加载 (回退方案)
+ if (!dataLoaded) {
+ console.log('未找到预结算数据,尝试从购物车本地存储加载')
+ loadFromLocalStorage()
+ } else {
+ // 如果已经加载了数据,还需要单独加载地址,因为loadFromLocalStorage通常会附带加载地址
+ loadDefaultAddress()
+ }
+
// 从上一页获取数据
const eventChannel = uni.getEventChannel ? uni.getEventChannel() : null
- // 默认先尝试从本地存储加载(确保有数据)
- loadFromLocalStorage()
-
if (eventChannel) {
eventChannel.on('acceptData', (data: any) => {
console.log('接收到商品数据:', data)
@@ -539,9 +589,6 @@ const loadFromLocalStorage = () => {
if (selectedCartItems.length > 0) {
// 转换为CheckoutItemType格式
const convertedItems: CheckoutItemType[] = selectedCartItems.map(item => {
- // 确保价格和数量是数字
- let price = typeof item.price === 'string' ? parseFloat(item.price) : Number(item.price)
- if (isNaN(price)) price = 0
let quantity = typeof item.quantity === 'string' ? parseInt(item.quantity) : Number(item.quantity)
if (isNaN(quantity) || quantity < 1) quantity = 1
@@ -553,7 +600,7 @@ const loadFromLocalStorage = () => {
product_name: item.name || '',
product_image: item.image || '',
sku_specifications: item.spec ? { spec: item.spec } : {},
- price: price,
+ price: Number(item.price) || 0,
quantity: quantity
}
})
@@ -1247,8 +1294,7 @@ const submitOrder = async () => {
uni.showLoading({ title: '提交中...' })
try {
- const userId = getCurrentUserId()
- // 确保使用当前登录用户ID (如果本地存储为空,可能需要处理)
+ const userId = supabaseService.getCurrentUserId()
if (!userId) {
uni.hideLoading()
uni.showToast({
@@ -1258,59 +1304,77 @@ const submitOrder = async () => {
return
}
- // 准备订单项数据
- // 注意:需根据 checkoutItems 的实际结构转换为 createOrder 需要的 CartItem 结构
- // 假设 checkoutItems 已经包含了 product_id, quantity, price, name, image 等字段
- const orderItems = checkoutItems.value.map((item: any): any => ({
- id: item.id || '', // 这是一个临时ID或者购物车ID,createOrder 中会使用 product_id
- product_id: item.product_id || item.id, // 确保有 product_id
- quantity: item.quantity,
- price: item.price,
- product_name: item.name,
- product_image: item.image,
- spec: item.spec,
- checked: true
- }))
+ // 准备按店铺分组数据
+ const groups = shopGroups.value.map((group: any): any => {
+ return {
+ merchant_id: group.merchant_id || group.shopId,
+ shopName: group.shopName,
+ items: group.items.map((item: any): any => ({
+ id: item.id, // 用于清理购物车
+ product_id: item.product_id,
+ sku_id: item.sku_id,
+ quantity: item.quantity,
+ price: item.price,
+ product_name: item.product_name,
+ product_image: item.product_image,
+ specifications: item.sku_specifications // 保持原始对象,createOrder 会处理序列化
+ }))
+ }
+ })
- // 调用 Supabase 服务创建订单
- const result = await supabaseService.createOrder(
- userId,
- selectedAddress.value!.id, // 地址ID
- actualAmount.value, // 实付金额
- orderItems
- )
+ // 调用 Supabase 服务创建多店铺订单
+ const result = await supabaseService.createOrdersByShop({
+ shipping_address: selectedAddress.value,
+ shopGroups: groups,
+ deliveryFee: deliveryFee.value,
+ discountAmount: discountAmount.value
+ })
uni.hideLoading()
if (result.success) {
- // 清除购买的商品 (如果来自购物车,应该在 createOrder 成功后清除,或者这里手动清除本地存储)
- // 这里我们假设购物车清理逻辑可能在 createOrder 后端处理,或者需要在这里清除本地
+ // 清除结算商品
try {
uni.removeStorageSync('checkout_items')
+ uni.removeStorageSync('checkout_type')
} catch(e) {
console.error('清除结算商品失败', e)
}
- const activeOrderId = result.data as string
+ const orderIds = result.orderIds
- // 跳转支付页面
- uni.navigateTo({
- url: `/pages/mall/consumer/payment?orderId=${activeOrderId}&amount=${actualAmount.value}&productAmount=${totalAmount.value}&deliveryFee=${deliveryFee.value}&discountAmount=${discountAmount.value}`
- })
+ if (orderIds.length === 1) {
+ // 单个订单跳转支付
+ uni.navigateTo({
+ url: `/pages/mall/consumer/payment?orderId=${orderIds[0]}&amount=${actualAmount.value}`
+ })
+ } else {
+ // 多个订单跳转到订单列表
+ uni.showToast({
+ title: `成功创建${orderIds.length}个订单`,
+ icon: 'success'
+ })
+ setTimeout(() => {
+ uni.redirectTo({
+ url: '/pages/mall/consumer/orders'
+ })
+ }, 1500)
+ }
} else {
- throw new Error(result.error)
+ throw new Error(result.error || '创建订单失败')
}
} catch (err: any) {
uni.hideLoading()
- console.error('创建订单失败:', err)
+ console.error('提交订单错误:', err)
uni.showToast({
- title: err.message || '订单创建失败',
+ title: err.message || '提交订单失败',
icon: 'none'
})
}
}
+
// 生成订单号
const generateOrderNo = (): string => {
const date = new Date()
@@ -1463,6 +1527,62 @@ const goBack = () => {
text-align: center;
}
+.shop-group {
+ background-color: #fff;
+ margin: 10px 0;
+ border-radius: 12px;
+ padding: 10px;
+}
+
+.shop-header {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding-bottom: 10px;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.shop-icon {
+ font-size: 18px;
+ margin-right: 8px;
+}
+
+.shop-name {
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+}
+
+.shop-subtotal {
+ display: flex;
+ justify-content: flex-end; /* 右对齐 */
+ align-items: center;
+ padding-top: 10px;
+ margin-top: 5px;
+ border-top: 1px dashed #f0f0f0;
+ font-size: 14px;
+}
+
+.subtotal-label {
+ color: #666;
+ margin-right: 10px;
+}
+
+.subtotal-value {
+ color: #333;
+}
+
+.subtotal-text {
+ color: #333;
+ margin-right: 5px;
+}
+
+.subtotal-price {
+ color: #ff4757;
+ font-weight: bold;
+ font-size: 16px;
+}
+
.product-item {
display: flex;
padding: 15px 0;
diff --git a/pages/mall/consumer/checkoutgood.uvue b/pages/mall/consumer/checkoutgood.uvue
deleted file mode 100644
index 3c744516..00000000
--- a/pages/mall/consumer/checkoutgood.uvue
+++ /dev/null
@@ -1,1733 +0,0 @@
-
-
-
-
-
-
-
-
- {{ getFullAddress(selectedAddress) }}
-
-
- 请选择收货地址
- ›
-
-
-
-
-
-
-
- 调试:共{{ checkoutItems.length }}件商品,总价计算:{{ totalAmount }}
-
-
-
-
-
- {{ item.product_name }}
- {{ getSpecText(item.sku_specifications) }}
-
- ¥{{ item.price }}
- ×{{ item.quantity }}
-
-
-
-
-
- 暂无商品信息
-
-
-
-
-
- 配送方式
-
-
- {{ option.name }}
- ¥{{ option.price }}
- ✓
-
-
-
-
-
-
- 优惠券
-
- {{ selectedCoupon.template?.name || '优惠券' }}
- 选择优惠券
- ›
-
-
-
-
-
-
-
-
- 价格明细
-
-
- 商品总价
- ¥{{ totalAmount.toFixed(2) }}
-
-
- 运费
- +¥{{ deliveryFee.toFixed(2) }}
-
-
- 优惠减免
- -¥{{ discountAmount.toFixed(2) }}
-
-
- 应付金额
- ¥{{ actualAmount.toFixed(2) }}
-
-
-
-
-
-
-
-
- 合计:
- ¥{{ actualAmount.toFixed(2) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/doc/FEATURES_&_PAGES.md b/pages/mall/consumer/doc/FEATURES_&_PAGES.md
new file mode 100644
index 00000000..e66bc738
--- /dev/null
+++ b/pages/mall/consumer/doc/FEATURES_&_PAGES.md
@@ -0,0 +1,62 @@
+# 功能与页面状态详解
+
+本文档详细记录了 Consumer App 各个功能模块的实现状态与业务逻辑。
+
+> **状态图例**: ✅ 正常 (已对接真实 DB) | 🚧 开发中 | ❌ 未开始
+
+## 🛍️ 核心购物流程
+
+| 功能模块 | 页面路径 | 状态 | 备注 |
+| :--- | :--- | :--- | :--- |
+| **首页** | `pages/mall/consumer/index.uvue` | ✅ 正常 | 金刚区、Banner、推荐商品流。 |
+| **分类** | `pages/mall/consumer/category.uvue` | ✅ 正常 | 一级/二级分类联动,跳转搜索结果。 |
+| **商品详情** | `pages/mall/consumer/product-detail.uvue` | ✅ 正常 | SKU 选择、加入购物车、立即购买。 |
+| **购物车** | `pages/mall/consumer/cart.uvue` | ✅ 正常 | 数量增减、勾选计算、结算校验。 |
+| **结算页** | `pages/mall/consumer/checkout.uvue` | ✅ 正常 | 选择地址、运费计算、创建订单。 |
+| **收银台** | `pages/mall/consumer/payment.uvue` | ✅ 正常 | 模拟支付流程,更新订单为“待发货”。 |
+
+## 👤 个人中心 (Profile)
+
+**文件**: `pages/mall/consumer/profile.uvue`
+
+* **资产看板**: 实时加载积分、余额、优惠券数量。
+* **订单看板**: 待支付、待发货、待收货、退款/售后(跳转至 `refund.uvue`)。
+* **服务矩阵**:
+ * **地址管理**: `address-list.uvue` (CRUD 正常)
+ * **我的收藏**: `favorites.uvue` (商品/店铺收藏 正常)
+ * **浏览足迹**: `footprint.uvue` (按日期分组 正常)
+ * **在线客服**: 跳转至 `chat.uvue`
+ * **消息通知**: 跳转至 `messages.uvue`
+
+## 📦 订单管理体系
+
+**列表页**: `pages/mall/consumer/orders.uvue`
+* **状态筛选**: 全部 / 待支付 / 待发货 / 待收货 / 已完成。
+* **核心操作**:
+ * **去支付**: 跳转收银台。
+ * **确认收货**: 变更状态为已完成。
+ * **申请售后**: 跳转 `apply-refund.uvue` (带入订单信息)。
+
+**详情页**: `pages/mall/consumer/order-detail.uvue`
+* **信息展示**: 完整的地址、商品规格、金额明细、时间线。
+* **业务状态**: 根据 `order_status` 动态展示可操作按钮。
+
+## 🔄 售后服务体系 (Refunds)
+
+**申请页**: `pages/mall/consumer/apply-refund.uvue`
+* **功能**: 支持仅退款/退货退款。
+* **逻辑**: 自动获取订单最大可退金额,防止超额申请。
+* **提交**: 数据写入 `ml_refunds` 表。
+
+**记录页**: `pages/mall/consumer/refund.uvue`
+* **列表**: 展示所有历史售后申请及其当前状态。
+* **进度**: 可视化展示审核进度 (目前模拟进度条)。
+
+## 💬 社交与互动
+
+| 功能模块 | 页面路径 | 状态 | 说明 |
+| :--- | :--- | :--- | :--- |
+| **在线客服** | `pages/mall/consumer/chat.uvue` | ✅ 正常 | 支持文本/表情发送,历史记录持久化。 |
+| **消息中心** | `pages/mall/consumer/messages.uvue` | ✅ 正常 | 聚合系统通知订单消息与客服消息。 |
+| **商品评价** | `pages/mall/consumer/review.uvue` | ✅ 正常 | 支持星级评分与文本评价。 |
+
diff --git a/pages/mall/consumer/doc/MOCK_DATA_GUIDE.md b/pages/mall/consumer/doc/MOCK_DATA_GUIDE.md
new file mode 100644
index 00000000..6a4104b8
--- /dev/null
+++ b/pages/mall/consumer/doc/MOCK_DATA_GUIDE.md
@@ -0,0 +1,44 @@
+# 测试数据生成指南 (Mock Data Guide)
+
+为了有效测试消费者端前端功能,我们编写了 SQL 脚本来向数据库填充真实的模拟数据。
+
+## 📂 脚本位置
+
+所有脚本均位于 `doc_mall/consumer/sql/` 目录下。
+
+## 🛠 使用说明
+
+### 1. 修复现有数据问题 (优先级最高)
+**脚本**: `fix_order_items_data.sql`
+
+* **适用场景**: 如果您的订单列表中,商品显示为空白图片或缺失名称。
+* **功能**:
+ * 从 `ml_product_skus` 或 `ml_products` 表自动回填缺失的 `image_url`。
+ * 修正占位符形式的 `product_name`。
+ * 补充缺失的 `specifications` (如:规格参数)。
+
+### 2. 生成新的测试订单
+**脚本**: `add_mock_orders_corrected.sql`
+
+* **适用场景**: 为测试用户 (`test@mall.com`) 创建一批全新的订单数据。
+* **生成数据包含**:
+ * 1x **待支付** 订单
+ * 1x **待发货** 订单 (已支付)
+ * 1x **待收货** 订单 (已发货)
+ * 1x **已完成** 订单
+* **注意**: 该脚本会随机选取数据库中现有的真实商品,确保数据关联正确无误。
+
+### 3. 生成评价测试数据
+**脚本**: `add_mock_reviews_for_test_user.sql`
+
+* **适用场景**: 测试“我的评价”列表或商品详情页的评价展示。
+* **功能**: 创建已完成的订单,并自动为其添加一条带图片的 5 星好评。
+
+## 🧪 建议测试流程
+
+1. **运行** `add_mock_orders_corrected.sql`。
+2. **打开 App** > 个人中心 (Profile) > 我的订单。
+3. **验证**:
+ * 各状态标签页下是否有对应的订单。
+ * 商品图片和名称是否显示正常。
+ * 在“待收货”或“已完成”订单上点击**申请售后**,验证是否跳转正确。
diff --git a/pages/mall/consumer/doc/README.md b/pages/mall/consumer/doc/README.md
new file mode 100644
index 00000000..1241580f
--- /dev/null
+++ b/pages/mall/consumer/doc/README.md
@@ -0,0 +1,62 @@
+# 商城消费者端 (Consumer) 开发文档
+
+本文档包含了商城消费者前端模块的详细开发指南和状态说明。
+
+## 📂 项目结构
+
+消费者端模块位于 `pages/mall/consumer/` 目录下,基于 UniApp x (UTS/UVUE) 开发。
+
+### 核心页面清单
+
+| 页面文件 | 描述 | 当前状态 |
+|-----------|-------------|--------|
+| `index.uvue` | 首页 (商城门面) | ✅ 正常 |
+| `category.uvue` | 商品分类浏览 | ✅ 正常 |
+| `cart.uvue` | 购物车 | ✅ 正常 |
+| `profile.uvue` | 个人中心 (用户主页) | ✅ 正常 |
+| `orders.uvue` | 订单列表管理 | ✅ 正常 |
+| `order-detail.uvue` | 订单详情页 | ✅ 正常 |
+| `apply-refund.uvue` | 申请售后 (退款/退货) | ✅ 正常 |
+| `refund.uvue` | 售后记录列表 | ✅ 正常 |
+| `chat.uvue` | 在线客服 | ✅ 正常 |
+| `messages.uvue` | 消息通知中心 | ✅ 正常 |
+
+### 关键功能实现
+
+1. **用户个人中心**:
+ * 可视化展示用户状态(积分、余额)。
+ * 订单状态快捷入口(待支付、待发货、待收货等)。
+ * **我的服务**: 优惠券、地址、收藏夹。
+ * **新功能**: 已集成“评价”入口(跳转至待评价订单)和“退款/售后”入口(跳转至售后记录页)。
+
+2. **订单管理**:
+ * 多状态标签页切换(全部、待支付、待收货、已完成)。
+ * **操作**: 支付、取消、提醒发货、确认收货、评价、**申请售后**。
+ * 与 `supabaseService` 后端服务实时交互。
+
+3. **售后系统**:
+ * 独立页面 `apply-refund.uvue`:支持仅退款/退货退款,关联原订单金额。
+ * 售后列表 `refund.uvue`:查看历史退款记录及进度。
+
+4. **客服与消息**:
+ * 在线客服 `chat.uvue`:支持文本/表情发送,消息持久化存储。
+ * 消息中心 `messages.uvue`:聚合系统通知与客服消息。
+
+## 🛠 技术栈
+
+* **框架**: UniApp x (Vue 3 + UTS)
+* **后端**: Supabase (PostgreSQL)
+* **语言**: UTS (TypeScript 方言)
+* **样式**: SCSS / UVUE Styles
+
+## 🚀 快速开始
+
+1. **环境准备**: 确保已安装 HBuilderX 并配置好 UniApp x 插件。
+2. **数据库**: 运行 `doc_mall/consumer/sql/` 下的 SQL 脚本初始测试数据。
+3. **运行**: 在 HBuilderX 中打开项目,运行到 Web 浏览器或 App 模拟器。
+
+## 📚 文档索引
+
+* [功能与页面状态详解](./FEATURES_&_PAGES.md)
+* [Supabase 集成与数据库架构](./SUPABASE_INTEGRATION.md)
+* [测试数据生成指南](./MOCK_DATA_GUIDE.md)
diff --git a/pages/mall/consumer/doc/SUPABASE_INTEGRATION.md b/pages/mall/consumer/doc/SUPABASE_INTEGRATION.md
new file mode 100644
index 00000000..6f1065ce
--- /dev/null
+++ b/pages/mall/consumer/doc/SUPABASE_INTEGRATION.md
@@ -0,0 +1,121 @@
+# Supabase 集成与数据库架构 (Consumer App)
+
+本文档详细描述了消费者端 (Consumer App) 涉及的所有数据库集成点、核心表结构以及 `supabaseService.uts` 提供的 API 服务。
+
+> **更新时间**: 2026-02-03
+> **状态**: 已完成核心业务闭环 (订单、支付、售后、客服、足迹等)
+
+## 🗄️ 核心数据架构
+
+消费者端业务依赖以下核心数据库表:
+
+### 1. 交易与订单 (Orders & Transactions)
+
+| 表名 | 描述 | 关键字段 |
+| :--- | :--- | :--- |
+| `ml_orders` | 订单主表 | `id`, `user_id`, `merchant_id`, `order_status` (1:待付, 2:待发, 3:待收, 4:完成, 5:取消), `total_amount` |
+| `ml_order_items` | 订单商品明细 | `order_id`, `product_id`, `image_url` (快照), `specifications` (快照) |
+| `ml_refunds` | **[新增]** 售后/退款申请 | `order_id`, `reason_category`, `refund_amount`, `status` (0:待审, 1:同意, 2:拒绝), `refund_type` (1:仅退款, 2:退货退款) |
+
+### 2. 互动与消息 (Interaction & Communication)
+
+| 表名 | 描述 | 关键字段 |
+| :--- | :--- | :--- |
+| `ml_chat_messages` | **[新增]** 客服聊天记录 | `session_id`, `sender_id`, `receiver_id`, `content`, `msg_type`, `is_from_user` |
+| `ml_notifications` | 消息通知 | `type` (system/order/promotion), `title`, `is_read` |
+| `ml_product_reviews` | 商品评价 | `order_id`, `product_id`, `rating`, `content`, `images` |
+
+### 3. 用户行为 (User Behavior)
+
+| 表名 | 描述 | 关键字段 |
+| :--- | :--- | :--- |
+| `ml_browsing_history` | 足迹/浏览记录 | `user_id`, `product_id`, `view_time` |
+| `ml_favorites` | 收藏夹 | `user_id`, `target_id`, `type` (1:商品, 2:店铺) |
+| `ml_user_addresses` | 收货地址 | `user_id`, `receiver_name`, `phone`, `province`... |
+
+---
+
+## 🔌 API 服务层 (`utils/supabaseService.uts`)
+
+所有后端交互通过单例 `supabaseService` 进行,主要模块如下:
+
+### 1. 售后/退款服务 (Refunds)
+> **状态**: ✅ 已集成 (apply-refund.uvue)
+
+```typescript
+// 创建退款/售后申请
+async createRefund(data: {
+ order_id: string,
+ refund_type: number,
+ refund_amount: number,
+ reason_category: string,
+ description: string,
+ images: string[]
+}): Promise
+```
+
+### 2. 在线客服/消息服务 (Chat & Messages)
+> **状态**: ✅ 已集成 (chat.uvue, messages.uvue)
+
+```typescript
+// 获取当前用户的聊天记录
+async getUserChatMessages(): Promise
+
+// 发送聊天消息 (持久化到 ml_chat_messages)
+async sendChatMessage(content: string, type: string = 'text'): Promise
+
+// (测试用) 模拟客服自动回复
+async simulateServiceReply(content: string): Promise
+```
+
+### 3. 订单与支付 (Orders & Payment)
+> **状态**: ✅ 已集成 (checkout.uvue, payment.uvue, orders.uvue)
+
+```typescript
+// 创建订单 (由购物车或直接购买触发)
+async createOrder(orderData: any): Promise
+
+// 获取订单详情 (包含商品明细)
+async getOrderDetail(orderId: string): Promise
+
+// 支付订单 (模拟支付,更新订单状态 1->2,记录支付时间)
+async payOrder(orderId: string, paymentMethod: string, amount: number): Promise
+
+// 确认收货 (3->4)
+async confirmReceipt(orderId: string): Promise
+```
+
+### 4. 商品与搜索 (Products)
+> **状态**: ✅ 已集成 (search.uvue, product-detail.uvue)
+
+```typescript
+// 搜索商品 (支持关键词、分类、价格排序、销量排序)
+async searchProducts(keyword: string, page: number, pageSize: number, sort: string, asc: boolean): Promise>
+
+// 获取足迹
+async getFootprints(): Promise
+```
+
+---
+
+## 📊 页面集成状态一览表
+
+| 页面模块 | 文件路径 | 数据源状态 | 说明 |
+| :--- | :--- | :--- | :--- |
+| **首页** | `pages/mall/consumer/index.uvue` | ✅ Real DB | 金刚区、推荐商品已接入 |
+| **搜索** | `pages/mall/consumer/search.uvue` | ✅ Real DB | 关键词搜索、排序、分页正常 |
+| **购物车** | `pages/mall/consumer/cart.uvue` | ✅ Real DB | 加减购、结算校验正常 |
+| **结算台** | `pages/mall/consumer/checkout.uvue` | ✅ Real DB | 地址选择、订单创建正常 |
+| **收银台** | `pages/mall/consumer/payment.uvue` | ✅ Real DB | 读取待付金额,更新支付状态 |
+| **订单列表** | `pages/mall/consumer/orders.uvue` | ✅ Real DB | 状态筛选 (全部/待付/待收/退款) 正常 |
+| **订单详情** | `pages/mall/consumer/order-detail.uvue` | ✅ Real DB | 地址、商品、金额展示正常 |
+| **申请售后** | `pages/mall/consumer/apply-refund.uvue` | ✅ Real DB | **[本次完成]** 关联订单金额,提交至 `ml_refunds` |
+| **在线客服** | `pages/mall/consumer/chat.uvue` | ✅ Real DB | **[本次完成]** 消息收发持久化,支持历史记录 |
+| **消息中心** | `pages/mall/consumer/messages.uvue` | ✅ Real DB | 能够统计未读客服消息数 |
+| **我的评价** | `pages/mall/consumer/review.uvue` | ✅ Real DB | 提交评价至 `ml_product_reviews` |
+
+## 🛠️ 下一步维护建议
+
+1. **异常处理**: 目前部分接口在网络异常时仅打印 `console.error`,建议增加全局统一的 Toasts 提示。
+2. **图片上传**: 目前退款和评价中的图片上传依赖 Mock 或简单路径,需对接真实的 OSS/Supabase Storage 文件上传。
+3. **实时消息**: 目前 `chat.uvue` 使用 polling (轮询) 或手动刷新,Supabase 支持 Realtime Subscription,后续可升级为 WebSocket 实时推送。
diff --git a/pages/mall/consumer/favorites.uvue b/pages/mall/consumer/favorites.uvue
index ad1c8d8a..bb8abb48 100644
--- a/pages/mall/consumer/favorites.uvue
+++ b/pages/mall/consumer/favorites.uvue
@@ -65,26 +65,69 @@ const loadFavorites = async () => {
// Map response
favorites.value = res.map((item: any): Product => {
- const prod = item.ml_products
+ let prod: any = null
+ if (item instanceof UTSJSONObject) {
+ prod = item.get('ml_products')
+ } else {
+ prod = item['ml_products']
+ }
+
let image = '/static/default-product.png'
- if (prod) {
- if (prod.main_image_url) image = prod.main_image_url
- else if (prod.image_url) image = prod.image_url
- else if (prod.image_urls) {
- // Try parse
- try {
- const arr = JSON.parse(prod.image_urls)
- if (Array.isArray(arr) && arr.length > 0) image = arr[0]
- } catch(e) {}
+ let id = ''
+ let name = '未知商品'
+ let price = 0
+ let sales = 0
+
+ if (prod != null) {
+ if (prod instanceof UTSJSONObject) {
+ id = prod.getString('id') || ''
+ name = prod.getString('name') || '未知商品'
+ price = prod.getNumber('base_price') || 0
+ image = prod.getString('main_image_url') || image
+ sales = prod.getNumber('sale_count') || 0
+
+ // 如果 main_image_url 为空,尝试解析 image_urls
+ if (image === '/static/default-product.png') {
+ const imgUrls = prod.getString('image_urls')
+ if (imgUrls) {
+ try {
+ const arr = JSON.parse(imgUrls)
+ if (Array.isArray(arr) && arr.length > 0) image = arr[0] as string
+ } catch(e) {}
+ }
+ }
+ } else {
+ id = (prod['id'] as string) || ''
+ name = (prod['name'] as string) || '未知商品'
+ price = (prod['base_price'] as number) || 0
+ image = (prod['main_image_url'] as string) || image
+ sales = (prod['sale_count'] as number) || 0
+
+ if (image === '/static/default-product.png') {
+ const imgUrls = prod['image_urls'] as string
+ if (imgUrls) {
+ try {
+ const arr = JSON.parse(imgUrls)
+ if (Array.isArray(arr) && arr.length > 0) image = arr[0] as string
+ } catch(e) {}
+ }
+ }
+ }
+ } else {
+ // 如果没取到商品,尝试直接从 item 取 target_id
+ if (item instanceof UTSJSONObject) {
+ id = item.getString('target_id') || ''
+ } else {
+ id = (item['target_id'] as string) || ''
}
}
return {
- id: prod?.id || item.target_id,
- name: prod?.name || '未知商品',
- price: prod?.price || 0,
+ id: id,
+ name: name,
+ price: price,
image: image,
- sales: prod?.sales || 0,
+ sales: sales,
shopId: '',
shopName: ''
}
@@ -109,8 +152,11 @@ const removeFavorite = async (id: string) => {
content: '确定要取消收藏该商品吗?',
success: async (res) => {
if (res.confirm) {
- const success = await supabaseService.toggleFavorite(id) // Toggle removes if exists
- if (success) {
+ // toggleFavorite 返回最新的状态:true=已收藏,false=未收藏
+ const isStillFavorite = await supabaseService.toggleFavorite(id)
+
+ if (!isStillFavorite) {
+ // 现在的状态是"未收藏",说明取消成功
// Remove from local list
const index = favorites.value.findIndex(item => item.id === id)
if (index !== -1) {
@@ -120,6 +166,11 @@ const removeFavorite = async (id: string) => {
title: '已取消收藏',
icon: 'none'
})
+ } else {
+ uni.showToast({
+ title: '取消失败',
+ icon: 'none'
+ })
}
}
}
diff --git a/pages/mall/consumer/footprint.uvue b/pages/mall/consumer/footprint.uvue
index b1ee3627..31b97511 100644
--- a/pages/mall/consumer/footprint.uvue
+++ b/pages/mall/consumer/footprint.uvue
@@ -83,6 +83,7 @@
-
-
diff --git a/pages/mall/consumer/messages - 副本.uvue b/pages/mall/consumer/messages - 副本.uvue
deleted file mode 100644
index a5e69b8b..00000000
--- a/pages/mall/consumer/messages - 副本.uvue
+++ /dev/null
@@ -1,634 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ tab.name }}
- {{ tab.unread }}
-
-
-
-
-
-
-
-
-
- 📢
-
-
-
- {{ message.content }}
-
-
-
-
-
-
-
-
- 📦
-
-
-
- {{ message.content }}
- 订单号: {{ message.order_no }}
-
-
-
-
-
-
-
-
-
- 💁
-
-
-
- {{ message.content }}
-
-
-
-
-
-
-
-
- 🎁
-
-
-
- {{ message.content }}
-
- {{ message.coupon }}优惠券
-
-
-
-
-
-
-
- 💬
- 暂无消息
- 暂时没有新消息
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/messages.uvue b/pages/mall/consumer/messages.uvue
index 78a44cc8..e1fdc6ff 100644
--- a/pages/mall/consumer/messages.uvue
+++ b/pages/mall/consumer/messages.uvue
@@ -43,8 +43,8 @@
-
-
+
+
import { ref, reactive, computed, onMounted } from 'vue'
+import { supabaseService, type Notification, type ChatMessage } from '@/utils/supabaseService.uts'
// 响应式数据
const activeTab = ref('service')
@@ -222,6 +223,7 @@ const loading = ref(false)
const unreadCount = ref(12)
const statusBarHeight = ref(0)
const scrollTop = ref(0)
+const scrollHeight = ref(0)
// 初始化页面布局数据
const initPage = () => {
@@ -242,182 +244,11 @@ const messageTabs = reactive([
])
// Mock 客服消息数据
-const serviceMessages = reactive([
- {
- id: 'service001',
- title: '康乐医药在线客服',
- role: '官方客服',
- content: '您好,我是康乐医药在线客服,有什么可以帮助您的吗?',
- lastMessage: '请问有什么药品需要咨询?',
- time: '刚刚',
- read: false,
- type: 'service',
- avatar: 'https://picsum.photos/50/50?random=service1',
- online: true,
- unreadCount: 3,
- tags: ['在线', '专业药师'],
- icon: '👨⚕️',
- color: '#4CAF50'
- },
- {
- id: 'service002',
- title: '处方药咨询',
- role: '药师',
- content: '关于您的处方药咨询,我们已经收到,请提供处方照片。',
- lastMessage: '已收到您的处方,正在审核中...',
- time: '10:30',
- read: true,
- type: 'service',
- avatar: 'https://picsum.photos/50/50?random=service2',
- online: true,
- unreadCount: 0,
- tags: ['处方药', '审核'],
- icon: '💊',
- color: '#2196F3'
- },
- {
- id: 'service003',
- title: '药品配送服务',
- role: '配送客服',
- content: '您的订单预计今天下午送达,请保持电话畅通。',
- lastMessage: '配送员正在路上,预计30分钟内送达',
- time: '09:45',
- read: false,
- type: 'service',
- avatar: 'https://picsum.photos/50/50?random=service3',
- online: true,
- unreadCount: 1,
- tags: ['配送中', '今日达'],
- icon: '🚚',
- color: '#FF9800'
- },
- {
- id: 'service004',
- title: '用药指导',
- role: '临床药师',
- content: '关于您咨询的药品服用方法,建议饭后半小时服用。',
- lastMessage: '记得按时服药,如有不适及时联系',
- time: '昨天',
- read: true,
- type: 'service',
- avatar: 'https://picsum.photos/50/50?random=service4',
- online: false,
- unreadCount: 0,
- tags: ['用药指导', '专业'],
- icon: '📋',
- color: '#9C27B0'
- },
- {
- id: 'service005',
- title: '售后服务中心',
- role: '售后专员',
- content: '您申请的药品退换货已受理,我们会尽快处理。',
- lastMessage: '退款将在3-5个工作日内退回原账户',
- time: '前天',
- read: false,
- type: 'service',
- avatar: 'https://picsum.photos/50/50?random=service5',
- online: true,
- unreadCount: 2,
- tags: ['售后', '退换货'],
- icon: '🔄',
- color: '#F44336'
- }
-])
-
-// Mock 系统通知数据
-const systemMessages = reactive([
- {
- id: 'sys001',
- title: '系统维护通知',
- content: '平台将于今晚23:00-01:00进行系统维护,届时部分功能可能无法使用。',
- time: '2023-11-23 15:30',
- read: false,
- type: 'system',
- important: true
- },
- {
- id: 'sys002',
- title: '隐私政策更新',
- content: '我们已更新隐私政策,请查阅相关条款。',
- time: '2023-11-22 10:15',
- read: true,
- type: 'system',
- important: false
- },
- {
- id: 'sys003',
- title: '账户安全提醒',
- content: '检测到您的账户在异地登录,如果不是您本人操作,请及时修改密码。',
- time: '2023-11-21 18:45',
- read: false,
- type: 'system',
- important: true
- }
-])
-
-// Mock 订单消息数据
-const orderMessages = reactive([
- {
- id: 'order001',
- title: '订单发货通知',
- content: '您的订单202311230001已发货,点击查看物流信息。',
- time: '2023-11-23 14:20',
- read: false,
- type: 'order',
- order_no: '202311230001',
- status: 'shipping',
- statusText: '配送中'
- },
- {
- id: 'order002',
- title: '订单支付成功',
- content: '您的订单202311220001支付成功,商家正在备货中。',
- time: '2023-11-22 09:30',
- read: false,
- type: 'order',
- order_no: '202311220001',
- status: 'processing',
- statusText: '处理中'
- },
- {
- id: 'order003',
- title: '订单确认收货',
- content: '您的订单202311210001已完成,期待您的评价。',
- time: '2023-11-21 16:15',
- read: true,
- type: 'order',
- order_no: '202311210001',
- status: 'completed',
- statusText: '已完成'
- }
-])
-
+const serviceMessages = reactive([])
+const systemMessages = reactive([])
+const orderMessages = reactive([])
// Mock 优惠活动数据
-const promoMessages = reactive([
- {
- id: 'promo001',
- title: '新人专享券',
- content: '您有一张新人专享优惠券已到账,有效期3天。',
- time: '2023-11-23 08:00',
- read: false,
- type: 'promo',
- coupon: '50元',
- expiry: '2023-11-26',
- claimed: false
- },
- {
- id: 'promo002',
- title: '双11大促',
- content: '双11狂欢购物节,全场满300减50。',
- time: '2023-11-22 12:30',
- read: true,
- type: 'promo',
- coupon: '满300减50',
- expiry: '2023-11-30',
- claimed: false
- }
-])
+const promoMessages = reactive([])
// 计算当前显示的消息
const currentMessages = computed(() => {
@@ -432,18 +263,134 @@ const currentMessages = computed(() => {
// 生命周期
onMounted(() => {
+ console.log('Messages Page Mounted')
initPage()
loadMessages()
})
+// 简单的日期格式化
+const formatTime = (isoString: string): string => {
+ if (!isoString) return ''
+ try {
+ return isoString.split('T')[0]
+ } catch(e) {
+ return isoString
+ }
+}
+
// 加载消息
-const loadMessages = () => {
+const loadMessages = async () => {
loading.value = true
- setTimeout(() => {
- // 模拟加载消息数据
+
+ try {
+ // 清空现有Mock数据
+ serviceMessages.length = 0
+ systemMessages.length = 0
+ orderMessages.length = 0
+ promoMessages.length = 0
+
+ // 1. 获取通知 (系统、订单、优惠)
+ const notes = await supabaseService.getUserNotifications()
+
+ notes.forEach((note: Notification) => {
+ // 这里使用 any 类型构建对象,以匹配 reactive 数组的结构
+ const item = {
+ id: note.id,
+ title: note.title,
+ content: note.content,
+ time: formatTime(note.created_at || ''),
+ read: note.is_read,
+ type: note.type, // 'system', 'order', 'promotion' => 'promo'
+ // 默认填充字段以避免渲染报错
+ avatar: note.icon_url,
+ important: note.type === 'system', // 简单逻辑
+ coupon: '点击查看',
+ expiry: '',
+ claimed: false,
+ order_no: '',
+ status: '',
+ statusText: '',
+ role: '',
+ lastMessage: '',
+ online: false,
+ unreadCount: 0,
+ tags: [],
+ icon: '',
+ color: ''
+ }
+
+ if (note.type === 'system') {
+ systemMessages.push(item)
+ } else if (note.type === 'order') {
+ orderMessages.push(item)
+ } else if (note.type === 'promotion') {
+ // map type 'promotion' to 'promo' for tab
+ item.type = 'promo'
+ promoMessages.push(item)
+ }
+ })
+
+ // 2. 获取客服消息 (Chat)
+ const chats = await supabaseService.getUserChatMessages()
+ if (chats.length > 0) {
+ // 简单处理:将最新一条显示为"在线客服"会话
+ const lastMsg = chats[0]
+ serviceMessages.push({
+ id: lastMsg.id,
+ title: '在线客服',
+ role: '客服专员',
+ content: lastMsg.content,
+ lastMessage: lastMsg.content,
+ time: formatTime(lastMsg.created_at || ''),
+ read: lastMsg.is_read,
+ type: 'service',
+ avatar: '/static/icons/service-avatar.png',
+ online: true,
+ unreadCount: chats.filter((m: ChatMessage) => !m.is_read && !m.is_from_user).length,
+ tags: ['官方客服'],
+ icon: '👩💼',
+ color: '#2196F3',
+ important: false,
+ coupon: '',
+ expiry: '',
+ claimed: false,
+ order_no: '',
+ status: '',
+ statusText: ''
+ })
+ } else {
+ // 如果没有真实数据,保留一个默认客服入口
+ serviceMessages.push({
+ id: 'default_service',
+ title: '在线客服',
+ role: '智能助手',
+ content: '有问题请随时联系我们',
+ lastMessage: '欢迎咨询',
+ time: '刚刚',
+ read: true,
+ type: 'service',
+ avatar: '/static/icons/service-avatar.png',
+ online: true,
+ unreadCount: 0,
+ tags: ['自动回复'],
+ icon: '🤖',
+ color: '#2196F3',
+ important: false,
+ coupon: '',
+ expiry: '',
+ claimed: false,
+ order_no: '',
+ status: '',
+ statusText: ''
+ })
+ }
+
+ } catch (e) {
+ console.error('加载消息失败', e)
+ } finally {
updateUnreadCount()
loading.value = false
- }, 800)
+ }
}
// 更新未读数量
diff --git a/pages/mall/consumer/messages医药.uvue b/pages/mall/consumer/messages医药.uvue
new file mode 100644
index 00000000..b59d1ba1
--- /dev/null
+++ b/pages/mall/consumer/messages医药.uvue
@@ -0,0 +1,1277 @@
+
+
+
+
+
+ 消息中心
+
+
+ 🧹
+ 一键已读
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tab.name }}
+ {{ tab.unread > 99 ? '99+' : tab.unread }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 专业医药顾问在线解答,服务时间 9:00-22:00
+
+
+
+ 💊
+ 用药咨询
+
+
+ 📋
+ 处方咨询
+
+
+ ⚠️
+ 副作用咨询
+
+
+ 🚚
+ 药品配送
+
+
+
+
+
+
+
+
+
+ {{ message.icon }}
+
+
+
+
+
+
+ {{ message.content }}
+ {{ message.lastMessage }}
+
+
+ {{ tag }}
+
+
+
+
+
+
+ 💡
+ 温馨提示:请勿相信任何要求转账、付款的信息,谨防诈骗
+
+
+
+
+
+
+
+ 📢
+
+
+
+ {{ message.content }}
+ 重要
+
+
+
+
+
+
+
+
+ 📦
+
+
+
+ {{ message.content }}
+ 订单号: {{ message.order_no }}
+
+ {{ message.statusText }}
+
+
+
+
+
+
+
+
+
+ 🎁
+
+
+
+ {{ message.content }}
+
+ {{ message.coupon }}优惠券
+ 有效期至 {{ message.expiry }}
+ {{ message.claimed ? '已领取' : '点击领取' }}
+
+
+
+
+
+
+
+ 💬
+ 暂无消息
+ 暂时没有新消息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/consumer/order-detail.uvue b/pages/mall/consumer/order-detail.uvue
index 945c717a..59679592 100644
--- a/pages/mall/consumer/order-detail.uvue
+++ b/pages/mall/consumer/order-detail.uvue
@@ -1,8 +1,9 @@
+
-
+
{{ getStatusIcon() }}
@@ -13,34 +14,40 @@
-
+
-
- {{ getDeliveryAddress().name }}
- {{ getDeliveryAddress().phone }}
+ 📍
+
+
+ {{ deliveryAddress.name }}
+ {{ deliveryAddress.phone }}
+
+ {{ getFullAddress(deliveryAddress) }}
- {{ getDeliveryAddress().detail }}
-
- 配送员:
- {{ deliveryInfo.courier_name }}
- {{ deliveryInfo.courier_phone }}
+
+
+ 物流单号:
+ {{ deliveryInfo.tracking_no }}
+ 复制
-
-
-
-
-
-
-
-
-
+
+
+ 🎧
+ 客服
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/pages/mall/consumer/orders.uvue b/pages/mall/consumer/orders.uvue
index 19de501a..2edecb81 100644
--- a/pages/mall/consumer/orders.uvue
+++ b/pages/mall/consumer/orders.uvue
@@ -115,15 +115,18 @@
+
+
+
@@ -213,6 +216,7 @@ onLoad((options) => {
if (type === 'pending') activeTab.value = 'pending'
else if (type === 'shipped') activeTab.value = 'delivering' // 映射到待收货
else if (type === 'review') activeTab.value = 'completed' // 映射到已完成
+ else if (type === 'refund') activeTab.value = 'all' // 申请售后默认显示全部
}
})
@@ -241,8 +245,8 @@ const loadOrders = async () => {
id: item.product_id,
name: item.product_name,
price: item.price,
- image: item.product_image,
- spec: item.spec || '',
+ image: item.image_url || '/static/default-product.png',
+ spec: item.specifications ? (typeof item.specifications === 'string' ? item.specifications : Object.values(item.specifications).join(' ')) : '',
quantity: item.quantity
}))
}))
@@ -451,23 +455,49 @@ const viewLogistics = (orderId: string) => {
})
}
-const confirmReceipt = (orderId: string) => {
+const confirmReceipt = async (orderId: string) => {
uni.showModal({
title: '确认收货',
content: '请确认您已收到商品,且商品无误',
- success: (res) => {
+ success: async (res) => {
if (res.confirm) {
- // 这里应该是实际的API调用
- uni.showToast({
- title: '收货成功',
- icon: 'success'
- })
-
- // 更新订单状态
- const index = orders.value.findIndex(order => order.id === orderId)
- if (index !== -1) {
- orders.value[index].status = 4
- orders.value = [...orders.value]
+ uni.showLoading({ title: '处理中...' })
+ try {
+ const result = await supabaseService.confirmReceipt(orderId)
+ uni.hideLoading()
+
+ if (result.success) {
+ uni.showToast({
+ title: '收货成功',
+ icon: 'success'
+ })
+
+ // 更新本地状态
+ const index = orders.value.findIndex(order => order.id === orderId)
+ if (index !== -1) {
+ orders.value[index].status = 4
+ orders.value = [...orders.value]
+ }
+
+ // 跳转到评价页面
+ setTimeout(() => {
+ const order = orders.value.find(o => o.id === orderId)
+ if (order) {
+ goReview(order)
+ }
+ }, 1000)
+ } else {
+ uni.showToast({
+ title: result.error || '确认收货失败',
+ icon: 'none'
+ })
+ }
+ } catch (e) {
+ uni.hideLoading()
+ uni.showToast({
+ title: '系统异常',
+ icon: 'none'
+ })
}
}
}
@@ -503,6 +533,12 @@ const viewOrderDetail = (orderId: string) => {
})
}
+const onApplyRefund = (order: any) => {
+ uni.navigateTo({
+ url: `/pages/mall/consumer/apply-refund?orderId=${order.id}`
+ })
+}
+
// 导航函数
const navigateToSearch = () => {
uni.navigateTo({ url: '/pages/mall/consumer/search' })
diff --git a/pages/mall/consumer/ordersgood.uvue b/pages/mall/consumer/ordersgood.uvue
deleted file mode 100644
index ffa1f520..00000000
--- a/pages/mall/consumer/ordersgood.uvue
+++ /dev/null
@@ -1,996 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ tab.name }}
- {{ tab.count }}
-
-
-
-
-
-
-
-
-
- 📦
- 暂无订单
- 去逛逛,发现心仪的商品
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ product.name }}
- {{ product.spec }}
-
-
-
-
-
-
-
-
- 商品合计
- ¥{{ order.product_amount }}
-
-
- 运费
- ¥{{ order.shipping_fee }}
-
-
- 实付款
- ¥{{ order.total_amount }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 加载中...
-
-
-
- 没有更多订单了
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/orderss.uvue b/pages/mall/consumer/orderss.uvue
deleted file mode 100644
index 9bf2a0ee..00000000
--- a/pages/mall/consumer/orderss.uvue
+++ /dev/null
@@ -1,1050 +0,0 @@
-
-
-
-
-
-
-
-
-
- 全部
-
-
- 待支付
- {{ tabBadges.pending }}
-
-
- 待发货
- {{ tabBadges.shipping }}
-
-
- 待收货
- {{ tabBadges.receiving }}
-
-
- 待评价
- {{ tabBadges.review }}
-
-
-
-
-
-
-
- 📦
- 暂无订单
- 去逛逛吧,有惊喜在等你
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.product_name }}
-
- {{ getSpecText(item.sku_specifications) }}
-
-
- ¥{{ item.price }}
- ×{{ item.quantity }}
-
-
-
-
-
-
-
- {{ formatTime(order.created_at) }}
-
- 共{{ getTotalQuantity(order.items) }}件商品 合计:
- ¥{{ order.actual_amount }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 加载中...
-
-
- 没有更多订单了
-
-
-
-
-
-
- 🏠
- 首页
-
-
- 📂
- 分类
-
-
- 📦
- 订单
-
-
- 👤
- 我的
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/ordersx.uvue b/pages/mall/consumer/ordersx.uvue
deleted file mode 100644
index 48a43200..00000000
--- a/pages/mall/consumer/ordersx.uvue
+++ /dev/null
@@ -1,1046 +0,0 @@
-
-
-
-
-
-
-
-
-
- 全部
-
-
- 待支付
- {{ tabBadges.pending }}
-
-
- 待发货
- {{ tabBadges.shipping }}
-
-
- 待收货
- {{ tabBadges.receiving }}
-
-
- 待评价
- {{ tabBadges.review }}
-
-
-
-
-
-
-
- 📦
- 暂无订单
- 去逛逛吧,有惊喜在等你
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.product_name }}
-
- {{ getSpecText(item.sku_specifications) }}
-
-
- ¥{{ item.price }}
- ×{{ item.quantity }}
-
-
-
-
-
-
-
- {{ formatTime(order.created_at) }}
-
- 共{{ getTotalQuantity(order.items) }}件商品 合计:
- ¥{{ order.actual_amount }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 加载中...
-
-
- 没有更多订单了
-
-
-
-
-
-
- 🏠
- 首页
-
-
- 📂
- 分类
-
-
- 📦
- 订单
-
-
- 👤
- 我的
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/payment.uvue b/pages/mall/consumer/payment.uvue
index 7d4f8c11..19ae75f3 100644
--- a/pages/mall/consumer/payment.uvue
+++ b/pages/mall/consumer/payment.uvue
@@ -111,7 +111,7 @@
-
-
diff --git a/pages/mall/consumer/product-detail copy 3.uvue b/pages/mall/consumer/product-detail copy 3.uvue
deleted file mode 100644
index a1da08fa..00000000
--- a/pages/mall/consumer/product-detail copy 3.uvue
+++ /dev/null
@@ -1,1392 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ currentImageIndex + 1 }} / {{ product.images.length }}
-
-
-
-
-
- ¥{{ product.price }}
- ¥{{ product.original_price }}
-
- {{ product.name }}
- 已售{{ product.sales }}件 · 库存{{ product.stock }}件
-
-
-
-
-
-
- {{ merchant.shop_name }}
-
- 评分: {{ merchant.rating.toFixed(1) }}
- 销量: {{ merchant.total_sales }}
-
-
- 进店 >
-
-
-
-
- 功能主治
- {{ product.usage }}
-
-
-
-
- 商品参数
-
- 规格: {{ product.specification }}
- 有效期: {{ product.expiry_date }}
- 批准文号: {{ product.approval_number }}
-
- >
-
-
-
-
- 规格
- {{ selectedSpec || '请选择规格' }}
- >
-
-
-
-
- 数量
-
-
- -
-
-
-
- +
-
-
- 库存{{ getAvailableStock() }}件
-
-
-
-
- 商品详情
- {{ product.description || '暂无详细描述' }}
-
-
-
-
-
-
-
-
-
-
- 🛒
- 购物车
-
-
- {{ isFavorite ? '❤️' : '🤍' }}
- {{ isFavorite ? '已收藏' : '收藏' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ getSkuSpecText(sku) }}
- ¥{{ sku.price }}
- 库存{{ sku.stock }}
-
-
-
-
-
-
-
-
-
-
-
- 规格
- {{ product.specification }}
-
-
- 功能主治
- {{ product.usage }}
-
-
- 副作用
- {{ product.side_effects }}
-
-
- 注意事项
- {{ product.precautions }}
-
-
- 有效期
- {{ product.expiry_date }}
-
-
- 储存条件
- {{ product.storage_conditions }}
-
-
- 批准文号
- {{ product.approval_number }}
-
-
- 标签
- {{ product.tags.join(', ') }}
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/product-detail copy完成图片数量数据获取.uvue b/pages/mall/consumer/product-detail copy完成图片数量数据获取.uvue
deleted file mode 100644
index 1049c5b2..00000000
--- a/pages/mall/consumer/product-detail copy完成图片数量数据获取.uvue
+++ /dev/null
@@ -1,1359 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ currentImageIndex + 1 }} / {{ product.images.length }}
-
-
-
-
-
- ¥{{ product.price }}
- ¥{{ product.original_price }}
-
- {{ product.name }}
- 已售{{ product.sales }}件 · 库存{{ product.stock }}件
-
-
-
-
-
-
- {{ merchant.shop_name }}
-
- 评分: {{ merchant.rating.toFixed(1) }}
- 销量: {{ merchant.total_sales }}
-
-
- 进店 >
-
-
-
-
- 功能主治
- {{ product.usage }}
-
-
-
-
- 商品参数
-
- 规格: {{ product.specification }}
- 有效期: {{ product.expiry_date }}
- 批准文号: {{ product.approval_number }}
-
- >
-
-
-
-
- 规格
- {{ selectedSpec || '请选择规格' }}
- >
-
-
-
-
- 数量
-
-
- -
-
-
-
- +
-
-
- 库存{{ getAvailableStock() }}件
-
-
-
-
- 商品详情
- {{ product.description || '暂无详细描述' }}
-
-
-
-
-
-
-
-
-
-
- 🛒
- 购物车
-
-
- {{ isFavorite ? '❤️' : '🤍' }}
- {{ isFavorite ? '已收藏' : '收藏' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ getSkuSpecText(sku) }}
- ¥{{ sku.price }}
- 库存{{ sku.stock }}
-
-
-
-
-
-
-
-
-
-
-
- 规格
- {{ product.specification }}
-
-
- 功能主治
- {{ product.usage }}
-
-
- 副作用
- {{ product.side_effects }}
-
-
- 注意事项
- {{ product.precautions }}
-
-
- 有效期
- {{ product.expiry_date }}
-
-
- 储存条件
- {{ product.storage_conditions }}
-
-
- 批准文号
- {{ product.approval_number }}
-
-
- 标签
- {{ product.tags.join(', ') }}
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/product-detail.uvue b/pages/mall/consumer/product-detail.uvue
index 9e240061..64918dcb 100644
--- a/pages/mall/consumer/product-detail.uvue
+++ b/pages/mall/consumer/product-detail.uvue
@@ -52,7 +52,7 @@
-
+
规格
{{ selectedSpec || '请选择规格' }}
>
@@ -276,6 +276,13 @@ export default {
},
methods: {
saveFootprint(productId: string) {
+ // 调用后端API记录足迹
+ supabaseService.addFootprint(productId).then(success => {
+ if (success) {
+ console.log('足迹已同步到服务器')
+ }
+ })
+
const footprintData = uni.getStorageSync('footprints')
let footprints: any[] = []
@@ -311,330 +318,158 @@ export default {
},
async loadProductDetail(productId: string, options: any = {}) {
- // 尝试从数据库加载
- let dbProductRaw = null
+ uni.showLoading({ title: '加载中...' })
try {
- console.log('正在尝试从数据库加载商品详情:', productId)
- dbProductRaw = await supabaseService.getProductById(productId)
- console.log('数据库返回的商品详情 (原始数据):', dbProductRaw)
-
- // 调试:打印数据库返回的所有字段
- if (dbProductRaw) {
- console.log('数据库返回字段详情:')
- if (Array.isArray(dbProductRaw)) {
- console.log('返回数据是数组,长度:', dbProductRaw.length)
- if (dbProductRaw.length > 0) {
- const firstItem = dbProductRaw[0]
- console.log('数组第一个元素:', firstItem)
- for (const key in firstItem) {
- console.log(` ${key}:`, firstItem[key], typeof firstItem[key])
- }
+ const dbProductResponse = await supabaseService.getProductById(productId)
+ let dbProduct: any = null
+ if (Array.isArray(dbProductResponse) && dbProductResponse.length > 0) {
+ dbProduct = dbProductResponse[0]
+ } else if (dbProductResponse && !Array.isArray(dbProductResponse)) {
+ dbProduct = dbProductResponse
+ }
+
+ if (dbProduct) {
+ // Map DB product to local product
+ this.product = {
+ id: dbProduct.id,
+ merchant_id: dbProduct.merchant_id || dbProduct.shop_id || '',
+ category_id: dbProduct.category_id || '',
+ name: dbProduct.name,
+ description: dbProduct.description || '',
+ images: [] as string[],
+ price: dbProduct.base_price || dbProduct.price || 0,
+ original_price: dbProduct.market_price || dbProduct.original_price || 0,
+ stock: dbProduct.available_stock || dbProduct.total_stock || dbProduct.stock || 0,
+ sales: dbProduct.sale_count || dbProduct.sales || 0,
+ status: dbProduct.status !== undefined ? dbProduct.status : 1,
+ created_at: dbProduct.created_at || new Date().toISOString(),
+ // Attributes
+ specification: dbProduct.specification || null,
+ usage: dbProduct.usage || null,
+ side_effects: dbProduct.side_effects || null,
+ precautions: dbProduct.precautions || null,
+ expiry_date: dbProduct.expiry_date || null,
+ storage_conditions: dbProduct.storage_conditions || null,
+ approval_number: dbProduct.approval_number || null,
+ tags: [] as string[]
+ } as ProductType
+
+ // Handle Images
+ if (dbProduct.image_urls) {
+ try {
+ const parsed = typeof dbProduct.image_urls === 'string' ? JSON.parse(dbProduct.image_urls) : dbProduct.image_urls
+ if (Array.isArray(parsed)) {
+ this.product.images = parsed.map((i: any) => String(i))
+ }
+ } catch (e) { console.error('Error parsing image_urls', e) }
}
- } else {
- console.log('返回数据是对象')
- for (const key in dbProductRaw) {
- console.log(` ${key}:`, dbProductRaw[key], typeof dbProductRaw[key])
+ // Fallback to main_image_url if no images found
+ if (this.product.images.length === 0 && dbProduct.main_image_url) {
+ this.product.images.push(dbProduct.main_image_url)
}
- }
+ // Fallback to 'image' field (legacy)
+ if (this.product.images.length === 0 && dbProduct.image) {
+ this.product.images.push(dbProduct.image)
+ }
+ // Final fallback
+ if (this.product.images.length === 0) {
+ this.product.images.push('/static/default-product.png')
+ }
+
+ // Handle Tags
+ if (dbProduct.tags) {
+ try {
+ const parsedTags = typeof dbProduct.tags === 'string' ? JSON.parse(dbProduct.tags) : dbProduct.tags
+ if (Array.isArray(parsedTags)) {
+ this.product.tags = parsedTags.map((t: any) => String(t))
+ }
+ } catch (e) {}
+ }
+
+ // Handle JSON attributes if present
+ if (dbProduct.attributes && typeof dbProduct.attributes === 'string') {
+ try {
+ const attrs = JSON.parse(dbProduct.attributes)
+ if (attrs) {
+ // Merge attributes into product if they match keys
+ if (attrs.specification) this.product.specification = attrs.specification
+ if (attrs.usage) this.product.usage = attrs.usage
+ // ... augment as needed
+ }
+ } catch(e) {}
+ }
+
+ // Load SKUs
+ // this.loadProductSkus(productId) // If SKU logic exists
+ } else {
+ throw new Error('No product found')
}
} catch (e) {
- console.error('Failed to load product from DB', e)
- }
-
- // 处理数据库返回数据:可能是数组或对象
- let dbProduct = null
- if (dbProductRaw) {
- if (Array.isArray(dbProductRaw)) {
- if (dbProductRaw.length > 0) {
- dbProduct = dbProductRaw[0] // 取数组第一个元素
- } else {
- console.warn('数据库返回空数组')
- }
- } else {
- dbProduct = dbProductRaw // 已经是对象
- }
- }
-
- if (dbProduct) {
- console.log('使用数据库数据渲染页面')
-
- // 调试:打印dbProduct的详细结构和类型
- console.log('dbProduct类型:', typeof dbProduct)
- console.log('dbProduct原型:', Object.getPrototypeOf(dbProduct))
- console.log('dbProduct的键:')
- for (let key in dbProduct) {
- console.log(' ', key, ':', dbProduct[key], '类型:', typeof dbProduct[key])
- }
-
- // 验证必要字段,如果关键字段缺失则使用模拟数据
- // 注意:数据库返回的字段可能与本地ProductType不完全匹配
- console.log('验证必要字段,dbProduct:', dbProduct)
-
- // 尝试多种方式访问属性
- const idValue = dbProduct.id !== undefined ? dbProduct.id : (dbProduct['id'] !== undefined ? dbProduct['id'] : undefined)
- const nameValue = dbProduct.name !== undefined ? dbProduct.name : (dbProduct['name'] !== undefined ? dbProduct['name'] : undefined)
-
- // 价格字段兼容性处理:优先查找 price,其次查找 base_price
- let priceValue = dbProduct.price
- if (priceValue === undefined || priceValue === null) {
- priceValue = dbProduct.base_price
- }
- if (priceValue === undefined || priceValue === null) {
- priceValue = dbProduct['price']
- }
- if (priceValue === undefined || priceValue === null) {
- priceValue = dbProduct['base_price']
- }
-
- const hasId = idValue !== undefined && idValue !== null
- const hasName = nameValue !== undefined && nameValue !== null
- const hasPrice = priceValue !== undefined && priceValue !== null
-
- const hasRequiredFields = dbProduct && hasId && hasName && hasPrice
- console.log('字段检查 - id:', idValue, 'hasId:', hasId, 'name:', nameValue, 'hasName:', hasName, 'price:', priceValue, 'hasPrice:', hasPrice)
- console.log('hasRequiredFields:', hasRequiredFields)
-
- if (!hasRequiredFields) {
- console.warn('数据库返回数据缺少必要字段,使用模拟数据')
- // 继续执行,会进入下面的else分支
- dbProduct = null
- } else {
- // 更新dbProduct的字段为实际值,确保后续使用正确的属性访问
- if (dbProduct.id === undefined && idValue !== undefined) dbProduct.id = idValue
- if (dbProduct.name === undefined && nameValue !== undefined) dbProduct.name = nameValue
- if (dbProduct.price === undefined && priceValue !== undefined) dbProduct.price = priceValue
- // 使用数据库数据 - 处理字段映射
- // 数据库Product接口和本地ProductType接口字段可能不同
- const images = [] as Array
-
- // 处理图片字段:优先使用image_urls字段,其次使用main_image_url
- console.log('处理数据库图片字段')
-
- // 尝试从数据库的image_urls字段获取图片(JSON字符串或对象)
- if (dbProduct.image_urls) {
- let imagesArray: any[] = []
- if (typeof dbProduct.image_urls === 'string') {
- try {
- imagesArray = JSON.parse(dbProduct.image_urls)
- } catch (e) {
- console.error('解析image_urls字段失败:', e, dbProduct.image_urls)
- // 尝试逗号分割
- if (dbProduct.image_urls.includes(',')) {
- imagesArray = dbProduct.image_urls.split(',').map((img: string) => img.trim())
- }
- }
- } else if (Array.isArray(dbProduct.image_urls)) {
- imagesArray = dbProduct.image_urls
- }
-
- if (imagesArray.length > 0) {
- for (const img of imagesArray) {
- if (typeof img === 'string' && img) {
- images.push(img)
- }
- }
- }
- }
-
- // 如果没有获取到相册图,但有主图,放入相册
- if (dbProduct.main_image_url) {
- // 如果相册里没有这张图,把它加到第一位
- if (!images.includes(dbProduct.main_image_url)) {
- images.unshift(dbProduct.main_image_url)
- }
- }
-
- // 兼容旧字段 image
- if (images.length === 0 && dbProduct.image) {
- images.push(dbProduct.image)
- }
-
- // 如果仍然没有图片,使用传入的图片或默认图片
- if (images.length === 0) {
- if (options.image) {
- images.push(decodeURIComponent(options.image as string))
- } else {
- images.push('/static/product1.jpg')
- }
- }
-
- // 补充模拟图片(如果图片数量不足3张)
- const needSupplementCount = 3 - images.length
- if (needSupplementCount > 0) {
- const supplementalImages = ['/static/product2.jpg', '/static/product3.jpg']
- for (let i = 0; i < needSupplementCount && i < supplementalImages.length; i++) {
- images.push(supplementalImages[i])
- }
- }
-
- console.log('最终图片数组:', images)
-
- // 映射字段:数据库shop_id对应本地merchant_id
- const merchantId = dbProduct.shop_id || dbProduct.merchant_id || 'merchant_001'
-
- // 确保数值字段有效
- // 优先使用 price,不存在则使用 base_price
- let productPrice = 0
- if (typeof dbProduct.price === 'number') {
- productPrice = dbProduct.price
- } else if (typeof dbProduct.base_price === 'number') {
- productPrice = dbProduct.base_price
- } else if (priceValue !== undefined) {
- // 使用上面校验时获取到的 priceValue
- productPrice = Number(priceValue)
- }
-
- const stock = (dbProduct.stock != null && !isNaN(Number(dbProduct.stock))) ? Math.floor(Number(dbProduct.stock)) : ((dbProduct.total_stock != null && !isNaN(Number(dbProduct.total_stock))) ? Math.floor(Number(dbProduct.total_stock)) : 100)
- const sales = (dbProduct.sales != null && !isNaN(Number(dbProduct.sales))) ? Math.floor(Number(dbProduct.sales)) : ((dbProduct.sale_count != null && !isNaN(Number(dbProduct.sale_count))) ? Math.floor(Number(dbProduct.sale_count)) : 50)
-
- // 解析 attributes
- let attributes: any = {}
- if (dbProduct.attributes) {
- try {
- if (typeof dbProduct.attributes === 'string') {
- attributes = JSON.parse(dbProduct.attributes)
- } else {
- attributes = dbProduct.attributes
- }
- } catch (e) {
- console.error('解析 attributes 失败', e)
- }
- }
-
- this.product = {
- id: dbProduct.id || productId,
- merchant_id: merchantId,
- category_id: dbProduct.category_id || 'cat_001',
- name: dbProduct.name || '商品名称',
- description: dbProduct.description || '这是一个高品质的商品,具有优秀的性能和优美的外观设计。采用环保材料,经过严格质检,保证用户的使用体验。',
- images: images,
- price: productPrice,
- original_price: (dbProduct.original_price != null && !isNaN(Number(dbProduct.original_price))) ? Number(dbProduct.original_price) : ((dbProduct.market_price != null && !isNaN(Number(dbProduct.market_price))) ? Number(dbProduct.market_price) : null),
- stock: stock,
- sales: sales,
- status: 1,
- created_at: dbProduct.created_at || '2024-01-01',
- // 药品相关字段
- specification: attributes.specification || dbProduct.specification || null,
- usage: attributes.usage || dbProduct.usage || null,
- side_effects: attributes.side_effects || dbProduct.side_effects || null,
- precautions: attributes.precautions || dbProduct.precautions || null,
- expiry_date: attributes.expiry_date || dbProduct.expiry_date || null,
- storage_conditions: attributes.storage_conditions || dbProduct.storage_conditions || null,
- approval_number: attributes.approval_number || dbProduct.approval_number || null,
- tags: dbProduct.tags ? (typeof dbProduct.tags === 'string' ? JSON.parse(dbProduct.tags) : dbProduct.tags) : []
- } as ProductType
- console.log('页面 product 对象已更新:', this.product)
- console.log('商品图片数组:', this.product.images)
- console.log('商品价格:', this.product.price, '库存:', this.product.stock, '销量:', this.product.sales)
- }
- } else {
- console.log('数据库无数据或加载失败,使用模拟数据')
- // 数据库无数据时,使用原有模拟逻辑
- const generatePriceFromId = (id: string): number => {
- let hash = 0
- for (let i = 0; i < id.length; i++) {
- hash = (hash << 5) - hash + id.charCodeAt(i)
- hash |= 0
- }
- const price = 50 + Math.abs(hash % 450)
- return parseFloat(price.toFixed(2))
- }
-
- const basePrice = options.price ? parseFloat(options.price) : generatePriceFromId(productId)
- const originalPrice = options.originalPrice ? parseFloat(options.originalPrice) : parseFloat((basePrice * 1.2).toFixed(2))
-
- const productName = options.name ? decodeURIComponent(options.name) : (() => {
- const productNames = ['高品质运动休闲鞋', '时尚简约双肩背包', '多功能智能手环', '便携式蓝牙音箱', '全自动雨伞', '抗菌防螨床上四件套', '不锈钢保温杯', '无线充电器', '高清行车记录仪', '智能体脂秤']
- const nameIndex = Math.abs(productId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % productNames.length
- return productNames[nameIndex]
- })()
-
- const productImage = options.image ? decodeURIComponent(options.image) : '/static/product1.jpg'
-
- const sales = 1000 + Math.abs(productId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 5000
- const stock = 50 + Math.abs(productId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 200
-
- this.product = {
- id: productId,
- merchant_id: 'merchant_' + (Math.abs(productId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 5 + 1).toString().padStart(3, '0'),
- category_id: 'cat_' + (Math.abs(productId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 10 + 1).toString().padStart(3, '0'),
- name: productName,
- description: '这是一个高品质的商品,具有优秀的性能和优美的外观设计。采用环保材料,经过严格质检,保证用户的使用体验。',
- images: [productImage, '/static/product2.jpg', '/static/product3.jpg'],
- price: basePrice,
- original_price: originalPrice,
- stock: stock,
- sales: sales,
- status: 1,
- created_at: '2024-01-15'
- }
+ console.error('Failed to load product detail:', e)
+ // Fallback to options if available
+ this.product.id = productId
+ this.product.name = options.name ? decodeURIComponent(options.name) : '未知商品'
+ this.product.price = options.price ? parseFloat(options.price) : 0
+ this.product.images = options.image ? [decodeURIComponent(options.image)] : ['/static/default-product.png']
}
- // 尝试加载真实商户信息
+ // Load Merchant and SKUs
+ if (this.product.merchant_id) {
+ await this.loadMerchantInfo(this.product.merchant_id)
+ }
+ if (this.product.id) {
+ this.loadProductSkus(this.product.id)
+ }
+
+ uni.hideLoading()
+ },
+
+ async loadMerchantInfo(merchantId: string) {
let realMerchantLoaded = false
- // 只有当 ID 是 UUID 格式(包含-)或者是真实数据时才尝试查询
- if (this.product.merchant_id && (this.product.merchant_id.includes('-') || !this.product.merchant_id.startsWith('merchant_'))) {
- console.log('尝试加载商户信息:', this.product.merchant_id)
+ if (merchantId.includes('-') || !merchantId.startsWith('merchant_')) {
try {
- const shop = await supabaseService.getShopByMerchantId(this.product.merchant_id)
+ const shop = await supabaseService.getShopByMerchantId(merchantId)
if (shop) {
- console.log('加载到商户信息:', shop.shop_name)
-
- // 确保字段存在,避免 undefined 导致构造失败
this.merchant = {
- id: shop.id || '',
- user_id: shop.merchant_id || '',
- shop_name: shop.shop_name || '未命名店铺',
+ id: shop.id,
+ user_id: shop.merchant_id,
+ shop_name: shop.shop_name,
shop_logo: shop.shop_logo || '/static/default-shop.png',
shop_banner: shop.shop_banner || '/static/default-banner.png',
shop_description: shop.description || '',
contact_name: shop.contact_name || '店主',
contact_phone: shop.contact_phone || '',
shop_status: 1,
- // 优先使用 avg_rating,没有则使用默认值
- rating: shop.rating_avg !== undefined && shop.rating_avg !== null ? shop.rating_avg : 4.8,
- // 使用 order_count 或 product_count 作为销量/活跃度指标,如果没有则默认 0
- total_sales: shop.total_sales !== undefined ? shop.total_sales : (shop.order_count !== undefined ? shop.order_count : 0),
+ rating: shop.rating_avg || 5.0,
+ total_sales: shop.total_sales || 0,
created_at: shop.created_at || new Date().toISOString()
} as MerchantType
realMerchantLoaded = true
}
} catch (e) {
- console.error('加载商户信息失败', e)
+ console.error('Load shop failed', e)
}
}
if (!realMerchantLoaded) {
- // 根据商家ID生成不同的商家信息
- const merchantIndex = Math.abs(this.product.merchant_id.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 5
+ const merchantIndex = Math.abs(merchantId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)) % 5
const shopNames = ['优质好店', '品牌直营店', '官方旗舰店', '专卖店', '精品小店']
- const shopDescriptions = [
- '专注品质生活',
- '品牌官方直营,正品保障',
- '厂家直销,价格优惠',
- '专注本领域十年老店',
- '用心服务每一位顾客'
- ]
- const contactNames = ['店主小王', '店长小李', '经理小张', '客服小赵', '老板小钱']
this.merchant = {
- id: this.product.merchant_id,
- user_id: 'user_' + (merchantIndex + 1).toString().padStart(3, '0'),
+ id: merchantId,
+ user_id: 'user_mock_' + merchantIndex,
shop_name: shopNames[merchantIndex],
shop_logo: '/static/shop-logo.png',
shop_banner: '/static/shop-banner.png',
- shop_description: shopDescriptions[merchantIndex],
- contact_name: contactNames[merchantIndex],
- contact_phone: '138' + (10000000 + merchantIndex * 1111111).toString().substring(0, 8),
+ shop_description: '优质服务,正品保障',
+ contact_name: '店主',
+ contact_phone: '',
shop_status: 1,
- rating: 4.5 + (merchantIndex * 0.1),
- total_sales: 10000 + merchantIndex * 5000,
- created_at: '2023-06-01'
- }
+ rating: 4.8,
+ total_sales: 999,
+ created_at: '2023-01-01'
+ } as MerchantType
}
-
- this.loadProductSkus(productId)
},
async loadProductSkus(productId: string) {
@@ -674,32 +509,9 @@ export default {
console.error('Fetch SKUs error', e)
}
- // 模拟加载商品SKU数据
- const basePrice = this.product.price
- // 使用 productId 作为前缀生成唯一的 SKU ID,防止不同商品的 SKU ID 冲突
- this.productSkus = [
- {
- id: `${productId}_sku_001`,
- product_id: productId,
- sku_code: 'SKU001',
- specifications: { color: '红色', size: 'M' },
- price: basePrice,
- stock: 50,
- image_url: '/static/sku1.jpg',
- status: 1
- },
- {
- id: `${productId}_sku_002`,
- product_id: productId,
- sku_code: 'SKU002',
- specifications: { color: '蓝色', size: 'L' },
- price: parseFloat((basePrice * 1.1).toFixed(2)),
- stock: 30,
- image_url: '/static/sku2.jpg',
- status: 1
- }
- ]
+ // 如果没有从数据库加载到SKU,则不显示规格选择,直接作为无规格商品添加
+ // 移除之前的Mock逻辑,因为Mock的ID不符合UUID格式会导致数据库错误
},
onSwiperChange(e: any) {
@@ -729,7 +541,7 @@ export default {
},
async addToCart() {
- if (!this.selectedSkuId) {
+ if (this.productSkus.length > 0 && !this.selectedSkuId) {
uni.showToast({
title: '请选择规格',
icon: 'none'
@@ -776,7 +588,7 @@ export default {
},
buyNow() {
- if (!this.selectedSkuId) {
+ if (this.productSkus.length > 0 && !this.selectedSkuId) {
uni.showToast({
title: '请选择规格',
icon: 'none'
@@ -784,7 +596,7 @@ export default {
return
}
- const sku = this.productSkus.find(s => s.id === this.selectedSkuId)
+ const sku = this.selectedSkuId ? this.productSkus.find(s => s.id === this.selectedSkuId) : null
// 调试:打印价格信息
console.log('立即购买 - 商品价格信息:')
@@ -829,56 +641,53 @@ export default {
},
checkFavoriteStatus(id: string) {
- const storedFavorites = uni.getStorageSync('favorites')
- if (storedFavorites) {
- try {
- const favorites = JSON.parse(storedFavorites as string) as any[]
- this.isFavorite = favorites.some(item => item.id === id)
- } catch (e) {
- console.error('Failed to parse favorites', e)
- }
- }
+ // console.log('product-detail checkFavoriteStatus id:', id)
+ this.checkFavorite(id)
+ },
+
+ async checkFavorite(id: string) {
+ const isFav = await supabaseService.checkFavorite(id)
+ this.isFavorite = isFav
},
- toggleFavorite() {
- const storedFavorites = uni.getStorageSync('favorites')
- let favorites: any[] = []
+ async toggleFavorite() {
+ if (!this.product.id) return
- if (storedFavorites) {
- try {
- favorites = JSON.parse(storedFavorites as string) as any[]
- } catch (e) {
- console.error('Failed to parse favorites', e)
- }
+ // 显示loading
+ uni.showLoading({ title: '处理中' })
+
+ try {
+ // 记录操作前的状态
+ const wasFavorite = this.isFavorite
+
+ // 执行切换,返回的是最新的状态(true=已收藏,false=未收藏)
+ const isNowFavorite = await supabaseService.toggleFavorite(this.product.id)
+ uni.hideLoading()
+
+ if (isNowFavorite !== wasFavorite) {
+ // 状态发生了改变,说明操作成功
+ this.isFavorite = isNowFavorite
+ uni.showToast({
+ title: isNowFavorite ? '收藏成功' : '已取消收藏',
+ icon: 'success'
+ })
+ } else {
+ // 状态未改变,说明操作失败
+ uni.showToast({
+ title: '操作失败',
+ icon: 'none'
+ })
+ // 确保状态同步
+ this.checkFavoriteStatus(this.product.id)
+ }
+ } catch (e) {
+ uni.hideLoading()
+ console.error('Toggle favorite failed', e)
+ uni.showToast({
+ title: '操作异常',
+ icon: 'none'
+ })
}
-
- if (this.isFavorite) {
- // 取消收藏
- favorites = favorites.filter(item => item.id !== this.product.id)
- uni.showToast({
- title: '已取消收藏',
- icon: 'none'
- })
- } else {
- // 添加收藏
- favorites.push({
- id: this.product.id,
- name: this.product.name,
- price: this.product.price,
- original_price: this.product.original_price, // 保存原价
- image: this.product.images[0],
- sales: this.product.sales,
- shopId: this.merchant.id,
- shopName: this.merchant.shop_name
- })
- uni.showToast({
- title: '收藏成功',
- icon: 'success'
- })
- }
-
- uni.setStorageSync('favorites', JSON.stringify(favorites))
- this.isFavorite = !this.isFavorite
},
goToHome() {
diff --git a/pages/mall/consumer/profile - 副本.uvue b/pages/mall/consumer/profile - 副本.uvue
deleted file mode 100644
index c5cb4297..00000000
--- a/pages/mall/consumer/profile - 副本.uvue
+++ /dev/null
@@ -1,909 +0,0 @@
-
-
-
-
-
-
-
-
- 我的订单
-
-
- 📋
- 全部订单
- {{ orderCounts.total }}
-
-
- 💰
- 待支付
- {{ orderCounts.pending }}
-
-
- 🚚
- 待收货
- {{ orderCounts.shipped }}
-
-
- ⭐
- 待评价
- {{ orderCounts.review }}
-
-
-
-
-
-
-
-
-
- 暂无订单记录
-
-
-
-
-
-
-
-
- {{ getOrderTitle(order) }}
- ¥{{ order.actual_amount }}
- {{ formatTime(order.created_at) }}
-
-
-
-
-
-
-
-
-
-
-
-
- 我的服务
-
-
- 🎫
- 优惠券
- {{ serviceCounts.coupons }}
-
-
- 📍
- 收货地址
-
-
- ❤️
- 我的收藏
- {{ serviceCounts.favorites }}
-
-
- 👣
- 浏览足迹
-
-
- 🔄
- 退款/售后
-
-
- 💬
- 在线客服
-
-
- 🧩
- 我的订阅
-
-
- 🧩
- 软件订阅
-
-
-
-
-
-
- 消费统计
-
- {{ period.label }}
-
-
-
-
- ¥{{ currentStats.total_amount }}
- 总消费
-
-
- {{ currentStats.order_count }}
- 订单数
-
-
- ¥{{ currentStats.avg_amount }}
- 平均消费
-
-
- {{ currentStats.save_amount }}
- 节省金额
-
-
-
-
-
-
- 账户安全
-
-
- 🔒
- 修改密码
- >
-
-
- 📱
- 手机绑定
-
- {{ userInfo.phone ? '已绑定' : '未绑定' }}
- >
-
-
-
- 📧
- 邮箱绑定
-
- {{ userInfo.email ? '已绑定' : '未绑定' }}
- >
-
-
-
-
-
-
-
-
-
-
diff --git a/pages/mall/consumer/profile.uvue b/pages/mall/consumer/profile.uvue
index d29a1fa6..ee21854f 100644
--- a/pages/mall/consumer/profile.uvue
+++ b/pages/mall/consumer/profile.uvue
@@ -70,9 +70,9 @@
🔄
退款/售后
-
- 💬
- 在线客服
+
+ 📝
+ 评价
🧩
@@ -248,7 +248,7 @@
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/settings.uvue b/pages/mall/consumer/settings.uvue
index 17e2fe7b..d26ae394 100644
--- a/pages/mall/consumer/settings.uvue
+++ b/pages/mall/consumer/settings.uvue
@@ -17,11 +17,11 @@
个人资料
›
-
+
🔒
修改密码
@@ -125,6 +125,18 @@
+
+
+ 我的服务
+
+
+ 📝
+ 我的评价
+ ›
+
+
+
+
关于我们
@@ -193,7 +205,7 @@
diff --git a/pages/user/bind-phone.uvue b/pages/user/bind-phone.uvue
index f0e0e08d..db7b454b 100644
--- a/pages/user/bind-phone.uvue
+++ b/pages/user/bind-phone.uvue
@@ -18,13 +18,14 @@
diff --git a/pages/user/change-password.uvue b/pages/user/change-password.uvue
index 2cc8b4fc..73feed5a 100644
--- a/pages/user/change-password.uvue
+++ b/pages/user/change-password.uvue
@@ -21,12 +21,13 @@
diff --git a/utils/supabaseService.uts b/utils/supabaseService.uts
index beecb3bb..6b5318e6 100644
--- a/utils/supabaseService.uts
+++ b/utils/supabaseService.uts
@@ -19,29 +19,33 @@ export interface Product {
category_id: string
merchant_id: string
name: string
+ subtitle?: string
description?: string
- specification?: string
- price: number
- base_price?: number
- original_price?: number
+ base_price: number
market_price?: number
- image?: string
+ cost_price?: number
main_image_url?: string
- image_urls?: string // JSON string
- manufacturer?: string
- sales?: number
+ image_urls?: string // JSON string array
+ video_urls?: string // JSON string array
sale_count?: number
- stock?: number
+ view_count?: number
+ total_stock?: number
available_stock?: number
- badge?: string
- shop_id?: string
- shop_name?: string
+ is_hot?: boolean
+ is_new?: boolean
+ is_featured?: boolean
+ status?: number
+ rating_avg?: number
+ rating_count?: number
+ tags?: string // array string in DB
attributes?: string // JSON string
created_at?: string
- expiry_date?: string
- approval_number?: string
- usage?: string
- side_effects?: string
+ updated_at?: string
+ // View fields
+ brand_name?: string
+ category_name?: string
+ shop_name?: string
+ merchant_name?: string
}
export interface Shop {
@@ -65,6 +69,7 @@ export interface CartItem {
user_id: string
product_id: string
sku_id?: string
+ merchant_id?: string
quantity: number
selected: boolean
product_name?: string
@@ -92,6 +97,32 @@ export interface UserAddress {
updated_at?: string
}
+export interface Notification {
+ id: string
+ user_id: string
+ type: string
+ title: string
+ content: string
+ icon_url?: string
+ link_url?: string
+ is_read: boolean
+ extra_data?: string
+ created_at?: string
+}
+
+export interface ChatMessage {
+ id: string
+ session_id?: string
+ sender_id?: string
+ receiver_id?: string
+ content: string
+ msg_type: string
+ is_read: boolean
+ is_from_user: boolean
+ extra_data?: string
+ created_at?: string
+}
+
export interface PaginatedResponse {
data: T[]
total: number
@@ -164,9 +195,10 @@ class SupabaseService {
): Promise> {
try {
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*', { count: 'exact' })
.eq('category_id', categoryId)
+ .eq('status', 1)
.order('sale_count', { ascending: false })
.page(page)
.limit(limit)
@@ -234,9 +266,10 @@ class SupabaseService {
): Promise> {
try {
let query = supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*', { count: 'exact' })
- .or(`name.ilike.%${keyword}%,manufacturer.ilike.%${keyword}%,specification.ilike.%${keyword}%`)
+ .eq('status', 1)
+ .or(`name.ilike.%${keyword}%,description.ilike.%${keyword}%,subtitle.ilike.%${keyword}%,brand_name.ilike.%${keyword}%`)
// 根据sortBy和ascending设置排序
if (sortBy === 'price') {
@@ -287,7 +320,7 @@ class SupabaseService {
async getProductById(productId: string): Promise {
try {
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*')
.eq('id', productId)
.single()
@@ -378,9 +411,11 @@ class SupabaseService {
async getHotProducts(limit: number = 10): Promise {
try {
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*')
- .order('sales', { ascending: false })
+ .eq('is_hot', true)
+ .eq('status', 1)
+ .order('sale_count', { ascending: false })
.limit(limit)
.execute()
@@ -400,9 +435,10 @@ class SupabaseService {
async getProductsByPrice(limit: number = 10, ascending: boolean = true): Promise {
try {
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*')
- .order('price', { ascending })
+ .eq('status', 1)
+ .order('base_price', { ascending })
.limit(limit)
.execute()
@@ -422,9 +458,11 @@ class SupabaseService {
async getProductsByNewest(limit: number = 10): Promise {
try {
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*')
- .order('created_at', { ascending: false })
+ .eq('is_new', true)
+ .eq('status', 1)
+ .order('published_at', { ascending: false }) // Use published_at for newest
.limit(limit)
.execute()
@@ -440,15 +478,16 @@ class SupabaseService {
}
}
- // 获取推荐商品(带badge的商品)
+ // 获取推荐商品(is_featured=true)
async getRecommendedProducts(limit: number = 10): Promise {
try {
- // 直接使用 neq 空字符串查询,忽略 null 值(null 表示没有 badge,不应被推荐)
+ // 查询 is_featured = true 的商品
const response = await supa
- .from('ml_products')
+ .from('ml_products_detail_view')
.select('*')
- .neq('badge', '')
- .order('sales', { ascending: false })
+ .eq('is_featured', true)
+ .eq('status', 1)
+ .order('sale_count', { ascending: false })
.limit(limit)
.execute()
@@ -465,28 +504,10 @@ class SupabaseService {
}
}
- // 获取特价商品(badge为'特价')
+ // 获取特价商品(这里假设没有specific flag, just use logic or tag if exists, defaulting to hot for now or just skip)
+ // Modify to use compatible logic if badge column doesn't exist
async getDiscountProducts(limit: number = 10): Promise {
- try {
- const response = await supa
- .from('ml_products')
- .select('*')
- .eq('badge', '特价')
- .order('sales', { ascending: false })
- .limit(limit)
- .execute()
-
- if (response.error) {
- console.error('获取特价商品失败:', response.error)
- return []
- }
-
- console.log('特价商品查询结果条数:', response.data?.length || 0)
- return response.data as Product[] || []
- } catch (error) {
- console.error('获取特价商品异常:', error)
- return []
- }
+ return [] // 暂无特价字段
}
// 获取当前用户的购物车商品(关联商品和店铺信息)
@@ -499,26 +520,12 @@ class SupabaseService {
}
// 查询购物车表,并关联商品表(使用内联关联)
+ // 注意:使用 !inner 进行内连接,或者 left join (默认)
+ // 修改查询语法以符合 PostgREST 规范
+ // 尝试简化查询,先只查购物车,再查商品,避免复杂的嵌套查询导致 400 错误
const response = await supa
.from('ml_shopping_cart')
- .select(`
- id,
- user_id,
- product_id,
- sku_id,
- quantity,
- selected,
- created_at,
- updated_at,
- ml_products!inner (
- id,
- name,
- image,
- price,
- specification,
- merchant_id
- )
- `)
+ .select('*')
.eq('user_id', userId)
.order('created_at', { ascending: false })
.execute()
@@ -529,73 +536,288 @@ class SupabaseService {
}
const cartData = response.data as any[]
+ // console.log('Raw Cart Data:', JSON.stringify(cartData))
- // 调试日子:打印购物车数据第一条结构,确认产品字段名
- if (cartData && Array.isArray(cartData) && cartData.length > 0) {
- console.log('Cart Item Structure:', JSON.stringify(cartData[0]))
+ if (!cartData || cartData.length === 0) {
+ return []
}
- const merchantIds: string[] = []
-
- if (cartData && Array.isArray(cartData)) {
- for (const item of cartData) {
- // PostgREST 返回的关联字段通常与表名一致
- // 尝试获取ml_products,如果为空则尝试products
- let product = item['ml_products'] as any
- if (!product) {
- product = item['products'] as any
- }
-
- if (product && product.merchant_id && !merchantIds.includes(product.merchant_id)) {
- merchantIds.push(product.merchant_id as string)
- }
+ // 收集所有 product_id 和 sku_id
+ const productIds: string[] = []
+ const skuIds: string[] = []
+ for (let i = 0; i < cartData.length; i++) {
+ let item = cartData[i]
+ let pid: string = ''
+ let sid: string = ''
+ if (item instanceof UTSJSONObject) {
+ pid = item.getString('product_id') || ''
+ sid = item.getString('sku_id') || ''
+ } else {
+ pid = (item['product_id'] as string) || ''
+ sid = (item['sku_id'] as string) || ''
+ }
+ if (pid !== '' && !productIds.includes(pid)) {
+ productIds.push(pid)
+ }
+ if (sid !== '' && !skuIds.includes(sid)) {
+ skuIds.push(sid)
}
}
+
+ // 批量查询商品详情 (使用视图关联店铺信息,修复字段名 specification -> attributes)
+ const productMap = new Map()
- // 查询店铺信息
- const shopMap = new Map()
- if (merchantIds.length > 0) {
- const shopRes = await supa
- .from('ml_shops')
- .select('id, merchant_id, shop_name')
- .in('merchant_id', merchantIds)
+ if (productIds.length > 0) {
+ const productRes = await supa
+ .from('ml_products_detail_view')
+ .select('id,name,main_image_url,base_price,attributes,merchant_id,shop_name')
+ .in('id', productIds)
.execute()
- if (!shopRes.error && shopRes.data != null) {
- const shops = shopRes.data as any[]
- for (const shop of shops) {
- shopMap.set(shop.merchant_id as string, shop)
+ if (!productRes.error && productRes.data != null) {
+ const products = productRes.data as any[]
+ for (let i = 0; i < products.length; i++) {
+ let p = products[i]
+ let pid: string = ''
+
+ if (p instanceof UTSJSONObject) {
+ pid = p.getString('id') || ''
+ } else {
+ pid = (p['id'] as string) || ''
+ }
+
+ if (pid !== '') {
+ productMap.set(pid, p)
+ }
}
}
}
+ // 批量查询 SKU 详情
+ const skuMap = new Map()
+ if (skuIds.length > 0) {
+ const skuRes = await supa
+ .from('ml_product_skus')
+ .select('id, specifications, price, image_url')
+ .in('id', skuIds)
+ .execute()
+
+ if (!skuRes.error && skuRes.data != null) {
+ const skus = skuRes.data as any[]
+ for (let i = 0; i < skus.length; i++) {
+ let s = skus[i]
+ let sid: string = ''
+ if (s instanceof UTSJSONObject) {
+ sid = s.getString('id') || ''
+ } else {
+ sid = (s['id'] as string) || ''
+ }
+
+ if (sid !== '') {
+ skuMap.set(sid, s)
+ }
+ }
+ }
+ }
+
// 处理返回数据,构建CartItem数组
const cartItems: CartItem[] = []
if (cartData && Array.isArray(cartData)) {
- for (const item of cartData) {
- let product = item['ml_products'] as any
- if (!product) {
- product = item['products'] as any
+ for (let i = 0; i < cartData.length; i++) {
+ let item = cartData[i]
+ let itemId: string = ''
+ let userIdVal: string = ''
+ let productId: string = ''
+ let skuId: string = ''
+ let quantity: number = 0
+ let selected: boolean = false
+ let createdAt: string = ''
+ let updatedAt: string = ''
+
+ if (item instanceof UTSJSONObject) {
+ itemId = item.getString('id') || ''
+ userIdVal = item.getString('user_id') || ''
+ productId = item.getString('product_id') || ''
+ skuId = item.getString('sku_id') || ''
+ quantity = item.getNumber('quantity') || 0
+ selected = item.getBoolean('selected') || false
+ createdAt = item.getString('created_at') || ''
+ updatedAt = item.getString('updated_at') || ''
+ } else {
+ itemId = (item['id'] as string) || ''
+ userIdVal = (item['user_id'] as string) || ''
+ productId = (item['product_id'] as string) || ''
+ skuId = (item['sku_id'] as string) || ''
+ quantity = (item['quantity'] as number) || 0
+ selected = (item['selected'] as boolean) || false
+ createdAt = (item['created_at'] as string) || ''
+ updatedAt = (item['updated_at'] as string) || ''
}
- const merchantId = product?.merchant_id as string
- const shopInfo = shopMap.get(merchantId)
+ const product = productMap.get(productId)
+ const sku = (skuId !== '' && skuMap.has(skuId)) ? skuMap.get(skuId) : null
+
+ let merchantId: string = ''
+ let productName: string = ''
+ let productImage: string = ''
+ let productPrice: number = 0
+ let productSpec: string = ''
+ let shopNameStr: string = '未知店铺'
+
+ if (product != null) {
+ if (product instanceof UTSJSONObject) {
+ merchantId = product.getString('merchant_id') || ''
+ productName = product.getString('name') || ''
+ productImage = product.getString('main_image_url') || ''
+ productPrice = product.getNumber('base_price') || 0
+ shopNameStr = product.getString('shop_name') || '未知店铺'
+
+ // 只有当没有sku信息时,才尝试使用商品的attributes(作为降级显示)
+ // 或者如果业务需求是属性和规格都显示,可以修改这里
+ // 但通常SKU规格更具体。如果sku为空,再显示product的attributes
+ if (sku == null) {
+ const specRaw = product.get('attributes')
+ if (specRaw != null) {
+ if (typeof specRaw === 'string') {
+ productSpec = specRaw
+ } else if (specRaw instanceof UTSJSONObject) {
+ const keys = UTSJSONObject.keys(specRaw)
+ const parts: string[] = []
+ for(let k = 0; k < keys.length; k++) {
+ let val = specRaw.get(keys[k])
+ if (val != null) {
+ parts.push(`${keys[k]}: ${val}`)
+ }
+ }
+ productSpec = parts.join('; ')
+ } else {
+ try {
+ let jsonStr = JSON.stringify(specRaw)
+ productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ')
+ } catch (e) {}
+ }
+ }
+ }
+ } else {
+ merchantId = (product['merchant_id'] as string) || ''
+ productName = (product['name'] as string) || ''
+ productImage = (product['main_image_url'] as string) || ''
+ productPrice = (product['base_price'] as number) || 0
+ shopNameStr = (product['shop_name'] as string) || '未知店铺'
+
+ if (sku == null) {
+ const specRaw = product['attributes']
+ if (specRaw != null) {
+ if (typeof specRaw === 'string') {
+ productSpec = specRaw
+ } else if (specRaw instanceof UTSJSONObject) {
+ const keys = UTSJSONObject.keys(specRaw)
+ const parts: string[] = []
+ for(let k = 0; k < keys.length; k++) {
+ let val = specRaw.get(keys[k])
+ if (val != null) {
+ parts.push(`${keys[k]}: ${val}`)
+ }
+ }
+ productSpec = parts.join('; ')
+ } else {
+ try {
+ let jsonStr = JSON.stringify(specRaw)
+ productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ')
+ } catch (e) {}
+ }
+ }
+ }
+ }
+ }
+
+ // 如果有SKU信息,覆盖价格、图片和规格
+ if (sku != null) {
+ if (sku instanceof UTSJSONObject) {
+ const skuPrice = sku.getNumber('price')
+ if (skuPrice != null && skuPrice > 0) {
+ productPrice = skuPrice
+ }
+ const skuImg = sku.getString('image_url')
+ if (skuImg != null && skuImg !== '') {
+ productImage = skuImg
+ }
+
+ const specRaw = sku.get('specifications')
+ if (specRaw != null) {
+ // 优先使用SKU的规格
+ if (typeof specRaw === 'string') {
+ productSpec = specRaw
+ } else if (specRaw instanceof UTSJSONObject) {
+ const keys = UTSJSONObject.keys(specRaw)
+ const parts: string[] = []
+ for(let k = 0; k < keys.length; k++) {
+ let val = specRaw.get(keys[k])
+ if (val != null) {
+ parts.push(`${keys[k]}: ${val}`)
+ }
+ }
+ productSpec = parts.join('; ')
+ } else {
+ try {
+ let jsonStr = JSON.stringify(specRaw)
+ productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ')
+ } catch (e) {}
+ }
+ }
+ } else {
+ const skuPrice = sku['price'] as number
+ if (skuPrice > 0) productPrice = skuPrice
+
+ const skuImg = sku['image_url'] as string
+ if (skuImg && skuImg !== '') productImage = skuImg
+
+ const specRaw = sku['specifications']
+ if (specRaw != null) {
+ // 优先使用SKU的规格
+ if (typeof specRaw === 'string') {
+ productSpec = specRaw
+ } else if (specRaw instanceof UTSJSONObject) {
+ const keys = UTSJSONObject.keys(specRaw)
+ const parts: string[] = []
+ for(let k = 0; k < keys.length; k++) {
+ let val = specRaw.get(keys[k])
+ if (val != null) {
+ parts.push(`${keys[k]}: ${val}`)
+ }
+ }
+ productSpec = parts.join('; ')
+ } else {
+ try {
+ let jsonStr = JSON.stringify(specRaw)
+ productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ')
+ } catch (e) {}
+ }
+ }
+ }
+ }
+
+
+
+ let shopIdStr = merchantId || 'unknown_shop'
+
cartItems.push({
- id: item.id as string,
- user_id: item.user_id as string,
- product_id: item.product_id as string,
- sku_id: item.sku_id as string,
- quantity: item.quantity as number,
- selected: item.selected as boolean,
- product_name: product?.name as string,
- product_image: product?.image as string,
- product_price: product?.price as number,
- product_specification: product?.specification as string,
- shop_id: shopInfo ? (shopInfo['id'] as string) : (merchantId || 'unknown_shop'),
- shop_name: shopInfo ? (shopInfo['shop_name'] as string) : '未知店铺',
- created_at: item.created_at as string,
- updated_at: item.updated_at as string
+ id: itemId,
+ user_id: userIdVal,
+ product_id: productId,
+ sku_id: skuId,
+ merchant_id: merchantId,
+ quantity: quantity,
+ selected: selected,
+ product_name: productName,
+ product_image: productImage,
+ product_price: productPrice,
+ product_specification: productSpec,
+ shop_id: shopIdStr,
+ shop_name: shopNameStr,
+ created_at: createdAt,
+ updated_at: updatedAt
})
}
}
@@ -607,6 +829,59 @@ class SupabaseService {
}
}
+ // 获取用户通知 (系统、活动、订单)
+ async getUserNotifications(type: string | null = null): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return []
+
+ let query = supa
+ .from('ml_notifications')
+ .select('*')
+ .eq('user_id', userId)
+
+ if (type) {
+ query = query.eq('type', type)
+ }
+
+ const response = await query.order('created_at', { ascending: false }).execute()
+
+ if (response.error) {
+ console.error('获取通知失败:', response.error)
+ return []
+ }
+ return response.data as Notification[]
+ } catch (e) {
+ console.error('获取通知异常:', e)
+ return []
+ }
+ }
+
+ // 获取用户聊天消息
+ async getUserChatMessages(): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return []
+
+ const response = await supa
+ .from('ml_chat_messages')
+ .select('*')
+ .or(`sender_id.eq.${userId},receiver_id.eq.${userId}`)
+ .order('created_at', { ascending: false })
+ .limit(50)
+ .execute()
+
+ if (response.error) {
+ console.error('获取聊天记录失败:', response.error)
+ return []
+ }
+ return response.data as ChatMessage[]
+ } catch (e) {
+ console.error('获取聊天记录异常:', e)
+ return []
+ }
+ }
+
// 添加商品到购物车
async addToCart(productId: string, quantity: number = 1, skuId?: string): Promise {
try {
@@ -799,6 +1074,7 @@ class SupabaseService {
// 删除购物车商品
async deleteCartItem(cartItemId: string): Promise {
try {
+ console.log('正在执行删除购物车商品,ID:', cartItemId)
const userId = this.getCurrentUserId()
if (!userId) {
console.error('用户未登录,无法删除购物车商品')
@@ -807,9 +1083,9 @@ class SupabaseService {
const response = await supa
.from('ml_shopping_cart')
- .delete()
.eq('id', cartItemId)
.eq('user_id', userId)
+ .delete()
.execute()
if (response.error) {
@@ -835,9 +1111,9 @@ class SupabaseService {
const response = await supa
.from('ml_shopping_cart')
- .delete()
.eq('user_id', userId)
.in('id', cartItemIds)
+ .delete()
.execute()
if (response.error) {
@@ -863,8 +1139,8 @@ class SupabaseService {
const response = await supa
.from('ml_shopping_cart')
- .delete()
.eq('user_id', userId)
+ .delete()
.execute()
if (response.error) {
@@ -1046,6 +1322,7 @@ class SupabaseService {
// 删除地址
async deleteAddress(addressId: string): Promise {
try {
+ console.log('正在执行删除地址,ID:', addressId)
const userId = this.getCurrentUserId()
if (!userId) {
console.error('用户未登录,无法删除地址')
@@ -1054,9 +1331,9 @@ class SupabaseService {
const response = await supa
.from('ml_user_addresses')
- .delete()
.eq('id', addressId)
.eq('user_id', userId)
+ .delete()
.execute()
if (response.error) {
@@ -1124,10 +1401,13 @@ class SupabaseService {
}): Promise {
try {
const userId = this.getCurrentUserId()
- if (!userId) return null
+ if (!userId) {
+ console.error('CreateOrder: User not logged in')
+ return null
+ }
// 生成订单号
- const orderNo = 'ORD' + Date.now() + Math.floor(Math.random() * 1000)
+ const orderNo = 'ML' + Date.now() + Math.floor(Math.random() * 1000)
// 1. 创建主订单
const orderResponse = await supa
@@ -1140,11 +1420,12 @@ class SupabaseService {
shipping_fee: orderData.shipping_fee,
total_amount: orderData.total_amount,
paid_amount: 0,
- shipping_address: JSON.stringify(orderData.shipping_address),
+ shipping_address: typeof orderData.shipping_address === 'string' ? orderData.shipping_address : JSON.stringify(orderData.shipping_address),
order_status: 1, // 待付款
payment_status: 1, // 未支付
shipping_status: 1, // 未发货
- created_at: new Date().toISOString()
+ created_at: new Date().toISOString(),
+ updated_at: new Date().toISOString()
})
.select()
.single()
@@ -1164,8 +1445,8 @@ class SupabaseService {
sku_id: item.sku_id || null,
product_name: item.product_name,
sku_name: item.sku_name || '',
- specifications: item.specifications ? JSON.stringify(item.specifications) : '{}',
- image_url: item.image_url,
+ specifications: item.specifications ? (typeof item.specifications === 'string' ? item.specifications : JSON.stringify(item.specifications)) : '{}',
+ image_url: item.product_image || item.image_url,
price: item.price,
quantity: item.quantity,
total_amount: item.price * item.quantity,
@@ -1179,12 +1460,17 @@ class SupabaseService {
if (itemsResponse.error) {
console.error('创建订单项失败:', itemsResponse.error)
- // 此时应该回滚订单,但这里简化处理
return null
}
- // 3. 清除购物车中已购买的商品(如果是从购物车购买)
- // 这一步通常在前端调用 removeCartItem 或在此处根据参数处理
+ // 3. 清除购物车中已购买的商品
+ const cartItemIds = orderData.items
+ .filter((item: any) => item.id && item.id.length > 10) // 假设UUID长度大于10,区分临时ID
+ .map((item: any) => item.id as string)
+
+ if (cartItemIds.length > 0) {
+ await this.batchDeleteCartItems(cartItemIds)
+ }
return orderId
} catch (error) {
@@ -1193,6 +1479,50 @@ class SupabaseService {
}
}
+ // 批量通过店铺创建订单
+ async createOrdersByShop(params: {
+ shipping_address: any,
+ shopGroups: any[],
+ deliveryFee: number,
+ discountAmount: number
+ }): Promise<{ success: boolean, orderIds: string[], error?: string }> {
+ try {
+ const orderIds: string[] = []
+
+ // 为每个店铺创建一个订单
+ for (const group of params.shopGroups) {
+ const shopItems = group.items as any[]
+ const productAmount = shopItems.reduce((sum, item) => sum + (item.price * item.quantity), 0)
+
+ // 简单平摊运费和优惠 (实际逻辑可能更复杂)
+ const ratio = productAmount / params.shopGroups.reduce((sum, g) => sum + g.items.reduce((s, i) => s + (i.price * i.quantity), 0), 0)
+ const shopShippingFee = params.deliveryFee * ratio
+ const shopDiscount = params.discountAmount * ratio
+ const shopTotal = productAmount + shopShippingFee - shopDiscount
+
+ const orderId = await this.createOrder({
+ merchant_id: group.merchant_id || group.shopId, // 兼容旧字段
+ product_amount: productAmount,
+ shipping_fee: shopShippingFee,
+ total_amount: shopTotal,
+ shipping_address: params.shipping_address,
+ items: shopItems
+ })
+
+ if (orderId) {
+ orderIds.push(orderId)
+ } else {
+ return { success: false, orderIds, error: `店铺 ${group.shopName} 订单创建失败` }
+ }
+ }
+
+ return { success: true, orderIds }
+ } catch (e) {
+ console.error('批量创建订单异常:', e)
+ return { success: false, orderIds: [], error: '系统异常' }
+ }
+ }
+
// 获取订单列表
async getOrders(status: number = 0): Promise {
try {
@@ -1236,8 +1566,7 @@ class SupabaseService {
.from('ml_orders')
.select(`
*,
- ml_order_items (*),
- ml_shops (shop_name, id)
+ ml_order_items (*)
`)
.eq('id', orderId)
.eq('user_id', userId)
@@ -1253,23 +1582,118 @@ class SupabaseService {
}
}
+ // 支付订单
+ async payOrder(orderId: string, paymentMethod: string, amount: number): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return false
+
+ // 1. Update order status
+ const response = await supa
+ .from('ml_orders')
+ .update({
+ order_status: 2, // 待发货(已支付)
+ payment_status: 1, // Pay Success
+ payment_method: paymentMethod, // e.g. 'wechat', 'alipay'
+ payment_time: new Date().toISOString(),
+ updated_at: new Date().toISOString()
+ })
+ .eq('id', orderId)
+ .eq('user_id', userId)
+ .execute()
+
+ if (response.error) {
+ console.error('Pay order failed', response.error)
+ return false
+ }
+
+ // 2. Handle specific payment methods (e.g., deduct balance)
+ if (paymentMethod === 'balance') {
+ // await this.deductBalance(userId, amount)
+ }
+
+ return true
+ } catch (e) {
+ console.error('Pay order error', e)
+ return false
+ }
+ }
+
+ // 获取用户钱包余额
+ async getUserBalance(): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return 0
+
+ // Check if wallet table exists or uses profile
+ // Assume ml_user_wallets or field in profile
+ // For now returning mock high balance or check profile
+ const profile = await this.getUserProfile()
+ if (profile && typeof profile.balance === 'number') {
+ return profile.balance
+ }
+ return 0
+ } catch(e) {
+ return 0
+ }
+ }
+
// 收藏相关
async checkFavorite(productId: string): Promise {
try {
const userId = this.getCurrentUserId()
+ console.log(`[CheckFav] Checking for User: ${userId}, Product: ${productId}`)
+
if (!userId) return false
const response = await supa
.from('ml_user_favorites')
- .select('id')
+ .select('*') // Select all to verify data
.eq('user_id', userId)
.eq('target_id', productId)
.eq('target_type', 1) // 1 for product
- .single()
+ .limit(1)
.execute()
+
+ // console.log(`[CheckFav] Response: ${JSON.stringify(response)}`)
+
+ if (response.error) {
+ console.error(`[CheckFav] Error: ${JSON.stringify(response.error)}`)
+ return false
+ }
+
+ const data = response.data
+ if (Array.isArray(data)) {
+ if (data.length > 0) {
+ // Double check: ensure the returned item actually matches the product ID
+ // This guards against potential query filter failures
+ const item = data[0]
+ let targetId = ''
+ if (item instanceof UTSJSONObject) {
+ targetId = item.getString('target_id') || ''
+ } else {
+ targetId = (item['target_id'] as string) || ''
+ }
+
+ if (targetId !== '' && targetId !== productId) {
+ console.error(`[CheckFav] ID Mismatch! Query ${productId}, Got ${targetId}`)
+ return false
+ }
+
+ return true
+ }
+ } else if (data instanceof UTSJSONObject) {
+ // Handle single object return case (though limit(1) usually returns array)
+ let targetId = data.getString('target_id') || ''
+ if (targetId !== '' && targetId !== productId) {
+ return false
+ }
+ return true
+ }
- return !!response.data
+ return false
} catch(e) {
+ console.error(`[CheckFav] Exception: ${e}`)
return false
}
}
@@ -1279,22 +1703,30 @@ class SupabaseService {
const userId = this.getCurrentUserId()
if (!userId) return false
+ console.log(`[ToggleFav] Toggling for ${productId}`)
+
// Check if exists
const exists = await this.checkFavorite(productId)
+ console.log(`[ToggleFav] Current status: ${exists}`)
if (exists) {
// Delete
- await supa
+ const response = await supa
.from('ml_user_favorites')
- .delete()
.eq('user_id', userId)
.eq('target_id', productId)
.eq('target_type', 1)
+ .delete()
.execute()
- return false // Now not favorite
+
+ if (response.error) {
+ console.error('取消收藏失败:', response.error)
+ return true // 仍然是收藏状态
+ }
+ return false // 已取消收藏
} else {
// Add
- await supa
+ const response = await supa
.from('ml_user_favorites')
.insert({
user_id: userId,
@@ -1303,10 +1735,17 @@ class SupabaseService {
created_at: new Date().toISOString()
})
.execute()
- return true // Now favorite
+
+ if (response.error) {
+ console.error('添加收藏失败:', response.error)
+ return false // 添加失败,仍未收藏
+ }
+ return true // 已收藏
}
} catch (e) {
- return false
+ console.error('切换收藏状态异常:', e)
+ // 发生异常时,尝试查询当前状态返回
+ return await this.checkFavorite(productId)
}
}
@@ -1315,29 +1754,314 @@ class SupabaseService {
const userId = this.getCurrentUserId()
if (!userId) return []
- // 需要关联查询商品信息
+ // 第一步:查询收藏列表
const response = await supa
.from('ml_user_favorites')
- .select(`
- id,
- target_id,
- created_at,
- ml_products!target_id (
- id, name, image_urls, main_image_url, price, sales
- )
- `)
+ .select('*')
.eq('user_id', userId)
.eq('target_type', 1)
.order('created_at', { ascending: false })
.execute()
if (response.error) return []
- return response.data || []
+ const favorites = response.data as any[]
+ if (!favorites || favorites.length === 0) return []
+
+ // 第二步:收集商品ID
+ const productIds: string[] = []
+ for (let i = 0; i < favorites.length; i++) {
+ let item = favorites[i]
+ let pid = ''
+ if (item instanceof UTSJSONObject) {
+ pid = item.getString('target_id') || ''
+ } else {
+ pid = (item['target_id'] as string) || ''
+ }
+ if (pid !== '') productIds.push(pid)
+ }
+
+ if (productIds.length === 0) return []
+
+ // 第三步:批量查询商品详情
+ const productRes = await supa
+ .from('ml_products')
+ .select('id, name, main_image_url, base_price, sale_count')
+ .in('id', productIds)
+ .execute()
+
+ if (productRes.error) return []
+ const products = productRes.data as any[]
+ const productMap = new Map()
+
+ for (let i = 0; i < products.length; i++) {
+ let p = products[i]
+ let pid = ''
+ if (p instanceof UTSJSONObject) {
+ pid = p.getString('id') || ''
+ } else {
+ pid = (p['id'] as string) || ''
+ }
+ if (pid !== '') productMap.set(pid, p)
+ }
+
+ // 第四步:组合数据
+ const result: any[] = []
+ for (let i = 0; i < favorites.length; i++) {
+ let item = favorites[i]
+ // 深拷贝或重新构造 item,避免修改原引用
+ let newItem: any
+ if (item instanceof UTSJSONObject) {
+ newItem = item.toMap()
+ } else {
+ newItem = { ...item }
+ }
+
+ let targetId = ''
+ if (item instanceof UTSJSONObject) {
+ targetId = item.getString('target_id') || ''
+ } else {
+ targetId = (item['target_id'] as string) || ''
+ }
+
+ const product = productMap.get(targetId)
+ if (product) {
+ // 将商品信息挂载到 ml_products 字段上,保持与前端代码兼容
+ newItem['ml_products'] = product
+ result.push(newItem)
+ }
+ }
+
+ return result
} catch (e) {
+ console.error('获取收藏列表异常:', e)
return []
}
}
+ // 足迹相关
+ async addFootprint(productId: string): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return false
+
+ // 检查是否已存在
+ const checkRes = await supa
+ .from('ml_user_footprints')
+ .select('id')
+ .eq('user_id', userId)
+ .eq('product_id', productId)
+ .limit(1)
+ .execute()
+
+ if (checkRes.error) {
+ console.error('检查足迹失败', checkRes.error)
+ // 可能是表不存在,但我们还是尝试继续或返回
+ // 这里假设如果检查失败可能是网络问题或权限
+ // 如果表不存在,下面的 insert 也会失败
+ }
+
+ const data = checkRes.data
+ let exists = false
+ if (Array.isArray(data) && data.length > 0) exists = true
+ else if (data instanceof UTSJSONObject) exists = true // single object case
+
+ if (exists) {
+ // 更新时间
+ await supa
+ .from('ml_user_footprints')
+ .update({
+ updated_at: new Date().toISOString(),
+ created_at: new Date().toISOString() // 更新 created_at 以便排序(可选,视需求而定,通常足迹按访问时间倒序)
+ })
+ .eq('user_id', userId)
+ .eq('product_id', productId)
+ .execute()
+ } else {
+ // 新增
+ await supa
+ .from('ml_user_footprints')
+ .insert({
+ user_id: userId,
+ product_id: productId,
+ created_at: new Date().toISOString(),
+ updated_at: new Date().toISOString()
+ })
+ .execute()
+ }
+ return true
+ } catch (e) {
+ console.error('添加足迹异常:', e)
+ return false
+ }
+ }
+
+ async getFootprints(): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return []
+
+ // 1. 获取足迹列表
+ const response = await supa
+ .from('ml_user_footprints')
+ .select('*')
+ .eq('user_id', userId)
+ .order('updated_at', { ascending: false }) // 按最后访问时间倒序
+ .limit(100) // 限制数量
+ .execute()
+
+ if (response.error) {
+ console.error('获取足迹列表失败:', response.error)
+ return []
+ }
+ const footprints = response.data as any[]
+ console.log('原始足迹数据条数:', footprints.length)
+ if (footprints.length > 0) {
+ console.log('第一条足迹:', JSON.stringify(footprints[0]))
+ }
+ if (!footprints || footprints.length === 0) return []
+
+ // 2. 收集商品ID
+ const productIds: string[] = []
+ for(let i=0; i()
+ for(let i=0; i {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return false
+
+ await supa
+ .from('ml_user_footprints')
+ .eq('user_id', userId)
+ .eq('product_id', productId)
+ .delete()
+ .execute()
+
+ return true
+ } catch (e) {
+ return false
+ }
+ }
+
+ async clearFootprints(): Promise {
+ try {
+ const userId = this.getCurrentUserId()
+ if (!userId) return false
+
+ await supa
+ .from('ml_user_footprints')
+ .eq('user_id', userId)
+ .delete()
+ .execute()
+
+ return true
+ } catch (e) {
+ return false
+ }
+ }
+
async getAddressList(): Promise {
try {