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

6.9 KiB
Raw Permalink Blame History

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 环境支持
    • 使用 PowerShellWindows Scripting Host 实现系统级自动化任务(如文件操作、注册表操作)。
  2. UI 自动化
    • UIAutomation.NET Framework 提供):
      • 适合自动化桌面应用程序。
    • Selenium WebDriver
      • 用于 Web 浏览器的自动化操作。
  3. OCR 处理
    • Tesseract OCR + Emgu.CV(适配 C# 的 OCR 和计算机视觉库)。

2. 系统架构

2.1 调整后的分层架构

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 数据流设计

数据流动示意图

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

文件操作模块示例

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

  1. 任务管理界面

    • 提供表单供用户提交任务(如文件复制任务)。
    • 实时显示任务状态(通过 WebSocket 连接控制器)。
  2. API 集成

    • 使用 HttpClient 调用控制器 API。
    • 使用 SignalR 实现 WebSocket 通信。

3.6 系统部署

  1. 容器化部署

    • 使用 Docker 构建 ASP.NET Core 控制器容器。
    • 将机器人代理和控制器分别部署为独立的服务。
  2. Windows 系统优化

    • 将机器人代理注册为 Windows Service确保开机自动运行。
  3. 安全配置

    • 使用 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"
}