# Implementation Plan: urbanLifeline 业务功能迁移到 pigx-ai

## Overview

将 urbanLifelineServ 和 urbanLifelineWeb 的业务功能迁移到 pigx-ai 平台，完全使用 pigx 原生的用户权限体系，只迁移业务代码和数据。

## Tasks

- [x] 1. 数据库迁移准备
  - 分析源项目 PostgreSQL 表结构
  - 生成 MySQL DDL 转换脚本
  - 为所有业务表添加 tenant_id 字段
  - _Requirements: 8.1, 8.2, 8.4_

- [x] 1.1 编写数据库转换脚本
  - 已完成 database-migration-script.md 文档
  - 包含工单、AI、招标、消息模块的完整 MySQL DDL
  - **Validates: Requirements 8.1, 8.2, 8.3, 8.4**

- [x] 2. 权限和菜单规划
  - 设计业务功能的权限标识规范
  - 规划前端路由路径
  - 定义菜单层级结构
  - _Requirements: 10.2, 11.3_

- [x] 2.1 创建权限标识映射表
  - 已完成 permission-mapping.md 文档
  - 包含完整的权限映射和菜单配置 SQL
  - _Requirements: 11.1, 11.2_

- [x] 2.2 编写权限注解转换指南
  - 已完成 permission-annotation-guide.md 文档
  - 包含 @PreAuthorize 到 @pms.hasPermission 转换规则
  - _Requirements: 11.1, 11.2_

- [x] 2.3 配置 SecurityUtils 和 RemoteUserService
  - 已完成 security-config-guide.md 文档
  - 包含完整的使用示例和最佳实践
  - _Requirements: 11.4, 11.5_

- [x] 2.4 配置业务功能菜单
  - 在 pigx sys_menu 表中执行菜单配置 SQL（ID从10000开始）
  - 配置对应的权限标识和路由路径
  - _Requirements: 10.2, 11.3_

- [x] 2.5 分配角色权限
  - 已在 permission-mapping.md 中提供完整的角色权限分配 SQL
  - 管理员角色分配所有业务权限（menu_id 10000-15000）
  - 普通用户角色分配查看权限
  - 执行时需在 MySQL 中运行 sys_role_menu 插入语句
  - _Requirements: 10.3, 11.3_

- [x] 3. 后端基础架构搭建
  - 创建 pigx-workcase、pigx-bidding、pigx-dify 三个独立模块
  - 每个模块包含 api 和 biz 子模块
  - 配置 Maven 依赖和模块引用
  - _Requirements: 1.1, 2.1, 3.1, 5.1_

- [x] 4. 工单模块迁移 (pigx-workcase)
- [x] 4.1 迁移工单实体和 Mapper
  - 已创建 TbWorkcase、TbChatRoom、TbChatRoomMessage、TbChatRoomMember、TbWorkcaseProcess、TbVideoMeeting 实体
  - 使用 pigx 标准格式：@TenantTable、Model<T>、createBy/updateBy/delFlag
  - 已创建对应的 Mapper 接口
  - _Requirements: 2.1, 2.4_

- [x] 4.2 迁移工单 Service 层
  - 已创建 TbWorkcaseService、TbChatRoomService、TbChatRoomMessageService、TbChatRoomMemberService、TbWorkcaseProcessService、TbVideoMeetingService、TbCustomerServiceService
  - TbChatRoomService 包含完整业务逻辑：创建聊天室、关闭聊天室、成员管理、消息管理、客服分配、服务评分
  - TbVideoMeetingService 包含完整业务逻辑：创建会议、加入会议、开始/结束会议、权限验证
  - TbCustomerServiceService 包含客服管理：获取可用客服、更新状态、工作量管理
  - 已创建对应的 ServiceImpl 实现类
  - _Requirements: 2.1, 2.2_

- [x] 4.3 迁移工单 Controller 层
  - 已创建 TbWorkcaseController、TbChatRoomController、TbVideoMeetingController、TbCustomerServiceController
  - TbChatRoomController 包含完整的聊天室功能：成员管理、消息管理、客服分配、服务评分
  - TbVideoMeetingController 包含完整的会议功能：创建、加入、开始、结束会议
  - TbCustomerServiceController 包含客服人员管理功能
  - 使用 @HasPermission 权限注解
  - 响应格式使用 R<T>
  - _Requirements: 2.1, 11.1, 11.4_

- [x] 4.4 迁移视频会议功能
  - 已创建 TbVideoMeetingService 和 TbVideoMeetingServiceImpl
  - 包含创建会议、加入会议、开始会议、结束会议、获取活跃会议等功能
  - 会议访问权限验证（基于聊天室成员）
  - 注：Jitsi JWT Token 生成需要后续配置 Jitsi 服务器参数
  - _Requirements: 2.6_

- [x] 4.5 迁移聊天室 WebSocket 功能
  - 已创建 ChatRoomWebSocketMessage、ChatRoomNotificationMessage 消息类
  - 已创建 ChatRoomMessageHandler、ChatRoomNotificationHandler 消息处理器
  - 已创建 ChatRoomWebSocketService 用于主动推送消息
  - 使用 pigx-common-websocket 进行实时推送
  - 配置 WebSocket 路径为 /ws/chat
  - _Requirements: 2.1, 5.2_

- [x] 4.6 迁移 Jitsi JWT Token 生成功能
  - 已创建 JitsiProperties 配置类
  - 已创建 JitsiTokenService 接口和 JitsiTokenServiceImpl 实现
  - 已创建 JitsiTokenController 提供 Token 生成、验证、URL 构建 API
  - 支持一键生成会议信息（房间名+Token+URL）
  - 使用 jjwt 0.12.x 版本 API
  - _Requirements: 2.6_

- [x] 4.7 迁移词云管理功能
  - 已创建 TbWordCloud 实体类
  - 已创建 TbWordCloudMapper 接口和 XML 映射文件
  - 已创建 TbWordCloudService 接口和 TbWordCloudServiceImpl 实现
  - 已创建 TbWordCloudController 提供词云 CRUD 和词频增加 API
  - 支持词频自动累加（同一天、同一分类的相同词条）
  - _Requirements: 2.1_

- [x] 5. AI 模块迁移（pigx-dify 模块）
- [x] 5.1 创建 pigx-dify 模块结构
  - 已创建 pigx-dify-api 和 pigx-dify-biz 子模块
  - 已配置 Maven 依赖和模块引用
  - 已创建启动类和配置文件
  - _Requirements: 4.1_

- [x] 5.2 迁移 AI 实体和数据层
  - 已创建 TbAgent、TbChat、TbChatMessage、TbKnowledge、TbKnowledgeFile、TbKnowledgeFileLog、PromptCard 实体
  - 使用 pigx 标准格式
  - 已创建对应的 Mapper 接口
  - _Requirements: 4.4, 4.6_

- [x] 5.3 迁移 Dify API 客户端
  - 已创建 DifyApiClient 完整功能（知识库管理、文档管理、对话、工作流、模型管理）
  - 已创建 DifyProperties 配置类
  - 已创建 DifyException 异常类
  - 已创建 StreamCallback 回调接口
  - 已创建所有 DTO 类（ChatRequest/Response、Dataset*、Document*、Retrieval*、Workflow*、Conversation*、MessageHistory*、EmbeddingModel*、RerankModel*、DifyFileInfo）
  - 支持流式响应和阻塞调用两种模式
  - 已配置 OkHttp 依赖
  - 已更新 application.yml 添加 Dify 配置
  - _Requirements: 4.2, 4.3_

- [x] 5.4 迁移 AI 业务逻辑
  - 已创建 TbAgentService、TbChatService、TbKnowledgeService 等服务接口和实现类
  - _Requirements: 4.1, 4.2_

- [x] 5.5 迁移 AI Controller 层
  - 已创建 TbAgentController、TbChatController、TbKnowledgeController
  - 使用 @HasPermission 权限注解
  - _Requirements: 4.1, 11.1_

- [x] 5.6 配置 Dify 集成
  - 已配置 DifyProperties 包含完整配置（API地址、密钥、超时、上传、知识库）
  - 已在 application.yml 中添加 Dify 配置项
  - 配置支持环境变量覆盖
  - _Requirements: 4.3, 4.7_

- [x] 6. 招标模块迁移 (pigx-bidding)
- [x] 6.1 迁移招标实体和数据层
  - 已创建 TbBiddingProject、TbBiddingDocument、TbBiddingRequirement、TbBidResponse、TbProcessNode 实体
  - 已创建对应的 Mapper 接口
  - _Requirements: 1.1, 1.3_

- [x] 6.2 迁移招标业务逻辑
  - 已创建 TbBiddingProjectService、TbBiddingDocumentService 等服务接口和实现类
  - _Requirements: 1.1, 1.2_

- [x] 6.3 迁移招标 API 接口
  - 已创建 TbBiddingProjectController、TbBiddingDocumentController
  - 使用 @HasPermission 权限注解
  - _Requirements: 1.1, 1.5_

- [x] 7. 平台管理模块迁移 (platform)
- [x] 7.1 迁移平台管理功能
  - 源项目 platform 模块只有启动类，无实际业务代码
  - 平台配置功能可使用 pigx 的 sys_config 表和配置管理功能
  - _Requirements: 3.1, 3.2_

- [x] 7.2 迁移平台数据表
  - 无需迁移，使用 pigx 现有的配置管理表
  - _Requirements: 3.3_

- [x] 8. 消息模块迁移 (message)
- [x] 8.1 迁移消息实体和数据层
  - 源项目消息模块主要是邮件/短信发送功能，大部分方法为 TODO 状态
  - pigx 已有完善的消息通知功能（pigx-common-sms、pigx-common-mail）
  - 直接使用 pigx 现有的消息功能即可
  - _Requirements: 5.1, 5.4_

- [x] 8.2 迁移消息通知功能
  - 使用 pigx-common-websocket 进行实时推送（已在 pigx-workcase 中实现）
  - 使用 pigx-common-sms 进行短信发送
  - 使用 pigx-common-mail 进行邮件发送
  - _Requirements: 5.1, 5.2_

- [x] 8.3 保留微信通知功能
  - pigx 已有微信公众号/小程序消息推送功能
  - 可通过 pigx-mp 模块实现微信消息推送
  - _Requirements: 5.3_

- [x] 9. 文件服务适配
- [x] 9.1 替换文件上传逻辑
  - 已在 pigx-workcase-biz、pigx-dify-biz、pigx-bidding-biz 中添加 pigx-common-oss 依赖
  - 使用 pigx 的 OssTemplate 进行文件上传/下载
  - 文件访问 URL 通过 pigx 网关统一管理
  - _Requirements: 6.1, 6.2_

- [x] 10. 定时任务迁移
- [x] 10.1 迁移定时任务到 XXL-Job
  - 源项目无定时任务需要迁移
  - 如需添加定时任务，可使用 pigx-visual/xxl-job 进行配置
  - _Requirements: 7.1, 7.2, 7.3_

- [ ] 11. 前端页面迁移
- [x] 11.1 迁移工单前端页面
  - ✅ 已创建 API 层 (workcase.ts, chat.ts)
  - ✅ 已创建类型定义 (workcase.ts, chatRoom.ts, customer.ts, conversation.ts, wordCloud.ts)
  - ✅ 已创建工单列表页面 (views/workcase/index.vue)
  - ✅ 已创建工单指派组件 (components/workcase/WorkcaseAssign.vue)
  - ✅ 已创建工单详情组件 (views/workcase/detail/WorkcaseDetail.vue)
  - ✅ 已创建聊天室消息组件 (views/workcase/chatRoom/ChatMessage.vue)
  - 适配 pigx 的 request 工具和响应格式
  - _Requirements: 2.5_

- [ ] 11.2 迁移 AI 前端页面
  - 将 AI 相关页面迁移到 pigx-ai-ui/src/views/dify 目录
  - 包括智能体管理、对话界面、知识库管理
  - 适配 pigx 的 request 工具和响应格式
  - _Requirements: 4.5_

- [ ] 11.3 迁移招标前端页面
  - 将 bidding 页面迁移到 pigx-ai-ui/src/views/urban/bidding
  - 适配 pigx 的 request 工具
  - _Requirements: 1.4_

- [ ] 11.4 迁移平台管理前端页面
  - 将 platform 页面迁移到 pigx-ai-ui/src/views/urban/platform
  - _Requirements: 3.4_

- [ ] 11.5 迁移共享组件
  - 将 shared 包组件迁移到 pigx-ai-ui/src/components/urban
  - 更新导入路径使用 pigx 工具函数
  - _Requirements: 9.1, 9.2_

- [ ] 11.6 适配 API 调用
  - 创建 pigx-ai-ui/src/api/urban 目录
  - 创建 workcase.ts、bidding.ts、platform.ts API 定义
  - 创建 pigx-ai-ui/src/api/dify 目录
  - 创建 agent.ts、chat.ts、knowledge.ts API 定义
  - 使用 pigx 的 request 工具和 R<T> 响应格式
  - 更新 API 路径为 pigx 网关规则
  - _Requirements: 1.5, 9.4_

- [ ] 12. 数据迁移执行
- [ ] 12.1 执行数据库 DDL 脚本
  - 在 MySQL 中执行 database-migration-script.md 中的建表语句
  - 验证表结构正确性
  - _Requirements: 8.1, 8.2_

- [ ] 12.2 执行业务数据迁移
  - 运行数据迁移脚本
  - 验证数据完整性
  - _Requirements: 8.5_

- [ ] 13. 集成测试和验证
- [ ] 13.1 后端编译验证
  - 确保所有迁移代码可以通过编译
  - 验证 Maven 依赖正确
  - _Requirements: 所有后端需求_

- [ ] 13.2 端到端功能测试
  - 测试所有迁移功能的完整流程
  - 验证权限控制正确性
  - _Requirements: 所有需求_

- [ ] 13.3 租户隔离验证
  - 验证多租户数据隔离正确性
  - _Requirements: 8.4, 11.6_

- [ ] 14. 最终验收
  - 确保所有功能正常运行
  - 确认权限控制有效
  - 验证多租户数据隔离

## Notes

- 任务 1、2.1、2.2、2.3 的文档已完成，可直接使用
- 重点关注权限适配和用户服务调用的正确性
- 已创建三个独立模块：pigx-workcase、pigx-bidding、pigx-dify
- 每个模块包含 api 和 biz 子模块，遵循 pigx 架构规范
- 实体类使用 pigx 标准格式：@TenantTable、Model<T>、createBy/updateBy/delFlag
- 前端迁移需要适配 pigx-ai-ui 的技术栈（Vue3 + TypeScript + Element Plus）
- 数据库迁移脚本已在 database-migration-script.md 中准备好

## 已创建的文件

### pigx-ai-ui 前端已迁移文件

#### API 层
- `src/api/workcase/workcase.ts` - 工单管理 API
- `src/api/workcase/chat.ts` - 聊天室、客服、视频会议 API

#### 类型定义
- `src/types/workcase/workcase.ts` - 工单相关类型
- `src/types/workcase/chatRoom.ts` - 聊天室相关类型
- `src/types/workcase/customer.ts` - 客服相关类型
- `src/types/workcase/conversation.ts` - 对话相关类型
- `src/types/workcase/wordCloud.ts` - 词云相关类型

#### 组件
- `src/components/workcase/WorkcaseAssign.vue` - 工单指派组件

#### 页面
- `src/views/workcase/index.vue` - 工单列表页面
- `src/views/workcase/detail/WorkcaseDetail.vue` - 工单详情组件
- `src/views/workcase/detail/WorkcaseDetail.scss` - 工单详情样式
- `src/views/workcase/chatRoom/ChatMessage.vue` - 聊天室消息组件

#### 导出文件
- `src/views/workcase/chatRoom/index.ts`
- `src/views/workcase/detail/index.ts`
- Entity: TbWorkcase, TbChatRoom, TbChatRoomMessage, TbChatRoomMember, TbWorkcaseProcess, TbVideoMeeting, TbCustomerService, TbWordCloud
- Mapper: TbWorkcaseMapper, TbChatRoomMapper, TbChatRoomMessageMapper, TbChatRoomMemberMapper, TbWorkcaseProcessMapper, TbVideoMeetingMapper, TbCustomerServiceMapper, TbWordCloudMapper
- Service: TbWorkcaseService, TbChatRoomService（含完整业务逻辑）, TbChatRoomMessageService, TbChatRoomMemberService, TbWorkcaseProcessService, TbVideoMeetingService（含完整业务逻辑）, TbCustomerServiceService, TbWordCloudService, JitsiTokenService
- Controller: TbWorkcaseController, TbChatRoomController（含成员/消息/客服分配API）, TbVideoMeetingController（含创建/加入/开始/结束会议API）, TbCustomerServiceController, TbWordCloudController, JitsiTokenController
- WebSocket: ChatRoomWebSocketMessage, ChatRoomNotificationMessage, ChatRoomMessageHandler, ChatRoomNotificationHandler, ChatRoomWebSocketService
- Config: JitsiProperties, application.yml (port: 7070, WebSocket: /ws/chat)
- Application: PigxWorkcaseApplication

#### 聊天室功能已迁移的API：
- 聊天室CRUD：创建、查询、修改、关闭、删除
- 成员管理：添加成员、移除成员、获取成员列表、获取未读数、更新已读状态
- 消息管理：发送消息、分页查询消息、删除消息
- 客服分配：自动分配客服到聊天室
- 服务评分：提交聊天室服务评分

#### 视频会议功能已迁移的API：
- 会议CRUD：创建、查询、删除
- 会议操作：获取会议信息、加入会议、开始会议、结束会议
- 聊天室关联：获取聊天室当前活跃会议

#### 客服人员管理已迁移的API：
- 客服CRUD：新增、查询、修改、删除
- 状态管理：更新客服在线状态
- 可用客服：获取可接待客服列表

#### WebSocket 实时推送功能：
- 消息类型：chat_message（聊天消息）、chat_notification（通知消息）
- 通知类型：member_join（成员加入）、member_leave（成员离开）、typing（正在输入）、room_closed（聊天室关闭）
- ChatRoomWebSocketService：主动推送消息、广播到聊天室、发送给指定用户

#### Jitsi JWT Token 功能：
- 生成 JWT Token：支持主持人/普通成员角色
- 验证 Token：检查 Token 有效性和过期时间
- 构建 iframe URL：包含默认配置和自定义配置
- 生成房间名：基于工单ID生成唯一房间名
- 一键生成会议信息：房间名+Token+URL

#### 词云管理功能：
- 词云CRUD：新增、查询、修改、删除
- 词频累加：同一天、同一分类的相同词条自动累加词频
- 分页查询：支持按词语、分类、日期筛选

### pigx-dify 模块
- Entity: TbAgent, TbChat, TbChatMessage, TbKnowledge, TbKnowledgeFile, TbKnowledgeFileLog, PromptCard
- Mapper: TbAgentMapper, TbChatMapper, TbChatMessageMapper, TbKnowledgeMapper, TbKnowledgeFileMapper, TbKnowledgeFileLogMapper
- Service: TbAgentService, TbChatService, TbChatMessageService, TbKnowledgeService, TbKnowledgeFileService, TbKnowledgeFileLogService
- Controller: TbAgentController, TbChatController, TbKnowledgeController
- Client: DifyApiClient（完整的 Dify API 客户端）
- Client DTO: ChatRequest, ChatResponse, DatasetCreateRequest, DatasetCreateResponse, DatasetDetailResponse, DatasetListResponse, DatasetUpdateRequest, DocumentListResponse, DocumentStatusResponse, DocumentUploadRequest, DocumentUploadResponse, RetrievalModel, RetrievalRequest, RetrievalResponse, WorkflowRunRequest, WorkflowRunResponse, ConversationListResponse, ConversationVariablesResponse, MessageHistoryResponse, EmbeddingModelResponse, RerankModelResponse, DifyFileInfo
- Callback: StreamCallback（流式响应回调接口）
- Exception: DifyException
- Config: DifyProperties, application.yml (port: 7080, Dify API 配置)
- Application: PigxDifyApplication

#### Dify API 客户端功能：
- 知识库管理：创建、查询、更新、删除知识库
- 文档管理：上传文档、查询文档列表、查询文档状态、删除文档
- 知识库检索：从知识库检索相关内容
- 对话功能：流式对话、阻塞式对话、停止对话、消息反馈
- 工作流：执行工作流（阻塞模式）
- 对话历史：获取消息历史、对话列表、对话变量
- 模型管理：获取嵌入模型列表、Rerank模型列表
- 通用HTTP：GET、POST、PATCH、DELETE 方法

### pigx-bidding 模块
- Entity: TbBiddingProject, TbBiddingDocument, TbBiddingRequirement, TbBidResponse, TbProcessNode
- Mapper: TbBiddingProjectMapper, TbBiddingDocumentMapper, TbBiddingRequirementMapper, TbBidResponseMapper, TbProcessNodeMapper
- Service: TbBiddingProjectService, TbBiddingDocumentService, TbBiddingRequirementService, TbBidResponseService, TbProcessNodeService
- Controller: TbBiddingProjectController, TbBiddingDocumentController
- Application: PigxBiddingApplication
- Config: application.yml (port: 7090)
