JIAP/JIAP_Sturct.md
2024-12-19 10:54:37 +08:00

255 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# JIAP实现方案
## **1. JIAP技术栈**
### **1.1 后端技术**
1. **编程语言**C#
- **理由**C# 是 Microsoft .NET 平台的核心语言,提供了丰富的库和工具集,支持高效开发和强大的 Windows 系统集成能力。
2. **框架**
- **ASP.NET Core**
- 用于开发 RESTful API 和 WebSocket 服务。
- 支持跨平台部署,同时在 Windows 系统上优化性能。
- **Entity Framework Core**
- 数据访问层,简化对数据库的操作。
3. **数据库**
- **Microsoft SQL Server**:高效的关系型数据库,兼容 Windows 系统,易于集成。
- **LiteDB**:轻量级嵌入式数据库(适合本地化任务运行场景)。
4. **消息队列**
- **RabbitMQ**:提供任务调度和异步处理能力。
5. **日志系统**
- **NLog**:高性能日志记录框架,支持文件输出、数据库输出等多种日志形式。
---
### **1.2 前端技术**
1. **前端框架**React.js 或 Blazor
- **Blazor** 是 Microsoft 官方推出的前端框架,基于 .NET支持与 C# 代码直接集成。
- **React.js** 提供灵活的 UI 构建能力,更适合复杂的前端交互。
2. **UI 组件库**Material Design 或 DevExpress
- 支持现代化 UI 的快速构建。
---
### **1.3 系统通信**
1. **API 通信**
- **RESTful API**:同步任务请求和资源查询。
- **WebSocket**:实时任务状态推送。
2. **消息队列**RabbitMQ 或 Azure Service Bus。
---
### **1.4 自动化框架**
1. **Windows 环境支持**
- 使用 **PowerShell****Windows Scripting Host** 实现系统级自动化任务(如文件操作、注册表操作)。
2. **UI 自动化**
- **UIAutomation**.NET Framework 提供):
- 适合自动化桌面应用程序。
- **Selenium WebDriver**
- 用于 Web 浏览器的自动化操作。
3. **OCR 处理**
- **Tesseract OCR + Emgu.CV**(适配 C# 的 OCR 和计算机视觉库)。
---
## **2. 系统架构**
### **2.1 调整后的分层架构**
```mermaid
graph TD
A[客户端层]
B[控制器层]
C[机器人代理层]
D[操作模块层]
A --> B
B --> C
C --> D
```
1. **客户端层**
- 提供任务管理的用户界面,支持任务提交和状态监控。
- 使用 Blazor 或 React.js 实现。
2. **控制器层**
- 核心调度组件,负责接收任务请求,分配任务给机器人。
- 基于 ASP.NET Core 开发。
3. **机器人代理层**
- 每个机器人独立运行,负责调用操作模块执行任务。
- 使用 Windows Service 或 .NET Worker 实现后台运行。
4. **操作模块层**
- 包含具体的功能实现模块如文件操作、OCR、Excel 操作)。
- 使用独立的 DLL 模块进行封装,支持动态加载。
---
### **2.2 数据流设计**
#### 数据流动示意图
```mermaid
graph TD
A[客户端] -->|发送任务请求| B[RPA 控制器]
B -->|分配任务| C[RPA 机器人]
C -->|调用功能模块| D[操作模块]
D -->|返回结果| C
C -->|汇总结果| B
B -->|响应结果| A
```
---
## **3. 实现步骤**
### **3.1 系统规划与设计**
1. **定义系统功能模块**
- 确定需要实现的核心功能模块,例如:
- 文件操作模块(复制、移动、删除文件)。
- Excel 操作模块(读取和写入单元格)。
- 网络模块(发送 HTTP 请求,下载文件)。
- OCR 模块(图像文字提取)。
2. **技术选型**
- 确定使用 C# 和 ASP.NET Core 作为主要技术栈。
- 引入 RabbitMQ 和 SQL Server 支持任务调度和数据存储。
3. **设计 API 接口**
- 定义统一的接口格式,采用 RESTful API 和 WebSocket。
- 定义模块的标准方法格式(如 `Module.Operation`)。
---
### **3.2 控制器开发C# + ASP.NET Core**
1. **项目结构**
- **Controllers**
- 实现 API 路由。
- **Services**
- 任务调度、资源管理和状态监控。
- **Models**
- 定义请求和返回的标准数据格式。
- **Modules**
- 调用具体的操作模块。
2. **任务调度逻辑**
- 使用 RabbitMQ 分发任务:
- 将客户端任务请求封装为消息,放入任务队列。
- 消费队列中的任务,并分配给可用的机器人。
3. **日志管理**
- 使用 NLog 记录任务执行日志和错误信息。
---
### **3.3 机器人代理开发C# + Windows Service**
1. **Windows Service 实现**
- 机器人作为后台服务运行,监听任务队列。
- 基于 .NET Worker 构建服务逻辑。
2. **任务执行逻辑**
- 接收到任务后解析请求参数。
- 动态加载操作模块 DLL。
- 执行任务后,将结果返回至控制器。
---
### **3.4 操作模块开发C# 独立 DLL**
#### 文件操作模块示例
```csharp
public class FileOperations
{
public static bool CopyFile(string sourcePath, string destinationPath, bool overwrite)
{
try
{
File.Copy(sourcePath, destinationPath, overwrite);
return true;
}
catch (Exception ex)
{
Console.WriteLine($"Error copying file: {ex.Message}");
return false;
}
}
}
```
#### Excel 操作模块示例
```csharp
using OfficeOpenXml;
public class ExcelOperations
{
public static string ReadCell(string filePath, string sheetName, string cellAddress)
{
using var package = new ExcelPackage(new FileInfo(filePath));
var worksheet = package.Workbook.Worksheets[sheetName];
return worksheet.Cells[cellAddress].Text;
}
}
```
---
### **3.5 前端开发Blazor 或 React.js**
1. **任务管理界面**
- 提供表单供用户提交任务(如文件复制任务)。
- 实时显示任务状态(通过 WebSocket 连接控制器)。
2. **API 集成**
- 使用 HttpClient 调用控制器 API。
- 使用 SignalR 实现 WebSocket 通信。
---
### **3.6 系统部署**
1. **容器化部署**
- 使用 Docker 构建 ASP.NET Core 控制器容器。
- 将机器人代理和控制器分别部署为独立的服务。
2. **Windows 系统优化**
- 将机器人代理注册为 Windows Service确保开机自动运行。
3. **安全配置**
- 使用 HTTPS 和 JWT 保护 API 接口。
- 对文件路径和模块调用进行权限验证。
---
## **4. 示例任务**
### 文件复制任务请求示例
#### 请求
```json
{
"method": "File.Copy",
"params": {
"source_path": "C:\\source\\file.txt",
"destination_path": "C:\\destination\\file.txt",
"overwrite": true
}
}
```
#### 响应
```json
{
"status": "success",
"message": "文件复制成功",
"data": {
"source_path": "C:\\source\\file.txt",
"destination_path": "C:\\destination\\file.txt",
"overwrite": true
},
"timestamp": "2024-04-28T12:00:00Z"
}
```