# dify-ops-app **Repository Path**: qfmx/dify-ops-app ## Basic Information - **Project Name**: dify-ops-app - **Description**: 基于Dify的UI端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-01-26 - **Last Updated**: 2026-02-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dify Ops Server Dify Ops Server 是一个基于 DDD(领域驱动设计)架构的 Spring Boot 应用,用于对接 Dify 工作流平台,提供 AI 驱动的业务流程自动化服务。 ## 演示效果 ### 首页 ![首页](docs/images/Snipaste_首页.png) ### 文件工作流 ![文件工作流](docs/images/Snipaste_文件工作流.png) ### 答案生成 ![答案生成](docs/images/Snipaste_文件工作流-答案.png) ### 工作流记录 ![工作流记录](docs/images/Snipaste_文件工作流-工作流记录.png) ## 架构设计 ### 领域驱动设计 (DDD) 本项目采用领域驱动设计架构,主要包含以下层次: - **应用层 (Application Layer)**: 处理业务用例和流程编排 - `command/`: 命令对象(执行工作流、停止工作流等) - `query/`: 查询对象(获取工作流执行详情) - `result/`: 结果对象(工作流执行结果) - `service/`: 应用服务(工作流应用服务) - **领域层 (Domain Layer)**: 包含业务实体、领域服务和领域逻辑 - `entity/`: 领域实体(工作流执行、工作流统计、工作流状态) - `service/`: 领域服务(工作流领域服务) - `event/`: 领域事件(工作流完成事件、工作流失败事件) - `repository/`: 仓储接口 - **基础设施层 (Infrastructure Layer)**: 提供外部系统集成、技术实现等 - `config/`: Spring配置、异常处理、异步配置 - `repository/`: 数据访问实现 - `client/`: 外部服务客户端(Dify API客户端及DTO) - **接口层 (Interfaces Layer)**: API层、DTOs、REST控制器 - `dto/`: 请求/响应对象 - `rest/`: REST控制器 ### 核心特性 - 对接 Dify 工作流平台,实现 AI 驱动的业务流程自动化 - 基于事件驱动的架构设计 - 模块化的领域服务拆分 - RESTful API 设计 - 工作流异步执行和管理 - 文件上传和处理支持 - 流式响应支持 - 完善的异常处理和日志记录 ## 技术栈 ### 核心框架 - **Java 17**: 运行环境 - **Spring Boot 3.3.4**: 应用框架 - **Lombok**: 简化 Java 代码 - **Swagger/OpenAPI 3**: API 文档 ### 开发工具 - **Maven 3.9.9**: 项目构建和依赖管理 - **JUnit 5**: 单元测试框架 - **AssertJ**: 断言库 ### 开发环境配置 - **JDK 17.0.11**: 开发和运行环境 - **Maven 本地仓库**: `D:\docs\repo` - **IDE**: VS Code with Java 扩展 ### 外部集成 - **Dify 工作流平台**: AI 驱动的业务流程管理 - **OpenAI API**: 大语言模型服务 ## 项目结构 ``` src/ ├── main/ │ ├── java/com/dify/ops/ │ │ ├── DifyOpsApplication.java # 应用入口 │ │ │ │ │ ├── application/ # 应用层 │ │ │ ├── command/ # 命令对象 │ │ │ │ ├── ExecuteWorkflowCommand.java │ │ │ │ └── StopWorkflowExecutionCommand.java │ │ │ ├── query/ # 查询对象 │ │ │ │ └── GetWorkflowExecutionQuery.java │ │ │ ├── result/ # 结果对象 │ │ │ │ └── WorkflowExecutionResult.java │ │ │ └── WorkflowApplicationService.java # 工作流应用服务 │ │ │ │ │ ├── domain/ # 领域层 │ │ │ ├── entity/ # 领域实体 │ │ │ │ ├── WorkflowExecution.java │ │ │ │ ├── WorkflowStatistics.java │ │ │ │ └── WorkflowStatus.java │ │ │ ├── service/ # 领域服务 │ │ │ │ ├── WorkflowDomainService.java │ │ │ │ └── WorkflowDomainServiceImpl.java │ │ │ ├── event/ # 领域事件 │ │ │ │ ├── WorkflowExecutionCompletedEvent.java │ │ │ │ └── WorkflowExecutionFailedEvent.java │ │ │ └── repository/ # 仓储接口 │ │ │ └── WorkflowExecutionRepository.java │ │ │ │ │ ├── infrastructure/ # 基础设施层 │ │ │ ├── config/ # 配置类 │ │ │ │ ├── AppConfig.java │ │ │ │ ├── AsyncConfig.java │ │ │ │ ├── DifyApiProperties.java │ │ │ │ ├── DomainEventListener.java │ │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── repository/ # 数据访问实现 │ │ │ │ └── WorkflowExecutionRepositoryImpl.java │ │ │ └── client/ # 外部服务客户端 │ │ │ ├── DifyWorkflowClient.java │ │ │ └── dto/ # Dify API响应DTO │ │ │ ├── DifyAppInfoResponse.java │ │ │ ├── DifyFileUploadResponse.java │ │ │ ├── DifyWorkflowDetailResponse.java │ │ │ ├── DifyWorkflowLogResponse.java │ │ │ ├── DifyWorkflowResponse.java │ │ │ └── WorkflowData.java │ │ │ │ │ └── interfaces/ # 接口层 │ │ ├── dto/ # 请求/响应对象 │ │ │ ├── ApiErrorResponse.java │ │ │ ├── ExecuteWorkflowRequest.java │ │ │ ├── StopWorkflowRequest.java │ │ │ ├── StopWorkflowResponse.java │ │ │ ├── UploadFileRequest.java │ │ │ ├── WorkflowExecutionResponse.java │ │ │ ├── WorkflowInfo.java │ │ │ └── AppListResponse.java │ │ └── rest/ # REST控制器 │ │ ├── AppInfoController.java │ │ └── WorkflowController.java │ │ │ └── resources/ │ └── application.yml # 应用配置 │ └── test/ # 测试代码 └── java/com/dify/ops/ ├── DifyOpsApplicationTests.java └── infrastructure/client/ # 集成测试 ``` ## 环境要求 - JDK 17+ - Maven 3.6+ - OpenAI API Key (可选,用于 AI 功能) ## 配置说明 ### 环境变量 ```bash OPENAI_API_KEY=your_openai_api_key_here ``` ### 应用配置 (application.yml) ```yaml spring: application: name: dify-ops-server # Dify API配置 dify: api: base-url: ${DIFY_API_BASE_URL:http://localhost:8000} key: ${DIFY_API_KEY} workflows: # 多工作流配置 - id: workflow1 name: 文件处理工作流 key: ${DIFY_API_KEY_WORKFLOW1} connection-timeout: 5000 read-timeout: 30000 # 服务器配置 server: port: 8080 # 日志配置 logging: level: com.dify.ops: DEBUG org.springframework.web.client: DEBUG # OpenAPI/Swagger配置 springdoc: api-docs: path: /api-docs swagger-ui: path: /swagger-ui.html operationsSorter: method ``` ## 构建说明 (Build Instructions) 本项目使用 Spring AI,需要 JDK 17 环境。 ### 快速构建命令 (PowerShell) 使用以下命令可以配置 JDK 17 环境变量并使用指定的 Maven 配置进行构建: ```powershell $env:JAVA_HOME = "C:\Program Files\java\jdk-17.0.11"; & "D:\develop\apache-maven-3.9.9\bin\mvn.cmd" "clean" "package" "-U" "-gs" "e:\dify-ops-server\custom-settings.xml" "-Dmaven.repo.local=D:\docs\repo" ``` ### 运行应用 (Git Bash) ```bash export JAVA_HOME="C:/Program Files/java/jdk-17.0.11" "D:/develop/apache-maven-3.9.9/bin/mvn" spring-boot:run -gs "e:/dify-ops-server/custom-settings.xml" -Dmaven.repo.local=D:/docs/repo ``` ### 运行测试 ```bash # 运行所有测试 mvn test -gs "e:\dify-ops-server\custom-settings.xml" # 运行单个测试类 mvn test -Dtest=DifyOpsApplicationTests -gs "e:\dify-ops-server\custom-settings.xml" # 运行单个测试方法 mvn test -Dtest=DifyOpsApplicationTests#contextLoads -gs "e:\dify-ops-server\custom-settings.xml" # 跳过测试构建 mvn clean package -DskipTests -gs "e:\dify-ops-server\custom-settings.xml" ``` ### 构建产物 构建成功后将在 `target/` 目录生成: - `dify-ops-server-0.0.1-SNAPSHOT.jar`: 可执行 JAR 文件 - `dify-ops-server-0.0.1-SNAPSHOT.jar.original`: 原始 JAR 文件 ## 运行应用 ```bash java -jar target/dify-ops-server-0.0.1-SNAPSHOT.jar ``` ## 开发指南 ### 架构原则 1. 遵循 DDD 架构分层原则 2. 领域逻辑应放在领域层,应用逻辑放在应用层 3. 使用事件驱动设计实现模块解耦 4. 编写单元测试确保代码质量 5. API 设计遵循 RESTful 规范 ### 代码规范 - **命名规范**: 类名使用 PascalCase,方法和变量使用 camelCase,常量使用 UPPER_SNAKE_CASE - **类型使用**: 优先使用接口(如 `List` 而不是 `ArrayList`),使用 `var` 进行局部类型推断 - **依赖注入**: 使用构造器注入(Spring 管理) - **日志记录**: 使用 SLF4J 日志框架,使用参数化日志而非字符串拼接 - **异常处理**: 使用全局异常处理器,返回标准化的错误响应 - **资源管理**: 使用 try-with-resources 确保资源正确关闭 ### 测试指南 - 使用 JUnit 5 和 AssertJ 进行测试 - 测试方法命名遵循 Given-When-Then 结构 - Mock 外部依赖使用 @MockBean 或 @Mock - 集成测试使用 @SpringBootTest ### API 访问 - API 文档: http://localhost:8080/swagger-ui.html - OpenAPI JSON: http://localhost:8080/api-docs ## 前端项目 前端项目位于 `dify-ops-web` 目录,使用 Vue 2 + Element-UI 构建。 ```bash cd dify-ops-web pnpm install # 安装依赖 pnpm run dev # 启动开发服务器 pnpm run build # 构建生产版本 ``` ## API 文档 详细的API使用指南请参考:[API_GUIDE.md](API_GUIDE.md) ## 许可证 [待定]