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