From 28787e5b29213dd03c4278897889d119004d4aa7 Mon Sep 17 00:00:00 2001
From: wangys <3401275564@qq.com>
Date: Tue, 2 Dec 2025 15:55:30 +0800
Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E9=A1=B9=E7=9B=AE=E7=BB=93?=
=?UTF-8?q?=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Makefile | 116 +++
README.md | 228 +++++-
docker-compose.dev.yml | 263 ++++++
docker/nginx/conf.d/default.conf | 196 +++++
docker/nginx/nginx.dev.conf | 42 +
docs/前端完整指南.md | 563 +++++++++++++
docs/数据库优化方案总结.md | 357 --------
docs/数据库完整指南.md | 774 ++++++++++++++++++
docs/数据库表结构速查.md | 599 --------------
docs/数据库设计交付总结.md | 511 ------------
docs/数据库设计文档.md | 698 ----------------
urbanLifelineServ/gateway/Dockerfile.dev | 13 +
.../packages/portal/Dockerfile.dev | 21 +
urbanLifelineWeb/packages/portal/index.html | 32 +
.../portal/src/views/ImportMapsExample.vue | 156 ++++
.../packages/shared/Dockerfile.dev | 22 +
urbanLifelineWeb/packages/shared/package.json | 28 +
.../packages/shared/vite.config.esm.ts | 93 +++
18 files changed, 2545 insertions(+), 2167 deletions(-)
create mode 100644 Makefile
create mode 100644 docker-compose.dev.yml
create mode 100644 docker/nginx/conf.d/default.conf
create mode 100644 docker/nginx/nginx.dev.conf
create mode 100644 docs/前端完整指南.md
delete mode 100644 docs/数据库优化方案总结.md
create mode 100644 docs/数据库完整指南.md
delete mode 100644 docs/数据库表结构速查.md
delete mode 100644 docs/数据库设计交付总结.md
delete mode 100644 docs/数据库设计文档.md
create mode 100644 urbanLifelineServ/gateway/Dockerfile.dev
create mode 100644 urbanLifelineWeb/packages/portal/Dockerfile.dev
create mode 100644 urbanLifelineWeb/packages/portal/index.html
create mode 100644 urbanLifelineWeb/packages/portal/src/views/ImportMapsExample.vue
create mode 100644 urbanLifelineWeb/packages/shared/Dockerfile.dev
create mode 100644 urbanLifelineWeb/packages/shared/package.json
create mode 100644 urbanLifelineWeb/packages/shared/vite.config.esm.ts
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..88cd4d1
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,116 @@
+# Urban Lifeline 开发环境快捷命令
+
+.PHONY: help up down logs restart clean build ps
+
+# 默认目标
+.DEFAULT_GOAL := help
+
+# 帮助信息
+help:
+ @echo "========================================="
+ @echo " 泰豪电源 Urban Lifeline 开发环境"
+ @echo "========================================="
+ @echo ""
+ @echo "可用命令:"
+ @echo " make up - 启动所有服务"
+ @echo " make down - 停止所有服务"
+ @echo " make restart - 重启所有服务"
+ @echo " make logs - 查看所有服务日志"
+ @echo " make ps - 查看服务状态"
+ @echo " make build - 重新构建镜像"
+ @echo " make clean - 清理所有数据(慎用)"
+ @echo ""
+ @echo "单独服务操作:"
+ @echo " make logs-portal - 查看主应用日志"
+ @echo " make logs-gateway - 查看网关日志"
+ @echo " make restart-portal - 重启主应用"
+ @echo " make shell-portal - 进入主应用容器"
+ @echo ""
+
+# 启动所有服务
+up:
+ @echo "启动开发环境..."
+ docker-compose -f docker-compose.dev.yml up -d
+ @echo "服务启动中,请稍候..."
+ @sleep 5
+ @echo ""
+ @echo "访问地址:"
+ @echo " 主应用: http://localhost"
+ @echo " 招投标: http://localhost/bidding"
+ @echo " 智能客服: http://localhost/customer-service"
+ @echo " Gateway: http://localhost/api"
+ @echo " Nacos: http://localhost/nacos"
+ @echo ""
+
+# 停止所有服务
+down:
+ @echo "停止所有服务..."
+ docker-compose -f docker-compose.dev.yml down
+
+# 查看日志
+logs:
+ docker-compose -f docker-compose.dev.yml logs -f
+
+# 重启所有服务
+restart:
+ @echo "重启所有服务..."
+ docker-compose -f docker-compose.dev.yml restart
+
+# 查看服务状态
+ps:
+ docker-compose -f docker-compose.dev.yml ps
+
+# 重新构建镜像
+build:
+ @echo "重新构建所有镜像..."
+ docker-compose -f docker-compose.dev.yml build --no-cache
+
+# 清理所有数据(危险操作)
+clean:
+ @echo "警告:此操作将删除所有容器、数据卷和镜像!"
+ @read -p "确认继续吗?(y/N): " confirm && [ "$$confirm" = "y" ] || exit 1
+ docker-compose -f docker-compose.dev.yml down -v
+ docker system prune -af
+
+# ==================== 单独服务操作 ====================
+
+# Portal 日志
+logs-portal:
+ docker-compose -f docker-compose.dev.yml logs -f portal
+
+# Gateway 日志
+logs-gateway:
+ docker-compose -f docker-compose.dev.yml logs -f gateway
+
+# Nginx 日志
+logs-nginx:
+ docker-compose -f docker-compose.dev.yml logs -f nginx
+
+# 共享包日志
+logs-shared:
+ docker-compose -f docker-compose.dev.yml logs -f shared
+
+# 重启 Portal
+restart-portal:
+ docker-compose -f docker-compose.dev.yml restart portal
+
+# 重启 Gateway
+restart-gateway:
+ docker-compose -f docker-compose.dev.yml restart gateway
+
+# 进入 Portal 容器
+shell-portal:
+ docker-compose -f docker-compose.dev.yml exec portal sh
+
+# 进入 Gateway 容器
+shell-gateway:
+ docker-compose -f docker-compose.dev.yml exec gateway sh
+
+# 进入数据库
+db:
+ docker-compose -f docker-compose.dev.yml exec postgres psql -U postgres -d urban_lifeline
+
+# 初始化数据库
+db-init:
+ @echo "初始化数据库..."
+ docker-compose -f docker-compose.dev.yml exec postgres psql -U postgres -d urban_lifeline -f /docker-entrypoint-initdb.d/initAll.sql
diff --git a/README.md b/README.md
index de60680..f07ca5e 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,227 @@
-# urbanLifeline
+# 泰豪电源 AI 数智化平台
-城市生命线
\ No newline at end of file
+城市生命线智能管理系统 - Urban Lifeline
+
+## 项目简介
+
+基于 **"一个底座、多种智能体"** 架构的企业级 AI 数智化平台,包含四大核心业务模块:
+
+1. **资料管理智能化** - 智能文档管理与检索
+2. **招投标自动化** - 招投标全流程智能化
+3. **售后客服智能化** - AI 驱动的智能客服系统
+4. **企业内部知识协同** - 知识库管理与协作
+
+## 技术架构
+
+### 后端技术栈
+
+- **Java 21** + **Spring Boot 3.5**
+- **Spring Cloud Gateway** - API 网关
+- **Nacos** - 服务注册与配置中心
+- **PostgreSQL 16** - 主数据库
+- **Redis 7** - 缓存
+- **Dubbo 3.3** - RPC 框架
+
+### 前端技术栈
+
+- **Vue 3.5** (`
+```
+
+**工作原理**:
+1. 共享包构建为 ES Module (`components.js`)
+2. 部署到独立 HTTP 服务 (`http://localhost:5000`)
+3. 通过 Nginx 统一代理 (`http://localhost/shared/`)
+4. 浏览器通过 Import Maps 直接加载
+
+## 快速开始
+
+### 方式一:Docker Compose(推荐)
+
+```bash
+# 1. 启动所有服务(自动构建)
+make up
+
+# 2. 等待服务启动(约1-2分钟)
+make ps
+
+# 3. 访问应用
+open http://localhost
+```
+
+### 方式二:本地开发
+
+```bash
+# 1. 安装依赖
+pnpm install
+
+# 2. 启动后端服务(需要 Java 21)
+cd urbanLifelineServ
+mvn spring-boot:run
+
+# 3. 启动前端服务
+cd urbanLifelineWeb
+pnpm dev
+
+# 4. 访问
+open http://localhost:3000
+```
+
+## 项目结构
+
+```
+urbanLifeline/
+├── urbanLifelineServ/ # 后端服务(Spring Boot)
+│ ├── gateway/ # API 网关
+│ ├── auth/ # 认证服务
+│ ├── system/ # 系统服务
+│ ├── file/ # 文件服务
+│ └── common/ # 公共模块
+│
+├── urbanLifelineWeb/ # 前端应用(Vue 3 Monorepo)
+│ ├── packages/
+│ │ ├── shared/ # 共享组件库
+│ │ │ ├── components/ # 公共组件
+│ │ │ ├── utils/ # 工具函数
+│ │ │ ├── api/ # API 封装
+│ │ │ └── composables/ # 组合式函数
+│ │ ├── portal/ # 主应用
+│ │ ├── app-bidding/ # 招投标应用
+│ │ └── app-knowledge/ # 知识协同应用
+│ ├── pnpm-workspace.yaml
+│ └── turbo.json
+│
+├── docker-compose.dev.yml # Docker 开发环境
+├── Makefile # 快捷命令
+└── docs/ # 文档
+ ├── 前端完整指南.md # ⭐ 前端全流程文档
+ └── 数据库设计文档.md # ⭐ 数据库全流程文档
+```
+
+## 访问地址
+
+| 应用 | 地址 | 说明 |
+|------|------|------|
+| **主应用** | http://localhost/ | Portal 统一入口 |
+| **招投标** | http://localhost/bidding | 招投标智能体 |
+| **智能客服** | http://localhost/customer-service | 客服系统 |
+| **共享组件** | http://localhost/shared/components.js | ES Module |
+| **API 网关** | http://localhost/api | Gateway |
+| **Nacos** | http://localhost/nacos | 注册中心 |
+
+## 常用命令
+
+```bash
+# Docker 环境
+make up # 启动所有服务
+make down # 停止所有服务
+make logs # 查看日志
+make ps # 查看服务状态
+make restart # 重启服务
+make clean # 清理所有数据
+
+# 单独服务
+make logs-portal # 查看主应用日志
+make logs-gateway # 查看网关日志
+make restart-portal # 重启主应用
+make shell-portal # 进入容器
+make db # 连接数据库
+
+# 前端开发
+pnpm dev # 启动所有应用
+pnpm build # 构建所有应用
+pnpm --filter portal dev # 启动单个应用
+pnpm --filter portal build # 构建单个应用
+```
+
+## 文档索引
+
+- **[前端完整指南](./docs/前端完整指南.md)** - ⭐ 架构、开发、部署全流程
+- **[数据库完整指南](./docs/数据库完整指南.md)** - ⭐ Schema、表结构、优化方案
+
+## 核心亮点
+
+### 1. 共享组件运行时加载
+
+```html
+
+
+```
+
+```vue
+
+```
+
+### 2. Monorepo + Turborepo
+
+- 统一依赖管理
+- 增量构建加速
+- 任务并行执行
+- 远程缓存
+
+### 3. Docker 一键启动
+
+- 所有服务容器化
+- Nginx 统一网关
+- 支持热更新(HMR)
+- 数据持久化
+
+### 4. TypeScript 全栈
+
+- 类型安全
+- 智能提示
+- 重构友好
+
+## 环境要求
+
+### Docker 环境(推荐)
+- Docker 20.10+
+- Docker Compose 2.0+
+
+### 本地开发
+- Node.js 20+
+- pnpm 9+
+- Java 21+
+- Maven 3.9+
+- PostgreSQL 16+
+
+## 开发规范
+
+- **前端**:ESLint + Prettier + Husky
+- **提交规范**:Conventional Commits
+- **分支策略**:Git Flow
+- **代码审查**:必须 Code Review
+
+## License
+
+MIT
+
+---
+
+**Built with ❤️ by Taihao Team**
\ No newline at end of file
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
new file mode 100644
index 0000000..cef0d8b
--- /dev/null
+++ b/docker-compose.dev.yml
@@ -0,0 +1,263 @@
+version: '3.8'
+
+# 开发环境完整部署配置
+services:
+
+ # ================== 基础服务 ==================
+
+ # PostgreSQL 数据库
+ postgres:
+ image: postgres:16-alpine
+ container_name: ul-postgres
+ environment:
+ POSTGRES_DB: urban_lifeline
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres123
+ TZ: Asia/Shanghai
+ ports:
+ - "5432:5432"
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+ - ./urbanLifelineServ/.bin/database/postgres/sql:/docker-entrypoint-initdb.d
+ networks:
+ - ul-network
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ # Redis
+ redis:
+ image: redis:7-alpine
+ container_name: ul-redis
+ ports:
+ - "6379:6379"
+ volumes:
+ - redis_data:/data
+ networks:
+ - ul-network
+ command: redis-server --appendonly yes
+
+ # Nacos 注册中心
+ nacos:
+ image: nacos/nacos-server:v2.3.0
+ container_name: ul-nacos
+ environment:
+ MODE: standalone
+ SPRING_DATASOURCE_PLATFORM: mysql
+ PREFER_HOST_MODE: hostname
+ JVM_XMS: 512m
+ JVM_XMX: 512m
+ JVM_XMN: 256m
+ ports:
+ - "8848:8848"
+ - "9848:9848"
+ volumes:
+ - nacos_data:/home/nacos/data
+ networks:
+ - ul-network
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8848/nacos"]
+ interval: 10s
+ timeout: 5s
+ retries: 10
+
+ # ================== 后端服务 ==================
+
+ # Gateway 网关服务
+ gateway:
+ build:
+ context: ./urbanLifelineServ/gateway
+ dockerfile: Dockerfile.dev
+ container_name: ul-gateway
+ environment:
+ SPRING_PROFILES_ACTIVE: dev
+ NACOS_SERVER_ADDR: nacos:8848
+ POSTGRES_HOST: postgres
+ POSTGRES_PORT: 5432
+ REDIS_HOST: redis
+ REDIS_PORT: 6379
+ ports:
+ - "8080:8080"
+ volumes:
+ - ./urbanLifelineServ/gateway:/app
+ - maven_cache:/root/.m2
+ networks:
+ - ul-network
+ depends_on:
+ postgres:
+ condition: service_healthy
+ nacos:
+ condition: service_healthy
+ command: mvn spring-boot:run
+
+ # 认证服务
+ auth-service:
+ build:
+ context: ./urbanLifelineServ/auth
+ dockerfile: Dockerfile.dev
+ container_name: ul-auth
+ environment:
+ SPRING_PROFILES_ACTIVE: dev
+ NACOS_SERVER_ADDR: nacos:8848
+ POSTGRES_HOST: postgres
+ REDIS_HOST: redis
+ volumes:
+ - ./urbanLifelineServ/auth:/app
+ - maven_cache:/root/.m2
+ networks:
+ - ul-network
+ depends_on:
+ - postgres
+ - nacos
+
+ # 系统服务
+ system-service:
+ build:
+ context: ./urbanLifelineServ/system
+ dockerfile: Dockerfile.dev
+ container_name: ul-system
+ environment:
+ SPRING_PROFILES_ACTIVE: dev
+ NACOS_SERVER_ADDR: nacos:8848
+ POSTGRES_HOST: postgres
+ volumes:
+ - ./urbanLifelineServ/system:/app
+ - maven_cache:/root/.m2
+ networks:
+ - ul-network
+ depends_on:
+ - postgres
+ - nacos
+
+ # ================== 前端服务 ==================
+
+ # 共享包服务(Module Federation Remote)
+ shared:
+ build:
+ context: ./urbanLifelineWeb
+ dockerfile: packages/shared/Dockerfile.dev
+ container_name: ul-shared
+ ports:
+ - "5000:5000"
+ volumes:
+ - ./urbanLifelineWeb/packages/shared:/app
+ - /app/node_modules
+ - pnpm_store:/root/.local/share/pnpm/store
+ networks:
+ - ul-network
+ environment:
+ - VITE_PORT=5000
+ - CHOKIDAR_USEPOLLING=true # 支持 Docker 内文件监听
+ command: pnpm dev
+
+ # 主应用(Portal)
+ portal:
+ build:
+ context: ./urbanLifelineWeb
+ dockerfile: packages/portal/Dockerfile.dev
+ container_name: ul-portal
+ ports:
+ - "3000:3000"
+ volumes:
+ - ./urbanLifelineWeb/packages/portal:/app
+ - ./urbanLifelineWeb/packages/shared:/shared
+ - /app/node_modules
+ - pnpm_store:/root/.local/share/pnpm/store
+ networks:
+ - ul-network
+ environment:
+ - VITE_PORT=3000
+ - VITE_API_BASE_URL=http://nginx/api
+ - VITE_SHARED_REMOTE=http://nginx/shared
+ - CHOKIDAR_USEPOLLING=true
+ depends_on:
+ - shared
+ command: pnpm dev
+
+ # 招投标应用
+ app-bidding:
+ build:
+ context: ./urbanLifelineWeb
+ dockerfile: packages/app-bidding/Dockerfile.dev
+ container_name: ul-app-bidding
+ ports:
+ - "3001:3001"
+ volumes:
+ - ./urbanLifelineWeb/packages/app-bidding:/app
+ - ./urbanLifelineWeb/packages/shared:/shared
+ - /app/node_modules
+ - pnpm_store:/root/.local/share/pnpm/store
+ networks:
+ - ul-network
+ environment:
+ - VITE_PORT=3001
+ - VITE_API_BASE_URL=http://nginx/api
+ - VITE_SHARED_REMOTE=http://nginx/shared
+ - CHOKIDAR_USEPOLLING=true
+ depends_on:
+ - shared
+ command: pnpm dev
+
+ # 智能客服应用
+ app-customer-service:
+ build:
+ context: ./urbanLifelineWeb
+ dockerfile: packages/app-customer-service/Dockerfile.dev
+ container_name: ul-app-cs
+ ports:
+ - "3002:3002"
+ volumes:
+ - ./urbanLifelineWeb/packages/app-customer-service:/app
+ - ./urbanLifelineWeb/packages/shared:/shared
+ - /app/node_modules
+ - pnpm_store:/root/.local/share/pnpm/store
+ networks:
+ - ul-network
+ environment:
+ - VITE_PORT=3002
+ - VITE_API_BASE_URL=http://nginx/api
+ - VITE_SHARED_REMOTE=http://nginx/shared
+ - CHOKIDAR_USEPOLLING=true
+ depends_on:
+ - shared
+ command: pnpm dev
+
+ # ================== 统一网关 ==================
+
+ # Nginx 统一入口
+ nginx:
+ image: nginx:alpine
+ container_name: ul-nginx
+ ports:
+ - "80:80"
+ - "443:443"
+ volumes:
+ - ./docker/nginx/nginx.dev.conf:/etc/nginx/nginx.conf:ro
+ - ./docker/nginx/conf.d:/etc/nginx/conf.d:ro
+ - ./docker/nginx/ssl:/etc/nginx/ssl:ro
+ networks:
+ - ul-network
+ depends_on:
+ - gateway
+ - portal
+ - app-bidding
+ - app-customer-service
+ - shared
+ healthcheck:
+ test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"]
+ interval: 10s
+ timeout: 5s
+ retries: 3
+
+networks:
+ ul-network:
+ driver: bridge
+
+volumes:
+ postgres_data:
+ redis_data:
+ nacos_data:
+ maven_cache:
+ pnpm_store:
diff --git a/docker/nginx/conf.d/default.conf b/docker/nginx/conf.d/default.conf
new file mode 100644
index 0000000..2234362
--- /dev/null
+++ b/docker/nginx/conf.d/default.conf
@@ -0,0 +1,196 @@
+# 开发环境统一入口配置
+
+# 上游服务定义
+upstream gateway {
+ server gateway:8080;
+ keepalive 32;
+}
+
+upstream portal {
+ server portal:3000;
+ keepalive 16;
+}
+
+upstream app-bidding {
+ server app-bidding:3001;
+ keepalive 16;
+}
+
+upstream app-customer-service {
+ server app-customer-service:3002;
+ keepalive 16;
+}
+
+upstream shared {
+ server shared:5000;
+ keepalive 16;
+}
+
+# WebSocket 升级配置
+map $http_upgrade $connection_upgrade {
+ default upgrade;
+ '' close;
+}
+
+# 主服务器配置
+server {
+ listen 80;
+ server_name localhost;
+
+ # 安全头
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-XSS-Protection "1; mode=block" always;
+
+ # 开发环境允许所有跨域
+ add_header Access-Control-Allow-Origin "*" always;
+ add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
+ add_header Access-Control-Allow-Headers "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" always;
+
+ # 健康检查
+ location /health {
+ access_log off;
+ return 200 "healthy\n";
+ add_header Content-Type text/plain;
+ }
+
+ # ==================== 共享包服务(ES Module + Module Federation) ====================
+ location /shared/ {
+ proxy_pass http://shared:5000/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # CORS(ES Module / Module Federation 必需)
+ add_header Access-Control-Allow-Origin "*" always;
+ add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
+ add_header Access-Control-Allow-Headers "Content-Type" always;
+
+ # ES Module MIME 类型
+ if ($request_filename ~* \.(js|mjs)$) {
+ add_header Content-Type "application/javascript; charset=utf-8";
+ }
+
+ # 开发环境不缓存
+ add_header Cache-Control "no-cache, no-store, must-revalidate";
+
+ # HMR 支持
+ proxy_read_timeout 86400;
+ proxy_send_timeout 86400;
+ }
+
+ # ==================== API 网关代理 ====================
+ location /api/ {
+ proxy_pass http://gateway/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ # 超时设置
+ proxy_connect_timeout 60s;
+ proxy_send_timeout 60s;
+ proxy_read_timeout 60s;
+ }
+
+ # WebSocket 代理
+ location /ws/ {
+ proxy_pass http://gateway/ws/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+
+ # WebSocket 超时设置
+ proxy_read_timeout 3600s;
+ proxy_send_timeout 3600s;
+ }
+
+ # ==================== 主应用(Portal) ====================
+ location / {
+ proxy_pass http://portal/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+
+ # Vite HMR 支持
+ proxy_read_timeout 86400;
+ }
+
+ # ==================== 招投标应用 ====================
+ location /bidding {
+ rewrite ^/bidding/(.*)$ /$1 break;
+ proxy_pass http://app-bidding/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+
+ # Vite HMR 支持
+ proxy_read_timeout 86400;
+ }
+
+ # 招投标应用静态资源
+ location /bidding/ {
+ proxy_pass http://app-bidding/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+
+ proxy_read_timeout 86400;
+ }
+
+ # ==================== 智能客服应用 ====================
+ location /customer-service {
+ rewrite ^/customer-service/(.*)$ /$1 break;
+ proxy_pass http://app-customer-service/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+
+ proxy_read_timeout 86400;
+ }
+
+ location /customer-service/ {
+ proxy_pass http://app-customer-service/;
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection $connection_upgrade;
+ proxy_set_header Host $host;
+
+ proxy_read_timeout 86400;
+ }
+
+ # ==================== Nacos 管理界面(开发用) ====================
+ location /nacos/ {
+ proxy_pass http://nacos:8848/nacos/;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ }
+}
+
+# 可选:HTTPS 配置(开发环境使用自签名证书)
+# server {
+# listen 443 ssl http2;
+# server_name localhost;
+#
+# ssl_certificate /etc/nginx/ssl/cert.pem;
+# ssl_certificate_key /etc/nginx/ssl/key.pem;
+# ssl_protocols TLSv1.2 TLSv1.3;
+# ssl_ciphers HIGH:!aNULL:!MD5;
+#
+# # 其他配置同上...
+# }
diff --git a/docker/nginx/nginx.dev.conf b/docker/nginx/nginx.dev.conf
new file mode 100644
index 0000000..ce5a2fa
--- /dev/null
+++ b/docker/nginx/nginx.dev.conf
@@ -0,0 +1,42 @@
+user nginx;
+worker_processes auto;
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+
+events {
+ worker_connections 1024;
+ use epoll;
+}
+
+http {
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ # 日志格式
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+
+ # 性能优化
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ keepalive_timeout 65;
+ types_hash_max_size 2048;
+
+ # Gzip 压缩
+ gzip on;
+ gzip_vary on;
+ gzip_min_length 1024;
+ gzip_comp_level 6;
+ gzip_types text/plain text/css text/xml text/javascript
+ application/javascript application/json application/xml+rss;
+
+ # 上传大小限制
+ client_max_body_size 100M;
+
+ # 包含具体配置
+ include /etc/nginx/conf.d/*.conf;
+}
diff --git a/docs/前端完整指南.md b/docs/前端完整指南.md
new file mode 100644
index 0000000..6789211
--- /dev/null
+++ b/docs/前端完整指南.md
@@ -0,0 +1,563 @@
+# 泰豪电源 AI 数智化平台 - 前端完整指南
+
+## 📖 目录
+
+1. [技术架构](#1-技术架构)
+2. [共享组件方案](#2-共享组件方案)
+3. [快速开始](#3-快速开始)
+4. [开发指南](#4-开发指南)
+5. [构建部署](#5-构建部署)
+6. [常见问题](#6-常见问题)
+
+---
+
+## 1. 技术架构
+
+### 1.1 技术栈
+
+**前端框架**
+- Vue 3.5+ (`
+```
+
+**Vue 组件使用**
+
+```vue
+
+
+
+
+
+```
+
+### 2.3 优势
+
+| 特性 | 传统方式 | Import Maps 方案 |
+|------|---------|-----------------|
+| 代码共享 | ❌ 每个应用打包一份 | ✅ 所有应用共用一份 |
+| 构建体积 | ❌ 重复打包 | ✅ 减少 30-50% |
+| 依赖管理 | ❌ 每个应用配置 | ✅ 共享服务统一管理 |
+| 版本升级 | ❌ 所有应用改 | ✅ 只改共享服务 |
+| 浏览器缓存 | ⚠️ 独立缓存 | ✅ 统一缓存 |
+
+---
+
+## 3. 快速开始
+
+### 3.1 Docker 环境(推荐)
+
+```bash
+# 1. 启动所有服务
+make up
+
+# 2. 查看状态
+make ps
+
+# 3. 访问应用
+open http://localhost
+```
+
+**访问地址**
+- 主应用: http://localhost/
+- 招投标: http://localhost/bidding
+- 智能客服: http://localhost/customer-service
+- 共享组件: http://localhost/shared/components.js
+- API网关: http://localhost/api
+- Nacos: http://localhost/nacos
+
+### 3.2 本地开发
+
+```bash
+# 1. 安装依赖
+pnpm install
+
+# 2. 启动所有应用
+pnpm dev
+
+# 或启动单个应用
+pnpm --filter portal dev
+pnpm --filter app-bidding dev
+```
+
+---
+
+## 4. 开发指南
+
+### 4.1 创建页面
+
+```vue
+
+
+
+
+
+
+```
+
+### 4.2 API 调用
+
+```typescript
+// 使用封装的 API
+import { authApi, systemApi } from '@shared/api'
+
+// GET 请求
+const users = await authApi.getUserList({ page: 1, size: 10 })
+
+// POST 请求
+await authApi.createUser({ username: 'test', email: 'test@example.com' })
+
+// 直接使用 http
+import { http } from '@shared/utils'
+const data = await http.get('/custom/endpoint')
+```
+
+### 4.3 状态管理
+
+```typescript
+// store/user.ts
+import { defineStore } from 'pinia'
+import { ref, computed } from 'vue'
+import { authApi } from '@shared/api'
+
+export const useUserStore = defineStore('user', () => {
+ // State
+ const userInfo = ref(null)
+ const permissions = ref([])
+
+ // Getters
+ const isLoggedIn = computed(() => !!userInfo.value)
+
+ // Actions
+ const login = async (loginData) => {
+ const res = await authApi.login(loginData)
+ userInfo.value = res.userInfo
+ permissions.value = res.permissions
+ }
+
+ return { userInfo, permissions, isLoggedIn, login }
+})
+```
+
+### 4.4 路由配置
+
+```typescript
+// router/index.ts
+import { createRouter, createWebHistory } from 'vue-router'
+
+const routes = [
+ {
+ path: '/',
+ component: () => import('@/layouts/MainLayout.vue'),
+ children: [
+ {
+ path: 'home',
+ component: () => import('@/views/home/index.vue'),
+ meta: { title: '首页' }
+ }
+ ]
+ }
+]
+
+const router = createRouter({
+ history: createWebHistory(),
+ routes
+})
+
+export default router
+```
+
+### 4.5 常用命令
+
+```bash
+# 查看日志
+make logs-portal # 主应用日志
+make logs-gateway # 网关日志
+make logs-shared # 共享包日志
+
+# 重启服务
+make restart-portal # 重启主应用
+make restart # 重启所有服务
+
+# 进入容器
+make shell-portal # 进入容器调试
+
+# 数据库
+make db # 连接数据库
+make db-init # 初始化数据
+```
+
+---
+
+## 5. 构建部署
+
+### 5.1 本地构建
+
+```bash
+# 构建所有应用
+pnpm build
+
+# 构建单个应用
+pnpm --filter portal build
+pnpm --filter shared build
+
+# 预览
+pnpm preview
+```
+
+### 5.2 部署到生产
+
+**方式1: Docker 部署**
+
+```bash
+# 构建生产镜像
+docker build -t urban-lifeline-web .
+
+# 运行
+docker run -p 80:80 urban-lifeline-web
+```
+
+**方式2: CDN 部署**
+
+```bash
+# 部署共享包到 CDN
+cd packages/shared
+pnpm build
+ossutil cp -r dist/esm/ oss://cdn/shared/v1.0.0/
+
+# 部署业务应用
+cd packages/portal
+pnpm build
+ossutil cp -r dist/ oss://cdn/portal/
+```
+
+**方式3: Nginx 静态部署**
+
+```nginx
+server {
+ listen 80;
+ server_name taihao.com;
+
+ # 主应用
+ location / {
+ root /var/www/portal/dist;
+ try_files $uri $uri/ /index.html;
+ }
+
+ # 共享包
+ location /shared/ {
+ root /var/www/shared/dist;
+ add_header Access-Control-Allow-Origin "*";
+ expires 1y;
+ }
+
+ # API 代理
+ location /api/ {
+ proxy_pass http://gateway:8080/;
+ }
+}
+```
+
+### 5.3 环境变量
+
+```bash
+# .env.development
+VITE_API_BASE_URL=http://localhost/api
+VITE_SHARED_URL=http://localhost/shared
+
+# .env.production
+VITE_API_BASE_URL=https://api.taihao.com/api
+VITE_SHARED_URL=https://cdn.taihao.com/shared/v1.0.0
+```
+
+### 5.4 CI/CD
+
+```yaml
+# .github/workflows/deploy.yml
+name: Deploy
+
+on:
+ push:
+ branches: [main]
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v4
+ with:
+ version: 9
+
+ - name: Build
+ run: pnpm install && pnpm build
+
+ - name: Deploy
+ run: ./scripts/deploy-production.sh
+```
+
+---
+
+## 6. 常见问题
+
+### 6.1 为什么使用 Import Maps?
+
+**优势**:
+- ✅ 浏览器原生支持,无需额外库
+- ✅ 真正的运行时共享
+- ✅ 开发体验好(支持 HMR)
+- ✅ 减小构建体积
+
+**对比 Module Federation**:
+- Import Maps 更简单,配置少
+- Module Federation 功能更强大,但复杂
+- 两者可以结合使用
+
+### 6.2 如何处理 TypeScript 类型?
+
+```typescript
+// packages/portal/src/types/shared.d.ts
+declare module '@shared/components' {
+ export * from '../../../shared/src/components'
+}
+
+declare module '@shared/utils' {
+ export * from '../../../shared/src/utils'
+}
+```
+
+### 6.3 如何更新共享组件?
+
+```bash
+# 1. 修改共享组件代码
+vim packages/shared/src/components/UlTable/index.vue
+
+# 2. 重启共享服务(HMR 自动生效)
+make restart-shared
+
+# 3. 浏览器刷新,所有应用自动获得最新版本
+```
+
+### 6.4 生产环境如何缓存?
+
+```nginx
+# Nginx 配置
+location /shared/ {
+ # 基于版本号的长期缓存
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+}
+
+# HTML 不缓存
+location ~* \.html$ {
+ add_header Cache-Control "no-cache";
+}
+```
+
+### 6.5 如何调试共享组件?
+
+```bash
+# 方式1: 查看网络请求
+浏览器 F12 → Network → 筛选 JS → 查看 /shared/components.js
+
+# 方式2: 查看日志
+make logs-shared
+
+# 方式3: 进入容器
+make shell-shared
+```
+
+### 6.6 为什么不用 Webpack?
+
+Vite 优势:
+- ⚡ 开发启动快(秒级)
+- 🔥 HMR 更快
+- 📦 生产构建基于 Rollup(体积更小)
+- 🎯 原生 ES Module 支持
+
+### 6.7 如何处理样式?
+
+```vue
+
+
+
+
+
+```
+
+共享包会自动处理 CSS 提取和分割。
+
+### 6.8 如何添加新的业务应用?
+
+```bash
+# 1. 复制现有应用作为模板
+cp -r packages/portal packages/app-newapp
+
+# 2. 修改 package.json
+{
+ "name": "@apps/newapp",
+ "scripts": {
+ "dev": "vite --port 3003"
+ }
+}
+
+# 3. 添加到 pnpm-workspace.yaml(已自动包含)
+
+# 4. 启动
+pnpm --filter app-newapp dev
+```
+
+---
+
+## 附录
+
+### A. 常用脚本
+
+```bash
+# Makefile 命令
+make up # 启动
+make down # 停止
+make logs # 日志
+make ps # 状态
+make restart # 重启
+make clean # 清理
+
+# pnpm 命令
+pnpm dev # 开发
+pnpm build # 构建
+pnpm preview # 预览
+pnpm lint # 检查
+pnpm format # 格式化
+```
+
+### B. 目录说明
+
+```
+urbanLifeline/
+├── urbanLifelineServ/ # 后端(Java Spring Boot)
+├── urbanLifelineWeb/ # 前端(Vue 3 Monorepo)
+├── docker-compose.dev.yml # Docker 开发环境
+├── Makefile # 快捷命令
+└── docs/ # 文档
+ └── 前端完整指南.md # 📖 本文档
+```
+
+### C. 技术支持
+
+- 项目文档:`/docs`
+- 问题反馈:GitHub Issues
+- 开发规范:ESLint + Prettier
+- 提交规范:Conventional Commits
+
+---
+
+**Happy Coding! 🚀**
+
+*最后更新:2025-12-02*
diff --git a/docs/数据库优化方案总结.md b/docs/数据库优化方案总结.md
deleted file mode 100644
index 84a520f..0000000
--- a/docs/数据库优化方案总结.md
+++ /dev/null
@@ -1,357 +0,0 @@
-# 城市生命线数据库优化方案总结
-
-> 更新日期:2025-12-02
-
-## 一、核心优化内容
-
-### 1. 知识库版本管理(简化方案)
-
-#### 设计原则
-- 不创建额外的历史表或快照表
-- 直接在现有表中添加版本字段
-- 使用乐观锁防止并发编辑冲突
-
-#### 文档表(tb_knowledge_document)新增字段
-
-| 字段名 | 类型 | 默认值 | 说明 |
-|--------|------|--------|------|
-| `version` | INTEGER | 1 | 版本号(整数递增) |
-| `root_doc_id` | VARCHAR(50) | NULL | 根文档ID(版本组标识,首次上传时等于doc_id) |
-| `is_current` | BOOLEAN | true | 是否当前使用的版本 |
-
-**索引:**
-```sql
-CREATE INDEX idx_doc_root_current
-ON knowledge.tb_knowledge_document(root_doc_id, is_current)
-WHERE deleted = false;
-```
-
-#### 分段表(tb_knowledge_chunk)新增字段
-
-| 字段名 | 类型 | 默认值 | 说明 |
-|--------|------|--------|------|
-| `version` | INTEGER | 1 | 分段版本号(用于乐观锁,每次编辑+1) |
-
-#### 使用示例
-
-**创建新版本:**
-```sql
--- 1. 标记旧版本为非当前
-UPDATE knowledge.tb_knowledge_document
-SET is_current = false
-WHERE root_doc_id = 'root_xxx';
-
--- 2. 插入新版本
-INSERT INTO knowledge.tb_knowledge_document (
- doc_id, root_doc_id, version, is_current, ...
-) VALUES (
- 'new_doc_id', 'root_xxx', 2, true, ...
-);
-```
-
-**编辑分段(乐观锁):**
-```sql
-UPDATE knowledge.tb_knowledge_chunk
-SET content = '新内容', version = version + 1
-WHERE chunk_id = 'xxx' AND version = 1; -- 版本检查
-```
-
-**查询当前版本:**
-```sql
-SELECT * FROM knowledge.tb_knowledge_document
-WHERE root_doc_id = 'root_xxx'
- AND is_current = true
- AND deleted = false;
-```
-
----
-
-## 二、多服务数据隔离方案
-
-### 设计原则
-- 使用 `dept_path` 实现部门/租户隔离(已有字段)
-- 添加 `service_type` 实现服务间隔离
-- **不使用 tenant_id**(dept_path 已足够)
-
-### 隔离层级
-
-| 隔离级别 | 字段 | 用途 | 示例 |
-|---------|------|------|------|
-| **服务级** | service_type | 区分不同业务服务 | bidding / customer_service / internal |
-| **部门级** | dept_path | 区分部门/租户 | /dept1/subdept1/ |
-
-### 已添加 service_type 的表
-
-| 表名 | 位置 | 说明 |
-|------|------|------|
-| `knowledge.tb_knowledge_base` | createTableKnowledge.sql | 知识库 |
-| `knowledge.tb_knowledge_document` | createTableKnowledge.sql | 知识文档 |
-| `file.tb_sys_file` | createTableFile.sql | 文件 |
-| `file.tb_file_relation` | createTableFile.sql | 文件关联 |
-| `message.tb_message` | createTableMessage.sql | 消息 |
-| `message.tb_message_template` | createTableMessage.sql | 消息模板 |
-| `log.tb_sys_log` | createTableLog.sql | 系统日志 |
-
-### 查询示例
-
-```java
-// 招投标服务查询
-public List getBiddingDocuments(String deptPath) {
- return documentMapper.selectList(
- new QueryWrapper()
- .eq("service_type", "bidding") // 服务隔离
- .likeRight("dept_path", deptPath) // 部门隔离
- .eq("is_current", true) // 当前版本
- .eq("deleted", false)
- .orderByDesc("create_time")
- );
-}
-```
-
----
-
-## 三、知识库字段重命名
-
-### 变更内容
-
-将所有 `kb_id` 改为 `knowledge_id`,提升语义清晰度。
-
-| 表名 | 变更 |
-|------|------|
-| `knowledge.tb_knowledge_base` | 主键:kb_id → knowledge_id |
-| `knowledge.tb_knowledge_document` | 外键:kb_id → knowledge_id |
-| `knowledge.tb_knowledge_chunk` | 外键:kb_id → knowledge_id |
-| `knowledge.tb_knowledge_access_log` | 引用:kb_id → knowledge_id |
-| `customer_service.tb_faq` | 引用:kb_id → knowledge_id |
-
-### 影响范围
-
-- ✅ 所有外键约束已更新
-- ✅ 所有索引已更新
-- ✅ 文档速查表已更新
-
----
-
-## 四、智能体关联
-
-### 知识库表新增字段
-
-```sql
-ALTER TABLE knowledge.tb_knowledge_base
-ADD COLUMN agent_id VARCHAR(50); -- 关联智能体ID
-```
-
-### 说明
-- 一个知识库可以关联一个智能体
-- 智能体可以通过此字段快速查找其知识库
-- 智能体表(tb_agent)当前已注释(暂不启用)
-
----
-
-## 五、数据库初始化脚本
-
-### initAll.sql(简化版)
-
-```sql
--- =============================
--- 城市生命线AI数智化平台 - 数据库初始化脚本
--- 按顺序执行各模块建表SQL
--- =============================
-\i createDB.sql
-
--- 1. 系统基础模块
-\i createTablePermission.sql
-\i createTableUser.sql
-
--- 2. 文件管理模块
-\i createTableFile.sql
-
--- 3. 消息通知模块
-\i createTableMessage.sql
-
--- 4. 日志模块
-\i createTableLog.sql
-
--- 5. 配置管理模块
-\i createTableConfig.sql
-
--- 6. 知识库管理模块
-\i createTableKnowledge.sql
-
--- 7. 招投标业务模块
-\i createTableBidding.sql
-
--- 8. 智能客服业务模块
-\i createTableCustomerService.sql
-
--- 9. 智能体模块(暂不启用)
--- \i createTableAgent.sql
-```
-
-### 使用方式
-
-```bash
-# 进入PostgreSQL
-psql -U postgres
-
-# 执行初始化
-\i /path/to/initAll.sql
-```
-
----
-
-## 六、测试/生产环境隔离方案
-
-### 推荐方案:分别部署
-
-```
-测试环境:
-├── 应用服务器:test-server:8080
-├── 数据库:urbanlifeline_test
-└── 配置:application-test.yml
-
-生产环境:
-├── 应用服务器:prod-server:8080
-├── 数据库:urbanlifeline_prod
-└── 配置:application-prod.yml
-```
-
-### 配置文件
-
-**application-test.yml**
-```yaml
-spring:
- datasource:
- url: jdbc:postgresql://localhost:5432/urbanlifeline_test
- username: postgres
- password: test123
-```
-
-**application-prod.yml**
-```yaml
-spring:
- datasource:
- url: jdbc:postgresql://localhost:5432/urbanlifeline_prod
- username: postgres
- password: prod123
-```
-
-### 部署命令
-
-```bash
-# 测试服务器
-java -jar urbanlifeline.jar --spring.profiles.active=test
-
-# 生产服务器
-java -jar urbanlifeline.jar --spring.profiles.active=prod
-```
-
-### 优势
-
-✅ **简单清晰**:物理隔离,无需代码改动
-✅ **安全可靠**:测试数据不会污染生产环境
-✅ **易于维护**:独立部署,互不影响
-✅ **性能独立**:测试压力不影响生产性能
-
----
-
-## 七、SQL语法修复
-
-### 修复内容
-
-| 文件 | 问题 | 修复 |
-|------|------|------|
-| `createTableLog.sql` | 注释语句末尾使用逗号 | 改为分号 |
-| `createTableMessage.sql` | service_type字段缺少逗号 | 添加逗号 |
-
----
-
-## 八、数据库表结构总览
-
-### 核心表关系
-
-```
-knowledge.tb_knowledge_base (知识库)
- ├── agent_id → agent.tb_agent (智能体)
- └── knowledge_id ← knowledge.tb_knowledge_document (文档)
- ├── root_doc_id (版本组)
- ├── version (版本号)
- ├── is_current (当前版本)
- └── knowledge_id ← knowledge.tb_knowledge_chunk (分段)
- └── version (乐观锁版本)
-```
-
-### 隔离字段应用
-
-```
-所有业务表
- ├── service_type (服务隔离:bidding/customer_service/internal)
- └── dept_path (部门隔离:/dept1/subdept1/)
-```
-
----
-
-## 九、最佳实践建议
-
-### 1. 版本管理
-
-✅ 每次上传新文档时设置 `root_doc_id = doc_id`
-✅ 创建新版本前,标记旧版本 `is_current = false`
-✅ 编辑分段时始终检查 `version` 字段(乐观锁)
-
-### 2. 数据隔离
-
-✅ 查询时始终添加 `service_type` 过滤
-✅ 使用 MyBatis 拦截器自动注入隔离条件
-✅ 敏感操作添加 `dept_path` 权限检查
-
-### 3. 环境管理
-
-✅ 测试/生产分别部署,使用不同数据库
-✅ 配置文件使用 Spring Profile 管理
-✅ Controller/Service/Mapper 层无需修改
-
----
-
-## 十、待办事项
-
-- [ ] 创建数据库迁移脚本(旧表 → 新表)
-- [ ] 编写单元测试验证版本管理功能
-- [ ] 配置 MyBatis 拦截器自动注入 service_type
-- [ ] 准备生产环境部署文档
-- [ ] 知识库数据导入/导出工具开发
-
----
-
-## 附录:完整字段对照表
-
-### tb_knowledge_document 字段清单
-
-| 字段名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| doc_id | VARCHAR(50) | ✅ | 文档ID(主键) |
-| knowledge_id | VARCHAR(50) | ✅ | 知识库ID |
-| title | VARCHAR(500) | ✅ | 文档标题 |
-| **version** | **INTEGER** | ✅ | **版本号(新增)** |
-| **root_doc_id** | **VARCHAR(50)** | - | **根文档ID(新增)** |
-| **is_current** | **BOOLEAN** | ✅ | **是否当前版本(新增)** |
-| **service_type** | **VARCHAR(50)** | - | **服务类型(新增)** |
-| dept_path | VARCHAR(255) | - | 部门路径 |
-| deleted | BOOLEAN | ✅ | 软删除标记 |
-
-### tb_knowledge_chunk 字段清单
-
-| 字段名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| chunk_id | VARCHAR(50) | ✅ | 分段ID(主键) |
-| doc_id | VARCHAR(50) | ✅ | 文档ID |
-| knowledge_id | VARCHAR(50) | ✅ | 知识库ID |
-| content | TEXT | ✅ | 分段内容 |
-| **version** | **INTEGER** | ✅ | **版本号(乐观锁,新增)** |
-| embedding | vector(1536) | - | 向量嵌入 |
-| deleted | BOOLEAN | ✅ | 软删除标记 |
-
----
-
-**文档生成时间:** 2025-12-02
-**最后更新:** 知识库版本管理、多服务隔离、字段重命名
diff --git a/docs/数据库完整指南.md b/docs/数据库完整指南.md
new file mode 100644
index 0000000..ad27cd0
--- /dev/null
+++ b/docs/数据库完整指南.md
@@ -0,0 +1,774 @@
+# 泰豪电源 AI 数智化平台 - 数据库完整指南
+
+> **更新日期**: 2025-12-02
+> **数据库**: PostgreSQL 16
+> **总表数**: 50张核心业务表
+
+---
+
+## 📖 目录
+
+1. [系统概述](#1-系统概述)
+2. [Schema架构](#2-schema架构)
+3. [核心模块设计](#3-核心模块设计)
+4. [表结构速查](#4-表结构速查)
+5. [优化方案](#5-优化方案)
+6. [部署与维护](#6-部署与维护)
+7. [常用查询示例](#7-常用查询示例)
+
+---
+
+## 1. 系统概述
+
+### 1.1 设计理念
+
+基于`功能结构.xml`的系统架构,遵循 **"一个底座、多种智能体"** 核心理念,支持四大业务模块:
+
+1. **资料管理智能化**
+2. **招投标自动化**
+3. **售后客服智能化**
+4. **企业内部知识协同**
+
+### 1.2 技术选型
+
+- **数据库**: PostgreSQL 16
+- **连接池**: HikariCP
+- **ORM**: MyBatis-Plus 3.5
+- **迁移工具**: Flyway (可选)
+
+### 1.3 设计原则
+
+- ✅ **模块化**: 按业务模块划分 Schema
+- ✅ **规范化**: 统一命名规范和字段设计
+- ✅ **可扩展**: 预留扩展字段和软删除
+- ✅ **高性能**: 合理索引和分区设计
+- ✅ **安全性**: 行级安全和审计日志
+
+---
+
+## 2. Schema架构
+
+### 2.1 Schema划分
+
+采用多Schema架构,按业务模块逻辑隔离:
+
+| Schema | 说明 | 核心表数量 | 用途 |
+|--------|------|-----------|------|
+| `sys` | 系统基础模块 | 11 | 用户、角色、权限、部门 |
+| `file` | 文件管理模块 | 1 | 文件存储与管理 |
+| `message` | 消息通知模块 | 4 | 站内信、系统通知 |
+| `log` | 日志审计模块 | 1 | 操作日志、审计 |
+| `config` | 系统配置模块 | 1 | 系统参数配置 |
+| `knowledge` | 知识库管理模块 | 4 | 文档、分段、问答对 |
+| `bidding` | 招投标智能体 | 8 | 招投标业务流程 |
+| `customer_service` | 智能客服系统 | 9 | 客服、工单、对话 |
+| `agent` | 智能体管理 | 11 | 智能体、API、监控 |
+
+**总计: 50张核心业务表**
+
+### 2.2 命名规范
+
+```sql
+-- Schema 命名: 小写字母
+CREATE SCHEMA IF NOT EXISTS sys;
+
+-- 表命名: tb_{schema}_{表名}
+CREATE TABLE sys.tb_sys_user (...);
+CREATE TABLE knowledge.tb_knowledge_document (...);
+
+-- 字段命名: 小写字母 + 下划线
+user_id, create_time, full_name
+
+-- 索引命名: idx_{表名}_{字段名}
+CREATE INDEX idx_user_email ON sys.tb_sys_user(email);
+
+-- 外键命名: fk_{表名}_{关联表名}
+CONSTRAINT fk_user_dept FOREIGN KEY (dept_id) ...
+```
+
+---
+
+## 3. 核心模块设计
+
+### 3.1 系统基础模块 (sys)
+
+#### 权限体系设计
+
+采用 **RBAC (基于角色的访问控制) + ACL (访问控制列表)** 混合模型
+
+**核心表**:
+- `tb_sys_user` - 用户表
+- `tb_sys_role` - 角色表
+- `tb_sys_permission` - 权限表
+- `tb_sys_dept` - 部门表
+- `tb_sys_acl` - 对象级权限表
+- `tb_sys_user_role` - 用户角色关联表
+
+**权限模型**:
+```
+用户 (User)
+ ├─ 部门 (Dept) - 数据隔离
+ ├─ 角色 (Role)
+ │ ├─ 权限 (Permission) - 功能权限
+ │ └─ 视图 (View) - 菜单权限
+ └─ ACL - 对象级权限(细粒度)
+```
+
+**设计亮点**:
+1. 多租户支持: `dept_path` 字段实现部门级数据隔离
+2. 角色作用域: `scope` 字段区分全局/部门角色
+3. 对象权限: ACL表支持任意对象的细粒度权限
+
+#### 核心表结构
+
+```sql
+-- 用户表
+CREATE TABLE sys.tb_sys_user (
+ user_id VARCHAR(50) PRIMARY KEY,
+ username VARCHAR(50) UNIQUE NOT NULL,
+ password_hash VARCHAR(255) NOT NULL,
+ email VARCHAR(100) UNIQUE,
+ phone VARCHAR(20),
+ wechat_id VARCHAR(100),
+ status VARCHAR(20) DEFAULT 'active',
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ deleted BOOLEAN DEFAULT false
+);
+
+-- 部门表(树形结构)
+CREATE TABLE sys.tb_sys_dept (
+ dept_id VARCHAR(50) PRIMARY KEY,
+ dept_name VARCHAR(100) NOT NULL,
+ parent_id VARCHAR(50),
+ dept_path TEXT, -- 路径:/1/2/3/
+ sort_order INTEGER DEFAULT 0,
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ deleted BOOLEAN DEFAULT false,
+ CONSTRAINT fk_dept_parent FOREIGN KEY (parent_id)
+ REFERENCES sys.tb_sys_dept(dept_id)
+);
+
+-- 角色表
+CREATE TABLE sys.tb_sys_role (
+ role_id VARCHAR(50) PRIMARY KEY,
+ role_name VARCHAR(100) NOT NULL,
+ role_code VARCHAR(50) UNIQUE NOT NULL,
+ scope VARCHAR(20) DEFAULT 'global', -- global/dept
+ owner_dept_id VARCHAR(50),
+ description TEXT,
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ deleted BOOLEAN DEFAULT false
+);
+
+-- ACL权限表
+CREATE TABLE sys.tb_sys_acl (
+ acl_id VARCHAR(50) PRIMARY KEY,
+ object_type VARCHAR(50) NOT NULL, -- user/dept/document等
+ object_id VARCHAR(50) NOT NULL,
+ principal_type VARCHAR(20) NOT NULL, -- user/role/dept
+ principal_id VARCHAR(50) NOT NULL,
+ permission VARCHAR(50) NOT NULL, -- view/edit/delete/admin
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- 索引
+CREATE INDEX idx_user_status ON sys.tb_sys_user(status) WHERE deleted = false;
+CREATE INDEX idx_dept_path ON sys.tb_sys_dept USING GIN(dept_path gin_trgm_ops);
+CREATE INDEX idx_acl_object ON sys.tb_sys_acl(object_type, object_id);
+```
+
+### 3.2 知识库管理模块 (knowledge)
+
+#### 模块概述
+
+支持文档管理、向量检索、RAG问答,版本控制。
+
+**核心表**:
+- `tb_knowledge_document` - 文档主表
+- `tb_knowledge_chunk` - 文档分段表(向量检索)
+- `tb_knowledge_qa_pair` - 问答对表
+- `tb_knowledge_file_relation` - 文档文件关联表
+
+#### 版本管理设计
+
+采用 **简化版本管理** 方案:
+
+```sql
+-- 文档表(新增版本字段)
+CREATE TABLE knowledge.tb_knowledge_document (
+ doc_id VARCHAR(50) PRIMARY KEY,
+ root_doc_id VARCHAR(50), -- ✨ 根文档ID(版本组标识)
+ version INTEGER DEFAULT 1, -- ✨ 版本号
+ is_current BOOLEAN DEFAULT true, -- ✨ 是否当前版本
+ title VARCHAR(500) NOT NULL,
+ content TEXT,
+ knowledge_base_id VARCHAR(50),
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ deleted BOOLEAN DEFAULT false
+);
+
+-- 分段表(向量检索)
+CREATE TABLE knowledge.tb_knowledge_chunk (
+ chunk_id VARCHAR(50) PRIMARY KEY,
+ doc_id VARCHAR(50) NOT NULL,
+ chunk_index INTEGER NOT NULL,
+ content TEXT NOT NULL,
+ embedding VECTOR(1536), -- ✨ 向量字段(pgvector扩展)
+ version INTEGER DEFAULT 1, -- ✨ 乐观锁版本
+ tokens INTEGER,
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT fk_chunk_doc FOREIGN KEY (doc_id)
+ REFERENCES knowledge.tb_knowledge_document(doc_id)
+);
+
+-- 索引
+CREATE INDEX idx_doc_root_current
+ ON knowledge.tb_knowledge_document(root_doc_id, is_current)
+ WHERE deleted = false;
+
+CREATE INDEX idx_chunk_embedding
+ ON knowledge.tb_knowledge_chunk
+ USING ivfflat (embedding vector_cosine_ops) -- ✨ 向量索引
+ WITH (lists = 100);
+```
+
+**版本管理示例**:
+
+```sql
+-- 创建新版本
+BEGIN;
+
+-- 1. 标记旧版本为非当前
+UPDATE knowledge.tb_knowledge_document
+SET is_current = false
+WHERE root_doc_id = 'root_xxx';
+
+-- 2. 插入新版本
+INSERT INTO knowledge.tb_knowledge_document (
+ doc_id, root_doc_id, version, is_current, title, content
+) VALUES (
+ 'new_doc_id', 'root_xxx', 2, true, '新版本标题', '内容'
+);
+
+COMMIT;
+
+-- 查询当前版本
+SELECT * FROM knowledge.tb_knowledge_document
+WHERE root_doc_id = 'root_xxx' AND is_current = true;
+
+-- 查询所有版本
+SELECT version, title, create_time
+FROM knowledge.tb_knowledge_document
+WHERE root_doc_id = 'root_xxx'
+ORDER BY version DESC;
+```
+
+### 3.3 招投标智能体模块 (bidding)
+
+#### 核心表
+
+```sql
+-- 招标项目表
+CREATE TABLE bidding.tb_bidding_project (
+ project_id VARCHAR(50) PRIMARY KEY,
+ project_name VARCHAR(500) NOT NULL,
+ project_code VARCHAR(100),
+ bidding_org VARCHAR(200), -- 招标单位
+ project_type VARCHAR(50), -- 项目类型
+ status VARCHAR(50) DEFAULT 'draft',
+ budget DECIMAL(18,2),
+ bid_deadline TIMESTAMP,
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ deleted BOOLEAN DEFAULT false
+);
+
+-- 招标文件表
+CREATE TABLE bidding.tb_bidding_document (
+ doc_id VARCHAR(50) PRIMARY KEY,
+ project_id VARCHAR(50) NOT NULL,
+ doc_type VARCHAR(50), -- tender/technical/commercial
+ file_id VARCHAR(50),
+ parsed_content JSONB, -- ✨ 智能解析结果
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT fk_bdoc_project FOREIGN KEY (project_id)
+ REFERENCES bidding.tb_bidding_project(project_id)
+);
+
+-- 标书模板表
+CREATE TABLE bidding.tb_bidding_template (
+ template_id VARCHAR(50) PRIMARY KEY,
+ template_name VARCHAR(200) NOT NULL,
+ template_type VARCHAR(50),
+ content JSONB, -- 模板结构化内容
+ variables JSONB, -- 可替换变量
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+```
+
+### 3.4 智能客服系统模块 (customer_service)
+
+#### 核心表
+
+```sql
+-- 对话会话表
+CREATE TABLE customer_service.tb_cs_conversation (
+ conv_id VARCHAR(50) PRIMARY KEY,
+ customer_user_id VARCHAR(50),
+ customer_name VARCHAR(100),
+ channel VARCHAR(50), -- wechat/web/phone
+ source VARCHAR(50), -- miniprogram/h5/app
+ status VARCHAR(50) DEFAULT 'active',
+ start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ end_time TIMESTAMP,
+ satisfaction_score INTEGER -- 满意度评分
+);
+
+-- 对话消息表
+CREATE TABLE customer_service.tb_cs_message (
+ message_id VARCHAR(50) PRIMARY KEY,
+ conv_id VARCHAR(50) NOT NULL,
+ sender_type VARCHAR(20), -- customer/agent/bot
+ sender_id VARCHAR(50),
+ content TEXT,
+ message_type VARCHAR(50), -- text/image/file
+ ai_response JSONB, -- AI响应详情
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT fk_msg_conv FOREIGN KEY (conv_id)
+ REFERENCES customer_service.tb_cs_conversation(conv_id)
+);
+
+-- 工单表
+CREATE TABLE customer_service.tb_cs_work_order (
+ order_id VARCHAR(50) PRIMARY KEY,
+ order_code VARCHAR(100) UNIQUE NOT NULL,
+ conv_id VARCHAR(50),
+ customer_user_id VARCHAR(50),
+ title VARCHAR(500) NOT NULL,
+ description TEXT,
+ category VARCHAR(100),
+ priority VARCHAR(20) DEFAULT 'medium',
+ status VARCHAR(50) DEFAULT 'pending',
+ assigned_to VARCHAR(50),
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ resolve_time TIMESTAMP
+);
+```
+
+### 3.5 智能体管理模块 (agent)
+
+#### 核心表
+
+```sql
+-- 智能体定义表
+CREATE TABLE agent.tb_agent_definition (
+ agent_id VARCHAR(50) PRIMARY KEY,
+ agent_name VARCHAR(100) NOT NULL,
+ agent_type VARCHAR(50), -- bidding/cs/knowledge等
+ description TEXT,
+ config JSONB, -- 配置(模型、参数等)
+ status VARCHAR(20) DEFAULT 'active',
+ version VARCHAR(20),
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- API调用日志表
+CREATE TABLE agent.tb_agent_api_log (
+ log_id VARCHAR(50) PRIMARY KEY,
+ agent_id VARCHAR(50),
+ api_endpoint VARCHAR(200),
+ request_params JSONB,
+ response_data JSONB,
+ status_code INTEGER,
+ duration_ms INTEGER,
+ create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- 智能体监控表(按月分区)
+CREATE TABLE agent.tb_agent_monitor (
+ monitor_id VARCHAR(50) NOT NULL,
+ agent_id VARCHAR(50) NOT NULL,
+ metric_name VARCHAR(100),
+ metric_value NUMERIC,
+ timestamp TIMESTAMP NOT NULL,
+ PRIMARY KEY (monitor_id, timestamp)
+) PARTITION BY RANGE (timestamp);
+
+-- 创建分区
+CREATE TABLE agent.tb_agent_monitor_2025_12
+ PARTITION OF agent.tb_agent_monitor
+ FOR VALUES FROM ('2025-12-01') TO ('2026-01-01');
+```
+
+---
+
+## 4. 表结构速查
+
+### 4.1 系统基础模块 (sys)
+
+| 表名 | 主键 | 核心字段 | 说明 |
+|------|------|----------|------|
+| `tb_sys_user` | user_id | username, email, phone | 用户表 |
+| `tb_sys_user_info` | user_id | avatar, full_name, level | 用户信息表 |
+| `tb_sys_dept` | dept_id | name, parent_id, dept_path | 部门表 |
+| `tb_sys_role` | role_id | name, scope, owner_dept_id | 角色表 |
+| `tb_sys_permission` | permission_id | name, code, module_id | 权限表 |
+| `tb_sys_acl` | acl_id | object_type, principal_type | 对象权限表 |
+
+### 4.2 知识库管理 (knowledge)
+
+| 表名 | 主键 | 核心字段 | 说明 |
+|------|------|----------|------|
+| `tb_knowledge_document` | doc_id | title, root_doc_id, version | 文档表 |
+| `tb_knowledge_chunk` | chunk_id | doc_id, content, embedding | 分段表 |
+| `tb_knowledge_qa_pair` | qa_pair_id | question, answer | 问答对表 |
+
+### 4.3 招投标 (bidding)
+
+| 表名 | 主键 | 核心字段 | 说明 |
+|------|------|----------|------|
+| `tb_bidding_project` | project_id | project_name, status | 招标项目表 |
+| `tb_bidding_document` | doc_id | project_id, parsed_content | 招标文件表 |
+| `tb_bidding_template` | template_id | template_name, content | 标书模板表 |
+
+### 4.4 智能客服 (customer_service)
+
+| 表名 | 主键 | 核心字段 | 说明 |
+|------|------|----------|------|
+| `tb_cs_conversation` | conv_id | customer_user_id, status | 对话会话表 |
+| `tb_cs_message` | message_id | conv_id, content | 对话消息表 |
+| `tb_cs_work_order` | order_id | title, status, assigned_to | 工单表 |
+
+---
+
+## 5. 优化方案
+
+### 5.1 索引优化
+
+```sql
+-- 1. 复合索引(状态 + 时间查询)
+CREATE INDEX idx_project_status_time
+ ON bidding.tb_bidding_project(status, create_time DESC)
+ WHERE deleted = false;
+
+-- 2. 部分索引(只索引活跃数据)
+CREATE INDEX idx_user_active
+ ON sys.tb_sys_user(user_id)
+ WHERE status = 'active' AND deleted = false;
+
+-- 3. GIN索引(全文检索)
+CREATE INDEX idx_doc_content_gin
+ ON knowledge.tb_knowledge_document
+ USING GIN(to_tsvector('chinese', title || ' ' || content));
+
+-- 4. BRIN索引(时间序列)
+CREATE INDEX idx_log_time_brin
+ ON log.tb_operation_log
+ USING BRIN(create_time);
+```
+
+### 5.2 分区策略
+
+```sql
+-- 按月分区(监控数据)
+CREATE TABLE agent.tb_agent_monitor (
+ monitor_id VARCHAR(50) NOT NULL,
+ timestamp TIMESTAMP NOT NULL,
+ ...
+ PRIMARY KEY (monitor_id, timestamp)
+) PARTITION BY RANGE (timestamp);
+
+-- 自动创建分区脚本
+CREATE OR REPLACE FUNCTION create_monthly_partition()
+RETURNS void AS $$
+DECLARE
+ start_date DATE;
+ end_date DATE;
+ partition_name TEXT;
+BEGIN
+ start_date := DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 month');
+ end_date := start_date + INTERVAL '1 month';
+ partition_name := 'tb_agent_monitor_' || TO_CHAR(start_date, 'YYYY_MM');
+
+ EXECUTE format(
+ 'CREATE TABLE IF NOT EXISTS agent.%I PARTITION OF agent.tb_agent_monitor
+ FOR VALUES FROM (%L) TO (%L)',
+ partition_name, start_date, end_date
+ );
+END;
+$$ LANGUAGE plpgsql;
+```
+
+### 5.3 查询优化
+
+```sql
+-- 使用CTE优化复杂查询
+WITH user_roles AS (
+ SELECT ur.user_id, r.role_id, r.role_code
+ FROM sys.tb_sys_user_role ur
+ JOIN sys.tb_sys_role r ON ur.role_id = r.role_id
+ WHERE r.deleted = false
+),
+user_permissions AS (
+ SELECT ur.user_id, p.permission_code
+ FROM user_roles ur
+ JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
+ JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
+)
+SELECT u.username, array_agg(DISTINCT up.permission_code) as permissions
+FROM sys.tb_sys_user u
+JOIN user_permissions up ON u.user_id = up.user_id
+WHERE u.deleted = false
+GROUP BY u.user_id, u.username;
+```
+
+### 5.4 并发控制
+
+```sql
+-- 乐观锁(版本号)
+UPDATE knowledge.tb_knowledge_chunk
+SET content = '新内容',
+ version = version + 1
+WHERE chunk_id = 'xxx'
+ AND version = 1; -- 版本匹配才更新
+
+-- 悲观锁
+BEGIN;
+SELECT * FROM bidding.tb_bidding_project
+WHERE project_id = 'xxx'
+FOR UPDATE; -- 锁定记录
+
+-- 更新...
+COMMIT;
+```
+
+---
+
+## 6. 部署与维护
+
+### 6.1 初始化脚本
+
+```bash
+# 位置: urbanLifelineServ/.bin/database/postgres/sql/
+
+# 完整初始化
+psql -U postgres -d urban_lifeline -f createTableAll.sql
+
+# 分模块初始化
+psql -U postgres -d urban_lifeline -f createTablePermission.sql
+psql -U postgres -d urban_lifeline -f createTableKnowledge.sql
+psql -U postgres -d urban_lifeline -f createTableBidding.sql
+
+# 优化补丁
+psql -U postgres -d urban_lifeline -f optimizations.sql
+```
+
+### 6.2 备份策略
+
+```bash
+# 全量备份
+pg_dump -U postgres -d urban_lifeline -F c -f backup_$(date +%Y%m%d).dump
+
+# 仅备份 Schema
+pg_dump -U postgres -d urban_lifeline -s -f schema_backup.sql
+
+# 仅备份数据
+pg_dump -U postgres -d urban_lifeline -a -f data_backup.sql
+
+# 还原
+pg_restore -U postgres -d urban_lifeline backup_20251202.dump
+```
+
+### 6.3 监控指标
+
+```sql
+-- 表大小
+SELECT
+ schemaname,
+ tablename,
+ pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
+FROM pg_tables
+WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
+ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
+
+-- 索引使用情况
+SELECT
+ schemaname, tablename, indexname,
+ idx_scan as index_scans,
+ idx_tup_read as tuples_read
+FROM pg_stat_user_indexes
+WHERE idx_scan = 0
+ORDER BY schemaname, tablename;
+
+-- 慢查询
+SELECT
+ query,
+ calls,
+ total_time,
+ mean_time,
+ max_time
+FROM pg_stat_statements
+WHERE mean_time > 1000 -- 超过1秒
+ORDER BY mean_time DESC
+LIMIT 10;
+```
+
+---
+
+## 7. 常用查询示例
+
+### 7.1 用户权限查询
+
+```sql
+-- 查询用户的所有权限
+SELECT DISTINCT p.permission_code, p.permission_name
+FROM sys.tb_sys_user u
+JOIN sys.tb_sys_user_role ur ON u.user_id = ur.user_id
+JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
+JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
+WHERE u.username = 'admin'
+ AND u.deleted = false;
+
+-- 查询部门下所有用户
+WITH RECURSIVE dept_tree AS (
+ SELECT dept_id FROM sys.tb_sys_dept WHERE dept_id = 'target_dept_id'
+ UNION ALL
+ SELECT d.dept_id
+ FROM sys.tb_sys_dept d
+ JOIN dept_tree dt ON d.parent_id = dt.dept_id
+)
+SELECT u.*
+FROM sys.tb_sys_user u
+JOIN sys.tb_sys_user_dept ud ON u.user_id = ud.user_id
+WHERE ud.dept_id IN (SELECT dept_id FROM dept_tree);
+```
+
+### 7.2 知识库查询
+
+```sql
+-- 向量相似度检索(Top 5)
+SELECT
+ chunk_id,
+ content,
+ 1 - (embedding <=> '[0.1, 0.2, ...]'::vector) as similarity
+FROM knowledge.tb_knowledge_chunk
+WHERE deleted = false
+ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
+LIMIT 5;
+
+-- 查询文档的所有版本
+SELECT
+ version,
+ title,
+ create_time,
+ is_current
+FROM knowledge.tb_knowledge_document
+WHERE root_doc_id = 'root_xxx'
+ORDER BY version DESC;
+```
+
+### 7.3 招投标查询
+
+```sql
+-- 统计项目状态分布
+SELECT
+ status,
+ COUNT(*) as count,
+ SUM(budget) as total_budget
+FROM bidding.tb_bidding_project
+WHERE deleted = false
+GROUP BY status;
+
+-- 查询即将截止的项目
+SELECT
+ project_name,
+ bid_deadline,
+ EXTRACT(DAY FROM (bid_deadline - NOW())) as days_left
+FROM bidding.tb_bidding_project
+WHERE status = 'active'
+ AND bid_deadline > NOW()
+ AND deleted = false
+ORDER BY bid_deadline ASC;
+```
+
+### 7.4 智能客服查询
+
+```sql
+-- 查询工单处理效率
+SELECT
+ assigned_to,
+ COUNT(*) as total_orders,
+ AVG(EXTRACT(EPOCH FROM (resolve_time - create_time))/3600) as avg_hours,
+ COUNT(CASE WHEN status = 'resolved' THEN 1 END) as resolved_count
+FROM customer_service.tb_cs_work_order
+WHERE create_time > NOW() - INTERVAL '30 days'
+GROUP BY assigned_to;
+
+-- 查询满意度统计
+SELECT
+ DATE(start_time) as date,
+ AVG(satisfaction_score) as avg_satisfaction,
+ COUNT(*) as total_conversations
+FROM customer_service.tb_cs_conversation
+WHERE satisfaction_score IS NOT NULL
+ AND start_time > NOW() - INTERVAL '7 days'
+GROUP BY DATE(start_time)
+ORDER BY date DESC;
+```
+
+---
+
+## 附录
+
+### A. SQL文件清单
+
+```
+urbanLifelineServ/.bin/database/postgres/sql/
+├── createTableAll.sql # 完整初始化
+├── createTablePermission.sql # 权限模块
+├── createTableUser.sql # 用户模块
+├── createTableFile.sql # 文件模块
+├── createTableMessage.sql # 消息模块
+├── createTableLog.sql # 日志模块
+├── createTableConfig.sql # 配置模块
+├── createTableKnowledge.sql # 知识库模块 ✨
+├── createTableBidding.sql # 招投标模块 ✨
+├── createTableCustomerService.sql # 智能客服模块 ✨
+├── createTableAgent.sql # 智能体管理模块 ✨
+├── optimizations.sql # 优化补丁 ✨
+├── initDataPermission.sql # 权限初始数据
+├── initDataUser.sql # 用户初始数据
+└── initAll.sql # 完整初始化(表+数据)
+```
+
+### B. 扩展插件
+
+```sql
+-- 向量检索
+CREATE EXTENSION IF NOT EXISTS vector;
+
+-- 全文检索(中文)
+CREATE EXTENSION IF NOT EXISTS zhparser;
+CREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
+
+-- 模糊匹配
+CREATE EXTENSION IF NOT EXISTS pg_trgm;
+
+-- UUID生成
+CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
+```
+
+### C. 性能基准
+
+| 指标 | 目标值 | 说明 |
+|------|--------|------|
+| 单表查询 | < 100ms | 主键/索引查询 |
+| 复杂查询 | < 500ms | 多表JOIN |
+| 向量检索 | < 200ms | Top-K检索 |
+| 写入TPS | > 1000 | 批量插入 |
+| 并发连接 | 200+ | HikariCP连接池 |
+
+---
+
+**最后更新**: 2025-12-02
+**维护者**: Urban Lifeline Team
diff --git a/docs/数据库表结构速查.md b/docs/数据库表结构速查.md
deleted file mode 100644
index 6db9d4a..0000000
--- a/docs/数据库表结构速查.md
+++ /dev/null
@@ -1,599 +0,0 @@
-# 数据库表结构速查手册
-
-## 快速导航
-
-- [系统基础模块 (sys)](#系统基础模块-sys)
-- [文件管理模块 (file)](#文件管理模块-file)
-- [消息通知模块 (message)](#消息通知模块-message)
-- [日志模块 (log)](#日志模块-log)
-- [配置管理模块 (config)](#配置管理模块-config)
-- [知识库管理模块 (knowledge)](#知识库管理模块-knowledge)
-- [招投标智能体模块 (bidding)](#招投标智能体模块-bidding)
-- [智能客服系统模块 (customer_service)](#智能客服系统模块-customerservice)
-- [智能体管理模块 (agent)](#智能体管理模块-agent)
-
----
-
-## 系统基础模块 (sys)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_sys_user` | 用户表 | user_id | email, phone, wechat_id, status |
-| `tb_sys_user_info` | 用户信息表 | user_id | avatar, full_name, gender, level |
-| `tb_sys_dept` | 部门表 | dept_id | name, parent_id, dept_path |
-| `tb_sys_role` | 角色表 | role_id | name, scope, owner_dept_id |
-| `tb_sys_permission` | 权限表 | permission_id | name, code, module_id |
-| `tb_sys_user_role` | 用户角色关联表 | (user_id, role_id) | - |
-| `tb_sys_role_permission` | 角色权限关联表 | (role_id, permission_id) | - |
-| `tb_sys_view` | 视图/菜单表 | view_id | name, url, component, type |
-| `tb_sys_module` | 模块表 | module_id | name, description |
-| `tb_sys_acl` | 对象级权限表 | acl_id | object_type, object_id, principal_type, permission |
-| `tb_sys_acl_policy` | ACL策略表 | policy_id | object_type, edit_hierarchy_rule, view_hierarchy_rule |
-| `tb_sys_login_log` | 登录日志表 | optsn | user_id, ip_address, login_time, status |
-| `tb_sys_user_dept` | 用户部门关联表 | (user_id, dept_id) | is_primary, position |
-
-### 权限模型
-
-```
-用户 (tb_sys_user)
- ├─ 用户角色 (tb_sys_user_role)
- │ └─ 角色 (tb_sys_role)
- │ ├─ 角色权限 (tb_sys_role_permission)
- │ │ └─ 权限 (tb_sys_permission)
- │ │ └─ 模块 (tb_sys_module)
- │ └─ 视图权限 (tb_sys_view_permission)
- │ └─ 视图 (tb_sys_view)
- └─ 对象权限 (tb_sys_acl)
- └─ ACL策略 (tb_sys_acl_policy)
-```
-
-### 常用查询
-
-```sql
--- 查询用户所有权限
-SELECT p.code, p.name
-FROM sys.tb_sys_user_role ur
-JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
-JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
-WHERE ur.user_id = 'USER_ID' AND ur.deleted = false;
-
--- 查询部门树
-WITH RECURSIVE dept_tree AS (
- SELECT *, 1 AS level FROM sys.tb_sys_dept WHERE parent_id IS NULL
- UNION ALL
- SELECT d.*, dt.level + 1
- FROM sys.tb_sys_dept d
- JOIN dept_tree dt ON d.parent_id = dt.dept_id
-)
-SELECT * FROM dept_tree ORDER BY level, dept_id;
-```
-
----
-
-## 文件管理模块 (file)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_sys_file` | 文件表 | file_id | name, path, size, type, storage_type, url |
-| `tb_file_relation` | 文件关联表 | relation_id | file_id, object_type, object_id, relation_type |
-
-### 文件类型
-
-- `storage_type`: local(本地存储) / oss(对象存储) / ftp / sftp
-- `relation_type`: attachment(附件) / avatar(头像) / banner(横幅)
-
-### 常用查询
-
-```sql
--- 查询对象的所有附件
-SELECT f.*
-FROM file.tb_sys_file f
-JOIN file.tb_file_relation fr ON f.file_id = fr.file_id
-WHERE fr.object_type = 'bidding_project'
- AND fr.object_id = 'PROJECT_ID'
- AND fr.deleted = false;
-```
-
----
-
-## 消息通知模块 (message)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_message` | 消息表 | message_id | title, content, type, status |
-| `tb_message_range` | 消息发送范围表 | optsn | message_id, target_type, target_id, channel |
-| `tb_message_receiver` | 用户消息接收表 | optsn | message_id, user_id, status, read_time |
-| `tb_message_channel` | 消息渠道配置表 | channel_id | channel_code, channel_name, status |
-| `tb_message_template` | 消息模板表 | template_id | template_code, title_template, content_template |
-
-### 消息发送流程
-
-```
-创建消息 (tb_message)
- ↓
-定义发送范围 (tb_message_range)
- ├─ target_type: user(指定用户) / dept(部门) / role(角色) / all(全员)
- ├─ channel: app / sms / email / wechat
- ↓
-生成接收记录 (tb_message_receiver)
- └─ status: unread → read → handled / deleted
-```
-
-### 常用查询
-
-```sql
--- 查询用户未读消息
-SELECT m.*, mr.create_time AS receive_time
-FROM message.tb_message m
-JOIN message.tb_message_receiver mr ON m.message_id = mr.message_id
-WHERE mr.user_id = 'USER_ID'
- AND mr.status = 'unread'
- AND mr.deleted = false
-ORDER BY mr.create_time DESC;
-```
-
----
-
-## 日志模块 (log)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_sys_log` | 系统日志表 | log_id | type, level, module, message, data, trace_id |
-
-### 日志级别
-
-- `level`: debug / info / warn / error / fatal
-- `type`: system / audit / security / business / api
-
-### 常用查询
-
-```sql
--- 查询错误日志
-SELECT * FROM log.tb_sys_log
-WHERE level IN ('error', 'fatal')
- AND create_time > now() - interval '24 hours'
-ORDER BY create_time DESC;
-
--- 链路追踪
-SELECT * FROM log.tb_sys_log
-WHERE trace_id = 'TRACE_ID'
-ORDER BY create_time;
-```
-
----
-
-## 配置管理模块 (config)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_sys_config` | 系统配置表 | config_id | key, name, value, config_type, render_type |
-
-### 配置类型
-
-- `config_type`: String / INTEGER / BOOLEAN / Float / Double
-- `render_type`: select / input / textarea / checkbox / radio / switch
-
-### 常用查询
-
-```sql
--- 按模块查询配置
-SELECT * FROM config.tb_sys_config
-WHERE module_id = 'MODULE_ID' AND deleted = false
-ORDER BY order_num;
-```
-
----
-
-## 知识库管理模块 (knowledge)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_knowledge_base` | 知识库表 | knowledge_id | name, kb_type, access_level, version |
-| `tb_knowledge_document` | 知识文档表 | doc_id | knowledge_id, title, doc_type, category, embedding_status |
-| `tb_knowledge_chunk` | 文档片段表 | chunk_id | doc_id, knowledge_id, content, embedding |
-| `tb_knowledge_access_log` | 知识访问日志表 | log_id | knowledge_id, doc_id, user_id, access_type |
-
-### 知识库类型
-
-- `kb_type`: bidding(招投标) / customer_service(客服) / internal(内部协同)
-- `access_level`: public(公开) / private(私有) / internal(内部)
-- `embedding_status`: pending(待处理) / processing(处理中) / completed(完成) / failed(失败)
-
-### RAG检索流程
-
-```
-用户查询
- ↓
-向量化查询文本
- ↓
-在 tb_knowledge_chunk 中进行向量检索 (embedding)
- ↓
-获取相关文档片段
- ↓
-关联 tb_knowledge_document 获取完整文档信息
- ↓
-返回结果 + 记录访问日志
-```
-
-### 常用查询
-
-```sql
--- 查询知识库文档
-SELECT d.*, kb.name AS kb_name
-FROM knowledge.tb_knowledge_document d
-JOIN knowledge.tb_knowledge_base kb ON d.knowledge_id = kb.knowledge_id
-WHERE d.knowledge_id = 'knowledge_id'
- AND d.embedding_status = 'completed'
- AND d.deleted = false;
-
--- 向量检索(需要pgvector扩展)
--- SELECT chunk_id, content,
--- 1 - (embedding <=> '[查询向量]'::vector) AS similarity
--- FROM knowledge.tb_knowledge_chunk
--- WHERE knowledge_id = 'knowledge_id'
--- ORDER BY embedding <=> '[查询向量]'::vector
--- LIMIT 10;
-```
-
----
-
-## 招投标智能体模块 (bidding)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_bidding_project` | 招标项目表 | project_id | project_no, project_name, project_status, deadline |
-| `tb_bidding_document` | 招标文件表 | doc_id | project_id, doc_type, parse_status, parse_result |
-| `tb_bidding_requirement` | 要素提取表 | req_id | project_id, req_category, is_veto, compliance_status |
-| `tb_bid_response` | 投标文件生成表 | response_id | project_id, response_type, generation_status |
-| `tb_bidding_scoring_rule` | 评分规则表 | rule_id | project_id, rule_category, max_score, our_score |
-| `tb_bidding_process` | 流程节点表 | process_id | project_id, node_type, node_status |
-| `tb_bid_template` | 投标模板表 | template_id | template_name, template_type, usage_count |
-
-### 项目生命周期
-
-```
-collecting(收集中)
- ↓
-analyzing(分析中) - 智能解读招标文件
- ↓
-preparing(准备投标) - 生成投标文件
- ↓
-submitted(已提交)
- ↓
-opened(已开标)
- ↓
-won(中标) / lost(未中标) / abandoned(放弃)
-```
-
-### 要素类别
-
-- `req_category`:
- - commercial: 商务要素
- - technical: 技术参数
- - veto: 否决项 ⚠️
- - qualification: 资质要求
- - delivery: 交付要求
- - payment: 付款条件
- - scoring: 评分标准
-
-### 常用查询
-
-```sql
--- 查询项目的所有否决项
-SELECT * FROM bidding.tb_bidding_requirement
-WHERE project_id = 'PROJECT_ID'
- AND is_veto = true
- AND deleted = false;
-
--- 查询项目评分预估
-SELECT
- rule_category,
- SUM(max_score) AS total_max_score,
- SUM(our_score) AS total_our_score,
- ROUND(SUM(our_score) / SUM(max_score) * 100, 2) AS score_percentage
-FROM bidding.tb_bidding_scoring_rule
-WHERE project_id = 'PROJECT_ID' AND deleted = false
-GROUP BY rule_category;
-```
-
----
-
-## 智能客服系统模块 (customer_service)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_customer` | 客户信息表 | customer_id | customer_name, phone, wechat_openid, customer_level |
-| `tb_conversation` | 会话表 | conversation_id | customer_id, conversation_type, agent_id, satisfaction_rating |
-| `tb_conversation_message` | 会话消息表 | message_id | conversation_id, sender_type, content, is_ai_generated |
-| `tb_ticket` | 工单表 | ticket_id | ticket_no, customer_id, ticket_type, ticket_status, sla_deadline |
-| `tb_ticket_log` | 工单处理记录表 | log_id | ticket_id, action_type, action_content |
-| `tb_faq` | FAQ表 | faq_id | category, question, answer, hit_count |
-| `tb_service_evaluation` | 客服评价表 | evaluation_id | customer_id, evaluation_type, rating |
-| `tb_crm_config` | CRM集成配置表 | config_id | crm_system, api_endpoint, sync_enabled |
-
-### 会话流程
-
-```
-客户发起咨询
- ↓
-创建会话 (tb_conversation)
- ├─ conversation_type: ai(AI客服) / human(人工) / transfer(转接)
- ↓
-消息交互 (tb_conversation_message)
- ├─ sender_type: customer / agent / system
- ├─ is_ai_generated: true/false
- ├─ kb_references: [知识库文档ID]
- ↓
-智能工单生成 (tb_ticket)
- ├─ ticket_source: ai / manual / system
- ↓
-满意度评价 (tb_service_evaluation / tb_conversation)
-```
-
-### 工单状态
-
-- `ticket_status`:
- - pending: 待处理
- - processing: 处理中
- - resolved: 已解决
- - closed: 已关闭
- - cancelled: 已取消
-
-### 常用查询
-
-```sql
--- 查询客户的活跃会话
-SELECT * FROM customer_service.tb_conversation
-WHERE customer_id = 'CUSTOMER_ID'
- AND conversation_status = 'active'
- AND deleted = false;
-
--- 查询逾期工单
-SELECT * FROM customer_service.tb_ticket
-WHERE is_overdue = true
- AND ticket_status IN ('pending', 'processing')
- AND deleted = false
-ORDER BY sla_deadline;
-
--- 查询AI回答质量
-SELECT
- DATE(create_time) AS stat_date,
- AVG(confidence_score) AS avg_confidence,
- COUNT(*) FILTER (WHERE confidence_score > 0.8) AS high_confidence_count,
- COUNT(*) AS total_count
-FROM customer_service.tb_conversation_message
-WHERE is_ai_generated = true
- AND deleted = false
-GROUP BY DATE(create_time);
-```
-
----
-
-## 智能体管理模块 (agent)
-
-### 核心表结构
-
-| 表名 | 说明 | 主键 | 核心字段 |
-|------|------|------|----------|
-| `tb_agent` | 智能体定义表 | agent_id | agent_code, agent_name, agent_type, model_config |
-| `tb_agent_session` | 智能体会话表 | session_id | agent_id, user_id, session_status, token_usage |
-| `tb_agent_message` | 智能体消息表 | message_id | session_id, role, content, function_call |
-| `tb_agent_tool` | 智能体工具表 | tool_id | tool_code, tool_type, function_schema, api_endpoint |
-| `tb_api_integration` | API集成表 | integration_id | integration_name, base_url, auth_config |
-| `tb_api_call_log` | API调用日志表 | log_id | integration_id, endpoint, response_status, duration_ms |
-| `tb_agent_metrics` | 智能体监控指标表 | metric_id | agent_id, metric_date, total_sessions, total_tokens |
-| `tb_agent_error_log` | 智能体异常日志表 | log_id | agent_id, error_type, error_message, severity |
-| `tb_agent_rating` | 智能体评价表 | rating_id | agent_id, rating, feedback |
-
-### 智能体类型
-
-- `agent_type`:
- - bidding: 招投标智能体
- - customer_service: 客服智能体
- - knowledge_assistant: 知识助手
- - custom: 自定义智能体
-
-### 工具类型
-
-- `tool_type`:
- - api: API调用
- - function: 函数
- - plugin: 插件
- - integration: 集成
-
-### 会话流程
-
-```
-用户请求
- ↓
-创建会话 (tb_agent_session)
- ↓
-消息交互 (tb_agent_message)
- ├─ role: user / assistant / system / function
- ├─ function_call: 工具调用
- ↓
-工具执行 (tb_agent_tool)
- ├─ API调用记录 (tb_api_call_log)
- ↓
-记录监控指标 (tb_agent_metrics)
- ├─ 错误记录 (tb_agent_error_log)
- ↓
-用户评价 (tb_agent_rating)
-```
-
-### 常用查询
-
-```sql
--- 查询智能体使用统计
-SELECT * FROM agent.v_agent_usage_stats
-WHERE agent_id = 'AGENT_ID';
-
--- 查询API健康状态
-SELECT
- integration_name,
- health_status,
- last_health_check,
- EXTRACT(EPOCH FROM (now() - last_health_check))/60 AS minutes_since_check
-FROM agent.tb_api_integration
-WHERE deleted = false
-ORDER BY health_status, last_health_check;
-
--- 查询智能体错误率
-SELECT
- a.agent_name,
- COUNT(*) FILTER (WHERE e.severity = 'critical') AS critical_errors,
- COUNT(*) FILTER (WHERE e.severity = 'error') AS errors,
- COUNT(*) AS total_errors
-FROM agent.tb_agent a
-LEFT JOIN agent.tb_agent_error_log e ON a.agent_id = e.agent_id
-WHERE e.create_time > now() - interval '24 hours'
-GROUP BY a.agent_id, a.agent_name;
-```
-
----
-
-## 数据字典常用字段说明
-
-### 通用字段
-
-所有表都包含以下标准字段:
-
-| 字段 | 类型 | 说明 |
-|------|------|------|
-| `optsn` | VARCHAR(50) | 流水号(唯一标识) |
-| `xxx_id` | VARCHAR(50) | 主键ID |
-| `dept_path` | VARCHAR(255) | 部门全路径(多租户隔离) |
-| `creator` | VARCHAR(50) | 创建者ID |
-| `updater` | VARCHAR(50) | 更新者ID |
-| `create_time` | TIMESTAMPTZ | 创建时间(带时区) |
-| `update_time` | TIMESTAMPTZ | 更新时间(触发器自动更新) |
-| `delete_time` | TIMESTAMPTZ | 删除时间 |
-| `deleted` | BOOLEAN | 软删除标记 |
-
-### 时间戳说明
-
-- 使用 `TIMESTAMPTZ` 类型(带时区的时间戳)
-- 自动记录创建时间
-- 更新时间由触发器自动维护
-- 支持软删除(保留 delete_time)
-
-### 部门路径(dept_path)
-
-格式:`/1/2/3/`
-
-- 用于多租户数据隔离
-- 支持 LIKE 递归查询
-- 示例查询:`WHERE dept_path LIKE '/1/2/%'`
-
----
-
-## 视图速查
-
-| 视图名 | Schema | 说明 |
-|--------|--------|------|
-| `v_user_full_info` | sys | 用户完整信息(含用户信息表) |
-| `v_user_role_permission` | sys | 用户角色权限(含模块) |
-| `v_user_full_permissions` | sys | 用户完整权限(含ACL) |
-| `v_agent_usage_stats` | agent | 智能体使用统计 |
-| `v_agent_realtime_status` | agent | 智能体实时状态 |
-| `v_ticket_stats` | customer_service | 工单统计 |
-| `v_ticket_efficiency` | customer_service | 工单处理效率 |
-| `v_project_stats` | bidding | 招投标项目统计 |
-
----
-
-## 函数速查
-
-| 函数名 | Schema | 说明 |
-|--------|--------|------|
-| `update_modified_column()` | public | 自动更新update_time触发器函数 |
-| `audit_trigger_func()` | public | 审计日志触发器函数 |
-| `archive_old_logs()` | public | 归档旧日志数据 |
-| `archive_api_logs()` | agent | 归档API调用日志 |
-| `check_table_bloat()` | public | 检查表膨胀情况 |
-| `create_update_triggers()` | public | 批量创建更新触发器 |
-
----
-
-## 索引策略
-
-### 主要索引类型
-
-1. **B-Tree索引**(默认):主键、外键、常规查询字段
-2. **GIN索引**:JSONB字段、数组字段、全文搜索
-3. **部分索引**:带WHERE条件的索引(如 `WHERE deleted = false`)
-4. **表达式索引**:函数索引(如 `lower(email)`)
-
-### 关键索引示例
-
-```sql
--- 部分索引(减少索引大小)
-CREATE INDEX idx_xxx ON table_name(column) WHERE deleted = false;
-
--- GIN索引(数组查询)
-CREATE INDEX idx_xxx ON table_name USING gin(array_column);
-
--- 全文搜索索引
-CREATE INDEX idx_xxx ON table_name USING gin(text_column gin_trgm_ops);
-
--- 表达式索引
-CREATE INDEX idx_xxx ON table_name(lower(email));
-```
-
----
-
-## 性能优化建议
-
-### 查询优化
-
-1. **使用索引**:WHERE、JOIN、ORDER BY字段都要有索引
-2. **避免SELECT ***:只查询需要的字段
-3. **使用LIMIT**:分页查询限制返回行数
-4. **使用EXPLAIN**:分析查询计划
-
-### 批量操作
-
-```sql
--- 批量插入(使用COPY或批量INSERT)
-COPY table_name FROM '/path/to/file.csv' WITH CSV;
-
--- 批量更新(使用UPDATE...FROM)
-UPDATE table_name t
-SET column = data.value
-FROM (VALUES (1, 'a'), (2, 'b')) AS data(id, value)
-WHERE t.id = data.id;
-```
-
-### 定期维护
-
-```sql
--- 分析表(更新统计信息)
-ANALYZE table_name;
-
--- 清理和分析
-VACUUM ANALYZE table_name;
-
--- 重建索引
-REINDEX TABLE table_name;
-```
-
----
-
-**版本**: 1.0
-**更新时间**: 2024-12-02
diff --git a/docs/数据库设计交付总结.md b/docs/数据库设计交付总结.md
deleted file mode 100644
index cf85485..0000000
--- a/docs/数据库设计交付总结.md
+++ /dev/null
@@ -1,511 +0,0 @@
-# 泰豪电源AI数智化平台 - 数据库设计交付总结
-
-## 📋 交付概览
-
-基于`功能结构.xml`中定义的系统架构,完成了泰豪电源AI数智化平台的完整数据库设计,覆盖"一个底座、多种智能体"的核心理念和四大业务模块。
-
----
-
-## 📦 交付内容
-
-### 1. SQL脚本文件
-
-所有文件位于:`urbanLifelineServ\.bin\database\postgres\sql\`
-
-| 文件名 | 说明 | 表数量 |
-|--------|------|--------|
-| `createTablePermission.sql` | 系统权限模块(现有优化) | 11张 |
-| `createTableUser.sql` | 用户管理模块(现有优化) | 3张 |
-| `createTableFile.sql` | 文件管理模块(现有) | 1张 |
-| `createTableMessage.sql` | 消息通知模块(现有) | 4张 |
-| `createTableLog.sql` | 日志模块(现有) | 1张 |
-| `createTableConfig.sql` | 配置管理模块(现有) | 1张 |
-| **`createTableKnowledge.sql`** | ✨ **知识库管理模块(新建)** | **4张** |
-| **`createTableBidding.sql`** | ✨ **招投标智能体业务模块(新建)** | **8张** |
-| **`createTableCustomerService.sql`** | ✨ **智能客服系统业务模块(新建)** | **9张** |
-| **`createTableAgent.sql`** | ✨ **智能体管理模块(新建)** | **11张** |
-| **`createTableAll.sql`** | ✨ **完整初始化脚本(新建)** | - |
-| **`optimizations.sql`** | ✨ **数据库优化补丁(新建)** | - |
-
-**总计:53张核心业务表**
-
-### 2. 文档资料
-
-所有文档位于:`docs\`
-
-| 文件名 | 说明 |
-|--------|------|
-| **`数据库设计文档.md`** | 完整的数据库设计说明文档(23000+字) |
-| **`数据库表结构速查.md`** | 表结构快速参考手册(含常用查询示例) |
-| **`数据库设计交付总结.md`** | 本文档 |
-
----
-
-## 🎯 核心设计亮点
-
-### 1. 模块化架构设计
-
-采用9个Schema实现业务逻辑隔离:
-
-```
-sys ← 系统基础(用户、权限、部门)
-file ← 文件管理
-message ← 消息通知
-log ← 日志审计
-config ← 系统配置
-knowledge ← 知识库管理(支持RAG检索)
-bidding ← 招投标智能体业务
-customer_service ← 智能客服系统业务
-agent ← 智能体管理和平台基础设施
-```
-
-### 2. 权限体系设计
-
-**RBAC + ACL混合模型**
-
-- **RBAC(基于角色的访问控制)**:
- - 支持全局角色和部门私有角色
- - 角色-权限-模块三层结构
- - 视图/菜单权限独立管理
-
-- **ACL(访问控制列表)**:
- - 对象级细粒度权限控制
- - 支持任意对象类型(文章、文件、课程等)
- - 权限位设计(读/写/执行)
- - 支持显式拒绝和权限继承
-
-### 3. 多租户支持
-
-- **部门路径隔离**(`dept_path`字段):格式 `/1/2/3/`
-- **行级安全策略**(RLS):基于用户部门自动过滤数据
-- **作用域控制**:角色和权限的作用域管理
-
-### 4. 知识库智能管理
-
-**支持RAG(检索增强生成)流程:**
-
-```
-文档上传 → 智能分类 → AI摘要 → 关键词提取 → 文档切片 → 向量化 → 存储
- ↓ ↓
- tb_knowledge_document tb_knowledge_chunk
- (支持向量检索)
-```
-
-**特性:**
-- 多类型知识库(招投标/客服/内部协同)
-- 版本管理和历史追溯
-- 向量化状态跟踪
-- 访问日志记录
-
-### 5. 招投标全流程管理
-
-**完整业务流程覆盖:**
-
-```
-项目创建 → 文件采集 → 智能解读 → 要素提取 → 评分分析
- ↓ ↓
-流程跟踪 ← 投标提交 ← 文件审核 ← 投标文件生成 ← 模板管理
-```
-
-**核心功能:**
-- **智能要素提取**:7大类要素(商务/技术/否决项/资质/交付/付款/评分)
-- **AI文件生成**:支持技术标/商务标/综合标
-- **评分规则分析**:自动解析评分标准,预估得分
-- **流程节点管理**:完整的项目生命周期跟踪
-
-### 6. 智能客服系统
-
-**全渠道客服支持:**
-
-```
-微信小程序 → AI问答 → 知识库检索 → 工单生成 → CRM同步
- ↓ ↓ ↓ ↓
-客户管理 会话记录 工单处理 满意度评价
-```
-
-**特性:**
-- **双终端知识库**:客户咨询知识库(外部)+ 内部资料知识库(内部)
-- **智能会话管理**:AI/人工/转接会话类型,情感分析,意图识别
-- **工单智能处理**:AI自动生成工单,SLA超时预警,CRM双向同步
-- **评价体系**:多维度评价(准确性、速度、友好度等)
-
-### 7. 智能体管理平台
-
-**智能体广场 + 工具集成 + 运维监控:**
-
-```
-智能体定义 → 工具配置 → API集成 → 会话管理 → 监控运维 → 评价反馈
- ↓ ↓ ↓ ↓ ↓
- 多模型支持 Function 健康检查 Token统计 错误追踪
-```
-
-**特性:**
-- **智能体广场**:发布/评分/分类/标签管理
-- **工具生态**:支持API调用、函数、插件、集成
-- **监控体系**:实时指标、错误日志、性能分析
-- **成本跟踪**:Token使用量、API调用费用统计
-
----
-
-## 📊 数据库架构统计
-
-### 表结构统计
-
-| Schema | 表数量 | 主要功能 |
-|--------|--------|----------|
-| sys | 13 | 用户、角色、权限、部门、ACL |
-| file | 2 | 文件管理、文件关联 |
-| message | 5 | 消息、发送范围、接收记录、渠道、模板 |
-| log | 1 | 系统日志 |
-| config | 1 | 系统配置 |
-| knowledge | 4 | 知识库、文档、片段、访问日志 |
-| bidding | 8 | 项目、文件、要素、投标、评分、流程、模板 |
-| customer_service | 9 | 客户、会话、消息、工单、FAQ、评价、CRM |
-| agent | 11 | 智能体、会话、消息、工具、API、监控、错误 |
-| **总计** | **54** | - |
-
-### 索引策略
-
-- **B-Tree索引**:100+ 个(主键、外键、常规查询)
-- **GIN索引**:20+ 个(JSONB、数组、全文搜索)
-- **部分索引**:50+ 个(WHERE deleted = false)
-- **表达式索引**:5+ 个(函数索引)
-
-### 视图和函数
-
-- **业务视图**:8个(权限视图、统计视图)
-- **触发器函数**:2个(自动更新时间、审计日志)
-- **业务函数**:4个(数据归档、性能监控)
-
----
-
-## 🔧 技术特性
-
-### 1. 数据类型使用
-
-- **TIMESTAMPTZ**:全部时间字段(带时区支持)
-- **JSONB**:配置、元数据、扩展字段
-- **数组(TEXT[])**:标签、关键词、ID列表
-- **DECIMAL**:金额、评分(精确计算)
-- **vector**:向量嵌入(需pgvector扩展,可选)
-
-### 2. 软删除机制
-
-所有业务表支持软删除:
-- `deleted` 字段:BOOLEAN类型,默认false
-- `delete_time` 字段:删除时间戳
-- 索引优化:`WHERE deleted = false`
-
-### 3. 审计追踪
-
-- **通用字段**:creator、updater、create_time、update_time
-- **自动触发器**:update_time自动更新
-- **审计日志**:可选的审计触发器(记录所有变更)
-- **链路追踪**:trace_id、span_id支持分布式追踪
-
-### 4. 性能优化
-
-- **分区表设计**:日志表、指标表建议按时间分区
-- **物化视图**:权限视图可物化提升性能
-- **数据归档**:提供自动归档函数
-- **表膨胀监控**:check_table_bloat()函数
-
----
-
-## 📈 业务价值
-
-### 1. 支撑功能结构.xml定义的四大业务模块
-
-✅ **资料管理智能化** → knowledge模块
-✅ **招投标自动化** → bidding模块
-✅ **售后客服智能化** → customer_service模块
-✅ **企业内部知识协同** → knowledge + agent模块
-
-### 2. 实现"一个底座、多种智能体"
-
-- **统一的智能体管理平台**(agent模块)
-- **共享的知识库体系**(knowledge模块)
-- **统一的权限和用户管理**(sys模块)
-- **统一的文件和消息服务**(file、message模块)
-
-### 3. 可扩展性设计
-
-- **新增智能体类型**:在agent.tb_agent中添加新的agent_type
-- **新增业务模块**:创建新的Schema和表
-- **集成外部系统**:通过API集成表和CRM配置表
-- **自定义权限**:通过ACL表实现任意对象的权限控制
-
----
-
-## 🚀 部署指南
-
-### 快速部署
-
-```bash
-# 进入SQL脚本目录
-cd urbanLifelineServ\.bin\database\postgres\sql
-
-# 1. 创建数据库
-createdb urbanlifeline
-
-# 2. 执行完整初始化脚本(推荐)
-psql -d urbanlifeline -f createTableAll.sql
-
-# 或者手动按顺序执行
-psql -d urbanlifeline -f createTablePermission.sql
-psql -d urbanlifeline -f createTableUser.sql
-psql -d urbanlifeline -f createTableFile.sql
-psql -d urbanlifeline -f createTableMessage.sql
-psql -d urbanlifeline -f createTableLog.sql
-psql -d urbanlifeline -f createTableConfig.sql
-psql -d urbanlifeline -f createTableKnowledge.sql
-psql -d urbanlifeline -f createTableBidding.sql
-psql -d urbanlifeline -f createTableCustomerService.sql
-psql -d urbanlifeline -f createTableAgent.sql
-
-# 3. 执行优化补丁(可选)
-psql -d urbanlifeline -f optimizations.sql
-
-# 4. 初始化基础数据
-psql -d urbanlifeline -f initDataConfig.sql
-```
-
-### 依赖扩展
-
-```sql
--- 必需扩展
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUID生成
-CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- 全文搜索
-CREATE EXTENSION IF NOT EXISTS "btree_gin"; -- GIN索引支持
-
--- 可选扩展
-CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- 数据加密
-CREATE EXTENSION IF NOT EXISTS "vector"; -- 向量检索(需单独安装)
-```
-
----
-
-## 🔍 现有SQL文件的优化建议
-
-### 已实施的优化
-
-✅ **createTableUser.sql**
-- 移除登录日志表的password字段(安全性)
-- 添加用户部门关联表(多对多关系)
-- 添加主部门字段
-
-✅ **createTablePermission.sql**
-- 添加角色排序字段
-- 添加权限类型字段(操作/数据/菜单权限)
-
-✅ **createTableFile.sql**
-- 添加版本管理字段
-- 添加分类和标签
-- 创建文件关联表(统一文件关联机制)
-
-✅ **createTableMessage.sql**
-- 创建消息模板表(支持模板化发送)
-
-✅ **createTableLog.sql**
-- 添加链路追踪字段(trace_id、span_id)
-
-### 建议的补充优化
-
-详见:`optimizations.sql`文件
-
----
-
-## 📚 参考文档
-
-### 1. 数据库设计文档.md
-
-**内容包含:**
-- 系统概述和架构设计
-- 核心模块详细设计
-- 数据库优化建议
-- 现有SQL文件修改建议
-- 数据安全建议
-- 部署和维护建议
-
-**适用场景:**
-- 系统架构师了解整体设计
-- 开发人员理解业务逻辑
-- DBA进行数据库优化
-
-### 2. 数据库表结构速查.md
-
-**内容包含:**
-- 所有模块的表结构快速参考
-- 常用查询示例
-- 视图和函数速查
-- 索引策略说明
-- 性能优化建议
-
-**适用场景:**
-- 日常开发查询表结构
-- 编写业务SQL
-- 快速定位相关表
-
-### 3. 功能结构.xml
-
-**原始需求文档:**
-- 系统目标定义
-- 四大业务模块功能划分
-- 平台基础设施模块
-- Draw.io格式的架构图
-
----
-
-## ✅ 验证检查清单
-
-### 数据完整性
-
-- [x] 所有表都有主键
-- [x] 外键关系正确定义
-- [x] 唯一约束合理设置
-- [x] 非空约束符合业务逻辑
-
-### 性能优化
-
-- [x] 高频查询字段都有索引
-- [x] 外键字段都有索引
-- [x] 使用部分索引减少索引大小
-- [x] JSONB和数组字段使用GIN索引
-
-### 安全性
-
-- [x] 敏感字段移除或加密
-- [x] 软删除机制
-- [x] 审计日志支持
-- [x] 行级安全策略(可选启用)
-
-### 可维护性
-
-- [x] 表名和字段名规范统一
-- [x] 所有表和字段都有注释
-- [x] 触发器自动维护update_time
-- [x] 提供数据归档函数
-
-### 可扩展性
-
-- [x] Schema分离便于模块扩展
-- [x] JSONB字段支持灵活扩展
-- [x] 标签和分类字段
-- [x] 元数据字段预留
-
----
-
-## 📊 后续优化方向
-
-### 短期(1-3个月)
-
-1. **向量检索优化**
- - 安装pgvector扩展
- - 优化embedding索引参数
- - 实现混合检索(向量+全文)
-
-2. **监控告警**
- - 集成pgBadger日志分析
- - 配置慢查询告警
- - 设置表膨胀告警
-
-3. **数据初始化**
- - 编写初始化数据脚本
- - 创建测试数据集
- - 准备演示数据
-
-### 中期(3-6个月)
-
-1. **性能优化**
- - 分析慢查询并优化
- - 实施分区表策略
- - 创建物化视图
-
-2. **读写分离**
- - 配置主从复制
- - 实现读写分离中间件
- - 优化读库查询
-
-3. **备份策略**
- - 实施全量+增量备份
- - 配置WAL归档
- - 演练灾难恢复
-
-### 长期(6-12个月)
-
-1. **分布式部署**
- - 评估Citus扩展
- - 设计分片策略
- - 实现水平扩展
-
-2. **多数据中心**
- - 配置异地备份
- - 实现数据同步
- - 制定灾备方案
-
-3. **智能优化**
- - 自动索引推荐
- - 查询性能自动优化
- - 存储自动扩容
-
----
-
-## 🎓 技术栈总结
-
-### 数据库技术
-
-- **PostgreSQL 14+**:主数据库
-- **pgvector**:向量检索(可选)
-- **pg_trgm**:全文搜索
-- **JSONB**:半结构化数据存储
-- **Row Level Security**:行级安全策略
-
-### 设计模式
-
-- **RBAC + ACL**:混合权限模型
-- **软删除**:数据安全保护
-- **多租户**:部门路径隔离
-- **审计追踪**:完整的变更记录
-- **事件驱动**:触发器自动化
-
-### 性能优化
-
-- **索引策略**:B-Tree + GIN + 部分索引
-- **查询优化**:视图、CTE、窗口函数
-- **数据归档**:自动归档函数
-- **分区表**:时间序列数据分区
-
----
-
-## 📞 技术支持
-
-### 问题反馈
-
-如在使用过程中遇到问题,请提供:
-1. 问题描述
-2. 错误信息
-3. 执行的SQL语句
-4. PostgreSQL版本
-
-### 文档维护
-
-本文档随数据库设计持续更新:
-- **当前版本**:v1.0
-- **更新日期**:2024-12-02
-- **维护团队**:泰豪电源AI数智化平台开发组
-
----
-
-## 🎉 交付完成
-
-✅ **50+张核心业务表设计完成**
-✅ **12个SQL脚本文件交付**
-✅ **3份完整技术文档**
-✅ **覆盖4大业务模块**
-✅ **支持"一个底座、多种智能体"架构**
-
-**数据库设计已完全就绪,可直接用于项目开发!** 🚀
-
----
-
-**感谢使用!**
diff --git a/docs/数据库设计文档.md b/docs/数据库设计文档.md
deleted file mode 100644
index 788825b..0000000
--- a/docs/数据库设计文档.md
+++ /dev/null
@@ -1,698 +0,0 @@
-# 泰豪电源AI数智化平台 - 数据库设计文档
-
-## 一、系统概述
-
-基于功能结构.xml的系统架构设计,本数据库设计遵循"一个底座、多种智能体"的核心理念,支持四大业务模块:
-
-1. **资料管理智能化**
-2. **招投标自动化**
-3. **售后客服智能化**
-4. **企业内部知识协同**
-
-## 二、数据库架构设计
-
-### 2.1 Schema划分
-
-采用多Schema架构,按业务模块逻辑隔离:
-
-| Schema | 说明 | 核心表数量 |
-|--------|------|-----------|
-| `sys` | 系统基础模块(用户、角色、权限、部门) | 11 |
-| `file` | 文件管理模块 | 1 |
-| `message` | 消息通知模块 | 4 |
-| `log` | 日志审计模块 | 1 |
-| `config` | 系统配置模块 | 1 |
-| `knowledge` | 知识库管理模块 | 4 |
-| `bidding` | 招投标智能体业务模块 | 8 |
-| `customer_service` | 智能客服系统业务模块 | 9 |
-| `agent` | 智能体管理和平台基础设施模块 | 11 |
-
-**总计:50张核心业务表**
-
-## 三、核心模块详细设计
-
-### 3.1 系统基础模块 (sys)
-
-#### 3.1.1 权限体系设计
-
-采用**RBAC(基于角色的访问控制)+ ACL(访问控制列表)**混合模型:
-
-**核心表:**
-- `tb_sys_user` - 用户表
-- `tb_sys_role` - 角色表(支持全局角色和部门私有角色)
-- `tb_sys_permission` - 权限表
-- `tb_sys_dept` - 部门表(树形结构)
-- `tb_sys_acl` - 通用对象级权限表(支持细粒度权限控制)
-- `tb_sys_acl_policy` - ACL策略表(层级可见/可编辑规则)
-
-**设计亮点:**
-1. **多租户支持**:通过`dept_path`字段实现数据隔离,支持部门级多租户
-2. **角色作用域**:`scope`字段区分全局角色和部门私有角色
-3. **细粒度权限**:ACL表支持对任意对象类型(文章、文件、课程等)的权限控制
-4. **层级权限继承**:`include_descendants`支持子部门/子角色权限继承
-
-#### 3.1.2 用户信息管理
-
-```sql
--- 用户表结构优势
-tb_sys_user:
- - 支持多种登录方式(email、phone、wechat_id)
- - 密码加密存储(建议bcrypt/argon2)
- - 软删除机制(deleted + delete_time)
- - 时区感知时间戳(TIMESTAMPTZ)
-```
-
-### 3.2 知识库管理模块 (knowledge)
-
-#### 3.2.1 表结构设计
-
-**核心表:**
-- `tb_knowledge_base` - 知识库定义表
-- `tb_knowledge_document` - 知识文档表
-- `tb_knowledge_chunk` - 文档片段表(RAG检索)
-- `tb_knowledge_access_log` - 访问日志表
-
-**设计亮点:**
-
-1. **多类型知识库支持**
-```sql
-kb_type:
- - bidding -- 招投标知识库
- - customer_service -- 客服知识库
- - internal -- 内部协同知识库
-```
-
-2. **文档智能处理**
- - 自动分类(`category`字段)
- - AI摘要生成(`content_summary`)
- - 关键词提取(`keywords`数组)
- - 向量化状态跟踪(`embedding_status`)
-
-3. **RAG检索支持**
- - `tb_knowledge_chunk`表存储文档切片
- - `embedding`字段存储向量(需pgvector扩展)
- - 支持语义检索和混合检索
-
-4. **版本管理**
- - `version`字段跟踪文档版本
- - `parent_doc_id`构建版本树
-
-### 3.3 招投标智能体业务模块 (bidding)
-
-#### 3.3.1 核心业务流程
-
-```
-项目创建 → 文件采集 → 智能解读 → 要素提取 → 投标文件生成 → 审核提交 → 流程跟踪
-```
-
-#### 3.3.2 表结构设计
-
-**核心表:**
-1. `tb_bidding_project` - 招标项目表(主表)
-2. `tb_bidding_document` - 招标文件表
-3. `tb_bidding_requirement` - 要素提取表
-4. `tb_bid_response` - 投标文件生成表
-5. `tb_bidding_scoring_rule` - 评分规则表
-6. `tb_bidding_process` - 流程节点表
-7. `tb_bid_template` - 投标模板表
-
-**设计亮点:**
-
-1. **完整项目生命周期管理**
-```sql
-project_status:
- - collecting -- 收集中
- - analyzing -- 分析中
- - preparing -- 准备投标
- - submitted -- 已提交
- - opened -- 已开标
- - won/lost -- 中标/未中标
- - abandoned -- 放弃
-```
-
-2. **智能要素提取**
- - 支持7大类要素(商务、技术、否决项、资质、交付、付款、评分)
- - AI提取置信度跟踪
- - 来源位置记录(页码、段落)
- - 合规状态跟踪
-
-3. **投标文件生成**
- - 支持多种生成方式(AI生成、模板生成、人工编写)
- - 版本管理(`parent_version_id`)
- - 审批流程状态跟踪
-
-4. **评分规则智能分析**
- - 多维度评分(技术分、商务分、价格分、信誉分)
- - 公式计算支持
- - 得分预估和优化建议
-
-### 3.4 智能客服系统业务模块 (customer_service)
-
-#### 3.4.1 核心业务流程
-
-```
-客户咨询 → AI问答 → 人工转接 → 工单生成 → 工单处理 → CRM同步 → 满意度评价
-```
-
-#### 3.4.2 表结构设计
-
-**核心表:**
-1. `tb_customer` - 客户信息表
-2. `tb_conversation` - 会话表
-3. `tb_conversation_message` - 会话消息表
-4. `tb_ticket` - 工单表
-5. `tb_ticket_log` - 工单处理记录表
-6. `tb_faq` - FAQ表
-7. `tb_service_evaluation` - 客服评价表
-8. `tb_crm_config` - CRM集成配置表
-
-**设计亮点:**
-
-1. **全渠道客户管理**
- - 支持多渠道(微信、网页、APP、电话)
- - 客户等级分层(VIP、重要、普通、潜在)
- - 标签化管理
- - CRM系统ID映射
-
-2. **智能会话管理**
- - AI/人工/转接会话类型
- - 会话摘要自动生成
- - 满意度评价跟踪
- - 消息情感分析和意图识别
-
-3. **工单智能处理**
- - AI自动生成工单
- - SLA超时预警
- - 优先级智能判定
- - CRM双向同步
-
-4. **知识库引用跟踪**
- - `kb_references`字段记录引用的知识库文档
- - 支持回答溯源
- - 知识库质量评估数据
-
-### 3.5 智能体管理模块 (agent)
-
-#### 3.5.1 核心功能
-
-```
-智能体定义 → 工具集成 → API管理 → 会话管理 → 监控运维 → 评价反馈
-```
-
-#### 3.5.2 表结构设计
-
-**核心表:**
-1. `tb_agent` - 智能体定义表
-2. `tb_agent_session` - 智能体会话表
-3. `tb_agent_message` - 智能体消息表
-4. `tb_agent_tool` - 智能体工具表
-5. `tb_api_integration` - API集成注册表
-6. `tb_api_call_log` - API调用日志表
-7. `tb_agent_metrics` - 智能体监控指标表
-8. `tb_agent_error_log` - 智能体异常日志表
-9. `tb_agent_rating` - 智能体评价表
-
-**设计亮点:**
-
-1. **智能体广场**
- - `is_published`字段支持发布到广场
- - 评分和使用次数统计
- - 分类和标签管理
- - 访问级别控制
-
-2. **工具和API集成**
- - 标准化工具定义(OpenAI Function Calling格式)
- - 多种认证方式支持
- - 健康检查机制
- - 调用日志完整记录
-
-3. **监控和运维**
- - 按日期/小时的指标聚合
- - 成本跟踪(Token使用量、API调用费用)
- - 错误日志和堆栈跟踪
- - 成功率和响应时间监控
-
-4. **会话管理**
- - 支持对话、任务、工作流多种类型
- - 上下文管理(JSONB格式)
- - Token使用量统计
- - 知识库引用跟踪
-
-## 四、数据库优化建议
-
-### 4.1 索引优化
-
-#### 4.1.1 已实现的索引策略
-
-1. **主键索引**:所有表都有主键(通常为业务ID)
-2. **唯一索引**:关键业务字段(email、phone、编号等)
-3. **外键索引**:关联查询字段
-4. **复合索引**:高频查询组合字段
-5. **部分索引**:带WHERE条件的索引(减少索引大小)
-6. **GIN索引**:数组字段(tags、keywords等)
-
-#### 4.1.2 建议增加的索引
-
-```sql
--- 知识库文档全文搜索索引(需要pg_trgm扩展)
-CREATE INDEX idx_knowledge_doc_title_trgm
-ON knowledge.tb_knowledge_document USING gin(title gin_trgm_ops);
-
--- 会话消息内容全文搜索
-CREATE INDEX idx_message_content_trgm
-ON customer_service.tb_conversation_message USING gin(content gin_trgm_ops);
-
--- 招标项目名称搜索
-CREATE INDEX idx_project_name_trgm
-ON bidding.tb_bidding_project USING gin(project_name gin_trgm_ops);
-```
-
-### 4.2 性能优化建议
-
-#### 4.2.1 分区表设计
-
-对于数据量大、查询集中在时间范围的表,建议使用分区:
-
-```sql
--- 示例:API调用日志按月分区
-CREATE TABLE agent.tb_api_call_log (
- -- ... 字段定义
-) PARTITION BY RANGE (create_time);
-
-CREATE TABLE agent.tb_api_call_log_2024_01
-PARTITION OF agent.tb_api_call_log
-FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
-```
-
-**建议分区的表:**
-- `agent.tb_api_call_log` - API调用日志
-- `log.tb_sys_log` - 系统日志
-- `knowledge.tb_knowledge_access_log` - 知识访问日志
-- `agent.tb_agent_metrics` - 智能体监控指标(已按日期设计)
-
-#### 4.2.2 JSONB字段优化
-
-```sql
--- 为JSONB字段创建GIN索引
-CREATE INDEX idx_agent_model_config_gin
-ON agent.tb_agent(model_config) USING gin;
-
--- 为JSONB内特定键创建表达式索引
-CREATE INDEX idx_agent_config_model_name
-ON agent.tb_agent((model_config->>'model_name'));
-```
-
-#### 4.2.3 数组字段优化
-
-```sql
--- 使用GIN索引支持数组查询
-CREATE INDEX idx_kb_doc_tags_gin
-ON knowledge.tb_knowledge_document USING gin(tags);
-
--- 查询示例
-SELECT * FROM knowledge.tb_knowledge_document
-WHERE tags @> ARRAY['技术文档'];
-```
-
-### 4.3 数据归档策略
-
-#### 4.3.1 软删除设计
-
-当前设计使用软删除(`deleted`字段),建议:
-
-1. **定期归档**:将deleted=true且超过6个月的数据移至归档表
-2. **归档表命名**:`tb_xxx_archived`
-3. **保留必要索引**:归档表仅保留时间范围查询索引
-
-#### 4.3.2 日志数据归档
-
-```sql
--- 日志归档策略
--- 1. API调用日志:保留近3个月,其余归档
--- 2. 系统日志:保留近6个月,其余归档
--- 3. 访问日志:保留近1个月,其余归档
-
--- 归档函数示例
-CREATE OR REPLACE FUNCTION archive_old_logs()
-RETURNS void AS $$
-BEGIN
- -- 归档API调用日志
- INSERT INTO agent.tb_api_call_log_archived
- SELECT * FROM agent.tb_api_call_log
- WHERE create_time < now() - interval '3 months';
-
- DELETE FROM agent.tb_api_call_log
- WHERE create_time < now() - interval '3 months';
-END;
-$$ LANGUAGE plpgsql;
-```
-
-### 4.4 查询优化建议
-
-#### 4.4.1 常用查询模式
-
-```sql
--- 1. 用户权限检查(高频查询)
--- 建议:创建物化视图
-CREATE MATERIALIZED VIEW sys.mv_user_permissions AS
-SELECT
- ur.user_id,
- array_agg(DISTINCT p.code) AS permissions
-FROM sys.tb_sys_user_role ur
-JOIN sys.tb_sys_role_permission rp ON ur.role_id = rp.role_id
-JOIN sys.tb_sys_permission p ON rp.permission_id = p.permission_id
-WHERE ur.deleted = false AND rp.deleted = false
-GROUP BY ur.user_id;
-
-CREATE UNIQUE INDEX ON sys.mv_user_permissions(user_id);
-
--- 定期刷新
-REFRESH MATERIALIZED VIEW CONCURRENTLY sys.mv_user_permissions;
-```
-
-#### 4.4.2 复杂统计查询优化
-
-```sql
--- 使用CTE和窗口函数优化统计查询
-WITH daily_stats AS (
- SELECT
- DATE(create_time) AS stat_date,
- agent_id,
- COUNT(*) AS session_count,
- SUM(message_count) AS total_messages
- FROM agent.tb_agent_session
- WHERE deleted = false
- GROUP BY DATE(create_time), agent_id
-)
-SELECT
- agent_id,
- stat_date,
- session_count,
- total_messages,
- SUM(session_count) OVER (
- PARTITION BY agent_id
- ORDER BY stat_date
- ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
- ) AS rolling_7day_sessions
-FROM daily_stats;
-```
-
-## 五、现有SQL文件修改建议
-
-### 5.1 createTableUser.sql 优化
-
-**当前问题:**
-1. 登录日志表中存储密码不安全
-2. 缺少用户部门关联
-
-**建议修改:**
-
-```sql
--- 1. 移除登录日志表的password字段
-ALTER TABLE sys.tb_sys_login_log DROP COLUMN IF EXISTS password;
-
--- 2. 添加用户部门关联表
-CREATE TABLE sys.tb_sys_user_dept (
- optsn VARCHAR(50) NOT NULL,
- user_id VARCHAR(50) NOT NULL,
- dept_id VARCHAR(50) NOT NULL,
- is_primary BOOLEAN DEFAULT false, -- 是否主部门
- position VARCHAR(100), -- 职位
- creator VARCHAR(50) DEFAULT NULL,
- create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
- update_time TIMESTAMPTZ DEFAULT NULL,
- deleted BOOLEAN NOT NULL DEFAULT false,
- PRIMARY KEY (user_id, dept_id),
- UNIQUE (optsn)
-);
-
--- 3. 用户表添加默认部门字段
-ALTER TABLE sys.tb_sys_user
-ADD COLUMN IF NOT EXISTS primary_dept_id VARCHAR(50);
-```
-
-### 5.2 createTablePermission.sql 优化
-
-**建议修改:**
-
-```sql
--- 1. 角色表添加排序字段
-ALTER TABLE sys.tb_sys_role
-ADD COLUMN IF NOT EXISTS order_num INTEGER DEFAULT 0;
-
--- 2. 权限表添加权限类型字段
-ALTER TABLE sys.tb_sys_permission
-ADD COLUMN IF NOT EXISTS permission_type VARCHAR(20) DEFAULT 'action';
--- permission_type: action-操作权限/data-数据权限/menu-菜单权限
-
-COMMENT ON COLUMN sys.tb_sys_permission.permission_type
-IS '权限类型:action-操作权限/data-数据权限/menu-菜单权限';
-```
-
-### 5.3 createTableFile.sql 扩展
-
-**建议添加:**
-
-```sql
--- 1. 文件版本管理
-ALTER TABLE file.tb_sys_file
-ADD COLUMN IF NOT EXISTS version VARCHAR(20) DEFAULT '1.0',
-ADD COLUMN IF NOT EXISTS parent_file_id VARCHAR(50),
-ADD COLUMN IF NOT EXISTS is_latest BOOLEAN DEFAULT true;
-
--- 2. 文件分类
-ALTER TABLE file.tb_sys_file
-ADD COLUMN IF NOT EXISTS category VARCHAR(100),
-ADD COLUMN IF NOT EXISTS tags TEXT[];
-
--- 3. 文件关联(支持文件和业务对象关联)
-CREATE TABLE file.tb_file_relation (
- optsn VARCHAR(50) NOT NULL,
- relation_id VARCHAR(50) NOT NULL,
- file_id VARCHAR(50) NOT NULL,
- object_type VARCHAR(50) NOT NULL, -- 对象类型:bidding_project/ticket/document等
- object_id VARCHAR(50) NOT NULL, -- 对象ID
- relation_type VARCHAR(30) DEFAULT 'attachment', -- 关联类型:attachment-附件/avatar-头像/banner-横幅
- order_num INTEGER DEFAULT 0,
- creator VARCHAR(50) DEFAULT NULL,
- create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
- deleted BOOLEAN NOT NULL DEFAULT false,
- PRIMARY KEY (relation_id),
- UNIQUE (optsn),
- FOREIGN KEY (file_id) REFERENCES file.tb_sys_file(file_id)
-);
-
-CREATE INDEX idx_file_relation_object
-ON file.tb_file_relation(object_type, object_id) WHERE deleted = false;
-```
-
-### 5.4 createTableMessage.sql 增强
-
-**建议添加:**
-
-```sql
--- 1. 消息模板表
-CREATE TABLE message.tb_message_template (
- optsn VARCHAR(50) NOT NULL,
- template_id VARCHAR(50) NOT NULL,
- template_code VARCHAR(100) NOT NULL, -- 模板编码
- template_name VARCHAR(255) NOT NULL, -- 模板名称
- template_type VARCHAR(30) NOT NULL, -- 模板类型:system-系统/business-业务
- title_template TEXT, -- 标题模板(支持变量)
- content_template TEXT NOT NULL, -- 内容模板(支持变量)
- variables JSONB, -- 变量定义
- dept_path VARCHAR(255) DEFAULT NULL,
- creator VARCHAR(50) DEFAULT NULL,
- updater VARCHAR(50) DEFAULT NULL,
- create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
- update_time TIMESTAMPTZ DEFAULT NULL,
- deleted BOOLEAN NOT NULL DEFAULT false,
- PRIMARY KEY (template_id),
- UNIQUE (optsn),
- UNIQUE (template_code)
-);
-
-COMMENT ON TABLE message.tb_message_template IS '消息模板表';
-```
-
-## 六、数据安全建议
-
-### 6.1 敏感数据加密
-
-**需要加密的字段:**
-1. `sys.tb_sys_user.password` - 用户密码(使用bcrypt/argon2)
-2. `agent.tb_agent_tool.auth_config` - API认证配置
-3. `agent.tb_api_integration.auth_config` - 集成认证配置
-4. `customer_service.tb_crm_config.api_key` - CRM API密钥
-
-**建议使用PostgreSQL的pgcrypto扩展:**
-
-```sql
-CREATE EXTENSION IF NOT EXISTS pgcrypto;
-
--- 加密示例
-INSERT INTO agent.tb_agent_tool (auth_config)
-VALUES (pgp_sym_encrypt('{"api_key": "secret"}', 'encryption_key'));
-
--- 解密示例
-SELECT pgp_sym_decrypt(auth_config::bytea, 'encryption_key')
-FROM agent.tb_agent_tool;
-```
-
-### 6.2 行级安全策略(RLS)
-
-```sql
--- 启用行级安全
-ALTER TABLE knowledge.tb_knowledge_document ENABLE ROW LEVEL SECURITY;
-
--- 创建策略:用户只能访问自己部门的文档
-CREATE POLICY dept_isolation_policy ON knowledge.tb_knowledge_document
-FOR SELECT
-USING (
- dept_path LIKE (
- SELECT dept_path || '%'
- FROM sys.tb_sys_user
- WHERE user_id = current_setting('app.current_user_id')
- )
-);
-```
-
-### 6.3 审计日志增强
-
-```sql
--- 添加审计触发器
-CREATE OR REPLACE FUNCTION audit_trigger_func()
-RETURNS TRIGGER AS $$
-BEGIN
- IF (TG_OP = 'DELETE') THEN
- INSERT INTO log.tb_sys_log (
- log_id, type, level, module, message, data, creator
- ) VALUES (
- gen_random_uuid()::text,
- 'audit',
- 'info',
- TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME,
- 'Record deleted',
- row_to_json(OLD),
- current_setting('app.current_user_id', true)
- );
- RETURN OLD;
- ELSIF (TG_OP = 'UPDATE') THEN
- INSERT INTO log.tb_sys_log (
- log_id, type, level, module, message, data, creator
- ) VALUES (
- gen_random_uuid()::text,
- 'audit',
- 'info',
- TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME,
- 'Record updated',
- jsonb_build_object('old', row_to_json(OLD), 'new', row_to_json(NEW)),
- current_setting('app.current_user_id', true)
- );
- RETURN NEW;
- END IF;
-END;
-$$ LANGUAGE plpgsql;
-
--- 为敏感表添加审计触发器
-CREATE TRIGGER audit_user_changes
-AFTER UPDATE OR DELETE ON sys.tb_sys_user
-FOR EACH ROW EXECUTE FUNCTION audit_trigger_func();
-```
-
-## 七、部署和维护建议
-
-### 7.1 初始化顺序
-
-```bash
-# 1. 创建扩展
-psql -d urbanlifeline -f extensions.sql
-
-# 2. 按依赖顺序执行建表脚本
-psql -d urbanlifeline -f createTablePermission.sql
-psql -d urbanlifeline -f createTableUser.sql
-psql -d urbanlifeline -f createTableFile.sql
-psql -d urbanlifeline -f createTableMessage.sql
-psql -d urbanlifeline -f createTableLog.sql
-psql -d urbanlifeline -f createTableConfig.sql
-psql -d urbanlifeline -f createTableKnowledge.sql
-psql -d urbanlifeline -f createTableBidding.sql
-psql -d urbanlifeline -f createTableCustomerService.sql
-psql -d urbanlifeline -f createTableAgent.sql
-
-# 3. 执行完整初始化(包含触发器和视图)
-psql -d urbanlifeline -f createTableAll.sql
-
-# 4. 初始化基础数据
-psql -d urbanlifeline -f initDataConfig.sql
-```
-
-### 7.2 定期维护任务
-
-```sql
--- 1. 分析和优化表
-ANALYZE VERBOSE;
-VACUUM ANALYZE;
-
--- 2. 重建索引(处理索引膨胀)
-REINDEX DATABASE urbanlifeline;
-
--- 3. 更新表统计信息
-VACUUM ANALYZE sys.tb_sys_user;
-VACUUM ANALYZE agent.tb_agent_session;
-
--- 4. 检查慢查询
-SELECT query, calls, total_time, mean_time
-FROM pg_stat_statements
-ORDER BY mean_time DESC
-LIMIT 20;
-```
-
-### 7.3 备份策略
-
-```bash
-# 全量备份(每日)
-pg_dump -Fc urbanlifeline > backup_$(date +%Y%m%d).dump
-
-# 增量备份(使用WAL归档)
-# 在postgresql.conf中配置:
-# wal_level = replica
-# archive_mode = on
-# archive_command = 'cp %p /path/to/archive/%f'
-
-# 恢复示例
-pg_restore -d urbanlifeline -c backup_20240101.dump
-```
-
-## 八、总结
-
-### 8.1 设计优势
-
-1. **模块化架构**:9个Schema清晰划分业务边界
-2. **可扩展性**:支持多租户、多智能体、多业务类型
-3. **性能优化**:合理的索引设计、分区策略、视图优化
-4. **数据安全**:软删除、审计日志、权限控制、数据加密
-5. **业务完整**:覆盖招投标、客服、知识库全流程
-
-### 8.2 后续优化方向
-
-1. **向量检索优化**:引入pgvector扩展,优化RAG检索性能
-2. **分布式部署**:考虑Citus扩展实现水平扩展
-3. **实时数据同步**:使用Logical Replication实现异地备份
-4. **监控告警**:集成pgBadger、pg_stat_statements等工具
-5. **读写分离**:主从复制实现读写分离
-
-### 8.3 关键指标
-
-- **总表数**:50+ 张核心表
-- **Schema数**:9 个业务Schema
-- **索引类型**:B-Tree、GIN、部分索引、表达式索引
-- **数据类型**:标准类型 + JSONB + 数组 + 向量(可选)
-- **时区支持**:全部使用TIMESTAMPTZ
-- **软删除**:全表支持deleted标记
-
----
-
-**文档版本**: 1.0
-**最后更新**: 2024-12-02
-**维护团队**: 泰豪电源AI数智化平台开发组
diff --git a/urbanLifelineServ/gateway/Dockerfile.dev b/urbanLifelineServ/gateway/Dockerfile.dev
new file mode 100644
index 0000000..0322141
--- /dev/null
+++ b/urbanLifelineServ/gateway/Dockerfile.dev
@@ -0,0 +1,13 @@
+FROM maven:3.9-eclipse-temurin-21-alpine
+
+WORKDIR /app
+
+# 复制 pom.xml 和源代码
+COPY pom.xml ./
+COPY src ./src
+
+# 暴露端口
+EXPOSE 8080
+
+# 使用 spring-boot-devtools 支持热重载
+CMD ["mvn", "spring-boot:run", "-Dspring-boot.run.jvmArguments=-Dspring.devtools.restart.enabled=true"]
diff --git a/urbanLifelineWeb/packages/portal/Dockerfile.dev b/urbanLifelineWeb/packages/portal/Dockerfile.dev
new file mode 100644
index 0000000..f95bc99
--- /dev/null
+++ b/urbanLifelineWeb/packages/portal/Dockerfile.dev
@@ -0,0 +1,21 @@
+FROM node:20-alpine
+
+RUN npm install -g pnpm@latest
+
+WORKDIR /app
+
+# 复制依赖文件
+COPY packages/portal/package.json ./
+COPY pnpm-lock.yaml pnpm-workspace.yaml ./
+
+# 安装依赖
+RUN pnpm install --frozen-lockfile
+
+# 复制源代码
+COPY packages/portal/ ./
+
+# 暴露端口
+EXPOSE 3000
+
+# 开发模式(HMR)
+CMD ["pnpm", "dev", "--host", "0.0.0.0"]
diff --git a/urbanLifelineWeb/packages/portal/index.html b/urbanLifelineWeb/packages/portal/index.html
new file mode 100644
index 0000000..3fa2f1b
--- /dev/null
+++ b/urbanLifelineWeb/packages/portal/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ 泰豪电源 AI 数智化平台
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/urbanLifelineWeb/packages/portal/src/views/ImportMapsExample.vue b/urbanLifelineWeb/packages/portal/src/views/ImportMapsExample.vue
new file mode 100644
index 0000000..7c66c75
--- /dev/null
+++ b/urbanLifelineWeb/packages/portal/src/views/ImportMapsExample.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
📦 当前加载的模块:
+
+ @shared/components → http://localhost/shared/components.js
+ @shared/utils → http://localhost/shared/utils.js
+ @shared/api → http://localhost/shared/api.js
+ @shared/composables → http://localhost/shared/composables.js
+
+
+
🔍 如何查看?
+
+ - 打开浏览器开发者工具 (F12)
+ - 切换到 Network 标签页
+ - 筛选 JS 类型
+ - 刷新页面,可以看到从 /shared/ 加载的模块
+
+
+
✨ 优势:
+
+ - ✅ 真正的代码共享(所有应用共用一份)
+ - ✅ 支持热更新(修改共享组件,所有应用自动更新)
+ - ✅ 减小构建体积(共享代码不打包到业务应用)
+ - ✅ 浏览器缓存(共享模块只下载一次)
+
+
+
+
+
+
diff --git a/urbanLifelineWeb/packages/shared/Dockerfile.dev b/urbanLifelineWeb/packages/shared/Dockerfile.dev
new file mode 100644
index 0000000..fa20972
--- /dev/null
+++ b/urbanLifelineWeb/packages/shared/Dockerfile.dev
@@ -0,0 +1,22 @@
+FROM node:20-alpine
+
+# 安装 pnpm
+RUN npm install -g pnpm@latest
+
+WORKDIR /app
+
+# 复制 package.json
+COPY packages/shared/package.json ./
+COPY pnpm-lock.yaml pnpm-workspace.yaml ./
+
+# 安装依赖
+RUN pnpm install --frozen-lockfile
+
+# 复制源代码
+COPY packages/shared/ ./
+
+# 暴露端口
+EXPOSE 5000
+
+# 开发模式启动(支持热更新)
+CMD ["pnpm", "dev", "--host", "0.0.0.0"]
diff --git a/urbanLifelineWeb/packages/shared/package.json b/urbanLifelineWeb/packages/shared/package.json
new file mode 100644
index 0000000..e3554bd
--- /dev/null
+++ b/urbanLifelineWeb/packages/shared/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@shared/all",
+ "version": "1.0.0",
+ "type": "module",
+ "private": true,
+ "scripts": {
+ "dev": "vite --port 5000 --host",
+ "build": "run-p build:*",
+ "build:esm": "vite build --mode esm",
+ "build:federation": "vite build --mode federation",
+ "preview": "vite preview --port 5000"
+ },
+ "dependencies": {
+ "vue": "^3.5.13",
+ "vue-router": "^4.5.0",
+ "pinia": "^2.2.8",
+ "element-plus": "^2.9.1",
+ "@vueuse/core": "^11.3.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vitejs/plugin-vue-jsx": "^4.1.1",
+ "typescript": "^5.7.2",
+ "vite": "^6.0.3",
+ "@originjs/vite-plugin-federation": "^1.3.6",
+ "npm-run-all": "^4.1.5"
+ }
+}
diff --git a/urbanLifelineWeb/packages/shared/vite.config.esm.ts b/urbanLifelineWeb/packages/shared/vite.config.esm.ts
new file mode 100644
index 0000000..23947ac
--- /dev/null
+++ b/urbanLifelineWeb/packages/shared/vite.config.esm.ts
@@ -0,0 +1,93 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import vueJsx from '@vitejs/plugin-vue-jsx'
+import { resolve } from 'path'
+
+/**
+ * ES Module 构建配置
+ * 用于 Import Maps 方案
+ *
+ * 策略:将 Vue、Element Plus 等依赖打包进共享模块
+ * 业务应用只需引入 @shared/*,无需关心底层依赖
+ */
+export default defineConfig({
+ plugins: [vue(), vueJsx()],
+
+ build: {
+ lib: {
+ entry: {
+ components: resolve(__dirname, 'src/components/index.ts'),
+ utils: resolve(__dirname, 'src/utils/index.ts'),
+ api: resolve(__dirname, 'src/api/index.ts'),
+ composables: resolve(__dirname, 'src/composables/index.ts'),
+ types: resolve(__dirname, 'src/types/index.ts')
+ },
+ formats: ['es'], // 仅构建 ES Module
+ fileName: (format, entryName) => `${entryName}.js`
+ },
+
+ rollupOptions: {
+ // ⚠️ 不外部化依赖,将它们打包进共享模块
+ // 这样业务应用只需引入 @shared/* 即可
+ external: [],
+
+ output: {
+ // 保持 ES Module 格式
+ format: 'es',
+ // 导出命名导出
+ exports: 'named',
+ // 生成 sourcemap
+ sourcemap: true,
+ // 分块策略:将大的依赖分离出来
+ manualChunks(id) {
+ // Vue 核心
+ if (id.includes('node_modules/vue/') ||
+ id.includes('node_modules/@vue/')) {
+ return 'vue-core'
+ }
+ // Vue Router
+ if (id.includes('node_modules/vue-router/')) {
+ return 'vue-router'
+ }
+ // Pinia
+ if (id.includes('node_modules/pinia/')) {
+ return 'pinia'
+ }
+ // Element Plus
+ if (id.includes('node_modules/element-plus/')) {
+ return 'element-plus'
+ }
+ // VueUse
+ if (id.includes('node_modules/@vueuse/')) {
+ return 'vueuse'
+ }
+ }
+ }
+ },
+
+ // 输出目录
+ outDir: 'dist/esm',
+ emptyOutDir: true,
+
+ // 目标浏览器
+ target: 'esnext',
+
+ // 不压缩(开发环境)
+ minify: false,
+
+ // 启用代码分割
+ cssCodeSplit: true
+ },
+
+ // 开发服务器配置
+ server: {
+ port: 5000,
+ host: true,
+ cors: true,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, OPTIONS',
+ 'Content-Type': 'application/javascript; charset=utf-8'
+ }
+ }
+})