diff --git a/.gitignore b/.gitignore
index 46224298..d311b649 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,8 +17,6 @@ claude*
# Logs and databases
*.log
-*.sql
-*.sqlite
# Dependency directories
node_modules/
diff --git a/CRMEB b/CRMEB
deleted file mode 160000
index d3dba751..00000000
--- a/CRMEB
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d3dba751cabc8becc01843916c8e4a947379391b
diff --git a/README.md b/README.md
index e18599a7..a069a17d 100644
--- a/README.md
+++ b/README.md
@@ -26,9 +26,25 @@ pages/
nfc/ # NFC相关
components/
utils/
+services/
+types/
+uni_modules/
+docs/ # 项目规范与数据库策略(含 docs/sql)
+mall_sql/ # 数据库迁移/部署脚本与结构化SQL仓库
ak/
```
+## 📚 文档与数据库目录
+
+- **`docs/`**
+ - 项目规范与研发约定集合。
+ - **`docs/sql/`**:数据库“权威口径”文档与结构化 SQL 归档(策略、RLS、RPC、授权等)。
+ - Agent 执行规范见:`docs/AGENT_PROJECT_SPEC.md`
+
+- **`mall_sql/`**
+ - 可执行的数据库脚本与迁移仓库(migrations/schemas/scripts 等)。
+ - 用于数据库部署/迁移/结构化管理(与 `docs/sql` 的“权威口径/评审归档”配合使用)。
+
## 🚀 开发说明
- 使用 HBuilderX 或 uni-app CLI 运行与编译
diff --git a/ak/config.uts b/ak/config.uts
index 7269882b..690cbaab 100644
--- a/ak/config.uts
+++ b/ak/config.uts
@@ -1,12 +1,20 @@
// Supabase 配置
// 内网环境 - 本地部署的 Supabase
-// IP: 192.168.1.63
+// IP: 192.168.1.62
+// IP: 192.168.1.62
// Kong HTTP Port: 8000
-export const SUPA_URL: string = 'http://192.168.1.63:8000'
-export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzY4ODMwNjI0LCJleHAiOjE5MjY1MTA2MjR9.mDVl-kIOdRK9v6VTxo0TDF8r7X7xk3PZXazaavHyVvg'
+//自己的配置自己解开即可
+//export const SUPA_URL: string = 'http://192.168.1.61:18000'
+//export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
+//export const SUPA_URL: string = 'http://192.168.1.62:18000'
+//export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
+export const SUPA_URL: string = 'http://192.168.1.63:18000'
+export const SUPA_KEY: string = 'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJyb2xlIjogImFub24iLCAiaXNzIjogInN1cGFiYXNlIiwgImlhdCI6IDE3Njk4NDczMzQsICJleHAiOiAyMDg1MjA3MzM0fQ.js-2CS5_cUmf4iVv8aCmmx9iyFsQvLNDbt8YYOngeLU'
// WebSocket 实时连接(内网使用 ws:// 而非 wss://)
-export const WS_URL: string = 'ws://192.168.1.63:8000/realtime/v1/websocket'
+// export const WS_URL: string = 'ws://192.168.1.61:18000/realtime/v1/websocket'
+//export const WS_URL: string = 'ws://192.168.1.62:18000/realtime/v1/websocket'
+export const WS_URL: string = 'ws://192.168.1.63:18000/realtime/v1/websocket'
// 备用配置(已注释,如需切换可取消注释)
// 开发环境 - 其他内网地址
@@ -27,3 +35,6 @@ export const WS_URL: string = 'ws://192.168.1.63:8000/realtime/v1/websocket'
// 路由配置
export const HOME_REDIRECT: string = '/pages/mall/consumer/index'
export const TABORPAGE: string = '/pages/mall/consumer/index'
+
+// 测试模式:放开任意跳转(禁用启动页/登录/401 的强制重定向)
+export const IS_TEST_MODE: boolean = true
diff --git a/ak/configbackup.uts b/ak/configbackup.uts
new file mode 100644
index 00000000..c5fe910b
--- /dev/null
+++ b/ak/configbackup.uts
@@ -0,0 +1,38 @@
+
+// // export const SUPA_URL: string = 'http://192.168.0.150:8080'
+// // export const SUPA_ANON_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE'
+// // export const SUPA_SERVICE_ROLE_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q'
+// // export const SUPA_KEY = SUPA_ANON_KEY
+// // export const WS_URL: string = 'ws://'+'/192.168.0.150:8080'+'/realtime/v1/websocket';
+// export const SUPA_URL: string = 'https://ak3.oulog.com';
+// export const SUPA_KEY: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE";
+// export const SUPA_SERVICE_KEY: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q"
+// export const WS_URL: string = 'wss://'+'ak3.oulog.com'+'/realtime/v1/websocket';
+// // Optional: Edge Function or API endpoint that returns S3 presigned POST
+// // Expected response: { url: string, fields: object, publicUrl?: string }
+// export const S3_PRESIGN_URL: string = ''
+// // Optional: Public base URL for your S3/CND to build final URLs when presign response has no publicUrl
+// export const S3_PUBLIC_BASE: string = ''
+// export const RAG_API_KEY: string ='ragflow-lkZmNjMzI2YzRiNjExZWY4ZGIwMDI0Mm';
+// export const RAG_BASE_URL: string ='https://rag.oulog.com';
+// export const RAG_AGENT_ID: string ='15b01b26128111f08cd30242ac120006';
+// export const TABORPAGE:boolean = false
+
+// // export const HOME_REDIRECT :string = '/pages/ec/health/ecalert'
+// //export const HOME_REDIRECT :string = '/pages/sport/index'
+// // export const HOME_REDIRECT :string = '/pages/sport/teacher/dashboard'
+// // export const HOME_REDIRECT :string = '/pages/test/multi_device_monitor'
+
+
+
+// // export const HOME_REDIRECT :string = '/pages/ec/admin/dashboard'
+// // export const HOME_REDIRECT :string = '/pages/sense/healthble'
+// //export const HOME_REDIRECT :string = '/pages/ec/elder/dashboard'
+// // export const HOME_REDIRECT :string = '/pages/ec/caregiver/dashboard'
+// // export const HOME_REDIRECT :string = '/pages/ec/doctor/dashboard'
+// // export const HOME_REDIRECT :string = '/pages/ec/family/dashboard'
+
+
+
+
+
diff --git a/ak/configme.uts b/ak/configme.uts
new file mode 100644
index 00000000..31f4a263
--- /dev/null
+++ b/ak/configme.uts
@@ -0,0 +1,29 @@
+// // Supabase 配置
+// // 内网环境 - 本地部署的 Supabase
+// // 家里通过端口映射访问公司内网Supabase
+// // 本地映射端口:HTTP 18000, WebSocket 13000
+// export const SUPA_URL: string = 'http://192.168.1.61:18000'
+// export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzY4ODMwNjI0LCJleHAiOjE5MjY1MTA2MjR9.mDVl-kIOdRK9v6VTxo0TDF8r7X7xk3PZXazaavHyVvg1234567890'
+// //export const SUPA_URL: string = 'https://ak3.oulog.com'
+// //export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE'
+
+// // WebSocket 实时连接(内网使用 ws:// 而非 wss://)
+// export const WS_URL: string = 'ws://192.168.1.61:18000/realtime/v1/websocket'
+
+// // 备用配置(已注释,如需切换可取消注释)
+// // 开发环境 - 其他内网地址
+// // export const SUPA_URL: string = 'http://192.168.0.150:8080'
+// // export const SUPA_KEY: string = 'your-anon-key'
+// // export const WS_URL: string = 'ws://192.168.0.150:8080/realtime/v1/websocket'
+
+// // 生产环境 - Supabase 云服务(已注释)
+// // export const SUPA_URL: string = 'https://ak3.oulog.com'
+// // export const SUPA_KEY: string = 'your-anon-key'
+// // export const WS_URL: string = 'wss://ak3.oulog.com/realtime/v1/websocket'
+
+// // 指向你的 Supabase 服务(开发/私有部署)
+// // export const SUPA_URL: string = 'http://192.168.1.64:3000'
+// // export const SUPA_KEY: string = 'your-anon-key'
+// // export const WS_URL: string = 'ws://192.168.1.64:3000/realtime/v1'
+
+// //export const HOME_REDIRECT :string = '/pages/mall/consumer/index'
diff --git a/components/analytics/AnalyticsComboChart.uvue b/components/analytics/AnalyticsComboChart.uvue
index f3b08c35..76f5be4a 100644
--- a/components/analytics/AnalyticsComboChart.uvue
+++ b/components/analytics/AnalyticsComboChart.uvue
@@ -154,7 +154,7 @@ export default {
data: x,
axisTick: { alignWithLabel: true },
axisLine: { lineStyle: { color: 'rgba(0,0,0,0.12)' } },
- axisLabel: {
+ axisLabel: {
color: 'rgba(0,0,0,0.55)',
rotate: x.length > 20 ? 45 : 0,
interval: x.length > 15 ? 1 : 0
diff --git a/components/analytics/AnalyticsDateRangePicker.uvue b/components/analytics/AnalyticsDateRangePicker.uvue
new file mode 100644
index 00000000..57e5e91c
--- /dev/null
+++ b/components/analytics/AnalyticsDateRangePicker.uvue
@@ -0,0 +1,129 @@
+
+
+
+ 开始日期
+
+ {{ startDate || '请选择' }}
+
+
+
+ 结束日期
+
+ {{ endDate || '请选择' }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/analytics/AnalyticsSidebarMenu.uvue b/components/analytics/AnalyticsSidebarMenu.uvue
index a79dab5d..a0d6c18b 100644
--- a/components/analytics/AnalyticsSidebarMenu.uvue
+++ b/components/analytics/AnalyticsSidebarMenu.uvue
@@ -4,15 +4,32 @@
@@ -22,11 +39,15 @@
+```
+
+### 3.2 API 调用方式
+
+#### 3.2.1 查询数据 (SELECT)
+
+```typescript
+// 简单查询
+const res = await supa.select('ml_products', null, {
+ limit: 10,
+ order: 'created_at.desc'
+})
+
+// 带过滤条件
+const res = await supa.select('ml_products', {
+ status: 1,
+ category_id: categoryId
+}, {
+ limit: 20,
+ order: 'sale_count.desc'
+})
+
+// 复杂过滤 (PostgREST 操作符)
+const res = await supa.select('ml_products', {
+ base_price: { gte: 100, lte: 500 },
+ name: { ilike: '%商品%' },
+ category_id: { in: [id1, id2, id3] }
+}, {
+ limit: 20
+})
+
+// 单条记录
+const res = await supa.select('ml_products', { id: productId }, {
+ single: true
+})
+
+// 选择特定字段
+const res = await supa.select('ml_products', null, {
+ columns: 'id,name,base_price,main_image_url',
+ limit: 20
+})
+```
+
+#### 3.2.2 插入数据 (INSERT)
+
+```typescript
+// 插入订单
+const orderRes = await supa.insert('ml_orders', {
+ user_id: userId,
+ merchant_id: merchantId,
+ total_amount: 100.00,
+ order_status: 1,
+ payment_status: 1,
+ shipping_status: 1,
+ shipping_address: {
+ receiver_name: '张三',
+ receiver_phone: '13800138000',
+ address_detail: '北京市朝阳区xxx'
+ }
+})
+
+// 批量插入
+const items = [
+ { order_id: orderId, product_id: productId1, quantity: 2 },
+ { order_id: orderId, product_id: productId2, quantity: 1 }
+]
+const itemsRes = await supa.insert('ml_order_items', items)
+```
+
+#### 3.2.3 更新数据 (UPDATE)
+
+```typescript
+// 更新商品状态
+await supa.update('ml_products',
+ { id: productId }, // 过滤条件
+ {
+ status: 2, // 下架
+ updated_at: new Date().toISOString()
+ }
+)
+
+// 更新订单状态
+await supa.update('ml_orders',
+ { id: orderId },
+ {
+ order_status: 2, // 待发货
+ updated_at: new Date().toISOString()
+ }
+)
+```
+
+#### 3.2.4 删除数据 (DELETE)
+
+```typescript
+// 删除收藏
+await supa.delete('ml_user_favorites', { id: favoriteId })
+
+// 删除购物车商品
+await supa.delete('ml_shopping_cart', {
+ user_id: userId,
+ product_id: productId
+})
+```
+
+#### 3.2.5 调用数据库函数 (RPC)
+
+```typescript
+// 计算购物车总金额
+const totalRes = await supa.rpc('calculate_cart_total', {
+ p_user_id: userId
+})
+
+// 生成订单号
+const orderNoRes = await supa.rpc('generate_order_no')
+
+// 获取用户默认地址
+const addressRes = await supa.rpc('get_user_default_address', {
+ p_user_id: userId
+})
+```
+
+### 3.3 链式查询构建器
+
+```typescript
+// 使用链式 API
+const res = await supa
+ .from('ml_products')
+ .eq('status', 1)
+ .gte('base_price', 100)
+ .lte('base_price', 500)
+ .like('name', '%商品%')
+ .order('created_at', { ascending: false })
+ .limit(20)
+ .select()
+```
+
+---
+
+## 四、调试工具和方法
+
+### 4.1 浏览器开发者工具
+
+#### 网络请求调试
+1. **打开 Chrome DevTools** (F12)
+2. **Network 标签页**
+ - 查看所有 HTTP 请求
+ - 检查请求 URL、Headers、Body
+ - 查看响应状态码、数据
+
+3. **Console 标签页**
+ - 查看 `console.log()` 输出
+ - 查看错误信息
+ - 执行调试代码
+
+#### 示例: 检查 API 请求
+
+```typescript
+// 在代码中添加日志
+console.log('请求商品列表:', {
+ table: 'ml_products',
+ filter: { status: 1 },
+ options: { limit: 20 }
+})
+
+const res = await supa.select('ml_products', { status: 1 }, { limit: 20 })
+
+console.log('API 响应:', {
+ success: res.success,
+ data: res.data,
+ error: res.error,
+ status: res.status
+})
+```
+
+### 4.2 Supabase Dashboard
+
+#### 实时查看数据
+1. **Table Editor**
+ - 查看表数据
+ - 手动编辑数据
+ - 验证数据是否正确
+
+2. **SQL Editor**
+ - 执行 SQL 查询
+ - 测试数据库函数
+ - 验证 RLS 策略
+
+3. **API Logs**
+ - 查看 API 请求日志
+ - 检查错误信息
+ - 分析性能问题
+
+#### 示例: 测试查询
+
+```sql
+-- 在 Supabase Dashboard SQL Editor 中执行
+SELECT * FROM ml_products
+WHERE status = 1
+ORDER BY created_at DESC
+LIMIT 20;
+
+-- 测试 RLS 策略
+SET ROLE authenticated;
+SET request.jwt.claim.sub = 'user-uuid-here';
+SELECT * FROM ml_user_profiles;
+```
+
+### 4.3 Postman / Insomnia
+
+#### 直接测试 Supabase API
+
+```http
+# 获取商品列表
+GET https://your-project.supabase.co/rest/v1/ml_products?status=eq.1&limit=20
+Headers:
+ apikey: your-anon-key
+ Authorization: Bearer your-jwt-token
+ Content-Type: application/json
+
+# 创建订单
+POST https://your-project.supabase.co/rest/v1/ml_orders
+Headers:
+ apikey: your-anon-key
+ Authorization: Bearer your-jwt-token
+ Content-Type: application/json
+ Prefer: return=representation
+Body:
+{
+ "user_id": "user-uuid",
+ "merchant_id": "merchant-uuid",
+ "total_amount": 100.00,
+ "order_status": 1
+}
+
+# 调用 RPC 函数
+POST https://your-project.supabase.co/rest/v1/rpc/calculate_cart_total
+Headers:
+ apikey: your-anon-key
+ Authorization: Bearer your-jwt-token
+ Content-Type: application/json
+Body:
+{
+ "p_user_id": "user-uuid"
+}
+```
+
+### 4.4 数据库客户端工具
+
+#### pgAdmin / DBeaver / DataGrip
+
+```sql
+-- 直接连接 PostgreSQL 数据库
+-- Host: localhost (或 192.168.0.150)
+-- Port: 5432
+-- Database: postgres
+-- User: postgres
+-- Password: (从 supa.env 获取)
+
+-- 查看表结构
+SELECT * FROM information_schema.tables
+WHERE table_schema = 'public' AND table_name LIKE 'ml_%';
+
+-- 查看数据
+SELECT * FROM ml_products LIMIT 10;
+
+-- 查看 RLS 策略
+SELECT * FROM pg_policies WHERE tablename = 'ml_products';
+```
+
+### 4.5 uni-app-x 调试
+
+#### HBuilderX 调试工具
+1. **控制台输出**
+ - 查看 `console.log()` 输出
+ - 查看错误堆栈
+
+2. **网络请求监控**
+ - 查看所有网络请求
+ - 检查请求参数和响应
+
+3. **断点调试**
+ - 在代码中设置断点
+ - 单步执行
+ - 查看变量值
+
+---
+
+## 五、常见联调场景
+
+### 5.1 场景一: 查询商品列表失败
+
+#### 问题现象
+```typescript
+// 前端代码
+const res = await supa.select('ml_products', null, { limit: 20 })
+// res.success = false
+// res.error = "relation 'ml_products' does not exist"
+```
+
+#### 排查步骤
+1. **检查数据库表是否存在**
+ ```sql
+ SELECT table_name FROM information_schema.tables
+ WHERE table_schema = 'public' AND table_name = 'ml_products';
+ ```
+
+2. **检查表是否已创建**
+ - 执行 `complete_mall_database.sql` 脚本
+ - 验证脚本执行成功
+
+3. **检查连接配置**
+ ```typescript
+ console.log('Supabase URL:', SUPA_URL)
+ console.log('Supabase Key:', SUPA_KEY)
+ ```
+
+#### 解决方案
+```bash
+# 重新执行数据库脚本
+psql -h localhost -U postgres -d postgres -f doc_mall/database/complete_mall_database.sql
+```
+
+### 5.2 场景二: RLS 策略阻止数据访问
+
+#### 问题现象
+```typescript
+// 查询用户数据返回空
+const res = await supa.select('ml_user_profiles', { user_id: userId })
+// res.data = [] 或 null
+```
+
+#### 排查步骤
+1. **检查用户是否已登录**
+ ```typescript
+ const session = await supa.getSession()
+ console.log('当前用户:', session.user)
+ ```
+
+2. **检查 RLS 策略**
+ ```sql
+ -- 查看表的 RLS 策略
+ SELECT * FROM pg_policies WHERE tablename = 'ml_user_profiles';
+
+ -- 测试 RLS 策略
+ SET ROLE authenticated;
+ SET request.jwt.claim.sub = 'auth-user-id';
+ SELECT * FROM ml_user_profiles;
+ ```
+
+3. **检查 auth_id 关联**
+ ```sql
+ -- 验证 ak_users.auth_id 是否正确
+ SELECT id, auth_id FROM ak_users WHERE id = 'user-uuid';
+ ```
+
+#### 解决方案
+```typescript
+// 确保用户已登录
+await supa.signIn('user@example.com', 'password')
+
+// 或检查 Token
+const token = AkReq.getToken()
+console.log('JWT Token:', token)
+```
+
+### 5.3 场景三: 插入数据失败
+
+#### 问题现象
+```typescript
+// 插入订单失败
+const res = await supa.insert('ml_orders', orderData)
+// res.success = false
+// res.error = "new row violates row-level security policy"
+```
+
+#### 排查步骤
+1. **检查必填字段**
+ ```typescript
+ console.log('订单数据:', JSON.stringify(orderData, null, 2))
+ ```
+
+2. **检查外键约束**
+ ```sql
+ -- 验证 user_id 和 merchant_id 是否存在
+ SELECT id FROM ak_users WHERE id IN ('user-id', 'merchant-id');
+ ```
+
+3. **检查 RLS INSERT 策略**
+ ```sql
+ SELECT * FROM pg_policies
+ WHERE tablename = 'ml_orders' AND cmd = 'INSERT';
+ ```
+
+#### 解决方案
+```typescript
+// 确保数据完整
+const orderData = {
+ user_id: userId, // 必须存在
+ merchant_id: merchantId, // 必须存在
+ total_amount: 100.00,
+ order_status: 1,
+ payment_status: 1,
+ shipping_status: 1,
+ shipping_address: addressData // 必须提供
+}
+
+// 确保用户有权限
+await supa.signIn('user@example.com', 'password')
+```
+
+### 5.4 场景四: 实时数据同步不工作
+
+#### 问题现象
+```typescript
+// 订阅订单状态更新,但没有收到推送
+supa.realtime.subscribe('ml_orders', {
+ filter: `id=eq.${orderId}`,
+ event: 'UPDATE',
+ callback: (payload) => {
+ console.log('订单更新:', payload) // 没有触发
+ }
+})
+```
+
+#### 排查步骤
+1. **检查 WebSocket 连接**
+ ```typescript
+ console.log('WebSocket URL:', WS_URL)
+ ```
+
+2. **检查表是否启用 Realtime**
+ ```sql
+ -- 在 Supabase Dashboard 中检查
+ -- Database -> Replication -> 确保 ml_orders 表已启用
+ ```
+
+3. **检查网络连接**
+ - 确保 WebSocket 连接没有被防火墙阻止
+ - 检查浏览器控制台是否有 WebSocket 错误
+
+#### 解决方案
+```typescript
+// 确保 WebSocket URL 正确
+export const WS_URL: string = 'wss://your-project.supabase.co/realtime/v1/websocket'
+
+// 在 Supabase Dashboard 中启用表的 Realtime
+// Database -> Replication -> 找到 ml_orders -> 启用
+```
+
+### 5.5 场景五: 数据库函数调用失败
+
+#### 问题现象
+```typescript
+// 调用 RPC 函数失败
+const res = await supa.rpc('calculate_cart_total', { p_user_id: userId })
+// res.success = false
+// res.error = "function calculate_cart_total does not exist"
+```
+
+#### 排查步骤
+1. **检查函数是否存在**
+ ```sql
+ SELECT routine_name FROM information_schema.routines
+ WHERE routine_schema = 'public' AND routine_name = 'calculate_cart_total';
+ ```
+
+2. **检查函数参数**
+ ```sql
+ -- 查看函数定义
+ \df calculate_cart_total
+ ```
+
+3. **测试函数**
+ ```sql
+ SELECT calculate_cart_total('user-uuid-here');
+ ```
+
+#### 解决方案
+```bash
+# 重新执行数据库脚本,确保函数已创建
+psql -h localhost -U postgres -d postgres -f doc_mall/database/complete_mall_database.sql
+```
+
+---
+
+## 六、问题排查
+
+### 6.1 排查清单
+
+#### 连接问题
+- [ ] Supabase URL 是否正确
+- [ ] API Key 是否正确
+- [ ] 网络连接是否正常
+- [ ] 防火墙是否阻止连接
+
+#### 认证问题
+- [ ] 用户是否已登录
+- [ ] JWT Token 是否有效
+- [ ] Token 是否过期
+- [ ] auth_id 是否正确关联
+
+#### 数据问题
+- [ ] 表是否存在
+- [ ] 字段名是否正确
+- [ ] 数据类型是否匹配
+- [ ] 外键约束是否满足
+
+#### 权限问题
+- [ ] RLS 策略是否正确
+- [ ] 用户是否有权限
+- [ ] 策略条件是否满足
+
+### 6.2 常用调试命令
+
+#### 前端调试
+```typescript
+// 打印完整请求信息
+console.log('请求详情:', {
+ url: `${SUPA_URL}/rest/v1/ml_products`,
+ headers: {
+ apikey: SUPA_KEY,
+ Authorization: `Bearer ${token}`
+ },
+ filter: filter,
+ options: options
+})
+
+// 打印完整响应
+console.log('响应详情:', {
+ success: res.success,
+ status: res.status,
+ data: res.data,
+ error: res.error,
+ raw: res
+})
+```
+
+#### 数据库调试
+```sql
+-- 查看表结构
+\d ml_products
+
+-- 查看索引
+\di ml_products*
+
+-- 查看触发器
+\d+ ml_products
+
+-- 查看 RLS 策略
+SELECT * FROM pg_policies WHERE tablename = 'ml_products';
+
+-- 测试查询性能
+EXPLAIN ANALYZE SELECT * FROM ml_products WHERE status = 1;
+```
+
+### 6.3 错误码参考
+
+| HTTP 状态码 | 含义 | 常见原因 |
+| ----------- | ---------- | ---------------------- |
+| 200 | 成功 | - |
+| 400 | 请求错误 | 参数错误、数据格式错误 |
+| 401 | 未授权 | Token 无效、未登录 |
+| 403 | 禁止访问 | RLS 策略阻止 |
+| 404 | 未找到 | 表不存在、记录不存在 |
+| 500 | 服务器错误 | 数据库错误、函数错误 |
+
+### 6.4 日志收集
+
+#### 前端日志
+```typescript
+// 创建日志工具
+class DebugLogger {
+ static log(module: string, action: string, data: any) {
+ console.log(`[${module}] ${action}:`, data)
+ // 可以发送到日志服务器
+ }
+}
+
+// 使用
+DebugLogger.log('MallAPI', '查询商品', { filter, options })
+```
+
+#### 后端日志
+```sql
+-- 启用 PostgreSQL 日志
+-- 在 postgresql.conf 中设置
+log_statement = 'all'
+log_duration = on
+log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
+```
+
+---
+
+## 七、最佳实践
+
+### 7.1 开发环境配置
+
+1. **使用环境变量**
+ ```typescript
+ // 开发环境
+ const isDev = process.env.NODE_ENV === 'development'
+ export const SUPA_URL = isDev
+ ? 'http://192.168.0.150:8080'
+ : 'https://ak3.oulog.com'
+ ```
+
+2. **统一错误处理**
+ ```typescript
+ async function safeApiCall(apiCall: () => Promise>) {
+ try {
+ const res = await apiCall()
+ if (!res.success) {
+ console.error('API 调用失败:', res.error)
+ uni.showToast({ title: '操作失败', icon: 'error' })
+ }
+ return res
+ } catch (error) {
+ console.error('API 调用异常:', error)
+ uni.showToast({ title: '网络错误', icon: 'error' })
+ throw error
+ }
+ }
+ ```
+
+3. **请求重试机制**
+ ```typescript
+ async function retryApiCall(
+ apiCall: () => Promise>,
+ maxRetries = 3
+ ) {
+ for (let i = 0; i < maxRetries; i++) {
+ try {
+ const res = await apiCall()
+ if (res.success) return res
+ } catch (error) {
+ if (i === maxRetries - 1) throw error
+ await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)))
+ }
+ }
+ }
+ ```
+
+### 7.2 联调流程
+
+1. **数据库准备**
+ - 执行数据库脚本
+ - 插入测试数据
+ - 验证表结构
+
+2. **前端配置**
+ - 配置 Supabase URL 和 Key
+ - 测试连接
+ - 验证认证
+
+3. **功能测试**
+ - 测试 CRUD 操作
+ - 测试 RLS 策略
+ - 测试实时同步
+
+4. **问题排查**
+ - 查看日志
+ - 检查网络请求
+ - 验证数据库数据
+
+---
+
+## 📚 相关文档
+
+- [模块分析报告](./MODULE_ANALYSIS.md)
+- [数据库创建报告](./database/database_creation_report.md)
+- [完整部署指南](./database/complete_deployment_guide.md)
+- [Supabase 官方文档](https://supabase.com/docs)
+
+---
+
+**生成时间**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 完整联调指南
diff --git a/mall_sql/docs/MALL_README.md b/mall_sql/docs/MALL_README.md
new file mode 100644
index 00000000..568aa3f4
--- /dev/null
+++ b/mall_sql/docs/MALL_README.md
@@ -0,0 +1,216 @@
+# 商城系统文档目录
+
+## 📁 目录结构
+
+```
+doc_mall/
+├── README.md # 本文件 - 文档目录索引
+├── user_reuse_summary.md # 用户表复用方案总结
+├── analysis/ # 分析文档
+│ └── user_compatibility_analysis.md # 用户表兼容性详细分析
+├── database/ # 数据库相关
+│ ├── complete_mall_database.sql # 🎯 完整商城数据库(推荐使用)
+│ ├── database_creation_report.md # 📊 数据库创建完成报告
+│ ├── database_syntax_fix_report.md # 数据库语法修正报告
+│ ├── user_compatibility_implementation.sql # 用户兼容性实施脚本
+│ ├── product_database.sql # 商品数据库设计脚本
+│ ├── mock_data_insert.sql # 模拟数据插入脚本
+│ ├── mock_data_documentation.md # 模拟数据说明文档
+│ ├── deployment_guide.md # 快速部署指南
+│ ├── validation_test.sql # 数据库验证测试脚本
+│ └── complete_deployment_guide.md # 完整部署与测试指南
+└── reports/ # 生成报告
+ ├── system_generation_report.md # 系统生成报告
+ ├── detail_pages_report.md # 详情页生成报告
+ └── profile_pages_report.md # 个人中心页面报告
+```
+
+## 📋 文档说明
+
+### 核心文档
+
+#### 📊 [模块深度分析报告](./MODULE_ANALYSIS.md) ⭐ **新增**
+- **内容**: 完整的模块分析,包括数据库存储、交互方式、开发模式、开发流程
+- **适用**: 了解模块整体架构和设计理念
+
+#### 🔧 [技术实现拆解](./TECHNICAL_IMPLEMENTATION.md) ⭐ **新增**
+- **内容**: 详细的技术实现拆解,包括数据库层、API层、前端实现、数据流机制
+- **适用**: 深入了解具体实现细节和开发方式
+
+#### 🔗 [前后端联调指南](./FRONTEND_BACKEND_DEBUGGING.md) ⭐ **新增**
+- **内容**: 完整的前后端联调指南,包括环境配置、调试工具、常见问题
+- **适用**: 开发调试和问题排查
+
+#### 🎯 [用户表复用方案总结](./user_reuse_summary.md)
+- **问题**: 商城系统是否可以复用运动训练平台的 `ak_users` 用户表?
+- **结论**: ✅ 可以复用,采用混合扩展方案
+- **方案**: 保持 `ak_users` 主表不变,增加商城扩展表
+- **优势**: 单点登录、数据一致性、业务隔离
+
+#### 🔍 [用户兼容性详细分析](./analysis/user_compatibility_analysis.md)
+- 字段级兼容性对比分析
+- 三种方案对比(共用/独立/混合)
+- 风险评估和解决方案
+- 具体实施步骤和建议
+
+### 数据库脚本
+
+#### 🎯 [完整商城数据库](./database/complete_mall_database.sql) **← 推荐使用**
+- **全新设计**: 使用 `ml_` 前缀的独立商城数据库
+- **复用优化**: 仅复用 `ak_users` 用户主表
+- **功能完整**: 21张表覆盖所有商城功能
+- **Supabase优化**: 包含RLS策略、触发器、函数、视图
+- **性能优化**: 完整索引设计和查询优化
+
+#### 📊 [数据库创建报告](./database/database_creation_report.md)
+- 详细的数据库架构说明
+- 21张表的功能分析和设计理念
+- 索引、触发器、函数、视图的完整清单
+- 部署步骤和性能优化建议
+
+#### 🛠️ [数据库语法修正报告](./database/database_syntax_fix_report.md)
+- 修正了RLS策略的语法错误
+- 提供了修正前后的对比
+- 包含常见问题解答和修正建议
+
+#### 🔧 [类型错误修正报告](./database/type_error_fix_report.md)
+- **问题分析**: auth_id 字段 UUID 类型错误的详细分析
+- **修正措施**: 完整的问题解决方案和预防措施
+- **验证工具**: 新增的验证脚本和部署指南
+- **流程优化**: 改进的部署流程和错误监控建议
+
+#### 🎯 [SEO 优化实施报告](./database/seo_optimization_report.md)
+- **优化成果**: CID 自增字段的完整实施效果
+- **性能提升**: URL 结构、查询性能、存储空间的全面优化
+- **技术细节**: 索引、视图、函数的具体实现
+- **收益分析**: SEO 表现、用户体验、开发效率的预期提升
+
+#### 💾 [用户兼容性实施脚本](./database/user_compatibility_implementation.sql)
+- 商城用户扩展表 `mall_user_profiles`
+- 用户地址表 `ak_user_addresses`
+- 用户收藏、搜索、浏览历史表
+- 触发器、索引、RLS策略
+- 数据迁移和权限设置
+
+#### 🛍️ [商品数据库设计脚本](./database/product_database.sql)
+- 完整的商品管理数据库设计
+- 商品、SKU、分类、品牌、规格等表
+- 支持多规格、库存管理、营销活动
+- 推荐使用独立商品表,不复用 `ak_contents`
+
+#### 🔍 [数据库验证测试脚本](./database/validation_test.sql)
+- **环境检查**: 验证 PostgreSQL 扩展和依赖项
+- **表结构验证**: 检查 `ak_users` 表和商城表的完整性
+- **语法测试**: 验证 RLS 策略和 UUID 类型的正确性
+- **数据统计**: 检查模拟数据的插入情况
+
+#### 📚 [完整部署与测试指南](./database/complete_deployment_guide.md)
+- **部署前检查**: 详细的环境要求和准备工作
+- **分步骤部署**: PostgreSQL 和 Supabase 的完整部署流程
+- **验证测试**: 部署后的功能验证和性能检查
+- **问题解决**: 常见错误的详细解决方案和预防措施
+- **维护建议**: 数据维护、备份和性能优化指导
+
+#### 🧪 [模拟数据插入脚本](./database/mock_data_insert.sql)
+- **测试专用**: 为开发和测试生成完整的模拟数据
+- **数据丰富**: 包含8个测试用户、6个商品、多个订单等
+- **场景完整**: 涵盖购物车、优惠券、评价、配送等业务场景
+- **依赖**: 需要先执行 `complete_mall_database.sql`
+
+#### 📋 [模拟数据说明文档](./database/mock_data_documentation.md)
+- **详细说明**: 所有测试数据的详细说明和使用指南
+- **用户角色**: 8个测试用户的账号信息和权限说明
+- **测试场景**: 完整的业务流程测试建议
+- **数据维护**: 数据更新和维护的最佳实践
+
+#### 🚀 [快速部署指南](./database/deployment_guide.md)
+- **部署步骤**: PostgreSQL 和 Supabase 的详细部署指南
+- **执行顺序**: 脚本执行的正确顺序和注意事项
+- **测试验证**: 部署后的功能验证和性能测试
+- **问题排查**: 常见问题的解决方案和检查清单
+
+#### 🔍 [SEO 优化指南](./database/seo_optimization_guide.md)
+- **CID 自增字段**: 为主要表添加 SEO 友好的自增 ID
+- **URL 结构优化**: 提供简洁、语义化的 URL 路径
+- **函数工具**: 完整的 SEO 相关查询和工具函数
+- **前端集成**: Vue Router 配置和 API 调用示例
+- **性能监控**: 索引优化和查询性能监控指导
+
+### 生成报告
+
+#### 📊 [系统生成报告](./reports/system_generation_report.md)
+- 6个角色端首页代码生成完成
+- 类型定义和UTS Android兼容性说明
+- 页面功能模块和技术特点总结
+
+#### 📄 [详情页生成报告](./reports/detail_pages_report.md)
+- 商品详情、订单详情、店铺详情等页面
+- 具体功能实现和代码结构
+- UTS Android语法规范遵循情况
+
+#### 👤 [个人中心页面报告](./reports/profile_pages_report.md)
+- 6个角色端个人中心页面生成
+- 用户信息管理、设置、统计等功能
+- 响应式设计和现代UI实现
+
+## 🔗 相关文件
+
+### 类型定义
+- `../types/mall-types.uts` - 商城系统完整类型定义
+
+### 页面代码
+- `../pages/mall/` - 所有角色端页面代码
+- `../pages/mall/pages-config.json` - 页面路由配置
+
+### 订阅功能(本次实现)
+- 数据库脚本:`./create_mall_subscription_tables.sql`
+- RLS/权限:`./subscription_rls_policies.sql`
+- 消费端页面:
+ - `../pages/mall/consumer/subscription/plan-list.uvue`
+ - `../pages/mall/consumer/subscription/plan-detail.uvue`
+ - `../pages/mall/consumer/subscription/subscribe-checkout.uvue`
+ - `../pages/mall/consumer/subscription/my-subscriptions.uvue`
+- 管理端页面:
+ - `../pages/mall/admin/subscription/plan-management.uvue`
+ - `../pages/mall/admin/subscription/user-subscriptions.uvue`
+
+### 业务需求
+- `../mall.md` - 原始业务需求文档
+
+## 🎯 核心结论
+
+### 🆕 最新推荐方案
+✅ **使用完整商城数据库设计**:
+- 使用 `complete_mall_database.sql` 创建独立商城系统
+- 仅复用 `ak_users` 用户主表,其他表全部独立
+- 包含 20+ 张表,覆盖用户、商品、订单、营销、配送等全部功能
+- 优化的 Supabase 兼容设计(RLS、触发器、函数、视图)
+
+### 用户表复用方案
+✅ **推荐采用混合扩展方案**:
+- 保持 `ak_users` 表作为用户主表
+- 创建 `ml_user_profiles` 商城扩展表
+- 新建 `ml_user_addresses` 地址管理表
+- 实现业务数据隔离的同时保持账号统一
+
+### 商品表设计方案
+❌ **不推荐复用 `ak_contents` 表**:
+- 语义不匹配、字段冲突、业务逻辑差异
+- 强烈建议使用独立的商品数据库设计
+
+### 技术实现标准
+✅ **严格遵循UTS Android兼容性**:
+- 全部使用 `type` 声明,避免 `interface`
+- 数组类型使用 `Array` 格式
+- 无 `undefined` 类型,变量类型明确
+- JSON对象使用 `UTSJSONObject`
+
+## 📞 支持
+
+本文档集涵盖了商城系统与运动训练平台用户表复用的完整分析和实施方案。如需了解更多技术细节,请查看相应的具体文档文件。
+
+---
+
+**生成时间**: 2025年7月11日
+**版本**: v1.0
+**状态**: ✅ 已完成分析和实施方案
diff --git a/mall_sql/docs/MIGRATION_CHECKLIST.md b/mall_sql/docs/MIGRATION_CHECKLIST.md
new file mode 100644
index 00000000..a3fa6a22
--- /dev/null
+++ b/mall_sql/docs/MIGRATION_CHECKLIST.md
@@ -0,0 +1,254 @@
+# ✅ doc_mall 项目迁移检查清单
+
+## 📋 文件迁移清单
+
+### 1. 文档和数据库脚本 (`doc_mall/`)
+
+#### 核心文档
+- [ ] `README.md` - 文档索引
+- [ ] `TECHNICAL_IMPLEMENTATION.md` - 技术实现拆解
+- [ ] `MODULE_ANALYSIS.md` - 模块深度分析
+- [ ] `FRONTEND_BACKEND_DEBUGGING.md` - 前后端联调指南
+- [ ] `user_reuse_summary.md` - 用户表复用方案
+- [ ] `migration_complete_report.md` - 迁移完成报告
+- [ ] `README_subscription_consumer.md` - 订阅功能说明
+- [ ] `裂变红包.md` - 红包功能文档
+- [ ] `MIGRATION_GUIDE.md` - 迁移指南(本文档)
+- [ ] `MIGRATION_CHECKLIST.md` - 迁移清单(本文件)
+
+#### SQL 脚本
+- [ ] `create_mall_subscription_tables.sql` - 订阅表创建脚本
+- [ ] `subscription_guard_trigger.sql` - 订阅触发器
+- [ ] `subscription_rls_policies.sql` - 订阅RLS策略
+
+#### 分析文档目录 (`analysis/`)
+- [ ] `analysis/user_compatibility_analysis.md` - 用户兼容性分析
+
+#### 数据库目录 (`database/`)
+- [ ] `database/complete_mall_database.sql` - 完整数据库(推荐)
+- [ ] `database/database_creation_report.md` - 数据库创建报告
+- [ ] `database/database_syntax_fix_report.md` - 语法修正报告
+- [ ] `database/type_error_fix_report.md` - 类型错误修正报告
+- [ ] `database/seo_optimization_report.md` - SEO优化报告
+- [ ] `database/seo_optimization_guide.md` - SEO优化指南
+- [ ] `database/user_compatibility_implementation.sql` - 用户兼容性实施脚本
+- [ ] `database/product_database.sql` - 商品数据库设计
+- [ ] `database/mock_data_insert.sql` - 模拟数据插入脚本
+- [ ] `database/mock_data_documentation.md` - 模拟数据说明
+- [ ] `database/deployment_guide.md` - 快速部署指南
+- [ ] `database/validation_test.sql` - 数据库验证测试脚本
+- [ ] `database/complete_deployment_guide.md` - 完整部署与测试指南
+- [ ] `database/database_creation_report.md` - 数据库创建报告
+- [ ] `database/[其他SQL文件]` - 其他数据库脚本
+
+#### 报告目录 (`reports/`)
+- [ ] `reports/system_generation_report.md` - 系统生成报告
+- [ ] `reports/detail_pages_report.md` - 详情页生成报告
+- [ ] `reports/profile_pages_report.md` - 个人中心页面报告
+
+---
+
+### 2. 前端页面代码 (`pages/mall/`)
+
+#### 管理端页面 (`admin/`)
+- [ ] `admin/index.uvue` - 管理端首页
+- [ ] `admin/profile.uvue` - 管理端个人中心
+- [ ] `admin/user-detail.uvue` - 用户详情
+- [ ] `admin/subscription/plan-management.uvue` - 订阅方案管理
+- [ ] `admin/subscription/user-subscriptions.uvue` - 用户订阅管理
+
+#### 数据分析端页面 (`analytics/`)
+- [ ] `analytics/index.uvue` - 数据分析首页
+- [ ] `analytics/profile.uvue` - 数据分析个人中心
+- [ ] `analytics/report-detail.uvue` - 报表详情
+
+#### 消费者端页面 (`consumer/`)
+- [ ] `consumer/index.uvue` - 消费者首页
+- [ ] `consumer/product-detail.uvue` - 商品详情
+- [ ] `consumer/order-detail.uvue` - 订单详情
+- [ ] `consumer/profile.uvue` - 消费者个人中心
+- [ ] `consumer/subscription/plan-list.uvue` - 订阅方案列表
+- [ ] `consumer/subscription/plan-detail.uvue` - 订阅方案详情
+- [ ] `consumer/subscription/subscribe-checkout.uvue` - 订阅确认
+- [ ] `consumer/subscription/my-subscriptions.uvue` - 我的订阅
+- [ ] `consumer/subscription/README.md` - 订阅功能说明
+
+#### 配送端页面 (`delivery/`)
+- [ ] `delivery/index.uvue` - 配送端首页
+- [ ] `delivery/order-detail.uvue` - 配送订单详情
+- [ ] `delivery/profile.uvue` - 配送员个人中心
+
+#### 商家端页面 (`merchant/`)
+- [ ] `merchant/index.uvue` - 商家端首页
+- [ ] `merchant/product-detail.uvue` - 商品管理详情
+- [ ] `merchant/profile.uvue` - 商家个人中心
+
+#### 客服端页面 (`service/`)
+- [ ] `service/index.uvue` - 客服工作台首页
+- [ ] `service/profile.uvue` - 客服个人中心
+- [ ] `service/ticket-detail.uvue` - 工单详情
+
+#### NFC 功能页面 (`nfc/`) - 可选
+- [ ] `nfc/admin/index.uvue`
+- [ ] `nfc/librarian/index.uvue`
+- [ ] `nfc/merchant/pos-cashier.uvue`
+- [ ] `nfc/parent/index.uvue`
+- [ ] `nfc/security/index.uvue`
+- [ ] `nfc/student/index.uvue`
+- [ ] `nfc/student/nfc-pay.uvue`
+- [ ] `nfc/teacher/index.uvue`
+
+#### 配置文件
+- [ ] `mall.md` - 业务需求文档
+- [ ] `nfc.md` - NFC功能文档
+- [ ] `nfc-modules-guide.md` - NFC模块指南
+- [ ] `pages-config.json` - 主要页面路由配置
+- [ ] `pages-admin.json` - 管理端路由配置
+- [ ] `pages-librarian.json` - 图书管理员路由配置
+- [ ] `pages-merchant.json` - 商家路由配置
+- [ ] `pages-parent.json` - 家长路由配置
+- [ ] `pages-security.json` - 安全员路由配置
+- [ ] `pages-student.json` - 学生路由配置
+- [ ] `pages-teacher.json` - 教师路由配置
+
+---
+
+### 3. 类型定义文件
+
+- [ ] `types/mall-types.uts` - 商城系统完整类型定义(**必须迁移**)
+
+---
+
+### 4. 依赖文件(可选,根据实际情况)
+
+#### Supabase 客户端封装
+- [ ] `components/supadb/aksupainstance.uts` - Supabase实例
+- [ ] `components/supadb/aksupa.uts` - Supabase客户端封装
+- [ ] `components/supadb/aksuparealtime.uts` - 实时订阅封装
+- [ ] `components/supadb/[其他相关文件]` - 其他Supabase相关文件
+
+#### 工具函数(根据实际引用)
+- [ ] 检查 `pages/mall/` 中所有 `@/utils/` 的引用
+- [ ] 迁移需要的工具函数文件
+
+---
+
+## 🔗 依赖关系检查
+
+### 数据库依赖
+- [ ] 确定用户表处理方案(独立表/复用表/API服务)
+- [ ] 更新相关外键引用(如需要)
+- [ ] 配置 Supabase 项目连接信息
+
+### 代码依赖
+- [ ] 检查所有 `@/types/mall-types.uts` 引用(应已迁移)
+- [ ] 检查所有 `@/components/supadb` 引用
+- [ ] 检查所有 `@/utils/` 引用
+- [ ] 更新导入路径(如需要)
+
+### 配置文件依赖
+- [ ] Supabase 项目 URL 和 API Key
+- [ ] 环境变量配置
+- [ ] 路由配置(pages-config.json 等)
+
+---
+
+## 🗄️ 数据库迁移步骤
+
+### 环境准备
+- [ ] 创建新的 Supabase 项目(或确定使用现有项目)
+- [ ] 获取 Supabase 项目 URL 和 API Key
+- [ ] 准备 PostgreSQL 客户端工具(如需要)
+
+### 数据库脚本执行
+- [ ] 执行 `database/complete_mall_database.sql` - 创建完整数据库结构
+- [ ] 执行 `subscription_rls_policies.sql` - 订阅RLS策略
+- [ ] 执行 `subscription_guard_trigger.sql` - 订阅触发器
+- [ ] 执行 `database/mock_data_insert.sql` - 插入测试数据(可选)
+- [ ] 执行 `database/validation_test.sql` - 验证数据库状态
+
+### 数据库验证
+- [ ] 验证所有表已创建
+- [ ] 验证 RLS 策略已生效
+- [ ] 验证触发器已创建
+- [ ] 验证索引已创建
+- [ ] 测试数据查询功能
+
+---
+
+## 🔧 代码适配检查
+
+### 路径更新
+- [ ] 检查所有文件中的 `@/types/mall-types` 导入路径
+- [ ] 检查所有文件中的 `@/components/supadb` 导入路径
+- [ ] 检查所有文件中的 `@/utils/` 导入路径
+- [ ] 更新为正确的相对路径或配置别名
+
+### 配置更新
+- [ ] 更新 Supabase 客户端初始化配置
+- [ ] 更新环境变量配置
+- [ ] 更新路由配置文件(如需要)
+
+### 文档更新
+- [ ] 更新文档中的路径引用
+- [ ] 更新文档中的配置说明
+
+---
+
+## 🧪 测试验证
+
+### 编译测试
+- [ ] 项目可以正常编译
+- [ ] 无类型错误
+- [ ] 无导入路径错误
+
+### 运行时测试
+- [ ] 应用可以正常启动
+- [ ] Supabase 连接正常
+- [ ] 页面可以正常加载
+
+### 功能测试
+- [ ] 用户认证功能正常
+- [ ] 商品浏览功能正常
+- [ ] 订单创建功能正常
+- [ ] 权限控制正常(RLS)
+
+### 数据库测试
+- [ ] CRUD 操作正常
+- [ ] RLS 策略生效
+- [ ] 触发器正常工作
+
+---
+
+## 📝 迁移记录
+
+### 迁移信息
+- **迁移日期**: ___________
+- **源项目路径**: ___________
+- **目标项目路径**: ___________
+- **迁移人员**: ___________
+
+### 迁移问题记录
+| 问题描述 | 解决方案 | 状态 |
+| -------- | -------- | ---- |
+| | | |
+| | | |
+
+### 待处理事项
+- [ ]
+- [ ]
+- [ ]
+
+---
+
+## ✅ 迁移完成确认
+
+- [ ] 所有文件已迁移
+- [ ] 所有依赖已处理
+- [ ] 数据库已配置
+- [ ] 代码已适配
+- [ ] 测试已通过
+- [ ] 文档已更新
+
+**迁移完成签名**: ___________
+**完成日期**: ___________
diff --git a/mall_sql/docs/MIGRATION_GUIDE.md b/mall_sql/docs/MIGRATION_GUIDE.md
new file mode 100644
index 00000000..30a77be6
--- /dev/null
+++ b/mall_sql/docs/MIGRATION_GUIDE.md
@@ -0,0 +1,542 @@
+# 🚀 doc_mall 项目迁移指南
+
+## 📋 迁移概述
+
+本指南将帮助你将 `doc_mall` 商城系统模块从当前项目迁移到一个独立的仓库中,确保所有相关模块和依赖项都能正确复用。
+
+---
+
+## 📁 需要迁移的文件和目录清单
+
+### 1. 核心文档和数据库脚本 (`doc_mall/`)
+
+**完整目录结构**:
+```
+doc_mall/
+├── README.md # 文档索引
+├── TECHNICAL_IMPLEMENTATION.md # 技术实现拆解
+├── MODULE_ANALYSIS.md # 模块深度分析
+├── FRONTEND_BACKEND_DEBUGGING.md # 前后端联调指南
+├── user_reuse_summary.md # 用户表复用方案
+├── migration_complete_report.md # 迁移完成报告
+├── README_subscription_consumer.md # 订阅功能说明
+├── 裂变红包.md # 红包功能文档
+├── create_mall_subscription_tables.sql # 订阅表创建脚本
+├── subscription_guard_trigger.sql # 订阅触发器
+├── subscription_rls_policies.sql # 订阅RLS策略
+├── analysis/ # 分析文档目录
+│ └── user_compatibility_analysis.md
+├── database/ # 数据库脚本目录
+│ ├── complete_mall_database.sql # 完整数据库(推荐)
+│ ├── database_creation_report.md
+│ ├── database_syntax_fix_report.md
+│ ├── user_compatibility_implementation.sql
+│ ├── product_database.sql
+│ ├── mock_data_insert.sql
+│ ├── mock_data_documentation.md
+│ ├── deployment_guide.md
+│ ├── validation_test.sql
+│ ├── complete_deployment_guide.md
+│ └── [其他SQL和文档文件]
+└── reports/ # 生成报告目录
+ ├── system_generation_report.md
+ ├── detail_pages_report.md
+ └── profile_pages_report.md
+```
+
+**迁移操作**:
+```bash
+# 直接复制整个 doc_mall 目录
+cp -r doc_mall/ /path/to/new-repo/doc_mall/
+```
+
+---
+
+### 2. 前端页面代码 (`pages/mall/`)
+
+**完整目录结构**:
+```
+pages/mall/
+├── admin/ # 管理端页面
+│ ├── index.uvue
+│ ├── profile.uvue
+│ ├── user-detail.uvue
+│ └── subscription/
+│ ├── plan-management.uvue
+│ └── user-subscriptions.uvue
+├── analytics/ # 数据分析端页面
+│ ├── index.uvue
+│ ├── profile.uvue
+│ └── report-detail.uvue
+├── consumer/ # 消费者端页面
+│ ├── index.uvue
+│ ├── product-detail.uvue
+│ ├── order-detail.uvue
+│ ├── profile.uvue
+│ └── subscription/
+│ ├── plan-list.uvue
+│ ├── plan-detail.uvue
+│ ├── subscribe-checkout.uvue
+│ ├── my-subscriptions.uvue
+│ └── README.md
+├── delivery/ # 配送端页面
+│ ├── index.uvue
+│ ├── order-detail.uvue
+│ └── profile.uvue
+├── merchant/ # 商家端页面
+│ ├── index.uvue
+│ ├── product-detail.uvue
+│ └── profile.uvue
+├── service/ # 客服端页面
+│ ├── index.uvue
+│ ├── profile.uvue
+│ └── ticket-detail.uvue
+├── nfc/ # NFC支付相关(可选)
+│ ├── admin/index.uvue
+│ ├── librarian/index.uvue
+│ ├── merchant/pos-cashier.uvue
+│ ├── parent/index.uvue
+│ ├── security/index.uvue
+│ ├── student/index.uvue
+│ ├── teacher/index.uvue
+│ └── [其他NFC相关文件]
+├── mall.md # 业务需求文档
+├── nfc.md # NFC功能文档
+├── nfc-modules-guide.md # NFC模块指南
+├── pages-config.json # 页面路由配置(主要)
+├── pages-admin.json # 管理端路由配置
+├── pages-librarian.json # 图书管理员路由配置
+├── pages-merchant.json # 商家路由配置
+├── pages-parent.json # 家长路由配置
+├── pages-security.json # 安全员路由配置
+├── pages-student.json # 学生路由配置
+└── pages-teacher.json # 教师路由配置
+```
+
+**迁移操作**:
+```bash
+# 复制整个 pages/mall 目录
+cp -r pages/mall/ /path/to/new-repo/pages/mall/
+```
+
+---
+
+### 3. 类型定义文件 (`types/mall-types.uts`)
+
+**文件路径**:
+```
+types/mall-types.uts
+```
+
+**说明**:
+- 包含所有商城系统相关的 TypeScript/UTS 类型定义
+- 所有 `pages/mall/` 下的页面都依赖此文件
+- 必须迁移,否则前端代码无法编译
+
+**迁移操作**:
+```bash
+# 复制类型定义文件
+mkdir -p /path/to/new-repo/types
+cp types/mall-types.uts /path/to/new-repo/types/
+```
+
+---
+
+## 🔗 依赖关系分析
+
+### 3.1 内部依赖(必须迁移)
+
+#### Supabase 客户端封装
+- **依赖文件**:`components/supadb/aksupainstance.uts`
+- **使用情况**:所有商城页面都通过 Supabase 客户端访问数据库
+- **迁移建议**:
+ - 如果新仓库也需要使用 Supabase,需要迁移此文件
+ - 或者创建新的 Supabase 客户端封装
+
+#### 工具函数
+- **检查项目**:是否需要 `utils/` 下的工具函数
+- **常见使用**:日期格式化、数据验证等
+- **迁移建议**:
+ - 检查商城页面中 `@/utils/` 的引用
+ - 根据需要迁移相应的工具函数
+
+### 3.2 外部依赖(需要配置)
+
+#### 数据库依赖
+- **依赖表**:`ak_users` (用户主表)
+- **说明**:商城系统复用现有用户表实现单点登录
+- **迁移策略**:
+ - **方案A**:在新仓库中创建独立的用户表
+ - **方案B**:保持与现有用户表的关联(需要跨数据库访问)
+ - **方案C**:通过 API 服务访问用户数据
+
+#### Supabase 配置
+- **需要配置**:Supabase 项目 URL 和 API Key
+- **配置文件**:通常保存在环境变量或配置文件中
+- **迁移步骤**:
+ 1. 在新仓库创建 Supabase 项目(或使用现有项目)
+ 2. 执行数据库脚本创建表结构
+ 3. 配置 RLS 策略和权限
+ 4. 更新前端配置中的 Supabase 连接信息
+
+---
+
+## 📝 迁移步骤详解
+
+### 步骤 1: 创建新仓库
+
+```bash
+# 1. 创建新仓库目录
+mkdir mall-system
+cd mall-system
+
+# 2. 初始化 Git 仓库
+git init
+
+# 3. 创建基础目录结构
+mkdir -p doc_mall/{analysis,database,reports}
+mkdir -p pages/mall
+mkdir -p types
+mkdir -p components/supadb # 如果需要
+mkdir -p utils # 如果需要
+```
+
+### 步骤 2: 迁移文档和数据库脚本
+
+```bash
+# 从原项目复制 doc_mall 目录
+cp -r /path/to/akmon/doc_mall/* ./doc_mall/
+
+# 验证文件完整性
+ls -la doc_mall/
+```
+
+### 步骤 3: 迁移前端代码
+
+```bash
+# 复制页面代码
+cp -r /path/to/akmon/pages/mall/* ./pages/mall/
+
+# 复制类型定义
+cp /path/to/akmon/types/mall-types.uts ./types/
+
+# 验证关键文件
+ls -la pages/mall/
+ls -la types/mall-types.uts
+```
+
+### 步骤 4: 迁移依赖文件(可选)
+
+```bash
+# 如果需要 Supabase 客户端
+cp -r /path/to/akmon/components/supadb/* ./components/supadb/
+
+# 检查并迁移需要的工具函数
+# 查看 pages/mall/ 下文件中的 import 语句
+grep -r "from '@/utils" pages/mall/
+```
+
+### 步骤 5: 更新导入路径
+
+在新仓库中,需要检查并更新以下内容:
+
+#### 5.1 检查类型导入
+```bash
+# 查找所有 mall-types 的引用
+grep -r "from '@/types/mall-types" pages/mall/
+```
+
+确保导入路径正确:
+```typescript
+// 应该是相对路径或配置的别名
+import type { ProductType } from '@/types/mall-types.uts'
+```
+
+#### 5.2 检查 Supabase 导入
+```bash
+# 查找 Supabase 引用
+grep -r "from '@/components/supadb" pages/mall/
+```
+
+#### 5.3 检查工具函数导入
+```bash
+# 查找工具函数引用
+grep -r "from '@/utils" pages/mall/
+```
+
+### 步骤 6: 配置数据库
+
+#### 6.1 创建 Supabase 项目
+1. 访问 Supabase 控制台
+2. 创建新项目或使用现有项目
+3. 记录项目 URL 和 API Key
+
+#### 6.2 执行数据库脚本
+```bash
+# 方式1: 通过 Supabase Dashboard SQL Editor
+# 打开 doc_mall/database/complete_mall_database.sql
+# 复制内容到 Supabase SQL Editor 执行
+
+# 方式2: 通过 psql 命令行(如果使用自建 PostgreSQL)
+psql -h localhost -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
+```
+
+#### 6.3 配置 RLS 策略
+确保执行以下脚本:
+- `doc_mall/subscription_rls_policies.sql`
+- `doc_mall/subscription_guard_trigger.sql`
+- 数据库脚本中已包含的 RLS 策略
+
+#### 6.4 插入测试数据(可选)
+```bash
+psql -h localhost -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
+```
+
+### 步骤 7: 配置前端环境
+
+#### 7.1 创建配置文件
+在新仓库根目录创建配置文件(根据你的项目结构):
+
+**示例:`config/supabase.config.ts`**
+```typescript
+export const supabaseConfig = {
+ url: 'https://your-project.supabase.co',
+ anonKey: 'your-anon-key',
+ // 其他配置
+}
+```
+
+#### 7.2 更新 Supabase 客户端初始化
+如果迁移了 `components/supadb/aksupainstance.uts`,确保它使用新的配置。
+
+#### 7.3 配置路由
+检查并更新以下路由配置文件:
+- `pages/mall/pages-config.json` (主要路由配置)
+- 其他角色端路由配置 JSON 文件
+
+### 步骤 8: 处理用户表依赖
+
+商城系统依赖 `ak_users` 表,有几种处理方案:
+
+#### 方案 A: 创建独立的用户表(推荐用于完全独立部署)
+```sql
+-- 创建独立的用户表(简化版)
+CREATE TABLE public.mall_users (
+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
+ phone VARCHAR(20) UNIQUE NOT NULL,
+ email VARCHAR(255),
+ nickname VARCHAR(100),
+ -- 其他必要字段
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+);
+```
+
+然后更新所有 `ml_user_profiles` 等表的外键引用:
+```sql
+-- 修改外键引用
+ALTER TABLE public.ml_user_profiles
+DROP CONSTRAINT ml_user_profiles_user_id_fkey;
+
+ALTER TABLE public.ml_user_profiles
+ADD CONSTRAINT ml_user_profiles_user_id_fkey
+FOREIGN KEY (user_id) REFERENCES public.mall_users(id) ON DELETE CASCADE;
+```
+
+#### 方案 B: 通过 API 服务访问用户数据
+- 保持数据库结构不变
+- 通过 API 服务层访问用户数据
+- 前端不直接访问 `ak_users` 表
+
+#### 方案 C: 跨数据库访问(复杂,不推荐)
+- 保持现有的数据库引用
+- 配置跨数据库访问权限
+
+### 步骤 9: 测试和验证
+
+#### 9.1 编译测试
+```bash
+# 尝试编译项目(根据你的构建工具)
+npm run build
+# 或
+uni-app-x build
+```
+
+#### 9.2 数据库连接测试
+- 测试 Supabase 连接
+- 验证 RLS 策略是否生效
+- 测试 CRUD 操作
+
+#### 9.3 功能测试
+- 测试各个角色端页面是否能正常加载
+- 测试核心业务流程(商品浏览、下单等)
+- 测试权限控制
+
+---
+
+## 🔧 迁移后需要修改的内容
+
+### 1. 更新导入路径
+
+检查并更新所有文件中的导入路径,确保它们指向正确的位置:
+
+```typescript
+// 原项目中的导入
+import type { ProductType } from '@/types/mall-types.uts'
+import { supabase } from '@/components/supadb/aksupainstance.uts'
+
+// 新仓库中可能需要调整为
+import type { ProductType } from '@/types/mall-types.uts'
+import { supabase } from '@/lib/supabase/client.uts' // 如果路径改变了
+```
+
+### 2. 更新数据库表引用
+
+如果用户表方案改变,需要更新所有相关的外键和查询:
+
+```sql
+-- 原项目中引用 ak_users
+user_id UUID NOT NULL REFERENCES public.ak_users(id)
+
+-- 如果改为独立用户表
+user_id UUID NOT NULL REFERENCES public.mall_users(id)
+```
+
+### 3. 更新环境变量和配置
+
+- Supabase 项目 URL 和 API Key
+- 数据库连接字符串
+- 其他环境相关配置
+
+### 4. 更新文档中的路径引用
+
+检查 `doc_mall/` 下的文档,更新其中的文件路径引用:
+
+```markdown
+# 原文档中的路径
+- `../types/mall-types.uts`
+
+# 新仓库中应该为
+- `types/mall-types.uts`
+```
+
+---
+
+## ✅ 迁移检查清单
+
+使用以下清单确保迁移完整:
+
+- [ ] **文档迁移**
+ - [ ] `doc_mall/` 目录完整复制
+ - [ ] 所有子目录(analysis, database, reports)已迁移
+ - [ ] 文档中的路径引用已更新
+
+- [ ] **前端代码迁移**
+ - [ ] `pages/mall/` 所有页面文件已迁移
+ - [ ] `types/mall-types.uts` 已迁移
+ - [ ] 所有路由配置文件(pages-*.json)已迁移
+ - [ ] 业务需求文档(mall.md)已迁移
+
+- [ ] **依赖文件迁移**
+ - [ ] Supabase 客户端封装已迁移或重新创建
+ - [ ] 必要的工具函数已迁移
+ - [ ] 组件依赖已处理
+
+- [ ] **数据库配置**
+ - [ ] Supabase 项目已创建并配置
+ - [ ] 数据库脚本已执行
+ - [ ] RLS 策略已配置
+ - [ ] 测试数据已插入(可选)
+ - [ ] 用户表依赖已处理
+
+- [ ] **代码适配**
+ - [ ] 所有导入路径已更新
+ - [ ] 数据库表引用已更新(如需要)
+ - [ ] 配置文件已更新
+ - [ ] 环境变量已配置
+
+- [ ] **测试验证**
+ - [ ] 项目可以正常编译
+ - [ ] 数据库连接正常
+ - [ ] 页面可以正常加载
+ - [ ] 核心功能测试通过
+
+---
+
+## 🚨 常见问题和解决方案
+
+### 问题 1: 编译错误 - 找不到类型定义
+
+**错误信息**:
+```
+Cannot find module '@/types/mall-types.uts'
+```
+
+**解决方案**:
+1. 确认 `types/mall-types.uts` 文件已迁移
+2. 检查 TypeScript/UTS 配置中的路径别名设置
+3. 确保 `@/types` 正确映射到 `types/` 目录
+
+### 问题 2: Supabase 连接失败
+
+**错误信息**:
+```
+Failed to connect to Supabase
+```
+
+**解决方案**:
+1. 检查 Supabase 项目 URL 和 API Key 配置
+2. 验证网络连接
+3. 检查 Supabase 项目的状态
+
+### 问题 3: RLS 策略导致权限错误
+
+**错误信息**:
+```
+new row violates row-level security policy
+```
+
+**解决方案**:
+1. 确认已执行所有 RLS 策略脚本
+2. 检查用户认证状态
+3. 验证 RLS 策略的 SELECT/INSERT/UPDATE 权限设置
+
+### 问题 4: 外键约束错误
+
+**错误信息**:
+```
+foreign key constraint "ml_user_profiles_user_id_fkey" fails
+```
+
+**解决方案**:
+1. 如果使用独立用户表,需要更新外键引用
+2. 确保引用的用户记录存在
+3. 检查外键约束的 CASCADE 设置
+
+---
+
+## 📚 参考资料
+
+- [Supabase 官方文档](https://supabase.com/docs)
+- [uni-app-x 官方文档](https://uniapp.dcloud.net.cn/uni-app-x/)
+- [PostgreSQL 官方文档](https://www.postgresql.org/docs/)
+- 项目内部文档:
+ - `doc_mall/TECHNICAL_IMPLEMENTATION.md` - 技术实现详情
+ - `doc_mall/FRONTEND_BACKEND_DEBUGGING.md` - 调试指南
+ - `doc_mall/database/complete_deployment_guide.md` - 数据库部署指南
+
+---
+
+## 📞 迁移支持
+
+如果在迁移过程中遇到问题:
+
+1. **查看文档**:先查看 `doc_mall/` 下的相关文档
+2. **检查日志**:查看编译日志和运行时日志
+3. **数据库验证**:使用 `doc_mall/database/validation_test.sql` 验证数据库状态
+4. **联系开发团队**:提供详细的错误信息和迁移步骤
+
+---
+
+**最后更新**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 完整迁移指南
diff --git a/mall_sql/docs/MIGRATION_SUMMARY.md b/mall_sql/docs/MIGRATION_SUMMARY.md
new file mode 100644
index 00000000..175941ff
--- /dev/null
+++ b/mall_sql/docs/MIGRATION_SUMMARY.md
@@ -0,0 +1,180 @@
+# 📦 doc_mall 迁移工作总览
+
+## ✅ 已完成的准备工作
+
+### 📄 迁移文档
+- ✅ **MIGRATION_GUIDE.md** - 完整的迁移指南(543行)
+- ✅ **MIGRATION_CHECKLIST.md** - 详细的迁移检查清单(255行)
+- ✅ **QUICK_START_MIGRATION.md** - 快速开始指南
+- ✅ **MIGRATION_SUMMARY.md** - 本文件,迁移工作总览
+
+### 🔧 迁移工具
+- ✅ **migrate.ps1** - Windows PowerShell 迁移脚本(191行)
+- ✅ **migrate.sh** - Linux/Mac Bash 迁移脚本(179行)
+
+### 📊 迁移统计
+
+#### 文档和数据库脚本 (`doc_mall/`)
+- **文件数量**: 约 48 个文件
+- **主要目录**:
+ - `analysis/` - 分析文档
+ - `database/` - 数据库脚本(15+ SQL文件,12+ MD文档)
+ - `reports/` - 生成报告
+
+#### 前端页面代码 (`pages/mall/`)
+- **文件数量**: 约 45 个文件
+- **主要目录**:
+ - `admin/` - 管理端页面(5个文件)
+ - `analytics/` - 数据分析端(3个文件)
+ - `consumer/` - 消费者端(9个文件,含订阅功能)
+ - `delivery/` - 配送端(3个文件)
+ - `merchant/` - 商家端(3个文件)
+ - `service/` - 客服端(3个文件)
+ - `nfc/` - NFC支付相关(8个文件,可选)
+
+#### 类型定义文件
+- ✅ `types/mall-types.uts` - 商城系统完整类型定义(必须)
+
+---
+
+## 🚀 执行迁移
+
+### 方式 1: 使用自动化脚本(推荐)
+
+#### Windows 系统
+```powershell
+# 1. 切换到项目目录
+cd D:\datas\hfkj\akmon
+
+# 2. 预览迁移(推荐先执行)
+.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -DryRun
+
+# 3. 执行实际迁移
+.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo"
+
+# 4. 如果需要包含 Supabase 组件
+.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopySupabaseComponents
+
+# 5. 如果需要包含工具函数
+.\doc_mall\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopyUtils
+```
+
+#### Linux/Mac 系统
+```bash
+# 1. 切换到项目目录
+cd /path/to/akmon
+
+# 2. 添加执行权限
+chmod +x doc_mall/migrate.sh
+
+# 3. 预览迁移
+./doc_mall/migrate.sh /path/to/new-repo --dry-run
+
+# 4. 执行实际迁移
+./doc_mall/migrate.sh /path/to/new-repo
+
+# 5. 包含可选组件
+./doc_mall/migrate.sh /path/to/new-repo --copy-supabase --copy-utils
+```
+
+### 方式 2: 手动迁移
+
+如果不想使用脚本,可以手动执行以下步骤:
+
+```powershell
+# 1. 创建目标目录结构
+New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\analysis" -Force
+New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\database" -Force
+New-Item -ItemType Directory -Path "D:\path\to\new-repo\doc_mall\reports" -Force
+New-Item -ItemType Directory -Path "D:\path\to\new-repo\pages\mall" -Force
+New-Item -ItemType Directory -Path "D:\path\to\new-repo\types" -Force
+
+# 2. 复制文件
+Copy-Item -Path "doc_mall\*" -Destination "D:\path\to\new-repo\doc_mall\" -Recurse -Force
+Copy-Item -Path "pages\mall\*" -Destination "D:\path\to\new-repo\pages\mall\" -Recurse -Force
+Copy-Item -Path "types\mall-types.uts" -Destination "D:\path\to\new-repo\types\mall-types.uts" -Force
+```
+
+---
+
+## 📋 迁移后必做事项
+
+### 1. 验证文件完整性
+
+使用检查清单验证所有文件已迁移:
+- 打开 `MIGRATION_CHECKLIST.md`
+- 逐项检查文件是否存在
+- 确认文件数量和大小
+
+### 2. 配置 Supabase
+
+```typescript
+// 创建 config/supabase.config.ts
+export const supabaseConfig = {
+ url: 'https://your-project.supabase.co',
+ anonKey: 'your-anon-key',
+}
+```
+
+### 3. 执行数据库脚本
+
+按照 `database/complete_deployment_guide.md` 执行:
+1. 执行 `complete_mall_database.sql` - 创建数据库结构
+2. 执行 `subscription_rls_policies.sql` - RLS策略
+3. 执行 `subscription_guard_trigger.sql` - 触发器
+4. 执行 `validation_test.sql` - 验证数据库
+
+### 4. 更新代码路径
+
+检查并更新以下导入路径:
+- `@/types/mall-types.uts`
+- `@/components/supadb/*`
+- `@/utils/*`(如需要)
+
+### 5. 测试验证
+
+- [ ] 项目可以编译
+- [ ] 页面可以加载
+- [ ] 数据库连接正常
+- [ ] 核心功能测试通过
+
+---
+
+## 📚 文档结构
+
+```
+doc_mall/
+├── MIGRATION_GUIDE.md # 详细迁移指南 ⭐
+├── MIGRATION_CHECKLIST.md # 迁移检查清单 ⭐
+├── QUICK_START_MIGRATION.md # 快速开始 ⭐
+├── MIGRATION_SUMMARY.md # 本文档
+├── migrate.ps1 # PowerShell 脚本 ⭐
+├── migrate.sh # Bash 脚本 ⭐
+└── [其他原有文档和脚本]
+```
+
+---
+
+## 🎯 下一步
+
+1. **确定目标路径**:决定新仓库的位置
+2. **执行预览**:使用 `-DryRun` 参数预览迁移
+3. **执行迁移**:运行迁移脚本
+4. **验证文件**:使用检查清单验证
+5. **配置环境**:设置 Supabase 和数据库
+6. **测试验证**:确保一切正常工作
+
+---
+
+## 💡 提示
+
+- **预览模式**:强烈建议先使用 `-DryRun` 预览,确认无误后再执行
+- **备份重要数据**:迁移前备份重要文件
+- **分批迁移**:如果文件很多,可以分批测试迁移
+- **记录问题**:在 `MIGRATION_CHECKLIST.md` 中记录遇到的问题
+
+---
+
+**创建时间**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 迁移工具已准备就绪,可以开始迁移
diff --git a/mall_sql/docs/MODULE_ANALYSIS.md b/mall_sql/docs/MODULE_ANALYSIS.md
new file mode 100644
index 00000000..92d01596
--- /dev/null
+++ b/mall_sql/docs/MODULE_ANALYSIS.md
@@ -0,0 +1,710 @@
+# 📊 doc_mall 模块深度分析报告
+
+## 📋 目录
+1. [模块概述](#模块概述)
+2. [数据库存储方式](#数据库存储方式)
+3. [数据库交互方式](#数据库交互方式)
+4. [开发模式](#开发模式)
+5. [开发流程](#开发流程)
+6. [技术架构总结](#技术架构总结)
+
+---
+
+## 一、模块概述
+
+### 1.1 模块定位
+`doc_mall` 是一个**电商商城系统模块**,属于"梅州市智慧医养数字赋能平台"中的医养商城子系统。该模块提供医疗用品、保健产品、医养结合服务的在线销售平台。
+
+### 1.2 核心功能
+- 🛒 **商品管理**: 商品展示、分类、品牌、多规格SKU
+- 🏪 **店铺管理**: 商家店铺信息、认证、营业管理
+- 📦 **订单系统**: 订单创建、支付、发货、收货、评价全流程
+- 🛍️ **购物车**: 商品选择、数量管理
+- 🎫 **营销系统**: 优惠券、收藏、浏览历史、搜索记录
+- 🚚 **配送管理**: 配送员管理、配送任务、实时位置跟踪
+- ⭐ **评价系统**: 商品评价、商家回复、匿名评价
+
+### 1.3 技术栈
+- **数据库**: PostgreSQL 13+ / Supabase
+- **前端框架**: uni-app-x (UTS Android 兼容)
+- **认证系统**: Supabase Auth
+- **API方式**: Supabase REST API + PostgREST
+
+---
+
+## 二、数据库存储方式
+
+### 2.1 数据库类型
+**PostgreSQL + Supabase 兼容架构**
+
+- **主数据库**: PostgreSQL 13+
+- **云服务**: Supabase (PostgreSQL 托管 + 扩展服务)
+- **兼容性**: 同时支持标准 PostgreSQL 和 Supabase 环境
+
+### 2.2 存储架构设计
+
+#### 2.2.1 表命名规范
+- **前缀策略**: 所有商城表使用 `ml_` 前缀 (mall)
+- **复用策略**: 仅复用 `ak_users` 用户主表,其他表全部独立
+- **命名示例**:
+ - `ml_products` - 商品表
+ - `ml_orders` - 订单表
+ - `ml_user_profiles` - 用户扩展表
+
+#### 2.2.2 数据表结构 (21张表)
+
+| 功能模块 | 表数量 | 主要表名 | 说明 |
+| ------------ | ------ | ---------------------------------------------------------------------------------- | --------------------------- |
+| **用户管理** | 2张 | `ml_user_profiles`, `ml_user_addresses` | 用户扩展信息、地址管理 |
+| **商品管理** | 5张 | `ml_products`, `ml_product_skus`, `ml_categories`, `ml_brands`, `ml_product_specs` | 商品、SKU、分类、品牌、规格 |
+| **店铺管理** | 1张 | `ml_shops` | 商家店铺信息 |
+| **订单管理** | 2张 | `ml_orders`, `ml_order_items` | 订单主表、订单商品明细 |
+| **购物车** | 1张 | `ml_shopping_cart` | 购物车商品 |
+| **营销系统** | 2张 | `ml_coupon_templates`, `ml_user_coupons` | 优惠券模板、用户优惠券 |
+| **配送管理** | 2张 | `ml_delivery_drivers`, `ml_delivery_tasks` | 配送员、配送任务 |
+| **评价系统** | 1张 | `ml_product_reviews` | 商品评价 |
+| **用户行为** | 3张 | `ml_user_favorites`, `ml_browse_history`, `ml_search_history` | 收藏、浏览历史、搜索记录 |
+| **系统配置** | 2张 | `ml_system_configs`, `ml_regions` | 系统配置、地区数据 |
+
+#### 2.2.3 核心设计特性
+
+**1. UUID 主键设计**
+```sql
+id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
+```
+- 所有表使用 UUID 作为主键
+- 支持分布式系统,避免ID冲突
+- 使用 `uuid-ossp` 扩展生成
+
+**2. SEO 友好的自增ID (cid)**
+```sql
+cid SERIAL UNIQUE NOT NULL -- SEO友好的自增ID
+```
+- 为主要表添加 `cid` 字段用于URL生成
+- 提供简洁、语义化的URL路径
+- 例如: `/product/123` 而不是 `/product/uuid-string`
+
+**3. JSONB 灵活数据存储**
+```sql
+image_urls JSONB DEFAULT '[]'
+preferences JSONB DEFAULT '{}'
+specifications JSONB DEFAULT '{}'
+```
+- 使用 JSONB 存储灵活的JSON数据
+- 支持高效查询和索引 (GIN索引)
+- 适合存储数组、对象等非结构化数据
+
+**4. 时间戳字段**
+```sql
+created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+```
+- 标准的时间戳字段
+- 自动记录创建和更新时间
+- 通过触发器自动更新 `updated_at`
+
+**5. 外键约束**
+```sql
+user_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE
+```
+- 完整的引用完整性约束
+- 级联删除保证数据一致性
+- 复用 `ak_users` 表实现单点登录
+
+### 2.3 索引优化策略
+
+#### 2.3.1 索引类型
+- **主键索引**: 自动创建 (UUID)
+- **唯一索引**: 防止数据重复 (`product_code`, `order_no` 等)
+- **外键索引**: 30+ 个优化查询索引
+- **复合索引**: 针对常用查询组合
+- **GIN 索引**: JSON 和数组字段的高效查询
+
+#### 2.3.2 索引示例
+```sql
+-- 商品表索引
+CREATE INDEX idx_ml_products_merchant ON public.ml_products(merchant_id);
+CREATE INDEX idx_ml_products_category ON public.ml_products(category_id);
+CREATE INDEX idx_ml_products_status ON public.ml_products(status);
+CREATE INDEX idx_ml_products_cid ON public.ml_products(cid); -- SEO查询
+
+-- 订单表索引
+CREATE INDEX idx_ml_orders_user ON public.ml_orders(user_id);
+CREATE INDEX idx_ml_orders_merchant ON public.ml_orders(merchant_id);
+CREATE INDEX idx_ml_orders_status ON public.ml_orders(order_status);
+CREATE INDEX idx_ml_orders_created ON public.ml_orders(created_at DESC);
+
+-- JSONB GIN索引
+CREATE INDEX idx_ml_products_images_gin ON public.ml_products USING GIN(image_urls);
+```
+
+### 2.4 数据安全策略 (RLS)
+
+#### 2.4.1 Row Level Security (行级安全)
+- **启用方式**: 所有表启用 RLS 策略
+- **认证方式**: 使用 Supabase `auth.uid()` 进行身份验证
+- **权限模型**: 基于用户角色的细粒度权限控制
+
+#### 2.4.2 RLS 策略示例
+```sql
+-- 用户只能访问自己的数据
+CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
+ FOR SELECT USING (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
+ );
+
+-- 商品公开查看,商家管理
+CREATE POLICY ml_products_select_policy ON public.ml_products
+ FOR SELECT USING (status = 1); -- 所有人可查看已上架商品
+
+CREATE POLICY ml_products_update_policy ON public.ml_products
+ FOR UPDATE USING (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
+ ); -- 商家只能管理自己的商品
+
+-- 订单权限:用户和商家都可查看
+CREATE POLICY ml_orders_select_policy ON public.ml_orders
+ FOR SELECT USING (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
+ OR
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
+ );
+```
+
+### 2.5 触发器自动化
+
+#### 2.5.1 触发器功能
+| 触发器名称 | 功能 | 应用表 |
+| ------------------------------- | ---------------- | ------------------- |
+| `update_updated_at_column` | 自动更新时间戳 | 8张主要表 |
+| `ensure_single_default_address` | 确保唯一默认地址 | `ml_user_addresses` |
+| `update_product_stock` | 自动更新商品库存 | `ml_product_skus` |
+| `handle_order_status_change` | 订单状态变更处理 | `ml_orders` |
+
+#### 2.5.2 触发器示例
+```sql
+-- 自动更新 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_ensure_single_default_address
+ BEFORE INSERT OR UPDATE ON public.ml_user_addresses
+ FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
+```
+
+### 2.6 数据库函数
+
+#### 2.6.1 业务函数
+| 函数名称 | 功能描述 | 返回类型 |
+| ------------------------------- | ---------------- | -------- |
+| `generate_order_no()` | 生成唯一订单号 | TEXT |
+| `generate_coupon_code()` | 生成优惠券码 | TEXT |
+| `get_user_default_address()` | 获取用户默认地址 | TABLE |
+| `is_verified_merchant()` | 检查是否认证商家 | BOOLEAN |
+| `calculate_cart_total()` | 计算购物车总金额 | DECIMAL |
+| `get_product_available_stock()` | 获取商品可用库存 | INTEGER |
+
+#### 2.6.2 函数示例
+```sql
+-- 生成订单号
+CREATE OR REPLACE FUNCTION public.generate_order_no()
+RETURNS TEXT AS $$
+BEGIN
+ RETURN 'ORD' || TO_CHAR(NOW(), 'YYYYMMDD') || LPAD(NEXTVAL('order_no_seq')::TEXT, 6, '0');
+END;
+$$ LANGUAGE plpgsql;
+
+-- 计算购物车总金额
+CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
+RETURNS DECIMAL AS $$
+DECLARE
+ total DECIMAL(12,2);
+BEGIN
+ SELECT COALESCE(SUM(c.quantity * p.base_price), 0)
+ INTO total
+ FROM ml_shopping_cart c
+ JOIN ml_products p ON c.product_id = p.id
+ WHERE c.user_id = p_user_id AND c.selected = TRUE;
+ RETURN total;
+END;
+$$ LANGUAGE plpgsql;
+```
+
+### 2.7 视图设计
+
+#### 2.7.1 业务视图
+| 视图名称 | 功能描述 |
+| ------------------------- | -------------------------------------- |
+| `ml_users_view` | 商城用户完整信息视图 |
+| `ml_products_detail_view` | 商品详情视图(含分类、品牌、店铺信息) |
+| `ml_orders_detail_view` | 订单详情视图(含客户、商家、状态信息) |
+
+#### 2.7.2 视图示例
+```sql
+-- 商品详情视图
+CREATE VIEW ml_products_detail_view AS
+SELECT
+ p.*,
+ c.name as category_name,
+ b.name as brand_name,
+ s.shop_name,
+ s.shop_logo
+FROM ml_products p
+LEFT JOIN ml_categories c ON p.category_id = c.id
+LEFT JOIN ml_brands b ON p.brand_id = b.id
+LEFT JOIN ml_shops s ON p.merchant_id = s.merchant_id;
+```
+
+---
+
+## 三、数据库交互方式
+
+### 3.1 API 架构
+
+#### 3.1.1 Supabase REST API
+- **基础URL**: `https://your-project.supabase.co/rest/v1/`
+- **认证方式**: JWT Token (Bearer Token)
+- **API Key**: `apikey` Header
+- **协议**: HTTP/HTTPS RESTful API
+
+#### 3.1.2 PostgREST 自动生成
+- Supabase 基于 PostgREST 自动生成 REST API
+- 每个表自动获得 CRUD 接口
+- 支持复杂查询、过滤、排序、分页
+
+### 3.2 前端交互方式
+
+#### 3.2.1 Supabase 客户端封装
+项目使用自定义的 Supabase 客户端封装 (`components/supadb/aksupa.uts`):
+
+```typescript
+// 客户端初始化
+const supaClient = new AkSupa({
+ baseUrl: 'https://your-project.supabase.co',
+ apikey: 'your-anon-key'
+});
+
+// 查询数据
+const response = await supaClient.select('ml_products', null, {
+ columns: 'id,name,base_price,main_image_url',
+ limit: 20,
+ order: 'created_at.desc'
+});
+
+// 插入数据
+const result = await supaClient.insert('ml_orders', {
+ user_id: userId,
+ merchant_id: merchantId,
+ total_amount: 100.00,
+ order_status: 1
+});
+
+// 更新数据
+await supaClient.update('ml_products', { id: productId }, {
+ status: 2,
+ updated_at: new Date().toISOString()
+});
+
+// 删除数据
+await supaClient.delete('ml_user_favorites', { id: favoriteId });
+```
+
+#### 3.2.2 查询选项支持
+```typescript
+type AkSupaSelectOptions = {
+ columns?: string; // 选择字段: 'id,name,price'
+ limit?: number; // 限制数量
+ order?: string; // 排序: 'created_at.desc'
+ rangeFrom?: number; // 分页起始
+ rangeTo?: number; // 分页结束
+ count?: string; // 计数方式: 'exact'|'planned'|'estimated'
+ single?: boolean; // 单条记录
+ head?: boolean; // 仅返回元数据
+}
+```
+
+#### 3.2.3 过滤条件支持
+```typescript
+// 简单过滤
+const filter = {
+ status: 1,
+ merchant_id: userId
+};
+
+// 复杂过滤 (PostgREST 操作符)
+const filter = {
+ base_price: { gte: 100, lte: 500 }, // 范围查询
+ name: { ilike: '%商品%' }, // 模糊查询
+ category_id: { in: [id1, id2, id3] }, // IN 查询
+ created_at: { gte: '2024-01-01' } // 时间范围
+};
+```
+
+### 3.3 实时数据同步
+
+#### 3.3.1 Supabase Realtime
+- 支持 WebSocket 实时数据同步
+- 表变更自动推送到客户端
+- 适用于订单状态更新、库存变化等场景
+
+```typescript
+// 实时订阅订单状态
+supaClient.realtime.subscribe('ml_orders', {
+ filter: `id=eq.${orderId}`,
+ event: 'UPDATE',
+ callback: (payload) => {
+ console.log('订单状态更新:', payload);
+ }
+});
+```
+
+### 3.4 存储过程调用 (RPC)
+
+#### 3.4.1 数据库函数调用
+```typescript
+// 调用数据库函数
+const result = await supaClient.rpc('calculate_cart_total', {
+ p_user_id: userId
+});
+
+// 调用生成订单号函数
+const orderNo = await supaClient.rpc('generate_order_no');
+```
+
+### 3.5 认证与权限
+
+#### 3.5.1 Supabase Auth 集成
+```typescript
+// 用户登录
+const { data, error } = await supaClient.auth.signInWithPassword({
+ email: 'user@example.com',
+ password: 'password'
+});
+
+// 获取当前用户
+const user = await supaClient.auth.getUser();
+
+// Token 自动附加到请求头
+// Authorization: Bearer
+```
+
+#### 3.5.2 RLS 自动生效
+- 前端请求自动携带 JWT Token
+- RLS 策略根据 `auth.uid()` 自动过滤数据
+- 用户只能访问被授权的数据
+
+### 3.6 数据迁移与初始化
+
+#### 3.6.1 数据库脚本执行
+```bash
+# PostgreSQL 直接执行
+psql -h localhost -U postgres -d your_database -f complete_mall_database.sql
+
+# Supabase Dashboard 执行
+# 1. 登录 Supabase Dashboard
+# 2. 进入 SQL Editor
+# 3. 复制粘贴 SQL 脚本
+# 4. 执行脚本
+```
+
+#### 3.6.2 模拟数据插入
+```bash
+# 先执行主数据库脚本
+psql -f complete_mall_database.sql
+
+# 再执行模拟数据
+psql -f mock_data_insert.sql
+```
+
+---
+
+## 四、开发模式
+
+### 4.1 架构模式
+
+#### 4.1.1 BaaS (Backend as a Service) 模式
+- **特点**: 使用 Supabase 作为后端服务
+- **优势**:
+ - 无需自建后端服务器
+ - 自动生成 REST API
+ - 内置认证、权限、实时同步
+ - 减少后端开发工作量
+
+#### 4.1.2 数据库优先 (Database-First) 模式
+- **流程**: 先设计数据库 → 自动生成 API → 前端调用
+- **优势**:
+ - 数据结构清晰
+ - API 自动生成,减少手写代码
+ - 类型安全 (通过 TypeScript/UTS 类型定义)
+
+### 4.2 前端开发模式
+
+#### 4.2.1 uni-app-x 框架
+- **平台**: uni-app-x (跨平台框架)
+- **语言**: UTS (UniApp TypeScript)
+- **兼容性**: 严格遵循 UTS Android 语法规范
+
+#### 4.2.2 类型定义驱动
+```typescript
+// types/mall-types.uts
+export type ProductType = {
+ id: string
+ merchant_id: string
+ category_id: string
+ name: string
+ description: string | null
+ images: Array
+ price: number
+ stock: number
+ status: number
+ created_at: string
+}
+```
+
+#### 4.2.3 组件化开发
+- 页面组件: `pages/mall/`
+- 业务组件: `components/`
+- 工具类: `utils/`
+- 类型定义: `types/`
+
+### 4.3 数据访问模式
+
+#### 4.3.1 服务层封装
+```typescript
+// 商品服务
+class ProductService {
+ async getProducts(filters: any) {
+ return await supaClient.select('ml_products', filters, {
+ limit: 20,
+ order: 'created_at.desc'
+ });
+ }
+
+ async getProductById(id: string) {
+ return await supaClient.select('ml_products', { id }, {
+ single: true
+ });
+ }
+}
+```
+
+#### 4.3.2 响应式数据绑定
+- 使用 uni-app-x 的数据绑定机制
+- 结合 Supabase Realtime 实现实时更新
+- 状态管理通过组件状态或全局状态
+
+### 4.4 安全模式
+
+#### 4.4.1 多层安全防护
+1. **网络层**: HTTPS 加密传输
+2. **认证层**: Supabase Auth JWT Token
+3. **权限层**: RLS 行级安全策略
+4. **应用层**: 前端数据验证
+
+#### 4.4.2 最小权限原则
+- 用户只能访问自己的数据
+- 商家只能管理自己的商品和订单
+- 公开数据 (商品列表) 所有人可查看
+
+---
+
+## 五、开发流程
+
+### 5.1 数据库设计流程
+
+#### 5.1.1 需求分析
+1. **业务需求梳理**
+ - 商品管理需求
+ - 订单流程需求
+ - 用户角色需求
+ - 营销功能需求
+
+2. **数据模型设计**
+ - 实体识别 (商品、订单、用户等)
+ - 关系设计 (一对多、多对多)
+ - 字段设计 (类型、约束、索引)
+
+#### 5.1.2 数据库脚本编写
+```sql
+-- 1. 创建表结构
+CREATE TABLE ml_products (...);
+
+-- 2. 创建索引
+CREATE INDEX idx_ml_products_merchant ON ml_products(merchant_id);
+
+-- 3. 创建触发器
+CREATE TRIGGER trigger_update_updated_at ...;
+
+-- 4. 创建 RLS 策略
+CREATE POLICY ml_products_select_policy ...;
+
+-- 5. 创建函数
+CREATE FUNCTION generate_order_no() ...;
+
+-- 6. 创建视图
+CREATE VIEW ml_products_detail_view AS ...;
+```
+
+#### 5.1.3 数据库部署
+1. **环境准备**
+ - PostgreSQL 13+ 或 Supabase 项目
+ - 数据库用户权限配置
+
+2. **脚本执行**
+ ```bash
+ # 执行主数据库脚本
+ psql -f complete_mall_database.sql
+
+ # 执行模拟数据 (可选)
+ psql -f mock_data_insert.sql
+ ```
+
+3. **验证测试**
+ ```bash
+ # 执行验证脚本
+ psql -f validation_test.sql
+ ```
+
+### 5.2 前端开发流程
+
+#### 5.2.1 类型定义
+```typescript
+// 1. 定义 TypeScript/UTS 类型
+export type ProductType = {
+ id: string
+ name: string
+ price: number
+ // ...
+}
+```
+
+#### 5.2.2 API 服务封装
+```typescript
+// 2. 封装 API 调用
+class MallAPI {
+ async getProducts() {
+ return await supaClient.select('ml_products', ...);
+ }
+}
+```
+
+#### 5.2.3 页面开发
+```vue
+
+
+
+
+ {{ product.name }}
+
+
+
+
+
+```
+
+#### 5.2.4 测试验证
+- 功能测试: 验证业务流程
+- 权限测试: 验证 RLS 策略
+- 性能测试: 验证查询性能
+
+### 5.3 迭代开发流程
+
+#### 5.3.1 功能迭代
+1. **需求变更** → 数据库迁移脚本
+2. **表结构更新** → `mall_alter_upgrade.sql`
+3. **数据迁移** → 迁移脚本执行
+4. **前端适配** → 类型定义更新 → 页面更新
+
+#### 5.3.2 版本管理
+- **数据库版本**: 通过迁移脚本管理
+- **代码版本**: Git 版本控制
+- **文档版本**: Markdown 文档同步更新
+
+### 5.4 部署流程
+
+#### 5.4.1 开发环境
+1. 本地 PostgreSQL 或 Supabase 本地实例
+2. 执行数据库脚本
+3. 配置环境变量
+4. 启动前端开发服务器
+
+#### 5.4.2 生产环境
+1. **Supabase 云服务部署**
+ - 创建 Supabase 项目
+ - 执行数据库脚本
+ - 配置环境变量
+ - 部署前端应用
+
+2. **自建 PostgreSQL 部署**
+ - 搭建 PostgreSQL 服务器
+ - 执行数据库脚本
+ - 配置 Nginx 反向代理 (如需要)
+ - 部署前端应用
+
+---
+
+## 六、技术架构总结
+
+### 6.1 技术栈总结
+
+| 层级 | 技术 | 说明 |
+| ------------ | -------------- | ----------------- |
+| **数据库** | PostgreSQL 13+ | 关系型数据库 |
+| **BaaS平台** | Supabase | 后端即服务 |
+| **API层** | PostgREST | 自动生成 REST API |
+| **认证** | Supabase Auth | JWT Token 认证 |
+| **前端框架** | uni-app-x | 跨平台框架 |
+| **开发语言** | UTS | UniApp TypeScript |
+| **类型系统** | TypeScript/UTS | 类型安全 |
+
+### 6.2 架构特点
+
+#### ✅ 优势
+1. **开发效率高**: BaaS 模式减少后端开发
+2. **类型安全**: 完整的类型定义系统
+3. **自动API**: PostgREST 自动生成 REST API
+4. **权限完善**: RLS 行级安全策略
+5. **实时同步**: Supabase Realtime 支持
+6. **扩展性强**: 数据库函数、触发器、视图支持
+
+#### ⚠️ 注意事项
+1. **Supabase 依赖**: 深度依赖 Supabase 生态
+2. **学习曲线**: 需要熟悉 PostgreSQL 和 Supabase
+3. **成本考虑**: Supabase 云服务有使用限制
+4. **迁移成本**: 如需迁移到其他平台,成本较高
+
+### 6.3 最佳实践
+
+1. **数据库设计优先**: 先设计好数据库结构
+2. **类型定义同步**: 保持数据库和类型定义同步
+3. **RLS 策略完善**: 确保数据安全
+4. **索引优化**: 针对查询场景优化索引
+5. **文档完善**: 保持文档与代码同步
+
+---
+
+## 📚 相关文档
+
+- [数据库创建报告](./database/database_creation_report.md)
+- [数据库语法修正报告](./database/database_syntax_fix_report.md)
+- [完整部署指南](./database/complete_deployment_guide.md)
+- [用户表复用方案](./user_reuse_summary.md)
+- [前后端联调指南](./FRONTEND_BACKEND_DEBUGGING.md) ⭐ **新增**
+- [模块README](./README.md)
+
+---
+
+**生成时间**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 完整分析报告
diff --git a/mall_sql/docs/QUICK_START_MIGRATION.md b/mall_sql/docs/QUICK_START_MIGRATION.md
new file mode 100644
index 00000000..e26d3078
--- /dev/null
+++ b/mall_sql/docs/QUICK_START_MIGRATION.md
@@ -0,0 +1,111 @@
+# ⚡ 快速开始迁移
+
+## 🚀 快速执行迁移
+
+### Windows (PowerShell)
+
+#### 1. 预览模式(推荐先执行)
+```powershell
+cd doc_mall
+.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -DryRun
+```
+
+#### 2. 执行迁移
+```powershell
+cd doc_mall
+.\migrate.ps1 -TargetPath "D:\path\to\new-repo"
+```
+
+#### 3. 包含 Supabase 组件
+```powershell
+.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopySupabaseComponents
+```
+
+#### 4. 包含工具函数
+```powershell
+.\migrate.ps1 -TargetPath "D:\path\to\new-repo" -CopyUtils
+```
+
+### Linux/Mac (Bash)
+
+#### 1. 预览模式
+```bash
+cd doc_mall
+chmod +x migrate.sh
+./migrate.sh /path/to/new-repo --dry-run
+```
+
+#### 2. 执行迁移
+```bash
+./migrate.sh /path/to/new-repo
+```
+
+#### 3. 包含可选组件
+```bash
+./migrate.sh /path/to/new-repo --copy-supabase --copy-utils
+```
+
+---
+
+## 📋 迁移后的必要步骤
+
+### 1. 检查迁移结果
+```powershell
+# 检查目标目录
+ls D:\path\to\new-repo\doc_mall
+ls D:\path\to\new-repo\pages\mall
+ls D:\path\to\new-repo\types
+```
+
+### 2. 配置 Supabase
+
+创建配置文件 `config/supabase.config.ts`:
+```typescript
+export const supabaseConfig = {
+ url: 'https://your-project.supabase.co',
+ anonKey: 'your-anon-key',
+}
+```
+
+### 3. 执行数据库脚本
+
+#### 方式 1: Supabase Dashboard
+1. 登录 Supabase Dashboard
+2. 进入 SQL Editor
+3. 复制 `doc_mall/database/complete_mall_database.sql` 内容
+4. 执行脚本
+
+#### 方式 2: psql 命令行
+```bash
+psql -h your-host -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
+```
+
+### 4. 验证数据库
+```bash
+psql -h your-host -U postgres -d your_database -f doc_mall/database/validation_test.sql
+```
+
+### 5. 插入测试数据(可选)
+```bash
+psql -h your-host -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
+```
+
+---
+
+## ✅ 验证清单
+
+- [ ] 文件已复制到目标目录
+- [ ] 目录结构正确
+- [ ] Supabase 配置已更新
+- [ ] 数据库脚本已执行
+- [ ] 数据库验证通过
+- [ ] 项目可以编译
+- [ ] 页面可以正常加载
+
+---
+
+## 📚 更多信息
+
+- 详细迁移指南: [MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)
+- 完整检查清单: [MIGRATION_CHECKLIST.md](./MIGRATION_CHECKLIST.md)
+- 技术实现文档: [TECHNICAL_IMPLEMENTATION.md](./TECHNICAL_IMPLEMENTATION.md)
diff --git a/mall_sql/docs/README.md b/mall_sql/docs/README.md
new file mode 100644
index 00000000..d3b85b94
--- /dev/null
+++ b/mall_sql/docs/README.md
@@ -0,0 +1,108 @@
+# 🛍️ 商城系统模块 (Mall System Module)
+
+本目录包含完整的商城系统模块,已从主项目中独立出来,可作为独立仓库使用。
+
+## 📁 目录结构
+
+```
+mall/
+├── doc_mall/ # 文档和数据库脚本
+│ ├── database/ # 数据库脚本目录
+│ ├── analysis/ # 分析文档目录
+│ ├── reports/ # 生成报告目录
+│ └── *.md # 各类文档和迁移指南
+├── pages/ # 前端页面代码
+│ └── mall/ # 商城页面
+│ ├── admin/ # 管理端页面
+│ ├── analytics/ # 数据分析端页面
+│ ├── consumer/ # 消费者端页面
+│ ├── delivery/ # 配送端页面
+│ ├── merchant/ # 商家端页面
+│ ├── service/ # 客服端页面
+│ └── nfc/ # NFC支付页面
+└── types/ # 类型定义
+ └── mall-types.uts # 商城系统类型定义
+```
+
+## 📊 迁移统计
+
+- **文档和数据库脚本**: 48+ 个文件 (`doc_mall/`)
+- **前端页面代码**: 45+ 个文件 (`pages/mall/`)
+- **类型定义**: 1 个文件 (`types/mall-types.uts`)
+
+## 🚀 快速开始
+
+### 1. 查看迁移指南
+
+- **完整迁移指南**: [doc_mall/MIGRATION_GUIDE.md](./doc_mall/MIGRATION_GUIDE.md)
+- **迁移检查清单**: [doc_mall/MIGRATION_CHECKLIST.md](./doc_mall/MIGRATION_CHECKLIST.md)
+- **快速开始**: [doc_mall/QUICK_START_MIGRATION.md](./doc_mall/QUICK_START_MIGRATION.md)
+
+### 2. 配置数据库
+
+执行数据库脚本创建表结构:
+
+```bash
+# 方式1: 通过 Supabase Dashboard SQL Editor
+# 打开 doc_mall/database/complete_mall_database.sql 并执行
+
+# 方式2: 通过 psql 命令行
+psql -h localhost -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
+```
+
+### 3. 配置 Supabase 连接
+
+创建配置文件,设置 Supabase 项目 URL 和 API Key。
+
+### 4. 更新导入路径
+
+检查并更新代码中的导入路径,确保指向正确的位置。
+
+## 📚 核心文档
+
+### 技术文档
+- [技术实现拆解](./doc_mall/TECHNICAL_IMPLEMENTATION.md) - 详细的技术实现说明
+- [模块深度分析](./doc_mall/MODULE_ANALYSIS.md) - 模块架构和设计理念
+- [前后端联调指南](./doc_mall/FRONTEND_BACKEND_DEBUGGING.md) - 开发调试指南
+
+### 数据库文档
+- [完整部署指南](./doc_mall/database/complete_deployment_guide.md) - 数据库部署步骤
+- [快速部署指南](./doc_mall/database/deployment_guide.md) - 快速部署方法
+- [数据库创建报告](./doc_mall/database/database_creation_report.md) - 数据库结构说明
+
+## 🔧 迁移到新仓库
+
+如果你需要将本模块迁移到一个完全独立的 Git 仓库,可以使用提供的迁移脚本:
+
+### Windows (PowerShell)
+```powershell
+cd doc_mall
+.\migrate.ps1 -TargetPath "D:\path\to\new-repo"
+```
+
+### Linux/Mac (Bash)
+```bash
+cd doc_mall
+chmod +x migrate.sh
+./migrate.sh /path/to/new-repo
+```
+
+详细步骤请参考 [MIGRATION_GUIDE.md](./doc_mall/MIGRATION_GUIDE.md)。
+
+## 📝 注意事项
+
+1. **用户表依赖**: 商城系统依赖 `ak_users` 用户表,迁移时需要确定处理方案(独立表/复用表/API服务)
+2. **Supabase 配置**: 需要配置 Supabase 项目连接信息
+3. **路径更新**: 迁移后需要更新代码中的导入路径
+4. **数据库脚本**: 需要按顺序执行数据库脚本
+
+## 📞 支持
+
+- 查看文档: 参考 `doc_mall/` 目录下的相关文档
+- 迁移问题: 参考 [MIGRATION_GUIDE.md](./doc_mall/MIGRATION_GUIDE.md) 中的常见问题部分
+
+---
+
+**迁移日期**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 已独立迁移到 mall/ 目录
diff --git a/mall_sql/docs/README_subscription_consumer.md b/mall_sql/docs/README_subscription_consumer.md
new file mode 100644
index 00000000..f7728a8e
--- /dev/null
+++ b/mall_sql/docs/README_subscription_consumer.md
@@ -0,0 +1,16 @@
+# 软件订阅(consumer)
+
+入口:
+- 用户中心 -> 软件订阅
+
+页面:
+- plan-list.uvue:展示可用订阅方案(ml_subscription_plans)
+- plan-detail.uvue:展示某个订阅方案详情
+- subscribe-checkout.uvue:确认支付并创建订阅(写入 ml_user_subscriptions)
+
+依赖表(示例名称,可按实际后端调整):
+- ml_subscription_plans(id, plan_code, name, description, features jsonb, price numeric, currency text, billing_period text, trial_days int, is_active bool, sort_order int, created_at, updated_at)
+- ml_user_subscriptions(id, user_id, plan_id, status text, start_date timestamptz, end_date timestamptz, next_billing_date timestamptz, auto_renew bool, cancel_at_period_end bool, metadata jsonb, created_at, updated_at)
+
+注意:
+- 本实现使用 uni-app-x 兼容组件与 supaClient。实际支付请替换为你们的支付网关,并在后端完成对账与签名校验。
diff --git a/mall_sql/docs/ROLE_FIELD_FIX_REPORT.md b/mall_sql/docs/ROLE_FIELD_FIX_REPORT.md
new file mode 100644
index 00000000..1faa1687
--- /dev/null
+++ b/mall_sql/docs/ROLE_FIELD_FIX_REPORT.md
@@ -0,0 +1,151 @@
+# 角色字段统一修复完成报告
+
+## 🔧 问题修复
+
+### 问题1:重复的角色字段
+**原问题**:`ml_user_profiles` 表中存在重复的 `role` 字段,与 `ak_users.role` 重复。
+**解决方案**:删除 `ml_user_profiles.role` 字段,统一使用 `ak_users.role`。
+
+### 问题2:变量类型错误
+**原问题**:订单生成代码中 `merchant_rec` 变量类型错误,导致数据类型不匹配。
+**解决方案**:将 `merchant_rec RECORD` 改为 `merchant_id UUID`。
+
+## ✅ 已修复的文件
+
+### 1. complete_mall_database.sql
+- ❌ 删除:`ml_user_profiles.role` 字段定义
+- ❌ 删除:相关约束 `chk_ml_user_role`
+- ❌ 删除:相关索引 `idx_ml_user_profiles_role`
+- ❌ 删除:相关注释
+- ✅ 更新:`is_verified_merchant()` 函数,从 `ak_users` 表获取角色
+- ✅ 更新:`ml_users_view` 视图,使用 `u.role` 替代 `p.role`
+- ✅ 更新:插入语句,移除 `role` 字段
+
+### 2. mock_data_insert.sql
+- ✅ 更新:用户档案插入语句,移除 `role` 字段
+- ✅ 更新:冲突处理语句,移除 `role` 字段
+- ✅ 修复:订单生成代码中的变量类型错误
+
+### 3. role_field_cleanup.sql (新增)
+- ✅ 创建:专门的角色字段清理脚本
+- ✅ 功能:检查并清理重复的角色字段
+- ✅ 功能:数据迁移和一致性检查
+- ✅ 功能:更新相关函数和视图
+
+## 📊 当前角色字段设计
+
+### 唯一的角色存储位置
+```sql
+-- ak_users 表 - 唯一的角色字段存储位置
+CREATE TABLE public.ak_users (
+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
+ role TEXT DEFAULT 'customer' NOT NULL,
+ -- 其他字段...
+
+ CONSTRAINT chk_ak_users_role
+ CHECK (role IN ('customer', 'merchant', 'delivery', 'service', 'admin'))
+);
+```
+
+### 相关表关联
+```sql
+-- ml_user_profiles 表 - 不再包含 role 字段
+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),
+ status INTEGER DEFAULT 1 NOT NULL,
+ -- 其他扩展信息字段...
+);
+```
+
+### 获取用户角色
+```sql
+-- 通过关联查询获取角色信息
+SELECT u.role, p.real_name, p.credit_score
+FROM ak_users u
+LEFT JOIN ml_user_profiles p ON u.id = p.user_id
+WHERE u.id = 'user-uuid';
+```
+
+## 🔍 验证步骤
+
+### 1. 字段检查
+```sql
+-- 检查是否还有重复的 role 字段
+SELECT
+ table_name,
+ column_name,
+ data_type
+FROM information_schema.columns
+WHERE column_name = 'role'
+AND table_name IN ('ak_users', 'ml_user_profiles');
+
+-- 预期结果:只有 ak_users.role
+```
+
+### 2. 约束检查
+```sql
+-- 检查角色约束
+SELECT constraint_name, table_name
+FROM information_schema.check_constraints
+WHERE constraint_name LIKE '%role%';
+
+-- 预期结果:只有 chk_ak_users_role
+```
+
+### 3. 功能检查
+```sql
+-- 测试角色相关函数
+SELECT get_user_role('test-user-id');
+SELECT check_user_permission('test-user-id', ARRAY['admin']);
+SELECT * FROM vw_role_statistics;
+```
+
+## 🎯 优势总结
+
+### 1. 数据一致性
+- ✅ 单一数据源:角色信息只存储在一个地方
+- ✅ 避免同步问题:不会出现两个表角色不一致的情况
+- ✅ 数据完整性:通过外键约束保证关联关系
+
+### 2. 代码简洁性
+- ✅ 查询简化:直接从 `ak_users` 获取角色信息
+- ✅ 维护容易:只需要维护一个角色字段
+- ✅ 扩展性好:新增角色类型只需要修改一个约束
+
+### 3. 性能优化
+- ✅ 减少JOIN:在只需要角色信息时无需关联 `ml_user_profiles`
+- ✅ 索引优化:`ak_users.role` 上的索引直接支持角色查询
+- ✅ 存储节约:减少了重复数据的存储
+
+## 📋 迁移指南
+
+### 对于新项目
+直接使用修复后的 `complete_mall_database.sql` 脚本。
+
+### 对于现有项目
+1. 执行 `role_field_cleanup.sql` 脚本
+2. 验证数据迁移结果
+3. 测试相关功能是否正常
+
+### 脚本执行顺序
+```bash
+# 1. 主数据库结构
+psql -f complete_mall_database.sql
+
+# 2. 角色字段清理(如果是从旧版本升级)
+psql -f role_field_cleanup.sql
+
+# 3. 插入测试数据
+psql -f mock_data_insert.sql
+```
+
+## ✨ 结论
+
+角色字段统一修复已经完成,系统现在具有:
+- 🎯 **清晰的数据结构**:角色信息统一存储在 `ak_users.role`
+- 🔒 **数据一致性保证**:消除了数据重复和不一致的风险
+- 🚀 **更好的性能**:简化了查询逻辑,提高了查询效率
+- 🛠️ **易于维护**:减少了代码复杂度,便于后续维护和扩展
+
+所有相关文件已更新完毕,可以安全使用!
diff --git a/mall_sql/docs/ROLE_FIELD_SUMMARY.md b/mall_sql/docs/ROLE_FIELD_SUMMARY.md
new file mode 100644
index 00000000..e584ae50
--- /dev/null
+++ b/mall_sql/docs/ROLE_FIELD_SUMMARY.md
@@ -0,0 +1,172 @@
+# 角色字段统一方案总结
+
+## 📋 概述
+
+为了提高代码可读性和语义清晰度,我们将商城系统中的用户角色字段从 `user_type` (INTEGER) 统一为 `role` (TEXT)。
+
+## 🔄 修改内容
+
+### 1. 字段类型变更
+
+#### 原始设计 (已废弃)
+```sql
+-- ml_user_profiles 表
+user_type INTEGER DEFAULT 1 NOT NULL
+-- 约束:CHECK (user_type IN (1,2,3,4,5))
+-- 1:消费者 2:商家 3:配送员 4:客服 5:管理员
+```
+
+#### 新设计 (当前版本)
+```sql
+-- ml_user_profiles 表 + ak_users 表
+role TEXT DEFAULT 'customer' NOT NULL
+-- 约束:CHECK (role IN ('customer', 'merchant', 'delivery', 'service', 'admin'))
+-- customer:消费者, merchant:商家, delivery:配送员, service:客服, admin:管理员
+```
+
+### 2. 数据映射关系
+
+| 旧 user_type (INTEGER) | 新 role (TEXT) | 中文含义 |
+|------------------------|----------------|----------|
+| 1 | customer | 消费者 |
+| 2 | merchant | 商家 |
+| 3 | delivery | 配送员 |
+| 4 | service | 客服 |
+| 5 | admin | 管理员 |
+
+### 3. 统一后的优势
+
+1. **语义清晰**:`role` 比 `user_type` 更符合业务语义
+2. **代码可读**:字符串值比数字更易理解
+3. **扩展性好**:便于添加新角色类型
+4. **国际化友好**:角色名称可直接用于多语言映射
+5. **API友好**:前端可直接使用角色字符串
+
+## 📁 相关文件
+
+### 核心数据库文件
+- ✅ `complete_mall_database.sql` - 主数据库结构(已更新)
+- ✅ `mock_data_insert.sql` - 测试数据插入(已更新)
+
+### 迁移脚本
+- 🆕 `quick_role_migration.sql` - 快速迁移脚本(推荐)
+- 🆕 `role_field_unification.sql` - 完整统一方案
+
+### 其他升级脚本(自动兼容)
+- ✅ `mall_alter_upgrade.sql` - 增量升级脚本
+- ✅ `mall_fields_only_upgrade.sql` - 字段升级脚本
+- ✅ `mall_migration.sql` - 完整迁移脚本
+- ✅ `mall_seo_security.sql` - SEO和安全脚本
+
+### 文档
+- ✅ `UPGRADE_GUIDE.md` - 升级指南(已更新)
+
+## 🚀 执行步骤
+
+### 对于新项目
+直接使用最新的 `complete_mall_database.sql`,已包含 `role` 字段设计。
+
+### 对于现有项目
+如果您的数据库中存在 `user_type` 字段,请按以下步骤升级:
+
+#### 步骤 1:数据备份
+```bash
+pg_dump your_database > backup_before_role_migration.sql
+```
+
+#### 步骤 2:执行快速迁移
+```bash
+psql -d your_database -f quick_role_migration.sql
+```
+
+#### 步骤 3:验证迁移结果
+```sql
+-- 检查角色分布
+SELECT role, COUNT(*) as count
+FROM ml_user_profiles
+GROUP BY role;
+
+-- 检查数据一致性
+SELECT COUNT(*) as inconsistent_records
+FROM ak_users u
+JOIN ml_user_profiles p ON u.id = p.user_id
+WHERE u.role != p.role;
+```
+
+#### 步骤 4:(可选)清理旧字段
+迁移成功并确认无误后,可删除旧的 `user_type` 字段:
+```sql
+ALTER TABLE ml_user_profiles DROP COLUMN user_type;
+```
+
+## 🔧 技术细节
+
+### 更新的数据库对象
+
+1. **表结构**
+ - `ml_user_profiles.role` - 新增字段
+ - `ak_users.role` - 与之保持同步
+
+2. **约束**
+ - `chk_ml_user_role` - 角色值约束
+ - 移除:`chk_ml_user_type`
+
+3. **索引**
+ - `idx_ml_user_profiles_role` - 角色字段索引
+ - 移除:`idx_ml_user_profiles_type`
+
+4. **函数**
+ - `is_verified_merchant()` - 商家验证函数
+ - `get_user_role()` - 获取用户角色
+ - `check_user_permission()` - 权限检查
+ - `upgrade_user_role()` - 角色升级
+
+5. **视图**
+ - `ml_users_view` - 用户信息视图
+ - `vw_user_info` - 用户完整信息视图
+ - `vw_role_statistics` - 角色统计视图
+
+6. **RLS策略**
+ - 所有涉及角色检查的策略已更新
+
+### 兼容性说明
+
+- ✅ **向前兼容**:新脚本可在空数据库上运行
+- ✅ **向后兼容**:提供完整回滚方案
+- ✅ **增量升级**:支持现有数据的平滑迁移
+- ✅ **Supabase兼容**:完全支持Supabase环境
+
+## 🔍 测试验证
+
+### 测试用例
+```sql
+-- 1. 测试角色约束
+INSERT INTO ml_user_profiles (user_id, role)
+VALUES (uuid_generate_v4(), 'invalid_role'); -- 应该失败
+
+-- 2. 测试函数
+SELECT get_user_role('user-uuid-here');
+SELECT check_user_permission('user-uuid-here', ARRAY['admin', 'merchant']);
+
+-- 3. 测试视图
+SELECT * FROM vw_role_statistics;
+SELECT * FROM ml_users_view WHERE role = 'merchant';
+```
+
+### 性能影响
+- 角色查询性能:通过 `idx_ml_user_profiles_role` 索引优化
+- 存储开销:TEXT字段比INTEGER稍大,但差异微小
+- 查询兼容:所有现有查询逻辑已更新
+
+## 📞 支持
+
+如果在角色字段迁移过程中遇到问题,请:
+
+1. 检查错误日志
+2. 确认数据备份完整
+3. 运行 `mall_database_check.sql` 诊断问题
+4. 如需回滚,使用 `quick_role_migration.sql` 中的回滚脚本
+
+---
+
+**总结**:角色字段统一方案提供了更清晰、更语义化的用户角色管理,同时保持了完整的向后兼容性和迁移安全性。
diff --git a/mall_sql/docs/TECHNICAL_IMPLEMENTATION.md b/mall_sql/docs/TECHNICAL_IMPLEMENTATION.md
new file mode 100644
index 00000000..17b2546d
--- /dev/null
+++ b/mall_sql/docs/TECHNICAL_IMPLEMENTATION.md
@@ -0,0 +1,1431 @@
+# 🔨 doc_mall 模块技术实现拆解
+
+## 📋 目录
+1. [整体架构](#整体架构)
+2. [数据库层实现](#数据库层实现)
+3. [后端/API层实现](#后端api层实现)
+4. [前端实现](#前端实现)
+5. [数据流机制](#数据流机制)
+6. [业务逻辑实现](#业务逻辑实现)
+7. [安全机制](#安全机制)
+8. [性能优化](#性能优化)
+
+---
+
+## 一、整体架构
+
+### 1.1 技术栈架构图
+
+```
+┌─────────────────────────────────────────────────────────┐
+│ 前端层 (uni-app-x) │
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
+│ │ 消费者端 │ │ 商家端 │ │ 配送端 │ │ 管理端 │ │
+│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
+│ │ │ │ │ │
+│ └──────────────┴──────────────┴────────────┘ │
+│ │ │
+│ ┌───────────▼───────────┐ │
+│ │ Supabase 客户端封装 │ │
+│ │ (AkSupa.uts) │ │
+│ └───────────┬───────────┘ │
+└──────────────────────────┼──────────────────────────────┘
+ │ HTTPS REST API
+┌───────────────────────────▼──────────────────────────────┐
+│ API 层 (PostgREST) │
+│ ┌──────────────────────────────────────────────────┐ │
+│ │ 自动生成 REST API │ │
+│ │ - GET /rest/v1/ml_products │ │
+│ │ - POST /rest/v1/ml_orders │ │
+│ │ - RPC /rest/v1/rpc/calculate_cart_total │ │
+│ └──────────────────────────────────────────────────┘ │
+└───────────────────────────┬──────────────────────────────┘
+ │
+┌───────────────────────────▼──────────────────────────────┐
+│ 认证层 (Supabase Auth) │
+│ ┌──────────────────────────────────────────────────┐ │
+│ │ JWT Token 认证 │ │
+│ │ - 用户登录/注册 │ │
+│ │ - Token 刷新 │ │
+│ │ - 权限验证 │ │
+│ └──────────────────────────────────────────────────┘ │
+└───────────────────────────┬──────────────────────────────┘
+ │
+┌───────────────────────────▼──────────────────────────────┐
+│ 权限层 (RLS - Row Level Security) │
+│ ┌──────────────────────────────────────────────────┐ │
+│ │ 行级安全策略 │ │
+│ │ - 用户数据隔离 │ │
+│ │ - 商家权限控制 │ │
+│ │ - 公开数据访问 │ │
+│ └──────────────────────────────────────────────────┘ │
+└───────────────────────────┬──────────────────────────────┘
+ │
+┌───────────────────────────▼──────────────────────────────┐
+│ 数据库层 (PostgreSQL) │
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
+│ │ 表结构 │ │ 触发器 │ │ 函数 │ │ 视图 │ │
+│ │ 索引 │ │ RLS策略 │ │ 序列 │ │ 扩展 │ │
+│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
+└─────────────────────────────────────────────────────────┘
+```
+
+### 1.2 核心设计模式
+
+#### BaaS (Backend as a Service) 模式
+- **特点**: 使用 Supabase 作为后端服务,无需自建后端服务器
+- **优势**:
+ - 自动生成 REST API
+ - 内置认证和权限系统
+ - 实时数据同步
+ - 减少后端开发工作量
+
+#### 数据库优先 (Database-First) 模式
+- **流程**: 数据库设计 → 自动生成 API → 前端调用
+- **实现**:
+ 1. 设计数据库表结构
+ 2. PostgREST 自动生成 REST API
+ 3. 前端通过 Supabase 客户端调用
+
+#### 类型驱动开发 (Type-Driven Development)
+- **实现**: TypeScript/UTS 类型定义
+- **文件**: `types/mall-types.uts`
+- **优势**: 类型安全、代码提示、减少错误
+
+---
+
+## 二、数据库层实现
+
+### 2.1 表结构设计
+
+#### 2.1.1 核心表结构
+
+**用户扩展表** (`ml_user_profiles`)
+```sql
+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, -- 1:正常 2:冻结 3:注销 4:待审核
+ real_name VARCHAR(100), -- 真实姓名
+ id_card VARCHAR(32), -- 身份证号
+ credit_score INTEGER DEFAULT 100, -- 信用分数 0-1000
+ verification_status INTEGER DEFAULT 0, -- 认证状态
+ verification_data JSONB DEFAULT '{}', -- 认证相关数据
+ preferences JSONB DEFAULT '{}', -- 用户偏好设置
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+);
+```
+
+**商品表** (`ml_products`)
+```sql
+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,
+ description TEXT,
+ main_image_url TEXT,
+ image_urls JSONB DEFAULT '[]', -- 商品图片数组
+ base_price DECIMAL(12,2) NOT NULL,
+ total_stock INTEGER DEFAULT 0,
+ available_stock INTEGER DEFAULT 0,
+ status INTEGER DEFAULT 1, -- 1:上架 2:下架 3:草稿 4:删除
+ view_count INTEGER DEFAULT 0,
+ sale_count INTEGER DEFAULT 0,
+ rating_avg DECIMAL(3,2) DEFAULT 0.00,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+);
+```
+
+**订单表** (`ml_orders`)
+```sql
+CREATE TABLE 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,
+ shipping_address JSONB NOT NULL, -- 收货地址JSON
+ order_status INTEGER DEFAULT 1, -- 1:待支付 2:待发货 3:待收货 4:已完成
+ payment_status INTEGER DEFAULT 1, -- 1:未支付 2:已支付 3:部分退款 4:全额退款
+ shipping_status INTEGER DEFAULT 1, -- 1:未发货 2:已发货 3:运输中 4:已送达
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
+);
+```
+
+### 2.2 索引设计
+
+#### 2.2.1 性能优化索引
+
+```sql
+-- 商品表索引
+CREATE INDEX idx_ml_products_merchant ON public.ml_products(merchant_id);
+CREATE INDEX idx_ml_products_category ON public.ml_products(category_id);
+CREATE INDEX idx_ml_products_status ON public.ml_products(status);
+CREATE INDEX idx_ml_products_cid ON public.ml_products(cid); -- SEO查询
+CREATE INDEX idx_ml_products_created ON public.ml_products(created_at DESC);
+
+-- 订单表索引
+CREATE INDEX idx_ml_orders_user ON public.ml_orders(user_id);
+CREATE INDEX idx_ml_orders_merchant ON public.ml_orders(merchant_id);
+CREATE INDEX idx_ml_orders_status ON public.ml_orders(order_status);
+CREATE INDEX idx_ml_orders_created ON public.ml_orders(created_at DESC);
+
+-- JSONB GIN索引(用于JSON字段查询)
+CREATE INDEX idx_ml_products_images_gin ON public.ml_products USING GIN(image_urls);
+CREATE INDEX idx_ml_orders_address_gin ON public.ml_orders USING GIN(shipping_address);
+```
+
+### 2.3 触发器实现
+
+#### 2.3.1 自动更新时间戳
+
+```sql
+-- 触发器函数
+CREATE OR REPLACE FUNCTION public.update_updated_at_column()
+RETURNS TRIGGER AS $$
+BEGIN
+ NEW.updated_at = NOW();
+ RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;
+
+-- 应用到表
+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();
+```
+
+#### 2.3.2 确保唯一默认地址
+
+```sql
+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_ensure_single_default_address
+ BEFORE INSERT OR UPDATE ON public.ml_user_addresses
+ FOR EACH ROW EXECUTE FUNCTION public.ensure_single_default_address();
+```
+
+#### 2.3.3 自动更新商品库存
+
+```sql
+CREATE OR REPLACE FUNCTION public.update_product_stock()
+RETURNS TRIGGER AS $$
+BEGIN
+ IF TG_OP = 'INSERT' THEN
+ -- 插入订单商品时,减少库存
+ UPDATE public.ml_products
+ SET available_stock = available_stock - NEW.quantity
+ WHERE id = NEW.product_id;
+ ELSIF TG_OP = 'DELETE' THEN
+ -- 删除订单商品时,恢复库存
+ UPDATE public.ml_products
+ SET available_stock = available_stock + OLD.quantity
+ WHERE id = OLD.product_id;
+ END IF;
+ RETURN NULL;
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE TRIGGER trigger_update_product_stock
+ AFTER INSERT OR DELETE ON public.ml_order_items
+ FOR EACH ROW EXECUTE FUNCTION public.update_product_stock();
+```
+
+### 2.4 数据库函数实现
+
+#### 2.4.1 业务函数
+
+**生成订单号**
+```sql
+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;
+```
+
+**计算购物车总金额**
+```sql
+CREATE OR REPLACE FUNCTION public.calculate_cart_total(p_user_id UUID)
+RETURNS DECIMAL AS $$
+DECLARE
+ total_amount DECIMAL(12,2) := 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;
+```
+
+**获取用户默认地址**
+```sql
+CREATE OR REPLACE FUNCTION public.get_user_default_address(p_user_id UUID)
+RETURNS TABLE (
+ id UUID,
+ receiver_name VARCHAR,
+ receiver_phone VARCHAR,
+ address_detail TEXT
+) AS $$
+BEGIN
+ RETURN QUERY
+ SELECT
+ a.id,
+ a.receiver_name,
+ a.receiver_phone,
+ a.address_detail
+ 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;
+```
+
+### 2.5 RLS 行级安全策略
+
+#### 2.5.1 用户数据隔离
+
+```sql
+-- 用户只能访问自己的数据
+CREATE POLICY ml_user_profiles_select_policy ON public.ml_user_profiles
+ FOR SELECT USING (
+ auth.uid()::text = (SELECT auth_id::text 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()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
+ );
+```
+
+#### 2.5.2 商品权限控制
+
+```sql
+-- 所有人可查看已上架商品
+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()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
+ );
+
+CREATE POLICY ml_products_update_policy ON public.ml_products
+ FOR UPDATE USING (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
+ );
+```
+
+#### 2.5.3 订单权限控制
+
+```sql
+-- 用户和商家都可查看相关订单
+CREATE POLICY ml_orders_select_policy ON public.ml_orders
+ FOR SELECT USING (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
+ OR
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = merchant_id)
+ );
+
+-- 只有用户能创建订单
+CREATE POLICY ml_orders_insert_policy ON public.ml_orders
+ FOR INSERT WITH CHECK (
+ auth.uid()::text = (SELECT auth_id::text FROM public.ak_users WHERE id = user_id)
+ );
+```
+
+---
+
+## 三、后端/API层实现
+
+### 3.1 PostgREST 自动生成 API
+
+#### 3.1.1 REST API 自动生成机制
+
+Supabase 基于 PostgREST 自动为每个表生成 REST API:
+
+**查询 API**
+```
+GET /rest/v1/ml_products
+GET /rest/v1/ml_products?id=eq.{uuid}
+GET /rest/v1/ml_products?status=eq.1&limit=20
+GET /rest/v1/ml_products?base_price=gte.100&base_price=lte.500
+```
+
+**插入 API**
+```
+POST /rest/v1/ml_orders
+Content-Type: application/json
+{
+ "user_id": "uuid",
+ "merchant_id": "uuid",
+ "total_amount": 100.00
+}
+```
+
+**更新 API**
+```
+PATCH /rest/v1/ml_products?id=eq.{uuid}
+Content-Type: application/json
+{
+ "status": 2
+}
+```
+
+**删除 API**
+```
+DELETE /rest/v1/ml_user_favorites?id=eq.{uuid}
+```
+
+**RPC 函数调用**
+```
+POST /rest/v1/rpc/calculate_cart_total
+Content-Type: application/json
+{
+ "p_user_id": "uuid"
+}
+```
+
+### 3.2 查询操作符支持
+
+PostgREST 支持丰富的查询操作符:
+
+```typescript
+// 等于
+?status=eq.1
+
+// 不等于
+?status=neq.2
+
+// 大于/小于
+?base_price=gte.100&base_price=lte.500
+
+// 模糊查询
+?name=ilike.%商品%
+
+// IN 查询
+?category_id=in.(id1,id2,id3)
+
+// IS NULL
+?deleted_at=is.null
+
+// JSONB 查询
+?preferences->theme=eq.dark
+```
+
+### 3.3 分页和排序
+
+```typescript
+// 分页
+?limit=20&offset=0
+// 或使用 Range 头
+Range: 0-19
+
+// 排序
+?order=created_at.desc
+?order=base_price.asc,created_at.desc
+
+// 计数
+Prefer: count=exact
+```
+
+---
+
+## 四、前端实现
+
+### 4.1 项目结构
+
+```
+pages/mall/
+├── consumer/ # 消费者端
+│ ├── index.uvue # 首页
+│ ├── product-detail.uvue # 商品详情
+│ ├── cart.uvue # 购物车
+│ ├── checkout.uvue # 结算页
+│ ├── orders.uvue # 订单列表
+│ └── subscription/ # 订阅相关
+├── merchant/ # 商家端
+│ ├── index.uvue # 商家首页
+│ └── product-detail.uvue
+├── delivery/ # 配送端
+├── admin/ # 管理端
+└── service/ # 客服端
+
+components/supadb/
+├── aksupa.uts # Supabase 客户端封装
+├── aksupainstance.uts # 全局单例
+└── aksuparealtime.uts # 实时订阅
+
+types/
+└── mall-types.uts # 类型定义
+```
+
+### 4.2 Supabase 客户端封装
+
+#### 4.2.1 客户端初始化
+
+**文件**: `components/supadb/aksupainstance.uts`
+
+```typescript
+import AkSupa from './aksupa.uts'
+import { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'
+
+// 创建全局 Supabase 客户端实例
+const supa = new AkSupa(SUPA_URL, SUPA_KEY)
+
+// 自动登录 (开发环境)
+const supaReady: Promise = (async () => {
+ try {
+ await supa.signIn('test@example.com', 'password')
+ return true
+ } catch (err) {
+ console.error('Supabase auto sign-in failed', err)
+ return false
+ }
+})()
+
+export { supaReady }
+export default supa
+```
+
+#### 4.2.2 API 调用封装
+
+**文件**: `components/supadb/aksupa.uts`
+
+```typescript
+export class AkSupa {
+ baseUrl: string
+ apikey: string
+
+ constructor(baseUrl: string, apikey: string) {
+ this.baseUrl = baseUrl
+ this.apikey = apikey
+ }
+
+ // 查询数据
+ async select(
+ table: string,
+ filter?: string | null,
+ options?: AkSupaSelectOptions
+ ): Promise> {
+ let url = this.baseUrl + '/rest/v1/' + table
+ let headers = {
+ apikey: this.apikey,
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${AkReq.getToken() ?? ''}`
+ } as UTSJSONObject
+
+ // 构建查询参数
+ let params: string[] = []
+ if (options?.limit) params.push(`limit=${options.limit}`)
+ if (options?.order) params.push(`order=${encodeURIComponent(options.order)}`)
+ if (filter) params.push(filter)
+
+ if (params.length > 0) {
+ url += '?' + params.join('&')
+ }
+
+ return await this.requestWithAutoRefresh({
+ url,
+ method: 'GET',
+ headers
+ })
+ }
+
+ // 插入数据
+ async insert(
+ table: string,
+ row: UTSJSONObject | Array
+ ): Promise> {
+ const url = this.baseUrl + '/rest/v1/' + table
+ const headers = {
+ apikey: this.apikey,
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
+ Prefer: 'return=representation'
+ } as UTSJSONObject
+
+ return await this.requestWithAutoRefresh({
+ url,
+ method: 'POST',
+ headers,
+ data: row
+ })
+ }
+
+ // 更新数据
+ async update(
+ table: string,
+ filter: UTSJSONObject,
+ data: UTSJSONObject
+ ): Promise> {
+ const filterStr = buildSupabaseFilterQuery(filter)
+ const url = this.baseUrl + '/rest/v1/' + table + '?' + filterStr
+ const headers = {
+ apikey: this.apikey,
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${AkReq.getToken() ?? ''}`,
+ Prefer: 'return=representation'
+ } as UTSJSONObject
+
+ return await this.requestWithAutoRefresh({
+ url,
+ method: 'PATCH',
+ headers,
+ data
+ })
+ }
+
+ // 调用 RPC 函数
+ async rpc(
+ functionName: string,
+ params: UTSJSONObject
+ ): Promise> {
+ const url = `${this.baseUrl}/rest/v1/rpc/${functionName}`
+ const headers = {
+ apikey: this.apikey,
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${AkReq.getToken() ?? ''}`
+ } as UTSJSONObject
+
+ return await this.requestWithAutoRefresh({
+ url,
+ method: 'POST',
+ headers,
+ data: params
+ })
+ }
+}
+```
+
+### 4.3 页面实现示例
+
+#### 4.3.1 商品列表页面
+
+**文件**: `pages/mall/consumer/index.uvue`
+
+```typescript
+
+```
+
+#### 4.3.2 商品详情页面
+
+```typescript
+// 加载商品详情
+const loadProductDetail = async (productId: string) => {
+ try {
+ // 查询商品信息
+ const productRes = await supa.select('ml_products',
+ `id=eq.${productId}`,
+ { single: true }
+ )
+
+ if (productRes.success && productRes.data) {
+ product.value = productRes.data as ProductType
+ }
+
+ // 查询商品SKU
+ const skuRes = await supa.select('ml_product_skus', {
+ product_id: productId
+ })
+
+ if (skuRes.success && skuRes.data) {
+ productSkus.value = skuRes.data as Array
+ }
+
+ // 查询商家信息
+ const merchantRes = await supa.select('ml_shops', {
+ merchant_id: product.value.merchant_id
+ }, { single: true })
+
+ if (merchantRes.success && merchantRes.data) {
+ merchant.value = merchantRes.data as MerchantType
+ }
+ } catch (err) {
+ console.error('加载商品详情失败:', err)
+ }
+}
+```
+
+#### 4.3.3 购物车操作
+
+```typescript
+// 添加到购物车
+const addToCart = async (product: ProductType, skuId?: string, quantity: number = 1) => {
+ try {
+ const userId = getCurrentUserId()
+ if (!userId) {
+ uni.showToast({ title: '请先登录', icon: 'error' })
+ return
+ }
+
+ // 检查购物车中是否已存在
+ const existingRes = await supa.select('ml_shopping_cart', {
+ user_id: userId,
+ product_id: product.id,
+ sku_id: skuId || null
+ }, { single: true })
+
+ if (existingRes.success && existingRes.data) {
+ // 更新数量
+ await supa.update('ml_shopping_cart',
+ { id: existingRes.data.id },
+ { quantity: existingRes.data.quantity + quantity }
+ )
+ } else {
+ // 新增购物车项
+ await supa.insert('ml_shopping_cart', {
+ user_id: userId,
+ product_id: product.id,
+ sku_id: skuId || null,
+ quantity: quantity,
+ selected: true
+ })
+ }
+
+ uni.showToast({ title: '已添加到购物车', icon: 'success' })
+ loadCartCount()
+ } catch (err) {
+ console.error('添加到购物车失败:', err)
+ uni.showToast({ title: '操作失败', icon: 'error' })
+ }
+}
+```
+
+#### 4.3.4 创建订单
+
+```typescript
+// 创建订单
+const createOrder = async (cartItems: Array, address: UserAddressType) => {
+ try {
+ // 1. 计算订单总金额(使用数据库函数)
+ const totalRes = await supa.rpc('calculate_cart_total', {
+ p_user_id: getCurrentUserId()
+ })
+
+ if (!totalRes.success) {
+ throw new Error('计算订单金额失败')
+ }
+
+ const totalAmount = totalRes.data as number
+
+ // 2. 生成订单号
+ const orderNoRes = await supa.rpc('generate_order_no')
+ if (!orderNoRes.success) {
+ throw new Error('生成订单号失败')
+ }
+ const orderNo = orderNoRes.data as string
+
+ // 3. 创建订单
+ const orderRes = await supa.insert('ml_orders', {
+ order_no: orderNo,
+ user_id: getCurrentUserId(),
+ merchant_id: cartItems[0].product.merchant_id,
+ product_amount: totalAmount,
+ discount_amount: 0,
+ shipping_fee: 0,
+ total_amount: totalAmount,
+ shipping_address: {
+ receiver_name: address.receiver_name,
+ receiver_phone: address.receiver_phone,
+ province: address.province,
+ city: address.city,
+ district: address.district,
+ address_detail: address.address_detail
+ },
+ order_status: 1, // 待支付
+ payment_status: 1,
+ shipping_status: 1
+ })
+
+ if (!orderRes.success) {
+ throw new Error('创建订单失败')
+ }
+
+ const orderId = orderRes.data.id
+
+ // 4. 创建订单商品项
+ const orderItems = cartItems.map(item => ({
+ order_id: orderId,
+ product_id: item.product_id,
+ sku_id: item.sku_id || null,
+ product_name: item.product.name,
+ price: item.sku?.price || item.product.price,
+ quantity: item.quantity,
+ total_amount: (item.sku?.price || item.product.price) * item.quantity
+ }))
+
+ await supa.insert('ml_order_items', orderItems)
+
+ // 5. 清空购物车
+ for (const item of cartItems) {
+ await supa.delete('ml_shopping_cart', { id: item.id })
+ }
+
+ uni.showToast({ title: '订单创建成功', icon: 'success' })
+
+ // 跳转到订单详情
+ uni.navigateTo({
+ url: `/pages/mall/consumer/order-detail?orderId=${orderId}`
+ })
+ } catch (err) {
+ console.error('创建订单失败:', err)
+ uni.showToast({ title: '创建订单失败', icon: 'error' })
+ }
+}
+```
+
+### 4.4 实时数据同步
+
+#### 4.4.1 订阅订单状态更新
+
+```typescript
+import { AkSupaRealtime } from '@/components/supadb/aksuparealtime.uts'
+
+// 订阅订单状态更新
+const subscribeOrderStatus = (orderId: string, callback: (payload: any) => void) => {
+ const realtime = new AkSupaRealtime(WS_URL, SUPA_KEY)
+
+ realtime.subscribe('ml_orders', {
+ filter: `id=eq.${orderId}`,
+ event: 'UPDATE',
+ callback: (payload) => {
+ console.log('订单状态更新:', payload)
+ callback(payload)
+ }
+ })
+}
+
+// 使用
+onMounted(() => {
+ subscribeOrderStatus(orderId, (payload) => {
+ // 更新订单状态
+ order.value.order_status = payload.new.order_status
+ })
+})
+```
+
+---
+
+## 五、数据流机制
+
+### 5.1 数据流向图
+
+```
+用户操作
+ │
+ ▼
+前端页面 (uni-app-x)
+ │
+ ▼
+Supabase 客户端 (AkSupa)
+ │
+ ▼ HTTP Request
+ │
+ ├─ Headers: apikey, Authorization (JWT Token)
+ │
+ ▼
+PostgREST API
+ │
+ ├─ 解析请求
+ ├─ 验证 JWT Token
+ ├─ 应用 RLS 策略
+ │
+ ▼
+PostgreSQL 数据库
+ │
+ ├─ 执行 SQL 查询
+ ├─ 触发触发器
+ ├─ 执行函数
+ │
+ ▼
+返回数据
+ │
+ ▼
+PostgREST 格式化响应
+ │
+ ▼ HTTP Response
+ │
+ ├─ JSON 数据
+ ├─ 状态码
+ │
+ ▼
+Supabase 客户端处理
+ │
+ ├─ 解析响应
+ ├─ 错误处理
+ │
+ ▼
+前端页面更新 UI
+```
+
+### 5.2 认证流程
+
+```
+1. 用户登录
+ │
+ ▼
+2. Supabase Auth 验证
+ │
+ ├─ 验证邮箱/密码
+ ├─ 生成 JWT Token
+ │
+ ▼
+3. 存储 Token
+ │
+ ├─ 本地存储 (uni.setStorageSync)
+ │
+ ▼
+4. 后续请求自动携带 Token
+ │
+ ├─ Authorization: Bearer
+ │
+ ▼
+5. PostgREST 验证 Token
+ │
+ ├─ 解析 JWT
+ ├─ 获取 auth.uid()
+ │
+ ▼
+6. RLS 策略应用
+ │
+ ├─ 根据 auth.uid() 过滤数据
+```
+
+### 5.3 权限控制流程
+
+```
+请求到达 PostgREST
+ │
+ ▼
+解析 JWT Token
+ │
+ ├─ 获取 auth.uid()
+ │
+ ▼
+查找 RLS 策略
+ │
+ ├─ SELECT 策略 → USING 子句
+ ├─ INSERT 策略 → WITH CHECK 子句
+ ├─ UPDATE 策略 → USING + WITH CHECK
+ ├─ DELETE 策略 → USING 子句
+ │
+ ▼
+应用策略条件
+ │
+ ├─ 用户只能访问自己的数据
+ ├─ 商家只能管理自己的商品
+ ├─ 公开数据所有人可查看
+ │
+ ▼
+执行 SQL 查询
+ │
+ ├─ 自动添加 WHERE 条件
+ │
+ ▼
+返回过滤后的数据
+```
+
+---
+
+## 六、业务逻辑实现
+
+### 6.1 商品管理流程
+
+#### 6.1.1 商品上架流程
+
+```typescript
+// 商家上架商品
+const publishProduct = async (productData: any) => {
+ // 1. 验证商家权限
+ const merchantRes = await supa.select('ml_user_profiles', {
+ user_id: getCurrentUserId(),
+ user_type: 2, // 商家
+ verification_status: 1 // 已认证
+ }, { single: true })
+
+ if (!merchantRes.success || !merchantRes.data) {
+ throw new Error('您还不是认证商家')
+ }
+
+ // 2. 创建商品
+ const productRes = await supa.insert('ml_products', {
+ merchant_id: getCurrentUserId(),
+ category_id: productData.category_id,
+ name: productData.name,
+ description: productData.description,
+ base_price: productData.price,
+ total_stock: productData.stock,
+ available_stock: productData.stock,
+ status: 1, // 上架
+ ...productData
+ })
+
+ // 3. 创建商品SKU
+ if (productData.skus && productData.skus.length > 0) {
+ const skus = productData.skus.map((sku: any) => ({
+ product_id: productRes.data.id,
+ sku_code: sku.sku_code,
+ specifications: sku.specifications,
+ price: sku.price,
+ stock: sku.stock
+ }))
+
+ await supa.insert('ml_product_skus', skus)
+ }
+
+ return productRes.data
+}
+```
+
+### 6.2 订单处理流程
+
+#### 6.2.1 订单状态流转
+
+```typescript
+// 订单状态枚举
+const ORDER_STATUS = {
+ PENDING_PAYMENT: 1, // 待支付
+ PAID: 2, // 已支付
+ SHIPPED: 3, // 已发货
+ DELIVERED: 4, // 已送达
+ COMPLETED: 5, // 已完成
+ CANCELLED: 6, // 已取消
+ REFUNDING: 7, // 退款中
+ REFUNDED: 8 // 已退款
+}
+
+// 更新订单状态
+const updateOrderStatus = async (orderId: string, newStatus: number) => {
+ const updateData: any = {
+ order_status: newStatus,
+ updated_at: new Date().toISOString()
+ }
+
+ // 根据状态设置相应时间戳
+ switch (newStatus) {
+ case ORDER_STATUS.PAID:
+ updateData.paid_at = new Date().toISOString()
+ updateData.payment_status = 2 // 已支付
+ break
+ case ORDER_STATUS.SHIPPED:
+ updateData.shipped_at = new Date().toISOString()
+ updateData.shipping_status = 2 // 已发货
+ break
+ case ORDER_STATUS.DELIVERED:
+ updateData.delivered_at = new Date().toISOString()
+ updateData.shipping_status = 4 // 已送达
+ break
+ case ORDER_STATUS.COMPLETED:
+ updateData.completed_at = new Date().toISOString()
+ break
+ }
+
+ await supa.update('ml_orders', { id: orderId }, updateData)
+}
+```
+
+### 6.3 库存管理机制
+
+#### 6.3.1 库存扣减流程
+
+```typescript
+// 下单时扣减库存
+const deductStock = async (orderItems: Array) => {
+ for (const item of orderItems) {
+ if (item.sku_id) {
+ // 扣减 SKU 库存
+ const skuRes = await supa.select('ml_product_skus', {
+ id: item.sku_id
+ }, { single: true })
+
+ if (skuRes.data.stock < item.quantity) {
+ throw new Error(`商品 ${item.product_name} 库存不足`)
+ }
+
+ await supa.update('ml_product_skus',
+ { id: item.sku_id },
+ { stock: skuRes.data.stock - item.quantity }
+ )
+ } else {
+ // 扣减商品总库存
+ const productRes = await supa.select('ml_products', {
+ id: item.product_id
+ }, { single: true })
+
+ if (productRes.data.available_stock < item.quantity) {
+ throw new Error(`商品 ${item.product_name} 库存不足`)
+ }
+
+ await supa.update('ml_products',
+ { id: item.product_id },
+ {
+ available_stock: productRes.data.available_stock - item.quantity,
+ sale_count: productRes.data.sale_count + item.quantity
+ }
+ )
+ }
+ }
+}
+```
+
+---
+
+## 七、安全机制
+
+### 7.1 多层安全防护
+
+```
+┌─────────────────────────────────────┐
+│ 1. 网络层安全 │
+│ - HTTPS 加密传输 │
+│ - SSL/TLS 证书 │
+└─────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────┐
+│ 2. 认证层安全 │
+│ - JWT Token 验证 │
+│ - Token 过期机制 │
+│ - 自动刷新 Token │
+└─────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────┐
+│ 3. 权限层安全 (RLS) │
+│ - 行级安全策略 │
+│ - 基于用户角色的权限控制 │
+│ - 数据隔离 │
+└─────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────┐
+│ 4. 应用层安全 │
+│ - 前端数据验证 │
+│ - 输入过滤和转义 │
+│ - 防止 SQL 注入 │
+└─────────────────────────────────────┘
+```
+
+### 7.2 数据验证机制
+
+#### 7.2.1 数据库约束
+
+```sql
+-- CHECK 约束
+CONSTRAINT chk_ml_product_status CHECK (status IN (1,2,3,4))
+CONSTRAINT chk_ml_order_status CHECK (order_status IN (1,2,3,4,5,6,7))
+CONSTRAINT chk_ml_credit_score CHECK (credit_score >= 0 AND credit_score <= 1000)
+
+-- 外键约束
+REFERENCES public.ak_users(id) ON DELETE CASCADE
+REFERENCES public.ml_products(id) ON DELETE CASCADE
+
+-- 唯一约束
+UNIQUE(product_code)
+UNIQUE(order_no)
+UNIQUE(user_id, product_id, sku_id) -- 购物车唯一性
+```
+
+#### 7.2.2 前端验证
+
+```typescript
+// 表单验证
+const validateOrderData = (orderData: any): boolean => {
+ if (!orderData.user_id) {
+ uni.showToast({ title: '用户ID不能为空', icon: 'error' })
+ return false
+ }
+
+ if (!orderData.total_amount || orderData.total_amount <= 0) {
+ uni.showToast({ title: '订单金额无效', icon: 'error' })
+ return false
+ }
+
+ if (!orderData.shipping_address) {
+ uni.showToast({ title: '请选择收货地址', icon: 'error' })
+ return false
+ }
+
+ return true
+}
+```
+
+---
+
+## 八、性能优化
+
+### 8.1 数据库优化
+
+#### 8.1.1 索引优化
+
+```sql
+-- 复合索引(针对常用查询组合)
+CREATE INDEX idx_ml_products_status_created
+ON ml_products(status, created_at DESC);
+
+CREATE INDEX idx_ml_orders_user_status
+ON ml_orders(user_id, order_status);
+
+-- 部分索引(只索引活跃数据)
+CREATE INDEX idx_ml_products_active
+ON ml_products(merchant_id, category_id)
+WHERE status = 1;
+```
+
+#### 8.1.2 查询优化
+
+```typescript
+// 只查询需要的字段
+const res = await supa.select('ml_products', null, {
+ columns: 'id,name,base_price,main_image_url', // 只查询必要字段
+ limit: 20
+})
+
+// 使用视图简化复杂查询
+const res = await supa.select('ml_products_detail_view', {
+ status: 1
+}, {
+ limit: 20
+})
+```
+
+### 8.2 前端优化
+
+#### 8.2.1 分页加载
+
+```typescript
+// 分页加载商品列表
+const loadProducts = async (loadMore: boolean = false) => {
+ const currentPage = loadMore ? page.value + 1 : 1
+
+ const res = await supa
+ .from('ml_products')
+ .select('*')
+ .eq('status', 1)
+ .order('created_at', { ascending: false })
+ .range((currentPage - 1) * pageSize.value, currentPage * pageSize.value - 1)
+
+ // 追加或替换数据
+ if (loadMore) {
+ productList.value.push(...res.data)
+ } else {
+ productList.value = res.data
+ }
+}
+```
+
+#### 8.2.2 数据缓存
+
+```typescript
+// 使用本地缓存减少请求
+const getCachedProducts = async (categoryId: string) => {
+ const cacheKey = `products_${categoryId}`
+ const cached = uni.getStorageSync(cacheKey)
+
+ if (cached && Date.now() - cached.timestamp < 5 * 60 * 1000) {
+ // 5分钟内使用缓存
+ return cached.data
+ }
+
+ // 从服务器获取
+ const res = await supa.select('ml_products', {
+ category_id: categoryId,
+ status: 1
+ })
+
+ // 更新缓存
+ uni.setStorageSync(cacheKey, {
+ data: res.data,
+ timestamp: Date.now()
+ })
+
+ return res.data
+}
+```
+
+### 8.3 实时同步优化
+
+```typescript
+// 只订阅必要的数据变更
+const subscribeOrderUpdates = (orderId: string) => {
+ realtime.subscribe('ml_orders', {
+ filter: `id=eq.${orderId}`, // 只订阅特定订单
+ event: 'UPDATE', // 只监听更新事件
+ callback: handleOrderUpdate
+ })
+}
+
+// 及时取消订阅
+onUnmounted(() => {
+ realtime.unsubscribe('ml_orders')
+})
+```
+
+---
+
+## 九、开发工作流
+
+### 9.1 开发流程
+
+```
+1. 数据库设计
+ │
+ ├─ 设计表结构
+ ├─ 设计索引
+ ├─ 设计 RLS 策略
+ ├─ 设计触发器
+ └─ 设计函数
+ │
+ ▼
+2. 执行数据库脚本
+ │
+ ├─ complete_mall_database.sql
+ │
+ ▼
+3. 定义类型
+ │
+ ├─ types/mall-types.uts
+ │
+ ▼
+4. 开发前端页面
+ │
+ ├─ 页面组件
+ ├─ API 调用
+ └─ 业务逻辑
+ │
+ ▼
+5. 测试验证
+ │
+ ├─ 功能测试
+ ├─ 权限测试
+ └─ 性能测试
+```
+
+### 9.2 调试技巧
+
+```typescript
+// 1. 启用详细日志
+console.log('请求参数:', {
+ table: 'ml_products',
+ filter: filter,
+ options: options
+})
+
+// 2. 检查响应
+console.log('API 响应:', {
+ success: res.success,
+ status: res.status,
+ data: res.data,
+ error: res.error
+})
+
+// 3. 验证权限
+const session = await supa.getSession()
+console.log('当前用户:', session.user)
+console.log('JWT Token:', AkReq.getToken())
+```
+
+---
+
+## 📚 相关文档
+
+- [模块分析报告](./MODULE_ANALYSIS.md)
+- [前后端联调指南](./FRONTEND_BACKEND_DEBUGGING.md)
+- [数据库创建报告](./database/database_creation_report.md)
+- [完整部署指南](./database/complete_deployment_guide.md)
+
+---
+
+**生成时间**: 2025年1月
+**版本**: v1.0
+**状态**: ✅ 完整技术实现拆解
diff --git a/mall_sql/docs/UNI_APP_X_MIGRATION.md b/mall_sql/docs/UNI_APP_X_MIGRATION.md
new file mode 100644
index 00000000..7b847032
--- /dev/null
+++ b/mall_sql/docs/UNI_APP_X_MIGRATION.md
@@ -0,0 +1,198 @@
+# uni-app X 迁移操作总结
+
+## 操作日期
+2024年(具体日期根据实际情况填写)
+
+## 操作背景
+项目需要从传统的 uni-app 迁移到 **uni-app X**,以支持 `.uvue` 文件在 H5 浏览器中正确渲染。
+
+## 问题分析
+对比根项目(`akmon`)和 `mall` 项目,发现以下关键差异:
+
+1. **缺少 uni-app X 配置**:`mall/manifest.json` 中缺少 `"uni-app-x": {}` 配置项
+2. **存在 .vue 文件**:项目中有 23 个 `.vue` 文件,这些文件在 uni-app X 中无法被正确编译到 H5
+3. **编译器配置**:需要确保 HBuilderX 使用 uni-app X 编译器
+
+## 执行的操作
+
+### 1. 添加 uni-app X 配置
+
+在 `manifest.json` 中添加了 `"uni-app-x": {}` 配置项:
+
+```json
+{
+ "vueVersion": "3",
+ "uni-app-x": {},
+ "h5": {
+ "title": "mall",
+ "router": {
+ "mode": "hash",
+ "base": "./"
+ }
+ }
+}
+```
+
+**位置**:`manifest.json` 第 66 行
+
+**作用**:
+- 告诉 HBuilderX 这是一个 uni-app X 项目
+- 启用 uni-app X 编译链,支持 `.uvue` 文件编译到 H5
+- 确保 `.uvue` 文件能够被正确编译和渲染
+
+### 2. 删除所有 .vue 文件
+
+删除了项目中所有 `.vue` 文件,共 23 个文件:
+
+**删除的文件列表**:
+- `pages/user/boot.vue`
+- `pages/user/login.vue`
+- `pages/user/register.vue`
+- `pages/user/forgot-password.vue`
+- `pages/user/profile.vue`
+- `pages/user/center.vue`
+- `pages/user/terms.vue`
+- `pages/mall/consumer/index.vue`
+- `pages/mall/consumer/product-detail.vue`
+- `pages/mall/consumer/order-detail.vue`
+- `pages/mall/consumer/profile.vue`
+- `pages/mall/consumer/subscription/plan-list.vue`
+- `pages/mall/consumer/subscription/plan-detail.vue`
+- `pages/mall/consumer/subscription/subscribe-checkout.vue`
+- `pages/mall/consumer/subscription/my-subscriptions.vue`
+- `pages/mall/merchant/index.vue`
+- `pages/mall/delivery/index.vue`
+- `pages/mall/admin/index.vue`
+- `pages/mall/admin/subscription/plan-management.vue`
+- `pages/mall/admin/subscription/user-subscriptions.vue`
+- `pages/mall/service/index.vue`
+- `pages/mall/analytics/index.vue`
+- `pages/mall/nfc/security/index.vue`
+
+**删除命令**:
+```powershell
+Set-Location -Path 'd:\datas\hfkj\akmon\mall'
+Get-ChildItem -Recurse -Filter *.vue | Remove-Item -Force
+```
+
+**原因**:
+- `.vue` 文件在 uni-app X 中无法被正确编译到 H5 浏览器
+- 所有页面和组件应使用 `.uvue` 格式
+- 导入语句会自动识别 `.uvue` 扩展名(导入时无需显式指定扩展名)
+
+## 技术说明
+
+### uni-app X vs 传统 uni-app
+
+| 特性 | 传统 uni-app | uni-app X |
+| ------------- | --------------------- | ---------------------- |
+| 文件格式 | `.vue` | `.uvue` |
+| 脚本语言 | JavaScript/TypeScript | UTS (TypeScript 扩展) |
+| 编译器 | uni-app 编译器 | uni-app X 编译器 |
+| H5 渲染 | 需要编译 | 需要编译(但支持更好) |
+| manifest.json | 不需要 `uni-app-x` | 需要 `"uni-app-x": {}` |
+
+### 导入语句说明
+
+删除 `.vue` 文件后,所有导入语句会自动使用对应的 `.uvue` 文件:
+
+```typescript
+// 之前(.vue)
+import LoginPage from './pages/user/login.vue'
+
+// 现在(.uvue,扩展名可省略)
+import LoginPage from './pages/user/login.uvue'
+// 或者
+import LoginPage from './pages/user/login' // 自动识别 .uvue
+```
+
+## 后续操作
+
+### 1. 验证配置
+
+1. 打开 HBuilderX
+2. 打开 `mall` 项目
+3. 检查编译器:**工具** → **切换编译器** → 确认选择 **uni-app X**
+4. 如果未选择,请切换到 uni-app X 编译器
+
+### 2. 运行到 H5
+
+1. 在 HBuilderX 中,点击菜单:**运行** → **运行到浏览器** → **Chrome**(或内置浏览器)
+2. 等待编译完成
+3. 浏览器会自动打开并显示应用
+
+### 3. 发行 H5
+
+如果需要打包发布:
+
+1. 点击菜单:**发行** → **网站-H5**
+2. 等待编译完成
+3. 编译产物在 `unpackage/dist/build/h5` 目录
+4. 将整个 `h5` 目录部署到 Web 服务器
+
+### 4. 检查页面
+
+确保所有页面都有对应的 `.uvue` 文件:
+
+- 检查 `pages.json` 中配置的所有页面路径
+- 确认每个页面都有对应的 `.uvue` 文件
+- 如果缺少,需要从备份或版本控制中恢复并转换为 `.uvue` 格式
+
+## 注意事项
+
+1. **编译器版本**:必须使用支持 uni-app X 的 HBuilderX 版本
+2. **文件格式**:所有页面和组件必须使用 `.uvue` 格式,不能混用 `.vue`
+3. **UTS 语法**:`.uvue` 文件中的 `
diff --git a/pages/mall/analytics/delivery-analysis.uvue b/pages/mall/analytics/delivery-analysis.uvue
index 63dbbb63..127ee216 100644
--- a/pages/mall/analytics/delivery-analysis.uvue
+++ b/pages/mall/analytics/delivery-analysis.uvue
@@ -27,19 +27,34 @@
-
+
{{ p.label }}
+
+ 自定义
+
+
+
@@ -59,16 +74,16 @@
客户满意度
- {{ deliveryData.satisfaction_rate }}%
+ {{ formatScore(deliveryData.satisfaction_rate) }}分
较上期:{{ formatPct(deliveryData.satisfaction_growth) }}
-
+
- 配送时效分析
- {{ selectedPeriodText }} · 平均配送时间趋势
+ 配送时效 & 满意度
+ {{ selectedPeriodText }} · 平均配送时间 / 满意度趋势
@@ -88,29 +103,24 @@
配送员效率排行 TOP 10
按订单数排序
-
-
- {{ d.rank }}
- {{ d.name }}
-
- {{ d.orders }} 单
-
- ⭐{{ d.rating }}
-
+
+
+
+
+ {{ d.rank }}
+ {{ d.name }}
+
+ {{ d.orders }} 单
+
+ ⭐{{ d.rating }}
+
+
+
-
+
-
-
-
- 客户满意度分析
- 评分分布
-
-
-
-
@@ -119,145 +129,358 @@
-
diff --git a/pages/mall/analytics/market-trends.uvue b/pages/mall/analytics/market-trends.uvue
index a5d32cc9..99621527 100644
--- a/pages/mall/analytics/market-trends.uvue
+++ b/pages/mall/analytics/market-trends.uvue
@@ -1,5 +1,5 @@
-
+
-
+
{{ p.label }}
+
+ 自定义
+
+
+
@@ -93,133 +108,337 @@
-
diff --git a/pages/mall/analytics/product-insights.uvue b/pages/mall/analytics/product-insights.uvue
index ff3addcc..5cec3195 100644
--- a/pages/mall/analytics/product-insights.uvue
+++ b/pages/mall/analytics/product-insights.uvue
@@ -1,5 +1,5 @@
-
+
-
+
{{ p.label }}
+
+ 自定义
+
+
+
@@ -50,7 +65,7 @@
热销商品
{{ formatInt(productData.hot_products) }}
- 销量 > 100
+ 销量 > 100
库存周转率
@@ -70,7 +85,7 @@
商品销售分析
@@ -167,308 +182,343 @@
-
diff --git a/pages/mall/analytics/report-detail.uvue b/pages/mall/analytics/report-detail.uvue
index 0b88dc9a..29447f63 100644
--- a/pages/mall/analytics/report-detail.uvue
+++ b/pages/mall/analytics/report-detail.uvue
@@ -38,6 +38,7 @@
@@ -199,265 +200,167 @@
-
@@ -729,13 +627,20 @@ export default {
gap: 15rpx;
}
-.action-btn.export, .action-btn.refresh {
+.action-btn.detail,
+.action-btn.export,
+.action-btn.refresh {
padding: 15rpx 25rpx;
border-radius: 8rpx;
font-size: 24rpx;
border: none;
}
+.action-btn.detail {
+ background-color: #111827;
+ color: #fff;
+}
+
.action-btn.export {
background-color: #4caf50;
color: #fff;
@@ -801,12 +706,12 @@ export default {
.metric-label {
font-size: 24rpx;
color: #666;
- margin-bottom: 8rpx;
}
.metric-change {
display: flex;
align-items: center;
+ margin-top: 8rpx;
}
.metric-change.positive {
@@ -814,17 +719,15 @@ export default {
}
.metric-change.negative {
- color: #ff4444;
+ color: #f44336;
}
.change-icon {
- font-size: 20rpx;
- margin-right: 5rpx;
+ margin-right: 8rpx;
}
.change-value {
font-size: 22rpx;
- font-weight: bold;
}
.chart-tabs {
@@ -833,111 +736,104 @@ export default {
}
.chart-tab {
- padding: 12rpx 24rpx;
+ padding: 8rpx 16rpx;
border-radius: 20rpx;
- font-size: 24rpx;
- color: #666;
background-color: #f0f0f0;
+ color: #666;
+ font-size: 22rpx;
}
.chart-tab.active {
- background-color: #2196f3;
+ background-color: #111827;
color: #fff;
}
.chart-container {
- height: 500rpx;
- margin: 30rpx 0;
- border: 1rpx solid #eee;
- border-radius: 8rpx;
+ height: 400rpx;
+ margin: 20rpx 0;
}
.chart-canvas {
width: 100%;
- height: 100%;
+ height: 400rpx;
}
.chart-legend {
display: flex;
justify-content: center;
- gap: 40rpx;
+ gap: 30rpx;
}
.legend-item {
display: flex;
align-items: center;
+ gap: 8rpx;
}
.legend-color {
width: 20rpx;
height: 20rpx;
border-radius: 10rpx;
- margin-right: 10rpx;
}
.legend-label {
- font-size: 24rpx;
+ font-size: 22rpx;
color: #666;
}
.table-filters {
display: flex;
- gap: 40rpx;
- margin-bottom: 25rpx;
+ justify-content: space-between;
+ margin-bottom: 20rpx;
}
.filter-item {
display: flex;
align-items: center;
+ gap: 10rpx;
}
.filter-label {
font-size: 24rpx;
color: #666;
- margin-right: 10rpx;
}
-.filter-value, .config-value {
+.filter-value {
font-size: 24rpx;
color: #333;
- padding: 10rpx 20rpx;
- background-color: #f0f0f0;
- border-radius: 6rpx;
}
.table-container {
- border: 1rpx solid #eee;
- border-radius: 8rpx;
- margin-bottom: 25rpx;
+ margin: 20rpx 0;
}
.table-scroll {
- white-space: nowrap;
+ width: 100%;
}
.table {
- min-width: 100%;
+ min-width: 600rpx;
}
-.table-header, .table-row {
+.table-header {
display: flex;
+ background-color: #f8f9fa;
+ padding: 15rpx;
+}
+
+.table-row {
+ display: flex;
+ padding: 15rpx;
border-bottom: 1rpx solid #eee;
}
-.table-row:last-child {
- border-bottom: none;
-}
-
.table-cell {
- padding: 20rpx 15rpx;
- font-size: 24rpx;
+ flex-shrink: 0;
text-align: center;
- overflow: hidden;
- text-overflow: ellipsis;
+ font-size: 22rpx;
}
.header-cell {
- background-color: #f8f9fa;
font-weight: bold;
color: #333;
}
@@ -946,24 +842,29 @@ export default {
color: #666;
}
-.data-cell.number, .data-cell.currency {
- text-align: right;
+.data-cell.number {
+ color: #2196f3;
+}
+
+.data-cell.currency {
+ color: #4caf50;
}
.table-pagination {
display: flex;
justify-content: center;
align-items: center;
- gap: 30rpx;
+ gap: 20rpx;
+ margin-top: 20rpx;
}
.page-btn {
- padding: 15rpx 30rpx;
- background-color: #2196f3;
- color: #fff;
- border: none;
+ padding: 10rpx 20rpx;
border-radius: 6rpx;
- font-size: 24rpx;
+ background-color: #111827;
+ color: #fff;
+ font-size: 22rpx;
+ border: none;
}
.page-btn:disabled {
@@ -976,16 +877,17 @@ export default {
}
.insight-card {
- padding: 25rpx;
background-color: #f8f9fa;
- border-radius: 10rpx;
- margin-bottom: 20rpx;
+ padding: 20rpx;
+ border-radius: 12rpx;
+ margin-bottom: 15rpx;
}
.insight-header {
display: flex;
align-items: center;
- margin-bottom: 15rpx;
+ gap: 15rpx;
+ margin-bottom: 10rpx;
}
.insight-icon {
@@ -995,24 +897,8 @@ export default {
display: flex;
align-items: center;
justify-content: center;
- font-size: 20rpx;
- margin-right: 15rpx;
-}
-
-.insight-icon.positive {
- background-color: #e8f5e8;
-}
-
-.insight-icon.warning {
- background-color: #fff8e1;
-}
-
-.insight-icon.negative {
- background-color: #ffebee;
-}
-
-.insight-icon.info {
- background-color: #e3f2fd;
+ font-size: 24rpx;
+ background-color: #e5e7eb;
}
.insight-title {
@@ -1024,33 +910,35 @@ export default {
.insight-content {
font-size: 24rpx;
color: #666;
- line-height: 1.6;
- margin-bottom: 15rpx;
+ line-height: 1.5;
}
.insight-actions {
display: flex;
justify-content: space-between;
align-items: center;
+ margin-top: 15rpx;
}
.insight-impact {
font-size: 22rpx;
- padding: 6rpx 12rpx;
- border-radius: 8rpx;
- color: #fff;
+ padding: 4rpx 12rpx;
+ border-radius: 12rpx;
}
.insight-impact.high {
- background-color: #ff4444;
+ background-color: #ffebee;
+ color: #f44336;
}
.insight-impact.medium {
- background-color: #ffa726;
+ background-color: #fff3e0;
+ color: #ff9800;
}
.insight-impact.low {
- background-color: #4caf50;
+ background-color: #e8f5e8;
+ color: #4caf50;
}
.insight-action {
@@ -1062,30 +950,31 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
- padding: 25rpx 0;
- border-bottom: 1rpx solid #f5f5f5;
-}
-
-.config-item:last-of-type {
- border-bottom: none;
+ padding: 20rpx 0;
+ border-bottom: 1rpx solid #eee;
}
.config-label {
- font-size: 26rpx;
+ font-size: 24rpx;
color: #333;
}
+.config-value {
+ font-size: 24rpx;
+ color: #666;
+}
+
.config-actions {
display: flex;
- gap: 20rpx;
- margin-top: 30rpx;
+ gap: 15rpx;
+ margin-top: 20rpx;
}
.config-btn {
flex: 1;
- height: 70rpx;
+ padding: 15rpx;
border-radius: 8rpx;
- font-size: 26rpx;
+ font-size: 24rpx;
border: none;
}
@@ -1095,28 +984,22 @@ export default {
}
.config-btn.reset {
- background-color: #f0f0f0;
- color: #666;
-}
-
-.report-list {
- margin-top: 25rpx;
+ background-color: #f44336;
+ color: #fff;
}
.report-item {
display: flex;
align-items: center;
- padding: 25rpx 0;
- border-bottom: 1rpx solid #f5f5f5;
-}
-
-.report-item:last-child {
- border-bottom: none;
+ padding: 20rpx;
+ background-color: #f8f9fa;
+ border-radius: 12rpx;
+ margin-bottom: 15rpx;
}
.report-icon {
font-size: 32rpx;
- margin-right: 20rpx;
+ margin-right: 15rpx;
}
.report-info {
@@ -1125,35 +1008,24 @@ export default {
.report-name {
font-size: 26rpx;
- color: #333;
font-weight: bold;
- margin-bottom: 5rpx;
+ color: #333;
}
.report-desc {
font-size: 22rpx;
color: #666;
- margin-bottom: 5rpx;
+ margin-top: 5rpx;
}
.report-time {
font-size: 20rpx;
color: #999;
+ margin-top: 5rpx;
}
.report-arrow {
font-size: 24rpx;
color: #999;
}
-
-/* 响应式:窄屏时全屏显示 */
-@media screen and (max-width: 959px) {
- .page-layout {
- flex-direction: column !important;
- }
-
- .main-content {
- width: 100%;
- }
-}
diff --git a/pages/mall/analytics/sales-report.uvue b/pages/mall/analytics/sales-report.uvue
index a436716c..15e34bd2 100644
--- a/pages/mall/analytics/sales-report.uvue
+++ b/pages/mall/analytics/sales-report.uvue
@@ -1,5 +1,5 @@
-
+
-
+
{{ p.label }}
+
+ 自定义
+
+
+
@@ -148,313 +163,220 @@
-
diff --git a/pages/mall/analytics/user-analysis.uvue b/pages/mall/analytics/user-analysis.uvue
index 63716b03..5ba29d82 100644
--- a/pages/mall/analytics/user-analysis.uvue
+++ b/pages/mall/analytics/user-analysis.uvue
@@ -1,5 +1,5 @@
-
+
-
-
-
- {{ p.label }}
+
+
+
+ 时间范围
+
+
+ {{ p.label }}
+
+
+ 自定义
+
+
+
+
+
+
+
+ 渠道/终端/会员/新老:待接入数据后开放
-
-
+
+
- 总用户数
- {{ formatInt(userData.total_users) }}
- 较上期:{{ formatPct(userData.user_growth) }}
-
-
- 新用户
+ 新增用户
{{ formatInt(userData.new_users) }}
较上期:{{ formatPct(userData.new_user_growth) }}
- 用户活跃度
- {{ formatPct(userData.active_rate) }}
+ 活跃用户(DAU)
+ {{ formatInt(userData.active_users) }}
较上期:{{ formatPct(userData.active_growth) }}
+
+ 下单用户数
+ {{ formatInt(userData.ordering_users) }}
+ 较上期:{{ formatPct(userData.ordering_growth) }}
+
+
+ 支付用户数
+ {{ formatInt(userData.paid_users) }}
+ 较上期:{{ formatPct(userData.paid_growth) }}
+
+
+ 新客转化率
+ {{ formatPct(userData.new_user_conversion_rate) }}
+ 新客 → 下单/支付
+
复购率
{{ formatPct(userData.repurchase_rate) }}
@@ -64,11 +98,11 @@
-
+
- 用户增长趋势
- {{ selectedPeriodText }} · 新用户 vs 总用户
+ 增长与活跃趋势
+ {{ selectedPeriodText }} · 新增 vs 活跃(DAU)
{{ loading ? '加载中...' : '暂无数据' }}
@@ -76,60 +110,110 @@
-
-
-
- 用户洞察
- 留存率 / 新老对比 / 活跃度 / 画像
+
+
+
+ 新客转化趋势
+ 新客 → 下单/支付(待接入)
+
+
+ 暂无数据 / 待接入
+
-
-
-
- 用户留存率
- 按留存天数统计
-
-
+
+
+
+ 回访 / 复购趋势
+ 复购人数 / 复购率(待接入)
-
-
- 新老用户对比
- GMV、订单数、客单价
-
-
-
-
-
- 用户活跃度
- 日活/周活/月活
-
-
-
-
-
- 用户画像
- 性别/年龄/地域
-
-
+
+ 暂无数据 / 待接入
-
+
- 用户分群 & 流量来源
- {{ selectedPeriodText }} · 分群占比 & 来源分布
+ 转化漏斗
+ 拉新 → 激活 → 转化(待接入埋点/事件)
+
+
+
+
+
+ {{ idx + 1 }}
+ {{ s.step }}
+
+
+ {{ formatInt(s.value) }}
+ 转化:{{ formatPct(calcFunnelRate(idx)) }}
+ —
+
+
+
+
+
+ 暂无漏斗数据 / 待接入:UV、PDP、加购、下单、支付
+
+
+
+
+
+
+
+ 留存与回访
+ {{ selectedPeriodText }} · 1/3/7/14/30日留存(Cohort 后续补)
+
+
+
+
+ 留存曲线
+ 留存率趋势(待接入)
+
+
+
+
+
+ 流失用户占比
+ 7/14天未活跃(待接入)
+
+
+ 暂无数据 / 待接入
+
+
+
+
+
+
+
+
+ 用户分群(运营可用)
+ RFM / LTV / 新客分层(后续补) · 当前为基础结构占比
-
+
+ 用户画像(基础)
+ 性别/年龄/地域(待接入)
+
+
+
+
+
+ 渠道来源
+ {{ selectedPeriodText }} · 渠道占比(后续可扩展渠道质量表)
+
+
+
+
@@ -138,271 +222,345 @@
-
diff --git a/pages/mall/consumer/Supabase Snippet SQL Query.csv b/pages/mall/consumer/Supabase Snippet SQL Query.csv
new file mode 100644
index 00000000..134f8361
--- /dev/null
+++ b/pages/mall/consumer/Supabase Snippet SQL Query.csv
@@ -0,0 +1,487 @@
+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-edit.uvue b/pages/mall/consumer/address-edit.uvue
index 18ee45d0..ce30fb61 100644
--- a/pages/mall/consumer/address-edit.uvue
+++ b/pages/mall/consumer/address-edit.uvue
@@ -53,6 +53,7 @@
+
+
diff --git a/pages/mall/consumer/address-list.uvue b/pages/mall/consumer/address-list.uvue
index 67c6133d..9938dd2a 100644
--- a/pages/mall/consumer/address-list.uvue
+++ b/pages/mall/consumer/address-list.uvue
@@ -36,6 +36,7 @@
diff --git a/pages/mall/consumer/cart copy.uvue b/pages/mall/consumer/cart copy.uvue
new file mode 100644
index 00000000..c8506011
--- /dev/null
+++ b/pages/mall/consumer/cart copy.uvue
@@ -0,0 +1,1435 @@
+
+
+
+
+
+
+ 购物车
+
+
+ {{ 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 69346032..f0a56a63 100644
--- a/pages/mall/consumer/cart.uvue
+++ b/pages/mall/consumer/cart.uvue
@@ -82,6 +82,32 @@
+
+
+
+
+
+ ✓
+
+ 全选
+
+
+
+
+
+ 合计:
+ ¥{{ totalPrice }}
+
+
+
+
+
+
+
-
-
-
+ -->
+
+
diff --git a/pages/mall/consumer/category - 副本.uvue b/pages/mall/consumer/category - 副本.uvue
index d217ab27..5c02cd56 100644
--- a/pages/mall/consumer/category - 副本.uvue
+++ b/pages/mall/consumer/category - 副本.uvue
@@ -1,131 +1,1419 @@
-
-
\ No newline at end of file
diff --git a/pages/mall/consumer/category.uvue b/pages/mall/consumer/category.uvue
index 5c02cd56..a26780fb 100644
--- a/pages/mall/consumer/category.uvue
+++ b/pages/mall/consumer/category.uvue
@@ -111,320 +111,94 @@
+
+
diff --git a/pages/mall/consumer/category药品.uvue b/pages/mall/consumer/category药品.uvue
new file mode 100644
index 00000000..ec734cdf
--- /dev/null
+++ b/pages/mall/consumer/category药品.uvue
@@ -0,0 +1,1131 @@
+
+
+
+
+
+
+
+ 请输入药品名称、症状或品牌
+
+
+
+ 🔳
+
+
+
+
+ 📷
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+ {{ item.icon }}
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ product.badge }}
+
+
+ {{ product.name }}
+ {{ product.specification }}
+
+
+
+ ¥
+ {{ product.price }}
+
+
+ ¥{{ product.originalPrice }}
+
+
+
+
+ {{ product.manufacturer }}
+
+ 已售{{ product.sales }}
+
+
+
+
+
+
+
+
+ 💊
+ 暂无相关药品
+ 该分类下暂无商品,敬请期待
+
+
+
+
+ 上拉加载更多
+
+
+
+
+
+
+
+
+
diff --git a/pages/mall/consumer/checkout copy 2.uvue b/pages/mall/consumer/checkout copy 2.uvue
new file mode 100644
index 00000000..3c744516
--- /dev/null
+++ b/pages/mall/consumer/checkout copy 2.uvue
@@ -0,0 +1,1733 @@
+
+
+
+
+
+
+
+
+ {{ 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/checkout copy.uvue b/pages/mall/consumer/checkout copy.uvue
new file mode 100644
index 00000000..7318fbf1
--- /dev/null
+++ b/pages/mall/consumer/checkout copy.uvue
@@ -0,0 +1,1730 @@
+
+
+
+
+
+
+
+
+ {{ 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/checkout.uvue b/pages/mall/consumer/checkout.uvue
index 57f3d413..f68dfd6f 100644
--- a/pages/mall/consumer/checkout.uvue
+++ b/pages/mall/consumer/checkout.uvue
@@ -120,8 +120,42 @@
+
+
+ 🔒
+ 您尚未登录,点击登录以同步服务器地址
+ ›
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+ 本地地址(未同步)
-
-
+
+
+
+
+
+
+
+ 规格
+ {{ product.specification }}
+
+
+ 功能主治
+ {{ product.usage }}
+
+
+ 副作用
+ {{ product.side_effects }}
+
+
+ 注意事项
+ {{ product.precautions }}
+
+
+ 有效期
+ {{ product.expiry_date }}
+
+
+ 储存条件
+ {{ product.storage_conditions }}
+
+
+ 批准文号
+ {{ product.approval_number }}
+
+
+ 标签
+ {{ product.tags.join(', ') }}
+
+
+
+
\ No newline at end of file
+
diff --git a/pages/mall/consumer/shop-detail.uvue b/pages/mall/consumer/shop-detail.uvue
index c2bf505e..cb4d5aa2 100644
--- a/pages/mall/consumer/shop-detail.uvue
+++ b/pages/mall/consumer/shop-detail.uvue
@@ -44,6 +44,7 @@
\ No newline at end of file
diff --git a/pages/mall/delivery/about.uvue b/pages/mall/delivery/about.uvue
new file mode 100644
index 00000000..8cf90f4c
--- /dev/null
+++ b/pages/mall/delivery/about.uvue
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 版本: v2.1.5
+
+
+
+
+ 快递配送助手
+ 专为配送员打造的一站式智能配送平台,提升效率,优化服务体验
+
+
+
+
+
+
+
+ 📍
+ 智能路线规划
+
+
+ 📱
+ 实时订单管理
+
+
+ 💰
+ 在线结算系统
+
+
+ ⭐
+ 客户评价反馈
+
+
+
+
+
+
+
+ 公司名称: 快递科技有限公司
+ 成立时间: 2020年
+ 总部地点: 深圳市南山区科技园
+ 联系电话: 400-123-4567
+ 邮箱: support@delivery.com
+
+
+
+
+
+
+ v2.1.5 (2026-01-27)
+ • 修复了地图定位精度问题\n• 优化了任务分配算法\n• 提升了语音播报稳定性
+
+
+ v2.1.4 (2026-01-15)
+ • 新增智能语音助手功能\n• 改进了路线导航算法\n• 修复了部分UI显示异常
+
+
+ v2.1.3 (2025-12-28)
+ • 新增客户满意度评价\n• 优化了离线地图功能\n• 增强了数据同步机制
+
+
+
+
+
+ © 2020-2026 快递科技有限公司 版权所有
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/delivery/db/create_pending_orders.sql b/pages/mall/delivery/db/create_pending_orders.sql
new file mode 100644
index 00000000..ff454deb
--- /dev/null
+++ b/pages/mall/delivery/db/create_pending_orders.sql
@@ -0,0 +1,104 @@
+-- create_pending_orders.sql
+-- 在 dev 环境幂等创建若干 "待接取" 订单及对应配送任务
+-- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。
+
+-- 订单 PENDING-20260202-001
+WITH o AS (
+ INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
+ SELECT 'PENDING-20260202-001',
+ COALESCE((SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM public.ak_users LIMIT 1)),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 12.50, 3.00, 15.50,
+ ('{"contact":"张三","phone":"13811112222","detail":"测试地址 A"}')::jsonb,
+ 1, NOW(), NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-001')
+ RETURNING id
+), it AS (
+ INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+ SELECT uuid_generate_v4(), (SELECT id FROM o),
+ COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
+ COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),'商品A'),
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),12.50),1,
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),12.50), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+), t AS (
+ INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+ SELECT (SELECT id FROM o),
+ ('{"contact":"门店A","phone":"13900000001","detail":"门店A"}')::jsonb,
+ ('{"contact":"张三","phone":"13811112222","detail":"测试地址 A"}')::jsonb,
+ 3.00, 1, NOW(), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+)
+SELECT 'PENDING-20260202-001' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
+
+-- 订单 PENDING-20260202-002
+WITH o AS (
+ INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
+ SELECT 'PENDING-20260202-002',
+ COALESCE((SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM public.ak_users LIMIT 1)),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 35.00, 4.00, 39.00,
+ ('{"contact":"李四","phone":"13822223333","detail":"测试地址 B"}')::jsonb,
+ 1, NOW(), NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-002')
+ RETURNING id
+), it AS (
+ INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+ SELECT uuid_generate_v4(), (SELECT id FROM o),
+ COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
+ COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),'商品B'),
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),35.00),1,
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),35.00), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+), t AS (
+ INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+ SELECT (SELECT id FROM o),
+ ('{"contact":"门店B","phone":"13900000002","detail":"门店B"}')::jsonb,
+ ('{"contact":"李四","phone":"13822223333","detail":"测试地址 B"}')::jsonb,
+ 4.00, 1, NOW(), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+)
+SELECT 'PENDING-20260202-002' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
+
+-- 订单 PENDING-20260202-003
+WITH o AS (
+ INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
+ SELECT 'PENDING-20260202-003',
+ COALESCE((SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM public.ak_users LIMIT 1)),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 22.00, 3.50, 25.50,
+ ('{"contact":"王五","phone":"13833334444","detail":"测试地址 C"}')::jsonb,
+ 1, NOW(), NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-003')
+ RETURNING id
+), it AS (
+ INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+ SELECT uuid_generate_v4(), (SELECT id FROM o),
+ COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
+ COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),'商品C'),
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),22.00),1,
+ COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),22.00), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+), t AS (
+ INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+ SELECT (SELECT id FROM o),
+ ('{"contact":"门店C","phone":"13900000003","detail":"门店C"}')::jsonb,
+ ('{"contact":"王五","phone":"13833334444","detail":"测试地址 C"}')::jsonb,
+ 3.50, 1, NOW(), NOW()
+ WHERE EXISTS (SELECT 1 FROM o)
+ RETURNING id
+)
+SELECT 'PENDING-20260202-003' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
+
+-- 最终:列出新建或已存在的 pending 订单
+SELECT order_no, order_id, task_id FROM (
+ VALUES
+ ('PENDING-20260202-001',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-001' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-001' LIMIT 1)),
+ ('PENDING-20260202-002',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-002' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-002' LIMIT 1)),
+ ('PENDING-20260202-003',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-003' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-003' LIMIT 1))
+) AS t(order_no, order_id, task_id);
diff --git a/pages/mall/delivery/db/create_test_orders.sql b/pages/mall/delivery/db/create_test_orders.sql
new file mode 100644
index 00000000..700e9250
--- /dev/null
+++ b/pages/mall/delivery/db/create_test_orders.sql
@@ -0,0 +1,213 @@
+-- create_test_orders.sql
+-- 幂等的测试订单生成脚本:
+-- 1) 确保必需的 ak_users, ml_categories, ml_products, ml_product_skus 存在
+-- 2) 插入 3 个订单(含 order_items)并为每个订单创建 ml_delivery_tasks
+-- 3) 适用于 complete_mall_database.sql 所建表(在 Supabase SQL Editor 中以 postgres 角色运行)
+
+BEGIN;
+
+-- 1. 确保测试用户存在(若不存在则插入简化记录)
+-- 使用 WHERE NOT EXISTS 保证幂等
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '系统管理员', 'admin', 'admin@mall.com', '13800138000', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'admin@mall.com');
+
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '数码专营店', 'merchant', 'merchant1@mall.com', '13800138001', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'merchant1@mall.com');
+
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '时尚小铺', 'merchant', 'merchant2@mall.com', '13800138002', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'merchant2@mall.com');
+
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '张小明', 'customer', 'customer1@mall.com', '13800138101', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'customer1@mall.com');
+
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '李小红', 'customer', 'customer2@mall.com', '13800138102', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'customer2@mall.com');
+
+INSERT INTO public.ak_users(id, auth_id, username, role, email, phone, avatar_url, status, registration_source, created_at, updated_at)
+SELECT uuid_generate_v4(), uuid_generate_v4(), '快递小哥1', 'delivery', 'driver1@mall.com', '13800138201', NULL, 'active', 'script', NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email = 'driver1@mall.com');
+
+-- 2. 确保至少有一个分类存在
+INSERT INTO public.ml_categories (id, name, slug, level, path, created_at, updated_at)
+SELECT uuid_generate_v4(), '默认分类', 'default', 1, ARRAY['默认分类'], NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories);
+
+-- 3. 为每个商家确保至少有一个商品和 SKU
+-- 3.1 Helper: 若商家没有商品则插入一个最小商品
+WITH merchant1 AS (
+ SELECT id AS merchant_id FROM public.ak_users WHERE email = 'merchant1@mall.com' LIMIT 1
+), merchant2 AS (
+ SELECT id AS merchant_id FROM public.ak_users WHERE email = 'merchant2@mall.com' LIMIT 1
+), default_cat AS (
+ SELECT id AS category_id FROM public.ml_categories LIMIT 1
+)
+-- 插入商品(商家1)
+INSERT INTO public.ml_products (id, merchant_id, category_id, product_code, name, base_price, total_stock, available_stock, created_at, updated_at)
+SELECT uuid_generate_v4(), m.merchant_id, d.category_id, 'P-M1-001', '示例商品 - 商家1', 199.00, 50, 50, NOW(), NOW()
+FROM merchant1 m, default_cat d
+WHERE NOT EXISTS (
+ SELECT 1 FROM public.ml_products p WHERE p.merchant_id = m.merchant_id LIMIT 1
+);
+
+-- 插入商品(商家2)
+INSERT INTO public.ml_products (id, merchant_id, category_id, product_code, name, base_price, total_stock, available_stock, created_at, updated_at)
+SELECT uuid_generate_v4(),
+ (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories LIMIT 1),
+ 'P-M2-001', '示例商品 - 商家2', 89.00, 80, 80, NOW(), NOW()
+WHERE NOT EXISTS (
+ SELECT 1 FROM public.ml_products p WHERE p.merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1
+);
+
+-- 3.2 插入 SKU(如果没有)
+WITH p1 AS (
+ SELECT id AS product_id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1
+), p2 AS (
+ SELECT id AS product_id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1
+)
+INSERT INTO public.ml_product_skus (id, product_id, sku_code, price, stock, created_at, updated_at)
+SELECT uuid_generate_v4(), p.product_id, 'SKU-M1-001', 199.00, 50, NOW(), NOW() FROM p1 p
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_product_skus s WHERE s.product_id = p.product_id LIMIT 1);
+
+-- 插入商家2 的 SKU(使用内联子查询,确保幂等且避免 CTE 范围问题)
+INSERT INTO public.ml_product_skus (id, product_id, sku_code, price, stock, created_at, updated_at)
+SELECT uuid_generate_v4(), p.product_id, 'SKU-M2-001', 89.00, 80, NOW(), NOW()
+FROM (
+ SELECT id AS product_id
+ FROM public.ml_products
+ WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com' LIMIT 1)
+ LIMIT 1
+) p
+WHERE p.product_id IS NOT NULL
+ AND NOT EXISTS (SELECT 1 FROM public.ml_product_skus s WHERE s.product_id = p.product_id LIMIT 1);
+
+-- 4. 插入 3 个订单:两个不同商家各一单 + 一个多商品订单
+-- 订单 1: customer1 从 merchant1 购买 1 件
+WITH
+buyer AS (SELECT id AS user_id FROM public.ak_users WHERE email = 'customer1@mall.com' LIMIT 1),
+merchant AS (SELECT id AS merchant_id FROM public.ak_users WHERE email = 'merchant1@mall.com' LIMIT 1),
+prod AS (SELECT id AS product_id FROM public.ml_products WHERE merchant_id = (SELECT merchant_id FROM merchant) LIMIT 1),
+sku AS (SELECT id AS sku_id, price FROM public.ml_product_skus WHERE product_id = (SELECT product_id FROM prod) LIMIT 1),
+ins_order AS (
+ INSERT INTO public.ml_orders (id, order_no, user_id, merchant_id, product_amount, discount_amount, shipping_fee, total_amount, paid_amount, shipping_address, order_status, payment_status, shipping_status, created_at, updated_at)
+ SELECT uuid_generate_v4(), public.generate_order_no(), b.user_id, m.merchant_id, s.price, 0, 10.00, s.price + 10.00, 0,
+ jsonb_build_object('receiver_name','王小明','receiver_phone','13800138003','province','北京市','city','朝阳区','district','望京街道','address_detail','望京SOHO T1座 1201室'),
+ 1, 1, 1, NOW(), NOW()
+ FROM buyer b, merchant m, sku s
+ RETURNING id
+)
+INSERT INTO public.ml_order_items (id, order_id, product_id, sku_id, product_name, sku_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), o.id, p.product_id, s.sku_id, '示例商品 - 商家1', '默认SKU', s.price, 1, s.price * 1, NOW()
+FROM ins_order o, prod p, sku s;
+
+-- 创建配送任务 for 订单1
+INSERT INTO public.ml_delivery_tasks (id, order_id, driver_id, pickup_address, delivery_address, distance, estimated_time, delivery_fee, status, assigned_at, created_at, updated_at)
+SELECT uuid_generate_v4(), o.id, (SELECT id FROM public.ml_delivery_drivers WHERE user_id = (SELECT id FROM public.ak_users WHERE email = 'driver1@mall.com') LIMIT 1),
+ jsonb_build_object('address','商家取货点','phone','010-00000001'),
+ jsonb_build_object('receiver_name','王小明','receiver_phone','13800138003','address_detail','望京SOHO T1座 1201室'),
+ 3.5, 20, 5.00, 1, NOW(), NOW(), NOW()
+FROM (SELECT id FROM public.ml_orders WHERE id = (SELECT id FROM public.ml_orders ORDER BY created_at DESC LIMIT 1) LIMIT 1) o
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks t WHERE t.order_id = o.id);
+
+-- 订单 2: customer2 从 merchant2 购买 2 件
+WITH
+buyer2 AS (SELECT id AS user_id FROM public.ak_users WHERE email = 'customer2@mall.com' LIMIT 1),
+merchantB AS (SELECT id AS merchant_id FROM public.ak_users WHERE email = 'merchant2@mall.com' LIMIT 1),
+prodB AS (SELECT id AS product_id FROM public.ml_products WHERE merchant_id = (SELECT merchant_id FROM merchantB) LIMIT 1),
+skuB AS (SELECT id AS sku_id, price FROM public.ml_product_skus WHERE product_id = (SELECT product_id FROM prodB) LIMIT 1),
+ins_order2 AS (
+ INSERT INTO public.ml_orders (id, order_no, user_id, merchant_id, product_amount, discount_amount, shipping_fee, total_amount, paid_amount, shipping_address, order_status, payment_status, shipping_status, created_at, updated_at)
+ SELECT uuid_generate_v4(), public.generate_order_no(), b.user_id, m.merchant_id, s.price * 2, 0, 8.00, s.price * 2 + 8.00, 0,
+ jsonb_build_object('receiver_name','李小红','receiver_phone','13800138004','province','北京市','city','海淀区','district','中关村街道','address_detail','中关村大街1号 科技大厦'),
+ 1, 1, 1, NOW(), NOW()
+ FROM buyer2 b, merchantB m, skuB s
+ RETURNING id
+)
+INSERT INTO public.ml_order_items (id, order_id, product_id, sku_id, product_name, sku_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), o.id, p.product_id, s.sku_id, '示例商品 - 商家2', '默认SKU', s.price, 2, s.price * 2, NOW()
+FROM ins_order2 o, prodB p, skuB s;
+
+-- 创建配送任务 for 订单2
+INSERT INTO public.ml_delivery_tasks (id, order_id, driver_id, pickup_address, delivery_address, distance, estimated_time, delivery_fee, status, assigned_at, created_at, updated_at)
+SELECT uuid_generate_v4(), o.id, (SELECT id FROM public.ml_delivery_drivers WHERE user_id = (SELECT id FROM public.ak_users WHERE email = 'driver1@mall.com') LIMIT 1),
+ jsonb_build_object('address','商家取货点','phone','010-00000002'),
+ jsonb_build_object('receiver_name','李小红','receiver_phone','13800138004','address_detail','中关村大街1号 科技大厦'),
+ 6.0, 35, 6.50, 1, NOW(), NOW(), NOW()
+FROM (SELECT id FROM public.ml_orders WHERE created_at = (SELECT MAX(created_at) FROM public.ml_orders) LIMIT 1) o
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks t WHERE t.order_id = o.id);
+
+-- 订单 3: customer1 购买商家1 的商品 + 商家2 的商品(跨店多商品示例,示意用)
+-- 备注:实际业务可能不允许跨商家单一订单,这里仅作为测试多商品记录演示(如果系统不允许,请忽略)
+WITH
+buyer3 AS (SELECT id AS user_id FROM public.ak_users WHERE email = 'customer1@mall.com' LIMIT 1),
+m1 AS (SELECT id AS merchant1_id FROM public.ak_users WHERE email = 'merchant1@mall.com' LIMIT 1),
+m2 AS (SELECT id AS merchant2_id FROM public.ak_users WHERE email = 'merchant2@mall.com' LIMIT 1),
+prod1 AS (SELECT id AS product1_id FROM public.ml_products WHERE merchant_id = (SELECT merchant1_id FROM m1) LIMIT 1),
+sku1 AS (SELECT id AS sku1_id, price FROM public.ml_product_skus WHERE product_id = (SELECT product1_id FROM prod1) LIMIT 1),
+prod2 AS (SELECT id AS product2_id FROM public.ml_products WHERE merchant_id = (SELECT merchant2_id FROM m2) LIMIT 1),
+sku2 AS (SELECT id AS sku2_id, price FROM public.ml_product_skus WHERE product_id = (SELECT product2_id FROM prod2) LIMIT 1),
+ins_order3 AS (
+ INSERT INTO public.ml_orders (id, order_no, user_id, merchant_id, product_amount, discount_amount, shipping_fee, total_amount, paid_amount, shipping_address, order_status, payment_status, shipping_status, created_at, updated_at)
+ SELECT uuid_generate_v4(), public.generate_order_no(), b.user_id, (SELECT merchant1_id FROM m1),
+ COALESCE(s1.price,0) + COALESCE(s2.price,0), 0, 12.00, COALESCE(s1.price,0)+COALESCE(s2.price,0)+12.00, 0,
+ jsonb_build_object('receiver_name','王小明','receiver_phone','13800138003','province','北京市','city','朝阳区','district','望京街道','address_detail','望京SOHO T1座 1201室'),
+ 1,1,1, NOW(), NOW()
+ FROM buyer3 b LEFT JOIN sku1 s1 ON TRUE LEFT JOIN sku2 s2 ON TRUE
+ RETURNING id
+)
+INSERT INTO public.ml_order_items (id, order_id, product_id, sku_id, product_name, sku_name, price, quantity, total_amount, created_at)
+SELECT
+ uuid_generate_v4(),
+ o.id,
+ (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1) AS product_id,
+ (SELECT id FROM public.ml_product_skus WHERE product_id = (SELECT id FROM pu SELECT id, email, username, role, auth_id FROM public.ak_users WHERE email = '123@123.com';blic.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1) LIMIT 1) AS sku_id,
+ '示例商品 - 商家1',
+ '默认SKU',
+ COALESCE((SELECT price FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1) LIMIT 1),0) AS price,
+ 1,
+ COALESCE((SELECT price FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1) LIMIT 1),0) AS total_amount,
+ NOW()
+FROM (
+ SELECT id FROM public.ml_orders WHERE created_at = (SELECT MAX(created_at) FROM public.ml_orders) LIMIT 1
+) o
+WHERE (SELECT id FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant1@mall.com') LIMIT 1) LIMIT 1) IS NOT NULL
+ON CONFLICT DO NOTHING;
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, sku_id, product_name, sku_name, price, quantity, total_amount, created_at)
+SELECT
+ uuid_generate_v4(),
+ o.id,
+ (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1) AS product_id,
+ (SELECT id FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1) LIMIT 1) AS sku_id,
+ '示例商品 - 商家2',
+ '默认SKU',
+ COALESCE((SELECT price FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1) LIMIT 1),0) AS price,
+ 1,
+ COALESCE((SELECT price FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1) LIMIT 1),0) AS total_amount,
+ NOW()
+FROM (
+ SELECT id FROM public.ml_orders WHERE created_at = (SELECT MAX(created_at) FROM public.ml_orders) LIMIT 1
+) o
+WHERE (SELECT id FROM public.ml_product_skus WHERE product_id = (SELECT id FROM public.ml_products WHERE merchant_id = (SELECT id FROM public.ak_users WHERE email = 'merchant2@mall.com') LIMIT 1) LIMIT 1) IS NOT NULL
+ON CONFLICT DO NOTHING;
+
+-- 为订单3 创建配送任务(若存在)
+INSERT INTO public.ml_delivery_tasks (id, order_id, driver_id, pickup_address, delivery_address, distance, estimated_time, delivery_fee, status, assigned_at, created_at, updated_at)
+SELECT uuid_generate_v4(), o.id, (SELECT id FROM public.ml_delivery_drivers WHERE user_id = (SELECT id FROM public.ak_users WHERE email = 'driver1@mall.com') LIMIT 1),
+ jsonb_build_object('address','商家取货点','phone','010-00000003'),
+ jsonb_build_object('receiver_name','王小明','receiver_phone','13800138003','address_detail','望京SOHO T1座 1201室'),
+ 5.0, 30, 7.00, 1, NOW(), NOW(), NOW()
+FROM (SELECT id FROM public.ml_orders WHERE created_at = (SELECT MAX(created_at) FROM public.ml_orders) LIMIT 1) o
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks t WHERE t.order_id = o.id);
+
+COMMIT;
+
+-- 执行完成后请在 Supabase SQL Editor 中确认插入结果:
+-- SELECT * FROM public.ml_orders ORDER BY created_at DESC LIMIT 10;
+-- SELECT * FROM public.ml_order_items ORDER BY created_at DESC LIMIT 20;
+-- SELECT * FROM public.ml_delivery_tasks ORDER BY created_at DESC LIMIT 10;
diff --git a/pages/mall/delivery/db/realistic_mock_data.sql b/pages/mall/delivery/db/realistic_mock_data.sql
new file mode 100644
index 00000000..f4ccae12
--- /dev/null
+++ b/pages/mall/delivery/db/realistic_mock_data.sql
@@ -0,0 +1,408 @@
+-- realistic_mock_data.sql
+-- 幂等脚本:在 dev 环境创建更真实的测试数据
+-- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。
+
+-- 运行前确保至少存在一个 auth 用户,否则后续插入会违背 FK
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM auth.users) THEN
+ RAISE EXCEPTION 'No auth.users found. Create at least one auth user in Supabase auth or sign up once, then re-run this script.';
+ END IF;
+END$$;
+-- 1) 确保存在一个测试分类
+INSERT INTO public.ml_categories (id, cid, name, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_categories_cid_seq'::regclass), '测试分类-配送端', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories WHERE name = '测试分类-配送端');
+
+-- 2) 创建或复用商家(优先按 email 匹配,否则按任意 auth.user)
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(),
+ COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)),
+ 'merchant.real@example.com','real_merchant', NOW()
+WHERE NOT EXISTS (
+ SELECT 1 FROM public.ak_users WHERE email='merchant.real@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))
+);
+
+-- 3) 三个真实感顾客(按 email 或存在的 auth.users id 复用)
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'zhang.san@example.com','张三', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='zhang.san@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'li.si@example.com','李四', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='li.si@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'wang.wu@example.com','王五', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='wang.wu@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+-- 4) 五个商品(使用上面分类与商家)
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-A-20260202','鲜榨橙汁 500ml',12.50,200,'https://cdn.example.com/orange.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-A-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-B-20260202','经典牛肉饼 200g',35.00,120,'https://cdn.example.com/beef.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-B-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-C-20260202','手工三明治',22.00,80,'https://cdn.example.com/sandwich.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-C-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-D-20260202','每日现磨咖啡',18.00,150,'https://cdn.example.com/coffee.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-D-20260202');
+
+-- 5) 创建若干订单与配送任务(status = 1, driver_id = NULL)
+-- 订单 1(示例已更新:order_no / phone / address)
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'TEST-DELIV-20260202-001',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 12.50,3.00,15.50,
+ ('{"contact":"张三","phone":"13890001111","province":"北京市","city":"北京市","district":"朝阳区","street":"望京街道","detail":"望京SOHO 1号楼"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1), '鲜榨橙汁 500ml',12.50,1,12.50,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-001');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1),
+ ('{"contact":"门店A","phone":"13990001111","detail":"门店A 地址"}')::jsonb,
+ ('{"contact":"张三","phone":"13890001111","detail":"望京SOHO 1号楼"}')::jsonb,
+ 3.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-001');
+
+-- 订单 2(示例已更新)
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'TEST-DELIV-20260202-002',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 35.00,4.00,39.00,
+ ('{"contact":"李四","phone":"13890002222","province":"上海市","city":"上海市","district":"静安区","street":"南京西路","detail":"静安寺附近"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1), '经典牛肉饼 200g',35.00,1,35.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-002');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1),
+ ('{"contact":"门店B","phone":"13990002222","detail":"门店B 地址"}')::jsonb,
+ ('{"contact":"李四","phone":"13890002222","detail":"静安寺附近"}')::jsonb,
+ 4.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-002');
+
+-- 订单 3(示例已更新)
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'TEST-DELIV-20260202-003',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 22.00,3.50,25.50,
+ ('{"contact":"王五","phone":"13890003333","province":"广东省","city":"广州市","district":"天河区","street":"体育西路","detail":"天河城附近"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1), '手工三明治',22.00,1,22.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-003');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1),
+ ('{"contact":"门店C","phone":"13990003333","detail":"门店C 地址"}')::jsonb,
+ ('{"contact":"王五","phone":"13890003333","detail":"天河城附近"}')::jsonb,
+ 3.50,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-003');
+
+-- 订单 4(示例已更新)
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'TEST-DELIV-20260202-004',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 18.00,3.00,21.00,
+ ('{"contact":"张三","phone":"13890001111","province":"上海市","city":"上海市","district":"浦东新区","street":"世纪大道","detail":"世纪汇 10 号"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1), '每日现磨咖啡',18.00,1,18.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-004');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1),
+ ('{"contact":"门店D","phone":"13990004444","detail":"门店D 地址"}')::jsonb,
+ ('{"contact":"张三","phone":"13890001111","detail":"世纪汇 10 号"}')::jsonb,
+ 3.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-004');
+
+-- 最终返回已创建或已存在的关键 id,便于验证
+SELECT
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id,
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1) AS custA_id,
+ (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1) AS custB_id,
+ (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1) AS custC_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS productA_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1) AS productB_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1) AS productC_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1) AS productD_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1) AS order1_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1) AS order2_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1) AS order3_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1) AS order4_id;
+
+-- 6) 批量生成 20 个“待接取”订单(幂等)
+-- 订单号格式:PENDING-20260202-001 .. PENDING-20260202-020
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT t.order_no, t.user_id, t.merchant_id, t.product_amount, t.shipping_fee, t.total_amount, t.shipping_address, NOW(), NOW()
+FROM (
+ SELECT format('PENDING-20260202-%s', lpad(i::text,3,'0')) AS order_no,
+ COALESCE(
+ CASE (i % 3)
+ WHEN 1 THEN (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1)
+ WHEN 2 THEN (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1)
+ ELSE (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1)
+ END,
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ) AS user_id,
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id,
+ (SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS product_amount,
+ 3.00 AS shipping_fee,
+ (SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) + 3.00 AS total_amount,
+ jsonb_build_object('contact', CASE WHEN (i % 3)=1 THEN '张三' WHEN (i % 3)=2 THEN '李四' ELSE '王五' END, 'phone', '138900' || lpad(i::text,5,'0'), 'detail', '自动生成地址 ' || i) AS shipping_address
+ FROM generate_series(1,20) AS s(i)
+) AS t
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders o WHERE o.order_no = t.order_no);
+
+-- 生成对应的 order_items(若不存在)
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), o.id, p.id, p.name, p.base_price, 1, p.base_price, NOW()
+FROM public.ml_orders o
+JOIN public.ml_products p ON p.product_code = 'REAL-P-A-20260202'
+WHERE o.order_no LIKE 'PENDING-20260202-%'
+ AND NOT EXISTS (SELECT 1 FROM public.ml_order_items oi WHERE oi.order_id = o.id);
+
+-- 生成对应的 delivery_tasks(status = 1)
+WITH no AS (
+ SELECT id, order_no, shipping_address, ROW_NUMBER() OVER (ORDER BY id) AS rn
+ FROM public.ml_orders WHERE order_no LIKE 'PENDING-20260202-%'
+)
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT no.id,
+ jsonb_build_object('contact','自动门店','phone', '13900' || lpad(no.rn::text,4,'0'),'detail','自动门店地址')::jsonb,
+ no.shipping_address,
+ 3.00,1,NOW(),NOW()
+FROM no
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt WHERE dt.order_id = no.id);
+-- realistic_mock_data.sql
+-- 幂等脚本:在 dev 环境创建更真实的测试数据
+-- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。
+
+-- 运行前确保至少存在一个 auth 用户,否则后续插入会违背 FK
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM auth.users) THEN
+ RAISE EXCEPTION 'No auth.users found. Create at least one auth user in Supabase auth or sign up once, then re-run this script.';
+ END IF;
+END$$;
+-- 1) 确保存在一个测试分类
+INSERT INTO public.ml_categories (id, cid, name, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_categories_cid_seq'::regclass), '测试分类-配送端', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories WHERE name = '测试分类-配送端');
+
+-- 2) 创建或复用商家(优先按 email 匹配,否则按任意 auth.user)
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(),
+ COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)),
+ 'merchant.real@example.com','real_merchant', NOW()
+WHERE NOT EXISTS (
+ SELECT 1 FROM public.ak_users WHERE email='merchant.real@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))
+);
+
+-- 3) 三个真实感顾客(按 email 或存在的 auth.users id 复用)
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'zhang.san@example.com','张三', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='zhang.san@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'li.si@example.com','李四', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='li.si@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'wang.wu@example.com','王五', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='wang.wu@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)));
+
+-- 4) 五个商品(使用上面分类与商家)
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-A-20260202','鲜榨橙汁 500ml',12.50,200,'https://cdn.example.com/orange.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-A-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-B-20260202','经典牛肉饼 200g',35.00,120,'https://cdn.example.com/beef.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-B-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-C-20260202','手工三明治',22.00,80,'https://cdn.example.com/sandwich.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-C-20260202');
+
+INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at)
+SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1),
+ 'REAL-P-D-20260202','每日现磨咖啡',18.00,150,'https://cdn.example.com/coffee.jpg', NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-D-20260202');
+
+-- 5) 创建若干订单与配送任务(status = 1, driver_id = NULL)
+-- 订单 1
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'REAL-ORD-20260202-001',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 12.50,3.00,15.50,
+ ('{"contact":"张三","phone":"13811112222","province":"北京市","city":"北京市","district":"朝阳区","street":"望京街道","detail":"望京SOHO 1号楼"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1), '鲜榨橙汁 500ml',12.50,1,12.50,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-001');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1),
+ ('{"contact":"门店A","phone":"13920001111","detail":"门店A 地址"}')::jsonb,
+ ('{"contact":"张三","phone":"13811112222","detail":"望京SOHO 1号楼"}')::jsonb,
+ 3.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-001');
+
+-- 订单 2
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'REAL-ORD-20260202-002',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 35.00,4.00,39.00,
+ ('{"contact":"李四","phone":"13822223333","province":"上海市","city":"上海市","district":"静安区","street":"南京西路","detail":"静安寺附近"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1), '经典牛肉饼 200g',35.00,1,35.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-002');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1),
+ ('{"contact":"门店B","phone":"13920002222","detail":"门店B 地址"}')::jsonb,
+ ('{"contact":"李四","phone":"13822223333","detail":"静安寺附近"}')::jsonb,
+ 4.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-002');
+
+-- 订单 3
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'REAL-ORD-20260202-003',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 22.00,3.50,25.50,
+ ('{"contact":"王五","phone":"13833334444","province":"广东省","city":"广州市","district":"天河区","street":"体育西路","detail":"天河城附近"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1), '手工三明治',22.00,1,22.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-003');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1),
+ ('{"contact":"门店C","phone":"13920003333","detail":"门店C 地址"}')::jsonb,
+ ('{"contact":"王五","phone":"13833334444","detail":"天河城附近"}')::jsonb,
+ 3.50,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-003');
+
+-- 订单 4
+INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at)
+SELECT 'REAL-ORD-20260202-004',
+ COALESCE(
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1),
+ (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1),
+ (SELECT id FROM public.ak_users LIMIT 1)
+ ),
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1),
+ 18.00,3.00,21.00,
+ ('{"contact":"张三","phone":"13811112222","province":"上海市","city":"上海市","district":"浦东新区","street":"世纪大道","detail":"世纪汇 10 号"}')::jsonb,
+ NOW(), NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004');
+
+INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at)
+SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1), '每日现磨咖啡',18.00,1,18.00,NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-004');
+
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1),
+ ('{"contact":"门店D","phone":"13920004444","detail":"门店D 地址"}')::jsonb,
+ ('{"contact":"张三","phone":"13811112222","detail":"世纪汇 10 号"}')::jsonb,
+ 3.00,1,NOW(),NOW()
+WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-004');
+
+-- 最终返回已创建或已存在的关键 id,便于验证
+SELECT
+ (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id,
+ (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1) AS custA_id,
+ (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1) AS custB_id,
+ (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1) AS custC_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS productA_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1) AS productB_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1) AS productC_id,
+ (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1) AS productD_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1) AS order1_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1) AS order2_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1) AS order3_id,
+ (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1) AS order4_id;
diff --git a/pages/mall/delivery/delivery.md b/pages/mall/delivery/delivery.md
index 3166bf09..0f8863a2 100644
--- a/pages/mall/delivery/delivery.md
+++ b/pages/mall/delivery/delivery.md
@@ -1,4 +1,3 @@
-✅ 明白了!你不需要完整代码,而是希望我**用简洁的 Markdown 文档形式,解释这个 `delivery` 文件夹下的项目结构和每个页面的功能定位**。
---
diff --git a/pages/mall/delivery/doc/db-data-generation.md b/pages/mall/delivery/doc/db-data-generation.md
new file mode 100644
index 00000000..abbfabf2
--- /dev/null
+++ b/pages/mall/delivery/doc/db-data-generation.md
@@ -0,0 +1,205 @@
+## 测试数据生成与验证记录
+
+本文档记录了在本项目中为配送端页面生成并验证测试数据库数据的全过程,包含关键表结构要点、执行的幂等 SQL、遇到的问题及解决办法,以及前端验证步骤,便于回溯和复现。
+
+---
+
+**概述**
+
+- 目标:让配送端页面 `pages/mall/delivery/index.uvue` 能读取真实 DB 中的配送任务(`ml_delivery_tasks`)并在附近订单 / 当前任务中展示;为此需要在 DB 中创建或复用 `ak_users`、`ml_delivery_drivers`、`ml_orders`、`ml_delivery_tasks` 的测试数据。
+- 环境:Supabase(Postgres)。建议在 Supabase SQL Editor 中以 `Role = postgres` 执行 SQL 以避免 RLS/触发器引起的权限问题。
+
+**关键表与约束摘要**
+
+- `public.ak_users`:项目用户表,`id` 为主键,`auth_id` 对应 `auth.users.id`。
+- `public.ml_delivery_drivers`:配送员表,重要列:`id`、`user_id` (引用 `ak_users.id`,UNIQUE NOT NULL)、`real_name`、`id_card`。注意:此表没有 `phone` 列(以前曾误以为存在)。
+- `public.ml_orders`:订单表,重要列:`id`、`order_no`(UNIQUE NOT NULL)、`user_id`、`merchant_id`、`shipping_address` (JSONB NOT NULL)、`order_status`。
+- `public.ml_delivery_tasks`:配送任务表,重要列:`id`、`order_id` (UNIQUE NOT NULL,引用 `ml_orders.id`)、`driver_id` (引用 `ml_delivery_drivers.id`)、`pickup_address`/`delivery_address` (JSONB)、`status` (CHECK in (1..6))。注意:联系人信息应内嵌到地址 JSON 中(没有单独 `pickup_contact` 字段)。
+
+---
+
+**我执行的主要步骤(已实现的幂等脚本)**
+
+1. 查找或创建 `ak_users`(按 `auth_id` 唯一):避免重复插入,若已存在则复用其 `id`。
+2. 查找或创建 `ml_delivery_drivers`(以 `ak_users.id` 为 `user_id`):注意去掉对不存在列的引用(例如 `phone`)。
+3. 插入两个测试订单(使用唯一 `order_no` 标识,若已存在则跳过),`shipping_address` 使用 JSONB 格式且包含 `contact`/`phone`/`province`/`city`/`detail` 等字段。
+4. 为每个订单创建对应的 `ml_delivery_tasks`:一个保持 `status = 1`(可接单,`driver_id = NULL`),另一个设置 `status = 4` 并分配上步骤创建或找到的 `driver_id`。
+
+下面是我实际使用的幂等 SQL(已去除不存在列并兼容 schema)。在 Supabase SQL Editor 中以 `Role = postgres` 运行整段脚本即可。
+
+```sql
+-- 替换 auth_id 为你的 auth.users.id(示例值可替换)
+WITH
+found_user AS (
+ SELECT id FROM public.ak_users WHERE auth_id = 'dae9f45b-3955-43ae-992f-a3e24beaa520'
+),
+ins_user AS (
+ INSERT INTO public.ak_users (id, auth_id, email, username, created_at)
+ SELECT uuid_generate_v4(), 'dae9f45b-3955-43ae-992f-a3e24beaa520', 'test+delivery@example.com', 'test_delivery_user', NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM found_user)
+ RETURNING id
+),
+user_id AS (
+ SELECT id FROM ins_user
+ UNION ALL
+ SELECT id FROM found_user
+ LIMIT 1
+),
+
+found_driver AS (
+ SELECT id, user_id FROM public.ml_delivery_drivers WHERE user_id = (SELECT id FROM user_id) LIMIT 1
+),
+ins_driver AS (
+ INSERT INTO public.ml_delivery_drivers (id, user_id, real_name, id_card, created_at)
+ SELECT uuid_generate_v4(), (SELECT id FROM user_id), '张师傅', 'ID-TEST-0001', NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM found_driver)
+ RETURNING id, user_id
+),
+driver_row AS (
+ SELECT id, user_id FROM ins_driver
+ UNION ALL
+ SELECT id, user_id FROM found_driver
+ LIMIT 1
+),
+
+ins_order_1 AS (
+ INSERT INTO public.ml_orders (
+ order_no, user_id, merchant_id,
+ product_amount, shipping_fee, total_amount,
+ shipping_address, created_at, updated_at
+ )
+ SELECT
+ 'TEST-DELIV-20260202-001',
+ (SELECT id FROM user_id),
+ (SELECT id FROM user_id),
+ 88.00, 12.00, 100.00,
+ ('{"contact":"李小明","phone":"13800000002","province":"上海市","city":"上海市","district":"浦东新区","street":"测试路100号","detail":"5楼502室","lat":31.2000,"lng":121.5000}')::jsonb,
+ NOW(), NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no = 'TEST-DELIV-20260202-001')
+ RETURNING id, order_no, order_status
+),
+sel_order_1 AS (
+ SELECT id, order_no FROM ins_order_1
+ UNION ALL
+ SELECT id, order_no FROM public.ml_orders WHERE order_no = 'TEST-DELIV-20260202-001'
+ LIMIT 1
+),
+
+ins_task_1 AS (
+ INSERT INTO public.ml_delivery_tasks (
+ order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at
+ )
+ SELECT
+ (SELECT id FROM sel_order_1),
+ ('{"contact":"商家小二","phone":"13900000002","street":"商家路1號","city":"上海市","detail":"商家门店A"}')::jsonb,
+ ('{"contact":"李小明","phone":"13800000002","street":"测试路100号","city":"上海市","detail":"5楼502室"}')::jsonb,
+ 12.00,
+ 1,
+ NOW(), NOW()
+ WHERE NOT EXISTS (
+ SELECT 1 FROM public.ml_delivery_tasks dt WHERE dt.order_id = (SELECT id FROM sel_order_1)
+ )
+ RETURNING id, order_id, status, driver_id
+),
+
+ins_order_2 AS (
+ INSERT INTO public.ml_orders (
+ order_no, user_id, merchant_id,
+ product_amount, shipping_fee, total_amount,
+ shipping_address, created_at, updated_at
+ )
+ SELECT
+ 'TEST-DELIV-20260202-002',
+ (SELECT id FROM user_id),
+ (SELECT id FROM user_id),
+ 59.00, 8.00, 67.00,
+ ('{"contact":"王小红","phone":"13800000003","province":"上海市","city":"上海市","district":"闵行区","street":"示例街20号","detail":"2幢101室","lat":31.1000,"lng":121.4000}')::jsonb,
+ NOW(), NOW()
+ WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no = 'TEST-DELIV-20260202-002')
+ RETURNING id, order_no, order_status
+),
+sel_order_2 AS (
+ SELECT id, order_no FROM ins_order_2
+ UNION ALL
+ SELECT id, order_no FROM public.ml_orders WHERE order_no = 'TEST-DELIV-20260202-002'
+ LIMIT 1
+),
+
+ins_task_2 AS (
+ INSERT INTO public.ml_delivery_tasks (
+ order_id, driver_id, pickup_address, delivery_address,
+ delivery_fee, status, assigned_at, picked_at, created_at, updated_at
+ )
+ SELECT
+ (SELECT id FROM sel_order_2),
+ (SELECT id FROM driver_row),
+ ('{"contact":"商家B","phone":"13900000003","street":"商家街2號","city":"上海市","detail":"商家门店B"}')::jsonb,
+ ('{"contact":"王小红","phone":"13800000003","street":"示例街20号","city":"上海市","detail":"2幢101室"}')::jsonb,
+ 8.00,
+ 4,
+ NOW(), NOW(), NOW(), NOW()
+ WHERE NOT EXISTS (
+ SELECT 1 FROM public.ml_delivery_tasks dt WHERE dt.order_id = (SELECT id FROM sel_order_2)
+ )
+ RETURNING id, order_id, status, driver_id
+)
+
+SELECT
+ (SELECT id FROM user_id) AS ak_user_id,
+ (SELECT id FROM driver_row) AS delivery_driver_id,
+ (SELECT id FROM sel_order_1) AS order1_id,
+ (SELECT order_no FROM sel_order_1) AS order1_no,
+ (SELECT id FROM sel_order_2) AS order2_id,
+ (SELECT order_no FROM sel_order_2) AS order2_no,
+ (SELECT id FROM ins_task_1) AS task1_id,
+ (SELECT id FROM ins_task_2) AS task2_id;
+```
+
+---
+
+**常见错误与处理**
+
+- 错误:列不存在(例如 `address` / `phone` / `pickup_contact`)。处理:核对 `complete_mall_database.sql` 中的表结构,确认应使用 `shipping_address`、并将联系人内嵌到 JSON 中。
+- 错误:插入触发 FK 或 NOT NULL 违规(23503 / 23502)。处理:按顺序插入依赖表或使用已存在的 FK 值(例如先查找 `ak_users` 再插入 driver)。
+- 错误:唯一约束冲突(23505,例如 `ml_delivery_tasks.order_id` 唯一)。处理:脚本使用 `WHERE NOT EXISTS` 与 `ORDER_NO` 检查以避免重复插入。
+- 无行返回(UPDATE/SELECT 返回 “Success. No rows returned”):可能因为复制 id 时包含不可见字符,或 WHERE 条件不匹配。建议先用 `SELECT` 按 `order_no` 查找 task,再用 `UPDATE ... FROM public.ml_orders WHERE order_no = '...' RETURNING ...` 更新并检查返回值。
+
+---
+
+**前端验证(我在 `pages/mall/delivery/index.uvue` 已加入日志)**
+
+1. 刷新配送端页面(或重新打开),观察控制台日志:
+ - `loadDriverInfo` 日志:应输出 `driverInfo`,例如打印 `loadDriverInfo: try user_id=... res=...`。
+ - `loadCurrentTask` 日志:输出查询结果 `loadCurrentTask: driverId=... res=...`,若 driver 有未完成任务(status < 5),`currentTask` 会被设置。
+ - `loadAvailableOrders` 日志:输出 `loadAvailableOrders: query result=...`,用于验证 `status = 1` 且 `driver_id IS NULL` 的任务是否列出。
+
+2. 若需要把某条 `ml_delivery_tasks` 的 `status` 改为 4(分配给司机),可运行:
+
+```sql
+UPDATE public.ml_delivery_tasks dt
+SET status = 4,
+ driver_id = '',
+ assigned_at = NOW(),
+ updated_at = NOW()
+FROM public.ml_orders o
+WHERE dt.order_id = o.id
+ AND o.order_no = 'TEST-DELIV-20260202-001'
+RETURNING dt.id, dt.order_id, dt.status, dt.driver_id, dt.assigned_at, dt.updated_at;
+```
+
+执行后刷新前端并贴回 `loadCurrentTask` / `loadAvailableOrders` 的日志,以便确认页面行为。
+
+---
+
+**附:运行建议与注意事项**
+
+- 优先在 Supabase SQL Editor 中以 `Role = postgres` 执行插入与更新脚本,能避免 RLS 导致的“无行返回”。
+- 若需要创建 `ml_order_items`,需先确保 `ml_products` 存在或用最小 mock 产品插入,否则会触发 FK 约束错误。为减少依赖,我先仅创建 `ml_orders` 与 `ml_delivery_tasks`。
+- 保持 `order_no` 的唯一性(测试用的 `order_no` 推荐加时间戳或前缀 `TEST-`)。
+
+如需我把脚本扩展为同时创建 `ml_products` / `ml_order_items`(以便测试完整订单页),或希望我直接在 repo 中加入一个可执行的 SQL 脚本文件,请回复我想要的范围,我来补充。
+
+---
+
+作者:自动化助手(配合用户执行并记录)
+日期:2026-02-02
diff --git a/pages/mall/delivery/doc/delivery.md b/pages/mall/delivery/doc/delivery.md
new file mode 100644
index 00000000..afa66568
--- /dev/null
+++ b/pages/mall/delivery/doc/delivery.md
@@ -0,0 +1,170 @@
+# Delivery 模块 — 总体架构
+
+## 概要
+本文件给出配送(delivery)模块的总体架构说明,覆盖前端视图组件、后端数据表与 API 交互、关键业务流、并发/事务策略与建议改进方向,便于开发者与运维快速理解与修改。
+
+## 架构概览
+- 前端(Uni-app / .uvue 组件):负责页面渲染、用户交互与轻量校验,主要文件位于 `pages/mall/delivery/`。
+- 后端(Supabase/Postgres + RPC):负责数据持久化、原子操作、权限校验与并发控制。建议将关键并发操作(例如“接单”)放在后端 RPC/函数中执行。
+- 数据层(Postgres 表):主表包括 `ml_orders`、`ml_order_items`、`ml_shops`、`ml_delivery_tasks`、`ml_delivery_drivers` 等。
+- 通信:前端通过 Supabase 客户端或后端 HTTP RPC 调用进行读写;推荐对写操作使用后端受限 RPC,减小竞态风险。
+
+## 前端组件映射(关键文件)
+- 入口与导航:`pages/mall/delivery/index.uvue`(模块入口)
+- 任务列表 / 历史:`pages/mall/delivery/tasks.uvue`、`pages/mall/delivery/order-history.uvue`
+- 任务详情 / 订单详情:`pages/mall/delivery/task-detail.uvue`、`pages/mall/delivery/order-detail.uvue`
+- 配送员信息:`pages/mall/delivery/profile.uvue` / `profile-edit.uvue`
+- 收益 / 统计:`pages/mall/delivery/earnings.uvue`
+- 车辆管理:`pages/mall/delivery/vehicle.uvue`、`vehicle-add.uvue`、`vehicle-edit.uvue`
+- 帮助/反馈/测试:`help-center.uvue`、`feedback.uvue`、`test.uvue`
+
+对应文档(开发说明)位于 `pages/mall/delivery/doc/`,每个视图对应一个 `.md` 说明文件(例如 `order-detail.md`、`tasks.md` 等)。
+
+## 数据模型(常用字段 / 表)
+- `ml_orders`: id, cid, order_no, user_id, merchant_id, order_status / status, total_amount, shipping_fee, paid_amount, shipping_address, remark, created_at
+- `ml_order_items`: id, order_id, product_id, product_name, quantity, price, image_url
+- `ml_shops`: id, merchant_id, shop_name, contact_name, contact_phone, address
+- `ml_delivery_tasks`: id, order_id, driver_id, status, distance, estimated_time, pickup_time, delivered_time, created_at
+- `ml_delivery_drivers`: id, user_id, vehicle_id, status
+
+字段命名在代码中可能存在兼容写法(如 `order_status` vs `status`、`shipping_fee` vs `delivery_fee`),建议在前端统一使用一个转换函数 `normalizeOrderRow(row)` 做映射。
+
+## 关键业务流(简要)
+- 接单(Accept)
+ - 不要在前端直接做盲写;推荐后端 RPC 原子化操作:
+ - SQL 示例(后端执行):
+ ```sql
+ UPDATE ml_delivery_tasks
+ SET driver_id = $1, status = 2
+ WHERE order_id = $2 AND (driver_id IS NULL OR driver_id = '')
+ RETURNING *;
+ ```
+ - 前端调用 RPC:根据返回行数判断是否接单成功;若返回 0 行则提示“已被其他配送员接单”。
+
+- 确认取货 / 确认送达
+ - 后端更新 `ml_delivery_tasks` 的时间戳字段(`pickup_time` / `delivered_time`)并更新 `ml_orders.order_status`,前端在成功回调后同步 UI 状态并展示时间戳。
+
+- 读取详情页(order-detail)
+ - 并行查询 `ml_orders`, `ml_order_items`, `ml_shops`, `ml_delivery_tasks` 并合并结果,务必对空值做兼容处理(地址可能是字符串或对象)。
+
+## 并发与事务策略
+- 将所有会改变接单归属或状态的操作放在数据库事务或后端函数中执行,前端仅调用并根据返回结果更新 UI。
+- 使用行级条件(`WHERE driver_id IS NULL` / `WHERE order_status = expected`)与 `RETURNING` 判断是否成功,避免乐观锁冲突。
+- 在前端增加防重(loading 标志位、按钮禁用)和超时重试策略,并记录幂等请求 ID(如必要)。
+
+## 错误处理与监控
+- 前端对所有写操作展示用户友好错误(网络错误 / 已被接单 / 权限不足)。
+- 后端应记录关键操作日志(接单、拒单、确认取货/送达),并导出指标(接单失败率、并发冲突数)。
+
+## 权限与安全
+- 接单/确认类操作必须在后端校验当前用户是合法配送员(基于 `ml_delivery_drivers.user_id`),并确保 RPC 仅对认证用户开放。
+
+## 开发与测试建议
+- 在 `pages/mall/delivery/test/create_test_orders.sql` 中准备自动化测试数据,用于本地/CI 环境的集成测试。
+- 在前端加入单元测试/集成测试用例,模拟并发接单场景,验证后端 RPC 行为。
+
+## 建议改进(优先级)
+- 高:把接单逻辑迁移为后端 RPC,前端只调用并根据返回结果更新 UI。
+- 高:在所有变更接口返回受影响行数与最新状态,便于前端做幂等与回退。
+- 中:统一并导出状态常量(例如 `ORDER_STATUS`)供前端与文档引用,避免魔法数字。
+- 中:为详情页加入字段规范示例(在 `order-detail.md` 中补充),并同步到 API 文档。
+
+---
+
+(如需将 `order-detail.uvue` 的接单逻辑改为调用 RPC 并添加 loading 状态,我可以继续提交补丁。)
+# Delivery 模块文档
+
+本文档为 `pages/mall/delivery` 模块的开发与运维手册,已按与 `analytics` 模块相近的结构补充:概览、文件清单、技术特性、页面架构、实现要点、部署与测试建议、下一步计划与代码质量指引。
+
+## 概览
+配送端(Delivery)面向配送员,覆盖:司机状态管理、任务与订单流转、配送记录/历史、收入统计、个人资料与车辆管理、帮助与反馈。页面既包含前端聚合逻辑,也与后端(Supabase / RPC)交互实现关键业务。
+
+## 文件清单(快速索引)
+
+- [about.uvue](pages/mall/delivery/about.uvue) — 关于我们(静态)
+- [index.uvue](pages/mall/delivery/index.uvue) — 配送端首页(司机信息、今日统计、可接订单)
+- [tasks.uvue](pages/mall/delivery/tasks.uvue) — 任务列表(筛选、分页)
+- [task-detail.uvue](pages/mall/delivery/task-detail.uvue) — 任务详情(联系、取货、完成)
+- [order-detail.uvue](pages/mall/delivery/order-detail.uvue) — 订单详情(多表聚合、状态流转)
+- [order-history.uvue](pages/mall/delivery/order-history.uvue) — 历史订单(本地合并刚完成订单显示)
+- [earnings.uvue](pages/mall/delivery/earnings.uvue) — 收入明细(按 `order_no` 聚合)
+- [profile.uvue](pages/mall/delivery/profile.uvue) — 个人中心与入口
+- [profile-edit.uvue](pages/mall/delivery/profile-edit.uvue) — 编辑资料(头像、服务区域)
+- [vehicle.uvue](pages/mall/delivery/vehicle.uvue) — 车辆管理(列表/新增/编辑)
+- [vehicle-add.uvue](pages/mall/delivery/vehicle-add.uvue) — 添加车辆表单
+- [vehicle-edit.uvue](pages/mall/delivery/vehicle-edit.uvue) — 编辑车辆
+- [feedback.uvue](pages/mall/delivery/feedback.uvue) — 意见反馈(图片、关联订单)
+- [help-center.uvue](pages/mall/delivery/help-center.uvue) — 帮助中心/FAQ
+- [ratings.uvue](pages/mall/delivery/ratings.uvue) — 评价记录(分页/筛选)
+- [settings.uvue](pages/mall/delivery/settings.uvue) — 设置页
+- [test.uvue](pages/mall/delivery/test.uvue) — Supabase 连接/权限诊断
+
+## 技术特性
+
+- UTS / Uni-app 页面实现(`.uvue`),兼容 UTS Android 规范(类型定义、UTSJSONObject 使用等)。
+- 使用 `supa`(项目内 Supabase 封装)进行数据读取、RPC 调用与认证。示例:`supa.from('ml_delivery_tasks')`、`supa.rpc('rpc_analytics_top_products', params)`(analytics 模式的参考)。
+- 本模块使用本地存储做页面间临时数据传递(`uni.setStorageSync`),并在部分页面(如 `vehicle`、`order-history`)合并本地临时项以支持无后端或原型场景。
+- 对接建议:关键写操作(接单/状态变更)必须依赖后端原子性保护(事务或 WHERE driver_id IS NULL 的更新语句)。
+
+## 页面架构与实现要点
+
+- 首页(`index.uvue`):聚合 `driver`、`todayStats`、`currentTask` 与 `availableOrders`;包含 `_transformTask` 用于兼容多种地址/联系人字段格式。
+- 订单详情(`order-detail.uvue`):按 id 格式选择查询字段(`id`/`cid`/`order_no`),并联查 `ml_order_items`, `ml_shops`, `ml_delivery_tasks`;提供接单/拒单/确认取货/确认送达等操作。
+- 任务流(`tasks` / `task-detail`):任务筛选(待接单/进行中/已完成)与详情页的状态变更操作;完成时应记录时间戳与凭证以便对账。
+- 收入(`earnings`):前端按 `order_no` 聚合并补齐来源类型,建议后端提供已聚合接口以提升性能与准确性。
+- 个人/车辆页:使用图片上传、表单校验与本地缓存作为临时方案;生产应对接车辆管理 API 并保存到服务端。
+
+## 典型 DB / RPC 示例
+
+Supabase (supa) 示例:
+```
+// 查询司机信息
+await supa.from('ml_delivery_drivers').select('*').eq('user_id', userId).limit(1).execute()
+
+// 查询可接任务(示例)
+await supa.from('ml_delivery_tasks').select('*').is('driver_id', null).eq('status', 1).order('created_at', { ascending: false }).range(offset, offset+size-1).execute()
+
+// 接单(需后端并发保护)
+await supa.from('ml_delivery_tasks').update({ driver_id: driverId, status: 2 }).eq('id', taskId).eq('driver_id', null).execute()
+```
+
+## 样式与 UI 设计
+
+- 推荐采用与 `analytics` 模块相同的卡片式布局与 KPI 卡片样式(便于统一风格);关键组件(任务卡、订单明细卡、统计卡)应抽象成可复用组件以减少重复代码。
+
+## 部署与配置
+
+- 环境变量:确认 `SUPA_URL`/`SUPA_KEY` 在 `ak/config.uts` 或环境配置中正确配置。
+- 本地测试:使用 `pages/mall/delivery/test.uvue` 验证 Supabase 连接与权限(避免在仓库暴露明文 key)。
+
+## 测试建议
+
+- 功能测试:接单并发测试、状态流转(取货/送达)、图片上传与表单校验、分页与历史数据展示。
+- 兼容性:Android/不同屏幕尺寸测试(UTS Android 兼容性须验证)。
+- 性能:大量任务/历史记录分页测试,收入聚合在后端做性能验证。
+
+## 下一步计划
+
+1. 抽取并复用 UI 组件(任务卡、订单详情卡、统计 KPI 卡)。
+2. 将前端聚合逻辑(如 `earnings`)迁移或补充后端聚合接口以提升性能。
+3. 用后端事务或乐观锁增强接单并发保护,并在前端实现失败回退提示。
+4. 添加自动化测试用例覆盖关键流程(接单/确认/拒单/结算)。
+
+---
+Generated on: 2026-02-02
+## 快速参考(已合并页摘要)
+
+- `about.uvue`:关于我们(静态信息,运营可从 CMS 拉取版本/更新日志)。
+- `help-center.uvue`:帮助中心 / FAQ(本地数组或后端搜索,支持分类与全文检索)。
+- `settings.uvue`:设置页(通知、语言、隐私、登出),存储建议使用 `uni.setStorageSync` + 后端同步。
+- `feedback.uvue`:意见反馈(文本 + 图片 + 关联订单),图片需先上传再提交 URL。
+- `ratings.uvue`:评价记录列表(分页筛选,可能需要后端审核/屏蔽)。
+- `profile.uvue` / `profile-edit.uvue`:个人中心与编辑(头像上传、服务区域、车辆信息),建议在保存后同步刷新缓存。
+- `vehicle*.uvue`:车辆管理相关(列表/新增/编辑),当前以本地存储为演示,生产应对接 REST 接口并做权限校验。
+
+(已把上述 per-page md 移动到 `pages/mall/delivery/doc/archive/`,保留历史版本以便追溯。)
+
+---
+Generated on: 2026-02-02
+---
+Generated on: 2026-02-02
diff --git a/pages/mall/delivery/doc/earnings.md b/pages/mall/delivery/doc/earnings.md
new file mode 100644
index 00000000..c8b8a825
--- /dev/null
+++ b/pages/mall/delivery/doc/earnings.md
@@ -0,0 +1,89 @@
+# earnings.uvue — 收入明细
+
+## 概要
+按 `order_no` 聚合展示配送员收入明细(配送费、用户打赏、商家打赏),支持分页加载与按时间区间统计。
+
+## 数据结构
+- `EarningItem`
+ - `id: string`
+ - `order_no: string`
+ - `date: string`
+ - `amount: number`
+ - `source: 'delivery_fee' | 'user_tip' | 'merchant_tip' | string`
+ - `distance?: number`
+
+- `OrderEarning`
+ - `order_no: string`
+ - `date: string`
+ - `distance?: number`
+ - `totalAmount: number`
+ - `details: EarningItem[]`
+
+## 关键方法
+- `loadAllEarnings()`
+ - 从后端或本地数据源取原始 `EarningItem[]`,按 `order_no` 聚合成 `OrderEarning[]`。
+ - 对每个 `OrderEarning.details` 补齐三类来源占位项(amount=0),以保证前端渲染顺序稳定。
+
+- `calculateTotalStats()`
+ - 计算 `totalEarnings`, `totalUserTips`, `totalMerchantTips`。
+
+- `loadPage()` / `loadMore()`
+ - 基于 `pageSize` 控制分页渲染,避免一次性载入全部历史记录。
+
+## 聚合示例(核心)
+```
+const orderMap = new Map()
+raw.forEach(item => {
+ let order = orderMap.get(item.order_no)
+ if (!order) {
+ order = { order_no: item.order_no, date: item.date, distance: item.distance, totalAmount: 0, details: [] }
+ orderMap.set(item.order_no, order)
+ }
+ order.totalAmount += Number(item.amount || 0)
+ order.details.push(item)
+})
+// 补齐三类来源
+orderMap.forEach(order => {
+ const has = type => order.details.some(d => d.source === type)
+ ;['delivery_fee','merchant_tip','user_tip'].forEach(t => { if (!has(t)) order.details.push({ id: `${order.order_no}_${t}`, order_no: order.order_no, amount: 0, source: t }) })
+})
+const result = Array.from(orderMap.values())
+```
+
+## 接口 / DB 建议
+- 推荐后端提供按订单聚合的接口:
+ - GET `/api/driver/{id}/earnings?start=&end=&page=&size=`
+ - 返回 `OrderEarning[]` 已聚合的数据以减轻前端压力
+
+## 数据源更新:包含已接订单(Accepted)
+- 需求说明:为了与“历史订单”页面保持一致,收入统计应包含配送员已接取(accepted/assigned)的订单,不仅限于已完成订单。也就是说,只要 `ml_delivery_tasks` 中 `driver_id` = 当前司机且 `status >= 2`(已接取或进行中),其对应的订单都应计入收入统计范围。
+
+- 推荐 Supabase 查询示例(后端或前端按需实现):
+
+```
+-- 查询分配给当前司机且已接取的任务对应的订单ID
+SELECT DISTINCT order_id FROM ml_delivery_tasks WHERE driver_id = :driverId AND status >= 2;
+
+-- 基于 order_id 查询订单及收入项(示例:ml_orders + ml_delivery_tips)
+SELECT o.id,o.order_no,o.created_at,o.distance,o.delivery_fee, t.amount as tip_amount, 'user_tip' as tip_source
+FROM ml_orders o
+LEFT JOIN ml_delivery_tips t ON t.order_id = o.id
+WHERE o.id IN ()
+ORDER BY o.created_at DESC
+LIMIT :size OFFSET :offset;
+```
+
+- 若在前端直接使用 `supabase-js`:
+
+```js
+const taskRes = await supa.from('ml_delivery_tasks').select('order_id').eq('driver_id', uid).gte('status', 2).execute()
+const orderIds = taskRes.data.map(r => r.order_id)
+const ordersRes = await supa.from('ml_orders').select('*,ml_delivery_tips(*)').in('id', orderIds).order('created_at',{ascending:false}).limit(size).execute()
+```
+
+注意:若订单很多,务必在后端做分页/聚合以减轻客户端开销。
+
+## 注意事项
+- 在金额计算中使用整数 cents 或 BigInt 或固定小数处理,避免浮点误差。
+- 大量数据应后端分页/聚合并支持过滤(按时间、按来源)。
+
diff --git a/pages/mall/delivery/doc/index.md b/pages/mall/delivery/doc/index.md
new file mode 100644
index 00000000..dbea39f3
--- /dev/null
+++ b/pages/mall/delivery/doc/index.md
@@ -0,0 +1,63 @@
+# index.uvue — 配送端首页
+
+## 概要
+配送员主界面,包含司机信息、在线/离线切换、今日统计、当前配送任务、附近可接订单与快捷入口。
+
+## 数据结构
+- DeliveryDriverType (来自 `ml_delivery_drivers`)
+ - id, user_id, real_name, avatar_url, work_status, vehicle_type, vehicle_number, rating, service_areas, ...
+
+- CurrentTaskType / AvailableOrderType
+ - id, order_no, status, pickup_address, delivery_address, pickup_contact, delivery_contact, delivery_fee, distance, estimated_time, created_at
+
+## 关键方法
+- `onLoad()`
+ - 调用 `getCurrentUser()` 确保用户上下文可用
+ - 执行:`loadDriverInfo()`, `loadTodayStats()`, `loadCurrentTask()`, `loadAvailableOrders()`
+
+- `loadDriverInfo()`
+ - 从 `ml_delivery_drivers` 表按 `user_id` 查询并更新 `driverInfo`。
+
+- `loadTodayStats()`
+ - 查询 `ml_delivery_tasks` 在当天范围内的记录,计算完成订单数、总收入、配送里程等。
+
+- `loadCurrentTask()`
+ - 查询 `ml_delivery_tasks` 中 driver_id 的未完成任务(status < 5),并取最新一条作为当前任务。
+
+- `loadAvailableOrders()`
+ - 若 `isOnline` 且无 `currentTask`,从 `ml_delivery_tasks` 查询 `driver_id IS NULL` 且 status=1 的订单列表(可按地理位置筛选)。
+
+- `_transformTask(task)`
+ - 兼容处理 `pickup_address` / `delivery_address` 与 `pickup_contact` 的多种格式(对象或 JSON 字符串),输出页面期望结构。
+
+## 关键 DB 查询 示例
+```
+await supa.from('ml_delivery_drivers').select('*').eq('user_id', userId).limit(1).execute()
+
+await supa.from('ml_delivery_tasks')
+ .select('id,delivery_fee,distance,created_at,status')
+ .eq('driver_id', driverId)
+ .gte('created_at', start)
+ .lte('created_at', end)
+ .execute()
+```
+
+## 交互与状态流
+- `toggleWorkStatus()`:切换 `isOnline` 并调用 `startWork()` / `stopWork()`。上线时会刷新可接订单列表。
+- 接单/开始取货/确认取货/开始配送/确认送达等均通过对 `ml_delivery_tasks` 的 `update` 操作变更 `status`,并在成功后更新本地 `currentTask`。
+
+## 注意事项
+- 高并发接单场景需后端保证原子性(乐观锁或 DB 事务)以防止竞单冲突。
+- `loadAvailableOrders()` 最好按司机服务区域与距离筛选,并使用分页/实时推送代替频繁轮询。
+- 日志(console.log)语句便于调试,但生产环境建议使用集中化日志系统。
+# index.uvue — 配送端首页
+
+页面目的:配送员主界面,展示司机资料、工作状态、今日统计、当前任务与可接订单。
+
+关键点:
+- 数据加载:`onLoad()` 调用 `getCurrentUser()` 后依次调用 `loadDriverInfo()`, `loadTodayStats()`, `loadCurrentTask()`, `loadAvailableOrders()`。
+- Supabase 交互:通过 `supa.from(...).select(...).eq(...).execute()` 查询 `ml_delivery_drivers`、`ml_delivery_tasks` 等表。
+- 兼容解析:`_transformTask(task)` 将 DB 返回的地址/contact 字段兼容解析为页面所需结构(处理字符串或对象)。
+- 操作:接单/开始取货/确认取货/开始配送/确认送达等,会调用 supa 更新 `ml_delivery_tasks` 状态并同步页面状态。
+
+注意:对 supa 操作有大量 try/catch,页面对无用户 ID 情况做了保护,适合直接对接真实后端。
diff --git a/pages/mall/delivery/doc/more-orders.md b/pages/mall/delivery/doc/more-orders.md
new file mode 100644
index 00000000..6c627aca
--- /dev/null
+++ b/pages/mall/delivery/doc/more-orders.md
@@ -0,0 +1,118 @@
+## 目的
+
+当“附近订单”过多时,在主页面展示前 N 条(当前为 20 条),需要提供“更多”入口,跳转到单独页面展示所有可接取的订单并支持翻页/上拉加载。
+
+## 路由与文件
+
+- 主入口:在 `pages/mall/delivery/index.uvue` 的“附近订单”区块新增“更多”按钮,导航到新页面。
+- 新页面文件:`pages/mall/delivery/all.uvue`(建议路径)
+- 文档说明文件:`pages/mall/delivery/doc/more-orders.md`(本文件)
+
+## 用户流程
+
+1. 用户在 `index.uvue` 看到“附近订单”列表(最多 20 条)。
+2. 当可接取订单数量 >= 20 时,显示“更多”按钮。
+3. 点击“更多”跳转到 `all.uvue`,展示可接取订单的完整列表(分页或无限滚动)。
+4. 用户可在新页面接受订单或刷新列表。
+
+## 后端 / 查询设计(示例:Supabase 客户端)
+
+- 建议分页参数:`pageSize = 50`(可配置)。
+- 前端通过 offset/pagination 请求:
+
+示例(首次加载 page=0, size=50):
+
+```ts
+const page = 0
+const size = 50
+const res = await supa.from('ml_delivery_tasks')
+ .select('*')
+ .is('driver_id', 'null')
+ .eq('status', 1)
+ .order('created_at', { ascending: false })
+ .range(page*size, page*size + size - 1)
+ .execute()
+```
+
+- 翻页时将 `page` 增加;上拉加载时继续请求下一段 `range`。
+- 后端/数据库建议对 `ml_delivery_tasks` 建立索引(status, driver_id, created_at)以加速查询。
+
+## 前端实现建议
+
+- `index.uvue`:在 `availableOrders` 列表下方加入:
+
+ - 条件显示:`availableOrders.length >= 20` 时显示“更多”按钮。
+ - 点击处理函数:`uni.navigateTo({ url: '/pages/mall/delivery/all' })`。
+
+- `all.uvue` 页面职责:
+ - 使用与 `index.uvue` 相同的 `supa` 客户端和 `_transformTask` 方法复用数据格式化逻辑。
+ - 支持分页(page + pageSize)或无限滚动(onReachBottom 加载下一页)。
+ - 显示空状态、加载中状态和错误提示。
+
+示例数据加载片段(伪代码):
+
+```ts
+data() { return { page: 0, pageSize: 50, items: [], loading: false, finished: false } }
+async loadPage() {
+ if (this.loading || this.finished) return
+ this.loading = true
+ const res = await supa.from('ml_delivery_tasks')
+ .select('*')
+ .is('driver_id', 'null')
+ .eq('status', 1)
+ .order('created_at', { ascending: false })
+ .range(this.page * this.pageSize, (this.page+1)*this.pageSize - 1)
+ .execute()
+ const rows = Array.isArray(res.data) ? res.data : []
+ if (rows.length < this.pageSize) this.finished = true
+ this.items.push(...rows.map(r => this._transformTask(r)))
+ this.page += 1
+ this.loading = false
+}
+```
+
+## 并发与安全
+
+- 接单时应在服务器端/数据库层做原子性判断,避免竞态:
+
+ - 示例(伪 SQL):
+ UPDATE ml_delivery_tasks
+ SET driver_id = :driverId, status = 2
+ WHERE id = :taskId AND driver_id IS NULL AND status = 1
+ RETURNING id
+
+- 前端在发起“接受订单”请求后,基于返回结果确认是否成功;若失败需提示用户订单已被接取。
+
+## 接受标准/验收条件
+
+- 在 `index.uvue` 点击“更多”能跳转到 `all.uvue`。
+- `all.uvue` 能正确加载 >20 条可接订单并支持继续加载直到无更多数据。
+- 接单操作的竞态由后端或事务性查询处理,前端能正确反馈成功/失败。
+
+## 测试数据与验证
+
+- 使用现有文档 `doc_mall/database/realistic_mock_data.sql` 创建若干测试订单;也可循环插入多条 `ml_delivery_tasks`(status=1, driver_id=NULL)用于分页测试。
+
+示例快速生成(Postgres 伪 SQL):
+
+```sql
+INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
+SELECT uuid_generate_v4(), '{"detail":"店铺"}'::jsonb, '{"detail":"用户地址"}'::jsonb, 5.0, 1, NOW() - (i || ' minutes')::interval, NOW()
+FROM generate_series(1,200) as s(i);
+```
+
+## 开发任务清单(简要)
+
+1. 在 `pages/mall/delivery/index.uvue` 增加“更多”按钮並导航。
+2. 新建 `pages/mall/delivery/all.uvue`,实现分页/上拉加载并复用 `_transformTask`。
+3. 后端或 DB 层确保接单操作的原子性。
+4. 编写 E2E 或手动测试脚本验证加载与接单行为。
+
+## 是否需要我实现?
+
+如果你需要,我可以:
+- 直接在 `index.uvue` 添加“更多”按钮示例(小改动)。
+- 新增 `pages/mall/delivery/all.uvue` 的样板实现并提交 PR 样例。
+
+---
+文档已创建:`pages/mall/delivery/doc/more-orders.md`
diff --git a/pages/mall/delivery/doc/order-detail.md b/pages/mall/delivery/doc/order-detail.md
new file mode 100644
index 00000000..31408d88
--- /dev/null
+++ b/pages/mall/delivery/doc/order-detail.md
@@ -0,0 +1,51 @@
+# order-detail.uvue — 订单详情
+
+## 概要
+展示单笔订单全部信息并提供状态流转(接单、确认取货、确认送达、拒单等)。页面会联合查询 `ml_orders`、`ml_order_items`、`ml_shops` 与 `ml_delivery_tasks`。
+
+## 数据结构(常用字段)
+- `Order`
+ - `id: string | number`
+ - `order_no: string`
+ - `cid?: number` (兼容旧字段)
+ - `shipping_address | pickup_address`: object/string
+ - `shipping_fee`, `total_amount`, `status`
+
+- `OrderItem`
+ - `id`, `order_id`, `product_name`, `qty`, `price`
+
+- `DeliveryTask`
+ - `id`, `order_id`, `driver_id`, `status`, `accepted_at`, `picked_at`, `delivered_at`
+
+## 关键方法
+- `onLoad(options)`
+ - 解析 `options.id` 与 `options.status`,调用 `loadOrderDetail(id)`。
+
+- `loadOrderDetail(id)`
+ - 判断 ID 类型(UUID / 数字 / 非数字)以决定查询字段(`id`、`cid`、`order_no`)。
+ - 并行查询 `ml_orders`, `ml_order_items`, `ml_shops`, `ml_delivery_tasks` 并合并到页面状态。
+
+- `acceptOrder()` / `rejectOrder(reason)`
+ - accept: 尝试对 `ml_delivery_tasks` 执行 `update driver_id` 操作并设置 `status=2`(处理中),需要后端并发保护。
+ - reject: 增加拒单原因到 `ml_delivery_tasks` 或 `order_notes` 并回滚本地 UI 状态。
+
+- `confirmPickup()` / `confirmDelivery()`
+ - 根据 `task.id` 更新相应时间戳字段(`picked_at`/`delivered_at`)并设置状态(例如 `status=3/4`)。
+
+## 示例:按 id 类型查询(伪代码)
+```
+let q = supa.from('ml_orders').select('*')
+if (isUUID(id)) q = q.eq('id', id)
+else if (isNumeric(id)) q = q.eq('cid', id)
+else q = q.eq('order_no', id)
+const { data: order } = await q.limit(1).execute()
+```
+
+## 事务与并发注意
+- 接单场景应使用后端原子性检查(数据库事务或行级乐观锁)以避免多司机同时接单。
+- 前端接单流程:先尝试 update(带 where driver_id IS NULL),若返回 0 row affected 则提示已被接单。
+
+## 错误处理与回退
+- 捕获所有 supa 调用错误并将友好错误展示给用户(例如:'网络错误,请稍后重试')。
+- 对可能缺失的字段(地址为字符串或对象)使用 `_transformAddress()` 做兼容处理。
+
diff --git a/pages/mall/delivery/doc/order-history.md b/pages/mall/delivery/doc/order-history.md
new file mode 100644
index 00000000..b46ea431
--- /dev/null
+++ b/pages/mall/delivery/doc/order-history.md
@@ -0,0 +1,31 @@
+# order-history.uvue — 历史订单
+
+## 概要
+显示配送员历史订单(已完成/已取消等),并支持按时间范围过滤、分页和插入刚完成订单以做到“即时显示”。
+
+## 数据结构
+- `HistoryOrder`
+ - `order_no`, `id`, `status`, `delivered_at`, `total_amount`, `shop_name`
+
+## 关键方法
+- `loadOrderHistory({start,end,page,size})`
+ - 优先按 `ml_delivery_tasks` 中与 `driver_id` 相关的 `order_id` 拉取任务记录,再批量查询 `ml_orders` 获取详情。
+ - 若后端支持直接按 `driver_id` 返回已完成订单则调用后端聚合接口更高效。
+
+- `checkForNewCompletedOrder()`
+ - 从 `uni.getStorageSync('completed_order_for_history')` 读取并合并到 `orderHistory` 顶部,随后清除本地缓存键。
+
+## DB 查询示例(伪 SQL / supa)
+```
+const tasks = await supa.from('ml_delivery_tasks').select('order_id,delivered_at').eq('driver_id', driverId).eq('status', 4).order('delivered_at', { ascending: false }).limit(100).execute()
+const orders = await supa.from('ml_orders').select('*').in('id', tasks.map(t=>t.order_id)).execute()
+```
+
+## 分页与筛选
+- 使用后端分页(`page/size`),前端仅负责渲染和“加载更多”。
+- 支持按日期区间和商家名模糊搜索。
+
+## 注意事项
+- 当从本地合并刚完成订单时,去重逻辑必不可少(按 `order_no` 或 `id`)。
+- 对于大量历史数据,应依赖后端支持归档与按需加载。错误/异常应有兜底 UI(空状态/重试按钮)。
+
diff --git a/pages/mall/delivery/doc/profile-edit.md b/pages/mall/delivery/doc/profile-edit.md
new file mode 100644
index 00000000..9a6ffa14
--- /dev/null
+++ b/pages/mall/delivery/doc/profile-edit.md
@@ -0,0 +1,25 @@
+# profile-edit.uvue — 编辑资料
+
+## 概要
+编辑配送员个人资料(姓名、电话、头像、服务区域、车辆信息等),并将修改提交到后端保存。
+
+## 数据结构
+- `ProfileForm`
+ - `real_name`, `phone`, `avatar_url`, `service_areas[]`, `vehicle`{
+ `type`, `model`, `plate_no`
+ }
+
+## 关键方法
+- `chooseAvatar()`:`uni.chooseImage` 获取本地图片并调用 `uploadAvatar()` 上传。
+- `uploadAvatar(file)`:上传到文件存储并返回 URL,更新 `form.avatar_url`。
+- `saveProfile()`:表单校验后调用后端 API 更新 `ml_delivery_drivers` 或 `users` 表。
+
+## 接口示例
+```
+await api.put('/driver/profile', { ...form })
+```
+
+## 注意事项
+- 上传图片应限制大小并在客户端压缩以减少带宽。
+- 服务区域通常是数组或 GeoJSON,保存时与后端约定格式以支持范围匹配。
+
diff --git a/pages/mall/delivery/doc/profile.md b/pages/mall/delivery/doc/profile.md
new file mode 100644
index 00000000..8886c566
--- /dev/null
+++ b/pages/mall/delivery/doc/profile.md
@@ -0,0 +1,26 @@
+# profile.uvue — 个人中心
+
+## 概要
+配送员个人中心,展示司机基本信息、当前工作状态、统计摘要(今日订单/收入)、常用入口(车辆管理/收入/设置/帮助)以及最近任务预览。
+
+## 数据结构
+- `DriverInfo`
+ - `id`, `user_id`, `real_name`, `avatar_url`, `work_status`, `rating`, `vehicle`(简要信息)
+
+## 关键方法
+- `loadDriverInfo()`:从 `ml_delivery_drivers` 或 `users` 表加载司机信息并设置 `driverInfo`。
+- `toggleWorkStatus()`:切换上线/下线并触发 `loadAvailableOrders()`(上线时)。
+- `relocate()`:请求定位权限并更新司机服务位置(可调用后端保存)。
+
+## 交互示例
+```
+async toggleWorkStatus() {
+ await supa.from('ml_delivery_drivers').update({ work_status: newStatus }).eq('id', driverInfo.id)
+ this.driverInfo.work_status = newStatus
+}
+```
+
+## 注意事项
+- 工作状态变更应通知后端并尽量在服务端发出状态变更事件(WebSocket/推送)。
+- 个人信息编辑应跳转到 `profile-edit`,并在保存后同步更新本页缓存。
+
diff --git a/pages/mall/delivery/feedback.uvue b/pages/mall/delivery/feedback.uvue
new file mode 100644
index 00000000..e11134d7
--- /dev/null
+++ b/pages/mall/delivery/feedback.uvue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+ 问题类型
+
+ {{ feedbackTypes[selectedTypeIndex] }}
+
+
+
+
+
+ 标题
+
+
+
+
+
+ 详细内容
+
+
+
+
+
+ 上传截图(可选)
+
+ 🖼️
+ 点击上传截图
+ 支持 JPG/PNG,最多3张
+
+
+
+
+
+
+ ×
+
+
+
+
+
+
+ 关联订单号(可选)
+
+
+ {{ selectedOrderIndex === -1 ? '请选择订单' : orderOptions[selectedOrderIndex] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/delivery/help-center.uvue b/pages/mall/delivery/help-center.uvue
new file mode 100644
index 00000000..7b7b63c2
--- /dev/null
+++ b/pages/mall/delivery/help-center.uvue
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+ 🔍
+
+
+
+
+
+
+
+
+ {{ cat.name }}
+
+
+
+
+
+
+
+
+ 搜索结果:{{ searchResults.length }} 条
+ 清除
+
+
+
+
+
+
+
+ {{ item.content }}
+
+
+
+
+
+
+ ❓
+ 暂无匹配结果
+ 请尝试更换关键词,或查看以下热门问题
+
+ 热门问题:
+ 如何接单?
+ 配送超时怎么办?
+ 如何联系客户?
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mall/delivery/index.uvue b/pages/mall/delivery/index.uvue
index 7e785649..cd916250 100644
--- a/pages/mall/delivery/index.uvue
+++ b/pages/mall/delivery/index.uvue
@@ -95,7 +95,11 @@
@@ -164,6 +168,9 @@
DeliveryDriverType,
DeliveryTaskType
} from '@/types/mall-types.uts'
+
+import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
+import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
type TodayStatsType = {
completed_orders: number
@@ -211,6 +218,10 @@
data() {
return {
isOnline: true,
+ // 防抖:记录上次刷新时间,避免 onShow 导致的频繁 refresh
+ lastRefreshAt: 0,
+ // 控制是否启用自动刷新(onShow)——默认关闭,避免频繁或意外刷新
+ enableAutoRefresh: false,
driverInfo: {
id: '',
@@ -243,101 +254,204 @@
}
},
- onLoad() {
- this.loadDriverInfo()
- this.loadTodayStats()
- this.loadCurrentTask()
- this.loadAvailableOrders()
+ async onLoad() {
+ // 确保 userProfile 已加载,以便 getCurrentUserId 能返回正确值
+ try {
+ await getCurrentUser()
+ } catch (e) {
+ console.warn('getCurrentUser failed on onLoad', e)
+ }
+ await this.loadDriverInfo()
+ await this.loadTodayStats()
+ await this.loadCurrentTask()
+ await this.loadAvailableOrders()
},
- onShow() {
- // 页面显示时刷新数据
- this.refreshData()
+ async onShow() {
+ // 自动刷新已被禁用(enableAutoRefresh = false)以避免页面抖动。
+ // 如需临时启用,可在控制台设置 `this.enableAutoRefresh = true`。
+ if (!this.enableAutoRefresh) {
+ console.log('onShow: auto refresh disabled')
+ return
+ }
+ const now = Date.now()
+ if (this.lastRefreshAt && (now - this.lastRefreshAt < 5000)) {
+ console.log('onShow: skipped refresh (debounced)')
+ return
+ }
+ this.lastRefreshAt = now
+ await this.refreshData()
},
methods: {
// 加载配送员信息
- loadDriverInfo() {
- // TODO: 调用API获取配送员信息
- this.driverInfo.real_name = '张师傅'
- this.driverInfo.rating = 4.8
- this.driverInfo.total_orders = 1250
- },
-
- // 加载今日统计
- loadTodayStats() {
- // TODO: 调用API获取今日统计
- this.todayStats = {
- completed_orders: 8,
- total_earning: '245.60',
- total_distance: 45,
- avg_rating: 4.9
+ async loadDriverInfo() {
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in loadDriverInfo - proceeding')
+ const userId = getCurrentUserId()
+ if (!userId) return
+ // 先按 user_id 查询(userId 可能是 ak_users.id 或 auth.users.id)
+ let res = await supa.from('ml_delivery_drivers').select('*').eq('user_id', userId).limit(1).execute()
+ console.log('loadDriverInfo: try user_id=', userId, 'res=', res)
+ if (!(res && (res.data instanceof Array) && res.data.length > 0)) {
+ // 回退:尝试从 ak_users 表根据 auth_id 查出 ak_users.id
+ const akRes = await supa.from('ak_users').select('id').eq('auth_id', userId).limit(1).execute()
+ console.log('loadDriverInfo: ak_users lookup by auth_id=', userId, 'akRes=', akRes)
+ let akId = ''
+ if (akRes && Array.isArray(akRes.data) && akRes.data.length > 0) {
+ akId = (akRes.data[0] as any).id
+ }
+ if (akId) {
+ res = await supa.from('ml_delivery_drivers').select('*').eq('user_id', akId).limit(1).execute()
+ console.log('loadDriverInfo: retry user_id with akId=', akId, 'res=', res)
+ }
+ }
+ if (res && (res.data instanceof Array) && res.data.length > 0) {
+ this.driverInfo = Object.assign(this.driverInfo, res.data[0])
+ }
+ } catch (e) {
+ console.error('loadDriverInfo error', e)
}
},
- // 加载当前任务
- loadCurrentTask() {
- // TODO: 调用API获取当前任务
- this.currentTask = {
- id: '1',
- order_no: 'D202501081234',
- status: 2, // 👈 设置为“已接取”,以便测试“开始取货”按钮
- pickup_address: {
- detail: '华强北商业区华强电子世界2楼A205',
- area: '华强北'
- },
- delivery_address: {
- detail: '南山区科技园深南大道9999号',
- area: '科技园'
- },
- pickup_contact: {
- name: '商家联系人',
- phone: '138****5678'
- },
- delivery_contact: {
- name: '张先生',
- phone: '139****1234'
- },
- delivery_fee: 8.5,
- distance: 12.5,
- estimated_time: 35,
- created_at: '2025-01-08T14:30:00Z'
+ async loadTodayStats() {
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in loadTodayStats - proceeding')
+ const driverId = this.driverInfo.id || null
+ if (!driverId) return
+ const start = new Date()
+ start.setHours(0,0,0,0)
+ const end = new Date()
+ end.setHours(23,59,59,999)
+ const res = await supa.from('ml_delivery_tasks')
+ .select('id,delivery_fee,distance,created_at,status')
+ .eq('driver_id', driverId)
+ .gte('created_at', start.toISOString())
+ .lte('created_at', end.toISOString())
+ .execute()
+ if (res && res.data) {
+ const rows = res.data as Array
+ const completed = rows.filter(r => r.status >= 5).length
+ const earning = rows.reduce((s, r) => s + (Number(r.delivery_fee) || 0), 0)
+ const distance = rows.reduce((s, r) => s + (Number(r.distance) || 0), 0)
+ this.todayStats = {
+ completed_orders: completed,
+ total_earning: earning.toFixed(2),
+ total_distance: Number(distance.toFixed(2)),
+ avg_rating: this.driverInfo.rating || 0
+ }
+ }
+ } catch (e) {
+ console.error('loadTodayStats error', e)
}
},
- // 加载可接取订单
- loadAvailableOrders() {
+ async loadCurrentTask() {
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in loadCurrentTask - proceeding')
+ const driverId = this.driverInfo.id || null
+ if (!driverId) {
+ this.currentTask = null
+ return
+ }
+ const res = await supa.from('ml_delivery_tasks')
+ .select('*')
+ .eq('driver_id', driverId)
+ .lt('status', 5)
+ .order('created_at', { ascending: false })
+ .limit(1)
+ .execute()
+ console.log('loadCurrentTask: driverId=', driverId, 'res=', res)
+ if (res && Array.isArray(res.data) && res.data.length > 0) {
+ this.currentTask = this._transformTask(res.data[0])
+ } else {
+ this.currentTask = null
+ }
+ } catch (e) {
+ console.error('loadCurrentTask error', e)
+ }
+ },
+
+ async loadAvailableOrders() {
+ // 如果当前不在线或已有任务,直接清空并返回
if (!this.isOnline || this.currentTask) {
this.availableOrders = []
return
}
-
- // TODO: 调用API获取附近订单
- this.availableOrders = [
- {
- id: '2',
- order_no: 'D202501081235',
- pickup_address: {
- detail: '福田区购物公园',
- area: '购物公园'
- },
- delivery_address: {
- detail: '南山区海岸城',
- area: '海岸城'
- },
- delivery_fee: 12.0,
- distance: 8.2,
- estimated_time: 25,
- created_at: '2025-01-08T15:00:00Z'
+ // 在加载过程中先清空,避免显示过期或闪现的数据
+ this.availableOrders = []
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in loadAvailableOrders - proceeding')
+ console.log('loadAvailableOrders: supa session=', supa.getSession && supa.getSession())
+ console.log('loadAvailableOrders: getCurrentUserId=', getCurrentUserId())
+ const res = await supa.from('ml_delivery_tasks')
+ .select('*')
+ .is('driver_id', 'null')
+ .eq('status', 1)
+ .range(0, 19)
+ .execute()
+ console.log('loadAvailableOrders: query result=', res)
+ if (res && Array.isArray(res.data)) {
+ const fetched = (res.data as Array).map((r:any) => this._transformTask(r))
+ // 再次检查 currentTask,避免并发情况下短暂展示可接单
+ if (this.currentTask) {
+ this.availableOrders = []
+ } else {
+ this.availableOrders = fetched
+ }
}
- ]
+ } catch (e) {
+ console.error('loadAvailableOrders error', e)
+ this.availableOrders = []
+ }
},
+
+ // 将 DB 行转换为页面期望的结构
+ _transformTask(task: any) {
+ const parseAddress = (a: any) => {
+ if (!a) return { detail: '', area: '' }
+ let obj = a
+ if (typeof a === 'string') {
+ try { obj = JSON.parse(a) } catch (e) { obj = { detail: a } }
+ }
+ const detail = obj.detail || obj.address || obj.full_address || obj.address_detail || obj.name || ''
+ const area = (obj.city || obj.district || obj.area || '')
+ return { detail, area }
+ }
+
+ const parseContact = (c: any) => {
+ if (!c) return { name: '', phone: '' }
+ let obj = c
+ if (typeof c === 'string') {
+ try { obj = JSON.parse(c) } catch (e) { obj = { name: c } }
+ }
+ return { name: obj.name || obj.contact_name || obj.receiver_name || '', phone: obj.phone || obj.mobile || obj.contact_phone || '' }
+ }
+
+ return {
+ id: task.id,
+ order_no: task.order_no || task.orderNo || task.trade_no || '',
+ status: Number(task.status) || 1,
+ pickup_address: parseAddress(task.pickup_address),
+ delivery_address: parseAddress(task.delivery_address),
+ pickup_contact: parseContact(task.pickup_contact),
+ delivery_contact: parseContact(task.delivery_contact),
+ delivery_fee: Number(task.delivery_fee) || 0,
+ distance: Number(task.distance) || 0,
+ estimated_time: Number(task.estimated_time) || 0,
+ created_at: task.created_at || task.createdAt || ''
+ }
+ },
// 刷新数据
- refreshData() {
- this.loadTodayStats()
- this.loadCurrentTask()
- this.loadAvailableOrders()
+ async refreshData() {
+ await this.loadTodayStats()
+ await this.loadCurrentTask()
+ await this.loadAvailableOrders()
},
// 刷新订单列表
@@ -429,48 +543,70 @@
},
// 任务操作方法
- acceptTask() {
- // TODO: 调用API接受任务
- if (this.currentTask) {
- this.currentTask.status = 2 // 更新状态为“已接取”
+ async acceptTask() {
+ if (!this.currentTask) return
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in acceptTask - proceeding')
+ const driverId = this.driverInfo.id || null
+ if (!driverId) throw new Error('无配送员ID')
+ const res = await supa.from('ml_delivery_tasks').update({ driver_id: driverId, status: 2 }).eq('id', this.currentTask.id).execute()
+ if (res && !res.error) {
+ this.currentTask.status = 2
+ uni.showToast({ title: '任务已接受', icon: 'success' })
+ }
+ } catch (e) {
+ console.error('acceptTask error', e)
+ uni.showToast({ title: '接受任务失败', icon: 'none' })
}
- uni.showToast({
- title: '任务已接受',
- icon: 'success'
- })
},
- startPickup() {
- // TODO: 调用API开始取货
- if (this.currentTask) {
- this.currentTask.status = 3 // 更新状态为“取货中”
+ async startPickup() {
+ if (!this.currentTask) return
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in startPickup - proceeding')
+ const res = await supa.from('ml_delivery_tasks').update({ status: 3 }).eq('id', this.currentTask.id).execute()
+ if (res && !res.error) {
+ this.currentTask.status = 3
+ uni.showToast({ title: '开始取货', icon: 'success' })
+ }
+ } catch (e) {
+ console.error('startPickup error', e)
+ uni.showToast({ title: '操作失败', icon: 'none' })
}
- uni.showToast({
- title: '开始取货',
- icon: 'success'
- })
},
- confirmPickup() {
- // TODO: 调用API确认取货
- if (this.currentTask) {
- this.currentTask.status = 4 // 更新状态为“已取货”
+ async confirmPickup() {
+ if (!this.currentTask) return
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in confirmPickup - proceeding')
+ const res = await supa.from('ml_delivery_tasks').update({ status: 4, pickup_time: new Date().toISOString() }).eq('id', this.currentTask.id).execute()
+ if (res && !res.error) {
+ this.currentTask.status = 4
+ uni.showToast({ title: '取货完成', icon: 'success' })
+ }
+ } catch (e) {
+ console.error('confirmPickup error', e)
+ uni.showToast({ title: '操作失败', icon: 'none' })
}
- uni.showToast({
- title: '取货完成',
- icon: 'success'
- })
},
- startDelivery() {
- // TODO: 调用API开始配送
- if (this.currentTask) {
- this.currentTask.status = 5 // 更新状态为“配送中”
+ async startDelivery() {
+ if (!this.currentTask) return
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in startDelivery - proceeding')
+ const res = await supa.from('ml_delivery_tasks').update({ status: 5 }).eq('id', this.currentTask.id).execute()
+ if (res && !res.error) {
+ this.currentTask.status = 5
+ uni.showToast({ title: '开始配送', icon: 'success' })
+ }
+ } catch (e) {
+ console.error('startDelivery error', e)
+ uni.showToast({ title: '操作失败', icon: 'none' })
}
- uni.showToast({
- title: '开始配送',
- icon: 'success'
- })
},
// 显示确认送达弹框
@@ -486,22 +622,23 @@
})
},
- // 确认送达
- confirmDelivery() {
- // TODO: 调用API确认送达
- if (this.currentTask) {
- // 1. 将订单状态更新为“已完成” (假设5表示已完成)
- this.currentTask.status = 5;
- // 2. 将已完成的任务保存到本地存储,以便历史订单页面可以读取
- const completedOrder = {...this.currentTask}; // 创建副本,避免引用问题
- uni.setStorageSync('completed_order_for_history', completedOrder);
- }
- uni.showToast({
- title: '配送完成',
- icon: 'success'
- })
- this.currentTask = null
- this.loadAvailableOrders()
+ async confirmDelivery() {
+ if (!this.currentTask) return
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in confirmDelivery - proceeding')
+ const res = await supa.from('ml_delivery_tasks').update({ status: 6, delivered_time: new Date().toISOString() }).eq('id', this.currentTask.id).execute()
+ if (res && !res.error) {
+ const completedOrder = { ...this.currentTask }
+ uni.setStorageSync('completed_order_for_history', completedOrder)
+ uni.showToast({ title: '配送完成', icon: 'success' })
+ this.currentTask = null
+ this.loadAvailableOrders()
+ }
+ } catch (e) {
+ console.error('confirmDelivery error', e)
+ uni.showToast({ title: '操作失败', icon: 'none' })
+ }
},
contactCustomer() {
@@ -538,14 +675,22 @@
},
// 订单操作方法
- acceptOrder(orderId: string) {
- // TODO: 调用API接受订单
- uni.showToast({
- title: '订单已接受',
- icon: 'success'
- })
- this.loadCurrentTask()
- this.loadAvailableOrders()
+ async acceptOrder(orderId: string) {
+ try {
+ const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
+ if (!ready) console.warn('supaReady timeout/failed in acceptOrder - proceeding')
+ const driverId = this.driverInfo.id || null
+ if (!driverId) throw new Error('无配送员ID')
+ const res = await supa.from('ml_delivery_tasks').update({ driver_id: driverId, status: 2 }).eq('id', orderId).execute()
+ if (res && !res.error) {
+ uni.showToast({ title: '订单已接受', icon: 'success' })
+ await this.loadCurrentTask()
+ await this.loadAvailableOrders()
+ }
+ } catch (e) {
+ console.error('acceptOrder error', e)
+ uni.showToast({ title: '接受订单失败', icon: 'none' })
+ }
},
// 导航方法
@@ -554,6 +699,13 @@
url: '/pages/mall/delivery/order-history'
})
},
+
+ // 跳转到“全部可接订单”页面
+ goToAllOrders() {
+ uni.navigateTo({
+ url: '/pages/mall/delivery/all'
+ })
+ },
goToEarnings() {
uni.navigateTo({
@@ -666,6 +818,17 @@
text-align: center;
}
+.section-header-actions {
+ display: flex;
+ gap: 12rpx;
+ align-items: center;
+}
+
+.more-btn {
+ color: #1976d2;
+ font-size: 24rpx;
+}
+
.stats-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
diff --git a/pages/mall/delivery/order-detail.uvue b/pages/mall/delivery/order-detail.uvue
index 68bc94d4..d58fb0e4 100644
--- a/pages/mall/delivery/order-detail.uvue
+++ b/pages/mall/delivery/order-detail.uvue
@@ -1,4 +1,3 @@
-
@@ -180,15 +179,8 @@
\ No newline at end of file
diff --git a/pages/mall/pages.json b/pages/mall/pages.json
index 35d094a9..69ddaca0 100644
--- a/pages/mall/pages.json
+++ b/pages/mall/pages.json
@@ -7,8 +7,11 @@
},
"pages": [
{
- "name": "管理端首页",
- "path": "pages/mall/admin/index"
+ "path": "pages/mall/admin/index",
+ "style": {
+ "navigationBarTitleText": "管理后台",
+ "navigationStyle": "custom"
+ }
},
{
"path": "pages/mall/consumer/index",
@@ -73,13 +76,6 @@
"navigationStyle": "custom"
}
},
- {
- "path": "pages/mall/admin/index",
- "style": {
- "navigationBarTitleText": "管理后台",
- "navigationStyle": "custom"
- }
- },
{
"path": "pages/mall/service/index",
"style": {
@@ -516,4 +512,4 @@
}
]
}
-}
+}
\ No newline at end of file
diff --git a/pages/sense/senseDataService.uts b/pages/sense/senseDataService.uts
index 298bc552..bf9a50fe 100644
--- a/pages/sense/senseDataService.uts
+++ b/pages/sense/senseDataService.uts
@@ -1,4 +1,4 @@
-import { supabase, ensureSupabaseReady } from '@/components/supadb/aksupainstance.uts'
+import supabase, { supaReady } from '@/components/supadb/aksupainstance.uts'
import type { DeviceInfo, DeviceParams } from './types.uts'
// 服务响应类型
@@ -17,7 +17,7 @@ export class SenseDataService {
*/
static async getDevices(params: DeviceParams): Promise>> {
try {
- await ensureSupabaseReady()
+ await supaReady
const res = await supabase.from(SenseDataService.TABLE_NAME)
.select('*', {})
.eq('user_id', params.user_id)
@@ -46,7 +46,7 @@ export class SenseDataService {
*/
static async bindDevice(deviceData: UTSJSONObject): Promise> {
try {
- await ensureSupabaseReady()
+ await supaReady
const res = await supabase.from(SenseDataService.TABLE_NAME)
.insert(deviceData)
.select('*', {})
@@ -75,7 +75,7 @@ export class SenseDataService {
*/
static async unbindDevice(deviceId: string): Promise> {
try {
- await ensureSupabaseReady()
+ await supaReady
const res = await supabase.from(SenseDataService.TABLE_NAME)
.delete()
.eq('id', deviceId)
@@ -102,7 +102,7 @@ export class SenseDataService {
*/
static async updateDevice(deviceId: string, configData: UTSJSONObject): Promise> {
try {
- await ensureSupabaseReady()
+ await supaReady
const res = await supabase.from(SenseDataService.TABLE_NAME)
.update(configData)
.eq('id', deviceId)
diff --git a/pages/user/bind-email.uvue b/pages/user/bind-email.uvue
new file mode 100644
index 00000000..dc7cadc1
--- /dev/null
+++ b/pages/user/bind-email.uvue
@@ -0,0 +1,135 @@
+
+
+
+
+ 邮箱
+
+
+
+ 验证码
+
+ {{ counting ? `${count}s` : '获取验证码' }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/user/bind-phone.uvue b/pages/user/bind-phone.uvue
new file mode 100644
index 00000000..f0e0e08d
--- /dev/null
+++ b/pages/user/bind-phone.uvue
@@ -0,0 +1,135 @@
+
+
+
+
+ 手机号
+
+
+
+ 验证码
+
+ {{ counting ? `${count}s` : '获取验证码' }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/user/boot.uvue b/pages/user/boot.uvue
index 4e877b25..a1f43b55 100644
--- a/pages/user/boot.uvue
+++ b/pages/user/boot.uvue
@@ -25,6 +25,7 @@
+
+
\ No newline at end of file
diff --git a/pages/user/login.uvue b/pages/user/login.uvue
index ff80071c..6276d66a 100644
--- a/pages/user/login.uvue
+++ b/pages/user/login.uvue
@@ -141,6 +141,7 @@
+
+
\ No newline at end of file
diff --git a/pages/user/register.uvue b/pages/user/register.uvue
index 2e2fe5ac..5a210293 100644
--- a/pages/user/register.uvue
+++ b/pages/user/register.uvue
@@ -330,9 +330,20 @@
// 跳转到登录页
const navigateToLogin = () => {
- uni.navigateTo({
- url: '/pages/user/login'
- })
+ const pages = getCurrentPages() as any[]
+ const currentPage = pages.length > 0 ? pages[pages.length - 1] : null
+ const opts = currentPage?.options as any
+ const redirect = opts?.redirect as string | null
+
+ if (redirect != null && redirect.length > 0) {
+ uni.navigateTo({
+ url: `/pages/user/login?redirect=${redirect}`
+ })
+ } else {
+ uni.navigateTo({
+ url: '/pages/user/login'
+ })
+ }
}
// 跳转到协议页面
diff --git a/pages/user/test/DEBUG_SIGNUP.md b/pages/user/test/DEBUG_SIGNUP.md
index 39fc1359..30ac5940 100644
--- a/pages/user/test/DEBUG_SIGNUP.md
+++ b/pages/user/test/DEBUG_SIGNUP.md
@@ -41,7 +41,7 @@ docker-compose logs auth | grep -i error
### 4. 验证配置是否生效
-在 Supabase Dashboard (http://192.168.1.63:3000) 的 SQL Editor 中执行:
+在 Supabase Dashboard (http://192.168.1.61:3000) 的 SQL Editor 中执行:
```sql
-- 检查当前配置(需要访问 GoTrue 配置)
@@ -59,7 +59,7 @@ docker-compose logs auth | grep -i error
确认 `ak/config.uts` 中的配置正确:
```typescript
-export const SUPA_URL: string = 'http://192.168.1.63:8000'
+export const SUPA_URL: string = 'http://192.168.1.61:8000'
export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
```
diff --git a/pages/user/test/IMMEDIATE_FIX.md b/pages/user/test/IMMEDIATE_FIX.md
index 384778d3..4e072b39 100644
--- a/pages/user/test/IMMEDIATE_FIX.md
+++ b/pages/user/test/IMMEDIATE_FIX.md
@@ -58,7 +58,7 @@ grep ENABLE_EMAIL_AUTOCONFIRM supabase_pro/.env
## 🔍 验证用户是否创建
-在 Supabase Dashboard (http://192.168.1.63:3000) 的 SQL Editor 中执行:
+在 Supabase Dashboard (http://192.168.1.61:3000) 的 SQL Editor 中执行:
```sql
-- 检查最新注册的用户
diff --git a/pages/user/test/QUICK_FIX.md b/pages/user/test/QUICK_FIX.md
index bf2fea13..184941cd 100644
--- a/pages/user/test/QUICK_FIX.md
+++ b/pages/user/test/QUICK_FIX.md
@@ -16,7 +16,7 @@
**执行步骤**:
-1. **在 Supabase Dashboard (http://192.168.1.63:3000) 中打开 SQL Editor**
+1. **在 Supabase Dashboard (http://192.168.1.61:3000) 中打开 SQL Editor**
2. **执行 `USER_AUTH_SCHEMA.sql`**
- 创建 `ak_users` 表和 RLS 策略
diff --git a/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md b/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md
index 51d239d9..12172425 100644
--- a/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md
+++ b/pages/user/test/QUICK_FIX_SIGNUP_LOGIN.md
@@ -44,7 +44,7 @@ docker-compose restart auth
### 方法一:在 Supabase Dashboard 中手动确认
-1. 打开 Supabase Dashboard: http://192.168.1.63:3000
+1. 打开 Supabase Dashboard: http://192.168.1.61:3000
2. 进入 **Authentication** → **Users**
3. 找到对应的用户
4. 点击用户,在详情页中点击 **Confirm Email** 按钮
diff --git a/pages/user/test/USER_AUTH_SCHEMA.sql b/pages/user/test/USER_AUTH_SCHEMA.sql
new file mode 100644
index 00000000..e44292e3
--- /dev/null
+++ b/pages/user/test/USER_AUTH_SCHEMA.sql
@@ -0,0 +1,145 @@
+-- ============================================
+-- 用户登录 / 注册 - 核心用户资料表结构(创建版 / Create-only)
+-- ============================================
+-- 用途:创建核心业务用户资料表(ak_users)及其相关函数和 RLS 策略。
+-- 特点:
+-- 1. 不做 DROP/DELETE/TRUNCATE(不清空数据)
+-- 2. 通过 IF NOT EXISTS + 系统表判断,实现可重复执行
+-- 3. 职责单一:只负责 ak_users,不涉及其他基础表
+-- 4. 依赖:应在基础表(01_create_tables.sql)之后执行
+-- ============================================
+
+-- ============================================
+-- 1. 业务用户资料表 ak_users
+-- ============================================
+
+CREATE TABLE IF NOT EXISTS public.ak_users (
+ id uuid primary key,
+ username text,
+ email text,
+ gender text,
+ birthday date,
+ height_cm numeric,
+ weight_kg numeric,
+ bio text,
+ avatar_url text,
+ preferred_language text,
+ role text,
+ school_id text,
+ grade_id text,
+ class_id text,
+ created_at timestamptz default now(),
+ updated_at timestamptz default now()
+);
+
+-- 中文注释
+COMMENT ON TABLE public.ak_users IS '业务用户资料表(与 auth.users 一一对应)';
+COMMENT ON COLUMN public.ak_users.id IS '用户ID(等于 auth.users.id)';
+COMMENT ON COLUMN public.ak_users.username IS '用户名/昵称';
+COMMENT ON COLUMN public.ak_users.email IS '邮箱';
+COMMENT ON COLUMN public.ak_users.gender IS '性别';
+COMMENT ON COLUMN public.ak_users.birthday IS '生日';
+COMMENT ON COLUMN public.ak_users.height_cm IS '身高(厘米)';
+COMMENT ON COLUMN public.ak_users.weight_kg IS '体重(公斤)';
+COMMENT ON COLUMN public.ak_users.bio IS '个人简介';
+COMMENT ON COLUMN public.ak_users.avatar_url IS '头像地址';
+COMMENT ON COLUMN public.ak_users.preferred_language IS '偏好语言';
+COMMENT ON COLUMN public.ak_users.role IS '角色(如 customer/merchant/admin 等)';
+COMMENT ON COLUMN public.ak_users.school_id IS '学校ID(可选)';
+COMMENT ON COLUMN public.ak_users.grade_id IS '年级ID(可选)';
+COMMENT ON COLUMN public.ak_users.class_id IS '班级ID(可选)';
+COMMENT ON COLUMN public.ak_users.created_at IS '创建时间';
+COMMENT ON COLUMN public.ak_users.updated_at IS '更新时间';
+
+-- 为 ak_users 添加 updated_at 触发器
+-- 注意:通用函数 update_updated_at_column() 在 01_create_tables.sql 中创建
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_ak_users_updated_at') THEN
+ EXECUTE 'CREATE TRIGGER update_ak_users_updated_at BEFORE UPDATE ON public.ak_users FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column()';
+ END IF;
+END $$;
+
+-- ============================================
+-- 2. 行级安全策略(RLS)
+-- ============================================
+
+-- 启用 RLS
+ALTER TABLE public.ak_users ENABLE ROW LEVEL SECURITY;
+
+-- 仅允许本人读写自己的资料
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='ak_users' AND policyname='ak_users_self_select') THEN
+ EXECUTE 'CREATE POLICY "ak_users_self_select" ON public.ak_users FOR SELECT USING (auth.uid() = id)';
+ END IF;
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='ak_users' AND policyname='ak_users_self_insert') THEN
+ EXECUTE 'CREATE POLICY "ak_users_self_insert" ON public.ak_users FOR INSERT WITH CHECK (auth.uid() = id)';
+ END IF;
+ IF NOT EXISTS (SELECT 1 FROM pg_policies WHERE schemaname='public' AND tablename='ak_users' AND policyname='ak_users_self_update') THEN
+ EXECUTE 'CREATE POLICY "ak_users_self_update" ON public.ak_users FOR UPDATE USING (auth.uid() = id)';
+ END IF;
+END $$;
+
+-- ============================================
+-- 3. 相关函数
+-- ============================================
+
+-- 函数1:手动初始化/更新用户资料(可选,供前端调用)
+CREATE OR REPLACE FUNCTION public.upsert_user_profile(
+ p_user_id uuid,
+ p_email text,
+ p_username text default null
+)
+RETURNS public.ak_users
+LANGUAGE plpgsql
+SECURITY DEFINER
+SET search_path = public
+AS $$
+DECLARE
+ v_username text := coalesce(p_username, split_part(p_email, '@', 1), 'user');
+ v_result public.ak_users;
+BEGIN
+ -- 插入或更新用户资料
+ INSERT INTO public.ak_users (id, email, username)
+ VALUES (p_user_id, p_email, v_username)
+ ON CONFLICT (id) DO UPDATE
+ SET
+ email = excluded.email,
+ username = coalesce(excluded.username, ak_users.username)
+ RETURNING * INTO v_result;
+
+ RETURN v_result;
+END;
+$$;
+
+-- 函数2:供 auth.users 触发器使用,自动创建用户资料
+CREATE OR REPLACE FUNCTION public.handle_new_user()
+RETURNS trigger
+LANGUAGE plpgsql
+SECURITY DEFINER
+SET search_path = public
+AS $$
+BEGIN
+ BEGIN
+ INSERT INTO public.ak_users (id, email, username)
+ VALUES (NEW.id, NEW.email, COALESCE(SPLIT_PART(NEW.email, '@', 1), 'user'))
+ ON CONFLICT (id) DO NOTHING;
+ EXCEPTION WHEN OTHERS THEN
+ -- 重要:不要因为业务表写入失败而阻断 auth.users 的注册事务
+ RAISE WARNING 'handle_new_user failed: %', SQLERRM;
+ END;
+
+ RETURN NEW;
+END;
+$$;
+
+-- ============================================
+-- 4. 函数授权
+-- ============================================
+
+-- upsert_user_profile 只允许已登录用户调用
+REVOKE ALL ON FUNCTION public.upsert_user_profile(uuid, text, text) FROM PUBLIC;
+GRANT EXECUTE ON FUNCTION public.upsert_user_profile(uuid, text, text) TO authenticated;
+
+-- handle_new_user 是触发器函数,由系统内部调用,无需对任何角色授权
diff --git a/pages/user/test/USER_AUTH_TEST_DATA.sql b/pages/user/test/USER_AUTH_TEST_DATA.sql
new file mode 100644
index 00000000..c0d560d1
--- /dev/null
+++ b/pages/user/test/USER_AUTH_TEST_DATA.sql
@@ -0,0 +1,35 @@
+-- ============================================
+-- 用户登录 / 注册 测试数据
+-- 位置:pages/user/test/USER_AUTH_TEST_DATA.sql
+-- 用途:
+-- - 准备少量业务侧测试数据,方便前端联调登录/个人中心
+-- - 注意:Supabase 的 auth.users 建议通过实际“注册”流程生成,这里不直接插入
+-- ============================================
+
+-- 1. 如果你已经通过注册页创建了账号(auth.users 中有记录),
+-- 可以在 ak_users 中补充一条测试资料:
+-- 把 '00000000-0000-0000-0000-000000000001' 替换成自己 auth.users 里的 id。
+
+insert into public.ak_users (id, username, email, role)
+values
+ ('00000000-0000-0000-0000-000000000001', 'demo_user', 'demo@example.com', 'analyst')
+on conflict (id) do update
+set
+ username = excluded.username,
+ email = excluded.email,
+ role = excluded.role;
+
+-- 2. 可选:补充 users / user_sessions 基础数据,方便分析模块统计演示
+
+insert into public.users (id, email, nickname)
+values
+ ('00000000-0000-0000-0000-000000000001', 'demo@example.com', 'Demo 分析师')
+on conflict (id) do update
+set
+ email = excluded.email,
+ nickname = excluded.nickname;
+
+insert into public.user_sessions (user_id, session_token, is_active)
+values
+ ('00000000-0000-0000-0000-000000000001', 'demo-session-token', true);
+
diff --git a/pages/user/test/USER_AUTH_TRIGGER.sql b/pages/user/test/USER_AUTH_TRIGGER.sql
new file mode 100644
index 00000000..7ecd7ccd
--- /dev/null
+++ b/pages/user/test/USER_AUTH_TRIGGER.sql
@@ -0,0 +1,89 @@
+-- ============================================
+-- 自动创建 ak_users 记录的触发器
+-- ============================================
+-- 位置:pages/user/test/USER_AUTH_TRIGGER.sql
+-- 用途:当 auth.users 表中创建新用户时,自动在 ak_users 表中创建对应的业务资料记录
+--
+-- 执行方式:
+-- 在 Supabase Dashboard 的 SQL Editor 中执行此文件
+-- 需要 superuser 权限(Dashboard 默认有)
+-- ============================================
+
+-- 触发器函数 `public.handle_new_user()` 的定义在 `USER_AUTH_SCHEMA.sql` 中完成。
+-- 这里仅负责在 auth.users 上创建触发器(避免重复定义函数导致版本不一致)。
+
+-- 兼容处理:如果 `public.handle_new_user()` 尚未创建(例如先执行了本文件),则在此处补齐创建。
+-- 说明:这里采用“存在则跳过”的创建方式,不会覆盖已有实现。
+DO $$
+BEGIN
+ IF NOT EXISTS (
+ SELECT 1
+ FROM pg_proc p
+ JOIN pg_namespace n ON n.oid = p.pronamespace
+ WHERE n.nspname = 'public'
+ AND p.proname = 'handle_new_user'
+ ) THEN
+ EXECUTE $fn$
+ CREATE FUNCTION public.handle_new_user()
+ RETURNS TRIGGER
+ LANGUAGE plpgsql
+ SECURITY DEFINER
+ SET search_path = public
+ AS $body$
+ BEGIN
+ BEGIN
+ INSERT INTO public.ak_users (id, email, username)
+ VALUES (
+ NEW.id,
+ NEW.email,
+ COALESCE(SPLIT_PART(NEW.email, '@', 1), 'user')
+ )
+ ON CONFLICT (id) DO NOTHING;
+ EXCEPTION WHEN OTHERS THEN
+ RAISE WARNING 'handle_new_user failed: %', SQLERRM;
+ END;
+
+ RETURN NEW;
+ END;
+ $body$;
+ $fn$;
+ END IF;
+END $$;
+
+-- 在 auth.users 表上创建触发器
+-- 注意:这个触发器会在每次 auth.users 插入新记录时自动执行
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'on_auth_user_created') THEN
+ EXECUTE 'CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION public.handle_new_user()';
+ END IF;
+END $$;
+
+-- ============================================
+-- 验证触发器
+-- ============================================
+-- 执行以下查询验证触发器是否创建成功:
+-- SELECT * FROM pg_trigger WHERE tgname = 'on_auth_user_created';
+-- SELECT * FROM pg_proc WHERE proname = 'handle_new_user';
+
+-- ============================================
+-- 测试触发器(可选)
+-- ============================================
+-- 注意:以下测试代码会创建一个测试用户,执行前请确认
+--
+-- 1. 通过 Supabase Auth API 注册一个新用户
+-- 2. 检查 ak_users 表中是否自动创建了对应的记录
+--
+-- 或者手动测试(需要 admin 权限):
+-- INSERT INTO auth.users (id, email, encrypted_password, email_confirmed_at, created_at, updated_at)
+-- VALUES (
+-- gen_random_uuid(),
+-- 'test@example.com',
+-- crypt('password', gen_salt('bf')),
+-- NOW(),
+-- NOW(),
+-- NOW()
+-- );
+--
+-- 然后检查 ak_users 表:
+-- SELECT * FROM ak_users WHERE email = 'test@example.com';
diff --git a/services/analytics/auth.uts b/services/analytics/auth.uts
new file mode 100644
index 00000000..a40c882d
--- /dev/null
+++ b/services/analytics/auth.uts
@@ -0,0 +1,21 @@
+import supa from '@/components/supadb/aksupainstance.uts'
+
+export function getUserIdOrNull(): string | null {
+ try {
+ const sessionInfo = supa.getSession()
+ if (sessionInfo == null || sessionInfo.user == null) return null
+ const userObj = sessionInfo.user as any
+ if (userObj.getString != null) {
+ return (userObj.getString('id') as string | null)
+ }
+ if (userObj.id != null) {
+ return String(userObj.id)
+ }
+ if (typeof userObj === 'object' && 'id' in userObj) {
+ return String((userObj as any).id)
+ }
+ return null
+ } catch (e) {
+ return null
+ }
+}
diff --git a/services/analytics/authGuard.uts b/services/analytics/authGuard.uts
new file mode 100644
index 00000000..e1543599
--- /dev/null
+++ b/services/analytics/authGuard.uts
@@ -0,0 +1,20 @@
+import { getUserIdOrNull } from './auth.uts'
+import { toLoginWithRedirect, getCurrentPageUrlWithQuery } from '@/utils/authRedirect.uts'
+
+export type EnsureLoginOptions = {
+ redirectUrl?: string
+ toastTitle?: string
+}
+
+export function ensureAnalyticsLogin(opts?: EnsureLoginOptions): boolean {
+ const uid = getUserIdOrNull()
+ if (uid != null && uid !== '') return true
+
+ const target = (opts?.redirectUrl != null && opts?.redirectUrl?.length > 0)
+ ? opts?.redirectUrl as string
+ : getCurrentPageUrlWithQuery()
+
+ uni.showToast({ title: opts?.toastTitle ?? '请先登录', icon: 'none' })
+ toLoginWithRedirect(target)
+ return false
+}
diff --git a/services/analytics/couponAnalysisService.uts b/services/analytics/couponAnalysisService.uts
new file mode 100644
index 00000000..b20e4d06
--- /dev/null
+++ b/services/analytics/couponAnalysisService.uts
@@ -0,0 +1,42 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray, rpcOrNull } from './rpc.uts'
+
+export type CouponAnalysisData = {
+ overviewRow: UTSJSONObject | null
+ typeList: Array
+ channelList: Array
+ trendList: Array
+ conversionList: Array
+}
+
+export async function fetchCouponAnalysis(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const p_start_date = toDateOnly(startIso)
+ const p_end_date = toDateOnly(endIso)
+
+ const params = {
+ p_start_date,
+ p_end_date
+ } as any
+
+ const [overviewRow, typeList, channelList, trendList, conversionList] = await Promise.all([
+ rpcOrNull('rpc_analytics_coupon_overview', params),
+ rpcOrEmptyArray('rpc_analytics_coupon_by_type', params),
+ rpcOrEmptyArray('rpc_analytics_coupon_by_channel', params),
+ rpcOrEmptyArray('rpc_analytics_coupon_trend', params),
+ rpcOrEmptyArray('rpc_analytics_coupon_conversion', params)
+ ])
+
+ return { overviewRow, typeList, channelList, trendList, conversionList }
+}
diff --git a/services/analytics/customReportService.uts b/services/analytics/customReportService.uts
new file mode 100644
index 00000000..abbe7451
--- /dev/null
+++ b/services/analytics/customReportService.uts
@@ -0,0 +1,91 @@
+import { rpcOrEmptyArray, rpcOrValue } from './rpc.uts'
+
+export type CustomReportListItem = {
+ id: string
+ title: string
+ description: string
+ period: string
+ updated_at: string
+}
+
+export type CreateCustomReportParams = {
+ title: string
+ description: string
+ period: string
+ metrics: Array
+ chartType: string
+}
+
+export type UpdateCustomReportParams = {
+ reportId: string
+ title: string
+ description: string | null
+ period: string | null
+}
+
+function safeString(v: any): string {
+ return v != null ? `${v}` : ''
+}
+
+// 改造:不再直查 analytics_reports 表,统一通过 RPC 获取当前用户的报表列表
+export async function listCustomReports(ownerUserId: string): Promise> {
+ // rpc_get_custom_reports 基于 auth.uid() 过滤,无需额外参数,这里保留签名用于兼容调用方
+ const rows = await rpcOrEmptyArray('rpc_get_custom_reports', {} as any)
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ list.push({
+ id: safeString(r.getAny?.('id') ?? r.getString?.('id')),
+ title: safeString(r.getAny?.('title') ?? r.getString?.('title')),
+ description: safeString(r.getAny?.('description') ?? r.getString?.('description')),
+ period: safeString(r.getAny?.('period') ?? r.getString?.('period')),
+ updated_at: safeString(r.getAny?.('updated_at') ?? r.getString?.('updated_at'))
+ })
+ }
+ return list
+}
+
+// 改造:RPC 参数改为 p_definition(JSONB),承载 period/metrics/chartType
+export async function createCustomReport(params: CreateCustomReportParams): Promise {
+ const definition = {
+ period: params.period,
+ metrics: params.metrics,
+ chartType: params.chartType || 'line'
+ }
+
+ const data = await rpcOrValue('rpc_create_custom_report', {
+ p_title: params.title,
+ p_description: params.description || '',
+ p_definition: definition
+ } as any)
+
+ if (data == null) {
+ throw new Error('保存失败:未返回报表ID')
+ }
+
+ return `${data}`
+}
+
+export async function updateCustomReport(params: UpdateCustomReportParams): Promise {
+ // 注意:旧 UI 只传 title/description/period,这里把 period 合并进 definition
+ const definition = {
+ period: params.period
+ }
+
+ await rpcOrValue('rpc_update_custom_report', {
+ p_report_id: params.reportId,
+ p_title: params.title,
+ p_description: params.description,
+ p_definition: definition
+ } as any)
+
+ return true
+}
+
+export async function deleteCustomReport(reportId: string): Promise {
+ await rpcOrValue('rpc_delete_custom_report', {
+ p_report_id: reportId
+ } as any)
+
+ return true
+}
diff --git a/services/analytics/dashboardService.uts b/services/analytics/dashboardService.uts
new file mode 100644
index 00000000..b9f550d6
--- /dev/null
+++ b/services/analytics/dashboardService.uts
@@ -0,0 +1,145 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray, rpcOrNull, rpcOrValue } from './rpc.uts'
+
+export type TrendData = { x: Array; gmv: Array; orders: Array }
+export type SegmentItem = { name: string; value: number }
+export type TrafficItem = { name: string; value: number }
+export type TopProductItem = { id: string; rank: number; name: string; sales: number }
+export type TopMerchantItem = { id: string; rank: number; name: string; sales: number; growth: number }
+
+function safeNumber(v: any): number {
+ const n = Number(v)
+ return isFinite(n) ? n : 0
+}
+
+export async function fetchDashboardTrend(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const p_start_date = toDateOnly(startIso)
+ const p_end_date = toDateOnly(endIso)
+
+ const rows = await rpcOrEmptyArray('rpc_analytics_sales_trend', {
+ p_start_date,
+ p_end_date
+ } as any)
+
+ const x: Array = []
+ const gmv: Array = []
+ const orders: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const row: any = rows[i]
+ const d = `${row.getAny?.('date') ?? ''}`
+ x.push(d.length >= 10 ? d.slice(5) : d)
+ gmv.push(safeNumber(row.getAny?.('gmv') ?? 0))
+ orders.push(safeNumber(row.getAny?.('orders') ?? 0))
+ }
+ return { x, gmv, orders }
+}
+
+export async function fetchDashboardRealtime(): Promise {
+ const [kpiRow, onlineUsersVal] = await Promise.all([
+ rpcOrNull('rpc_analytics_realtime_kpis', {} as any),
+ rpcOrValue('rpc_analytics_online_users', {} as any)
+ ])
+
+ const obj: any = kpiRow != null ? kpiRow : ({} as any)
+
+ return {
+ gmv: Math.round(safeNumber(obj.getAny?.('gmv') ?? 0)),
+ gmv_growth: safeNumber(obj.getAny?.('gmv_growth') ?? 0),
+ orders: Math.round(safeNumber(obj.getAny?.('orders') ?? 0)),
+ order_growth: safeNumber(obj.getAny?.('order_growth') ?? 0),
+ online_users: Math.round(safeNumber(onlineUsersVal ?? 0)),
+ conversion_rate: safeNumber(obj.getAny?.('conversion_rate') ?? 0),
+ conversion_growth: safeNumber(obj.getAny?.('conversion_growth') ?? 0)
+ }
+}
+
+export async function fetchDashboardTopProducts(period: string, limit: number = 50): Promise> {
+ const { startIso, endIso } = computeDateRange(period)
+ const rows = await rpcOrEmptyArray('rpc_analytics_top_products', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_limit: limit
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const row: any = rows[i]
+ list.push({
+ id: `${row.getAny?.('id') ?? i}`,
+ rank: i + 1,
+ name: `${row.getAny?.('name') ?? '未知商品'}`,
+ sales: safeNumber(row.getAny?.('sales') ?? 0)
+ })
+ }
+ return list
+}
+
+export async function fetchDashboardTopMerchants(period: string, limit: number = 50): Promise> {
+ const { startIso, endIso } = computeDateRange(period)
+ const rows = await rpcOrEmptyArray('rpc_analytics_top_merchants', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_limit: limit
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const row: any = rows[i]
+ list.push({
+ id: `${row.getAny?.('id') ?? i}`,
+ rank: i + 1,
+ name: `${row.getAny?.('name') ?? row.getAny?.('shop_name') ?? '未知商家'}`,
+ sales: safeNumber(row.getAny?.('sales') ?? 0),
+ growth: safeNumber(row.getAny?.('growth') ?? 0)
+ })
+ }
+ return list
+}
+
+export async function fetchDashboardUserSegments(period: string): Promise> {
+ const { startIso, endIso } = computeDateRange(period)
+ const rows = await rpcOrEmptyArray('rpc_analytics_user_segments', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const row: any = rows[i]
+ list.push({
+ name: `${row.getAny?.('name') ?? row.getAny?.('segment_name') ?? row.getAny?.('label') ?? '未知'}`,
+ value: safeNumber(row.getAny?.('value') ?? row.getAny?.('count') ?? row.getAny?.('amount') ?? 0)
+ })
+ }
+ return list
+}
+
+export async function fetchDashboardTrafficSources(period: string): Promise> {
+ const { startIso, endIso } = computeDateRange(period)
+ const rows = await rpcOrEmptyArray('rpc_analytics_traffic_sources', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const row: any = rows[i]
+ list.push({
+ name: `${row.getAny?.('name') ?? row.getAny?.('source_name') ?? row.getAny?.('label') ?? '未知'}`,
+ value: safeNumber(row.getAny?.('value') ?? row.getAny?.('count') ?? row.getAny?.('amount') ?? 0)
+ })
+ }
+ return list
+}
diff --git a/services/analytics/dataDetailService.uts b/services/analytics/dataDetailService.uts
new file mode 100644
index 00000000..6a3065cf
--- /dev/null
+++ b/services/analytics/dataDetailService.uts
@@ -0,0 +1,58 @@
+import { rpcOrEmptyArray, rpcOrNull } from './rpc.uts'
+
+export type ReportInfo = {
+ id: string
+ title: string
+ description: string
+ definition: any
+ updated_at: string
+}
+
+function safeString(v: any): string {
+ return v != null ? `${v}` : ''
+}
+
+// 改造:调用 rpc_data_detail_report_info
+export async function fetchReportInfo(reportId: string): Promise {
+ const row = await rpcOrNull('rpc_data_detail_report_info', {
+ p_report_id: reportId
+ } as any)
+
+ if (row == null) return null
+
+ return {
+ id: safeString(row.getAny?.('id')),
+ title: safeString(row.getAny?.('title')),
+ description: safeString(row.getAny?.('description')),
+ definition: row.getAny?.('definition'),
+ updated_at: safeString(row.getAny?.('updated_at'))
+ }
+}
+
+// 改造:调用 rpc_data_detail_rows
+export async function fetchReportRows(reportId: string, params: any): Promise> {
+ const result = await rpcOrNull('rpc_data_detail_rows', {
+ p_report_id: reportId,
+ p_params: params
+ } as any)
+
+ if (result == null) return []
+ const anyData = result as any
+ return Array.isArray(anyData) ? (anyData as Array) : ([] as Array)
+}
+
+// 保留调用,但 RPC 是模拟数据
+export async function fetchDrilldown(reportId: string, itemId: string): Promise> {
+ return await rpcOrEmptyArray('rpc_data_detail_drill_items', {
+ p_report_id: reportId,
+ p_item_id: itemId
+ } as any)
+}
+
+// 保留调用,但 RPC 是模拟数据
+export async function fetchComparison(itemId: string, period: string): Promise> {
+ return await rpcOrEmptyArray('rpc_data_detail_compare_gmv', {
+ p_item_id: itemId,
+ p_period: period
+ } as any)
+}
diff --git a/services/analytics/dateRange.uts b/services/analytics/dateRange.uts
new file mode 100644
index 00000000..28705069
--- /dev/null
+++ b/services/analytics/dateRange.uts
@@ -0,0 +1,15 @@
+export type DateRange = { startIso: string; endIso: string }
+
+export function computeDateRange(period: string): DateRange {
+ const now = new Date()
+ const start = new Date(now.getTime())
+ if (period === '7d') start.setDate(start.getDate() - 7)
+ else if (period === '30d') start.setDate(start.getDate() - 30)
+ else if (period === '90d') start.setDate(start.getDate() - 90)
+ else if (period === '1y') start.setFullYear(start.getFullYear() - 1)
+ return { startIso: start.toISOString(), endIso: now.toISOString() }
+}
+
+export function toDateOnly(iso: string): string {
+ return iso.length >= 10 ? iso.substring(0, 10) : iso
+}
diff --git a/services/analytics/deliveryAnalysisService.uts b/services/analytics/deliveryAnalysisService.uts
new file mode 100644
index 00000000..ff1233fc
--- /dev/null
+++ b/services/analytics/deliveryAnalysisService.uts
@@ -0,0 +1,36 @@
+import { computeDateRange } from './dateRange.uts'
+import { rpcOrEmptyArray } from './rpc.uts'
+
+export type DeliveryAnalysisData = {
+ trendList: Array
+ topList: Array
+ startIso: string
+ endIso: string
+}
+
+export async function fetchDeliveryAnalysis(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const trendList = await rpcOrEmptyArray('rpc_delivery_efficiency_daily', {
+ p_start: startIso,
+ p_end: endIso
+ } as any)
+
+ const topList = await rpcOrEmptyArray('rpc_delivery_efficiency_top_drivers', {
+ p_start: startIso,
+ p_end: endIso,
+ p_limit: 10
+ } as any)
+
+ return { trendList, topList, startIso, endIso }
+}
diff --git a/services/analytics/errorMapper.uts b/services/analytics/errorMapper.uts
new file mode 100644
index 00000000..fe1872e9
--- /dev/null
+++ b/services/analytics/errorMapper.uts
@@ -0,0 +1,53 @@
+export type AnalyticsErrorContext = {
+ action?: string
+ fallbackMessage?: string
+}
+
+export function mapAnalyticsError(err: any, ctx?: AnalyticsErrorContext): string {
+ const fallback = ctx?.fallbackMessage ?? '操作失败'
+
+ try {
+ if (err == null) return fallback
+
+ // string
+ if (typeof err === 'string') {
+ const s = err.trim()
+ return s.length > 0 ? s : fallback
+ }
+
+ // Error
+ const eAny = err as any
+ const msg: string = (eAny?.message != null ? String(eAny.message) : '')
+ const code: string = (eAny?.code != null ? String(eAny.code) : '')
+ const status: number | null = (typeof eAny?.status === 'number' ? (eAny.status as number) : null)
+
+ // RPC not found / route not found
+ if (status === 404) {
+ return '功能尚未部署(RPC 未创建)'
+ }
+
+ // auth
+ if (code === 'P0001' || msg.includes('用户未登录') || msg.toLowerCase().includes('not logged') || msg.toLowerCase().includes('jwt')) {
+ return '请先登录'
+ }
+
+ // permission
+ if (msg.includes('无权限') || msg.toLowerCase().includes('permission') || msg.toLowerCase().includes('forbidden')) {
+ return '无权限操作'
+ }
+
+ // not found
+ if (msg.includes('不存在') || msg.toLowerCase().includes('not found')) {
+ return '数据不存在或已删除'
+ }
+
+ // fallback to message
+ if (msg.trim().length > 0) {
+ return msg
+ }
+
+ return fallback
+ } catch (e) {
+ return fallback
+ }
+}
diff --git a/services/analytics/insightDetailService.uts b/services/analytics/insightDetailService.uts
new file mode 100644
index 00000000..58492237
--- /dev/null
+++ b/services/analytics/insightDetailService.uts
@@ -0,0 +1,67 @@
+import supa from '@/components/supadb/aksupainstance.uts'
+
+export type InsightDetail = {
+ id: string
+ report_id: string
+ type: string
+ impact: string
+ title: string
+ content: string
+ created_at: string
+}
+
+export type RelatedReport = {
+ id: string
+ title: string
+ type: string
+ period: string
+ generated_at: string
+}
+
+export async function fetchInsightDetail(insightId: string): Promise {
+ const res: any = await supa
+ .from('analytics_insights')
+ .select('id, report_id, type, impact, title, content, created_at')
+ .eq('id', insightId)
+ .single()
+
+ if (res?.error != null) {
+ throw res.error
+ }
+
+ const it: any = res.data
+ if (it == null) return null
+
+ return {
+ id: `${it.id}`,
+ report_id: `${it.report_id || ''}`,
+ type: `${it.type || 'info'}`,
+ impact: `${it.impact || 'medium'}`,
+ title: `${it.title || ''}`,
+ content: `${it.content || ''}`,
+ created_at: `${it.created_at || ''}`
+ }
+}
+
+export async function fetchRelatedReport(reportId: string): Promise {
+ const rRes: any = await supa
+ .from('analytics_reports')
+ .select('id, title, type, period, generated_at')
+ .eq('id', reportId)
+ .single()
+
+ if (rRes?.error != null) {
+ throw rRes.error
+ }
+
+ const r: any = rRes.data
+ if (r == null) return null
+
+ return {
+ id: `${r.id}`,
+ title: `${r.title}`,
+ type: `${r.type}`,
+ period: `${r.period}`,
+ generated_at: `${r.generated_at || ''}`
+ }
+}
diff --git a/services/analytics/marketTrendsService.uts b/services/analytics/marketTrendsService.uts
new file mode 100644
index 00000000..866fd1a6
--- /dev/null
+++ b/services/analytics/marketTrendsService.uts
@@ -0,0 +1,64 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray } from './rpc.uts'
+
+export type MarketTrendsData = {
+ trendRows: Array
+ categoryRows: Array
+ seasonalRows: Array
+ priceRows: Array
+ competitionRows: Array
+ startIso: string
+ endIso: string
+}
+
+export async function fetchMarketTrends(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const startDate = toDateOnly(startIso)
+ const endDate = toDateOnly(endIso)
+
+ const trendRows = await rpcOrEmptyArray('rpc_analytics_market_trend_daily', {
+ p_start: startIso,
+ p_end: endIso
+ } as UTSJSONObject)
+
+ const categoryRows = await rpcOrEmptyArray('rpc_analytics_category_sales', {
+ p_start_date: startDate,
+ p_end_date: endDate
+ } as UTSJSONObject)
+
+ const seasonalRows = await rpcOrEmptyArray('rpc_analytics_seasonal_trend', {
+ p_start_date: startDate,
+ p_end_date: endDate
+ } as UTSJSONObject)
+
+ const priceRows = await rpcOrEmptyArray('rpc_analytics_price_trend', {
+ p_start: startIso,
+ p_end: endIso
+ } as UTSJSONObject)
+
+ const competitionRows = await rpcOrEmptyArray('rpc_analytics_competition_share', {
+ p_start_date: startDate,
+ p_end_date: endDate
+ } as UTSJSONObject)
+
+ return {
+ trendRows,
+ categoryRows,
+ seasonalRows,
+ priceRows,
+ competitionRows,
+ startIso,
+ endIso
+ }
+}
diff --git a/services/analytics/productInsightsService.uts b/services/analytics/productInsightsService.uts
new file mode 100644
index 00000000..fa4e2000
--- /dev/null
+++ b/services/analytics/productInsightsService.uts
@@ -0,0 +1,163 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray, rpcOrNull } from './rpc.uts'
+
+export type ProductOverview = {
+ total_products: number
+ product_growth: number
+ hot_products: number
+ turnover_rate: number
+ turnover_growth: number
+ avg_stock: number
+ stock_growth: number
+}
+
+export type ProductRank = { id: string; rank: number; name: string; sales: number; growth: number }
+
+export type ProductTrendRow = { date: string; gmv: number; qty: number; orders: number }
+
+function safeNumber(v: any): number {
+ const n = Number(v)
+ return isFinite(n) ? n : 0
+}
+
+export async function fetchProductOverview(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const row = await rpcOrNull('rpc_product_insights_overview', {
+ p_start: toDateOnly(startIso),
+ p_end: toDateOnly(endIso)
+ } as any)
+
+ const obj: any = row != null ? row : ({} as any)
+ return {
+ total_products: safeNumber(obj.getAny?.('total_products') ?? 0),
+ product_growth: safeNumber(obj.getAny?.('product_growth') ?? 0),
+ hot_products: safeNumber(obj.getAny?.('hot_products') ?? 0),
+ turnover_rate: safeNumber(obj.getAny?.('turnover_rate') ?? 0),
+ turnover_growth: safeNumber(obj.getAny?.('turnover_growth') ?? 0),
+ avg_stock: safeNumber(obj.getAny?.('avg_stock') ?? 0),
+ stock_growth: safeNumber(obj.getAny?.('stock_growth') ?? 0)
+ }
+}
+
+export async function fetchTopProducts(period: string, limit: number = 10, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const rows = await rpcOrEmptyArray('rpc_analytics_top_products', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_limit: limit
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ list.push({
+ id: `${r.getAny?.('id') ?? i}`,
+ rank: i + 1,
+ name: `${r.getAny?.('name') ?? '未知商品'}`,
+ sales: safeNumber(r.getAny?.('sales') ?? 0),
+ growth: safeNumber(r.getAny?.('growth') ?? 0)
+ })
+ }
+ return list
+}
+
+export async function fetchProductTrend(period: string, productId: string, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ const rows = await rpcOrEmptyArray('rpc_analytics_product_trend', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_product_id: productId
+ } as any)
+
+ const out: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ const date = `${r.getAny?.('date') ?? ''}`
+ out.push({
+ date,
+ gmv: safeNumber(r.getAny?.('gmv') ?? 0),
+ qty: safeNumber(r.getAny?.('qty') ?? 0),
+ orders: safeNumber(r.getAny?.('orders') ?? 0)
+ })
+ }
+ return out
+}
+
+export async function fetchCategorySales(period: string, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ return await rpcOrEmptyArray('rpc_analytics_category_sales', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+}
+
+export async function fetchStockInsights(period: string): Promise> {
+ return await rpcOrEmptyArray('rpc_product_insights_stock', {} as any)
+}
+
+export async function fetchPriceTrend(period: string, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period)
+ startIso = computedRange.startIso
+ endIso = computedRange.endIso
+ }
+
+ return await rpcOrEmptyArray('rpc_analytics_price_trend', {
+ p_start: startIso,
+ p_end: endIso
+ } as any)
+}
+
+export async function fetchReviewInsights(): Promise> {
+ return await rpcOrEmptyArray('rpc_product_insights_reviews', {} as any)
+}
diff --git a/services/analytics/reportDetailService.uts b/services/analytics/reportDetailService.uts
new file mode 100644
index 00000000..ea72f6cd
--- /dev/null
+++ b/services/analytics/reportDetailService.uts
@@ -0,0 +1,146 @@
+import supa from '@/components/supadb/aksupainstance.uts'
+
+export type AnalyticsReport = {
+ id: string
+ title: string
+ type: string
+ period: string
+ generated_at: string
+ description: string
+}
+
+export type AnalyticsReportMetric = {
+ key: string
+ label: string
+ value: number
+ format: string
+ icon: string
+ color: string
+ change: number
+}
+
+export type AnalyticsReportRow = {
+ row_date: string
+ gmv: number
+ orders: number
+ users: number
+ conversion: number
+ avg_order_amount: number
+}
+
+export type AnalyticsInsight = {
+ id: string
+ type: string
+ title: string
+ content: string
+ impact: string
+}
+
+export type AnalyticsRelatedReport = AnalyticsReport
+
+function safeNumber(v: any): number {
+ const n = Number(v)
+ return isFinite(n) ? n : 0
+}
+
+export async function fetchReport(reportId: string): Promise {
+ const reportRes: any = await supa
+ .from('analytics_reports')
+ .select('id, title, type, period, generated_at, description')
+ .eq('id', reportId)
+
+ if (reportRes?.error != null) throw reportRes.error
+
+ const rows: Array = Array.isArray(reportRes.data) ? (reportRes.data as Array) : []
+ if (rows.length === 0) return null
+ const r = rows[0]
+ return {
+ id: `${r.id}`,
+ title: `${r.title}`,
+ type: `${r.type}`,
+ period: `${r.period}`,
+ generated_at: `${r.generated_at}`,
+ description: `${r.description || ''}`
+ }
+}
+
+export async function fetchReportMetrics(reportId: string): Promise> {
+ const metricRes: any = await supa
+ .from('analytics_report_metrics')
+ .select('metric_key, metric_label, metric_value_num, format, icon, color, change_pct')
+ .eq('report_id', reportId)
+
+ if (metricRes?.error != null) throw metricRes.error
+
+ const metricRows: Array = Array.isArray(metricRes.data) ? (metricRes.data as Array) : []
+ return metricRows.map((m: any) => ({
+ key: `${m.metric_key}`,
+ label: `${m.metric_label}`,
+ value: safeNumber(m.metric_value_num),
+ format: `${m.format || 'number'}`,
+ icon: `${m.icon || '📊'}`,
+ color: `${m.color || '#4caf50'}`,
+ change: safeNumber(m.change_pct)
+ }))
+}
+
+export async function fetchReportRows(reportId: string): Promise> {
+ const rowsRes: any = await supa
+ .from('analytics_report_rows')
+ .select('row_date, gmv, orders, users, conversion, avg_order_amount')
+ .eq('report_id', reportId)
+ .order('row_date', { ascending: true } as any)
+
+ if (rowsRes?.error != null) throw rowsRes.error
+
+ const rows: Array = Array.isArray(rowsRes.data) ? (rowsRes.data as Array) : []
+ return rows.map((row: any) => ({
+ row_date: `${row.row_date}`,
+ gmv: safeNumber(row.gmv),
+ orders: safeNumber(row.orders),
+ users: safeNumber(row.users),
+ conversion: safeNumber(row.conversion),
+ avg_order_amount: safeNumber(row.avg_order_amount)
+ }))
+}
+
+export async function fetchReportInsights(reportId: string): Promise> {
+ const insightRes: any = await supa
+ .from('analytics_insights')
+ .select('id, type, title, content, impact')
+ .eq('report_id', reportId)
+ .order('created_at', { ascending: false } as any)
+
+ if (insightRes?.error != null) throw insightRes.error
+
+ const insRows: Array = Array.isArray(insightRes.data) ? (insightRes.data as Array) : []
+ return insRows.map((it: any) => ({
+ id: `${it.id}`,
+ type: `${it.type || 'info'}`,
+ title: `${it.title}`,
+ content: `${it.content}`,
+ impact: `${it.impact || 'medium'}`
+ }))
+}
+
+export async function fetchRelatedReports(reportType: string, excludeReportId: string): Promise> {
+ const relatedRes: any = await supa
+ .from('analytics_reports')
+ .select('id, title, type, period, generated_at, description')
+ .eq('type', reportType)
+ .neq('id', excludeReportId)
+ .order('generated_at', { ascending: false } as any)
+ .limit(3 as any)
+
+ if (relatedRes?.error != null) throw relatedRes.error
+
+ const relRows: Array = Array.isArray(relatedRes.data) ? (relatedRes.data as Array) : []
+ return relRows.map((it: any) => ({
+ id: `${it.id}`,
+ title: `${it.title}`,
+ type: `${it.type}`,
+ period: `${it.period}`,
+ generated_at: `${it.generated_at}`,
+ description: `${it.description || ''}`
+ }))
+}
diff --git a/services/analytics/rpc.uts b/services/analytics/rpc.uts
new file mode 100644
index 00000000..e791e4df
--- /dev/null
+++ b/services/analytics/rpc.uts
@@ -0,0 +1,42 @@
+import supa, { ensureSupabaseReady } from '@/components/supadb/aksupainstance.uts'
+
+export async function rpcOrEmptyArray(functionName: string, params: UTSJSONObject): Promise> {
+ await ensureSupabaseReady()
+ const res: any = await supa.rpc(functionName, params)
+ if (res?.status === 404) {
+ return [] as Array
+ }
+ if (res?.error != null) {
+ throw res.error
+ }
+ const anyData = res.data as any
+ return Array.isArray(anyData) ? (anyData as Array) : ([] as Array)
+}
+
+export async function rpcOrNull(functionName: string, params: UTSJSONObject): Promise {
+ await ensureSupabaseReady()
+ const res: any = await supa.rpc(functionName, params)
+ if (res?.status === 404) {
+ return null
+ }
+ if (res?.error != null) {
+ throw res.error
+ }
+ const anyData = res.data as any
+ if (Array.isArray(anyData)) {
+ return anyData.length > 0 ? (anyData[0] as UTSJSONObject) : null
+ }
+ return anyData != null ? (anyData as UTSJSONObject) : null
+}
+
+export async function rpcOrValue(functionName: string, params: UTSJSONObject): Promise {
+ await ensureSupabaseReady()
+ const res: any = await supa.rpc(functionName, params)
+ if (res?.status === 404) {
+ return null
+ }
+ if (res?.error != null) {
+ throw res.error
+ }
+ return res.data
+}
diff --git a/services/analytics/salesReportService.uts b/services/analytics/salesReportService.uts
new file mode 100644
index 00000000..197f831f
--- /dev/null
+++ b/services/analytics/salesReportService.uts
@@ -0,0 +1,152 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray, rpcOrNull } from './rpc.uts'
+
+export type TrendData = { x: Array; gmv: Array; orders: Array }
+
+export type SalesKpis = {
+ gmv: number
+ gmv_growth: number
+ orders: number
+ order_growth: number
+ conversion_rate: number
+ conversion_growth: number
+ avg_order_amount: number
+ avg_order_growth: number
+}
+
+export type ProductRank = { id: string; rank: number; name: string; sales: number }
+export type MerchantRank = { id: string; rank: number; name: string; sales: number; growth: number }
+
+function safeNumber(v: any): number {
+ const n = Number(v)
+ return isFinite(n) ? n : 0
+}
+
+export async function fetchSalesKpis(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period);
+ startIso = computedRange.startIso;
+ endIso = computedRange.endIso;
+ }
+ const row = await rpcOrNull('rpc_analytics_sales_kpis', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const obj: any = row != null ? row : ({} as any)
+ const gmv = safeNumber(obj.getAny?.('gmv') ?? 0)
+ const orders = safeNumber(obj.getAny?.('orders') ?? 0)
+ const avgOrder = orders > 0 ? gmv / orders : 0
+
+ return {
+ gmv: Math.round(gmv),
+ gmv_growth: safeNumber(obj.getAny?.('gmv_growth') ?? 0),
+ orders: Math.round(orders),
+ order_growth: safeNumber(obj.getAny?.('order_growth') ?? 0),
+ conversion_rate: safeNumber(obj.getAny?.('conversion_rate') ?? 0),
+ conversion_growth: safeNumber(obj.getAny?.('conversion_growth') ?? 0),
+ avg_order_amount: avgOrder,
+ avg_order_growth: safeNumber(obj.getAny?.('avg_order_growth') ?? obj.getAny?.('gmv_growth') ?? 0)
+ }
+}
+
+export async function fetchSalesTrend(period: string, range?: { start: string; end: string } | null): Promise {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period);
+ startIso = computedRange.startIso;
+ endIso = computedRange.endIso;
+ }
+ const rows = await rpcOrEmptyArray('rpc_analytics_sales_trend', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const x: Array = []
+ const gmvArr: Array = []
+ const orderArr: Array = []
+
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ const d = `${r.getAny?.('date') ?? ''}`
+ x.push(d.length >= 10 ? d.slice(5) : d)
+ gmvArr.push(safeNumber(r.getAny?.('gmv') ?? 0))
+ orderArr.push(safeNumber(r.getAny?.('orders') ?? 0))
+ }
+
+ return { x, gmv: gmvArr, orders: orderArr }
+}
+
+export async function fetchSalesTopProducts(period: string, limit: number = 50, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period);
+ startIso = computedRange.startIso;
+ endIso = computedRange.endIso;
+ }
+ const rows = await rpcOrEmptyArray('rpc_analytics_top_products', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_limit: limit
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ list.push({
+ id: `${r.getAny?.('id') ?? i}`,
+ rank: i + 1,
+ name: `${r.getAny?.('name') ?? ''}`,
+ sales: safeNumber(r.getAny?.('sales') ?? 0)
+ })
+ }
+ return list
+}
+
+export async function fetchSalesTopMerchants(period: string, limit: number = 50, range?: { start: string; end: string } | null): Promise> {
+ let startIso: string;
+ let endIso: string;
+
+ if (range != null && range.start && range.end) {
+ startIso = range.start;
+ endIso = range.end;
+ } else {
+ const computedRange = computeDateRange(period);
+ startIso = computedRange.startIso;
+ endIso = computedRange.endIso;
+ }
+ const rows = await rpcOrEmptyArray('rpc_analytics_top_merchants', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso),
+ p_limit: limit
+ } as any)
+
+ const list: Array = []
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ list.push({
+ id: `${r.getAny?.('id') ?? i}`,
+ rank: i + 1,
+ name: `${r.getAny?.('name') ?? ''}`,
+ sales: safeNumber(r.getAny?.('sales') ?? 0),
+ growth: safeNumber(r.getAny?.('growth') ?? 0)
+ })
+ }
+ return list
+}
diff --git a/services/analytics/userAnalysisService.uts b/services/analytics/userAnalysisService.uts
new file mode 100644
index 00000000..4d294e5c
--- /dev/null
+++ b/services/analytics/userAnalysisService.uts
@@ -0,0 +1,121 @@
+import { computeDateRange, toDateOnly } from './dateRange.uts'
+import { rpcOrEmptyArray, rpcOrNull } from './rpc.uts'
+
+// --- Type Definitions ---
+
+export type UserKpis = {
+ total_users: number
+ user_growth: number
+ new_users: number
+ new_user_growth: number
+ active_users: number // DAU
+ active_growth: number
+ paid_users: number
+ paid_growth: number
+ new_user_conversion_rate: number
+ repurchase_rate: number
+}
+
+export type UserGrowthTrend = {
+ dates: Array
+ newUsers: Array
+ activeUsers: Array
+}
+
+export type UserActivity = {
+ dau: number
+ wau: number
+ mau: number
+}
+
+export type UserRetention = {
+ days: Array // e.g., '次日', '3日', '7日', '14日', '30日'
+ rates: Array
+}
+
+export type NewVsOldComparison = {
+ categories: Array // e.g., 'GMV', '订单数', '客单价'
+ newUserData: Array
+ oldUserData: Array
+}
+
+// --- Helper ---
+
+function safeNumber(v: any): number {
+ const n = Number(v)
+ return isFinite(n) ? n : 0
+}
+
+// --- Service Functions ---
+
+export async function fetchUserKpis(period: string): Promise {
+ const { startIso, endIso } = computeDateRange(period)
+ const row = await rpcOrNull('rpc_analytics_user_kpis', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const obj: any = row != null ? row : ({} as any)
+ return {
+ total_users: safeNumber(obj.getAny?.('total_users') ?? 0),
+ user_growth: safeNumber(obj.getAny?.('user_growth') ?? 0),
+ new_users: safeNumber(obj.getAny?.('new_users') ?? 0),
+ new_user_growth: safeNumber(obj.getAny?.('new_user_growth') ?? 0),
+ active_users: safeNumber(obj.getAny?.('active_users') ?? 0),
+ active_growth: safeNumber(obj.getAny?.('active_growth') ?? 0),
+ paid_users: safeNumber(obj.getAny?.('paid_users') ?? 0), // Placeholder
+ paid_growth: safeNumber(obj.getAny?.('paid_growth') ?? 0), // Placeholder
+ new_user_conversion_rate: safeNumber(obj.getAny?.('new_user_conversion_rate') ?? 0), // Placeholder
+ repurchase_rate: safeNumber(obj.getAny?.('repurchase_rate') ?? 0)
+ }
+}
+
+export async function fetchUserGrowthTrend(period: string): Promise {
+ const { startIso, endIso } = computeDateRange(period)
+ const rows = await rpcOrEmptyArray('rpc_analytics_user_growth_trend', {
+ p_start_date: toDateOnly(startIso),
+ p_end_date: toDateOnly(endIso)
+ } as any)
+
+ const dates: Array = []
+ const newUsers: Array = []
+ const activeUsers: Array = []
+
+ for (let i = 0; i < rows.length; i++) {
+ const r: any = rows[i]
+ const d = `${r.getAny?.('date') ?? ''}`
+ dates.push(d.length >= 10 ? d.slice(5) : d)
+ newUsers.push(safeNumber(r.getAny?.('new_users') ?? 0))
+ activeUsers.push(safeNumber(r.getAny?.('active_users') ?? 0))
+ }
+
+ return { dates, newUsers, activeUsers }
+}
+
+// Placeholder for functions that need new RPCs
+
+export async function fetchUserActivity(period: string): Promise {
+ console.warn('fetchUserActivity needs rpc_analytics_user_activity RPC')
+ return { dau: 0, wau: 0, mau: 0 }
+}
+
+export async function fetchUserRetention(period: string): Promise {
+ console.warn('fetchUserRetention needs rpc_analytics_user_retention RPC')
+ return { days: ['次日', '3日', '7日', '14日', '30日'], rates: [0, 0, 0, 0, 0] }
+}
+
+export async function fetchNewVsOldComparison(period: string): Promise {
+ console.warn('fetchNewVsOldComparison needs rpc_analytics_new_vs_old_users RPC')
+ return { categories: ['GMV', '订单数', '客单价'], newUserData: [0, 0, 0], oldUserData: [0, 0, 0] }
+}
+
+export async function fetchConversionFunnel(period: string): Promise> {
+ console.warn('fetchConversionFunnel needs rpc_analytics_conversion_funnel RPC')
+ return [
+ { step: '访问', value: 0 },
+ { step: '详情页', value: 0 },
+ { step: '加购', value: 0 },
+ { step: '下单', value: 0 },
+ { step: '支付', value: 0 }
+ ]
+}
diff --git a/supabase_pro/docker-compose.s3.yml b/supabase_pro/docker-compose.s3.yml
deleted file mode 100644
index 5750cdc6..00000000
--- a/supabase_pro/docker-compose.s3.yml
+++ /dev/null
@@ -1,95 +0,0 @@
-services:
-
- minio:
- image: minio/minio
- ports:
- - '9000:9000'
- - '9001:9001'
- environment:
- MINIO_ROOT_USER: supa-storage
- MINIO_ROOT_PASSWORD: secret1234
- command: server --console-address ":9001" /data
- healthcheck:
- test: [ "CMD", "curl", "-f", "http://minio:9000/minio/health/live" ]
- interval: 2s
- timeout: 10s
- retries: 5
- volumes:
- - ./volumes/storage:/data:z
-
- minio-createbucket:
- image: minio/mc
- depends_on:
- minio:
- condition: service_healthy
- entrypoint: >
- /bin/sh -c "
- /usr/bin/mc alias set supa-minio http://minio:9000 supa-storage secret1234;
- /usr/bin/mc mb supa-minio/stub;
- exit 0;
- "
-
- storage:
- container_name: supabase-storage
- image: supabase/storage-api:v1.33.0
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- rest:
- condition: service_started
- imgproxy:
- condition: service_started
- minio:
- condition: service_healthy
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--no-verbose",
- "--tries=1",
- "--spider",
- "http://storage:5000/status"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- restart: unless-stopped
- environment:
- ANON_KEY: ${ANON_KEY}
- SERVICE_KEY: ${SERVICE_ROLE_KEY}
- POSTGREST_URL: http://rest:3000
- PGRST_JWT_SECRET: ${JWT_SECRET}
- DATABASE_URL: postgres://supabase_storage_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
- REQUEST_ALLOW_X_FORWARDED_PATH: "true"
- FILE_SIZE_LIMIT: 52428800
- STORAGE_BACKEND: s3
- GLOBAL_S3_BUCKET: stub
- GLOBAL_S3_ENDPOINT: http://minio:9000
- GLOBAL_S3_PROTOCOL: http
- GLOBAL_S3_FORCE_PATH_STYLE: true
- AWS_ACCESS_KEY_ID: supa-storage
- AWS_SECRET_ACCESS_KEY: secret1234
- AWS_DEFAULT_REGION: stub
- FILE_STORAGE_BACKEND_PATH: /var/lib/storage
- TENANT_ID: stub
- # TODO: https://github.com/supabase/storage-api/issues/55
- REGION: stub
- ENABLE_IMAGE_TRANSFORMATION: "true"
- IMGPROXY_URL: http://imgproxy:5001
- volumes:
- - ./volumes/storage:/var/lib/storage:z
-
- imgproxy:
- container_name: supabase-imgproxy
- image: darthsim/imgproxy:v3.8.0
- healthcheck:
- test: [ "CMD", "imgproxy", "health" ]
- timeout: 5s
- interval: 5s
- retries: 3
- environment:
- IMGPROXY_BIND: ":5001"
- IMGPROXY_USE_ETAG: "true"
- IMGPROXY_ENABLE_WEBP_DETECTION: ${IMGPROXY_ENABLE_WEBP_DETECTION}
diff --git a/supabase_pro/docker-compose.yml b/supabase_pro/docker-compose.yml
deleted file mode 100644
index de4d04cf..00000000
--- a/supabase_pro/docker-compose.yml
+++ /dev/null
@@ -1,537 +0,0 @@
-# Usage
-# Start: docker compose up
-# With helpers: docker compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up
-# Stop: docker compose down
-# Destroy: docker compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml down -v --remove-orphans
-# Reset everything: ./reset.sh
-
-name: supabase
-
-services:
-
- studio:
- container_name: supabase-studio
- image: supabase/studio:2025.12.17-sha-43f4f7f
- restart: unless-stopped
- ports:
- - 3000:3000
- healthcheck:
- test:
- [
- "CMD",
- "node",
- "-e",
- "fetch('http://studio:3000/api/platform/profile').then((r) => {if (r.status !== 200) throw new Error(r.status)})"
- ]
- timeout: 10s
- interval: 5s
- retries: 3
- depends_on:
- analytics:
- condition: service_healthy
- environment:
- # Binds nestjs listener to both IPv4 and IPv6 network interfaces
- HOSTNAME: "::"
-
- STUDIO_PG_META_URL: http://meta:8080
- POSTGRES_PORT: ${POSTGRES_PORT}
- POSTGRES_HOST: ${POSTGRES_HOST}
- POSTGRES_DB: ${POSTGRES_DB}
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
- PG_META_CRYPTO_KEY: ${PG_META_CRYPTO_KEY}
-
- DEFAULT_ORGANIZATION_NAME: ${STUDIO_DEFAULT_ORGANIZATION}
- DEFAULT_PROJECT_NAME: ${STUDIO_DEFAULT_PROJECT}
- OPENAI_API_KEY: ${OPENAI_API_KEY:-}
-
- SUPABASE_URL: http://kong:8000
- SUPABASE_PUBLIC_URL: ${SUPABASE_PUBLIC_URL}
- SUPABASE_ANON_KEY: ${ANON_KEY}
- SUPABASE_SERVICE_KEY: ${SERVICE_ROLE_KEY}
- AUTH_JWT_SECRET: ${JWT_SECRET}
-
- # LOGFLARE_API_KEY is deprecated
- LOGFLARE_API_KEY: ${LOGFLARE_PUBLIC_ACCESS_TOKEN}
- LOGFLARE_PUBLIC_ACCESS_TOKEN: ${LOGFLARE_PUBLIC_ACCESS_TOKEN}
- LOGFLARE_PRIVATE_ACCESS_TOKEN: ${LOGFLARE_PRIVATE_ACCESS_TOKEN}
-
- LOGFLARE_URL: http://analytics:4000
- NEXT_PUBLIC_ENABLE_LOGS: true
- # Comment to use Big Query backend for analytics
- NEXT_ANALYTICS_BACKEND_PROVIDER: postgres
- # Uncomment to use Big Query backend for analytics
- # NEXT_ANALYTICS_BACKEND_PROVIDER: bigquery
-
- kong:
- container_name: supabase-kong
- image: kong:2.8.1
- restart: unless-stopped
- ports:
- - ${KONG_HTTP_PORT}:8000/tcp
- - ${KONG_HTTPS_PORT}:8443/tcp
- volumes:
- # https://github.com/supabase/supabase/issues/12661
- - ./volumes/api/kong.yml:/home/kong/temp.yml:ro,z
- depends_on:
- analytics:
- condition: service_healthy
- environment:
- KONG_DATABASE: "off"
- KONG_DECLARATIVE_CONFIG: /home/kong/kong.yml
- # https://github.com/supabase/cli/issues/14
- KONG_DNS_ORDER: LAST,A,CNAME
- KONG_PLUGINS: request-transformer,cors,key-auth,acl,basic-auth,request-termination,ip-restriction,pre-function
- KONG_NGINX_PROXY_PROXY_BUFFER_SIZE: 160k
- KONG_NGINX_PROXY_PROXY_BUFFERS: 64 160k
- SUPABASE_ANON_KEY: ${ANON_KEY}
- SUPABASE_SERVICE_KEY: ${SERVICE_ROLE_KEY}
- DASHBOARD_USERNAME: ${DASHBOARD_USERNAME}
- DASHBOARD_PASSWORD: ${DASHBOARD_PASSWORD}
- # https://unix.stackexchange.com/a/294837
- entrypoint: bash -c 'eval "echo \"$$(cat ~/temp.yml)\"" > ~/kong.yml && /docker-entrypoint.sh kong docker-start'
-
- auth:
- container_name: supabase-auth
- image: supabase/gotrue:v2.184.0
- restart: unless-stopped
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--no-verbose",
- "--tries=1",
- "--spider",
- "http://localhost:9999/health"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- analytics:
- condition: service_healthy
- environment:
- GOTRUE_API_HOST: 0.0.0.0
- GOTRUE_API_PORT: 9999
- API_EXTERNAL_URL: ${API_EXTERNAL_URL}
-
- GOTRUE_DB_DRIVER: postgres
- GOTRUE_DB_DATABASE_URL: postgres://supabase_auth_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
-
- GOTRUE_SITE_URL: ${SITE_URL}
- GOTRUE_URI_ALLOW_LIST: ${ADDITIONAL_REDIRECT_URLS}
- GOTRUE_DISABLE_SIGNUP: ${DISABLE_SIGNUP}
-
- GOTRUE_JWT_ADMIN_ROLES: service_role
- GOTRUE_JWT_AUD: authenticated
- GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated
- GOTRUE_JWT_EXP: ${JWT_EXPIRY}
- GOTRUE_JWT_SECRET: ${JWT_SECRET}
-
- GOTRUE_EXTERNAL_EMAIL_ENABLED: ${ENABLE_EMAIL_SIGNUP}
- GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED: ${ENABLE_ANONYMOUS_USERS}
- GOTRUE_MAILER_AUTOCONFIRM: ${ENABLE_EMAIL_AUTOCONFIRM}
-
- # Uncomment to bypass nonce check in ID Token flow. Commonly set to true when using Google Sign In on mobile.
- # GOTRUE_EXTERNAL_SKIP_NONCE_CHECK: true
-
- # GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED: true
- # GOTRUE_SMTP_MAX_FREQUENCY: 1s
- GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_ADMIN_EMAIL}
- GOTRUE_SMTP_HOST: ${SMTP_HOST}
- GOTRUE_SMTP_PORT: ${SMTP_PORT}
- GOTRUE_SMTP_USER: ${SMTP_USER}
- GOTRUE_SMTP_PASS: ${SMTP_PASS}
- GOTRUE_SMTP_SENDER_NAME: ${SMTP_SENDER_NAME}
- GOTRUE_MAILER_URLPATHS_INVITE: ${MAILER_URLPATHS_INVITE}
- GOTRUE_MAILER_URLPATHS_CONFIRMATION: ${MAILER_URLPATHS_CONFIRMATION}
- GOTRUE_MAILER_URLPATHS_RECOVERY: ${MAILER_URLPATHS_RECOVERY}
- GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE: ${MAILER_URLPATHS_EMAIL_CHANGE}
-
- GOTRUE_EXTERNAL_PHONE_ENABLED: ${ENABLE_PHONE_SIGNUP}
- GOTRUE_SMS_AUTOCONFIRM: ${ENABLE_PHONE_AUTOCONFIRM}
- # Uncomment to enable custom access token hook. Please see: https://supabase.com/docs/guides/auth/auth-hooks for full list of hooks and additional details about custom_access_token_hook
-
- # GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: "true"
- # GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI: "pg-functions://postgres/public/custom_access_token_hook"
- # GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_SECRETS: ""
-
- # GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: "true"
- # GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI: "pg-functions://postgres/public/mfa_verification_attempt"
-
- # GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: "true"
- # GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: "pg-functions://postgres/public/password_verification_attempt"
-
- # GOTRUE_HOOK_SEND_SMS_ENABLED: "false"
- # GOTRUE_HOOK_SEND_SMS_URI: "pg-functions://postgres/public/custom_access_token_hook"
- # GOTRUE_HOOK_SEND_SMS_SECRETS: "v1,whsec_VGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2hvcnRlciBCYXNlNjQgc3RyaW5n"
-
- # GOTRUE_HOOK_SEND_EMAIL_ENABLED: "false"
- # GOTRUE_HOOK_SEND_EMAIL_URI: "http://host.docker.internal:54321/functions/v1/email_sender"
- # GOTRUE_HOOK_SEND_EMAIL_SECRETS: "v1,whsec_VGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2hvcnRlciBCYXNlNjQgc3RyaW5n"
-
- rest:
- container_name: supabase-rest
- image: postgrest/postgrest:v14.1
- restart: unless-stopped
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- analytics:
- condition: service_healthy
- environment:
- PGRST_DB_URI: postgres://authenticator:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
- PGRST_DB_SCHEMAS: ${PGRST_DB_SCHEMAS}
- PGRST_DB_ANON_ROLE: anon
- PGRST_JWT_SECRET: ${JWT_SECRET}
- PGRST_DB_USE_LEGACY_GUCS: "false"
- PGRST_APP_SETTINGS_JWT_SECRET: ${JWT_SECRET}
- PGRST_APP_SETTINGS_JWT_EXP: ${JWT_EXPIRY}
- command:
- [
- "postgrest"
- ]
-
- realtime:
- # This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
- container_name: realtime-dev.supabase-realtime
- image: supabase/realtime:v2.68.0
- restart: unless-stopped
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- analytics:
- condition: service_healthy
- healthcheck:
- test:
- [
- "CMD-SHELL",
- "curl -sSfL --head -o /dev/null -H \"Authorization: Bearer ${ANON_KEY}\" http://localhost:4000/api/tenants/realtime-dev/health"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- environment:
- PORT: 4000
- DB_HOST: ${POSTGRES_HOST}
- DB_PORT: ${POSTGRES_PORT}
- DB_USER: supabase_admin
- DB_PASSWORD: ${POSTGRES_PASSWORD}
- DB_NAME: ${POSTGRES_DB}
- DB_AFTER_CONNECT_QUERY: 'SET search_path TO _realtime'
- DB_ENC_KEY: supabaserealtime
- API_JWT_SECRET: ${JWT_SECRET}
- SECRET_KEY_BASE: ${SECRET_KEY_BASE}
- ERL_AFLAGS: -proto_dist inet_tcp
- DNS_NODES: "''"
- RLIMIT_NOFILE: "10000"
- APP_NAME: realtime
- SEED_SELF_HOST: "true"
- RUN_JANITOR: "true"
-
- # To use S3 backed storage: docker compose -f docker-compose.yml -f docker-compose.s3.yml up
- storage:
- container_name: supabase-storage
- image: supabase/storage-api:v1.33.0
- restart: unless-stopped
- volumes:
- - ./volumes/storage:/var/lib/storage:z
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--no-verbose",
- "--tries=1",
- "--spider",
- "http://storage:5000/status"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- rest:
- condition: service_started
- imgproxy:
- condition: service_started
- environment:
- ANON_KEY: ${ANON_KEY}
- SERVICE_KEY: ${SERVICE_ROLE_KEY}
- POSTGREST_URL: http://rest:3000
- PGRST_JWT_SECRET: ${JWT_SECRET}
- DATABASE_URL: postgres://supabase_storage_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
- REQUEST_ALLOW_X_FORWARDED_PATH: "true"
- FILE_SIZE_LIMIT: 52428800
- STORAGE_BACKEND: file
- FILE_STORAGE_BACKEND_PATH: /var/lib/storage
- TENANT_ID: stub
- # TODO: https://github.com/supabase/storage-api/issues/55
- REGION: stub
- GLOBAL_S3_BUCKET: stub
- ENABLE_IMAGE_TRANSFORMATION: "true"
- IMGPROXY_URL: http://imgproxy:5001
-
- imgproxy:
- container_name: supabase-imgproxy
- image: darthsim/imgproxy:v3.8.0
- restart: unless-stopped
- volumes:
- - ./volumes/storage:/var/lib/storage:z
- healthcheck:
- test:
- [
- "CMD",
- "imgproxy",
- "health"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- environment:
- IMGPROXY_BIND: ":5001"
- IMGPROXY_LOCAL_FILESYSTEM_ROOT: /
- IMGPROXY_USE_ETAG: "true"
- IMGPROXY_ENABLE_WEBP_DETECTION: ${IMGPROXY_ENABLE_WEBP_DETECTION}
-
- meta:
- container_name: supabase-meta
- image: supabase/postgres-meta:v0.95.1
- restart: unless-stopped
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- analytics:
- condition: service_healthy
- environment:
- PG_META_PORT: 8080
- PG_META_DB_HOST: ${POSTGRES_HOST}
- PG_META_DB_PORT: ${POSTGRES_PORT}
- PG_META_DB_NAME: ${POSTGRES_DB}
- PG_META_DB_USER: supabase_admin
- PG_META_DB_PASSWORD: ${POSTGRES_PASSWORD}
- CRYPTO_KEY: ${PG_META_CRYPTO_KEY}
-
- functions:
- container_name: supabase-edge-functions
- image: supabase/edge-runtime:v1.69.28
- restart: unless-stopped
- volumes:
- - ./volumes/functions:/home/deno/functions:Z
- depends_on:
- analytics:
- condition: service_healthy
- environment:
- JWT_SECRET: ${JWT_SECRET}
- SUPABASE_URL: http://kong:8000
- SUPABASE_ANON_KEY: ${ANON_KEY}
- SUPABASE_SERVICE_ROLE_KEY: ${SERVICE_ROLE_KEY}
- SUPABASE_DB_URL: postgresql://postgres:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
- # TODO: Allow configuring VERIFY_JWT per function. This PR might help: https://github.com/supabase/cli/pull/786
- VERIFY_JWT: "${FUNCTIONS_VERIFY_JWT}"
- command:
- [
- "start",
- "--main-service",
- "/home/deno/functions/main"
- ]
-
- analytics:
- container_name: supabase-analytics
- image: supabase/logflare:1.27.0
- restart: unless-stopped
- ports:
- - 4000:4000
- # Uncomment to use Big Query backend for analytics
- # volumes:
- # - type: bind
- # source: ${PWD}/gcloud.json
- # target: /opt/app/rel/logflare/bin/gcloud.json
- # read_only: true
- healthcheck:
- test:
- [
- "CMD",
- "curl",
- "http://localhost:4000/health"
- ]
- timeout: 5s
- interval: 5s
- retries: 10
- depends_on:
- db:
- # Disable this if you are using an external Postgres database
- condition: service_healthy
- environment:
- LOGFLARE_NODE_HOST: 127.0.0.1
- DB_USERNAME: supabase_admin
- DB_DATABASE: _supabase
- DB_HOSTNAME: ${POSTGRES_HOST}
- DB_PORT: ${POSTGRES_PORT}
- DB_PASSWORD: ${POSTGRES_PASSWORD}
- DB_SCHEMA: _analytics
- LOGFLARE_PUBLIC_ACCESS_TOKEN: ${LOGFLARE_PUBLIC_ACCESS_TOKEN}
- LOGFLARE_PRIVATE_ACCESS_TOKEN: ${LOGFLARE_PRIVATE_ACCESS_TOKEN}
- LOGFLARE_SINGLE_TENANT: true
- LOGFLARE_SUPABASE_MODE: true
-
- # Comment variables to use Big Query backend for analytics
- POSTGRES_BACKEND_URL: postgresql://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/_supabase
- POSTGRES_BACKEND_SCHEMA: _analytics
- LOGFLARE_FEATURE_FLAG_OVERRIDE: multibackend=true
- # Uncomment to use Big Query backend for analytics
- # GOOGLE_PROJECT_ID: ${GOOGLE_PROJECT_ID}
- # GOOGLE_PROJECT_NUMBER: ${GOOGLE_PROJECT_NUMBER}
-
- # Comment out everything below this point if you are using an external Postgres database
- db:
- container_name: supabase-db
- image: supabase/postgres:15.8.1.085
- restart: unless-stopped
- volumes:
- - ./volumes/db/realtime.sql:/docker-entrypoint-initdb.d/migrations/99-realtime.sql:Z
- # Must be superuser to create event trigger
- - ./volumes/db/webhooks.sql:/docker-entrypoint-initdb.d/init-scripts/98-webhooks.sql:Z
- # Must be superuser to alter reserved role
- - ./volumes/db/roles.sql:/docker-entrypoint-initdb.d/init-scripts/99-roles.sql:Z
- # Initialize the database settings with JWT_SECRET and JWT_EXP
- - ./volumes/db/jwt.sql:/docker-entrypoint-initdb.d/init-scripts/99-jwt.sql:Z
- # PGDATA directory is persisted between restarts
- - ./volumes/db/data:/var/lib/postgresql/data:Z
- # Changes required for internal supabase data such as _analytics
- - ./volumes/db/_supabase.sql:/docker-entrypoint-initdb.d/migrations/97-_supabase.sql:Z
- # Changes required for Analytics support
- - ./volumes/db/logs.sql:/docker-entrypoint-initdb.d/migrations/99-logs.sql:Z
- # Changes required for Pooler support
- - ./volumes/db/pooler.sql:/docker-entrypoint-initdb.d/migrations/99-pooler.sql:Z
- # Use named volume to persist pgsodium decryption key between restarts
- - db-config:/etc/postgresql-custom
- healthcheck:
- test:
- [
- "CMD",
- "pg_isready",
- "-U",
- "postgres",
- "-h",
- "localhost"
- ]
- interval: 5s
- timeout: 5s
- retries: 10
- depends_on:
- vector:
- condition: service_healthy
- environment:
- POSTGRES_HOST: /var/run/postgresql
- PGPORT: ${POSTGRES_PORT}
- POSTGRES_PORT: ${POSTGRES_PORT}
- PGPASSWORD: ${POSTGRES_PASSWORD}
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
- PGDATABASE: ${POSTGRES_DB}
- POSTGRES_DB: ${POSTGRES_DB}
- JWT_SECRET: ${JWT_SECRET}
- JWT_EXP: ${JWT_EXPIRY}
- command:
- [
- "postgres",
- "-c",
- "config_file=/etc/postgresql/postgresql.conf",
- "-c",
- "log_min_messages=fatal" # prevents Realtime polling queries from appearing in logs
- ]
-
- vector:
- container_name: supabase-vector
- image: timberio/vector:0.28.1-alpine
- restart: unless-stopped
- volumes:
- - ./volumes/logs/vector.yml:/etc/vector/vector.yml:ro,z
- - ${DOCKER_SOCKET_LOCATION}:/var/run/docker.sock:ro,z
- healthcheck:
- test:
- [
- "CMD",
- "wget",
- "--no-verbose",
- "--tries=1",
- "--spider",
- "http://vector:9001/health"
- ]
- timeout: 5s
- interval: 5s
- retries: 3
- environment:
- LOGFLARE_PUBLIC_ACCESS_TOKEN: ${LOGFLARE_PUBLIC_ACCESS_TOKEN}
- command:
- [
- "--config",
- "/etc/vector/vector.yml"
- ]
- security_opt:
- - "label=disable"
-
- # Update the DATABASE_URL if you are using an external Postgres database
- supavisor:
- container_name: supabase-pooler
- image: supabase/supavisor:2.7.4
- restart: unless-stopped
- ports:
- - ${POSTGRES_PORT}:5432
- - ${POOLER_PROXY_PORT_TRANSACTION}:6543
- volumes:
- - ./volumes/pooler/pooler.exs:/etc/pooler/pooler.exs:ro,z
- healthcheck:
- test:
- [
- "CMD",
- "curl",
- "-sSfL",
- "--head",
- "-o",
- "/dev/null",
- "http://127.0.0.1:4000/api/health"
- ]
- interval: 10s
- timeout: 5s
- retries: 5
- depends_on:
- db:
- condition: service_healthy
- analytics:
- condition: service_healthy
- environment:
- PORT: 4000
- POSTGRES_PORT: ${POSTGRES_PORT}
- POSTGRES_DB: ${POSTGRES_DB}
- POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
- DATABASE_URL: ecto://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/_supabase
- CLUSTER_POSTGRES: true
- SECRET_KEY_BASE: ${SECRET_KEY_BASE}
- VAULT_ENC_KEY: ${VAULT_ENC_KEY}
- API_JWT_SECRET: ${JWT_SECRET}
- METRICS_JWT_SECRET: ${JWT_SECRET}
- REGION: local
- ERL_AFLAGS: -proto_dist inet_tcp
- POOLER_TENANT_ID: ${POOLER_TENANT_ID}
- POOLER_DEFAULT_POOL_SIZE: ${POOLER_DEFAULT_POOL_SIZE}
- POOLER_MAX_CLIENT_CONN: ${POOLER_MAX_CLIENT_CONN}
- POOLER_POOL_MODE: transaction
- DB_POOL_SIZE: ${POOLER_DB_POOL_SIZE}
- command:
- [
- "/bin/sh",
- "-c",
- "/app/bin/migrate && /app/bin/supavisor eval \"$$(cat /etc/pooler/pooler.exs)\" && /app/bin/server"
- ]
-
-volumes:
- db-config:
diff --git a/supabase_pro/env b/supabase_pro/env
deleted file mode 100644
index 6f1398e6..00000000
--- a/supabase_pro/env
+++ /dev/null
@@ -1,130 +0,0 @@
-############
-# Secrets
-# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
-############
-
-POSTGRES_PASSWORD=yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc
-JWT_SECRET=-dxpdu3HzfJmJTDlMKYHGe8hHTGrj45d0gGKM_LEkE9bD2UHWw_axpsa23hhdn7K
-ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzY4ODMwNjI0LCJleHAiOjE5MjY1MTA2MjR9.mDVl-kIOdRK9v6VTxo0TDF8r7X7xk3PZXazaavHyVvg
-SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaXNzIjoic3VwYWJhc2UiLCJpYXQiOjE3Njg4MzA2MjQsImV4cCI6MTkyNjUxMDYyNH0.GsthZc8K5tW5vRlhrYgExnCe7Tg1_UkZx6kIY5IPC1w
-DASHBOARD_USERNAME=supabase
-DASHBOARD_PASSWORD=D4ce5p8YBpfYzEoDGZ_7MzehZcWrdCNyDEj_VSUBmOw
-SECRET_KEY_BASE=64bd64a0d100dee8caa3e56da7cc32931630ba4ba9e34728f9d157210be288cd
-VAULT_ENC_KEY=106e9da1a0d4f3cb14c86114c3cd2059
-PG_META_CRYPTO_KEY=d62d150dfa4795aacd5806496f447388
-
-
-############
-# Database - You can change these to any PostgreSQL database that has logical replication enabled.
-############
-
-POSTGRES_HOST=db
-POSTGRES_DB=postgres
-POSTGRES_PORT=5432
-# default user is postgres
-
-
-############
-# Supavisor -- Database pooler
-############
-# Port Supavisor listens on for transaction pooling connections
-POOLER_PROXY_PORT_TRANSACTION=6543
-# Maximum number of PostgreSQL connections Supavisor opens per pool
-POOLER_DEFAULT_POOL_SIZE=20
-# Maximum number of client connections Supavisor accepts per pool
-POOLER_MAX_CLIENT_CONN=100
-# Unique tenant identifier
-POOLER_TENANT_ID=8bae85a4804d83138813f5cc4fdbbc0d
-# Pool size for internal metadata storage used by Supavisor
-# This is separate from client connections and used only by Supavisor itself
-POOLER_DB_POOL_SIZE=5
-
-
-############
-# API Proxy - Configuration for the Kong Reverse proxy.
-############
-
-KONG_HTTP_PORT=8000
-KONG_HTTPS_PORT=8443
-
-
-############
-# API - Configuration for PostgREST.
-############
-
-PGRST_DB_SCHEMAS=public,storage,graphql_public
-
-
-############
-# Auth - Configuration for the GoTrue authentication server.
-############
-
-## General
-SITE_URL=http://localhost:3000
-ADDITIONAL_REDIRECT_URLS=
-JWT_EXPIRY=3600
-DISABLE_SIGNUP=false
-API_EXTERNAL_URL=http://localhost:8000
-
-## Mailer Config
-MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify"
-MAILER_URLPATHS_INVITE="/auth/v1/verify"
-MAILER_URLPATHS_RECOVERY="/auth/v1/verify"
-MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify"
-
-## Email auth
-ENABLE_EMAIL_SIGNUP=true
-ENABLE_EMAIL_AUTOCONFIRM=true
-SMTP_ADMIN_EMAIL=admin@example.com
-SMTP_HOST=supabase-mail
-SMTP_PORT=2500
-SMTP_USER=fake_mail_user
-SMTP_PASS=fake_mail_password
-SMTP_SENDER_NAME=fake_sender
-ENABLE_ANONYMOUS_USERS=false
-
-## Phone auth
-ENABLE_PHONE_SIGNUP=true
-ENABLE_PHONE_AUTOCONFIRM=true
-
-
-############
-# Studio - Configuration for the Dashboard
-############
-
-STUDIO_DEFAULT_ORGANIZATION=Default Organization
-STUDIO_DEFAULT_PROJECT=Default Project
-
-# replace if you intend to use Studio outside of localhost
-SUPABASE_PUBLIC_URL=http://localhost:8000
-
-# Enable webp support
-IMGPROXY_ENABLE_WEBP_DETECTION=true
-
-# Add your OpenAI API key to enable SQL Editor Assistant
-OPENAI_API_KEY=
-
-
-############
-# Functions - Configuration for Functions
-############
-# NOTE: VERIFY_JWT applies to all functions. Per-function VERIFY_JWT is not supported yet.
-FUNCTIONS_VERIFY_JWT=false
-
-
-############
-# Logs - Configuration for Analytics
-# Please refer to https://supabase.com/docs/reference/self-hosting-analytics/introduction
-############
-
-# Change vector.toml sinks to reflect this change
-# these cannot be the same value
-LOGFLARE_PUBLIC_ACCESS_TOKEN=MVHIdj9wKwZOIAXzE5MJ_4W2VibwR_5TmOyXgJMMAII
-LOGFLARE_PRIVATE_ACCESS_TOKEN=aUXsocT3y3NxZWw2OPIIs5hzJLiwbOkK5aH0YUCxC3I
-
-# Docker socket location - this value will differ depending on your OS
-DOCKER_SOCKET_LOCATION=/var/run/docker.sock
-
-# Google Cloud Project details
-GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID
-GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER
diff --git a/test-nav.js b/test-nav.js
deleted file mode 100644
index d39407f1..00000000
--- a/test-nav.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// 测试 nav.uts 的 findActiveByCurrentPage 函数
-// 模拟 menu.uts 中 maintain 菜单的结构
-
-const maintainMenu = {
- id: "maintain",
- title: "维护",
- groups: [
- {
- id: "dev-config",
- title: "开发配置",
- children: [
- {
- id: "dev-config-category",
- title: "分类配置",
- path: "/pages/mall/admin/maintain/dev-config/category",
- },
- ],
- },
- {
- id: "system-info",
- title: "系统信息",
- path: "/pages/mall/admin/maintain/system-info",
- children: [],
- },
- ],
-};
-
-function normalize(p) {
- if (!p) return "";
- const s = p.startsWith("/") ? p.slice(1) : p;
- const q = s.indexOf("?");
- return q >= 0 ? s.slice(0, q) : s;
-}
-
-function findActiveByCurrentPage(menuList, currentPage) {
- const page = currentPage || "";
-
- // 1) currentPage 直接是一级 menu id
- const mById = menuList.find((m) => m.id === page);
- if (mById) {
- return { activeMenuId: mById.id, activeSubId: "", note: "命中一级菜单" };
- }
-
- // 2) currentPage 是 path(/pages/xxx 或 pages/xxx)
- const pageNorm = normalize(page);
-
- for (const m of menuList) {
- const groups = m.groups || [];
-
- // group / child / 四级 全部扫描
- for (const g of groups) {
- // group 叶子(可选)- 检查 id
- if (g.id === page) {
- return { activeMenuId: m.id, activeSubId: g.id, note: "命中 group.id" };
- }
- // group 叶子(可选)- 检查 path
- if (g.path && normalize(g.path) === pageNorm) {
- return {
- activeMenuId: m.id,
- activeSubId: g.id,
- note: "命中 group.path",
- };
- }
-
- const cs = g.children || [];
- for (const c of cs) {
- // 用 id 命中
- if (c.id === page)
- return {
- activeMenuId: m.id,
- activeSubId: c.id,
- note: "命中 child.id",
- };
- // 用 path 命中
- if (c.path && normalize(c.path) === pageNorm)
- return {
- activeMenuId: m.id,
- activeSubId: c.id,
- note: "命中 child.path",
- };
- }
- }
- }
-
- // 3) 找不到:兜底 home
- return { activeMenuId: "home", activeSubId: "", note: "未命中,兜底到 home" };
-}
-
-// 测试用例
-const testCases = [
- "system-info",
- "/pages/mall/admin/maintain/system-info",
- "pages/mall/admin/maintain/system-info",
- "dev-config-category",
-];
-
-console.log("=== 测试 findActiveByCurrentPage ===\n");
-testCases.forEach((testCase) => {
- const result = findActiveByCurrentPage([maintainMenu], testCase);
- console.log(`输入: "${testCase}"`);
- console.log(
- `结果: activeMenuId="${result.activeMenuId}", activeSubId="${result.activeSubId}"`,
- );
- console.log(`说明: ${result.note}\n`);
-});
diff --git a/test-system-info-nav.js b/test-system-info-nav.js
deleted file mode 100644
index 5e2ea3a9..00000000
--- a/test-system-info-nav.js
+++ /dev/null
@@ -1,142 +0,0 @@
-// 测试 system-info 页面的 nav 匹配逻辑
-
-// 模拟 menu 配置(简化版本)
-const menuList = [
- {
- id: "home",
- title: "首页",
- groups: [],
- },
- {
- id: "maintain",
- title: "维护",
- groups: [
- {
- id: "dev-config",
- title: "开发配置",
- children: [
- {
- id: "dev-config-category",
- title: "配置分类",
- path: "/pages/mall/admin/maintain/dev-config/category",
- },
- ],
- },
- {
- id: "system-info",
- title: "系统信息",
- path: "/pages/mall/admin/maintain/system-info",
- children: [], // 注意:这是一个 group 叶子节点
- },
- ],
- },
-];
-
-// nav.uts 中的匹配逻辑
-function findActiveByCurrentPage(menuList, currentPage) {
- const page = currentPage || "";
-
- // 1) currentPage 直接是一级 menu id
- const mById = menuList.find((m) => m.id === page);
- if (mById) {
- return {
- activeMenuId: mById.id,
- activeSubId: "",
- reason: "一级菜单ID匹配",
- };
- }
-
- // 2) currentPage 是 path(/pages/xxx 或 pages/xxx)
- const pageNorm = normalize(page);
-
- for (const m of menuList) {
- const groups = m.groups ?? [];
-
- // group / child 扫描
- for (const g of groups) {
- // group 叶子 - 检查 id
- if (g.id === page) {
- console.log(`✓ Group ID 匹配: g.id="${g.id}" === page="${page}"`);
- return {
- activeMenuId: m.id,
- activeSubId: g.id,
- reason: "Group ID匹配",
- };
- }
- // group 叶子 - 检查 path
- if (g.path && normalize(g.path) === pageNorm) {
- console.log(
- `✓ Group Path 匹配: normalize("${g.path}") === normalize("${page}")`,
- );
- return {
- activeMenuId: m.id,
- activeSubId: g.id,
- reason: "Group Path匹配",
- };
- }
-
- const cs = g.children ?? [];
- for (const c of cs) {
- // 用 id 命中
- if (c.id === page) {
- console.log(`✓ Child ID 匹配: c.id="${c.id}" === page="${page}"`);
- return {
- activeMenuId: m.id,
- activeSubId: c.id,
- reason: "Child ID匹配",
- };
- }
- // 用 path 命中
- if (c.path && normalize(c.path) === pageNorm) {
- console.log(
- `✓ Child Path 匹配: normalize("${c.path}") === normalize("${page}")`,
- );
- return {
- activeMenuId: m.id,
- activeSubId: c.id,
- reason: "Child Path匹配",
- };
- }
- }
- }
- }
-
- // 3) 找不到:兜底 home
- return { activeMenuId: "home", activeSubId: "", reason: "未匹配,默认home" };
-}
-
-function normalize(p) {
- if (!p) return "";
- const s = p.startsWith("/") ? p.slice(1) : p;
- const q = s.indexOf("?");
- return q >= 0 ? s.slice(0, q) : s;
-}
-
-// 测试用例
-console.log("\n=== 测试 system-info 页面匹配 ===\n");
-
-const testCases = [
- "system-info",
- "/pages/mall/admin/maintain/system-info",
- "pages/mall/admin/maintain/system-info",
-];
-
-testCases.forEach((testPage, idx) => {
- console.log(`\n测试 ${idx + 1}: currentPage = "${testPage}"`);
- const result = findActiveByCurrentPage(menuList, testPage);
- console.log(
- `结果: activeMenuId="${result.activeMenuId}", activeSubId="${result.activeSubId}"`,
- );
- console.log(`原因: ${result.reason}`);
-
- if (
- result.activeMenuId === "maintain" &&
- result.activeSubId === "system-info"
- ) {
- console.log("✅ PASS - 正确匹配到 maintain/system-info");
- } else {
- console.log("❌ FAIL - 应该匹配到 maintain/system-info");
- }
-});
-
-console.log("\n=== 测试完成 ===\n");
diff --git a/types/analytics.uts b/types/analytics.uts
new file mode 100644
index 00000000..b3891595
--- /dev/null
+++ b/types/analytics.uts
@@ -0,0 +1,3 @@
+// types/analytics.uts
+
+export type AnalyticsTypesMigrated = true
diff --git a/types/analytics/common.uts b/types/analytics/common.uts
new file mode 100644
index 00000000..d6e186f6
--- /dev/null
+++ b/types/analytics/common.uts
@@ -0,0 +1,5 @@
+// types/analytics/common.uts
+
+export type TimePeriod = { value: string; label: string }
+export type ChartType = { value: string; label: string }
+export type Metric = { key: string; label: string }
diff --git a/types/analytics/coupon.uts b/types/analytics/coupon.uts
new file mode 100644
index 00000000..985cab5d
--- /dev/null
+++ b/types/analytics/coupon.uts
@@ -0,0 +1,11 @@
+// types/analytics/coupon.uts
+
+export type CouponData = {
+ total_issued: number
+ issued_growth: number
+ total_used: number
+ usage_rate: number
+ gmv_increase: number
+ gmv_growth: number
+ roi: number
+}
diff --git a/types/analytics/custom-report.uts b/types/analytics/custom-report.uts
new file mode 100644
index 00000000..c52f4298
--- /dev/null
+++ b/types/analytics/custom-report.uts
@@ -0,0 +1,29 @@
+// types/analytics/custom-report.uts
+
+import type { Metric, TimePeriod, ChartType } from './common.uts'
+
+export type CustomReport = {
+ id: string
+ name: string
+ description: string
+ metrics: Array
+ charts: Array
+ updated_at: string
+ period?: string
+}
+
+export type ReportForm = {
+ name: string
+ description: string
+ metrics: Array
+ period: string
+ chartType: string
+}
+
+export type ReportFormErrors = {
+ name: string
+ description: string
+ metrics: string
+ period: string
+ chartType: string
+}
diff --git a/types/analytics/dashboard.uts b/types/analytics/dashboard.uts
new file mode 100644
index 00000000..f73c7c96
--- /dev/null
+++ b/types/analytics/dashboard.uts
@@ -0,0 +1,7 @@
+// types/analytics/dashboard.uts
+
+export type TrendData = { x: Array; gmv: Array; orders: Array }
+export type SegmentItem = { name: string; value: number }
+export type TrafficItem = { name: string; value: number }
+export type TopProductItem = { id: string; rank: number; name: string; sales: number }
+export type TopMerchantItem = { id: string; rank: number; name: string; sales: number; growth: number }
diff --git a/types/analytics/data-detail.uts b/types/analytics/data-detail.uts
new file mode 100644
index 00000000..76d09564
--- /dev/null
+++ b/types/analytics/data-detail.uts
@@ -0,0 +1,4 @@
+// types/analytics/data-detail.uts
+
+export type TableColumn = { key: string; label: string; type: string; sortable: boolean }
+export type DrillDownItem = { id: string; label: string; value: string; type: string }
diff --git a/types/analytics/delivery.uts b/types/analytics/delivery.uts
new file mode 100644
index 00000000..203451dd
--- /dev/null
+++ b/types/analytics/delivery.uts
@@ -0,0 +1,25 @@
+// types/analytics/delivery.uts
+
+/**
+ * Key Performance Indicators for the Delivery Analysis page.
+ */
+export type DeliveryData = {
+ avg_delivery_time: number;
+ time_growth: number;
+ total_fee: number;
+ avg_fee: number;
+ avg_orders_per_driver: number;
+ satisfaction_rate: number;
+ satisfaction_growth: number;
+};
+
+/**
+ * Represents a driver's ranking based on performance.
+ */
+export type DriverRank = {
+ id: string;
+ rank: number;
+ name: string;
+ orders: number;
+ rating: number
+};
diff --git a/types/analytics/insight.uts b/types/analytics/insight.uts
new file mode 100644
index 00000000..f86175a3
--- /dev/null
+++ b/types/analytics/insight.uts
@@ -0,0 +1,19 @@
+// types/analytics/insight.uts
+
+export type InsightDetail = {
+ id: string
+ report_id: string
+ type: string
+ impact: string
+ title: string
+ content: string
+ created_at: string
+}
+
+export type RelatedReport = {
+ id: string
+ title: string
+ type: string
+ period: string
+ generated_at: string
+}
diff --git a/types/analytics/market.uts b/types/analytics/market.uts
new file mode 100644
index 00000000..8ea60a5c
--- /dev/null
+++ b/types/analytics/market.uts
@@ -0,0 +1,9 @@
+// types/analytics/market.uts
+
+export type MarketTrendsResponse = {
+ trendRows: any
+ categoryRows: any
+ seasonalRows: any
+ priceRows: any
+ competitionRows: any
+}
diff --git a/types/analytics/product.uts b/types/analytics/product.uts
new file mode 100644
index 00000000..46286048
--- /dev/null
+++ b/types/analytics/product.uts
@@ -0,0 +1,14 @@
+// types/analytics/product.uts
+
+export type ProductData = {
+ total_products: number
+ product_growth: number
+ hot_products: number
+ turnover_rate: number
+ turnover_growth: number
+ avg_stock: number
+ stock_growth: number
+}
+
+export type ProductRank = { id: string; rank: number; name: string; sales: number; growth: number }
+export type ProductTrendRow = { date: string; gmv: number; qty: number; orders: number }
diff --git a/types/analytics/profile.uts b/types/analytics/profile.uts
new file mode 100644
index 00000000..610d0221
--- /dev/null
+++ b/types/analytics/profile.uts
@@ -0,0 +1,38 @@
+// types/analytics/profile.uts
+
+export type ReportStatus = 'pending' | 'ready' | 'failed' | 'scheduled' | 'shared' | string
+
+export type RecentReport = {
+ id: string
+ title: string
+ description: string
+ status: ReportStatus
+ created_at: string
+}
+
+export type OverviewData = {
+ totalSales: string
+ salesGrowth: number
+ totalUsers: string
+ userGrowth: number
+ totalOrders: string
+ orderGrowth: number
+ conversionRate: number
+ conversionGrowth: number
+}
+
+export type ReportCounts = {
+ total: number
+ pending: number
+ scheduled: number
+ shared: number
+}
+
+export type TodayInsights = {
+ hotProduct: string
+ peakTraffic: string
+ conversionAnomaly: string
+ mobileRatio: number
+}
+
+export type TrendDatum = { label: string; sales: number; orders: number }
diff --git a/types/analytics/report-detail.uts b/types/analytics/report-detail.uts
new file mode 100644
index 00000000..3cdc1786
--- /dev/null
+++ b/types/analytics/report-detail.uts
@@ -0,0 +1,46 @@
+// types/analytics/report-detail.uts
+
+export type ReportType = {
+ id: string;
+ title: string;
+ type: string;
+ period: string;
+ generated_at: string;
+ description: string;
+};
+
+export type MetricType = {
+ key: string;
+ label: string;
+ value: number;
+ format: string;
+ icon: string;
+ color: string;
+ change: number;
+};
+
+export type ChartTabType = {
+ key: string;
+ label: string;
+};
+
+export type ChartLegendType = {
+ key: string;
+ label: string;
+ color: string;
+};
+
+export type TableColumnType = {
+ key: string;
+ title: string;
+ width: string;
+ type: string;
+};
+
+export type InsightType = {
+ id: string;
+ type: string;
+ title: string;
+ content: string;
+ impact: string;
+};
diff --git a/types/analytics/sales.uts b/types/analytics/sales.uts
new file mode 100644
index 00000000..55e4757b
--- /dev/null
+++ b/types/analytics/sales.uts
@@ -0,0 +1,22 @@
+// types/analytics/sales.uts
+
+// Re-exporting shared types from dashboard for semantic clarity in the sales context.
+import type { TrendData, TopProductItem, TopMerchantItem } from './dashboard.uts'
+
+export type SalesTrendData = TrendData
+export type ProductRank = TopProductItem
+export type MerchantRank = TopMerchantItem
+
+/**
+ * Key Performance Indicators for the Sales Report page.
+ */
+export type SalesData = {
+ gmv: number
+ gmv_growth: number
+ orders: number
+ order_growth: number
+ conversion_rate: number
+ conversion_growth: number
+ avg_order_amount: number
+ avg_order_growth: number
+}
diff --git a/types/analytics/user.uts b/types/analytics/user.uts
new file mode 100644
index 00000000..216404cb
--- /dev/null
+++ b/types/analytics/user.uts
@@ -0,0 +1,25 @@
+// types/analytics/user.uts
+
+/**
+ * Key Performance Indicators for the User Analysis page.
+ */
+export type UserData = {
+ total_users: number;
+ user_growth: number;
+ new_users: number;
+ new_user_growth: number;
+ active_users: number;
+ active_growth: number;
+ ordering_users: number;
+ ordering_growth: number;
+ paid_users: number;
+ paid_growth: number;
+ new_user_conversion_rate: number;
+ repurchase_rate: number;
+ repurchase_growth: number;
+}
+
+/**
+ * Represents a single step in a conversion funnel.
+ */
+export type FunnelStep = { step: string; value: number };
diff --git a/types/mall-types.uts b/types/mall-types.uts
index 6a54f7ee..de9460f9 100644
--- a/types/mall-types.uts
+++ b/types/mall-types.uts
@@ -85,6 +85,15 @@ export type ProductType = {
sales: number
status: number
created_at: string
+ // 药品相关字段
+ specification?: string | null // 规格说明
+ usage?: string | null // 用法用量
+ side_effects?: string | null // 副作用
+ precautions?: string | null // 注意事项
+ expiry_date?: string | null // 有效期
+ storage_conditions?: string | null // 储存条件
+ approval_number?: string | null // 批准文号
+ tags?: Array | null // 商品标签
}
// 商品SKU类型
diff --git a/uni_modules/ak-req/ak-req.uts b/uni_modules/ak-req/ak-req.uts
index 1c8b5a11..0afd8653 100644
--- a/uni_modules/ak-req/ak-req.uts
+++ b/uni_modules/ak-req/ak-req.uts
@@ -1,4 +1,5 @@
import { AkReqUploadOptions, AkReqOptions, AkReqResponse, AkReqError } from './interface.uts';
+import { SUPA_URL } from '@/ak/config.uts';
// token 持久化 key
const ACCESS_TOKEN_KEY = 'akreq_access_token';
@@ -75,7 +76,7 @@ export class AkReq {
headers = Object.assign({}, headers, { 'apikey': apikey }) as UTSJSONObject;
} try {
const res = await this.request({
- url: 'https://ak3.oulog.com/auth/v1/token?grant_type=refresh_token',
+ url: SUPA_URL + '/auth/v1/token?grant_type=refresh_token',
method: 'POST',
data: ({ refresh_token: refreshToken } as UTSJSONObject),
headers: headers,
@@ -165,7 +166,8 @@ export class AkReq {
try {
data = JSON.parse(strData) as UTSJSONObject;
} catch (e) {
- data = null;
+ // 非 JSON 响应(例如纯文本/空响应/数字等),保持原始字符串,避免 JSON.parse 崩溃
+ data = new UTSJSONObject({ raw: strData });
}
} else {
data = null;
@@ -220,15 +222,23 @@ export class AkReq {
attempt++;
}
const finalRes = lastRes!!;
- // 全局处理 401 未授权:在非 refresh 场景下,清理 token 并跳转登录以避免未捕获错误
+ // 全局处理 401 未授权:在非 refresh 场景下,清理 token。
+ // 测试模式下不强制跳登录页,避免影响任意跳转调试。
if ((finalRes.status === 401) && (skipRefresh !== true)) {
try {
this.clearToken();
uni.showToast({ title: '未授权或登录已过期,请重新登录', icon: 'none' });
} catch (e) {}
try {
- uni.reLaunch({ url: '/pages/user/login' });
- } catch (e) {}
+ // 动态读取配置,避免 ak-req 模块与业务工程强耦合
+ const cfg = require('@/ak/config.uts') as any
+ const isTest = cfg != null ? (cfg.IS_TEST_MODE === true) : false
+ if (!isTest) {
+ uni.reLaunch({ url: '/pages/user/login' });
+ }
+ } catch (e) {
+ try { uni.reLaunch({ url: '/pages/user/login' }); } catch (e2) {}
+ }
}
return finalRes;
}
diff --git a/utils/authRedirect.uts b/utils/authRedirect.uts
new file mode 100644
index 00000000..f3a7be4e
--- /dev/null
+++ b/utils/authRedirect.uts
@@ -0,0 +1,62 @@
+export type AuthRedirectOptions = {
+ loginPath?: string
+ registerPath?: string
+ fallbackUrl?: string
+}
+
+function normalizePath(path: string): string {
+ if (!path) return ''
+ return path.startsWith('/') ? path : `/${path}`
+}
+
+function safeEncode(url: string): string {
+ try {
+ return encodeURIComponent(url)
+ } catch (_) {
+ return url
+ }
+}
+
+export function getCurrentPageUrlWithQuery(): string {
+ const pages = getCurrentPages() as any[]
+ const currentPage = pages.length > 0 ? pages[pages.length - 1] : null
+ if (!currentPage) return ''
+
+ const route = currentPage.route as string | null
+ const options = (currentPage.options ?? {}) as Record
+ if (!route) return ''
+
+ const path = normalizePath(route)
+ const keys = Object.keys(options)
+ if (keys.length === 0) return path
+
+ const query = keys
+ .filter((k) => options[k] != null)
+ .map((k) => `${k}=${encodeURIComponent(String(options[k]))}`)
+ .join('&')
+ return query.length > 0 ? `${path}?${query}` : path
+}
+
+export function toLoginWithRedirect(redirectUrl?: string, opts?: AuthRedirectOptions) {
+ const loginPath = opts?.loginPath ?? '/pages/user/login'
+ const fallback = opts?.fallbackUrl ?? '/pages/mall/consumer/index'
+ const target = (redirectUrl != null && redirectUrl.length > 0)
+ ? redirectUrl
+ : (getCurrentPageUrlWithQuery() || fallback)
+
+ uni.navigateTo({
+ url: `${loginPath}?redirect=${safeEncode(target)}`
+ })
+}
+
+export function toRegisterWithRedirect(redirectUrl?: string, opts?: AuthRedirectOptions) {
+ const registerPath = opts?.registerPath ?? '/pages/user/register'
+ const fallback = opts?.fallbackUrl ?? '/pages/mall/consumer/index'
+ const target = (redirectUrl != null && redirectUrl.length > 0)
+ ? redirectUrl
+ : (getCurrentPageUrlWithQuery() || fallback)
+
+ uni.navigateTo({
+ url: `${registerPath}?redirect=${safeEncode(target)}`
+ })
+}
diff --git a/utils/sapi.uts b/utils/sapi.uts
index 9d44c43e..4662a564 100644
--- a/utils/sapi.uts
+++ b/utils/sapi.uts
@@ -1,4 +1,4 @@
-import { supabase, ensureSupabaseReady } from '@/components/supadb/aksupainstance.uts'
+import supabase, { supaReady } from '@/components/supadb/aksupainstance.uts'
import type { UserProfile } from '@/types/mall-types.uts'
/**
@@ -8,8 +8,8 @@ import type { UserProfile } from '@/types/mall-types.uts'
*/
export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise {
try {
- await ensureSupabaseReady()
-
+ await supaReady
+
// 从 sessionUser 中获取用户ID和邮箱
const userId = sessionUser.getString('id')
const email = sessionUser.getString('email') ?? ''
@@ -19,16 +19,25 @@ export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise