From 0a39e3e63bc9e37e95bb5629d90d39778e75677f Mon Sep 17 00:00:00 2001 From: ykxiao Date: Tue, 27 May 2025 17:12:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96json-rpc=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 5 ++ .idea/jsLibraryMappings.xml | 6 +++ .idea/jsonrpc-docs.iml | 15 ++++++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 +++ .nojekyll | 0 README.md | 62 +++++++++++++++++++++++ _media/logo.png | Bin 0 -> 26401 bytes _sidebar.md | 9 ++++ favicon.ico | Bin 0 -> 3958 bytes index.html | 48 ++++++++++++++++++ zh-cn/ai_function.md | 12 +++++ zh-cn/ai_service.md | 87 +++++++++++++++++++++++++++++++++ zh-cn/guide.md | 95 ++++++++++++++++++++++++++++++++++++ 14 files changed, 353 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/jsonrpc-docs.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .nojekyll create mode 100644 README.md create mode 100644 _media/logo.png create mode 100644 _sidebar.md create mode 100644 favicon.ico create mode 100644 index.html create mode 100644 zh-cn/ai_function.md create mode 100644 zh-cn/ai_service.md create mode 100644 zh-cn/guide.md diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..4efe3b5 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jsonrpc-docs.iml b/.idea/jsonrpc-docs.iml new file mode 100644 index 0000000..50d15f7 --- /dev/null +++ b/.idea/jsonrpc-docs.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..710161a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d7664f --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# 德木 JsonRpc 协议数据对接文档 + +## 服务中心 + +> 📌 **服务中心为 Nacos** +> 通过 `composer require hyperf/service-governance-nacos` 组件实现。 +> 详细用法参考 [Hyperf 文档](https://hyperf.io)。 + +🔹 一个服务可以同时作为 **服务提供者** 或 **消费者** +🔹 作为消费者时,可提供回调服务 + +--- + +## 公共接口服务 + +### 🧠 AI 服务 - `AiService` +- 提供查询、数据分析等功能 + +### 📱 EasyApp 服务 - `EasyAppService` +- 提供微信、钉钉、公众号等服务 + +### ☁️ OSS 服务 - `OssService` +- 文件上传、签名、回调 +- 文件下载、删除等常规操作 + +### 🖨️ 云打印服务 - `PrintService` +- 快麦云打印机支持 +- 打印回调、参数配置 +- *后续将接入更多打印机型号* + +### 📨 短信服务 - `SmsService` +- 阿里云短信发送 + +### ⚙️ 系统配置服务 - `SysConfigService` +- 各系统的第三方接口对接秘钥管理 + +### 👥 用户管理服务 - `UserAuthService` +- 公共用户逻辑服务 +- 子系统可调用统一用户服务 + +### 🌐 WebSocket 服务 - `WebSocketService` +- 公共 WS 服务模块 + +--- + +## 合同服务 + +### 📝 e签宝合同 - `ContractService` +- 签署业务合同常规流程对接 +- 支持多系统调用 + +### 📑 单据模版 - `OrderTempService` +- 模版处理服务 +- 根据业务需求动态生成文档 + +--- + +## 回调服务 + +> 🔄 **回调机制说明** +- 消费者端定义服务回调接口 +- 服务端成功执行后触发回调消费者服务 \ No newline at end of file diff --git a/_media/logo.png b/_media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..490bc3b17f78effb806b71dc2fe5532fcf5cc9a0 GIT binary patch literal 26401 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 + +* **开始接入** + * [前言]() + * [对接指南](zh-cn/guide) +* **Ai服务模块** + * [Ai服务接口功能](zh-cn/ai_function) + * [Ai服务接口列表](zh-cn/ai_service) +* **EasyApp接口服务** \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9f2bb34ec3603f934b2e7321085241cd22bce8fc GIT binary patch literal 3958 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 + + + + Document + + + + + + + +
+ + + + + + + diff --git a/zh-cn/ai_function.md b/zh-cn/ai_function.md new file mode 100644 index 0000000..79089df --- /dev/null +++ b/zh-cn/ai_function.md @@ -0,0 +1,12 @@ +# 🤖 接口功能说明 + +### 📋 接口功能概览 + +| 图标 | 方法名称 | 功能描述 | +|------|-----------------------------------|--------------------------| +| 🗣 | `aiChatPost` | 实时AI对话交互 | +| 📜 | `aiChatHistoryPost` | 获取历史对话记录 | +| 📑 | `aiContractRiskAnalysisPost` | 合同文件风险分析 | +| 🔍 | `aiContractRiskAnalysisResultPost` | 获取风险分析结果 | +| 💾 | `aiQuerySqlPost` | 自然语言转数据库查询语句 | +| 🗑️ | `aiChatDelete` | 删除指定对话记录 | \ No newline at end of file diff --git a/zh-cn/ai_service.md b/zh-cn/ai_service.md new file mode 100644 index 0000000..22c54a7 --- /dev/null +++ b/zh-cn/ai_service.md @@ -0,0 +1,87 @@ +# 🤖 AI 服务模块 + +## 🛠 服务接口列表 + +```php + + * @since 2025/4/7 + * @version 1.0.0 + */ + +declare(strict_types=1); + +namespace App\JsonRpc; + +interface AiServiceInterface +{ + /** + * 🗣 AI 智能对话 + * @param array $params 对话参数 { + * @type string $session_id 会话ID + * @type string $user_input 用户输入 + * @type int $model_type 模型类型 + * } + * @return void + */ + public function aiChatPost(array $params): void; + + /** + * 📜 获取AI对话历史记录 + * @param array $params 查询参数 { + * @type string $user_id 用户ID + * @type int $page 页码 + * @type int $page_size 每页数量 + * } + * @return array { + * @type array $list 对话记录列表 + * @type int $total 总记录数 + * } + */ + public function aiChatHistoryPost(array $params): array; + + /** + * 📑 智能合同风险分析 + * @param array $params 合同参数 { + * @type string $contract_id 合同ID + * @type string $file_url 合同文件URL + * } + * @return void + */ + public function aiContractRiskAnalysisPost(array $params): void; + + /** + * 🔍 获取合同风险分析结果 + * @param array $params 查询参数 { + * @type string $task_id 分析任务ID + * } + * @return array { + * @type int $risk_level 风险等级 + * @type array $risk_items 风险条目 + * } + */ + public function aiContractRiskAnalysisResultPost(array $params): array; + + /** + * 💾 生成数据库查询语句 + * @param array $params 生成参数 { + * @type string $question 自然语言问题 + * @type string $db_schema 数据库结构 + * } + * @return void + */ + public function aiQuerySqlPost(array $params): void; + + /** + * 🗑️ 删除AI对话记录 + * @param array $params 删除参数 { + * @type string $record_id 记录ID + * @type string $user_id 用户ID + * } + * @return void + */ + public function aiChatDelete(array $params): void; +} +``` \ No newline at end of file diff --git a/zh-cn/guide.md b/zh-cn/guide.md new file mode 100644 index 0000000..86b567b --- /dev/null +++ b/zh-cn/guide.md @@ -0,0 +1,95 @@ +# JSON-RPC 接口规范文档 + +## 📌 目录 +- [协议基础信息](#协议基础信息) +- [请求格式规范](#请求格式规范) +- [响应格式规范](#响应格式规范) + +## 协议基础信息 + +> 🌐 **JSON-RPC 通信规范** + +| 项目 | 值 | 说明 | +|-----------------|---------------------|--------------------------| +| 🔖 协议版本 | JSON-RPC 2.0 | 遵循最新2.0协议规范 | +| 📤 传输协议 | HTTP POST | 仅支持POST方法 | +| 🚪 服务端点 | `127.0.0.1:8848` | 生产环境请替换为实际地址 | +| 🕒 超时时间 | 5000ms | 建议客户端设置超时 | +| 📝 Content-Type | `application/json` | 必须严格设置此请求头 | + +--- + +## 请求格式规范 + +### 📦 请求示例 +```json +{ + "jsonrpc": "2.0", + "method": "ServiceName.method", + "params": { + "company_info": { + "id": 5, + "name": "德木智造", + "full_name": "苏州德木智造科技有限公司", + "domain": "drp", + "owner": "ykxiao", + "mobile": "13712279001", + "address": "江苏省苏州市太仓市太仓港港口开发区北环路20号809室", + "org_code": "91320585MAE1L3233J", + "email": "yk_9001@icloud.com" + }, + "userInfo": { + "id": 8, + "company_id": 5, + "user_type": 2, + "login_name": "ykk" + } + }, + "id": "req_123456" +} +``` + +## 响应格式规范 + +### ✅ 成功响应 +```json +{ + "jsonrpc": "2.0", + "result": { + "status": "success", + "data": { + "request_id": "req_123456", + "processed_at": "2023-08-20 15:30:45" + } + }, + "id": "req_123456" +} +``` + +### ❌ 错误响应 +```json +{ + "jsonrpc": "2.0", + "error": { + "code": -32000, + "message": "企业信息验证失败", + "data": { + "field": "org_code", + "reason": "统一信用代码格式不正确" + } + }, + "id": "req_123456" +} +``` + +### 🚨 错误码说明 + +| 错误码 | HTTP状态码 | 说明 | 解决方案 | +|---------|------------|-----------------------|-------------------------| +| -32700 | 400 | 解析错误 | 检查JSON格式 | +| -32600 | 400 | 无效请求 | 验证请求参数 | +| -32601 | 404 | 方法不存在 | 检查method名称 | +| -32602 | 400 | 无效参数 | 检查params参数 | +| -32603 | 500 | 内部错误 | 联系技术支持 | +| -32000 | 200 | 业务逻辑错误 | 查看error.data详情 | +| -32001 | 401 | 未授权访问 | 检查认证信息 | \ No newline at end of file