增加技术规范

This commit is contained in:
2025-07-16 22:58:41 +08:00
parent 112da388b8
commit cd3db265c7
3 changed files with 314 additions and 122 deletions

291
README.md
View File

@ -1,142 +1,191 @@
# 德木 JsonRpc 协议数据对接文档
# 开发技术规范文档
---
## 关于Hyperf
Hyperf 是一款基于 Swoole 协程服务器的 PHP 微服务框架,其主要特点如下:
- **高性能**:基于 Swoole 协程服务器,支持高并发、低延迟的处理能力。
- **灵活可扩展**:支持多种协议,如 HTTP、WebSocket、RPC 等,同时支持自定义协议。
- **组件化**:提供了丰富的组件,如缓存、数据库、队列等,方便开发者快速搭建应用。
- **易用性**:提供了简单易用的 API方便开发者快速开发应用。
- **社区活跃**:拥有活跃的社区,提供了丰富的文档和资源,方便开发者学习和使用。
## 关于JsonRpc
JsonRpc 是一种轻量级的远程过程调用协议,其主要特点如下:
- **轻量级**:协议简单,易于实现和维护。
- **跨语言**:支持多种语言,如 PHP、Java、Python 等。
- **支持异步**:支持异步调用,提高系统的并发能力。
- **支持多种传输协议**:支持 HTTP、WebSocket、TCP 等多种传输协议。
- **支持多种序列化方式**:支持 JSON、XML、Protobuf 等多种序列化方式。
- **支持多种认证方式**:支持 Basic Auth、OAuth、Token 等多种认证方式。
- **支持多种错误处理方式**:支持自定义错误处理方式,方便开发者调试和定位问题。
## 关于本项目
本项目是基于 Hyperf 框架实现的 JsonRpc 协议数据对接文档,其主要特点如下:
- **基于 Hyperf 框架**:基于 Hyperf 框架,提供了丰富的组件和工具,方便开发者快速开发应用。
- **支持多种协议**:支持多种协议,如 HTTP、WebSocket、RPC 等,方便开发者选择合适的协议。
## 德木仓储、金融、ERP系统重构初衷
- 重构前:基于 ThinkPHP/Laravel 框架,采用 MVC 架构,代码耦合度高,扩展性差,性能瓶颈明显。技术人员没有统一框架开发,开发人员按项目独立,不能相互支援,工作分配不均衡。
- 重构后:基于 Hyperf 框架,采用微服务架构,代码解耦,扩展性强,性能提升明显。统一技术框架,统一服务部署,减少服务器资源,降低成本。
## 初次会议记录
### 会议内容
#### 1、系统目前遇到的问题
- 独立多系统数据交互,处理同样的业务,不稳定且浪费资源。
- 框架相互独立,开发人员按项目独立,不能相互支援,工作分配不均衡。
- 框架独立,服务部署不统一,浪费服务器资源,拉高成本。
- 应用相互独立,微信等第三方服务重复对接,浪费开发资源和成本。
#### 2、讨论重构系统架构技术方案评估需求、人力及时间成本
- 系统架构统一,服务部署统一,减少服务器。
- 重新整理业务需求,统一后端服务,独立公共服务,减少微信等第三方对接。
- 讨论技术人员的工作分配,统一框架。
#### 3、短期解决方案
- **死锁问题**:临时结束进程,释放死锁。
- **资源占用**:限制资源、临时释放资源占用大的进程。
#### 遇到问题,解决问题,原有架构修修补补导致的问题:
- 风险大,随时间增加每个项目需投入开发人员修复迭代,熟悉每个项目代码,从根本解决不了问题。
- 成本增加,服务器资源和第三方服务每个项目独立,增加服务资源成本。
### 会议纪要:
1. **业务分析**:重构 - 满足新的需求重构旧的系统;原有基础迭代 - 按原有系统架构及逻辑优化。
2. **重构**获取客户数据分析客户对ERP系统使用画像若客户仅仅将其当做提货入口则讨论重构方案评估时间、人力成本。
3. **重构**:后端技术统一框架、抽取公共服务独立出来、统一部署。
> 本规范文档适用于技术团队及新引入技术的项目落地,目标是规范化公司技术选型、架构设计、开发流程,提升质量与效率,降低技术风险。
---
## 服务中心
## 📌 一、前言
> 📌 **服务中心为 Nacos**
> 通过 `composer require hyperf/service-governance-nacos` 组件实现。
> 详细用法参考 [Hyperf 文档](https://hyperf.io)。
### 目标与背景
规范化公司技术选型、架构设计、开发流程,提升质量与效率,降低技术风险。
🔹 一个服务可以同时作为 **服务提供者****消费者**
🔹 作为消费者时,可提供回调服务
### 适用范围
适用于技术团队及新引入技术的项目落地。
---
## 公共接口服务
## 🧱 二、技术栈选型与架构概览
### 🧠 AI 服务 - `AiService`
- 提供查询、数据分析等功能
- **查询功能**:支持对多种类型的数据进行高效查询,涵盖结构化数据(如数据库表)和非结构化数据(如日志文件)。用户可以根据不同的条件快速筛选和检索所需信息。
- **数据分析**:提供全面的数据分析能力,包括基础统计分析、趋势预测、聚类分析等。帮助用户从海量数据中提取有价值的见解,为决策提供有力支持。
### 2.1 技术体系结构图
平台整体架构图, Web 层、服务层、硬件接口层、中间件层、存储层、第三方接入等模块交互与部署方式。
### 📱 EasyApp 服务 - `EasyAppService`
- 提供微信、钉钉、公众号等服务
- **微信小程序服务**:支持小程序接口、消息订阅号等功能,包括消息推送、用户管理、菜单管理等。
- **钉钉服务**:支持钉钉机器人、钉钉消息推送等功能,包括消息发送、开放平台接口等。
- **公众号服务**:支持公众号消息推送、用户管理、菜单管理等功能,包括消息发送、用户管理、菜单管理等。
- **开放平台**:支持开放平台接口。
### 2.2 技术选型说明
### ☁️ OSS 服务 - `OssService`
- 文件上传、签名、回调
- 文件下载、删除等常规操作
- **文件上传**:支持文件上传功能,包括文件上传、文件签名、文件回调等功能。
- **文件下载**:支持文件下载功能,包括文件下载、文件删除等功能。
- **文件签名**:支持文件签名功能,包括文件签名、文件回调等功能。
- **文件回调**:支持文件回调功能,包括文件回调、文件删除等功能。
### 🖨️ 云打印服务 - `PrintService`
- 快麦云打印机支持
- 打印回调、参数配置
- **打印回调**:支持打印回调功能,包括打印回调、打印参数配置等功能。
- **打印参数配置**:支持打印参数配置功能,包括打印参数配置、打印回调等功能。
- *后续将接入更多打印机型号*
### 📨 短信服务 - `SmsService`
- 阿里云短信发送
- 短信签名、模板配置
- **短信签名**:支持短信签名功能,包括短信签名、短信模板配置等功能。
- **短信模板配置**:支持短信模板配置功能,包括短信模板配置、短信签名等功能。
- *后续将接入更多短信服务*
### ⚙️ 系统配置服务 - `SysConfigService`
- 各系统的第三方接口对接秘钥管理
- **系统秘钥管理**:支持系统秘钥管理功能,包括系统秘钥管理、系统配置等功能。
### 👥 用户管理服务 - `UserAuthService`
- 公共用户逻辑服务
- 子系统可调用统一用户服务
- **用户管理**:支持用户管理功能,包括用户管理、用户登录、用户注册等功能。
### 🌐 WebSocket 服务 - `WebSocketService`
- 公共 WS 服务模块
- 子系统可调用统一 WS 服务
- **WebSocket 服务**:支持 WebSocket 服务功能,包括 WebSocket 服务、WebSocket 消息推送等功能。
| 模块 | 技术选型 | 说明 |
|------|--------------------------------------------------------------------|------|
| Web 框架 | PHP + Swoole + Hyperf | 高并发、协程模型,用于高性能后端服务 |
| 硬件上位机开发 | C# + C++ | C# 用于可视化控制界面C++ 用于底层驱动与 TCP 通信模块 |
| 前端框架 | Vue 3.x + TypeScript/JavaScript + Vuex + Vue Router + Element Plus | 前端开发栈,响应式与组件化开发 |
| 对外接口 | RESTful API | 标准化输出格式,统一鉴权方案 |
| 数据库 | MySQLRDS + Redis缓存+分布式锁) | 用数据库架构 |
| 中间件 | RabbitMQ | 异步任务队列、事件消息总线 |
| 服务发现与配置中心 | Nacos | 服务注册发现 + 动态配置中心 |
| 硬件通信 | TCP 服务 | 所有硬件上位机通过统一 TCP 服务接入,遵循协议解析规范 |
---
## 合同服务
## ☁️ 三、云服务与第三方服务使用规范
### 📝 e签宝合同 - `ContractService`
- 签署业务合同常规流程对接
- 支持多系统调用
- **合同服务**:支持合同服务功能,包括合同服务、合同签署等功能。
- **合同模版**:支持合同模版功能,包括合同模版、合同签署等功能。
### 3.1 阿里云资源管理
### 📑 单据模版 - `OrderTempService`
- 模版处理服务
- 根据业务需求动态生成文档
- **单据模版**:支持单据模版功能,包括单据模版、单据生成等功能。
- **ECS 实例命名规则**`<环境>-<业务>-<编号>`prod-order-01
- **资源标签管理**:按业务、环境、负责人分类
- **网络安全组规则**:最小权限原则,仅开放必要端口,需开放端口时,需由技术审批
### 3.2 第三方基础服务
- **阿里短信服务**:统一 SDK、消息模板管理、错误码处理机制
- **e签宝电子签名**:鉴权方式、回调接口、数据可追溯性管理
---
## 回调服务
## 💰 四、采购审批流程
> 🔄 **回调机制说明**
- 消费者端定义服务回调接口
- 服务端成功执行后触发回调消费者服务
- 所有第三方服务需走审批流程:**技术经理 → 总监审批 → 录入内部采购系统**
- 保留完整审批链,评估成本、替代方案与风险
- 采购记录需与采购管理系统对接
---
## 📐 五、系统设计与文档规范
### 5.1 需求分析文档
- 使用统一模板,输出功能描述、用户角色、流程图、非功能性需求等
### 5.2 接口设计规范
- 遵循 RESTful 设计原则
- 使用统一接口文档框架Apipost
- 支持自动代码生成、Mock 调试、文档同步更新
- 硬件TCP接口使用统一接口规范签名验签
### 5.3 架构决策记录
- 流程记录重大技术决策
- 内容包括:背景、讨论、决定等
---
## 🧑‍💻 六、开发规范与代码结构
### 6.1 目录结构(以自动化/MES/生产系统为例)
- 本文基于 Hyperf 官方框架结构,并结合社区最佳实践,逐一说明每个目录/文件的职责与用途。
```text
├── .devcontainer/
├── .github/
├── app/
├── bin/
├── config/
├── migrations/
├── public/
├── runtime/
├── storage/
├── test/
├── .env.example
├── composer.json
├── phpunit.xml.dist
└── ...
```
### 6.2 Hyperf 项目目录结构详解 📁
| **路径** | **类型** | **功能说明** |
|------------------------|----------|--------------|
| `.devcontainer/` | 文件夹 | VS Code 容器配置,统一开发环境 |
| `.github/` | 文件夹 | CI/CD如 GitHub Actions、Issue 模板配置 |
| `composer.json` | 文件 | PHP 包依赖配置 |
| `.env.example` | 文件 | 环境变量模板,供复制为 `.env` 使用 |
| `phpunit.xml.dist` | 文件 | PHPUnit 测试配置 |
| **路径** | **类型** | **功能说明** |
|------------------------|----------|--------------------------------|
| `app/` | 文件夹 | 应用主要业务代码入口,包含以下子模块 |
| `app/Amqp/` | 文件夹 | AMQP 消息发送/消费任务类 |
| `app/Aspect/` | 文件夹 | AOP 切面逻辑(如日志、鉴权) |
| `app/Command/` | 文件夹 | CLI 自定义命令脚本 |
| `app/Constants/` | 文件夹 | 全局常量定义(状态码、消息类型等) |
| `app/Context/` | 文件夹 | 请求上下文管理(如 QID、用户信息 |
| `app/Controller/` | 文件夹 | HTTP 接口控制层 |
| `app/Dao/` | 文件夹 | 直接数据库访问层封装 |
| `app/Exception/` | 文件夹 | 自定义异常类和统一逻辑 |
| `app/Helpers/` | 文件夹 | 通用工具函数 |
| `app/Job/` | 文件夹 | 定时任务或队列任务执行类 |
| `app/JsonRpc/` | 文件夹 | JSON-RPC 接口,供硬件或外部调用 |
| `app/Listener/` | 文件夹 | 事件监听器与触发机制 |
| `app/Log/` | 文件夹 | 日志入口、格式化、QID 链路 |
| `app/Middleware/` | 文件夹 | HTTP/MQ 中间件(限流、鉴权、异常处理) |
| `app/Model/` | 文件夹 | ORM 映射层,对应数据库表 |
| `app/Process/` | 文件夹 | 自定义进程(如 Socket、守护进程 |
| `app/Repository/` | 文件夹 | Repository 或 DAO 层,封装 Model 调用 |
| `app/Request/` | 文件夹 | 接口参数验证对象 |
| `app/Scope/` | 文件夹 | Eloquent 范畴定义global/local |
| `app/Service/` | 文件夹 | 业务逻辑层,处理 Controller 请求 |
| `app/Task/` | 文件夹 | 异步任务,配合 Scheduler 使用 |
| `app/Utils/` | 文件夹 | 独立于业务的工具逻辑封装 |
- 代码调用层级Controller → Repository → Service → Model
- Repository 不直接操作 DB由 Service 统一调用 Model
### 6.3 命名与依赖注入
- 类命名:以 `Repository`, `Dao`, `Service`, `Controller`, `Model`... 后缀命名
- 使用 `@property` 注解实现隐式 DI提高 IDE 识别与导航
### 6.4 响应与日志规范
- 统一响应出口:`App\Core\Response`
- 示例代码:
```php
namespace App\Core;
class Response {
public static function success($data = null, $msg = 'OK', $code = 0): array {
return compact('code', 'msg', 'data');
}
public static function error($code = -1, $msg = 'Error', $data = null): array {
return compact('code', 'msg', 'data');
}
}
```
- 中间件在请求到达 Controller 前生成 qid唯一请求 ID写入上下文日志需携带 qid 用于链路追踪
## 🔨 七、测试策略
- 单元测试Service 层、关键工具类、协议解析模块覆盖。
- 集成测试API 接口调试、数据库交互、消息队列流程。
- 性能测试压力测试脚本wrk、Swoole 并发 benchmark。
- 协议连通:硬件 TCP 接口测试工具、模拟场景以及并发测试。
## 🚫 八、安全与合规
- 配置隔离:生产环境用配置中心读取,禁止硬编码。
- 鉴权方式:对外接口通过 OAuth2/JWT + IP 白名单 + 签名方式同网关。
- 硬件接入安全TCP 接口需做协议签名校验,防重放、防 DOS、防配置漏洞攻击。
- 数据保护:敏感数据如手机号、身份证在数据库存储时采用加密。
## 🎓 久、文档与知识管理
- 所有文档采用 Markdown 管理,统一托管于 Git 仓库。
- 配合 Docsify 等文档生成方案,形成知识库。
- 技术规范等文档均版本化管理、长期维护。
## 🚩 十一、组织与流程管控
- 技术规范由 技术总监 起草,由技术团队评审、讨论完善,由总监批准。
- 新技术、新框架、新工具需要流程引入(决策/评审),并记录至技术规范文档。
- 接口或框架调整须形成文档、明确迁移路径、兼容性策略。

View File

@ -1,7 +1,8 @@
<!-- docs/_sidebar.md -->
* **开始接入**
* [前言]()
* [开发规范]()
* [关于](about)
* [对接指南](zh-cn/guide)
* **Ai服务模块**
* [Ai服务接口功能](zh-cn/ai_function)

142
about.md Normal file
View File

@ -0,0 +1,142 @@
# 德木 JsonRpc 协议数据对接文档
---
## 关于项目
Hyperf 是一款基于 Swoole 协程服务器的 PHP 微服务框架,其主要特点如下:
- **高性能**:基于 Swoole 协程服务器,支持高并发、低延迟的处理能力。
- **灵活可扩展**:支持多种协议,如 HTTP、WebSocket、RPC 等,同时支持自定义协议。
- **组件化**:提供了丰富的组件,如缓存、数据库、队列等,方便开发者快速搭建应用。
- **易用性**:提供了简单易用的 API方便开发者快速开发应用。
- **社区活跃**:拥有活跃的社区,提供了丰富的文档和资源,方便开发者学习和使用。
## 关于JsonRpc
JsonRpc 是一种轻量级的远程过程调用协议,其主要特点如下:
- **轻量级**:协议简单,易于实现和维护。
- **跨语言**:支持多种语言,如 PHP、Java、Python 等。
- **支持异步**:支持异步调用,提高系统的并发能力。
- **支持多种传输协议**:支持 HTTP、WebSocket、TCP 等多种传输协议。
- **支持多种序列化方式**:支持 JSON、XML、Protobuf 等多种序列化方式。
- **支持多种认证方式**:支持 Basic Auth、OAuth、Token 等多种认证方式。
- **支持多种错误处理方式**:支持自定义错误处理方式,方便开发者调试和定位问题。
## 关于本项目
本项目是基于 Hyperf 框架实现的 JsonRpc 协议数据对接文档,其主要特点如下:
- **基于 Hyperf 框架**:基于 Hyperf 框架,提供了丰富的组件和工具,方便开发者快速开发应用。
- **支持多种协议**:支持多种协议,如 HTTP、WebSocket、RPC 等,方便开发者选择合适的协议。
## 德木仓储、金融、ERP系统重构初衷
- 重构前:基于 ThinkPHP/Laravel 框架,采用 MVC 架构,代码耦合度高,扩展性差,性能瓶颈明显。技术人员没有统一框架开发,开发人员按项目独立,不能相互支援,工作分配不均衡。
- 重构后:基于 Hyperf 框架,采用微服务架构,代码解耦,扩展性强,性能提升明显。统一技术框架,统一服务部署,减少服务器资源,降低成本。
## 初次会议记录
### 会议内容
#### 1、系统目前遇到的问题
- 独立多系统数据交互,处理同样的业务,不稳定且浪费资源。
- 框架相互独立,开发人员按项目独立,不能相互支援,工作分配不均衡。
- 框架独立,服务部署不统一,浪费服务器资源,拉高成本。
- 应用相互独立,微信等第三方服务重复对接,浪费开发资源和成本。
#### 2、讨论重构系统架构技术方案评估需求、人力及时间成本
- 系统架构统一,服务部署统一,减少服务器。
- 重新整理业务需求,统一后端服务,独立公共服务,减少微信等第三方对接。
- 讨论技术人员的工作分配,统一框架。
#### 3、短期解决方案
- **死锁问题**:临时结束进程,释放死锁。
- **资源占用**:限制资源、临时释放资源占用大的进程。
#### 遇到问题,解决问题,原有架构修修补补导致的问题:
- 风险大,随时间增加每个项目需投入开发人员修复迭代,熟悉每个项目代码,从根本解决不了问题。
- 成本增加,服务器资源和第三方服务每个项目独立,增加服务资源成本。
### 会议纪要:
1. **业务分析**:重构 - 满足新的需求重构旧的系统;原有基础迭代 - 按原有系统架构及逻辑优化。
2. **重构**获取客户数据分析客户对ERP系统使用画像若客户仅仅将其当做提货入口则讨论重构方案评估时间、人力成本。
3. **重构**:后端技术统一框架、抽取公共服务独立出来、统一部署。
---
## 服务中心
> 📌 **服务中心为 Nacos**
> 通过 `composer require hyperf/service-governance-nacos` 组件实现。
> 详细用法参考 [Hyperf 文档](https://hyperf.io)。
🔹 一个服务可以同时作为 **服务提供者****消费者**
🔹 作为消费者时,可提供回调服务
---
## 公共接口服务
### 🧠 AI 服务 - `AiService`
- 提供查询、数据分析等功能
- **查询功能**:支持对多种类型的数据进行高效查询,涵盖结构化数据(如数据库表)和非结构化数据(如日志文件)。用户可以根据不同的条件快速筛选和检索所需信息。
- **数据分析**:提供全面的数据分析能力,包括基础统计分析、趋势预测、聚类分析等。帮助用户从海量数据中提取有价值的见解,为决策提供有力支持。
### 📱 EasyApp 服务 - `EasyAppService`
- 提供微信、钉钉、公众号等服务
- **微信小程序服务**:支持小程序接口、消息订阅号等功能,包括消息推送、用户管理、菜单管理等。
- **钉钉服务**:支持钉钉机器人、钉钉消息推送等功能,包括消息发送、开放平台接口等。
- **公众号服务**:支持公众号消息推送、用户管理、菜单管理等功能,包括消息发送、用户管理、菜单管理等。
- **开放平台**:支持开放平台接口。
### ☁️ OSS 服务 - `OssService`
- 文件上传、签名、回调
- 文件下载、删除等常规操作
- **文件上传**:支持文件上传功能,包括文件上传、文件签名、文件回调等功能。
- **文件下载**:支持文件下载功能,包括文件下载、文件删除等功能。
- **文件签名**:支持文件签名功能,包括文件签名、文件回调等功能。
- **文件回调**:支持文件回调功能,包括文件回调、文件删除等功能。
### 🖨️ 云打印服务 - `PrintService`
- 快麦云打印机支持
- 打印回调、参数配置
- **打印回调**:支持打印回调功能,包括打印回调、打印参数配置等功能。
- **打印参数配置**:支持打印参数配置功能,包括打印参数配置、打印回调等功能。
- *后续将接入更多打印机型号*
### 📨 短信服务 - `SmsService`
- 阿里云短信发送
- 短信签名、模板配置
- **短信签名**:支持短信签名功能,包括短信签名、短信模板配置等功能。
- **短信模板配置**:支持短信模板配置功能,包括短信模板配置、短信签名等功能。
- *后续将接入更多短信服务*
### ⚙️ 系统配置服务 - `SysConfigService`
- 各系统的第三方接口对接秘钥管理
- **系统秘钥管理**:支持系统秘钥管理功能,包括系统秘钥管理、系统配置等功能。
### 👥 用户管理服务 - `UserAuthService`
- 公共用户逻辑服务
- 子系统可调用统一用户服务
- **用户管理**:支持用户管理功能,包括用户管理、用户登录、用户注册等功能。
### 🌐 WebSocket 服务 - `WebSocketService`
- 公共 WS 服务模块
- 子系统可调用统一 WS 服务
- **WebSocket 服务**:支持 WebSocket 服务功能,包括 WebSocket 服务、WebSocket 消息推送等功能。
---
## 合同服务
### 📝 e签宝合同 - `ContractService`
- 签署业务合同常规流程对接
- 支持多系统调用
- **合同服务**:支持合同服务功能,包括合同服务、合同签署等功能。
- **合同模版**:支持合同模版功能,包括合同模版、合同签署等功能。
### 📑 单据模版 - `OrderTempService`
- 模版处理服务
- 根据业务需求动态生成文档
- **单据模版**:支持单据模版功能,包括单据模版、单据生成等功能。
---
## 回调服务
> 🔄 **回调机制说明**
- 消费者端定义服务回调接口
- 服务端成功执行后触发回调消费者服务