# 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、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 - _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 响应格式 - 更新 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、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)